- // ==UserScript==
- // @name PTH User tagging
- // @version 1.3
- // @description Tag, ignore, highlight, and change avatars for users on PTH and PTP
- // @author Chameleon
- // @include http*://redacted.ch/*
- // @include http*://passthepopcorn.me/*
- // @grant none
- // @namespace https://greasyfork.org/users/87476
- // ==/UserScript==
-
- var current_site;
-
- (function() {
- 'use strict';
- var h=window.location.host;
- if(h==="redacted.ch")
- current_site='RED';
- else if(h==="passthepopcorn.me")
- current_site='PTP';
-
- window.setTimeout(checkHeight.bind(undefined, document.body.clientHeight), 800);
-
- if(window.location.href.indexOf('user.php?id=') != -1)
- {
- var username;
- if(current_site==="RED")
- username=document.getElementsByTagName('h2')[0].getElementsByTagName('a')[0].textContent;
- else if(current_site==="PTP")
- username=document.getElementsByTagName('h2')[0].textContent;
- var a=document.createElement('a');
- a.href='javascript:void(0);';
- a.addEventListener('click', openTags.bind(undefined, username, undefined), false);
- if(current_site==="RED")
- {
- a.innerHTML = '[User tags]';
- document.getElementsByClassName('linkbox')[0].appendChild(a);
- }
- else if(current_site==="PTP")
- {
- var e=document.getElementsByClassName('linkbox')[0];
- e.appendChild(document.createTextNode(' ['));
- a.innerHTML='User Tags';
- e.appendChild(a);
- e.appendChild(document.createTextNode(']'));
- }
-
- var avatar;
- if(current_site==="RED")
- avatar=document.getElementsByClassName('box_image_avatar')[0].getElementsByTagName('img')[0];
- else if(current_site==="PTP")
- avatar=document.getElementsByClassName('sidebar-cover-image')[0];
- avatar.setAttribute('originalAvatar', avatar.src);
-
- setProfile();
- }
-
- //var posts=document.getElementsByClassName('forum_post');
- var posts=document.querySelectorAll('.forum_post, .forum-post');
- for(var i=0; i<posts.length; i++)
- {
- var p=posts[i];
- if(p.getAttribute('class').indexOf('preview_wrap') != -1)
- continue;
- if(p.id=='reply_box')
- continue;
- var links;
- if(current_site==="RED")
- links=p.getElementsByTagName('td')[0].firstElementChild;
- else if(current_site==="PTP")
- links=p.getElementsByTagName('span')[0];
- var username=p.getElementsByTagName('strong')[0].getElementsByTagName('a')[0].textContent;
-
- var a=document.createElement('a');
- a.href='javascript:void(0);';
- a.innerHTML='Tag';
- if(current_site==="PTP")
- a.innerHTML='[Tag]';
- a.setAttribute('class', 'brackets');
- a.addEventListener('click', openTags.bind(undefined, username, p), false);
- links.appendChild(document.createTextNode(' - '));
- links.appendChild(a);
-
- var img;
- if(current_site==="RED")
- img=p.getElementsByTagName('img')[0];
- else if(current_site==="PTP")
- img=p.getElementsByClassName('forum-post__avatar__image')[0];
- if(img)
- {
- img.setAttribute('originalAvatar', img.src);
- }
- }
- /*
- var avatars=document.getElementsByClassName('avatar');
- for(var i=0; i<avatars.length; i++)
- {
- var avatar=avatars[i];
- addTagLinks(avatar);
- var img=avatar.getElementsByTagName('img')[0];
- if(img)
- {
- img.setAttribute('originalAvatar', img.src);
- }
- }*/
-
- addTags();
- })();
-
- function setProfile()
- {
- if(window.location.href.indexOf('user.php?id=') === -1)
- return;
- var user;
- if(current_site==="RED")
- user=document.getElementsByTagName('h2')[0].getElementsByTagName('a')[0].textContent;
- else if(current_site==="PTP")
- user=document.getElementsByTagName('h2')[0].textContent;
- user=getUser(user)[0];
- var avatar;
- if(current_site==="RED")
- avatar=document.getElementsByClassName('box_image_avatar')[0].getElementsByTagName('img')[0];
- else if(current_site==="PTP")
- avatar=document.getElementsByClassName('sidebar-cover-image')[0];
- if(user.replacementAvatar)
- {
- avatar.src=user.replacementAvatar;
- }
- else
- {
- avatar.src=avatar.getAttribute('originalAvatar');
- }
- if(user.usernameColour)
- {
- var username;
- if(current_site==="RED")
- username=document.getElementsByTagName('h2')[0].getElementsByTagName('a')[0];
- else if(current_site==="PTP")
- username=document.getElementsByTagName('h2')[0];
- username.style.color=user.usernameColour;
- }
- if(user.customTitle)
- {
- document.getElementsByClassName('user_title')[0].innerHTML='('+user.customTitle+')';
- }
- }
-
-
- function checkHeight(height)
- {
- if(height != document.body.clientHeight)
- {
- pageResized();
- }
-
- window.setTimeout(checkHeight.bind(undefined, document.body.clientHeight), 800);
- }
- /*
- function addTagLinks(avatar)
- {
- var tags=getTags();
-
- var postTable=avatar.parentNode;
- while(postTable.tagName != 'TABLE')
- postTable=postTable.parentNode;
- if(postTable.getAttribute('id') == 'preview_wrap_0')
- return;
- var username=postTable.getElementsByTagName('strong')[0].textContent;
-
- var id=postTable.getAttribute('id').split('post')[1];
-
- var a=document.createElement('a');
- a.setAttribute('class', 'tagLink');
- a.setAttribute('postId', id);
- var place = avatar.getBoundingClientRect();
- var style='position: absolute; z-index: 50000000; top: '+(place.top+window.scrollY)+'px; left: '+(place.left+window.scrollX)+'px; width: '+avatar.clientWidth+'px;';
- style+='text-align: center; color: blue; background: rgba(200,200,200,0.8); border-radius: 0px 0px 10px 10px;';
- a.setAttribute('style', style);
-
- a.innerHTML = 'Show user tags';
- a.href='javascript:void(0);';
- a.addEventListener('click', openTags.bind(undefined, username, postTable), false);
- document.body.appendChild(a);
- a.style.display='none';
-
- avatar.addEventListener('mouseover', mouseOver.bind(undefined, a), false);
- avatar.addEventListener('mouseout', mouseOut.bind(undefined, avatar, a), false);
- }
- */
- function pageResized()
- {
- /*var tagLinks=document.getElementsByClassName('tagLink');
- for(var i=0; i<tagLinks.length; i++)
- {
- var t=tagLinks[i];
- var id=t.getAttribute('postId');
- var postTable=document.getElementById('post'+id);
- var avatar=postTable.getElementsByClassName('avatar')[0];
-
- var place = avatar.getBoundingClientRect();
- var style='position: absolute; z-index: 50000000; top: '+(place.top+window.scrollY)+'px; left: '+(place.left+window.scrollX)+'px; width: '+avatar.clientWidth+'px;';
- style+='text-align: center; color: blue; background: rgba(200,200,200,0.8); border-radius: 0px 0px 10px 10px;';
- t.setAttribute('style', style);
- t.style.display='none';
- }*/
-
- resetTags();
- addTags();
- }
-
- function resetTags()
- {
- var ignoredQuotes=document.getElementsByClassName('toggleQuote');
- for(var i=0; i<ignoredQuotes.length; i++)
- {
- var ig=ignoredQuotes[i];
- ig.nextElementSibling.style.display='';
- ig.parentNode.removeChild(ig);
- }
-
- //var posts=document.getElementsByClassName('forum_post');
- var posts=document.querySelectorAll('.forum_post, .forum-post');
- var length;
- if(current_site==="RED")
- length=posts.length-1;
- else if(current_site==="PTP")
- length=posts.length;
- for(var i=0; i<length; i++)
- {
- var p=posts[i];
- var avatar;
- if(current_site==="RED")
- avatar=p.getElementsByClassName('avatar')[0];
- else if(current_site==="PTP")
- avatar=p.getElementsByClassName('forum-post__avatar')[0];
-
- var postTable=p;
-
- if(postTable.getAttribute('id') == 'preview_wrap_0')
- continue;
- if(p.id=='reply_box')
- continue;
- var u=postTable.getElementsByTagName('strong')[0].getElementsByTagName('a')[0];
- var username=u.textContent;
-
-
- var c=postTable.getElementsByClassName('user_title');
- if(c.length > 0)
- {
- var orig=c[0].getAttribute('original');
- if(orig)
- c[0].innerHTML=orig;
- }
-
- if(avatar)
- {
- var img=avatar.getElementsByTagName('img')[0];
- if(img)
- {
- var orig=img.getAttribute('originalAvatar');
- if(orig)
- img.src=img.getAttribute('originalAvatar');
- }
- }
- u.setAttribute('style', '');
- postTable.setAttribute('style', '');
- var tr;
- if(current_site==="RED")
- tr=postTable.getElementsByTagName('tr')[1];
- else if(current_site==="PTP")
- tr=postTable.getElementsByClassName('forum-post__avatar-and-body')[0];
- if(tr.getAttribute('stayHidden')!=="true")
- {
- tr.style.display='';
- }
- var id=postTable.getAttribute('id').split('post')[1];
- var tag=document.getElementById('tag'+id);
- if(tag)
- tag.parentNode.removeChild(tag);
- }
- var hardIgnores=document.getElementsByClassName('hardIgnoreLink');
- for(var i=0; i<hardIgnores.length; i++)
- {
- var h=hardIgnores[i];
- h.parentNode.removeChild(h);
- }
- }
-
- function addTags()
- {
- var quotes=document.getElementsByTagName('blockquote');
- for(var i=0; i<quotes.length; i++)
- {
- var q=quotes[i];
- var username = q.previousElementSibling;
- if(username)
- {
- username=username.textContent.split(' ')[0];
- var user=getUser(username)[0];
- if(user.softIgnore || user.hardIgnore)
- {
- var a=document.createElement('a');
- a.href='javascript:void(0);';
- a.textContent='<Ignored>';
- a.addEventListener('click', toggleQuote.bind(undefined, a, q), false);
- a.setAttribute('class', 'toggleQuote');
- q.parentNode.insertBefore(a, q);
- if(q.getAttribute('unIgnored')=="true")
- {
- a.textContent='Ignore';
- }
- else
- q.style.display='none';
- }
- }
- }
-
- //var posts=document.getElementsByClassName('forum_post');
- var posts=document.querySelectorAll('.forum_post, .forum-post');
- var length;
- if(current_site==="RED")
- length=posts.length-1;
- else if(current_site==="PTP")
- length=posts.length;
- for(var i=0; i<length; i++)
- {
- var p=posts[i];
- var avatar;
- if(current_site==="RED")
- avatar=p.getElementsByClassName('avatar')[0];
- else if(current_site==="PTP")
- avatar=p.getElementsByClassName('forum-post__avatar')[0];
-
- var postTable=p;
-
- if(postTable.getAttribute('id') == 'preview_wrap_0')
- continue;
- if(p.id=='reply_box')
- continue;
- var u=postTable.getElementsByTagName('strong')[0].getElementsByTagName('a')[0];
- var username=u.textContent;
-
- var user=getUser(username)[0];
- if(user.replacementAvatar && avatar)
- {
- avatar.getElementsByTagName('img')[0].src=user.replacementAvatar;
- }
- if(user.usernameColour)
- {
- var style=u.getAttribute('style');
- if(!style)
- style='';
- u.setAttribute('style', style+' color: '+user.usernameColour+';');
- }
- if(user.postHighlight)
- {
- var style=postTable.getAttribute('style');
- postTable.setAttribute('style', 'box-shadow: '+user.postHighlight+' 0 0 5px 1px !important;');
- }
- if(user.customTitle)
- {
- var c=postTable.getElementsByClassName('user_title');
- if(c.length > 0)
- c=c[0];
- else
- {
- c=document.createElement('span');
- c.setAttribute('class', 'user_title');
- var before=postTable.getElementsByClassName('time')[0];
- before.parentNode.insertBefore(c, before);
- }
- if(!c.getAttribute('original'))
- c.setAttribute('original', c.innerHTML);
-
- c.innerHTML='('+user.customTitle+')';
- }
- if(user.tag && user.showTag)
- {
- var div=document.createElement('div');
- var id=postTable.getAttribute('id').split('post')[1];
- div.setAttribute('id', 'tag'+id);
- div.innerHTML = user.tag.replace(/\n/g,'<br />')+' ';
- if(!user.showTagInHeader)
- {
- var before=document.getElementById('bar'+id).firstElementChild;
- before.parentNode.insertBefore(div, before);
- div.setAttribute('style', 'display: inline-block; margin-right: 5px;');
- div.setAttribute('class', 'r10');
- }
- else
- {
- var first;
- if(!avatar)
- {
- avatar=postTable;
- first=avatar;
- }
- else
- first=avatar.firstElementChild;
- var place = postTable.getBoundingClientRect();
- var width=300;
- var left=place.left+window.scrollX-width-20;
- if(left<0)
- left=0;
- var style='position: absolute; z-index: 1001; top: '+(place.top+window.scrollY)+'px; left: '+left+'px; max-width: '+width+'px; text-align: center; color: white; background: rgba(20,20,20,0.7); border-radius: 20px 0px 0px 20px;';
- style+='font-size: large; box-shadow: inset '+(user.postHighlight ? user.postHighlight : 'black')+' 0 0 20px 0; padding: 10px;';
- div.setAttribute('style', style);
- document.body.appendChild(div);
- var avatarHeight=first.clientHeight;
- var top=place.top+window.scrollY+((avatarHeight-div.clientHeight)/2);
- div.style.top=top+'px';
- if(div.clientWidth < width)
- {
- left=place.left+window.scrollX-div.clientWidth;
- if(left<0)
- left=0;
- div.style.left=left+'px';
- }
- }
- }
- if(user.softIgnore)
- {
-
- var tr;
- if(current_site==="RED")
- tr=postTable.getElementsByTagName('tr')[1];
- else if(current_site==="PTP")
- tr=postTable.getElementsByClassName('forum-post__avatar-and-body')[0];
- tr.style.display='none';
- }
- if(user.hardIgnore)
- {
- var a=document.createElement('a');
- var hr=document.createElement('hr');
- hr.setAttribute('title', username);
- a.appendChild(hr);
- a.setAttribute('class', 'hardIgnoreLink');
- a.href=postTable.getElementsByTagName('strong')[0].getElementsByTagName('a')[0].href;
- postTable.parentNode.insertBefore(a, postTable);
- postTable.style.display='none';
- }
- }
- }
-
- function toggleQuote(a, q)
- {
- if(a.innerHTML.indexOf('Ignored') != -1)
- {
- a.textContent = 'Ignore';
- q.style.display='';
- q.setAttribute('unIgnored', "true");
- }
- else
- {
- a.textContent = '<Ignored>';
- q.style.display='none';
- q.setAttribute('unIgnored', "false");
- }
- }
-
- function setEmpty(input)
- {
- input.value="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'/%3E";
- input.dispatchEvent(new Event('change'));
- }
-
- function openTags(username, postTable)
- {
- var div=document.getElementById('chameleonTagsDiv');
- if(!div)
- {
- div=document.createElement('div');
- div.setAttribute('id', 'chameleonTagsDiv');
- document.body.appendChild(div);
- div.setAttribute('style', 'position: fixed; top: 20px; margin: auto; left: 0; right: 0; text-align: center; background: rgba(0,0,0,0.7); color: white; width: 80%; z-index: 1000;');
- }
- div.innerHTML = '<h2>'+username+'\'s Tags<br />';
-
- var user=getUser(username)[0];
-
- var input=document.createElement('input');
- input.placeholder='Replacement avatar URL';
- input.value = user.replacementAvatar ? user.replacementAvatar : '';
- input.addEventListener('change', changeTags.bind(undefined, div, username, postTable, input), false);
- var a=document.createElement('a');
- a.href='javascript:void(0);';
- a.setAttribute('style', 'display:block;');
- a.innerHTML="Set avatar to empty image";
- a.addEventListener('click', setEmpty.bind(undefined, input));
- div.appendChild(a);
- div.appendChild(input);
-
- div.appendChild(document.createElement('br'));
-
- var input=document.createElement('input');
- div.appendChild(input);
- input.placeholder='Replacement custom title';
- input.value = user.customTitle ? user.customTitle : '';
- input.addEventListener('change', changeTags.bind(undefined, div, username, postTable, input), false);
-
- div.appendChild(document.createElement('br'));
-
- var input=document.createElement('input');
- div.appendChild(input);
- input.placeholder='Post highlight colour';
- input.value = user.postHighlight ? user.postHighlight : '';
- input.addEventListener('change', changeTags.bind(undefined, div, username, postTable, input), false);
-
- div.appendChild(document.createElement('br'));
-
- var input=document.createElement('input');
- div.appendChild(input);
- input.placeholder='Username colour';
- input.value = user.usernameColour ? user.usernameColour : '';
- input.addEventListener('change', changeTags.bind(undefined, div, username, postTable, input), false);
-
- div.appendChild(document.createElement('br'));
-
- var input=document.createElement('textarea');
- input.setAttribute('id', 'tagTextarea');
- div.appendChild(input);
- input.setAttribute('style', 'text-align: center; border: none;');
- input.placeholder='Tag';
- input.value = user.tag ? user.tag : '';
- resize('tagTextarea');
- input.addEventListener('keyup', resize.bind(undefined, 'tagTextarea'), false);
- input.addEventListener('change', changeTags.bind(undefined, div, username, postTable, input), false);
-
- div.appendChild(document.createElement('br'));
-
- var a=document.createElement('a');
- div.appendChild(a);
- a.innerHTML = 'Show tag: '+(user.showTag ? 'On' : 'Off');
- a.href='javascript:void(0);';
- a.addEventListener('click', changeTags.bind(undefined, div, username, postTable, a), false);
-
- div.appendChild(document.createElement('br'));
-
- var a=document.createElement('a');
- div.appendChild(a);
- a.innerHTML = 'Show tag left of avatar: '+(user.showTagInHeader ? 'On' : 'Off');
- a.href='javascript:void(0);';
- a.addEventListener('click', changeTags.bind(undefined, div, username, postTable, a), false);
-
- div.appendChild(document.createElement('br'));
-
- var a=document.createElement('a');
- div.appendChild(a);
- a.innerHTML = 'Soft ignore: '+(user.softIgnore ? 'On' : 'Off');
- a.href='javascript:void(0);';
- a.addEventListener('click', changeTags.bind(undefined, div, username, postTable, a), false);
-
- div.appendChild(document.createElement('br'));
-
- var a=document.createElement('a');
- div.appendChild(a);
- a.innerHTML = 'Hard ignore: '+(user.hardIgnore ? 'On' : 'Off');
- a.href='javascript:void(0);';
- a.addEventListener('click', changeTags.bind(undefined, div, username, postTable, a), false);
-
- div.appendChild(document.createElement('br'));
-
- var a=document.createElement('a');
- div.appendChild(a);
- a.innerHTML = 'Save';
- a.href='javascript:void(0);';
- a.addEventListener('click', saveAndClose.bind(undefined, div, username, postTable), false);
- }
-
- function changeTags(div, username, table, a)
- {
- var user=getUser(username);
- var index=user[1];
- user=user[0];
-
- var inputs=div.getElementsByTagName('input');
- user.replacementAvatar = inputs[0].value;
- user.customTitle = inputs[1].value;
- user.postHighlight = inputs[2].value;
- user.usernameColour = inputs[3].value;
-
- var textareas=div.getElementsByTagName('textarea');
- user.tag=textareas[0].value;
-
- var as=div.getElementsByTagName('a');
- if(as[1] == a)
- {
- if(a.innerHTML.indexOf('On') != -1)
- user.showTag=false;
- else
- user.showTag=true;
- }
- if(as[2] == a)
- {
- if(a.innerHTML.indexOf('On') != -1)
- user.showTagInHeader=false;
- else
- user.showTagInHeader=true;
- }
- if(as[3] == a)
- {
- if(a.innerHTML.indexOf('On') != -1)
- user.softIgnore=false;
- else
- user.softIgnore=true;
- }
- if(as[4] == a)
- {
- if(a.innerHTML.indexOf('On') != -1)
- user.hardIgnore=false;
- else
- user.hardIgnore=true;
- }
-
- var tags=getTags();
- if(index != -1)
- tags[index]=user;
- else
- {
- user.username=username;
- tags.push(user);
- }
- window.localStorage.userTags = JSON.stringify(tags);
-
- openTags(username, table);
- }
-
- function saveAndClose(div, username, table)
- {
- resetTags();
- addTags();
- setProfile();
- div.parentNode.removeChild(div);
- }
-
- /*
- function mouseOver(a)
- {
- a.style.display = 'initial';
- }
-
- function mouseOut(avatar, a, event)
- {
- if(event.relatedTarget == avatar || event.relatedTarget == a)
- return;
- a.style.display = 'none';
- }*/
-
- function getUser(username)
- {
- var tags=getTags();
- for(var i=0; i<tags.length; i++)
- {
- var t=tags[i];
- if(t.username === username)
- return [t, i];
- }
- return [{}, -1];
- }
-
- function getTags()
- {
- var tags = window.localStorage.userTags;
- if(!tags)
- {
- tags = [];
- }
- else
- tags = JSON.parse(tags);
- return tags;
- }