napisy24.pl helper

Dodaje kilka ciekawych funkcji na stronie napisy24.pl

当前为 2015-01-12 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name napisy24.pl helper
  3. // @version 0.9.1
  4. // @author KO
  5. // @description Dodaje kilka ciekawych funkcji na stronie napisy24.pl
  6. // @namespace KO/napisy24_helper
  7. // @icon data:image/png;base64,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
  8. // @include http://napisy24.pl/*
  9. // @grant none
  10. // @run-at document-start
  11. // ==/UserScript==
  12.  
  13. var icons = {
  14. staroff: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH3gwUDR0hRbYVJwAAAjtJREFUOMudlM+rElEUx8+8lOGqE6PjzLyXGzczbhSVAqOyRYt2QYu3q7eqhehCJmwXiW8hSgvxByK0qFX/QIKLlsILIRI0uXlHQmgR+QZFEEZUnFaGr17O6x24i3vuuZ/DOed7L2UYBphZtVp9AAAQj8ffm8Va4ALGcVzKMAwKAEyBYBjGzlUulx9jjOcY43mlUjkyi98zyUeJopjgeZ7meZ4WBCEBANSuCzuBtVotFg6Hb2z2oVDoeq1Wi10KmMvlnKIoPnE6nb/77HK5LIIgPM1kMuw/S8rn8zcZhrlltVp9NpvNbbVa3TRNc3a73enz+fYRQmeS6rq+JoT8mM1m4+Vyqc3n85Gu6yNd1/F4PP5oYRjGL8vy81AotH+RiSOE9oLBoAcAPNv+drutEUIyV+r1+udGozFYr9cRURSdcAnrdDrfMcZKIpF4Q22EXSwW70qS9DoSicj/A2u1Wt9UVY0lk8kPAADU9kspFAoBr9f7LhqN+imKMtVvs9n8OhwOjxRF+XTulBVF6fZ6vcNut/vzAmWOCCGH27BzZWMYho1l2atmQJZlHYvFwmKqQ5fLdZ/neWQGFATBxnHcPVMgQiiA0Flev9/XVFXV/ogDhFDA9LdxOBwHm6YTQk4JISfT6fQlAAAh5FiW5duSJLm3Y3cCaZq+hjE+HQwGJ5qmvUilUl+2jh8WCoWAqqrHkiTdoWna89fT25ZNNps9YBjm7Wq1eqYoSm9XD0ulkh8AXk0mk0fpdHq88f8CflYIlVvjW0cAAAAASUVORK5CYII='
  15. ,staron: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH3gwUDR8nnuPSkAAAAsZJREFUOMulk0tvG1UUx//n3Jm5M2NnUjueOnYCoptmQYNUSKEqFYss2CGqloeQ6AoWkbJtdhVS8wX4ALBAoq14NGXBAqFu2oqmFSgEUKqySRcNIbUzcRw7bTyx554unGeBuApHOrpX5179dF5/EhF0sj8mgrcA4KUzte87/bXwDOYGqXMiIAAdgdzpw68T6Q97+sPXcs+Fr05fTZ/9n0AiP3BHPV9pz1faTbujANG+gdMT/khYzA6ZJIZJYoR9mVemJ/yRfQF/ukwZL3A+sl2xEhMjMQ042lhe2v74+hd04D9runPRPu767glWPGA5Vo6YckpJj+Vwpjvn9bISFkk2OwDTIrMSNRZaTVORhCKTSLnVMuXWeuveWn31tqU990i2WBjL9x/sNSZGksQwZh3GbJ5NiCSACEAMVjZnC34fs+5jdqCUBrNG+UE5qii+QCKC374L3s4Wcp+GxeyhLWgSb0HFNCEQECkwO21XGopdsNKI5qtz0cNo7OXT9a9pc7Gnv/HeCPKZz/LPZw+bpIHtbBswSQwRsw1SLpg1WGmU5qr3q+XqyNC7jWu7hnL0vbWb1b+W3pmfXZjZvRkEgEBE7esO+3u2/Gc9qr+/CQMAelp6ty7SQPGF8EYm7+VNst4uWZqAtEsmdsDKwfLDuLw0Xxs+9kF8d0/psYHvem7AZAFsAAhEeGPIDCILTBZcX9Jxsm511LLb5b3pBymPWNr9IAYkgQAg8EaWFvxA+77nDQP4fU+gpfSg7XgQacKAwKKwUqpFYKA77MoRGMQWLGXD1s5gxwwdTxeYHYghVKOVxUqpOtlcjT8BgOrS4/FMeOD1bL4nR2zDcXShI1DZdrFSWl5cLi1OrlUenR86G8/seD41dUkP1qLV8Uw+PGk7uu8f2hORLb/5JQpTV1I//nzFeXFn/N/8l6/SR6a+Tf0w+TmyO+NPAC36SwTUSJYTAAAAAElFTkSuQmCC'
  16. ,search: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAABJdEVYdENvcHlyaWdodABQdWJsaWMgRG9tYWluIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL3B1YmxpY2RvbWFpbi9Zw/7KAAABTklEQVQokY2PP0hCYRTFf/eZFThULhG0F0UQ4djgZsaHS0FBUK7NTkFNRVNbGER/oEVoCnyfgptbNAdRYwQ5BqJS6Ou2fMoriTrbvef+uOeIqgJQLpfngyDYFpElYAh4E5GTWCx2lkwm3wlJVBXf97MicgoM0q/7SCSymE6n692FZ61dEJELB+RFJNHpdMZUdQ2oA3NBEFx9++T7fglYBm6MMSuAds1isTjled4j8BmNRidTqVQNwANm3U0+DABkMpknoAl47XY70YvnSiMiEz/LVKvVAaDh/NcwZAFUNVupVOJhqNFoHAPjQK3Vaj2EO00Dt8Ao8AIcAXEXe9Xd7RljDnqQqmKtTQIFoC+iUwfYMsYUepDLP9xsNjdVdUZERlT1DvgALh0YABvGmOse9JustTvAYfejqq7/CTlwF9h34/O/IIBSqZRT1Rxw/gU4l4oisfSMMQAAAABJRU5ErkJggg=='
  17. ,gear: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH3gwZCB0WCaqqHgAAA3FJREFUOMulVN1LI1cUP2fuHchmQ12jMRKNRIwFG1jb3ARhxIbp0vSh6EP70AUpeWj/o1LYV5XtUx8Ka0ultKDJiB9MaAyCYASt+dB80padWZmZe/vQzDYyrvvQ83Tvub/7Ox+/cy8KIeA+SyaTHyLiAgAAIUQ7ODjYvQ9P4S0my/LPc3NzFADg5OTkFQC8cx9eGtyoqupTFOUZY2wZAIAx9phSKhRFkRVFkSVJkpPJ5Hv9s88URXmmqqpvkAPdkhVFeSCE+CUcDrNOp8Mdx6lxzkOZTGZoZmYGAQBOT095Pp//S5KkNiEkEgwGpWazqSPix7u7u+atkoUQ30YiEZbNZn2O40C3250lhMDIyMjr6LOzs9Lw8PAjzvmjYDAIhBDY2tpiV1dX3wDA17cIbdv+qdVqfeE4DlBKYWxs7M4ejY6OwsAd6HQ69s3NzQ+eHh4eHn5v23a92+16SGq1GtRqNY+/2WyCZVl/6Lq+6VGZMfZYluWQJP2n08XFhSgUCoZlWfW+4pGlpSX/1NQUAgBQSoFzPskYY7qu6wAAmEwmP6KU/kgp5YuLiw/i8Tj2ewobGxuGaZpPdV1/0Q+6HAgEvltdXQ24QSuVitA0zbRtW7Jt+1MJEdOJRILmcjm/SwYAcHl5CY7jVF0yAABd119YltUYLD8ej2Mul/MnEgmKiGkJAAAR7xQAEfkdPvEG7L+iIGKxXC6L9fV1o1KpvAZHo1EghERTqVTW9aVSqSwhJDIxMQGDJa+trRnlclkgYhGFEICIyBj7gFL628rKypA7Gufn57xQKJiO49T6bzmSyWT80WhUclXe3Nz807KsJ8VisSiEELQvgACAoqIoTc75kBs9FotJsVjsYbVafRcRYTAzdw4JIdW9vT3dM4fpdHqFEDIRDAY9/ZmcnPSQuUOOiNOMsU88hLIsfx4OhwkhBGzbhlarBb1ez0PS6/Wg1WqBbdsgyzKEQiHq8/meej6H+fn5h36//9fx8fH32+22wzlvOI4zpqpqYHp6GgEAzs7OxPb29t+EkDYhZDwUCpF6vf67YRhPSqXSy1sZlkqll4ioXl9fPzcM40tN0+KWZak7Ozumi8nn868sy1rSNG3GNM2vGo3Gc0RUXbJbGb7JFhYWzEQiQQEAjo+Pb/b39wP/68cWQiwfHR2x/vrwbfh/AK2fjH9FpXiPAAAAAElFTkSuQmCC'
  18. };
  19.  
  20. var options_db = 'n24h_options';
  21. var shows_db = 'n24h_shows';
  22.  
  23. var utils = {
  24. /**
  25. Dodaj dodatkowego CSS'a do strony
  26. */
  27. insertcss: function(css) {
  28. var style = document.createElement('style');
  29. style.setAttribute('type', 'text/css');
  30. if (style.styleSheet)
  31. {
  32. style.styleSheet.cssText = css;
  33. } else {
  34. style.appendChild(document.createTextNode(css));
  35. }
  36. document.head.appendChild(style);
  37. }
  38. };
  39.  
  40. /**
  41. Obsługa opcji
  42. */
  43. var options = {
  44. /**
  45. Zapisz wartość
  46. */
  47. setValue: function(name, value) {
  48. var optdb=localStorage.getItem(options_db);
  49.  
  50. if (!optdb)
  51. optdb='{}';
  52. var o=JSON.parse(optdb);
  53.  
  54. o[name]=value;
  55. localStorage.setItem(options_db, JSON.stringify(o));
  56. },
  57. /**
  58. Pobierz wartość
  59. */
  60. getValue: function(name, def) {
  61. var optdb=localStorage.getItem(options_db);
  62.  
  63. if (!optdb)
  64. optdb='{}';
  65. var o=JSON.parse(optdb);
  66.  
  67. var value=o[name];
  68. if (value==null)
  69. value=def;
  70.  
  71. return value;
  72. },
  73. /**
  74. Usuń klucz z opcji
  75. */
  76. remove: function(name) {
  77. var optdb=localStorage.getItem(options_db);
  78.  
  79. if (!optdb)
  80. optdb='{}';
  81. var o=JSON.parse(optdb);
  82.  
  83. delete o[name];
  84. localStorage.setItem(options_db, JSON.stringify(o));
  85.  
  86. },
  87. /**
  88. Pokaż/ukryj checkboxy w zależności od innych opcji
  89. */
  90. showHideCheckboxs: function() {
  91. var n24info=document.querySelector('input[data-n24h-checkbox="shown24info"]');
  92. var useimdb=document.querySelector('input[data-n24h-checkbox="useimdbinfo"]');
  93. if (n24info.checked)
  94. useimdb.parentNode.setAttribute('style', 'display:block');
  95. else
  96. useimdb.parentNode.setAttribute('style', 'display:none');
  97. },
  98. /**
  99. Wypełnij panele aktualnymi ustawieniami, serialami, itp.
  100. */
  101. fillPanels: function() {
  102. var inputs=document.querySelectorAll('input[data-n24h-checkbox]');
  103. for (var i=0;i<inputs.length;i++)
  104. {
  105. inputs[i].checked=options.getValue(inputs[i].getAttribute('data-n24h-checkbox'), false);
  106. }
  107. var keywords=showsdb.getAll();
  108. var areashows=document.getElementById('n24h_opt_areashows');
  109. var showtext='';
  110. for (var i=0;i<keywords.length;i++)
  111. {
  112. if (showtext!='')
  113. showtext+='\n';
  114. showtext+=keywords[i];
  115. }
  116. areashows.value=showtext;
  117. var areadebug=document.getElementById('n24h_opt_areadebug');
  118. var debugtext='/**opcje**/\n';
  119. debugtext+=localStorage.getItem(options_db);
  120. debugtext+='\n\n/**seriale**/\n';
  121. debugtext+=localStorage.getItem(shows_db);
  122. areadebug.value=debugtext;
  123. options.showHideCheckboxs();
  124. },
  125. /**
  126. Pokaż panel opcji
  127. */
  128. show: function() {
  129. options.fillPanels();
  130. var panel=document.querySelector('div.n24h_options_background');
  131. panel.setAttribute('style', 'display:block');
  132. },
  133. /**
  134. Ukryj panel opcji
  135. */
  136. hide: function() {
  137. var panel=document.querySelector('div.n24h_options_background');
  138. panel.setAttribute('style', 'display:none');
  139. },
  140. /**
  141. Obsługa kliknięcia checkboxa
  142. */
  143. checkboxClick: function(e) {
  144. e = e || window.event;
  145. var target = e.target || e.srcElement;
  146. options.setValue(target.getAttribute('data-n24h-checkbox'), target.checked);
  147. options.showHideCheckboxs();
  148. },
  149. /**
  150. Obsługa kliknięcia przycisku sekcji
  151. */
  152. typeButtonClick: function(e) {
  153. e = e || window.event;
  154. var target = e.target || e.srcElement;
  155. var panel = target.getAttribute('data-n24h-optiontype');
  156. var opt_panels=document.querySelectorAll('div[data-n24h-optionpanel]');
  157. for (var i=0;i<opt_panels.length;i++)
  158. {
  159. opt_panels[i].setAttribute('style', panel==opt_panels[i].getAttribute('data-n24h-optionpanel')?'display:block':'display:none');
  160. }
  161. var opt_buttons=document.querySelectorAll('div[data-n24h-optiontype]');
  162. for (var i=0;i<opt_buttons.length;i++)
  163. {
  164. opt_buttons[i].setAttribute('class', panel==opt_buttons[i].getAttribute('data-n24h-optiontype')?'n24h_options_panel_button n24h_options_panel_button_selected':'n24h_options_panel_button');
  165. }
  166. options.fillPanels();
  167. },
  168. /**
  169. Obsługa przycisku zapisz
  170. */
  171. btnSaveClick: function() {
  172. var areashows=document.getElementById('n24h_opt_areashows');
  173. var shows = areashows.value.split('\n');
  174. localStorage.removeItem(shows_db);
  175. for (var i=0;i<shows.length;i++)
  176. {
  177. console.log(shows[i]);
  178. if (shows[i] != null && shows[i] != '' && !showsdb.exists(shows[i].trim()))
  179. showsdb.add(shows[i].trim());
  180. }
  181. options.fillPanels();
  182. },
  183. /**
  184. Obsługa przycisku usuwania opcji
  185. */
  186. btnKillOptClick: function() {
  187. if (confirm('Czy napewno chcesz usunąć wszystkie ustawienia?\nNie będzie można tego cofnąć.'))
  188. localStorage.removeItem(options_db);
  189. options.fillPanels();
  190. },
  191. /**
  192. Obsługa przycisku usuwania seriali
  193. */
  194. btnKillShowsClick: function() {
  195. if (confirm('Czy napewno chcesz usunąć wszystkie ulubione filmy/seriale?\nNie będzie można tego cofnąć.'))
  196. localStorage.removeItem(shows_db);
  197. options.fillPanels();
  198. },
  199. init: function() {
  200. var css='#n24h_options_gear{'+
  201. 'cursor:pointer;'+
  202. 'width:20px;'+
  203. 'line-height: 26px;'+
  204. '}'+
  205. '.n24h_options_background{'+
  206. 'position:fixed;'+
  207. 'top:0;'+
  208. 'left:0;'+
  209. 'width:100%;'+
  210. 'height:100%;'+
  211. 'background:rgba(0,0,0,0.6);'+
  212. 'text-align:center;'+
  213. 'z-index:9999;'+
  214. '}'+
  215. '.n24h_options_dialog{'+
  216. 'margin: 0px auto;'+
  217. 'padding: 50px 0px;'+
  218. 'width: 900px;'+
  219. 'height: 100%;'+
  220. 'transition: none 0s ease 0s;'+
  221. 'transform: none;'+
  222. 'position: relative;'+
  223. 'box-sizing: border-box;'+
  224. '}'+
  225. '.n24h_options_content{'+
  226. 'max-height: 100%;'+
  227. 'overflow-y: auto;'+
  228. 'border: 4px solid rgba(85, 85, 85, 0.5);'+
  229. 'background-clip: padding-box;'+
  230. 'box-shadow: 0px 3px 7px rgba(0, 0, 0, 0.3);'+
  231. 'border-radius: 13px;'+
  232. 'position: relative;'+
  233. 'outline: 0px none;'+
  234. 'background-color: #FFF;'+
  235. 'box-sizing: border-box;'+
  236. 'color: #303030;'+
  237. 'font-family: Arial,Helvetica,sans-serif;'+
  238. 'text-align:left;'+
  239. 'display: block;'+//
  240. '}'+
  241. '.n24h_options_header{'+
  242. 'margin: 0px;'+
  243. 'border-bottom: 1px solid #A0A0A0;'+
  244. 'padding: 10px 10px 0px 10px;'+
  245. '}'+
  246. '.n24h_options_body{'+
  247. 'display: table;'+
  248. 'min-height: 150px;'+
  249. '}'+
  250. '.n24h_options_body>input{'+
  251. 'margin: 0px;'+
  252. '}'+
  253. '.n24h_options_close{'+
  254. 'float:right;'+
  255. 'padding: 0px;'+
  256. 'border: 1px solid;'+
  257. 'cursor:pointer;'+
  258. 'margin-top: -25px;'+
  259. 'padding: 1px 2px 1px 2px;'+
  260. 'border-radius: 5px;'+
  261. '}'+
  262. '.n24h_options_close:hover{'+
  263. 'background-color: #D0D0D0;'+
  264. 'border-color: #646F7C;'+
  265. '}'+
  266. '.n24h_options_panel_l{'+
  267. 'padding: 10px;'+
  268. 'border-right: 1px solid #A0A0A0;'+
  269. 'display: table-cell;'+
  270. 'position: relative;'+
  271. '}'+
  272. '.n24h_options_panel_r{'+
  273. 'padding: 10px;'+
  274. 'width: 750px;'+
  275. '}'+
  276. '.n24h_options_panel_button{'+
  277. 'cursor: pointer;'+
  278. 'background-color: #D5D5D5;'+
  279. 'border: 1px solid #000000;'+
  280. 'border-bottom: 3px solid #000000;'+
  281. 'padding: 5px 10px 5px 10px;'+
  282. 'margin-bottom: 2px;'+
  283. '}'+
  284. '.n24h_options_panel_button:hover{'+
  285. 'background-color: #E0E0E0;'+
  286. 'border-radius: 0px 0px 3px 3px;'+
  287. 'border-bottom: 3px solid #D26911;'+
  288. '}'+
  289. '.n24h_options_panel_button_selected{'+
  290. 'border-radius: 0px 0px 3px 3px;'+
  291. 'border-bottom: 3px solid #F21911;'+
  292. '}'+
  293. '.n24h_opt_button{'+
  294. 'background-color: #D5D5D5;'+
  295. 'border: 1px solid #000000;'+
  296. 'border-bottom: 3px solid #000000;'+
  297. 'padding: 3px 5px 3px 5px;'+
  298. 'margin-top: 5px;'+
  299. 'margin-right: 5px;'+
  300. '}'+
  301. '.n24h_opt_button:hover{'+
  302. 'background-color: #E0E0E0;'+
  303. 'border-radius: 0px 0px 3px 3px;'+
  304. 'border-bottom: 3px solid #D26911;'+
  305. '}'+
  306. '.n24h_opt_area{'+
  307. 'width: 100%;'+
  308. 'height: auto;'+
  309. 'cursor: auto !important;'+
  310. 'margin-bottom: 0px;'+
  311. 'background-color: #EEEEEE;'+
  312. 'color: #555555;'+
  313. '}'+
  314. '.n24h_opt_area:focus{'+
  315. 'color: #555555;'+
  316. '}'+
  317. '.n24h_options_panel_r > div > input[type="checkbox"]{'+
  318. 'margin: 0px;'+
  319. 'margin-top: -4px;'+
  320. '}'+
  321. '.n24_option_level2{'+
  322. 'margin-left:30px;'+
  323. '}';
  324.  
  325. var ul=document.querySelector('ul.avatar-main-menu-szare');
  326. if (!ul)
  327. return;
  328. utils.insertcss(css);
  329. var li=document.createElement('li'); //panel z opcjami
  330. li.setAttribute('id', 'n24h_options_gear');
  331. li.setAttribute('title', 'napisy24.pl helper opcje');
  332. li.addEventListener('click', options.show, false);
  333. var img=document.createElement('img');
  334. img.setAttribute('src', icons.gear);
  335. img.setAttribute('style', 'margin-top: -5px;');
  336. li.appendChild(img);
  337. ul.appendChild(li);
  338. var panel = document.createElement('div');
  339. panel.innerHTML='<div class="n24h_options_background" style="display:none">'+
  340. '<div class="n24h_options_dialog">'+
  341. '<div class="n24h_options_content">'+
  342. '<div class="n24h_options_header">'+
  343. '<img src="'+icons.gear+'" style="margin-top: -5px;padding-right: 5px;">Opcje:<br/>'+
  344. '<span style="color:red;font-size:small;">Zmiana opcji wymaga przeładowania strony.</span>'+
  345. '<div class="n24h_options_close">X</div>'+
  346. '</div>'+
  347. '<div class="n24h_options_body">'+
  348. '<div class="n24h_options_panel_l">'+
  349. '<div class="n24h_options_panel_button n24h_options_panel_button_selected" data-n24h-optiontype="general">Ogólne</div>'+
  350. '<div class="n24h_options_panel_button" data-n24h-optiontype="shows">Seriale</div>'+
  351. '<div class="n24h_options_panel_button" data-n24h-optiontype="debug">Debug</div>'+
  352. '</div>'+
  353. '<div class="n24h_options_panel_r" data-n24h-optionpanel="general">'+
  354. '<div><input type="checkbox" data-n24h-checkbox="fixsearch"> Zapamiętaj tekst w wyszukiwarce</div>'+
  355. '<div><input type="checkbox" data-n24h-checkbox="killcover"> Usuń okładki filmów/seriali</div>'+
  356. '<div><input type="checkbox" data-n24h-checkbox="killimdbinfo"> Usuń info o serialu/ocenę IMDB</div>'+
  357. '<div><input type="checkbox" data-n24h-checkbox="shown24info"> Na stronie z tłumaczeniami pokaż info N24/IMDB</div>'+
  358. '<div class="n24_option_level2" style="display:none"><input type="checkbox" data-n24h-checkbox="useimdbinfo"> Zastąp info N24 linkiem do IMDB</div>'+
  359. '<div><input type="checkbox" data-n24h-checkbox="usealtskin"> Używaj alternatywnej (jasnej) skórki</div>'+
  360. '</div>'+
  361. '<div style="display:none" class="n24h_options_panel_r" data-n24h-optionpanel="shows">'+
  362. '<label>Ulubione filmy/seriale (jeden film/serial na linię)</label>'+
  363. '<textarea id="n24h_opt_areashows" class="n24h_opt_area" rows="10" ></textarea>'+
  364. '<button id="n24h_opt_btn_save" class="n24h_opt_button">Zapisz</button>'+
  365. '</div>'+
  366. '<div style="display:none" class="n24h_options_panel_r" data-n24h-optionpanel="debug">'+
  367. '<label>Informacje do debugowania</label>'+
  368. '<textarea id="n24h_opt_areadebug" rows="10" class="n24h_opt_area" readOnly></textarea>'+
  369. '<button id="n24h_opt_btn_killshows" class="n24h_opt_button">Usuń wszystkie ulubione filmy/seriale</button>'+
  370. '<button id="n24h_opt_btn_killopt" class="n24h_opt_button">Usuń wszystkie ustawienia (bez filmów/seriali)</button>'+
  371. '</div>'+
  372. '</div>'+
  373. '</div>'+
  374. '</div>'+
  375. '</div>';
  376. document.body.appendChild(panel);
  377. //przycisk zapisz
  378. var close=document.querySelector('div.n24h_options_close');
  379. close.addEventListener('click', options.hide, false);
  380. //checkboxy
  381. var opt_checkboxs=document.querySelectorAll('input[data-n24h-checkbox]');
  382. for (var i=0;i<opt_checkboxs.length;i++)
  383. opt_checkboxs[i].addEventListener('click', options.checkboxClick, false);
  384. //sekcje
  385. var opt_types=document.querySelectorAll('div[data-n24h-optiontype]');
  386. for (var i=0;i<opt_types.length;i++)
  387. opt_types[i].addEventListener('click', options.typeButtonClick, false);
  388. //przycisk zapisz
  389. var opt_btn_save=document.getElementById('n24h_opt_btn_save');
  390. opt_btn_save.addEventListener('click', options.btnSaveClick, false);
  391. //usuń opcje
  392. var opt_btn_killopt=document.getElementById('n24h_opt_btn_killopt');
  393. opt_btn_killopt.addEventListener('click', options.btnKillOptClick, false);
  394. //usuń seriale
  395. var opt_btn_killshows=document.getElementById('n24h_opt_btn_killshows');
  396. opt_btn_killshows.addEventListener('click', options.btnKillShowsClick, false);
  397. }
  398. };
  399.  
  400. var showsdb = {
  401. all: null,
  402. upper: null,
  403. /**
  404. Pobiera tablicę fraz-kluczy.
  405. @return array Tablica fraz-kluczy.
  406. */
  407. getAll: function() {
  408. var keywords = localStorage.getItem(shows_db);
  409. this.all = (keywords != null && keywords != '') ? JSON.parse(keywords) : [];
  410. return this.all;
  411. },
  412. /**
  413. Pobiera tablicę fraz-kluczy.
  414. @param string keyword
  415. @return bool Prawda jeśli keyword istnieje w tablicy; inaczej fałsz.
  416. */
  417. exists: function(keyword) {
  418. var keywords = localStorage.getItem(shows_db);
  419. this.upper = (keywords != null && keywords != '') ? JSON.parse(keywords.toUpperCase()) : [];
  420. return this.upper.indexOf(keyword.toUpperCase()) < 0 ? false : true;
  421. },
  422. /**
  423. Dodaje keyword do tablicy fraz-kluczy.
  424. @param string keyword
  425. @return void
  426. */
  427. add: function(keyword) {
  428. if (!this.exists(keyword))
  429. {
  430. this.getAll();
  431. this.all = this.all.concat([keyword]);
  432. localStorage.setItem(shows_db, JSON.stringify(this.all));
  433. return 1;
  434. }
  435. return 0;
  436. },
  437. /**
  438. Usuwa keyword z tablicy fraz-kluczy.
  439. @param string keyword
  440. @return void
  441. */
  442. remove: function(keyword) {
  443. if (this.exists(keyword))
  444. {
  445. this.getAll();
  446. this.all.splice(this.upper.indexOf(keyword.toUpperCase()), 1);
  447. localStorage.setItem(shows_db, JSON.stringify(this.all));
  448. return 1;
  449. }
  450. return 0;
  451. }
  452. };
  453.  
  454. /**
  455. Strona z tłumaczeniami
  456. */
  457. var tlumaczenia = {
  458. /**
  459. Pobierz nazwę filmu/serialu bez numeru sezonu i odcinka/odcinków
  460. */
  461. getTitle: function(row) {
  462. var title=row.getAttribute('data-head');
  463. //oczyść tytuł ze wszystkich śmieci i numeru serii oraz odcinka/odcinków
  464. title=title.trim().replace(/\d+x\d+.*/, '');
  465. //usuń spacje na końcu która pozostała po wywaleniu numeru serii i odcina
  466. title=title.trim();
  467. return title;
  468. },
  469. /**
  470. Zrób zebrę od nowa
  471. */
  472. restyleRows: function() {
  473. var rows=document.querySelectorAll('table#translationsTable > tbody > tr:not([style*="none"])');
  474. for (var i=0;i<rows.length;i++) {
  475. var trcl=rows[i].getAttribute('class');
  476. trcl=trcl.replace(/(odd|even)/, '');
  477. if (i%2)
  478. {
  479. rows[i].setAttribute('class', trcl+' odd');
  480. } else {
  481. rows[i].setAttribute('class', trcl+' even');
  482. }
  483. }
  484. },
  485. /**
  486. Przenieś wiersz na szczyt listy
  487. */
  488. moveTop: function(row) {
  489. //znajdź tabelkę z tłumaczeniami
  490. var table=document.querySelector('table#translationsTable > tbody');
  491. //znajdź pierwszy wiersz tabelki
  492. var first_line=table.querySelector('tr');
  493. //wstaw przed pierwszy wiersz nasz wiersz
  494. table.insertBefore(row,first_line);
  495. var td=row.querySelector('td[data-n24h-star]');
  496. td.setAttribute('data-n24h-star', 'on');
  497. },
  498. /**
  499. Umieść ulubione filmy/seriale na szczycie listy
  500. */
  501. FavoriteOnTop: function() {
  502. /**
  503. Dla każdego wiersza w tabeli...
  504. Od końca do początku, żeby zachować kolejność sortowania
  505. */
  506. var rows=document.querySelectorAll('table#translationsTable > tbody > tr');
  507. for (var i=rows.length-1;i>=0;i--)
  508. {
  509. var row=rows[i];
  510. /**
  511. Wyciąga tytuł i oczyszcza go ze zbędnych znaków.
  512. */
  513. var title=tlumaczenia.getTitle(row);
  514. if (showsdb.exists(title))
  515. {
  516. //Znaleziono dopasowanie.
  517. tlumaczenia.moveTop(row);
  518. } else {
  519. //Nie ma dopasowania
  520. //Wyczyść na wszelki wypadek gwiazdkę
  521. var td=row.querySelector('td[data-n24h-star]');
  522. td.setAttribute('data-n24h-star', 'off');
  523. }
  524. }
  525. tlumaczenia.restyleRows();
  526. },
  527. /**
  528. Ustaw informację o kierunku sortowania w nagłówku tabelki
  529. */
  530. SetColumnHeader: function(col, reverse) {
  531. var header=document.querySelectorAll('table#translationsTable>thead>tr>th.header');
  532. for (var i=0;i<header.length;i++)
  533. {
  534. if ((i==col)&&(reverse==1))
  535. header[i].setAttribute('class', 'header n24h_sort_asc')
  536. else if ((i==col)&&(reverse==-1))
  537. header[i].setAttribute('class', 'header n24h_sort_desc')
  538. else {
  539. var thcl=header[i].getAttribute('class');
  540. thcl=thcl.replace(/(n24h_sort_asc|n24h_sort_desc)/, '');
  541. header[i].setAttribute('class', thcl);
  542. }
  543. }
  544. },
  545. /**
  546. Sortowanie tabelki z tłumaczeniami
  547. */
  548. sortTable: function(col, reverse) {
  549. var table=document.querySelector('table#translationsTable');
  550. col = typeof col !== 'undefined' ? col : options.getValue('column', 4);
  551. reverse = typeof reverse !== 'undefined' ? reverse : options.getValue('reverse', 1);
  552. var tb = table.tBodies[0], // use `<tbody>` to ignore `<thead>` and `<tfoot>` rows
  553. tr = Array.prototype.slice.call(tb.rows, 0), // put rows into array
  554. i;
  555. reverse = -((+reverse) || -1);
  556. tr = tr.sort(function (a, b) { // sort rows
  557. var atext=a.cells[col].textContent.trim();
  558. var btext=b.cells[col].textContent.trim();
  559. if ((col==3)||(col==4))
  560. {
  561. //Kolumna 3: "Postęp"
  562. //Kolumna 4: "Oczekujący"
  563. //trzeba usunąć znaki: procentu, plus i minus oraz zamienić na numerek
  564. avalue=Number(atext.replace(/[\+\-\%]/g, ''));
  565. bvalue=Number(btext.replace(/[\+\-\%]/g, ''));
  566. return reverse==1?avalue-bvalue:bvalue-avalue;
  567. } else {
  568. //resztę kolumn traktujemy jako tekstowe
  569. // `-1 *` if want opposite order
  570. return reverse * (atext.localeCompare(btext));
  571. }
  572. });
  573. for(i = 0; i < tr.length; ++i)
  574. {
  575. tb.appendChild(tr[i]); // append each row in order
  576. }
  577.  
  578. //zapisz ustawienia sortowania
  579. options.setValue('column', col);
  580. options.setValue('reverse', -((+reverse) || -1));
  581. //ustaw nagłówek
  582. tlumaczenia.SetColumnHeader(col, reverse);
  583. //przesuń ulubione na samą górę
  584. tlumaczenia.FavoriteOnTop();
  585. },
  586. /**
  587. Obsługa kliknięcia w gwiazdkę
  588. */
  589. StarClickHandler: function(e) {
  590. e = e || window.event;
  591. var target = e.target || e.srcElement;
  592. var row=target.parentNode;
  593. var title=tlumaczenia.getTitle(row);
  594. if (this.getAttribute('data-n24h-star')!='on')
  595. {
  596. //Zacznij śledzić...
  597. var keyword = prompt('Podaj tytuł filmu lub serialu\nbez numeracji sezonu/odcinka:', tlumaczenia.getTitle(row));
  598. tlumaczenia.AddTitle(keyword);
  599. } else {
  600. //Przestań śledzić...
  601. tlumaczenia.RemoveTitle(title);
  602. }
  603. },
  604. /**
  605. Szukanie filmu/serialu na liście tłumaczonych
  606. */
  607. DoSearch: function() {
  608. var keyword = document.querySelector('input#n24h_tr_input_search').value.trim().toUpperCase();
  609. var rows=document.querySelectorAll('table#translationsTable > tbody > tr');
  610. for (var i=0;i<rows.length;i++)
  611. {
  612. var row=rows[i];
  613. var title=tlumaczenia.getTitle(row).toUpperCase();
  614. if (keyword == null || keyword == '')
  615. {
  616. //pokazujemy wszystkie rekordy
  617. row.style.display='table-row';
  618. } else if (title.indexOf(keyword)!=-1)
  619. {
  620. row.style.display='table-row';
  621. } else {
  622. row.style.display='none';
  623. }
  624. }
  625. tlumaczenia.restyleRows();
  626. },
  627. /**
  628. Obsługa szukania z uwzględnieniem przycisku ESC
  629. */
  630. SearchHandler: function(e) {
  631. e = e || window.event;
  632. if (e.keyCode==27)
  633. document.getElementById('n24h_tr_input_search').value='';
  634. tlumaczenia.DoSearch();
  635. },
  636. /**
  637. Przycisk wyczyść
  638. */
  639. ClearHandler: function() {
  640. document.getElementById('n24h_tr_input_search').value='';
  641. tlumaczenia.DoSearch();
  642. },
  643. /**
  644. Dodaj film/serial do listy ulubionych
  645. */
  646. AddTitle: function(title) {
  647. if (title != null && title != '' && !showsdb.exists(title))
  648. {
  649. if (showsdb.add(title))
  650. {
  651. document.querySelector('input#n24h_tr_input_new').value='';
  652. var select=document.querySelector('select#n24h_tr_shows_list');
  653. var option=document.createElement("option");
  654. option.text=title;
  655. option.setAttribute('class', 'n24h_tr_option');
  656. select.add(option);
  657. tlumaczenia.sortTable();
  658. }
  659. }
  660. },
  661. /**
  662. Przycisk dodaj
  663. */
  664. AddNewHandler: function() {
  665. var keyword = document.querySelector('input#n24h_tr_input_new').value.trim();
  666. tlumaczenia.AddTitle(keyword);
  667. },
  668. /**
  669. Usuń film/serial z listy ulubionych
  670. */
  671. RemoveTitle: function(title) {
  672. if (showsdb.exists(title))
  673. {
  674. if (showsdb.remove(title))
  675. {
  676. var select=document.querySelector('select#n24h_tr_shows_list');
  677. for (var i=0;i<select.length;i++)
  678. if (select[i].value.toUpperCase()==title.toUpperCase())
  679. {
  680. select.remove(i);
  681. break;
  682. }
  683. }
  684. tlumaczenia.sortTable();
  685. }
  686. },
  687. /**
  688. Przycisk usuń
  689. */
  690. RemoveHandler: function() {
  691. var keyword = document.querySelector('select#n24h_tr_shows_list').value;
  692. tlumaczenia.RemoveTitle(keyword);
  693. },
  694. /**
  695. Dodaj panel na górze tabelki z tłumaczeniami
  696. */
  697. AddPanel: function() {
  698. var css='#n24h_tr_input_search{'+ //wyszukiwanie
  699. 'margin-right: 5px;'+
  700. 'padding-left: 22px;'+
  701. 'border-radius: 4px;'+
  702. 'height: 25px;'+
  703. 'margin-bottom: 0px;'+
  704. 'width: 150px;'+
  705. 'background-repeat: no-repeat;'+
  706. 'background-position: 5px center;'+
  707. 'background-image: url('+icons.search+');'+
  708. '}'+
  709. '#n24h_tr_input_new{'+
  710. 'margin-right: 5px;'+
  711. 'padding-left: 27px;'+
  712. 'border-radius: 4px;'+
  713. 'height: 25px;'+
  714. 'margin-bottom: 0px;'+
  715. 'width: 150px;'+
  716. 'background-repeat: no-repeat;'+
  717. 'background-position: 5px center;'+
  718. 'background-image: url('+icons.staroff+');'+
  719. '}'+
  720. '#n24h_tr_input_clear,#n24h_tr_input_add,#n24h_tr_input_remove{'+
  721. 'border: 1px solid #32383E;'+
  722. 'background-color: #1B1F23;'+
  723. 'color: #7A878C;'+
  724. 'border-radius: 4px;'+
  725. 'cursor: pointer;'+
  726. 'width: 80px;'+
  727. 'height: 25px;'+
  728. '}'+
  729. '#n24h_tr_input_clear:hover,#n24h_tr_input_add:hover,#n24h_tr_input_remove:hover{'+
  730. 'border-color:rgba(82, 168, 236, 0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);'+
  731. '}'+
  732. '#n24h_tr_shows_list{'+
  733. 'width: auto;'+
  734. 'margin-right: 5px;'+
  735. 'height: 25px;'+
  736. 'margin-bottom: 0px;'+
  737. 'margin-left: 30px;'+
  738. 'border: 1px solid #32383E'+
  739. 'background-color: #1B1F23;'+
  740. 'color: #7A878C;'+
  741. 'max-width: 200px;'+
  742. '}'+
  743. '.n24h_tr_option{'+
  744. 'background-color: #1B1F23;'+
  745. 'color: #7A878C;'+
  746. '}';
  747. var trtable=document.querySelector('table#translationsTable');
  748. if (!trtable)
  749. return;
  750. utils.insertcss(css);
  751. var panel=document.createElement('div'); //panel z opcjami
  752. panel.setAttribute('id', 'n24h_tr_panel');
  753. panel.setAttribute('class', 'tbl_top');
  754. panel.setAttribute('style', 'margin: 0px;');
  755.  
  756. var div=document.createElement('div'); //ogólny div ze wszystkim
  757. div.setAttribute('style', 'float:none;padding: 10px; margin-top: -15px; margin-bottom: 15px;');
  758.  
  759. var left_div=document.createElement('div'); //lewa część opcji
  760. left_div.setAttribute('style', 'float:left')
  761.  
  762. var input_search=document.createElement('input'); //okienko do szukania
  763. input_search.setAttribute('id', 'n24h_tr_input_search');
  764. input_search.setAttribute('type', 'text');
  765. input_search.setAttribute('placeholder', 'Szukaj...');
  766. input_search.addEventListener('keyup', tlumaczenia.SearchHandler, false);
  767.  
  768. var input_clear=document.createElement('input'); //przycisk wyczyść
  769. input_clear.setAttribute('id', 'n24h_tr_input_clear');
  770. input_clear.setAttribute('type', 'button');
  771. input_clear.setAttribute('value', 'Wyczyść');
  772. input_clear.addEventListener('click', tlumaczenia.ClearHandler, false);
  773.  
  774. //dodaj do lewego diva
  775. left_div.appendChild(input_search); //okienko szukania
  776. left_div.appendChild(input_clear); //i przycisk wyczyść
  777. var right_div=document.createElement('div'); //prawa część opcji
  778. right_div.setAttribute('style', 'float:right')
  779.  
  780. var input_new=document.createElement('input'); //okienko do dodawania nowego serialu/filmu
  781. input_new.setAttribute('id', 'n24h_tr_input_new');
  782. input_new.setAttribute('type', 'text');
  783.  
  784. var input_add=document.createElement('input'); //przycisk dodaj
  785. input_add.setAttribute('id', 'n24h_tr_input_add');
  786. input_add.setAttribute('type', 'button');
  787. input_add.setAttribute('value', 'Dodaj');
  788. input_add.addEventListener('click', tlumaczenia.AddNewHandler, false);
  789.  
  790. var select=document.createElement('select'); //selekt z listą seriali/filmów
  791. select.setAttribute('id', 'n24h_tr_shows_list');
  792. select.setAttribute('size', '1');
  793.  
  794. //wypełnij selekta listą seriali/filmów
  795. var keywords = showsdb.getAll();
  796. for (var i=0;i<keywords.length;i++)
  797. {
  798. var option=document.createElement("option");
  799. option.text=keywords[i];
  800. option.setAttribute('class', 'n24h_tr_option');
  801. select.add(option);
  802. }
  803.  
  804.  
  805. var input_remove=document.createElement('input'); //przycisk usuń
  806. input_remove.setAttribute('id', 'n24h_tr_input_remove');
  807. input_remove.setAttribute('type', 'button');
  808. input_remove.setAttribute('value', 'Usuń');
  809. input_remove.addEventListener('click', tlumaczenia.RemoveHandler, false);
  810.  
  811. //dodaj do prawego diva
  812. right_div.appendChild(input_new); //okienko do dodawania nowego serialu/filmu
  813. right_div.appendChild(input_add); //przycisk dodaj
  814. right_div.appendChild(select); //listę seriali/filmów
  815. right_div.appendChild(input_remove); //i przycisk usuń
  816.  
  817. //dodaj do ogólnego diva
  818. div.appendChild(left_div); //lewego diva
  819. div.appendChild(right_div); //i prawego diva
  820.  
  821. //dodaj ogólnego diva do panelu
  822. panel.appendChild(div);
  823. trtable.parentNode.insertBefore(panel,trtable);
  824. },
  825. /**
  826. Dodaj dodatkową kolumnę z gwiazdkami
  827. */
  828. AddStars: function() {
  829. var css='td[data-n24h-star]{'+ //wyszukiwanie
  830. 'background-image: url('+icons.staroff+');'+
  831. 'background-repeat: no-repeat;'+
  832. 'background-position: center;'+
  833. 'cursor:pointer !important;'+
  834. '}'+
  835. 'td[data-n24h-star="on"]{'+
  836. 'background-image: url('+icons.staron+');'+
  837. '}';
  838. var trtable=document.querySelector('table#translationsTable');
  839. if (!trtable)
  840. return;
  841. utils.insertcss(css);
  842. var trhead=trtable.querySelector('thead > tr');
  843. var th=document.createElement('th');
  844. th.setAttribute('id', 'n24h_tr_favhead');
  845. th.setAttribute('class', 'nosort header');
  846. th.setAttribute('style', 'background-image: url('+icons.staron+');background-repeat: no-repeat;background-position: center;');
  847. th.setAttribute('title', 'Ulubione filmy/seriale');
  848. trhead.appendChild(th);
  849. var trs=trtable.querySelectorAll('tbody>tr');
  850. for (var i = 0; i < trs.length; i++)
  851. {
  852. var td=document.createElement('td');
  853. td.setAttribute('data-n24h-star', '');
  854. td.addEventListener('click', tlumaczenia.StarClickHandler, false);
  855. trs[i].appendChild(td);
  856. }
  857.  
  858. },
  859. /**
  860. Ustaw nagłówki tabelki tak żeby dało się ją sortować
  861. */
  862. makeSortable: function() {
  863. var trtable=document.querySelector('table#translationsTable');
  864. if (!trtable)
  865. return;
  866. var th = trtable.tHead, i;
  867. th && (th = th.rows[0]) && (th = th.cells);
  868. if (th) i = th.length;
  869. else return; // if no `<thead>` then do nothing
  870. while (--i >= 0)
  871. if (i<6) //pomiń kolumnę ulubione
  872. (function (i) {
  873. var dir = 1;
  874. th[i].addEventListener('click', function () {tlumaczenia.sortTable(i, (dir = 1 - dir))});
  875. }(i));
  876. },
  877. /**
  878. Skopiuj nagłówki tabelki, żeby wywalić oryginalną obsługę sortowania i dodać naszą
  879. */
  880. AddNewHeader: function() {
  881. var css='#translationsTable th {cursor: pointer !important;}'+
  882. '#translationsTable th.nosort {cursor: default !important;}'+
  883. '.n24h_sort_asc{background-image: url(run/images/arrsh.png);background-repeat: no-repeat;background-position: right;}'+
  884. '.n24h_sort_desc{background-image: url(run/images/arrs.png);background-repeat: no-repeat;background-position: right;}';
  885. var trtable=document.querySelector('table#translationsTable');
  886. if (!trtable)
  887. return;
  888. utils.insertcss(css);
  889. var header=trtable.querySelector('thead');
  890. var new_header=document.createElement('thead');
  891. new_header.innerHTML=header.innerHTML;
  892. trtable.insertBefore(new_header, header);
  893. trtable.removeChild(header);
  894. tlumaczenia.makeSortable();
  895. },
  896. /**
  897. Wywal kolumnę n24 i ewentualnie dodaj linki do tytułów seriali
  898. */
  899. FixInfo: function() {
  900. var trtable=document.querySelector('table#translationsTable');
  901. if (!trtable)
  902. return;
  903. /**INFO START*/
  904. if (options.getValue('shown24info', false))
  905. {
  906. var trs=trtable.querySelectorAll('tbody > tr');
  907. for (var i = 0; i < trs.length; i++)
  908. {
  909. var title=trs[i].querySelector('td:nth-child(1)>div');
  910. var info=trs[i].querySelector('td:nth-child(2)>div>a[href*="imid=tt"], a[href*="title/tt"]');
  911. if (info)
  912. if (options.getValue('useimdbinfo', false))
  913. title.innerHTML='<a href="'+info.href.replace(/http:\/\/napisy24.pl\/serial\?imid=/, 'http://www.imdb.com/title/')+'/" target="_blank">'+title.textContent+'</a>';
  914. else
  915. {
  916. var target=info.href.indexOf('imdb.com')!=-1?' target="_blank"':'';
  917. title.innerHTML='<a href="'+info.href+'"'+target+'>'+title.textContent+'</a>';
  918. }
  919. }
  920. }
  921. /**INFO STOP*/
  922. //usuń kolumnę Info
  923. var th=document.querySelector('th.header:nth-child(2)');
  924. th.parentNode.removeChild(th);
  925. var tds=document.querySelectorAll('table#translationsTable>tbody>tr>td:nth-child(2)');
  926. for (var i = 0; i < tds.length; i++)
  927. {
  928. tds[i].parentNode.removeChild(tds[i]);
  929. }
  930. },
  931.  
  932. init: function() {
  933. tlumaczenia.AddPanel();
  934. tlumaczenia.FixInfo();
  935. tlumaczenia.AddStars();
  936. tlumaczenia.AddNewHeader();
  937. tlumaczenia.sortTable();
  938. }
  939. };
  940.  
  941. /**
  942. Strona z komentarzami
  943. */
  944. var komentarze = {
  945. /**
  946. Zapisz poprawki za pomocą czcionki o stałej szerokości
  947. */
  948. fix_comments: function() {
  949. var css='div.n24h_comment{'+
  950. 'font-family: Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;'+
  951. 'font-size: 13px;'+
  952. '}';
  953. utils.insertcss(css);
  954.  
  955. var comments=document.querySelectorAll('div.tresc2');
  956. for (var i=0;i<comments.length;i++)
  957. {
  958. var text=comments[i].innerHTML;
  959. var lines=text.split('<br>');
  960. var line='';
  961. text='';
  962. for (var j=0;j<lines.length;j++)
  963. {
  964. line=lines[j].replace(/((\+|\-)?(.)?(\[|\{)\d+(\]|\})(\[|\{)\d+(\]|\}).*)/g, '<div class="n24h_comment">$1</div>');
  965. text=text+line;
  966. if (line.search('n24h_comment')==-1)
  967. text=text+'<br>';
  968. }
  969. comments[i].innerHTML=text;
  970. }
  971. },
  972. /**
  973. Pokaż/ukryj panel z emotkami i dodawaniem komentarza
  974. */
  975. ShowHideEmots: function() {
  976. var emots=document.querySelector('.tbl_out>div:nth-child(3)');
  977. var form=document.querySelector('form#userForm');
  978. var opener=document.querySelector('div#n24h_comm_opener');
  979. if ((!emots) || (!form))
  980. return;
  981. if (emots.getAttribute('style')=='display:none')
  982. {
  983. emots.setAttribute('style', 'display:block');
  984. form.setAttribute('style', 'display:block');
  985. opener.setAttribute('class', 'n24h_comm_opener n24h_comm_opener_open');
  986. } else {
  987. emots.setAttribute('style', 'display:none');
  988. form.setAttribute('style', 'display:none');
  989. opener.setAttribute('class', 'n24h_comm_opener');
  990. }
  991. },
  992. /**
  993. Dodaj strzałkę otwierającą/zamykającą panel emotek i komentarza
  994. */
  995. addOpener: function() {
  996. var css='div.n24h_comm_opener{'+
  997. 'background-image: url(run/images/arrs.png);'+
  998. 'background-repeat: no-repeat;'+
  999. 'height: 20px;'+
  1000. 'width: 20px;'+
  1001. 'background-position: center;'+
  1002. 'cursor:pointer;'+
  1003. 'border: 1px solid;'+
  1004. 'border-color:#32383E;'+
  1005. 'padding: 3px;'+
  1006. 'margin-left: 10px;'+
  1007. 'margin-top: -25px;'+
  1008. '}'+
  1009. 'div.n24h_comm_opener:hover{'+
  1010. 'background-color: #202428;'+
  1011. '}'+
  1012. 'div.n24h_comm_opener_open{'+
  1013. 'background-image: url(run/images/arrsh.png);'+
  1014. '}';
  1015. var footer=document.querySelector('div.moreInfo>div.infofooter');
  1016. if (!footer)
  1017. return;
  1018. utils.insertcss(css);
  1019. var opener=document.createElement('div');
  1020. opener.setAttribute('id', 'n24h_comm_opener');
  1021. opener.setAttribute('class', 'n24h_comm_opener');
  1022. opener.setAttribute('title', 'Pokaż/ukryj dodawanie komentarza');
  1023. opener.addEventListener('click', komentarze.ShowHideEmots, false);
  1024. footer.appendChild(opener);
  1025. footer.setAttribute('style', 'padding-bottom: 5px; padding-top: 5px;');
  1026. komentarze.ShowHideEmots();
  1027. },
  1028. init: function() {
  1029. komentarze.addOpener();
  1030. komentarze.fix_comments();
  1031. }
  1032. };
  1033.  
  1034. /**
  1035. Różności
  1036. */
  1037. var misc = {
  1038. /**
  1039. Obsługa zapamiętywania wyszukiwanych filmów/seriali między stronami
  1040. */
  1041. SearchHandler: function(e) {
  1042. var input=document.querySelector('input#phrase');
  1043. if (!input)
  1044. return;
  1045. e = e || window.event;
  1046. if (e.keyCode==27)
  1047. input.value='';
  1048. var searchtext = input.value;
  1049. sessionStorage.setItem('n24h_search', searchtext);
  1050. },
  1051. /**
  1052. Dodaj zapamiętywanie wyszukiwanych filmów/seriali
  1053. */
  1054. fixSearch: function() {
  1055. var input=document.querySelector('input#phrase');
  1056. if (!input)
  1057. return;
  1058. var searchtext=sessionStorage.getItem('n24h_search');
  1059. if (searchtext==null)
  1060. input.value='';
  1061. else
  1062. input.value=searchtext;
  1063. input.addEventListener('keyup', misc.SearchHandler, false);
  1064. },
  1065. /**
  1066. Usuń okładkę filmu/serialu
  1067. */
  1068. killCover: function() {
  1069. var css='div.subtitle{width: 675px !important;}';
  1070. utils.insertcss(css);
  1071. var divs=document.querySelectorAll('div.tbl');
  1072. for (var i=0;i<divs.length;i++)
  1073. {
  1074. var poster=divs[i].querySelector('div.poster');
  1075. divs[i].removeChild(poster);
  1076. }
  1077. },
  1078. /**
  1079. Usuń ocenę z IMDB
  1080. */
  1081. killIMDBInfo: function() {
  1082. var divs=document.querySelectorAll('div[id^="toggleMe"]');
  1083. for (var i=0;i<divs.length;i++)
  1084. {
  1085. var infocolumn=divs[i].querySelector('div.infoColumn0');
  1086. divs[i].removeChild(infocolumn);
  1087. }
  1088. },
  1089. /**
  1090. Alternatywna jasna skórka
  1091. */
  1092. altSkin: function() {
  1093. var css='.avatar-menu-icons[class*="avatar-main-menu-szare"] > li {background-color: #2B68AB;border-right: 1px solid #5592D5;}'+//menu: forum, irc, rss
  1094. '[class*="avatar-main-menu-szare"] > li:hover {border-bottom: 4px solid #1B4A7E;}'+
  1095. 'nav{background-color: #2B68AB !important;}'+//pusta przestrzeń między menu a dodaj napisy
  1096. 'nav ul li.menu_add_napisy a{background-color: #2B68AB;border-bottom: 4px solid #1B4A7E;}'+//przycisk dodaj napisy
  1097. 'nav ul li.menu_add_napisy a:hover{background-color: #1B4A7E;color: #CCC;background-position: 21px 12px;}'+
  1098. 'nav ul li.menu_add_napisy a:active{color: #CCC;text-shadow: 0px -1px 1px rgba(0, 0, 0, 0.2);filter: dropshadow(color=#33000000, offx=0, offy=-1);border-top: 4px solid #2B68AB;border-bottom: 4px solid #1B4A7E;background-color: #1B4A7E;background-position: 21px 8px;}'+
  1099. 'body{background-color:#D5D5D5;color: #272727;}'+//body
  1100. '#avatar-body-middle-block{background-color:#D5D5D5;}'+//środek
  1101. '#avatar-header-inside-block{background-color:#D5D5D5;}'+//górna belka body
  1102. '.logo .screen{border: 4px solid #5592D5 !important;}'+//logo
  1103. '.logo .screen .subline1{background-color: #5592D5 !important;}'+
  1104. '.logo .screen .subline2{background-color: #5592D5 !important;}'+
  1105. '.logo h1{color: #5592D5 !important;}'+
  1106. '.logo h2{color: #5592D5 !important;}'+
  1107. 'textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input {background-color: #D5D5D5 !important;}'+//pola tekstowe
  1108. '#search #phrase{color: #000000;}'+//wyszukiwarka
  1109. 'section#content .tbl_top{background-color:#D5D5D5 !important;border-top: 1px solid #A0A0A0 !important;}'+ //tabelka nagłówek
  1110. '.tbl_top2{background-color:#D5D5D5 !important;border-top: 1px solid #A0A0A0 !important;}'+ //tabelka nagłówek
  1111. 'section#content .tbl_top .head_r label{color:#000000 !important;}'+
  1112. 'section#content .tbl_top .head_l{color:#000000 !important;}'+
  1113. 'section#content .tbl{background-color:#D5D5D5 !important;border-top: 1px solid #A0A0A0 !important;}'+
  1114. 'section#content .page{border-color:#A0A0A0 !important;}'+
  1115. 'section#content .tbl_out{border-bottom:1px solid #A0A0A0 !important;}'+
  1116. 'section#content .tbl .poster{border-right:1px solid #A0A0A0 !important;}'+
  1117. 'section#content .pagination{border: 1px solid #A0A0A0;background-color: #E0E0E0;}'+
  1118. 'section#content .pagination .page-start, section#content .pagination .page-prev, section#content .pagination .page-next{ color: #272829;background-color: #D5D5D5;}'+//strart, poprzednia, następna
  1119. 'section#content .pagination .page-start:hover, section#content .pagination .page-prev:hover, section#content .pagination .page-next:hover{color: #272829;background-color: #E0E0E0;border-radius: 0px 0px 3px 3px;border-bottom: 3px solid #D26911;border-top:none;padding-bottom: 0px;line-height: 30px;}'+
  1120. 'section#content .pagination .page-prev:hover{background-position: 15px center;}'+
  1121. 'section#content .pagination .page-next:hover{background-position: 90px center;}'+
  1122. 'section#content .pagination .page-num{color: #272829;background-color: #D5D5D5;}'+//numery stron
  1123. 'section#content .pagination .page-num:hover{background-color: #E0E0E0;border-top-width: 1px;margin-top: 0px;border-radius: 0px 0px 3px 3px;border-bottom: 3px solid #D26911;}'+
  1124. 'section#content .tbl.opened .subtitle .opener, section#content .tbl .subtitle:hover .opener {background-color: #E0E0E0 !important;border-radius: 0px 0px 3px 3px;border-bottom: 3px solid #D26911;}'+
  1125. '.module_frame{border: 1px solid #A0A0A0;}'+
  1126. '.category-modulemodule_frame li a{color: #000000;}'+
  1127. '.category-modulemodule_frame li a:hover{color: #2F2F2F;background-color: #E0E0E0;}'+
  1128. 'aside .list li a{color: #000000 !important;}'+
  1129. 'aside .list li a:hover{color: #2F2F2F !important;background-color: #E0E0E0 !important;text-decoration: none !important;}'+
  1130. '.avatar-module .st-module-heading{background-color: #A0A0A0;color: #2F2F2F;}'+
  1131. '.login-greeting{color: #272829;}'+
  1132. '.moreInfo{background-color:#D5D5D5 !important;color:#000000 !important; border-top: 1px solid #A0A0A0;}'+
  1133. '.page span{color: #272829;}'+
  1134. '.infofooter{border-top: 1px solid #A0A0A0 !important;background-color: #D5D5D5 !important;}'+
  1135. '.infoColumn0{background-color: #D5D5D5 !important;border-right: 1px solid #A0A0A0 !important;border-bottom: 1px solid #A0A0A0 !important;border-top: 1px solid #A0A0A0 !important}'+
  1136. 'section#content .page{color: #272829 !important;}'+
  1137. 'section#content .tbl .subtitle .sub h2{color: #272829 !important;}'+
  1138. 'select {background-color: #C5C5C5;}'+
  1139. 'a, a:link, a:visited {color: #1E519D;}'+
  1140. '.infoheader{color: #000000 !important;}'+
  1141. /**tłumaczenia*/
  1142. 'table.table-layout thead tr th{background-color: #D5D5D5 !important;color: #272829 !important;border-bottom: 1px solid #A0A0A0 !important;border-right: 1px solid #A0A0A0 !important;}'+
  1143. 'table.table-layout tbody tr.odd td{background-color: #C5C5C5 !important;}'+
  1144. 'table.table-layout tbody tr.even td{background-color: #B5B5B5 !important;}'+
  1145. 'table.table-layout tbody tr td{border-bottom: 1px solid #A0A0A0 !important;border-right: 1px solid #A0A0A0 !important;color: #000000 !important;}'+
  1146. 'table.table-layout{border-top: 1px solid #A0A0A0 !important;}'+
  1147. '.progress div{background-color: #A0A0A0 !important;}'+
  1148. 'nav ul li.menu_add_tlum a{background-color: #2B68AB;border-bottom: 4px solid #2B68AB;background-position: 21px 12px;}'+
  1149. 'nav ul li.menu_add_tlum a:hover{border-bottom: 4px solid #1B4A7E;color: #CCCCCC;background-color: #2B68AB;line-height: 44px;height: 42px;background-position: 21px 12px;}'+
  1150. 'nav ul li.menu_add_tlum a:active{border-bottom: 4px solid #1B4A7E;color: #CCCCCC;background-color: #2B68AB;line-height: 48px;height: 42px;background-position: 21px 12px;text-shadow:none;filter:none;border-top:none;}'+
  1151. /**komentarze*/
  1152. '.moreInfo2{background-color:#D5D5D5 !important;color:#000000 !important;}'+
  1153. 'section#content .tbl .avatar{border-right: 1px solid #A0A0A0 !important;}'+
  1154. 'section#content .tbl .subtitle .sub h3{color: #000000 !important;}'+
  1155. 'section#content .tbl .mark{color: #000000 !important;}'+
  1156. 'textarea{background-color: #B5B5B5 !important;color: #272829 !important;}'+
  1157. /**artykuły*/
  1158. '#jc{background: none repeat scroll 0px 0px #B5B5B5;}'+
  1159. '#jc h4{color: #272829;background-color: #C5C5C5;}'+
  1160. '#jc .rbox{background-color: #B5B5B5;}'+
  1161. '#comments .comment-author, #comments .author-homepage, #comments .author-email{color: #4B3F37;}'+
  1162. '#comments .comment-date{color: #4B3F37;}'+
  1163. '#comments .comment-body{color: #4B3F37;}'+
  1164. '#comments .quote{color: #4B3F37;}'+
  1165. '#comments blockquote, #comments .hidden, #comments code, #comments pre{color: #1B6A6A;}'+
  1166. '#comments a{color: #174B54;}'+
  1167. '#comments-form input{color: #2D3335;}'+
  1168. /**profil*/
  1169. ''+
  1170. /**n24 helper*/
  1171. '#n24h_tr_input_search, #n24h_tr_input_new{color: #000000;}'+
  1172. '#n24h_tr_input_clear, #n24h_tr_input_add, #n24h_tr_input_remove {background-color: #C5C5C5 !important;color: #000000 !important;}'+
  1173. '#n24h_tr_shows_list {background-color: #C5C5C5;color: #000000 !important;}'+
  1174. '.n24h_tr_option {background-color: #C5C5C5 !important;color: #000000 !important;}'+
  1175. 'div.n24h_comm_opener:hover {background-color: #C5C5C5 !important;}';
  1176. utils.insertcss(css);
  1177. //style
  1178. var selector='a[style*="color: rgb(0,200,0)"]'+ //moderator
  1179. ', td[style*="background-color:#255180"]'+ //uaktualnione w ostatnim czasie
  1180. ', td[style*="background-color:#DD7665"]'+ //od dawna nie aktualizowane
  1181. ', span[style*="color: white"]'+ //ilość oczekujących
  1182. ', div[style*="background-color: #21262b"]'; //górna belka z datą i oceną przy komentarzach
  1183. var inline=document.querySelectorAll(selector);
  1184. for (var i=0;i<inline.length;i++)
  1185. {
  1186. var style=inline[i].getAttribute('style');
  1187. style=style.replace('rgb(0,200,0)', 'rgb(0,150,0)');
  1188. style=style.replace('background-color:#255180', 'background-color:#DFDFDF !important');
  1189. style=style.replace('background-color:#DD7665', 'background-color:#DD7665 !important');
  1190. style=style.replace('color: white', 'color: black');
  1191. style=style.replace('background-color: #21262b', 'background-color: #ADADAD');
  1192. inline[i].setAttribute('style', style);
  1193. }
  1194. //klasy
  1195. var selector='span.yellowfont'; //ocena IMDB/głosów
  1196. var inline=document.querySelectorAll(selector);
  1197. for (var i=0;i<inline.length;i++)
  1198. {
  1199. var attr=inline[i].getAttribute('class');
  1200. attr=attr.replace('yellowfont', '');
  1201. inline[i].setAttribute('class', attr);
  1202. }
  1203. },
  1204. init: function() {
  1205. if (options.getValue('fixsearch', false))
  1206. misc.fixSearch();
  1207. if (options.getValue('killcover', false))
  1208. misc.killCover();
  1209. if (options.getValue('killimdbinfo', false))
  1210. misc.killIMDBInfo();
  1211. if (options.getValue('usealtskin', false))
  1212. misc.altSkin();
  1213. }
  1214. };
  1215.  
  1216. var n24h = {
  1217. /**
  1218. */
  1219. onLoad: function() {
  1220. options.init();
  1221. misc.init();
  1222. if(document.URL.indexOf('/tlumaczenia')!=-1)
  1223. {
  1224. tlumaczenia.init();
  1225. }
  1226. if(document.URL.indexOf('/komentarze')!=-1)
  1227. {
  1228. komentarze.init();
  1229. }
  1230. },
  1231. /**
  1232. */
  1233. init: function()
  1234. {
  1235. if(navigator.userAgent.indexOf("Opera") != -1 )
  1236. {
  1237. window.addEventListener('load', n24h.onLoad, false);
  1238. console.log('Jestem starą Operą :)');
  1239. }
  1240. else
  1241. {
  1242. window.addEventListener('DOMContentLoaded', n24h.onLoad, false);
  1243. console.log('Nie jestem starą Operą :)');
  1244. }
  1245. }
  1246. };
  1247.  
  1248. n24h.init();