Bangumi Tookit

Bangumi Tookit 没有L!

  1. // ==UserScript==
  2. // @name Bangumi Tookit
  3. // @namespace http://weibo.com/zheung
  4. // @version 1.3.1
  5. // @description Bangumi Tookit 没有L!
  6. // @author DanoR
  7. // @match http://bgm.tv/*
  8. // @match https://bgm.tv/*
  9. // @match http://bangumi.tv/*
  10. // @match http://chii.in/*
  11. // @require http://code.jquery.com/jquery-2.1.4.min.js
  12. // @run-at document-end
  13. // @grant GM_setValue
  14. // @grant GM_getValue
  15. // @grant GM_addStyle
  16. // ==/UserScript==
  17.  
  18. /* global saveConfig */
  19. try {
  20.  
  21. console.log('Bangumi Tookit v1.2.0 started');
  22.  
  23. var useScriptDB = true; //脚本数据开关, false则使用下面的configManual作为每次打开网页的配置,功能一样,BTK的管理功能不会存储修改后的配置
  24. var configManual = {"trans":true,"search":true,"sort":false,"shift":0,"maxWidth":"520px","searchs":{"dmhy":{"display1":"dmhy","display2":"动漫花园","url":"http://share.dmhy.org/topics/list?keyword=%key"},"bili":{"display1":"bili","display2":"哔哩哔哩","url":"http://search.bilibili.com/all?keyword=%key"},"sohu":{"display1":"sohu","display2":"搜狐专题","url":"http://tv.sohu.com/%key"},"pptv":{"display1":"pptv","display2":"聚力专题","url":"http://v.pptv.com/page/%key.html"},"iqyi":{"display1":"iqyi","display2":"奇艺专题","url":"http://www.iqiyi.com/%key.html"},"letv":{"display1":"letv","display2":"乐视专题","url":"http://www.letv.com/comic/%key.html"},"blav":{"display1":"blav","display2":"哔哩视频","url":"http://www.bilibili.com/video/av%key"},"tudo":{"display1":"tudo","display2":"土豆专题","url":"http://www.tudou.com/albumcover/%key.html"},"yoku":{"display1":"yoku","display2":"优酷专题","url":"http://www.youku.com/show_page/id_%key.html"},"acab":{"display1":"acab","display2":"艾斯视频","url":"http://www.acfun.tv/v/ab%key"}},"dicts":{"975":{"trans":"海贼王","searchs":{"dmhy":"海賊王","sohu":"s2013/onepiece"},"shift":0},"91946":{"trans":"妖精的尾巴 第二期","searchs":{"sohu":"s2011/yjdwb"}},"94040":{"trans":"无彩限的怪灵世界","searchs":{"dmhy":"無彩限"}},"98638":{"trans":"命运九重奏","searchs":{"pptv":"9eaf89076f"}},"104906":{"trans":"境界触发者","searchs":{"iqyi":"a_19rrhc0zzx"}},"115008":{"trans":"重装武器","searchs":{"bili":"重装武器"}},"117601":{"trans":"苍之彼方的四重奏","searchs":{"bili":"苍之彼方的四重奏"}},"119394":{"trans":"昭和元禄落语心中","searchs":{"yoku":"zfaedb5a4a86911e5be16"}},"120236":{"trans":"排球少年 第二季","searchs":{"tudo":"AlsHvzonFNY"}},"130231":{"trans":"偶像大师 灰姑娘女孩 第二季","searchs":{"bili":"偶像大师 灰姑娘女孩 第二季"}},"131891":{"trans":"暗杀教室 第二季","searchs":{"bili":"极速老师"}},"132220":{"trans":"龙珠超","searchs":{"dmhy":"珠+超"}},"133387":{"trans":"最弱无败神装机龙","searchs":{"pptv":"JwrmZMwyouBDwSk"}},"134390":{"trans":"黑之宣告","searchs":{"bili":"黑之宣告"}},"135275":{"trans":"为美好的世界献上祝福","searchs":{"dmhy":"獻上 祝福"}},"135816":{"trans":"神圣之门","searchs":{"pptv":"n66KCHDWRoTnZc0"}},"136213":{"trans":"春夏推理事件薄","searchs":{"tudo":"CkSvtickrys"}},"137722":{"trans":"只有我不在的街道","searchs":{"dmhy":"有我不"}},"138210":{"trans":"大叔与棉花糖","searchs":{"bili":"大叔与棉花糖"}},"139221":{"trans":"维度战记","searchs":{"yoku":"zeb430c68a87211e5b432"}},"139324":{"trans":"铁血的孤儿","searchs":{"tudo":"0cpgYEhhh8Y"}},"139408":{"trans":"阿松","searchs":{"tudo":"WXDaOez0dhE"}},"139800":{"trans":"侦探小队KZ事件簿","searchs":{"bili":"侦探小队KZ事件簿"}},"139830":{"trans":"梦幻之星 Online 2","searchs":{"bili":"梦幻之星"}},"141078":{"trans":"牙狼 红莲之月","searchs":{"bili":"牙狼 红莲之月"}},"142990":{"trans":"虹色时光","searchs":{"tudo":"QwwPp1afn80"}},"145407":{"trans":"赤发白雪姬 第二季","searchs":{"bili":"赤发白雪姬 第二季"}},"145457":{"trans":"石膏Boys","searchs":{"bili":"石膏Boys"}},"145781":{"trans":"疾走王子","searchs":{"tudo":"lSWn_fylZ2I"}},"146093":{"trans":"亚人","searchs":{"dmhy":"亞人"}},"146162":{"trans":"女高中生给你做饭了","searchs":{"bili":"女高中生给你做饭了"}},"146611":{"trans":"房东妹子青春期","searchs":{"bili":"房东妹子青春期"}},"146994":{"trans":"粗点心战争","searchs":{"dmhy":"心戰爭"}},"147036":{"trans":"GATE 奇幻自卫队 炎龙篇","searchs":{"pptv":"WObSULgejswvrRU"}},"148233":{"trans":"ACTIVE RAID 机动强袭室第八组","searchs":{"yoku":"z503b58c0a88a11e5a080"}},"148241":{"trans":"魔法少女什么的已经够了啦","searchs":{"bili":"魔法少女什么的已经够了啦"}},"148726":{"trans":"灰与幻想的格林姆迦尔","searchs":{"pptv":"oI1n5U2zI2HEQqo"}},"149412":{"trans":"魔法护士小麦R","searchs":{"bili":"魔法护士小麦R"}},"149993":{"trans":"少女们向荒野进发","searchs":{"bili":"少女们向荒野进发"}},"153140":{"trans":"告诉我 辣妹子酱","searchs":{"acab":"1470429"}},"153214":{"trans":"舞武器舞乱伎","searchs":{"bili":"舞武器舞乱伎"}},"155281":{"trans":"幸运逻辑","searchs":{"dmhy":"邏輯"}},"159269":{"trans":"红壳的潘多拉","searchs":{"bili":"红壳的潘多拉"}},"159365":{"trans":"网球并不可笑嘛 第七季","searchs":{"bili":"网球并不可笑嘛 第七季"}},"159892":{"trans":"血型君 第四季","searchs":{"letv":"10017725"}}}};
  25. //加载配置
  26. var btkConfig;
  27.  
  28. function initConfig() {
  29. if(useScriptDB) {
  30. btkConfig = GM_getValue('btk-config');
  31.  
  32. if(!btkConfig)
  33. btkConfig = {
  34. "trans":true,
  35. "search":true,
  36. "sort":true,
  37. "shift":0,
  38. "maxWidth":"520px",
  39. "searchs": {},
  40. "dicts": {}
  41. };
  42. else
  43. btkConfig = JSON.parse(btkConfig);
  44. }
  45. else
  46. btkConfig = configManual;
  47. }
  48. saveConfig = function() {
  49. var strConfig = JSON.stringify(btkConfig, function(key, value) {
  50. return key!='sorter'?value:undefined;
  51. });
  52.  
  53. if(useScriptDB) GM_setValue('btk-config', strConfig);
  54.  
  55. return strConfig;
  56. }
  57.  
  58. initConfig();
  59.  
  60. if(location.pathname == '/') { //首页大功能
  61. //加载界面
  62. GM_addStyle(
  63. '.btk-ul>li { margin:7px; width:100% } \
  64. li>text { margin-left:6px; } \
  65. .btk-ul>li>:nth-child(1) { margin-left:4px; } \
  66. .btk-button:focus { outline:none; } \
  67. .btk-button { cursor:pointer; border-radius:4px; padding:4px 5px; margin-left:5px; border:2px solid #F09199; \
  68. -webkit-user-select:none; -moz-user-select:none; } \
  69. .btk-text { cursor:initial; width:45px; margin-left:4px; text-align:center; } \
  70. .btk-text2 { cursor:initial; width:69%; margin-left:4px; } \
  71. .btk-text3 { cursor:initial; width:24%; margin-left:4px; text-align:center; } \
  72. .btk-input { -webkit-user-select:text; -moz-user-select:text; } \
  73. .btk-on { color:white; background:#F09199; } \
  74. .btk-off { color:#F09199; background:white; } \
  75. .btk-panel { text-decoration:none; color:#444; cursor:pointer; } \
  76. .btk-mask { position:absolute; top:40px; left:0; }\
  77. .btk-select { background:red; opacity:0.2; float:left; margin:5px 0 0 5px; \
  78. padding:5px 0 5px 5px; width:340px; position:relative; \
  79. -moz-border-radius:3px;-webkit-border-radius:3px; border-radius:3px; \
  80. -webkit-transition:border linear 0.2s,box-shadow linear 0.3s; \
  81. -moz-transition:border linear 0.1s,box-shadow linear 0.3s; \
  82. transition:border linear 0.1s,box-shadow linear 0.3s; } .btk-select.odd { clear:both } \
  83. .btk-exist { background:green; } \
  84. .btk-border { border:2px solid black; width:99%; height:97%; position:absolute; top:0; left:0; cursor:pointer } \
  85. .btk-border:hover { border:2px solid red; } \
  86. .btk-searcher, .btk-configer { border-top:1px solid gray; } \
  87. .btk-configer>text { line-height:30px; } \
  88. .btk-searcher>text { line-height:30px; } \
  89. .btk-selector { width:74%; }'
  90. );
  91.  
  92. var panel = $('<div class="halfPage sort ui-draggable btk-config">').hide();
  93. panel.append($('<div class="sidePanelHome">')
  94. .append($('<h2 class="subtitle">Bangumi Tookit</h2>')).append($('<ul class="btk-ul">')));
  95. $('div.sideInner').prepend(panel);
  96.  
  97. $('div.content>ul.clearit>:nth-child(2)>:nth-child(2)').after($('<a class="btk-panel">工具</a>')
  98. .click(function() { panel.slideToggle(); })).after($(document.createTextNode(' | ')));
  99.  
  100. var toggleFunc = function(which, type) {
  101. var $this = $(which);
  102.  
  103. if($this.hasClass('btk-on'))
  104. btkConfig[type] = false;
  105. else if($this.hasClass('btk-off'))
  106. btkConfig[type] = true;
  107.  
  108. $this.toggleClass('btk-on').toggleClass('btk-off');
  109.  
  110. saveConfig();
  111.  
  112. refresher[type]();
  113. };
  114.  
  115. var a1 = $('<a class="btk-button">中日切换</a>').addClass(btkConfig.trans?'btk-on':'btk-off')
  116. .click(function() { toggleFunc(this, 'trans'); });
  117.  
  118. var a2 = a1.clone().html('搜索链接').addClass(btkConfig.search?'btk-on':'btk-off')
  119. .removeClass(btkConfig.search?'btk-off':'btk-on').click(function() { toggleFunc(this, 'search'); });
  120.  
  121. var a3 = a1.clone().html('播出排序').addClass(btkConfig.sort?'btk-on':'btk-off')
  122. .removeClass(btkConfig.sort?'btk-off':'btk-on').click(function() { toggleFunc(this, 'sort'); });
  123.  
  124. var a4 = a1.clone().html('导入配置').addClass('btk-on').removeClass('btk-off').click(function() {
  125. if(confirm('确定要导入! 导入! 导入默认配置吗??\r\n这将会覆盖! 覆盖! 覆盖现有配置!!')) {
  126. btkConfig = configManual;
  127. saveConfig();
  128.  
  129. refresher.trans();
  130. refresher.search();
  131. refresher.shift();
  132. refresher.sort();
  133.  
  134. i1.val(btkConfig.shift);
  135.  
  136. var mask = $('.btk-mask');
  137. if(mask.children().length)
  138. refreshMask();
  139.  
  140. alert('导入成功');
  141. }
  142. });
  143. //UI-配置条目
  144. function refreshSeacher(seacher, searchs) {
  145. seacher.empty().append($('<option>').val('_new'));
  146. for (var key in btkConfig.searchs) {
  147. var search = btkConfig.searchs[key];
  148.  
  149. seacher.append($('<option>').html(search.display2+'('+search.display1+')'+
  150. (searchs && searchs[search.display1]?'*':'')).val(key));
  151. }
  152.  
  153. return seacher;
  154. }
  155.  
  156. function refreshMask() {
  157. //UI-遮罩条目
  158. var wrapper = $('.infoWrapper_tv');
  159. var mask = $('.btk-mask').empty();
  160.  
  161. if(!mask.length)
  162. mask = $('<div class="btk-mask">').width(wrapper.width()).height(wrapper.height()).insertAfter(wrapper);
  163.  
  164. var last;
  165. wrapper.find('[id*="subjectPanel_"]').each(function(index, subject) {
  166. subject = $(subject);
  167. var id = subject.attr('id').replace('subjectPanel_', '');
  168.  
  169. var select = $('<div class="btk-select">').addClass(btkConfig.dicts[id]?'btk-exist':null)
  170. .addClass(index % 2?'even':'odd').height(subject.height()).width(subject.width())
  171. .append($('<div class="btk-border">')).attr('data-id', id);
  172.  
  173. select[last?'insertAfter':'appendTo'](last?last:mask);
  174.  
  175. last = select;
  176.  
  177. select.click(function() {
  178. var $this = $(this);
  179. var id = $this.attr('data-id');
  180. var dict = btkConfig.dicts[id];
  181. var subject = wrapper.find('[id=subjectPanel_'+id+']');
  182.  
  183. if(!dict)
  184. dict = {};
  185.  
  186. configer.id.html(id);
  187. configer.original.val(subject.find('.header>a').attr('title'));
  188. configer.trans.val(dict.trans?dict.trans:'');
  189.  
  190. if('number' == typeof dict.shift) {
  191. configer.shift.val(dict.shift);
  192. keyHolder2 = dict.shift;
  193. }
  194. else
  195. configer.shift.val('');
  196.  
  197. refreshSeacher(configer.search, btkConfig.dicts[id]?btkConfig.dicts[id].searchs:null);
  198. });
  199.  
  200. });
  201.  
  202. return mask;
  203. }
  204.  
  205. var a5 = a1.clone().html('管理条目').addClass('btk-off').removeClass('btk-on')
  206. .click(function() {
  207. var $this = $(this);
  208. refreshMask()[$this.hasClass('btk-on')?'fadeOut':'fadeIn']();
  209.  
  210. $('.btk-configer').slideToggle();
  211.  
  212. $this.toggleClass('btk-on').toggleClass('btk-off');
  213. });
  214.  
  215. var a51 = a1.clone().html('保存条目').addClass('btk-on').removeClass('btk-off')
  216. .click(function() {
  217. var dict = btkConfig.dicts[configer.id.html()];
  218.  
  219. if(!dict) dict = {};
  220.  
  221. var reg = /(^\s*)|(\s*$)/g;
  222.  
  223. if(configer.trans.val().replace(reg, ''))
  224. dict.trans = configer.trans.val();
  225. else
  226. delete dict.trans;
  227.  
  228. if(configer.shift.val().replace(reg, ''))
  229. dict.shift = parseInt(configer.shift.val());
  230. else
  231. delete dict.shift;
  232.  
  233. if(configer.search.val() != '_new') {
  234. if(!dict.searchs) dict.searchs = {};
  235.  
  236. if(configer.key.val().replace(reg, ''))
  237. dict.searchs[configer.search.val()] = configer.key.val();
  238. else
  239. delete dict.searchs[configer.search.val()];
  240. }
  241.  
  242. if(dict.searchs && Object.keys(dict.searchs).length == 0)
  243. delete dict.searchs;
  244.  
  245. if(Object.keys(dict).length > 0)
  246. btkConfig.dicts[configer.id.html()] = dict;
  247. else
  248. delete btkConfig.dicts[configer.id.html()];
  249.  
  250. saveConfig();
  251.  
  252. refresher.trans();
  253. refresher.search();
  254. refresher.shift();
  255. refresher.sort();
  256.  
  257. var mask = $('.btk-mask');
  258. if(mask.children().length)
  259. refreshMask();
  260.  
  261. refreshSeacher(configer.search, btkConfig.dicts[configer.id.html()]?btkConfig.dicts[configer.id.html()].searchs:null);
  262.  
  263. alert('保存成功');
  264. });
  265.  
  266. var a52 = a1.clone().html('删除条目').addClass('btk-on').removeClass('btk-off')
  267. .click(function() {
  268. if(configer.id.html() && confirm('确定要删除! 删除! 删除该条目吗??')) {
  269. delete btkConfig.dicts[configer.id.html()];
  270. saveConfig();
  271.  
  272. refresher.trans();
  273. refresher.search();
  274. refresher.shift();
  275. refresher.sort();
  276.  
  277. var mask = $('.btk-mask');
  278. if(mask.children().length)
  279. refreshMask();
  280.  
  281. refreshSeacher(configer.search, btkConfig.dicts[configer.id.html()]?btkConfig.dicts[configer.id.html()].searchs:null);
  282. }
  283. });
  284.  
  285. var configer = {
  286. id:$('<b>'),
  287. original:$('<input class="btk-text2 btk-button btk-input">').attr('disabled', 'disabled'),
  288. trans:$('<input class="btk-text2 btk-button btk-input">'),
  289. shift:$('<input class="btk-text btk-button btk-input">'),
  290. search:refreshSeacher($('<select class="btk-selector btk-button">')),
  291. key:$('<input class="btk-text2 btk-button btk-input" style="margin-bottom:7px;">'),
  292. };
  293.  
  294. var keyHolder2 = '';
  295. configer.shift.bind('input', function() {
  296. if((!/^-?\d{1,2}$/.test(this.value) || /^-?0\d+$/.test(this.value)) && this.value != '-' && this.value != '')
  297. this.value = keyHolder2;
  298. else
  299. keyHolder2 = this.value;
  300. });
  301.  
  302. var panelSubject = $('<div class="btk-configer">').hide()
  303. .append($('<text>条目信息 (ID:</text>').append(configer.id).append(')')).append('<br>')
  304. .append('<text>条目名称:</text>').append(configer.original).append('<br>')
  305. .append('<text>中文名称:</text>').append(configer.trans).append('<br>')
  306. .append('<text>播出偏移:</text>').append(configer.shift).append('<text style="margin-left:4%;">天</text>').append('<br>')
  307. .append('<text>链接类型:</text>').append(configer.search).append('<br>')
  308. .append('<text>关键字词:</text>').append(configer.key).append('<br>')
  309. .append(a51).append(a52).append('<br>');
  310.  
  311. configer.search.change(function() {
  312. var $this = $(this);
  313. var id = configer.id.html();
  314.  
  315. var key = btkConfig.dicts[id]?(btkConfig.dicts[id].searchs?btkConfig.dicts[id].searchs[$this.val()]:null):null;
  316.  
  317. configer.key.val(key?key:'');
  318. });
  319. //UI-配置链接
  320. var a6 = a1.clone().html('配置链接').addClass('btk-off').removeClass('btk-on')
  321. .click(function() {
  322. $('.btk-searcher').slideToggle();
  323.  
  324. $(this).toggleClass('btk-on').toggleClass('btk-off');
  325. });
  326.  
  327. var a61 = a1.clone().html('保存链接').addClass('btk-on').removeClass('btk-off')
  328. .click(function() {
  329. var val = searcher.select.val();
  330. var display1 = searcher.display1.val();
  331.  
  332. btkConfig.searchs[(val == '_new'?display1:val)] = {
  333. display1:display1,
  334. display2:searcher.display2.val(),
  335. url:searcher.url.val()
  336. };
  337. saveConfig();
  338. refreshSeacher(searcher.select);
  339. refresher.search();
  340. alert('保存成功');
  341. });
  342.  
  343. var a62 = a1.clone().html('删除链接').addClass('btk-on').removeClass('btk-off')
  344. .click(function() {
  345. var val = searcher.select.val();
  346. if(val != '_new' && confirm('确定要删除 删除 删除吗?')) {
  347. delete btkConfig.searchs[searcher.display1.val()];
  348. saveConfig();
  349. refreshSeacher(searcher.select);
  350. refresher.search();
  351. }
  352. });
  353.  
  354. var searcher = {
  355. select:$('<select class="btk-selector btk-button">'),
  356. display1:$('<input class="btk-text3 btk-button btk-input">'),
  357. display2:$('<input class="btk-text3 btk-button btk-input">'),
  358. url:$('<input class="btk-text2 btk-button btk-input" style="margin-bottom:7px;">')
  359. };
  360.  
  361. refreshSeacher(searcher.select);
  362.  
  363. searcher.select.change(function() {
  364. var val = $(this).val();
  365. var search = btkConfig.searchs[val]?btkConfig.searchs[val]: {};
  366.  
  367. searcher.display1.val(search.display1);
  368. searcher.display2.val(search.display2);
  369. searcher.url.val(search.url);
  370. });
  371.  
  372. var panelSearcher = $('<div class="btk-searcher">').hide()
  373. .append('<text>名称都建议是4个字(母). URL通配符是%key</text>').append('<br>')
  374. .append('<text>链接:</text>').append(searcher.select).append('<br>')
  375. .append('<text>缩写:</text>').append(searcher.display1)
  376. .append('<text style="margin-left:4%;">中文:</text>').append(searcher.display2).append('<br>')
  377. .append('<text>URL:</text>').append(searcher.url).append('<br>')
  378. .append(a61).append(a62);
  379.  
  380. var keyHolder = btkConfig.shift;
  381. var i1 = $('<input class="btk-text btk-button btk-input">').val(btkConfig.shift)
  382. .keyup(function(e) {
  383. if(this.value!='-' && this.value!='' && (e.keyCode == 13 || e.keyCode == 108))
  384. refresher.shift(this.value);
  385. })
  386. .bind('input', function() {
  387. if((!/^-?\d{1,2}$/.test(this.value) || /^-?0\d+$/.test(this.value)) && this.value != '-' && this.value != '')
  388. this.value = keyHolder;
  389. else
  390. keyHolder = this.value;
  391. });
  392.  
  393. panel.find('.sidePanelHome>ul').append($('<li>').append(a1).append(a2).append(a3).append(a4))
  394. .append($('<li>').append('<text>默认偏移</text>').append(i1).append('<text>天</text>').append(a6).append(a5))
  395. .append($('<li>').append(panelSearcher))
  396. .append($('<li>').append(panelSubject));
  397. //切换器
  398. var toggler = {
  399. trans:function(id, subject, newName) {
  400. if(!btkConfig.trans)
  401. newName = subject.find('.header>a').attr('title');
  402.  
  403. subject.find('.epGird>.tinyHeader>a[href*="/subject/"][title]').html(newName);
  404. subject.find('.header.clearit>.headerInner>h3>.l').html(newName);
  405. $('a.subjectItem.title[subject_id="'+id+'"]>span').html(newName);
  406. },
  407. search:function(subject, searchs) {
  408. if(!searchs) {
  409. var alinks = subject.find('a.btk-search');
  410. var temp = alinks.parent();
  411.  
  412. alinks.remove();
  413. temp.each(function(index, parent) {
  414. var innerHTML = parent.innerHTML;
  415. while(innerHTML.lastIndexOf(' | ') == (innerHTML.length-3))
  416. innerHTML = innerHTML.substring(0, innerHTML.length-3);
  417. parent.innerHTML = innerHTML;
  418. });
  419. }
  420. else
  421. for(var type in searchs) {
  422. var raw = type=='page'?searchs.page:btkConfig.searchs[type];
  423.  
  424. if(!raw) continue;
  425.  
  426. var a1 = $('<a class="btk-search">')
  427. .attr('href', type=='page'?raw.url:raw.url.replace('%key', encodeURI(searchs[type])));
  428. a1.html(raw.display1).addClass('l').attr('target','_blank');
  429.  
  430. subject.find('.epGird>.tinyHeader').append(' | ').append(a1);
  431.  
  432. subject.find('.header>.headerInner>.tip_i').append(' | ').append(a1.clone().html(raw.display2));
  433. }
  434. },
  435. shift:function(subject, shift) {
  436. subject.find('.epGird>ul>li>a[class*="Today"], a[class*=Air]')
  437. .removeClass('epBtnToday').removeClass('epBtnAir').addClass('epBtnNA');
  438.  
  439. subject.find('.epGird>ul>li>a.epBtnNA').each(function(index, ep) {
  440. ep = $(ep);
  441. var date = $(ep.attr('rel')+">.tip").html().match(/\d+-\d+-\d+/);
  442. var day = (Date.parse(date?date[0]:'') - 28800000 - now) / 86400000;
  443.  
  444. if(day == shift)
  445. ep.removeClass("epBtnNA").addClass("epBtnToday");
  446. else if(day < shift)
  447. ep.removeClass("epBtnNA").addClass("epBtnAir");
  448. });
  449. }
  450. };
  451.  
  452. var refresher = {
  453. trans:function() {
  454. $('.infoWrapper_tv>[id*="subjectPanel_"]').each(function(id, subject) {
  455. subject = $(subject);
  456. id = subject.attr('id').replace('subjectPanel_', '');
  457. var dict = btkConfig.dicts[id];
  458.  
  459. toggler.trans(id, subject, dict && dict.trans?dict.trans:subject.find('.header>a').attr('title'));
  460. });
  461. },
  462. search:function() {
  463. $('.infoWrapper_tv>[id*="subjectPanel_"]').each(function(id, subject) {
  464. subject = $(subject);
  465. var dict = btkConfig.dicts[subject.attr('id').replace('subjectPanel_', '')];
  466.  
  467. if(btkConfig.search && dict && dict.searchs) {
  468. toggler.search(subject, null);
  469. toggler.search(subject, dict.searchs);
  470. }
  471. else
  472. toggler.search(subject, null);
  473. });
  474. },
  475. shift:function(newShift) {
  476. if(newShift != null && newShift != undefined)
  477. btkConfig.shift = parseInt(newShift);
  478.  
  479. $('.infoWrapper_tv>[id*="subjectPanel_"]').each(function(id, subject) {
  480. subject = $(subject);
  481. var dict = dicts[subject.attr('id').replace('subjectPanel_', '')];
  482.  
  483. var shift;
  484. if(dict && ('number'==typeof dict.shift))
  485. shift = dict.shift;
  486. else if(('number'==typeof btkConfig.shift))
  487. shift = btkConfig.shift;
  488.  
  489. if('number' == typeof shift)
  490. toggler.shift(subject, shift);
  491. });
  492.  
  493. refresher.sort();
  494. },
  495. sort:function() {
  496. var wrapper = $('.infoWrapper_tv');
  497.  
  498. if(btkConfig.sort) {
  499. wrapper.find('[id*="subjectPanel_"]').each(function(index, subject) {
  500. if((subject = $(subject)).find('.epGird>ul>li>a[class*=Air]').length)
  501. wrapper.prepend(subject);
  502. }).each(function(index, subject) {
  503. if((subject = $(subject)).find('.epGird>ul>li>a[class*=Today]').length)
  504. wrapper.prepend(subject);
  505. });
  506. }
  507. else if(btkConfig.sorter)
  508. for(var i=0; i<btkConfig.sorter.length; i++)
  509. wrapper.append(btkConfig.sorter[i]);
  510.  
  511. wrapper.find('[id*="subjectPanel_"]').each(function(index, subject) {
  512. $(subject).removeClass(index % 2?'odd':'even').addClass(index % 2?'even':'odd');
  513. });
  514. }
  515. };
  516.  
  517. var dicts = btkConfig.dicts;
  518. var now = Date.parse(new Date().toDateString());
  519. var wrapper = $('.infoWrapper_tv');
  520.  
  521. wrapper.find('[id*="subjectPanel_"]').each(function(id, subject) {
  522. subject = $(subject);
  523. id = subject.attr('id').replace('subjectPanel_', '');
  524. var dict = dicts[id];
  525.  
  526. if(btkConfig.trans && dict && dict.trans)
  527. toggler.trans(id, subject, dict.trans);
  528.  
  529. if(btkConfig.search && dict && dict.searchs)
  530. toggler.search(subject, dict.searchs);
  531.  
  532. var shift;
  533. if(dict && ('number'==typeof dict.shift))
  534. shift = dict.shift;
  535. else if(('number'==typeof btkConfig.shift))
  536. shift = btkConfig.shift;
  537.  
  538. if('number' == typeof shift && shift != 1)
  539. toggler.shift(subject, shift);
  540. });
  541.  
  542. btkConfig.sorter = [];
  543. wrapper.find('[id*="subjectPanel_"]').each(function(index, subject) {
  544. btkConfig.sorter.push($(subject));
  545. });
  546.  
  547. refresher.sort();
  548. }
  549. else if(/^\/ep\/\d*/.test(location.pathname)) {
  550. if(btkConfig.maxWidth)
  551. $('img.code').css('maxWidth', btkConfig.maxWidth);
  552. }
  553.  
  554. } catch(e) { console.log(e); }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址