dAhub_MessageCenter_ContestWidget

integrates dAhub's contest-feature into your messagebox!

  1. // ==UserScript==
  2. // @name dAhub_MessageCenter_ContestWidget
  3. // @namespace dAhub_MessageCenter_ContestWidget
  4. // @description integrates dAhub's contest-feature into your messagebox!
  5. // @match https://www.deviantart.com/notifications/*
  6. // @version 1.29
  7. // @grant GM_setValue
  8. // @grant GM_getValue
  9. // @grant GM_xmlhttpRequest
  10. // @require https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js
  11. // @require https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js
  12. // @grant GM.setValue
  13. // @grant GM.getValue
  14. // @grant GM.xmlHttpRequest
  15. // ==/UserScript==
  16.  
  17. /*
  18. GM.xmlHttpRequest({
  19. url:"https://phi.pf-control.de/jquery_min.js",
  20. method:"GET",
  21. onload: function(data){
  22. eval(data.responseText);
  23. insertoptik();
  24. checkupdate();
  25. }
  26. });
  27. */
  28.  
  29. //var $ = unsafeWindow.$;
  30. // var DiFi=unsafeWindow.DiFi;
  31. var curvis=0;
  32. var daten=[]; //{url, title,deadline,by,at,category,prize,description}
  33. var lastupdate=0; //timestamp - seconds after 1.1.1970
  34. var hidelist=[]; //items to hide. (clicked on X! can also be unhidden again!) conteins list of id-hashes based on contestURL.
  35. var iconlist=[];
  36. var settings=[];
  37.  
  38. async function loadSets(){
  39. daten=await GM.getValue("daten","");
  40. if(daten!="")daten=JSON.parse(daten);else daten=[];
  41. hidelist=await GM.getValue("hidelist","");
  42. if(hidelist!="")hidelist=JSON.parse(hidelist);else hidelist=[];
  43. lastupdate=await GM.getValue("lastupdate","");
  44. iconlist=await GM.getValue("iconlist","");
  45. if(iconlist!="")iconlist=JSON.parse(iconlist);else iconlist=[];
  46. settings=await GM.getValue("settings","");
  47. if(settings!="")settings=JSON.parse(settings);else settings=[];
  48. }
  49.  
  50. async function getdata(){
  51. GM.xmlHttpRequest({
  52. url:"https://anothercontestgroup.deviantart.com/journal/Upcoming-Contests-Updated-Daily-426223868#"+Math.round(Math.random()*1000),
  53. method: "get",
  54. onload:function(data){
  55. readdata(data.responseText);
  56. },
  57. onerror:function(data){
  58. }
  59. });
  60. }
  61. function readdata(source){
  62. daten=[];
  63. var analyzeRex=/<a href=([^>]*?.deviantart.com\/deviation\/[^>]*?)>(.*?)<\/a>.*?Deadline:<\/b>([^<]*?)<sup.*?Hosted by:<\/b>(.*?)<br \/>.*?(?:Hosted at:<\/b>(.*?)<br \/>.*?)?Categor(?:y|ies):<\/b>([^<]*?)<br \/>.*?Prize(?:s?):<\/b>([^<]*?)<br \/>.*?(.*?)(?:<br \/>\s*<a [^>]*?>\s*<\/a>\s*<br \/>|<br\/><br\/><hr\/>)/ig;
  64. var satz="";
  65. var zwiicon="";
  66. while (satz=analyzeRex.exec(source)){
  67. satz.splice(0,1)
  68. if(satz[3].match(/https:\/\/(.*?)\.deviantart\.com/i)==null)continue; //banned!
  69. zwiicon+=" :icon"+satz[3].match(/https:\/\/(.*?)\.deviantart\.com/i)[1]+": ";
  70. daten.push(satz);
  71. }
  72. geticons(zwiicon);
  73. //setTimeout(function(){
  74. GM.setValue("daten",JSON.stringify(daten));
  75. // $("#dAhub_CM_Tab span.ttext").html("dAhub Contests("+$("div#dAhub_content div.mcbox").filter(":visible").length+")");
  76.  
  77. //},0);//override security access for GM-features.
  78. }
  79. function inj(zwiicon){
  80. DiFi.pushPost("Comments","preview_v2",[zwiicon,"1","1","426223868"],function(success, data){
  81. var imgrex=/<a (?:[^>]*?)><img (?:[^>]*?)><\/a>/gi;
  82. var iconlist=data.response.content.match(imgrex);
  83. $("<div id='dahub_icon_temp'>").attr("data",JSON.stringify(iconlist)).appendTo($("body"));
  84. $("#dAhub_CM_Tab.selected").click();
  85. });
  86. DiFi.send();
  87. }
  88. function iconlistener(){
  89. if($("#dahub_icon_temp").length==0)return;
  90. // setTimeout(function(){
  91. GM.setValue("iconlist",$("#dahub_icon_temp").attr("data"));
  92. // },0);
  93. $("#dahub_icon_script, #dahub_icon_temp").remove();
  94. var prom = (async ()=>{iconlist=JSON.parse(await GM.getValue("iconlist",null));});
  95. prom.then(()=>{
  96. $("#dAhub_CM_Tab span.ttext").html("dAhub Contests<span class='c'>("+iconlist.length+")</span>");
  97. clearInterval(iclI);
  98. });
  99. }
  100. function geticons(zwiicon){
  101. $("<script id='dahub_icon_script'>").html(inj.toString()+";\n inj('"+zwiicon+"');").appendTo($("body"));
  102. var iclI=setInterval(iconlistener,1000);
  103. }
  104.  
  105. /* setTimeout(function(){
  106. $("div.page2 a.f.selected").removeClass("selected");
  107. $("#dAhub_CM_Tab").addClass("selected");
  108. // setTimeout(function(){$("#dAhub_CM_Tab").addClass("selected");},500);
  109. $("div.mczone-loading").css({"position":"inherit"});
  110. filldata();
  111. showdata();
  112. },500);*/
  113. function insertoptik(){
  114. $("div.messages-right").append("<div class='mczone' style='display:none;' id='dAhub_content'><h2 class=\"mczone-title\">dAhub's Current Contests</h2><div class=\"mczone-inner\"></div><div style=\"visibility: hidden;\"></div></div>");
  115. var but=$('<a id="dAhub_CM_Tab" class="f" href="#view=dAhub"><i class="icon i19"></i> <span class="ttext" href="#view=dAhub" >dAhub Contests(...)</span> <span class="c"></span> </a>');
  116. but.insertBefore("div.page2 a.f[mcuid=notices]");
  117. document.getElementById("dAhub_CM_Tab").addEventListener("click",()=>{
  118. $("div.page2 a.f.selected").removeClass("selected");
  119. $("#dAhub_CM_Tab").addClass("selected");
  120. // setTimeout(function(){$("#dAhub_CM_Tab").addClass("selected");},500);
  121. $("div.mczone-loading").css({"position":"inherit"});
  122. filldata();
  123. showdata();
  124. }
  125. ,false);
  126. //$("#dAhub_CM_Tab").click(()=>{return 0;});
  127. filldata();
  128. $('<div style="float:right;margin:-2px 50px"><a title="dev_user_inf settings" style="cursor:pointer;" class="gmbutton2 gmbutton2qn2r" id="dAhub_filter"><i style="background-image: url(&quot;https://st.deviantart.net/minish/gruzecontrol/icons-gruser.gif?37&quot;);" class="icon i52"></i><em></em><span>Filter</span><b></b></a></div>').appendTo("div#dAhub_content.mczone h2.mczone-title").click(optionwindow);
  129. $("div.page2 a.f:not(#dAhub_CM_Tab), #overhead *").click(function(){ $("#dAhub_content").hide(); });
  130. if(location.href.indexOf("view=dAhub")!=-1)$("#dAhub_CM_Tab").click();
  131. $(window).resize(resiz);
  132. }
  133.  
  134. function filldata(){
  135. var parent=$("#dAhub_content div.mczone-inner").html("");
  136. for(var i=0;i<daten.length;i++){
  137. parent.append(formatdataset(daten[i],iconlist[i]));
  138. }
  139. filterdisplay();
  140. }
  141.  
  142. async function optionwindow(){
  143. $("#dAhubopts,dahub_opt_style").remove();
  144. var opt = document.createElement('form');
  145. opt.id="dAhubopts";
  146. opt.setAttribute('style',"font:10pt Verdana,Arial,Helvetica,sans-serif!important;background-color:#e4eae3;left:"+ ((window.innerWidth - 300)/2 - 20) +"px;top:"+ ((window.innerHeight - 370)/2 - 20) +"px;width:400px;height:370px;padding:10px;border:3px ridge black;position:fixed;z-index:999;border-radius:15px;box-shadow:3px 3px 2px #676");
  147. var ins="";var ins2="";
  148.  
  149. var checkd=new Array("","","","","","");
  150. var offDur=await GM.getValue("offdur","");
  151. if(offDur==""){
  152. GM.setValue("offdur",3);
  153. offDur=3;
  154. }
  155. checkd[parseInt(offDur)]="checked";
  156. opt.innerHTML="<h2 align='center'>Filter</h2>"+
  157. "<div style='text-align:center;'><div class='dAhub_tab'>Title/Desc</div><div class='dAhub_tab'>Category</div><div class='dAhub_tab'>Timespan</div><div class='dAhub_tab'>Prize</div><div class='dAhub_tab'>General</div></div>"+
  158. "<div id='dahub_tab_descr' class='dahub_tab_content'>"+
  159. "<p>Blacklist (separate with ,): hits will be hidden:</p>"+
  160. "<textarea name='dahub_tab_descr_black' id='dahub_tab_descr_black'></textarea>"+
  161. "<p>Whitelist (separate with ,): only hits will be shown:</p>"+
  162. "<textarea name='dahub_tab_descr_white' id='dahub_tab_descr_white'></textarea>"+
  163. "</div>"+
  164. "<div id='dahub_tab_category' class='dahub_tab_content'>"+
  165. "<div style='text-align:center;'><span id='dahub_tab_category_blackexampl' title='removes all contests matching with the crossed entries'>Blacklisted</span>"+
  166. "<span id='dahub_tab_category_whiteexampl' title='removes all contests that mismatch with the checked entries'>Whitelisted</span></div><div style='margin: 20px 0 10px 10px;'>"+
  167. "<span name='dahub_tab_category_tricheck_trad' class='dahub_tab_category_tricheck' tristate='neutral'>Traditional</span>"+
  168. "<span name='dahub_tab_category_tricheck_dig' class='dahub_tab_category_tricheck' tristate='neutral'>Digital</span>"+
  169. "<span name='dahub_tab_category_tricheck_fan' class='dahub_tab_category_tricheck' tristate='neutral'>Fan Art</span>"+
  170. "<span name='dahub_tab_category_tricheck_OC' class='dahub_tab_category_tricheck' tristate='neutral'>Original Character</span>"+
  171. "<span name='dahub_tab_category_tricheck_photo' class='dahub_tab_category_tricheck' tristate='neutral'>Photography</span>"+
  172. "<span name='dahub_tab_category_tricheck_literature' class='dahub_tab_category_tricheck' tristate='neutral'>Literature</span>"+
  173. "<span name='dahub_tab_category_tricheck_crafts' class='dahub_tab_category_tricheck' tristate='neutral'>Crafts</span>"+
  174. "<span name='dahub_tab_category_tricheck_comics' class='dahub_tab_category_tricheck' tristate='neutral'>Comics</span>"+
  175. "<span name='dahub_tab_category_tricheck_vnameeo' class='dahub_tab_category_tricheck' tristate='neutral'>Vnameeo</span>"+
  176. "<span name='dahub_tab_category_tricheck_icon' class='dahub_tab_category_tricheck' tristate='neutral'>Icon/Skin/Stamp</span>"+
  177. "<span name='dahub_tab_category_tricheck_visual' class='dahub_tab_category_tricheck' tristate='neutral'>All Visual Arts</span>"+
  178. "<span name='dahub_tab_category_tricheck_all' class='dahub_tab_category_tricheck' tristate='neutral'>All Mediums</span>"+
  179. "<span name='dahub_tab_category_tricheck_mature' class='dahub_tab_category_tricheck' tristate='neutral'>Mature Theme</span>"+
  180. "<span name='dahub_tab_category_tricheck_watch' class='dahub_tab_category_tricheck' tristate='neutral'>Must Watch</span>"+
  181. "<span name='dahub_tab_category_tricheck_mascot' class='dahub_tab_category_tricheck' tristate='neutral'>Mascot</span>"+
  182. "<span name='dahub_tab_category_tricheck_color' class='dahub_tab_category_tricheck' tristate='neutral'>Coloring</span></div>"+
  183. "<div style='text-align: center;'><span class='link'>Check all</span><span class='link'>Mark none</span><span class='link'>Cross all</span></div>"+
  184. "</div>"+
  185. "<div id='dahub_tab_time' class='dahub_tab_content'>"+
  186. "<p>Minimum deadline: </p>"+
  187. "<input type='number' min='0' name='dahub_tab_time_min' id='dahub_tab_time_min'/>days"+
  188. "<p>Maximum deadline:</p>"+
  189. "<input type='number' min='1' name='dahub_tab_time_max' id='dahub_tab_time_max'/>days"+
  190. "</div>"+
  191. "<div id='dahub_tab_prize' class='dahub_tab_content'>"+
  192. "<span>including prizes:</span><div style='margin-left:100px;'><div id='dahub_tab_prize_money'><input name='dahub_tab_prize_money' type='checkbox' id='dahub_tab_prize_money_c'/><label for='dahub_tab_prize_money_c'><i>$$</i><span>money</span></label></div>"+
  193. "<div id='dahub_tab_prize_physical'><input name='dahub_tab_prize_physical' type='checkbox' id='dahub_tab_prize_physical_c'/><label for='dahub_tab_prize_physical_c'><i></i><span>physical prize</span></label></div>"+
  194. "<div id='dahub_tab_prize_points'><input name='dahub_tab_prize_points' type='checkbox' id='dahub_tab_prize_points_c'/><label for='dahub_tab_prize_points_c'><i></i><span>20+ Points</span></label></div>"+
  195. "<div id='dahub_tab_prize_commis'><input name='dahub_tab_prize_commis' type='checkbox' id='dahub_tab_prize_commis_c'/><label for='dahub_tab_prize_commis_c'><i></i><span>Free commissions</span></label></div>"+
  196. "<div id='dahub_tab_prize_other'><input name='dahub_tab_prize_other' type='checkbox' id='dahub_tab_prize_other_c'/><label for='dahub_tab_prize_other_c'><i></i><span>Other</span></label></div>"+
  197. "<div id='dahub_tab_prize_feature'><input name='dahub_tab_prize_feature' type='checkbox' id='dahub_tab_prize_feature_c'/><label for='dahub_tab_prize_feature_c'><i></i><span>Get Featured</span></label></div>"+
  198. "<div id='dahub_tab_prize_lama'><input name='dahub_tab_prize_lama' type='checkbox' id='dahub_tab_prize_lama_c'/><label for='dahub_tab_prize_lama_c'><i></i><span>Llamas</span></label></div>"+
  199. "<div id='dahub_tab_prize_crit'><input name='dahub_tab_prize_crit' type='checkbox' id='dahub_tab_prize_crit_c'/><label for='dahub_tab_prize_crit_c'><i></i><span>Comments/Critiques</span></label></div>"+
  200. "<div id='dahub_tab_prize_favs'><input name='dahub_tab_prize_favs' type='checkbox' id='dahub_tab_prize_favs_c'/><label for='dahub_tab_prize_favs_c'><i></i><span>Watchers/Favourites</span></label></div>"+
  201. "<div id='dahub_tab_prize_prem'><input name='dahub_tab_prize_prem' type='checkbox' id='dahub_tab_prize_prem_c'/><label for='dahub_tab_prize_prem_c'><i></i><span>Free Premium Membership</span></label></div>"+
  202. "<div id='dahub_tab_prize_acg'><input name='dahub_tab_prize_acg' type='checkbox' id='dahub_tab_prize_acg_c'/><label for='dahub_tab_prize_acg_c'><i></i><span>ACG Winners Package</span></label></div></div>"+
  203. "<div style='text-align: center;'><span class='link'>Select all</span><span class='link'>Select none</span></div>"+
  204. "</div>"+
  205. "<div id='dahub_tab_general' class='dahub_tab_content'>"+
  206. "<input type='checkbox' id='dahub_tab_general_unhide_c' name='dahub_tab_general_unhide'/><label for='dahub_tab_general_unhide_c'>Show hidden Contests (reverse 'X')</label>"+
  207. "<div id='dahub_tab_general_force'>force update</div>"+
  208. "<a target='_blank' href='https://dahub.deviantart.com/art/Contest-Directory-454370340'>Visit dAhub Contest Search Engine</a>"+
  209. "<a target='_blank' href='https://dahub.deviantart.com/art/Submit-Contest-Form-429874281'>Submit your own Contest</a>"+
  210. "</div>"+
  211. // "<br style='clear:both;' /><br />"+
  212. "<div style='text-align: center;bottom: 10px; position: absolute; text-align: center; width: 100%;'><input type='button' value='Save' id='devoptsav' />"+
  213. "<input type='button' value='Cancel' id='devoptcan' style='margin-left:40px;' /></div>";
  214. document.body.appendChild(opt);
  215. $("div.dAhub_tab").click(function(){
  216. $(this).siblings().removeClass("dAhubSelect");
  217. $(this).addClass("dAhubSelect");
  218. $("div.dahub_tab_content").eq($("div.dAhub_tab").index($(this))).show().siblings("div.dahub_tab_content").hide();
  219. });
  220. $(".dahub_tab_category_tricheck").click(function(){
  221. if($(this).attr("tristate")=="neutral")return $(this).attr("tristate","positive");
  222. if($(this).attr("tristate")=="positive")return $(this).attr("tristate","negative");
  223. if($(this).attr("tristate")=="negative")return $(this).attr("tristate","neutral");
  224. });
  225. $("#devoptsav").click(function(){setTimeout(optsav,0);});
  226. $("#devoptcan").click(function(){setTimeout(optcan,0);});
  227. $("body").append("<style id='dahub_opt_style'>"+
  228. "span.dahub_tab_category_tricheck{margin-right: 35px;margin-top: 5px; padding-left:20px; height:15px; display:inline-block; line-height:15px; background-repeat:no-repeat; font-size:15px; vertical-align:middle; cursor:pointer; width:140px}"+
  229. "span.dahub_tab_category_tricheck[tristate='neutral']{background-image:url(https://csscheckbox.com/checkboxes/lite-x-red.png ); background-position: 0 0px ;}"+
  230. "span.dahub_tab_category_tricheck[tristate='positive']{background-image:url(https://csscheckbox.com/checkboxes/lite-green-check.png ); background-position: 0 -15px;}"+
  231. "span.dahub_tab_category_tricheck[tristate='negative']{background-image:url(https://csscheckbox.com/checkboxes/lite-x-red.png ); background-position: 0 -15px;}"+
  232. "#dahub_tab_category_blackexampl{margin-right: 35px;background-image:url(https://csscheckbox.com/checkboxes/lite-x-red.png ); background-position: 0 -15px ; padding-left:20px; height:15px; display:inline-block; line-height:15px; background-repeat:no-repeat; font-size:15px; vertical-align:middle;}"+
  233. "#dahub_tab_category_whiteexampl{background-image:url(https://csscheckbox.com/checkboxes/lite-green-check.png ); background-position: 0 -15px; padding-left:20px; height:15px; display:inline-block; line-height:15px; background-repeat:no-repeat; font-size:15px; vertical-align:middle;}"+
  234. "div.dAhub_tab:nth-of-type(1){border-radius: 15px 0px 0px 15px;}"+
  235. "div.dAhub_tab:nth-of-type(5){border-radius: 0px 15px 15px 0px;}"+
  236. "div.dAhub_tab{cursor:pointer;width:20%;height:30px;line-height:30px;border:black 2px ridge;background-color:#d6ded4;display:inline-block;width:75px;text-align:center;margin:5px 0px; box-shadow: 2px 2px 1px #777, 3px 3px 3px #ded inset,-1px -1px 5px #686 inset;}"+
  237. "div.dahub_tab_content{height:280px;width:100%;}"+
  238. "div.dAhubSelect{background-color:#498091;color:#eaf2ee; box-shadow: 2px 2px 1px #333 inset;}"+
  239. "#dAhubopts textarea{background-color:#fff;color:#000; box-shadow: 1px 1px 1px #777 inset;width:80%;height:80px;margin-bottom:5px;}"+
  240. "div.dahub_tab_content p{font-size:11px; margin:0px;}"+
  241. "#dahub_tab_category > p{margin-left:10px}"+
  242. "#dahub_tab_category > textarea{margin-left:30px;}"+
  243. "#dahub_tab_category span.link{text-decoration:underline;color:blue;cursor:pointer;margin:20px}"+
  244. "#dahub_tab_prize i{vertical-align:bottom;width:20px;height:20px;display:inline-block;}"+
  245. "#dahub_tab_prize span.link{text-decoration:underline;color:blue;cursor:pointer;margin:20px}"+
  246. "#dahub_tab_prize>span{margin-left:20px;}"+
  247. "#dahub_tab_prize_physical i{background:url('https://st.deviantart.net/minish/gruzecontrol/icons-gruser.gif') no-repeat -1840px 0px;}"+
  248. "#dahub_tab_prize_points i{background:url('https://st.deviantart.net/minish/gruzecontrol/icons-gruser.gif') no-repeat -1601px 0px;}"+
  249. "#dahub_tab_prize_commis i{background:url('https://st.deviantart.net/minish/gruzecontrol/icons-gruser.gif') no-repeat -40px 0px;}"+
  250. "#dahub_tab_prize_other i{background:url('https://st.deviantart.net/minish/gruzecontrol/icons-gruser.gif') no-repeat -1440px 0px;}"+
  251. "#dahub_tab_prize_feature i{background:url('https://st.deviantart.net/minish/gruzecontrol/icons-gruser.gif') no-repeat -520px 0px;}"+
  252. "#dahub_tab_prize_lama i{background:url('https://st.deviantart.net/badges/llama.gif') no-repeat scroll center center;}"+
  253. "#dahub_tab_prize_crit i{background:url('https://st.deviantart.net/minish/main/more.gif') no-repeat -1720px 0px;}"+
  254. "#dahub_tab_prize_favs i{background:url('https://st.deviantart.net/minish/messages/mc3.gif') no-repeat -0px 0px;}"+
  255. "#dahub_tab_prize_prem i{background:url('https://st.deviantart.net/minish/main/more.gif') no-repeat -840px 0px;}"+
  256. "#dahub_tab_prize_acg i{background:url('https://a.deviantart.net/avatars/a/n/anothercontestgroup.jpg?1') no-repeat 0px 0px;background-size:20px 20px;}"+
  257. "#dahub_tab_prize > div {margin-bottom: 3px;}"+
  258. "#dahub_tab_prize label {cursor:pointer;}"+
  259. " #dahub_tab_descr > * { margin-left: 40px; margin-top: 10px; }"+
  260. "#dahub_tab_time > * { margin-left: 120px;}"+
  261. // "#dahub_tab_prize_money { padding-top: 15px; }"+
  262. "#dahub_tab_time p {padding-top: 30px;}"+
  263. "#dahub_tab_general > * { margin-bottom: 15px; } "+
  264. "#dahub_tab_general { padding-top: 60px;padding-left: 60px; }"+
  265. "#dahub_tab_general > div {margin-top: 10px;margin-left: 30px;}"+
  266. "#dahub_tab_general a {color:blue;text-decoration:underline;display:block;}"+
  267. "#dahub_tab_general_force { width:100px;height:30px;line-height:30px;text-align:center;border-radius:10px;box-shadow:2px 2px 2px #454, -3px -3px 5px #454 inset, 3px 3px 5px #dfd inset;border:2px outset #464;background-color:#aca;cursor:pointer;margin-left: 100px!important;}"+
  268. "</style>");
  269. $("div.dahub_tab_content").hide();
  270. $("div.dAhub_tab").first().click();
  271. $("#dAhubopts").submit(function(event){
  272. event.preventDefault();
  273. optsav();
  274. });
  275. $("#dahub_tab_general_force").click(function(){
  276. $("#dAhubopts,dahub_opt_style").remove(); //remove settings dialog
  277. lastupdate=0;//force update
  278. setTimeout(checkupdate,0); //will trigger getdata(), readdata(), geticons() and Tab.click();
  279. });
  280. $("#dahub_tab_category span.link").eq(0).click(function(event){
  281. $(".dahub_tab_category_tricheck").attr("tristate","positive");
  282. });
  283. $("#dahub_tab_category span.link").eq(1).click(function(event){
  284. $(".dahub_tab_category_tricheck").attr("tristate","neutral");
  285. });
  286. $("#dahub_tab_category span.link").eq(2).click(function(event){
  287. $(".dahub_tab_category_tricheck").attr("tristate","negative");
  288. });
  289. $("#dahub_tab_prize span.link").first().click(function(event){
  290. event.preventDefault();
  291. $("#dahub_tab_prize input[type='checkbox']").prop("checked",true);
  292. });
  293. $("#dahub_tab_prize span.link").last().click(function(event){
  294. event.preventDefault();
  295. $("#dahub_tab_prize input[type='checkbox']").prop("checked",false);
  296. });
  297.  
  298.  
  299. $("input[type='checkbox']").prop('checked', false);
  300. for(var i=0;i<settings.length;i++){
  301. if(settings[i][1]==true)
  302. $("input[name='"+settings[i][0]+"']").prop('checked', true);
  303. else if(["positive","negative","neutral"].indexOf(settings[i][1])!=-1)
  304. $(".dahub_tab_category_tricheck[name='"+settings[i][0]+"']").attr("tristate",settings[i][1])
  305. else
  306. $("input[name='"+settings[i][0]+"'], textarea[name='"+settings[i][0]+"']").val(settings[i][1]);
  307. }
  308. if(settings.length==0)optdefault();
  309. }
  310. function optdefault(){
  311. $("#dahub_tab_prize input").prop("checked",true);
  312. $("#dahub_tab_time_min").val(0);
  313. $("#dahub_tab_time_max").val(360);
  314. $("#dahub_tab_category textarea").html("");
  315. }
  316. function optcan(){
  317. $("#dAhubopts,#dahub_opt_style").remove();
  318. }
  319.  
  320. function optsav(){
  321. settings=[];
  322. $("#dAhubopts input,#dAhubopts textarea, #dAhubopts span.dahub_tab_category_tricheck").each(function(){
  323. if(typeof $(this).attr("name") !="undefined"){
  324. if($(this).attr("type")=="checkbox")
  325. settings.push([$(this).attr("name"),$(this).prop("checked")==true]);
  326. else if($(this).hasClass("dahub_tab_category_tricheck"))
  327. settings.push([$(this).attr("name"),$(this).attr("tristate")]);
  328. else
  329. settings.push([$(this).attr("name"),$(this).val()]);
  330. }
  331. });
  332. setTimeout(()=>{GM.setValue("settings",JSON.stringify(settings));},0);
  333. $("#dAhubopts,#dahub_opt_style").remove();
  334.  
  335. showdata();
  336. }
  337. function showdata(){
  338. if(daten.length==0)return;
  339. $("div.messages-right div.mczone").hide();
  340. $("#dAhub_content").show();
  341.  
  342. filterdisplay();
  343. }
  344. function resiz(){
  345. $("div.dAhubPrizes").each(function(){
  346. // $(this).prev("div.dAhubDescr").width($(this).parents('div.mcbox-inner').width()-100-90-$(this).prev("div.mcb-whoicon").width());
  347.  
  348. $(this).parent("div.dAhub_content_wrapper").width($(this).parents("div.mc-ctrl").width()-$(this).parent().siblings("div.mcb-whoicon").width()-50);
  349.  
  350. if($(this).height()<$(this).siblings("div.dAhubDescr").height())
  351. $(this).height($(this).siblings("div.dAhubDescr").height());
  352. else
  353. $(this).siblings("div.dAhubDescr").height($(this).height());
  354.  
  355. if($(this).parent().siblings("div.mcb-whoicon").find("img").width()==100){
  356. // $(this).siblings("div.dAhubDescr").css("width","78%");
  357. // $(this).parent().siblings("div.h").find("i.dd").css("left","35px");
  358. }
  359. });
  360. }
  361. function formatdataset(dataset,iconen){
  362. var entry=$('<div class="mcbox ch mcbox-full mcbox-full-comment" onmousedown="return true;" onselectstart="return true;" dAhubId="'+dataset[0].hashCode()+'"><div class="ch-ctrl mc-ctrl">'+ //outer
  363. '<div class="mcbox-inner mcbox-inner-full mcbox-inner-full-comment"><div class="talkwrap"><div class="mcb-whoicon" style="display:inline-block;vertical-align:top;float:none;">'+ //inner wrapper and iconbox
  364. iconen+
  365. // '<a href="https://dahub.deviantart.com/" target="_self"><img title="dAhub" alt=":icondahub:" src="https://a.deviantart.net/avatars/d/a/dahub.gif?2" class="avatar"></a>'+ //icon
  366. '</div><div class="h" style="display:inline-block;vertical-align:top;"><i class="dd"><i></i></i></div>'+ //end icon wrapper and speachbubble-arrow
  367. '<div class="dAhub_content_wrapper" style="width:90%;display:inline-block;vertical-align:top;"><div class="ch talkmessage talkmessage-taller dAhubDescr" style="width:86%;display:inline-block;vertical-align:top;"><i class="c tl"><b></b></i><i class="c tr"><b></b></i><i class="c bl"><b></b></i><i class="c br"><b></b></i><div class="h"><table class="f" style="width:100%"><tbody><tr><td style="" class="f"><div class="mcb-body">'+
  368. "<div style='padding:3px; text-align:center;border-radius:5px;margin-right:1%;display:inline-block;width:59%;vertical-align:top;'><a href="+dataset[0]+" style='text-decoration:none;cursor:pointer;display:block;color:#fdc;font-size:16px;font-weight:bolder;text-shadow:1px 1px 1px #141, -1px -1px 1px #141'>"+dataset[1]+"</a><div>By "+dataset[3]+(dataset[4]!=null?" at"+ dataset[4]:"")+"</div></div>"+
  369. // "<div style='padding:3px; text-align:center;border-radius:5px;box-shadow:1px 1px 1px #131;font-weight:bolder;display:inline-block;width:33%;color:#791;vertical-align:top;'>"+dataset[5]+"</div><div>"
  370. "<div style='padding:3px; text-align:center;border-radius:5px;box-shadow:1px 1px 1px #131;font-weight:bolder;width:33%;color:#791;float:right;background-color:#f0f9ec;'>"+dataset[5]+"</div><div>"
  371. +dataset[7]+
  372. '</div></div></td></tr></tbody></table></div></div> '+
  373. '<div style="width:13%;display:inline-block;vertical-align:top;" class="ch talkmessage talkmessage-taller dAhubPrizes"><div class="mcb-body" style="width:auto;">'+
  374. 'Prize:<br/>'+prize2Icon(dataset[6])+
  375. '</div></div></div><div class="h"><div class="mcb-controls"><div style="padding-bottom: 4px; display: block;text-align:center;">'+
  376. 'Deadline:<br/><span style="font-weight:bold;font-size:14px;color:#676;">'+dataset[2].split(" ")[2]+' of<br/>'+dataset[2].split(" ")[1]+'</span>'+
  377. '</div></div></div></div></div></div></div>');
  378.  
  379.  
  380. $("<span class='mcx' style='display:block;' dAhubId='"+dataset[0].hashCode()+"'></span>").appendTo(entry.find("div.mc-ctrl")).click(function(){
  381. $("div.mcbox[dAhubId='"+$(this).attr("dAhubId")+"']").hide();
  382. hidelist.push($(this).attr("dAhubId"));
  383. setTimeout(()=>{GM.setValue("hidelist",JSON.stringify(hidelist))},0);//override security access for GM-features.
  384. curvis--;
  385. $("#dAhub_CM_Tab span.ttext").html("dAhub Contests<span class='c'>("+curvis+")</span>");
  386. });
  387. return entry;
  388. }
  389.  
  390. function filterdisplay(){
  391. curvis=0;
  392. var accSetts={
  393. dahub_tab_general_unhide :false,
  394. dahub_tab_descr_black :"",
  395. dahub_tab_descr_white :"",
  396. dahub_tab_category_tricheck_trad :"neutral", //Traditional
  397. dahub_tab_category_tricheck_dig :"neutral", //Digital
  398. dahub_tab_category_tricheck_fan :"neutral", //Fan Art
  399. dahub_tab_category_tricheck_OC :"neutral", //Original Character
  400. dahub_tab_category_tricheck_photo :"neutral", //Photography
  401. dahub_tab_category_tricheck_literature :"neutral", //Literature
  402. dahub_tab_category_tricheck_crafts :"neutral", //Crafts
  403. dahub_tab_category_tricheck_comics :"neutral", //Comics
  404. dahub_tab_category_tricheck_vnameeo :"neutral", //Vnameeo
  405. dahub_tab_category_tricheck_icon :"neutral", //Icon/Skin/Stamp
  406. dahub_tab_category_tricheck_visual :"neutral", //All Visual Arts
  407. dahub_tab_category_tricheck_all :"neutral", //All Mediums
  408. dahub_tab_category_tricheck_mature :"neutral", //Mature Theme
  409. dahub_tab_category_tricheck_watch :"neutral", //Must Watch
  410. dahub_tab_category_tricheck_mascot :"neutral", //Mascot
  411. dahub_tab_category_tricheck_color :"neutral", //Coloring
  412. dahub_tab_prize_money :true,
  413. dahub_tab_prize_physical :true,
  414. dahub_tab_prize_points :true,
  415. dahub_tab_prize_commis :true,
  416. dahub_tab_prize_other :true,
  417. dahub_tab_prize_feature :true,
  418. dahub_tab_prize_lama :true,
  419. dahub_tab_prize_crit :true,
  420. dahub_tab_prize_favs :true,
  421. dahub_tab_prize_prem :true,
  422. dahub_tab_prize_acg :true,
  423. dahub_tab_time_min :0,
  424. dahub_tab_time_max :360
  425. };
  426. for(var i=0;i<settings.length;i++)
  427. accSetts[settings[i][0]]=settings[i][1];
  428. var aktdat=new Date();
  429. var deadlinedate;
  430.  
  431. $("div#dAhub_content div.mcbox").show().each(function(i,v){
  432.  
  433. deadlinedate=new Date(daten[i][2] +" "+ aktdat.getFullYear());
  434. if((deadlinedate-aktdat)/1000/60/60/24<-14)deadlinedate.setFullYear(deadlinedate.getFullYear()+1);
  435.  
  436.  
  437. if(accSetts.dahub_tab_general_unhide==false && (hidelist!=null&&hidelist.indexOf(daten[i][0].hashCode())!=-1))
  438. {$(this).hide();return;}
  439.  
  440. if(
  441. (accSetts.dahub_tab_category_tricheck_trad=="positive"&&daten[i][5].indexOf("Traditional")==-1)||
  442. (accSetts.dahub_tab_category_tricheck_trad=="negative"&&daten[i][5].indexOf("Traditional")!=-1)||
  443. (accSetts.dahub_tab_category_tricheck_dig=="positive"&&daten[i][5].indexOf("Digital")==-1)||
  444. (accSetts.dahub_tab_category_tricheck_dig=="negative"&&daten[i][5].indexOf("Digital")!=-1)||
  445. (accSetts.dahub_tab_category_tricheck_fan=="positive"&&daten[i][5].indexOf("Fan Art")==-1)||
  446. (accSetts.dahub_tab_category_tricheck_fan=="negative"&&daten[i][5].indexOf("Fan Art")!=-1)||
  447. (accSetts.dahub_tab_category_tricheck_OC=="positive"&&daten[i][5].indexOf("Original Character")==-1)||
  448. (accSetts.dahub_tab_category_tricheck_OC=="negative"&&daten[i][5].indexOf("Original Character")!=-1)||
  449. (accSetts.dahub_tab_category_tricheck_photo=="positive"&&daten[i][5].indexOf("Photography")==-1)||
  450. (accSetts.dahub_tab_category_tricheck_photo=="negative"&&daten[i][5].indexOf("Photography")!=-1)||
  451. (accSetts.dahub_tab_category_tricheck_literature=="positive"&&daten[i][5].indexOf("Literature")==-1)||
  452. (accSetts.dahub_tab_category_tricheck_literature=="negative"&&daten[i][5].indexOf("Literature")!=-1)||
  453. (accSetts.dahub_tab_category_tricheck_crafts=="positive"&&daten[i][5].indexOf("Crafts")==-1)||
  454. (accSetts.dahub_tab_category_tricheck_crafts=="negative"&&daten[i][5].indexOf("Crafts")!=-1)||
  455. (accSetts.dahub_tab_category_tricheck_comics=="positive"&&daten[i][5].indexOf("Comics")==-1)||
  456. (accSetts.dahub_tab_category_tricheck_comics=="negative"&&daten[i][5].indexOf("Comics")!=-1)||
  457. (accSetts.dahub_tab_category_tricheck_vnameeo=="positive"&&daten[i][5].indexOf("Vnameeo")==-1)||
  458. (accSetts.dahub_tab_category_tricheck_vnameeo=="negative"&&daten[i][5].indexOf("Vnameeo")!=-1)||
  459. (accSetts.dahub_tab_category_tricheck_icon=="positive"&&daten[i][5].indexOf("Icon/Skin/Stamp")==-1)||
  460. (accSetts.dahub_tab_category_tricheck_icon=="negative"&&daten[i][5].indexOf("Icon/Skin/Stamp")!=-1)||
  461. (accSetts.dahub_tab_category_tricheck_visual=="positive"&&daten[i][5].indexOf("All Visual Arts")==-1)||
  462. (accSetts.dahub_tab_category_tricheck_visual=="negative"&&daten[i][5].indexOf("All Visual Arts")!=-1)||
  463. (accSetts.dahub_tab_category_tricheck_all=="positive"&&daten[i][5].indexOf("All Mediums")==-1)||
  464. (accSetts.dahub_tab_category_tricheck_all=="negative"&&daten[i][5].indexOf("All Mediums")!=-1)||
  465. (accSetts.dahub_tab_category_tricheck_mature=="positive"&&daten[i][5].indexOf("Mature Theme")==-1)||
  466. (accSetts.dahub_tab_category_tricheck_mature=="negative"&&daten[i][5].indexOf("Mature Theme")!=-1)||
  467. (accSetts.dahub_tab_category_tricheck_watch=="positive"&&daten[i][5].indexOf("Must Watch")==-1)||
  468. (accSetts.dahub_tab_category_tricheck_watch=="negative"&&daten[i][5].indexOf("Must Watch")!=-1)||
  469. (accSetts.dahub_tab_category_tricheck_mascot=="positive"&&daten[i][5].indexOf("Mascot")==-1)||
  470. (accSetts.dahub_tab_category_tricheck_mascot=="negative"&&daten[i][5].indexOf("Mascot")!=-1)||
  471. (accSetts.dahub_tab_category_tricheck_color=="positive"&&daten[i][5].indexOf("Color")==-1)||
  472. (accSetts.dahub_tab_category_tricheck_color=="negative"&&daten[i][5].indexOf("Color")!=-1)
  473. ){$(this).hide();return;}
  474.  
  475. if((!accSetts.dahub_tab_prize_money||accSetts.dahub_tab_prize_money&&daten[i][6].indexOf("Money")==-1)
  476. &&(!accSetts.dahub_tab_prize_physical||accSetts.dahub_tab_prize_physical&&daten[i][6].indexOf("Physical Prize")==-1)
  477. &&(!accSetts.dahub_tab_prize_points||accSetts.dahub_tab_prize_points&&daten[i][6].indexOf("20+ Points")==-1)
  478. &&(!accSetts.dahub_tab_prize_commis||accSetts.dahub_tab_prize_commis&&daten[i][6].indexOf("Free Commission")==-1)
  479. &&(!accSetts.dahub_tab_prize_other||accSetts.dahub_tab_prize_other&&daten[i][6].indexOf("Other")==-1)
  480. &&(!accSetts.dahub_tab_prize_feature||accSetts.dahub_tab_prize_feature&&daten[i][6].indexOf("Feature")==-1)
  481. &&(!accSetts.dahub_tab_prize_lama||accSetts.dahub_tab_prize_lama&&daten[i][6].indexOf("Llamas")==-1)
  482. &&(!accSetts.dahub_tab_prize_crit||accSetts.dahub_tab_prize_crit&&daten[i][6].indexOf("Comments/Critiques")==-1)
  483. &&(!accSetts.dahub_tab_prize_favs||accSetts.dahub_tab_prize_favs&&daten[i][6].indexOf("Watchers/Favs")==-1)
  484. &&(!accSetts.dahub_tab_prize_prem||accSetts.dahub_tab_prize_prem&&daten[i][6].indexOf("Premium Membership")==-1)
  485. &&(!accSetts.dahub_tab_prize_acg||accSetts.dahub_tab_prize_acg&&daten[i][6].indexOf("ACG Winners Package")==-1)
  486. ){
  487. if(accSetts.dahub_tab_prize_money||accSetts.dahub_tab_prize_points||accSetts.dahub_tab_prize_commis||accSetts.dahub_tab_prize_other||accSetts.dahub_tab_prize_feature||accSetts.dahub_tab_prize_lama||accSetts.dahub_tab_prize_crit||accSetts.dahub_tab_prize_favs||accSetts.dahub_tab_prize_prem||accSetts.dahub_tab_prize_acg){//speial condition: all prizes switched off -> all shown.
  488. $(this).hide();return;}
  489. }
  490.  
  491. if($.grep(accSetts.dahub_tab_descr_black.toLowerCase().split(","),function(x,j){return (daten[i][1]+daten[i][7]).toLowerCase().indexOf(x.trim())>-1}).length>0 && accSetts.dahub_tab_descr_black!="")
  492. {$(this).hide();return;}
  493.  
  494. if($.grep(accSetts.dahub_tab_descr_white.toLowerCase().split(","),function(x,j){return (daten[i][1]+daten[i][7]).toLowerCase().indexOf(x.trim())>-1}).length==0 && accSetts.dahub_tab_descr_white!="")
  495. {$(this).hide();return;}
  496.  
  497.  
  498. if((deadlinedate-aktdat)/1000/60/60/24<accSetts.dahub_tab_time_min)
  499. {$(this).hide();return;}
  500.  
  501. if((deadlinedate-aktdat)/1000/60/60/24>accSetts.dahub_tab_time_max)
  502. {$(this).hide();return;}
  503.  
  504. curvis++
  505. });
  506.  
  507.  
  508. $("#dAhub_CM_Tab span.ttext").html("dAhub Contests<span class='c'>("+curvis+")</span>");
  509. setTimeout(resiz, 500);
  510. }
  511.  
  512. function prize2Icon(prices){
  513. var priz=prices.split(",");
  514. var ausgabe=$("<div></div>");
  515. for(var i=0;i<priz.length;i++){
  516. var prizbild=$("<div style='width:20px;height:20px;border-radius:5px; cursor:default;line-height:20px;text-align:center;display:inline-block;margin:2px;vertical-align:top;'></div>");
  517. switch(priz[i].trim()){
  518. case "Money":
  519. prizbild.html("$$");
  520. prizbild.attr("title","money");
  521. break;
  522. case "Physical Prize":
  523. prizbild.css("background","url('https://st.deviantart.net/minish/gruzecontrol/icons-gruser.gif') no-repeat -1840px 0px");
  524. prizbild.attr("title","physical");
  525. break;
  526. case "20+ Points":
  527. prizbild.css("background","url('https://st.deviantart.net/minish/gruzecontrol/icons-gruser.gif') no-repeat -1601px 0px");
  528. prizbild.attr("title","20+ Points");
  529. break;
  530. case "Free Commission":
  531. prizbild.css("background","url('https://st.deviantart.net/minish/gruzecontrol/icons-gruser.gif') no-repeat -40px 0px");
  532. prizbild.attr("title","Free Commission");
  533. break;
  534. case "Other":
  535. prizbild.css("background","url('https://st.deviantart.net/minish/gruzecontrol/icons-gruser.gif') no-repeat -1440px 0px");
  536. prizbild.attr("title","Other");
  537. break;
  538. case "Feature":
  539. prizbild.css("background","url('https://st.deviantart.net/minish/gruzecontrol/icons-gruser.gif') no-repeat -520px 0px");
  540. prizbild.attr("title","Feature");
  541. break;
  542. case "Llamas":
  543. prizbild.css("background","url('https://st.deviantart.net/badges/llama.gif') no-repeat scroll center center");
  544. prizbild.attr("title","Llamas");
  545. break;
  546. case "Comments/Critiques":
  547. prizbild.css("background","url('https://st.deviantart.net/minish/main/more.gif') no-repeat -1720px 0px");
  548. prizbild.attr("title","Comments/Critiques");
  549. break;
  550. case "Watchers/Favs":
  551. prizbild.css("background","url('https://st.deviantart.net/minish/messages/mc3.gif') no-repeat 0px 0px");
  552. prizbild.attr("title","Watchers/Favs");
  553. break;
  554. case "Premium Membership":
  555. prizbild.css("background","url('https://st.deviantart.net/minish/main/more.gif') no-repeat -840px 0px");
  556. prizbild.attr("title","Premium Membership");
  557. break;
  558. case "ACG Winners Package":
  559. prizbild.css({"background":"url('https://a.deviantart.net/avatars/a/n/anothercontestgroup.jpg') no-repeat 0px 0px","background-size":"20px 20px"});
  560. prizbild.attr("title","ACG Winners Package");
  561. break;
  562. };
  563. prizbild.appendTo(ausgabe);
  564. }
  565. return ausgabe.html();
  566.  
  567. }
  568. function checkupdate(){
  569. //updates database once daily after 22pm dAST (UTC-7h). (GMT+2h: 7:00am)
  570. var aktuell=new Date();
  571. aktuell.setUTCHours(aktuell.getUTCHours()-7); //current dAST time
  572.  
  573. var update = new Date(); //22pm dAST the Journal get's updated
  574. update.setUTCHours(22);
  575. update.setUTCMinutes(0);
  576. while(aktuell-update<0)update.setUTCDate(update.getUTCDate()-1);
  577.  
  578. var lastupdateDate=new Date(lastupdate*1000*60); //lastupdate UTC Minutes -> miliseconds
  579. lastupdateDate.setUTCHours(lastupdateDate.getUTCHours()-7); //convert to dAST
  580.  
  581.  
  582. if(lastupdateDate-update<0||daten.length==0){ //last update was before database got updated:
  583. lastupdate=new Date().getTime()/60/1000;
  584. setTimeout(()=>{GM.setValue("lastupdate",lastupdate);},0); //override security access for GM-features.
  585. $("#dAhub_CM_Tab span.ttext").html("dAhub Contests...");
  586. getdata();
  587. }else{
  588. }
  589. }
  590.  
  591. String.prototype.hashCode = function() {
  592. var hash = 0, i, chr, len;
  593. if (this.length == 0) return hash;
  594. for (i = 0, len = this.length; i < len; i++) {
  595. chr = this.charCodeAt(i);
  596. hash = ((hash << 5) - hash) + chr;
  597. hash |= 0; // Convert to 32bit integer
  598. }
  599. return hash.toString();
  600. };
  601.  
  602. function start(){
  603. // if(!unsafeWindow.$){setTimeout(start,500);return;}
  604. // $=unsafeWindow.$;
  605. loadSets().then(insertoptik).then(checkupdate);
  606. }
  607. start();