dev_star_com

keep an eye on selected comments!

  1. // ==UserScript==
  2. // @name dev_star_com
  3. // @namespace dev_star_com
  4. // @description keep an eye on selected comments!
  5. // @include http://*.deviantart.com/*
  6. // @version 1.38
  7. // @grant GM_registerMenuCommand
  8. // @grant GM_deleteValue
  9. // @grant GM_getValue
  10. // @grant GM_setValue
  11. // ==/UserScript==
  12.  
  13. // if(navigator.appName=="Opera"){
  14. // var storage=window.opera.scriptStorage;
  15. // if(storage){
  16. // GM_setValue=function(Name, Wert) {
  17. // storage.setItem(Name,Wert);
  18. // };
  19. // GM_getValue=function(Name) {
  20. // return storage.getItem(Name);
  21. // }
  22. // }else{
  23. // var hint = document.createElement('div');
  24. // hint.setAttribute('style',"font:10pt Verdana,Arial,Helvetica,sans-serif!important;background-color:#FFF;left:"+ ((window.innerWidth - 600)/2 - 20) +"px;top:"+ ((window.innerHeight - 150)/2 - 20) +"px;width:600px;height:150px;padding:10px;border:1px double black;position:absolute;z-index:999;");
  25. // hint.id="devhint";
  26. // hint.innerHTML="If you want to use this script, you have to allow Script-Storage!<br />ScriptStorage is a way to save data within opera that is only available to the userscript that saved it<br />To enable it, please visit <a href='opera:config#PersistentStorage|UserJSStorageQuota'>here</a> and insert a bigger number than 0! (depends on how many comments you would like to save. a good value is about 5000)<br /><p style='text-align:center' ><a style='cursor:pointer;' onclick='document.body.removeChild(document.getElementById(\"devhint\"));'>Close</a></p>";
  27. // document.body.appendChild(hint);
  28. // }
  29. // }
  30.  
  31. var favimg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAWCAYAAAArdgcFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw%2FeHBhY2tldCBiZWdpbj0i77u%2FIiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8%2BIDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NjFBQjg0MUQwQUQzMTFFMDlGNEJBQTYxODAyODQ0Q0MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NjFBQjg0MUUwQUQzMTFFMDlGNEJBQTYxODAyODQ0Q0MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo2MUFCODQxQjBBRDMxMUUwOUY0QkFBNjE4MDI4NDRDQyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo2MUFCODQxQzBBRDMxMUUwOUY0QkFBNjE4MDI4NDRDQyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI%2FPsMpo20AAARhSURBVHjapFVbTxtHFD4zu%2Btdr23WNhhjG2QMIdTQUolIuajqA2qrJFKlKFJaNVUfKvUhvyB9qPLYp%2F6HPkSqqqip1ItUKRFPSIFWpEASCKSUSx0qIOAbNl6vd3dmOmNvm5JWgJSRj3Z9Lt85882cs3Lv6VHo2H4GR62edPsn2Wz8xtLSs883coUvj%2FLPd8UBwzGWEWuLBwLy1XRqLy2eRiwUP04cPkYFyAj6PuxN%2BzMfXGasN61nxH%2Bhf2nwyG6%2BIxiQL118S82EAhRdfFvJBAPKJaF%2FafBYxH8llVASo9kCACEwOlSEVFJJtoe1K0fFyocZz715Ypi57rXzY2pKlU0ACqAqAOfHtGR1v%2BMahfjE9NTa4lHgUS4DGKP2SFQ%2FaRj%2BXstykoi4g5lud%2FDMsOUDyriLEApnR%2Fb02Qe%2BV9Y30NfJlLEcDKprhUJtu1Q0lyllfIvwO5ci4lcRX%2BjW7qiq1JlORx3Or6875dcMQ4ZktNzTZeQ0VbG9Gjg4YoD4UVqOD21X0vXNQmSjXLbhz03L2q%2B5du6PktJouDt3N%2BwLonJFxvVgts%2Bf%2Bfh9FlIViwEtAGMMAS1xMwd2vdPhwEA5NxxdlWqQjq76e2LhkwwjrtJ4Qhlu3rIri781OIeSIsDR7IZ9vVqtfOEj26evvqtIqs8rVGLeCy9V0IIEMAaGCc8hbHVgDhfMoO5QuPU9dX%2F5VV5YKfk%2F5cFICqcSrApyuVKDJ2bZHtqvkK5sL8Yypq0qqWBDVEyafDMOyhht7YyrGWFg2Rz4B%2BZO3MczC3n9Rh5pD7mz1QTnL66F5ULVREtm2RkqFEl4ZAD5moWzJkIzUTMHbWYToEjsxnIJ3PwW9icf4IePC4HPypI2wx32uRABLmYLM4NBhyfI75bYAqmzQdtyIiP9TG3SwUS1rEkN8xJxJRL623egOjWvTE9vBq7XfNojAczxKMd73kRCIQx1XZ99tE5%2FatgqA9KiRVAhGojwpyiYcFpcToeQuqOSuWV2t6Gpi38DH7jnYoJ5SxjMuKFGTySZRjk4ETdE%2FLB4tDinghZMmgGpGPJHdMXYA6iJ%2BH9h%2FbdDz2ZjyF5pjLQpFSBOq3H%2BaR%2BJAsWt%2B97cDV9hv8UCWmj4WO1fXdmKGz4IhHRen6CF38KnuwBTC4jOr8ulV%2FtI5MxrFCc6WrtvC1EucmTYcroeO8rmoeCY0b6QjsOpCEXlKoV785I1Pidt7VSl1TrSZla3rVOTC27%2F2KiTeGOE%2BBMRigN%2BCFct1s%2FDDwVHioQGOg2I%2FvgzakzMK1tFU17bsvTbOdDHub0BEFTTJfOdvUnzvYk5t%2B%2Fc6yTaEUbt%2BT0Y4PZ7HoP%2FD44kVDZrJpt6Iq%2FvkuBX9y3tO64Xc0AcmDhFKcf0b3J1ffyUz7o8vVj9SJJqEZCC5VYrPwcXg%2BsAOJcQl04B4oFWWgMG6AvfATEk2sT3xEu6I47ssMpbAwNgy3u3vUD2gh9tUQRFrxuR53vA7y8BBgAmTyJY%2F3idRQAAAABJRU5ErkJggg%3D%3D";
  32. var notfavimg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAWCAYAAAArdgcFAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAOASURBVEhLpZVJSJtBFMeT2NLS0gqFttD2ZIOixQ3FqDWuuFVxibig4pIiNiJSMQH14K5xN64Igoh46qE99SIKuSiCh8ajhSBpjz3YVDEW9Zv%2B%2Fx%2BJBNuagMKfycz33m%2FevHnzDFD4%2BZecnPw2NTX1Y2Bg4LHD4fjip5tvM41G8zQ7O3ujsbFR4si5by%2F%2FLJSIuLWystI%2BMzNzUVVVZU9JSWmFq9I%2F92us1Gr145ycHGt%2Ff7%2B0uLgo9fX1SZxz%2FcbwuLg4Q0VFxT6ilhYWFiSOmH%2BNjY013AheWlr6SqfT2Xp6eo7n5%2BdlONXd3X3M9eLi4jCfG4SFhT0KDg7WhIaGvkGk79PT0y1JSUkfSkpK9urr60%2Fn5uYkwin%2BpriO7zbaZWZmDtOP%2FuSQ59lUVVRUtF5WVmZraWnZNZlMe8PDw0zDPqI8mZ2dvQTyt5cENjuh3dDQ0L7RaNxrbm7exWlthYWF64CrFLiYOwUFBdsGg8G5uroqra2tXSwvL1NypMyxt6anp%2BU5RoETiKWlJVkrKysCPqKhocGZn5%2B%2FTa4iMjLybnR09GuU21Ztbe3Z5OTkJYwgL5hksVjkOcepqSlBwV5MTEwInFagTM%2Fw2LbII1eB%2FARAgREREen4sFNTU3MGYxngLYAIlMXvBF4FI%2F875JBHrpz3qxsggqPx8fFLGE%2FjEdfdEhiF2WwW5eXlR%2F8Ee5WSKjw8%2FCE2wgNMsSJFPz1ARuqBjo6OSm4JjAIn%2FYWUbqBSNPSXL%2FI%2Ff6qoqKgHISEhprq6ukNCuQHBY2NjMnRkZERCtBJzTFVXVx%2FSnn7XgS9ThJo1t7W1uTxADxQwGTw4OEgJqqmp6RQXOOATTDpScgsX%2Bxn17mKUFKEU6lkGDwwMUILC23DFx8d%2F8guu1Wqf44VaOzs7XYySam9vl3D8c7TbH7jsc2ws9fb2CgqPx5WWlmZFUM98tgLcujY3N9cG6GlXV5ek1%2BtPcGF2RLeOPm6G1gGyY7OTjo4OgT7zG12SbUDrC66Eox5P%2BBt6hxMnOEhMTNyMiYl5h0t7iWp4wZHzhISETWx6gJM40cS%2BI5V6Xz1eBQddXl6eIysry4aNjISxEfE58z44cs51AI0ZGRk22DrwTecr70rWKqQGIATjE%2FkZ%2F127Kq7zu9tO7a7x6%2F874ci3g4KC7qN13mOk1xyVKbxFO9rT72rO%2FwAJ2DoMsxrvMwAAAABJRU5ErkJggg%3D%3D";
  33.  
  34. var favmessid=new Array();
  35. var favmessparam=new Array();
  36. var topclick=false;
  37. var onc=0;
  38.  
  39. init();
  40. function resets(){
  41. if(GM_getValue("dev_star_com_username_starid")){
  42. favmessid=GM_getValue("dev_star_com_username_starid").split(String.fromCharCode(13));
  43. for(var i in favmessid){
  44. GM_deleteValue("star_"+favmessid[i]);
  45. }
  46. GM_deleteValue("dev_star_com_username_starid");
  47. GM_deleteValue("dev_star_com_username_starpar");
  48. favmessid="";
  49. init();
  50. }
  51. }
  52. function init(){
  53. GM_registerMenuCommand("reset dev_star_com", resets,"r");
  54. favbutinsert();
  55. if(document.getElementsByClassName("page2")[0]){//Message-Center-Pages
  56. var cont = document.getElementsByClassName("page2")[0];
  57. var clickbut=document.createElement("a");
  58. clickbut.className="f";
  59. clickbut.id="def_star_com_menu";
  60. clickbut.setAttribute("style","cursor: pointer;");
  61. clickbut.innerHTML="<i class='icon i19'></i><span class='ttext'>Starred Comments</span>";
  62. // var notelink=document.getElementsByClassName("page2")[0].getElementsByClassName("f");
  63. // for(var lin in notelink){
  64. // if(notelink[lin].getAttribute("mcuid")=="notes"){notelink=notelink[lin];break;}
  65. // }
  66. notelink=document.getElementsByClassName("messages-folder-zone")[0];
  67. cont.insertBefore(clickbut,notelink.nextSibling);
  68.  
  69. clickbut.addEventListener('click',anzeige,false);
  70. cont.addEventListener('click',raumer,false);
  71. // var $=unsafeWindow.jQuery,holder,query,offset,fPage,pPage,lPage;
  72. // $("#overhead .oh-l").click(raumer);
  73. document.getElementById("overhead").addEventListener('click',function(){topclick=true;raumer();},false);
  74. }
  75. if(location.href.match(/.*#view=starrCom.*/)){anzeige();}
  76. }
  77.  
  78. function favbutinsert(){
  79. if(!(location.href.match(/.*?\.deviantart\.com(\/#\/.*)?/)||location.href.match(/.*?\.deviantart\.com\/art\/.*/)||location.href.match(/.*?\.deviantart\.com\/gallery\/.*/))){return;}
  80. var arr=document.getElementsByClassName('cc-meta');
  81. if(location.href.match(/.*?\.deviantart\.com(\/#\/.*)?/)&&onc==0){onc=1;setTimeout(favbutinsert,2000);return;}
  82. if(arr[0]){ //page contains comments
  83. if(GM_getValue("dev_star_com_username_starid")){favmessid=GM_getValue("dev_star_com_username_starid").split(String.fromCharCode(13));}
  84. for(var i in arr){
  85. if(arr[i].tagName=="DIV"){
  86. var favbut = document.createElement("img");
  87. favbut.className="dev_favbut";
  88. var gmid=arr[i].parentNode.parentNode.parentNode.parentNode.getAttribute("gmi-commentid")
  89. if(favmessid.indexOf(gmid)==-1){
  90. favbut.src=notfavimg;
  91. favbut.setAttribute("akt","1");
  92. }else{
  93. favbut.src=favimg;
  94. favbut.setAttribute("akt","0");
  95. }
  96. favbut.setAttribute("style","position: absolute;right: 70px;");
  97. arr[i].appendChild(favbut);
  98. favbut.addEventListener('click',umschalt,false);
  99. }
  100. }
  101. }else{
  102. if(onc<10){
  103. onc++;
  104. setTimeout(favbutinsert,2000);
  105. }
  106. }
  107. }
  108.  
  109.  
  110. function raumer(){
  111. var aktiv=document.getElementsByClassName("f selected");
  112. if(typeof aktiv[0] == "undefined" || aktiv[0].id!="def_star_com_menu" || topclick){
  113. topclick=false;
  114. var inh=document.getElementsByClassName("mczone dev_star_com");
  115. if(inh.length==0){return;}
  116. inh[0].parentNode.removeChild(inh[0]);
  117. }
  118. }
  119.  
  120. function parget(obj){
  121. var ausgabe=new Array();
  122. var parname=new Array("gmi-splitid","gmi-private","gmi-typeid","gmi-itemid");
  123. for(var i in parname){
  124. ausgabe.push(obj.getAttribute(parname[i]));
  125. }
  126. return ausgabe.join(String.fromCharCode(12));
  127. }
  128. function parpush(obj,idd){
  129. var parname=new Array("gmi-splitid","gmi-private","gmi-typeid","gmi-itemid");
  130. for(var i in parname){
  131. obj.setAttribute(parname[i],favmessparam[idd].split(String.fromCharCode(12))[i]);
  132. }
  133. }
  134.  
  135. function umschalt(){
  136. if(this.getAttribute("akt")=="1"){
  137. this.setAttribute("akt","0");
  138. this.src=favimg;
  139. if(GM_getValue("dev_star_com_username_starid")){favmessid=GM_getValue("dev_star_com_username_starid").split(String.fromCharCode(13));}
  140. if(GM_getValue("dev_star_com_username_starpar")){favmessparam=GM_getValue("dev_star_com_username_starpar").split(String.fromCharCode(13));}
  141. var gmi_id=this.parentNode.parentNode.parentNode.parentNode.parentNode.getAttribute("gmi-commentid");
  142. favmessid.push(gmi_id);
  143. favmessparam.push(parget(this.parentNode.parentNode.parentNode.parentNode.parentNode));
  144. GM_setValue("star_"+gmi_id,this.parentNode.parentNode.parentNode.parentNode.parentNode.innerHTML);
  145. GM_setValue("dev_star_com_username_starid",favmessid.join(String.fromCharCode(13)))
  146. GM_setValue("dev_star_com_username_starpar",favmessparam.join(String.fromCharCode(13)))
  147. }else{
  148. this.setAttribute("akt","1");this.src=notfavimg;
  149. var gmi_id=this.parentNode.parentNode.parentNode.parentNode.parentNode.getAttribute("gmi-commentid")
  150. if(GM_getValue("dev_star_com_username_starid")){favmessid=GM_getValue("dev_star_com_username_starid").split(String.fromCharCode(13));}
  151. if(GM_getValue("dev_star_com_username_starpar")){favmessparam=GM_getValue("dev_star_com_username_starpar").split(String.fromCharCode(13));}
  152. favmessparam.splice(favmessid.indexOf(gmi_id),1);
  153. favmessid.splice(favmessid.indexOf(gmi_id),1);
  154. GM_setValue("star_"+gmi_id,"");
  155. GM_setValue("dev_star_com_username_starid",favmessid.join(String.fromCharCode(13)))
  156. GM_setValue("dev_star_com_username_starpar",favmessparam.join(String.fromCharCode(13)))
  157. }
  158. }
  159. function anzeige(){
  160. var offset=0;
  161. var patt=/.*deviantart\.com\/notifications\/.*#view=starrCom.*-0*(\d+).*/;
  162. if(location.href.match(patt)){offset=parseInt(location.href.match(patt)[1]);}
  163. if(GM_getValue("dev_star_com_username_starid")){favmessid=GM_getValue("dev_star_com_username_starid").split(String.fromCharCode(13));}
  164. if(GM_getValue("dev_star_com_username_starpar")){favmessparam=GM_getValue("dev_star_com_username_starpar").split(String.fromCharCode(13));}
  165. var aktiv=document.getElementsByClassName("f selected");
  166. if(aktiv[0]){aktiv[0].className="f";}
  167. document.getElementById("def_star_com_menu").className="f selected";
  168. var inh=document.getElementsByClassName("messages-right")[0];
  169. inh.innerHTML="";
  170. var divcont=document.createElement("div");
  171. divcont.className="mczone dev_star_com";
  172. divcont.innerHTML="<h2 class='mczone-title'>"+ favmessid.length + " starred Comments</h2>";
  173. inh.appendChild(divcont);
  174. for(var i=offset;i<favmessid.length&&i<(10+offset);i++){
  175. var favbut = document.createElement("div");
  176. favbut.className="ccomment ch";
  177. favbut.setAttribute("gmi-commentid",favmessid[i]);
  178. favbut.setAttribute("name","gmi-CComment");
  179. favbut.setAttribute("data-gmiclass","CComment");
  180. parpush(favbut,i);
  181. favbut.innerHTML=GM_getValue("star_"+favmessid[i]);
  182. divcont.appendChild(favbut);
  183. var interfavimg=document.getElementsByClassName("dev_favbut");
  184. interfavimg[interfavimg.length-1].addEventListener('click',umschalt,false);
  185. }
  186. var bbtext="<div class='pagination'><ul class='pages'><li class='prev'><a class='";
  187. if(offset==0){bbtext+='disabled';}else{bbtext+='away';}
  188. bbtext+="' id='dev_star_com_prev'>Previous</a></li><li class='next'><a class='";
  189. if(offset+10>=favmessid.length){bbtext+='disabled';}else{bbtext+='away';}
  190. bbtext+="' id='dev_star_com_next'>Next</a></li></ul></div>";
  191. var navi=document.createElement("div");
  192. navi.innerHTML=bbtext;
  193. navi.className="pagination-wrapper";
  194. divcont.appendChild(navi);
  195. if(!location.href.match(/#view=starrCom/)){location.href=location.href.replace(/#.*/,"")+"#view=starrCom-0";}
  196. if(offset!=0){
  197. document.getElementById("dev_star_com_prev").addEventListener('click', function(){
  198. location.href=location.href.replace(/#.*/,"")+"#view=starrCom-"+(offset-10);
  199. anzeige();
  200. });
  201. }
  202. if(offset+10<favmessid.length){
  203. document.getElementById("dev_star_com_next").addEventListener('click', function(){
  204. location.href=location.href.replace(/#.*/,"")+"#view=starrCom-"+(offset+10);
  205. anzeige();
  206. });
  207. }
  208. }