- // ==UserScript==
- // @name 4d4y tools
- // @namespace 4d4y-tools-by-2200
- // @description 屏蔽用户、名单同步;标识新帖;好孩子也看的见;
- // @include http*://*.4d4y.com/forum/*
- // @grant GM_addStyle
- // @license MIT
- // @version 5.2.4
- // ==/UserScript==
- // Version 5.2.4-by-johntomato
- // 适配新域名 4d4y.com
- // Version 5.2.3-by-Achilles
- // 修改介绍和Changelog
- // Version 5.2.2-by-Achilles
- // 添加license
- // Version 5.2.1-by-Achilles
- // 修复了https失效的问题
- // 兼容TamperMonkey
- // Version 5.2
- // 修正各种chrome不兼容的函数
- // 因SAE挂掉,去除了同步功能
- // Version 5.1 TODO
- // 宽窄可选
- // opera支持
- // 投票icon
- // 枫叶版chrome兼容
- // 点击显示图片
- // 屏蔽用户hover改为帖子触发
- // 预取几页可选
- // 高亮自己的贴
- // Version 5.0
- // Date 2011-12-18
- // 增加同步功能
- // Version 4.0
- // Date 2011-12-06
- // 论坛改版
- // Version 3.0
- // Date 2011-7-13
- // 增加自动更新
- // Version 2.2
- // Date 2011-7-13
- // 修正zhuyi增加【只讨论2.0】板块后预读页面错误
- // 高亮功能修改为可选,颜色自定义
- // 屏蔽用户功能修改为分版面可选
- // Version 2.1
- // Date 2011-4-3
- // 修正Chrome错误
- // 脚本仅针对D版有效
- // Version 2.0
- // Date 2010-2-9
-
- // @require http://userscript-updater-generator.appspot.com/?id=106358
- // Chrome浏览器不支GM_GetValue/GM_SetValue/GM_addStyle/GM_xmlhttpRequest
- try{
- if (!this.GM_getValue || this.GM_getValue.toString().indexOf("not supported")>-1) {
- this.GM_getValue=function (key,def) {
- return localStorage[key] || def;
- };
- this.GM_setValue=function (key,value) {
- return localStorage[key]=value;
- };
- }
- if (!this.GM_addStyle || this.GM_addStyle.toString().indexOf("not supported")>-1){
- this.GM_addStyle = function(css) {
- var head = document.getElementsByTagName('head')[0], style = document.createElement('style');
- if (!head) {return}
- style.type = 'text/css';
- try {style.innerHTML = css} catch(x) {style.innerText = css}
- head.appendChild(style);
- }
- }
- if ( !this.GM_xmlhttpRequest || this.GM_xmlhttpRequest.toString().indexOf("not supported")>-1 ) {
- this.GM_xmlhttpRequest =
- function (details) {
- var xmlhttp = new XMLHttpRequest();
- xmlhttp.onreadystatechange = function() {
- var responseState = {
- responseXML:(xmlhttp.readyState==4 ? xmlhttp.responseXML : ''),
- responseText:(xmlhttp.readyState==4 ? xmlhttp.responseText : ''),
- readyState:xmlhttp.readyState,
- responseHeaders:(xmlhttp.readyState==4 ? xmlhttp.getAllResponseHeaders() : ''),
- status:(xmlhttp.readyState==4 ? xmlhttp.status : 0),
- statusText:(xmlhttp.readyState==4 ? xmlhttp.statusText : '')
- }
- if (details["onreadystatechange"]) {
- details["onreadystatechange"](responseState);
- }
- if (xmlhttp.readyState==4) {
- if (details["onload"] && xmlhttp.status>=200 && xmlhttp.status<300) {
- details["onload"](responseState);
- }
- if (details["onerror"] && (xmlhttp.status<200 || xmlhttp.status>=300)) {
- details["onerror"](responseState);
- }
- }
- }
- try {
- //cannot do cross domain
- xmlhttp.open(details.method, details.url);
- } catch(e) {
- if( details["onerror"] ) {
- //simulate a real error
- details["onerror"]({responseXML:'',responseText:'',readyState:4,responseHeaders:'',status:403,statusText:'Forbidden'});
- }
- return;
- }
- if (details.headers) {
- for (var prop in details.headers) {
- xmlhttp.setRequestHeader(prop, details.headers[prop]);
- }
- }
- xmlhttp.send((typeof(details.data)!='undefined')?details.data:null);
- }
- }
- }
- catch(e){}
-
- var _pc = 1; // 当前页面的page值
- var _fid; // 当前版面fid
- var _uid; // 当前登录用户uid
- var _tid= 0; // 当前帖子的tid
- var _pxt; // 当前页面上“最后回复时间”的最大值
- var _pmt; // 当前页面上“最后回复时间”的最小值
- var _lvt; // 上次访问时间,页面关闭时,_pxt 存储为 _lvt
- var _today; // 与发帖日期比较,超过30天的发帖人单元格显示灰色
- var _first_time_use;
- var _max_read_pages = 5; // 不能读取更多啦,太多了容易死机
- var _hightlight_en; // 启用高亮功能
- var _hightlight_color; // 高亮颜色自定义
- var _blacklist_en_hpd; // 启用D版的黑名单功能
- var _blacklist_en_other; // 启用其他版的黑名单功能
- var _simple_style; // 启用精简风格
- var _hover_style; // 启用悬停风格
- var _reply_avatar; // 回复位置是否显示自己的头像
- var _font_size; // 论坛字体大小
- var blacklistArray; // 黑名单
- var blacklistLen; // 黑名单长度
- var blacklistStr;
- var serverBlacklist; // 同步冲突时服务器端的列表
- var serverListStr;
- var serverVersion;
- var newBlacklist // 同步冲突时的新列表
- var _syn_pending; // 正在同步
- var _syn_lastversion;
- var _syn_modified;
- var _att_max_width; // 帖子附件图片最大宽度
-
- var grave_image; // 坟贴背景图片
- // var _old_post_bgcolor = "#E1E1E1";
- var _old_post_bgcolor = "#e9e9e9";
- var _today_post_color = "#FF0000";
- var now = new Date();
- var year = now.getYear()+1900;
- var month = now.getMonth()+1;
- var day = now.getDate();
- var hour = now.getHours();
- var min = now.getMinutes();
- var _bFORUMDISPLAY = location.href.indexOf('4d4y.com/forum/forumdisplay.php?');
- var _bVIEWTHREAD = location.href.indexOf('4d4y.com/forum/viewthread.php?');
-
- // 工具函数
- var JSON;
- if (!JSON) {JSON = {};}
- (function () {
- 'use strict';
- function f(n) {return n < 10 ? '0' + n : n;}
-
- if (typeof Date.prototype.toJSON !== 'function') {
-
- Date.prototype.toJSON = function (key) {
-
- return isFinite(this.valueOf()) ?
- this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z' : null;
- };
-
- String.prototype.toJSON =
- Number.prototype.toJSON =
- Boolean.prototype.toJSON = function (key) {
- return this.valueOf();
- };
- }
-
- var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- gap,
- indent,
- meta = { // table of character substitutions
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '"' : '\\"',
- '\\': '\\\\'
- },
- rep;
-
-
- function quote(string) {
-
- // If the string contains no control characters, no quote characters, and no
- // backslash characters, then we can safely slap some quotes around it.
- // Otherwise we must also replace the offending characters with safe escape
- // sequences.
-
- escapable.lastIndex = 0;
- return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
- var c = meta[a];
- return typeof c === 'string' ? c :
- '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- }) + '"' : '"' + string + '"';
- }
-
-
- function str(key, holder) {
-
- // Produce a string from holder[key].
-
- var i, // The loop counter.
- k, // The member key.
- v, // The member value.
- length,
- mind = gap,
- partial,
- value = holder[key];
-
- // If the value has a toJSON method, call it to obtain a replacement value.
-
- if (value && typeof value === 'object' &&
- typeof value.toJSON === 'function') {
- value = value.toJSON(key);
- }
-
- // If we were called with a replacer function, then call the replacer to
- // obtain a replacement value.
-
- if (typeof rep === 'function') {
- value = rep.call(holder, key, value);
- }
-
- // What happens next depends on the value's type.
-
- switch (typeof value) {
- case 'string':
- return quote(value);
-
- case 'number':
-
- // JSON numbers must be finite. Encode non-finite numbers as null.
-
- return isFinite(value) ? String(value) : 'null';
-
- case 'boolean':
- case 'null':
-
- // If the value is a boolean or null, convert it to a string. Note:
- // typeof null does not produce 'null'. The case is included here in
- // the remote chance that this gets fixed someday.
-
- return String(value);
-
- // If the type is 'object', we might be dealing with an object or an array or
- // null.
-
- case 'object':
-
- // Due to a specification blunder in ECMAScript, typeof null is 'object',
- // so watch out for that case.
-
- if (!value) {
- return 'null';
- }
-
- // Make an array to hold the partial results of stringifying this object value.
-
- gap += indent;
- partial = [];
-
- // Is the value an array?
-
- if (Object.prototype.toString.apply(value) === '[object Array]') {
-
- // The value is an array. Stringify every element. Use null as a placeholder
- // for non-JSON values.
-
- length = value.length;
- for (i = 0; i < length; i += 1) {
- partial[i] = str(i, value) || 'null';
- }
-
- // Join all of the elements together, separated with commas, and wrap them in
- // brackets.
-
- v = partial.length === 0 ? '[]' : gap ?
- '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
- '[' + partial.join(',') + ']';
- gap = mind;
- return v;
- }
-
- // If the replacer is an array, use it to select the members to be stringified.
-
- if (rep && typeof rep === 'object') {
- length = rep.length;
- for (i = 0; i < length; i += 1) {
- k = rep[i];
- if (typeof k === 'string') {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- } else {
-
- // Otherwise, iterate through all of the keys in the object.
-
- for (k in value) {
- if (Object.prototype.hasOwnProperty.call(value, k)) {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- }
-
- // Join all of the member texts together, separated with commas,
- // and wrap them in braces.
-
- v = partial.length === 0 ? '{}' : gap ?
- '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
- '{' + partial.join(',') + '}';
- gap = mind;
- return v;
- }
- }
-
- // If the JSON object does not yet have a stringify method, give it one.
-
- if (typeof JSON.stringify !== 'function') {
- JSON.stringify = function (value, replacer, space) {
-
- // The stringify method takes a value and an optional replacer, and an optional
- // space parameter, and returns a JSON text. The replacer can be a function
- // that can replace values, or an array of strings that will select the keys.
- // A default replacer method can be provided. Use of the space parameter can
- // produce text that is more easily readable.
-
- var i;
- gap = '';
- indent = '';
-
- // If the space parameter is a number, make an indent string containing that
- // many spaces.
-
- if (typeof space === 'number') {
- for (i = 0; i < space; i += 1) {
- indent += ' ';
- }
-
- // If the space parameter is a string, it will be used as the indent string.
-
- } else if (typeof space === 'string') {
- indent = space;
- }
-
- // If there is a replacer, it must be a function or an array.
- // Otherwise, throw an error.
-
- rep = replacer;
- if (replacer && typeof replacer !== 'function' &&
- (typeof replacer !== 'object' ||
- typeof replacer.length !== 'number')) {
- throw new Error('JSON.stringify');
- }
-
- // Make a fake root object containing our value under the key of ''.
- // Return the result of stringifying the value.
-
- return str('', {'': value});
- };
- }
-
-
- // If the JSON object does not yet have a parse method, give it one.
-
- if (typeof JSON.parse !== 'function') {
- JSON.parse = function (text, reviver) {
-
- // The parse method takes a text and an optional reviver function, and returns
- // a JavaScript value if the text is a valid JSON text.
-
- var j;
-
- function walk(holder, key) {
-
- // The walk method is used to recursively walk the resulting structure so
- // that modifications can be made.
-
- var k, v, value = holder[key];
- if (value && typeof value === 'object') {
- for (k in value) {
- if (Object.prototype.hasOwnProperty.call(value, k)) {
- v = walk(value, k);
- if (v !== undefined) {
- value[k] = v;
- } else {
- delete value[k];
- }
- }
- }
- }
- return reviver.call(holder, key, value);
- }
-
-
- // Parsing happens in four stages. In the first stage, we replace certain
- // Unicode characters with escape sequences. JavaScript handles many characters
- // incorrectly, either silently deleting them, or treating them as line endings.
-
- text = String(text);
- cx.lastIndex = 0;
- if (cx.test(text)) {
- text = text.replace(cx, function (a) {
- return '\\u' +
- ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- });
- }
-
- // In the second stage, we run the text against regular expressions that look
- // for non-JSON patterns. We are especially concerned with '()' and 'new'
- // because they can cause invocation, and '=' because it can cause mutation.
- // But just to be safe, we want to reject all unexpected forms.
-
- // We split the second stage into 4 regexp operations in order to work around
- // crippling inefficiencies in IE's and Safari's regexp engines. First we
- // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
- // replace all simple value tokens with ']' characters. Third, we delete all
- // open brackets that follow a colon or comma or that begin the text. Finally,
- // we look to see that the remaining characters are only whitespace or ']' or
- // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
-
- if (/^[\],:{}\s]*$/
- .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
- .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
- .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
-
- // In the third stage we use the eval function to compile the text into a
- // JavaScript structure. The '{' operator is subject to a syntactic ambiguity
- // in JavaScript: it can begin a block or an object literal. We wrap the text
- // in parens to eliminate the ambiguity.
-
- j = eval('(' + text + ')');
-
- // In the optional fourth stage, we recursively walk the new structure, passing
- // each name/value pair to a reviver function for possible transformation.
-
- return typeof reviver === 'function' ?
- walk({'': j}, '') : j;
- }
-
- // If the text is not JSON parseable, then a SyntaxError is thrown.
-
- throw new SyntaxError('JSON.parse');
- };
- }
-
- // Augment the basic prototypes if they have not already been augmented.
- // These forms are obsolete. It is recommended that JSON.stringify and
- // JSON.parse be used instead.
-
- if (!Object.prototype.toJSONString) {
- Object.prototype.toJSONString = function (filter) {
- return JSON.stringify(this, filter);
- };
- Object.prototype.parseJSON = function (filter) {
- return JSON.parse(this, filter);
- };
- }
- }());
- function $(select){
- var name = select.substring(1);
- switch(select.charAt(0)){
- case '#':
- return document.getElementById(name);
- case '.':
- return document.getElementsByClassName(name);
- case '/':
- return document.getElementsByTagName(name);
- default:
- return document.getElementsByName(select);
- }
- };
- function getNowTimeStamp(){ // 当前时刻 yyyy-m-d h:m:s
- var nowtime = new Date();
- var timestamp =(nowtime.getYear()+1900)+'-'+(nowtime.getMonth()+1)+'-'+nowtime.getDate()+' '+checkTime(nowtime.getHours())+':'+checkTime(nowtime.getMinutes())+':'+checkTime(nowtime.getSeconds());
- return timestamp;
- }
- function timeDiff(date1,date2){// 比较日期大小,年,月,日,小时,分钟
- var re=/^(\d{4})\S(\d{1,2})\S(\d{1,2})\s(\d{1,2})\S(\d{1,2})$/;
- var dt1,dt2;
- if (re.test(date1)) dt1=new Date(RegExp.$1,RegExp.$2-1,RegExp.$3,RegExp.$4,RegExp.$5);
- if (re.test(date2)) dt2=new Date(RegExp.$1,RegExp.$2-1,RegExp.$3,RegExp.$4,RegExp.$5);
- else dt2=new Date();
- return dt1>=dt2;
- }
- function dateDiff(date1,date2){// 比较日期大小,年月日
- var re=/^(\d{4})\S(\d{1,2})\S(\d{1,2})$/;
- var dt1,dt2;
- if (re.test(date1)) dt1=new Date(RegExp.$1,RegExp.$2-1,RegExp.$3);
- if (re.test(date2)) dt2=new Date(RegExp.$1,RegExp.$2-1,RegExp.$3);
- return Math.floor((dt2-dt1)/(1000*60*60*24))
- }
- function checkTime(i){ // 一位数的时间前加0
- if (i<10)
- {i="0" + i}
- return i
- }
- function getKeys(e){ // keycode 转换
- var codetable={'96':'Numpad 0','97':'Numpad 1','98':'Numpad 2','99':'Numpad 3','100':'Numpad 4','101':'Numpad 5','102':'Numpad 6','103':'Numpad 7','104':'Numpad 8','105':'Numpad 9','106':'Numpad *','107':'Numpad +','108':'Numpad Enter','109':'Numpad -','110':'Numpad .','111':'Numpad /','112':'F1','113':'F2','114':'F3','115':'F4','116':'F5','117':'F6','118':'F7','119':'F8','120':'F9','121':'F10','122':'F11','123':'F12','8':'BackSpace','9':'Tab','12':'Clear','13':'Enter','16':'Shift','17':'Ctrl','18':'Alt','20':'Cape Lock','27':'Esc','32':'Spacebar','33':'Page Up','34':'Page Down','35':'End','36':'Home','37':'←','38':'↑','39':'→','40':'↓','45':'Insert','46':'Delete','144':'Num Lock','186':';:','187':'=+','188':',<','189':'-_','190':'.>','191':'/?','192':'`~','219':'[{','220':'\|','221':']}','222':'"'};
- var Keys = '';
- e.shiftKey && (e.keyCode != 16) && (Keys += 'shift+');
- e.ctrlKey && (e.keyCode != 17) && (Keys += 'ctrl+');
- e.altKey && (e.keyCode != 18) && (Keys += 'alt+');
- return Keys + (codetable[e.keyCode] || String.fromCharCode(e.keyCode) || '');
- };
- function addHotKey(codes,func){// 监视并执行快捷键对应的函数
- document.addEventListener('keydown', function(e){
- if ((e.target.tagName != 'INPUT') && (e.target.tagName != 'TEXTAREA') && getKeys(e) == codes){
- func();
- e.preventDefault();
- e.stopPropagation();
- }
- }, false);
- };
- // 触发函数
- function onToggleBlackList(e){// 黑名单[名字]触发
- var v = e.target.value;
- var bShow = e.target.checked;
- if(_bVIEWTHREAD>0){
- var s = document.evaluate("//div[@class='postinfo']",document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = s.snapshotLength - 1; i >= 0; i--) {
- var t = s.snapshotItem(i);
- var a = t.getElementsByTagName('a')[0];
- if( a != undefined){
- var u = a.href.substring(a.href.indexOf('uid')+4);
- if((u+'='+a.text) == v)t.parentNode.parentNode.parentNode.parentNode.style.display = bShow?'none':'';
- }
- }
- }
- if(_bFORUMDISPLAY>0){
- var s = document.evaluate("//td[@class='f_author']",document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = s.snapshotLength - 1; i >= 0; i--) { // 屏蔽BLACK_LIST的发帖
- var t = s.snapshotItem(i);
- var a = t.getElementsByTagName('a')[0];
- if( a != undefined){
- var n = a.text;
- var u = a.href.substring(a.href.indexOf('uid')+4);
- if((u+'='+a.text) == v)t.parentNode.style.display = bShow?'none':'';
- }
- }
- }
- };
- function onBlockUser(e){ // [屏蔽] 按钮触发
- var a = e.target.parentNode.parentNode.parentNode.parentNode.parentNode.getElementsByClassName('postinfo')[0].getElementsByTagName('a')[0];
- var nm= a.text;
- var id= a.href.substring(a.href.indexOf('uid')+4);
- if(blacklistStr.indexOf(id+'='+nm)<0){//检查有没有重复的
- blacklistArray.push(id+'='+nm);
- blacklistStr = blacklistArray.toString();
- GM_setValue('HiPDA_Discovery_BLACK_LIST',blacklistArray.join());
- blacklistLen=blacklistArray.length;
- }
- _syn_modified = true;
- GM_setValue("HiPDA_Discovery_SYN_MODIFIED",_syn_modified);
- // 重新激活同步按钮
- document.getElementById('s_syn').className="enable";
- document.getElementById('s_syn').innerHTML="₪ 同步";
- document.getElementById('s_syn').style.background='#eef9eb';
- document.getElementById('s_syn').style.color='#000';
- refreshConfigDiv();
- processBlackList();
- };
- function onWindowResize(){ // 调整body宽度
- // alert('resize');
- if(_simple_style){
- if(window.innerWidth>1600)
- GM_addStyle("body {width:65%;}");
- else if(window.innerWidth>1400)
- GM_addStyle("body {width:75%;}");
- else if(window.innerWidth>1200)
- GM_addStyle("body {width:85%;}");
- else
- GM_addStyle("body {width:980px;}");
- }
- }
- function onAttachImageLoaded(){ // 附件图片加载完成后修改宽度
- var newimg = new Image();
- newimg.src =this.src;
- if(newimg.width<=_att_max_width ){
- this.width=newimg.width;
- //去除zoom
- this.removeAttribute('onclick');
- this.className="nozoom";
- }
- else
- this.width=_att_max_width;
- }
- function onLoadNewPage(req){ // 后台读取页面完毕
- try {
- if (req.status == 200) {
- var newPageHTML = req.responseText.substring(req.responseText.indexOf('<table summary="forum_'),req.responseText.indexOf('</form>'));
- var newPageThread= newPageHTML.substring(newPageHTML.indexOf('<tbody id="normalthread_'),newPageHTML.indexOf('</table>'));
- var threadList = document.getElementsByName("moderate")[0].getElementsByClassName("datatable")[0];
- // 增加预取了页面的提示
- // var newpagetip="<tbody><tr><td class='folder'></td><td><center>---------- 第"+_pc+"页 ----------</center></td><th class='subject'> </th><td> </td><td> </td><td> </td></tr></tbody>";
- var newpagetip="<tbody><tr><td colspan=5><center>---------- 第"+_pc+"页 ----------</center></td></tr></tbody>";
- threadList.innerHTML = threadList.innerHTML + newpagetip + newPageThread;
-
- // 去除预取页面对应的选择导航按钮
- var pagenav=document.evaluate("//div[@class='pages']//a",
- document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for(var btncnt=pagenav.snapshotLength-1;btncnt>=0;btncnt--){
- var btn=pagenav.snapshotItem(btncnt);
- if(btn.text == _pc)btn.parentNode.removeChild(btn);
- }
- }
- } catch (e) {}
- refreshMinTime();
- _max_read_pages--;
- if( _max_read_pages && (timeDiff(_pmt,_lvt))){
- _pc++;
- GM_xmlhttpRequest({
- method: 'GET',
- url: 'http://'+document.domain+'/forum/forumdisplay.php?fid='+_fid+'&page='+_pc,
- onload: onLoadNewPage,
- overrideMimeType: "text/html; charset=gbk"
- });
- }
- processHighlightColor();
- processBlackList();
- }
- function onSynReply(req){ // 同步时,服务器返回结果
- document.getElementById('s_syn').className="disabled";
- // try {
- _syn_pending=false;
- if (req.status == 200) { // 200 OK
- var response=JSON.parse(req.responseText);
- // alert(response.list); // 输出中文,不乱码
- // response.result
- // .version
- // .list
- var nowtimestamp=getNowTimeStamp();
- switch(response.result){
- case "0": // 无更新
- document.getElementById('s_syn').style.background='#88ff88';
- document.getElementById('s_syn').innerHTML="√ 无更新";
- GM_setValue('HiPDA_Discovery_SYN_LASTTIME',nowtimestamp);
- break;
- case "1": // OK,本地覆盖了服务器,返回新的版本号
- _syn_lastversion = response.version;
- _syn_modified = false;
- GM_setValue("HiPDA_Discovery_SYN_LASTVERSION",_syn_lastversion);
- GM_setValue("HiPDA_Discovery_SYN_MODIFIED",_syn_modified);
- document.getElementById('s_syn').style.background='#88ff88';
- document.getElementById('s_syn').innerHTML="√ 已同步";
- GM_setValue('HiPDA_Discovery_SYN_LASTTIME',nowtimestamp);
- break;
- case "2": // 服务器有更高版本覆盖本地列表
- var newblacklistArray = new Array();
- if( response.list )
- newblacklistArray = response.list.split(",");
- GM_setValue("HiPDA_Discovery_BLACK_LIST",newblacklistArray.join());
- _syn_lastversion = response.version;
- GM_setValue("HiPDA_Discovery_SYN_LASTVERSION",_syn_lastversion);
- _syn_modified = false;
- GM_setValue("HiPDA_Discovery_SYN_MODIFIED",_syn_modified);
- document.getElementById('s_syn').style.background='#88ff88';
- document.getElementById('s_syn').innerHTML="√ 已更新";
- GM_setValue('HiPDA_Discovery_SYN_LASTTIME',nowtimestamp);
- break;
- case "3": // 冲突 TODO
- serverBlacklist = new Array();
- if( response.list )
- serverBlacklist = response.list.split(",");
- serverListStr = serverBlacklist.join();
- document.getElementById('s_syn').addEventListener('click', processConflict, false);
- serverVersion = response.version;
- _syn_pending = true;
- processConflict();
- document.getElementById('s_syn').style.background='#f00';
- document.getElementById('s_syn').style.color='#fff';
- document.getElementById('s_syn').innerHTML="! 有冲突";
- document.getElementById('s_syn').title="版本有冲突";
- break;
- case "4": // 参数错误
- document.getElementById('s_syn').style.background='#f00';
- document.getElementById('s_syn').style.color='#fff';
- document.getElementById('s_syn').innerHTML="X 参数错误";
- document.getElementById('s_syn').title=response.list;
- break;
- case "5": // 频繁刷新
- document.getElementById('s_syn').style.background='#f00';
- document.getElementById('s_syn').style.color='#fff';
- document.getElementById('s_syn').innerHTML="服务器忙";
- document.getElementById('s_syn').title="限定10s一次";
- break;
- case "500": // 服务器错误
- document.getElementById('s_syn').style.background='#f00';
- document.getElementById('s_syn').style.color='#fff';
- document.getElementById('s_syn').innerHTML="服务器错误";
- break;
- default:
- document.getElementById('s_syn').innerHTML="! 未知错误";
- }
- refreshConfigDiv();
- }
- else { // 500,404,443,...
- document.getElementById('s_syn').style.background='#f00';
- document.getElementById('s_syn').style.color='#fff';
- document.getElementById('s_syn').innerHTML="X 网络错误";
- }
- // }
- // catch (e) {
- // document.getElementById('s_syn').style.background='#f00';
- // document.getElementById('s_syn').style.color='#fff';
- // document.getElementById('s_syn').innerHTML="! 格式错误";
- // }
- }
- function onSynChooseBtn(choose){ // 同步冲突界面选择按钮
- var nowtimestamp=getNowTimeStamp();
- switch (choose){
- case 0: // 使用 新列表
- // 把配置界面显示出来,等待服务器回应
- document.getElementById('hp_cfg_div').style.display = "";
- document.getElementById('s_syn').style.background='#999';
- document.getElementById('s_syn').innerHTML="同步中...";
- // _syn_pending=false;
-
- // 获取新列表
- var r = document.getElementsByClassName('hpdtool_syn_chk_new');
- for (var i = r.length-1; i >= 0; i--)
- if(r[i].checked)
- newBlacklist.push(r[i].value);
- // 存储新列表,服务器的版本号,标志已修改
- GM_setValue("HiPDA_Discovery_BLACK_LIST",newBlacklist.join());
- _syn_lastversion = serverVersion;
- GM_setValue("HiPDA_Discovery_SYN_LASTVERSION",_syn_lastversion);
- _syn_modified = true;
- GM_setValue("HiPDA_Discovery_SYN_MODIFIED",_syn_modified);
- GM_setValue('HiPDA_Discovery_SYN_LASTTIME',nowtimestamp);
- document.getElementById('s_syn').removeEventListener('click', processConflict, false);
- // 向服务器发起请求
- var data={
- "uid":_uid,
- "lastversion":_syn_lastversion,
- "modified":_syn_modified,
- "action":"update",
- "blacklist":newBlacklist
- };
- GM_xmlhttpRequest({
- method: 'GET',
- url: 'http://hipdatool.sinaapp.com/sync.php?data='+JSON.stringify(data),
- onload: onSynReply,
- overrideMimeType: "text/html; charset=gbk"
- });
- break;
- case 1: // 使用 服务器
- GM_setValue("HiPDA_Discovery_BLACK_LIST",serverBlacklist.join());
- _syn_lastversion = serverVersion;
- GM_setValue("HiPDA_Discovery_SYN_LASTVERSION",_syn_lastversion);
- _syn_modified = false;
- GM_setValue("HiPDA_Discovery_SYN_MODIFIED",_syn_modified);
- document.getElementById('s_syn').style.background='#88ff88';
- document.getElementById('s_syn').innerHTML="√ 已更新";
- GM_setValue('HiPDA_Discovery_SYN_LASTTIME',nowtimestamp);
- refreshConfigDiv();
- document.getElementById('hp_cfg_div').style.display = "";
- document.getElementById('s_syn').removeEventListener('click', processConflict, false);
- _syn_pending=false;
- break;
- case 2: // 使用 本地
- // 把配置界面显示出来,等待服务器回应
- document.getElementById('hp_cfg_div').style.display = "";
- document.getElementById('s_syn').style.background='#999';
- document.getElementById('s_syn').innerHTML="同步中...";
- // _syn_pending=false;
-
- // 向服务器发起请求
- var data={
- "uid":_uid,
- "lastversion":_syn_lastversion,
- "modified":_syn_modified,
- "action":"update",
- "blacklist":blacklistArray
- };
- GM_xmlhttpRequest({
- method: 'GET',
- url: 'http://hipdatool.sinaapp.com/sync.php?data='+JSON.stringify(data),
- onload: onSynReply,
- overrideMimeType: "text/html; charset=gbk"
- });
- document.getElementById('s_syn').removeEventListener('click', processConflict, false);
- break;
- default:
- _syn_pending=false;
- }
- document.getElementById('hpdtool_syn_list').innerHTML="";
- document.getElementById('hpdtool_syn_div').style.display = 'none';
- }
- function onClickSynBtn(){ // 点击同步按钮
- if(_syn_pending)return;
- if(_uid == 0) return;
- if(document.getElementById('s_syn').className=="disabled")return;
- _syn_pending=true;
- document.getElementById('s_syn').style.background='#999';
- document.getElementById('s_syn').innerHTML="同步中...";
- var data={
- "uid":_uid,
- "lastversion":_syn_lastversion,
- "modified":_syn_modified,
- "action":"sync",
- "blacklist":blacklistArray
- };
- GM_xmlhttpRequest({
- method: 'GET',
- url: 'http://hipdatool.sinaapp.com/sync.php?data='+JSON.stringify(data),
- onload: onSynReply,
- overrideMimeType: "text/html; charset=gbk"
- });
- }
- function onPageUnload(){ // 关闭页面时保存参数
- _lvt = year + "-" + month + "-" + day + " " + hour + ":" + min;
- if((_pc == 1)&&(timeDiff(_lvt,_pxt)))
- GM_setValue("HiPDA_Discovery_LAST_VISIT_TIME"+_fid,_lvt);
- }
- function onSaveConfig(save){ // [保存]、[取消]按钮触发,保存hpd-tool参数以及黑名单编辑结果
- if(save){
- var r = document.getElementsByClassName('bl_chk');
- blacklistArray = new Array();
- for (var i = r.length-1; i >= 0; i--)
- if(r[i].checked)
- blacklistArray.push(r[i].value);
- GM_setValue('HiPDA_Discovery_BLACK_LIST',blacklistArray.join());
- if(blacklistLen != blacklistArray.length){ // 列表长度变化,表示列表进行了修改
- _syn_modified = true;
- GM_setValue("HiPDA_Discovery_SYN_MODIFIED",_syn_modified);
- // 重新激活同步按钮
- document.getElementById('s_syn').className="enable";
- document.getElementById('s_syn').innerHTML="₪ 同步";
- document.getElementById('s_syn').style.background='#eef9eb';
- document.getElementById('s_syn').style.color='#000';
- }
- blacklistLen=blacklistArray.length;
- blacklistStr=blacklistArray.toString();
-
- var temp = document.getElementById('_chk_hightlight_color').value;
- if(RegExp("#[A-F,a-f,0-9]{6}").test(temp)){
- var t = temp.indexOf("#");
- _hightlight_color = temp.substr(t,7);
- }/*else alert('wrong color');
- alert(_hightlight_color);*/
- GM_setValue("HiPDA_Discovery_HIGHLIGHT_COLOR",_hightlight_color);
-
- var rd=document.getElementsByName('_radio_font_size');
- for(var i=0;i<rd.length;i++)
- if(rd[i].checked)_font_size = rd[i].value;
- GM_setValue("HiPDA_Discovery_FONT_SIZE",_font_size);
-
- // _hightlight_en = document.getElementById('_chk_hightlight_en').checked;
- // _blacklist_en_hpd = document.getElementById('_chk_blacklist_en_hpd').checked;
- // _blacklist_en_other = document.getElementById('_chk_blacklist_en_other').checked;
- // _simple_style = document.getElementById('_chk_simple_style').checked;
- // _hover_style = document.getElementById('_chk_hover_style').checked;
- // _reply_avatar = document.getElementById('_chk_reply_avatar').checked;
- _hightlight_en = document.getElementById('_chk_hightlight_en').checked;
- _blacklist_en_hpd = document.getElementById('_chk_blacklist_en_hpd').checked;
- _blacklist_en_other = document.getElementById('_chk_blacklist_en_other').checked;
- _simple_style = document.getElementById('_chk_simple_style').checked;
- _hover_style = document.getElementById('_chk_hover_style').checked;
- _reply_avatar = document.getElementById('_chk_reply_avatar').checked;
- GM_setValue("HiPDA_Discovery_HIGHLIGHT_ENABLE",_hightlight_en);
- GM_setValue("HiPDA_Discovery_BLACKLIST_ENABLE_HPD",_blacklist_en_hpd);
- GM_setValue("HiPDA_Discovery_BLACKLIST_ENABLE_OTHER",_blacklist_en_other);
- GM_setValue("HiPDA_Discovery_SIMPLE_STYLE",_simple_style);
- GM_setValue("HiPDA_Discovery_HOVER_STYLE",_hover_style);
- GM_setValue("HiPDA_Discovery_REPLY_AVATAR",_reply_avatar);
- }
- document.getElementById('hp_cfg_div').style.display = (document.getElementById('hp_cfg_div').style.display == 'none')?'':'none';
- changeFontSize(true);
- processBlackList();
- };
- // 论坛信息
- function readPageURL(){ // 取得当前的tid和page值
- var offset = window.location.search.indexOf("page=");
- if(offset>0){
- var t = window.location.search.substr(offset);
- if(t.indexOf("&") >0){
- _pc = t.slice(5,t.indexOf("&"));
- }else{
- _pc = t.slice(5);
- }
- }else{
- _pc = 1;
- }
- offset = window.location.search.indexOf("tid=");
- if(offset>0){
- var t = window.location.search.substr(offset);
- if(t.indexOf("&") >0){
- _tid = t.slice(4,t.indexOf("&"));
- }else{
- _tid = t.slice(4);
- }
- }
- }
- function refreshMinTime(){ // 取得当前页面的 _pmt —— 包含预读取的后续页面内容
- var snapResults3 = document.evaluate("//td [@class='lastpost']",
- document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = snapResults3.snapshotLength - 1; i >= 0; i--){
- var e = snapResults3.snapshotItem(i);
- //如果是置顶帖子,就不要取时间值
- var checkTop = e.parentNode.getElementsByClassName('folder');
- if(checkTop[0] != undefined){
- if(checkTop[0].innerHTML.indexOf('images/default/pin')<0 && checkTop[0].innerHTML.indexOf('images/default/folder_lock')<0 ){
- var _rt = e.getElementsByTagName('a')[1].text;
- if(timeDiff(_pmt,_rt))
- _pmt = _rt;
- }
- //else alert(e.getElementsByTagName('a')[1].text);
- }
- }
- }
- // 论坛界面修改
- function changeURL(){ // 把cnc页面上的连接都换成cnc.4d4y.com
- var url = document.evaluate("//a",
- document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for(var i = url.snapshotLength-1;i>=0;i--){
- var a=url.snapshotItem(i);
- a.href=a.href.replace(/www.4d4y.com/,document.domain);
- };
- }
- function changeFontSize(save){
- var sz=_font_size;
- if(save == false){ // 即时预览,未保存字体大小
- var rd=document.getElementsByName('_radio_font_size');
- for(var i=0;i<rd.length;i++){
- if(rd[i].checked == true)
- sz=rd[i].value;
- }
- }
- var fnt=".t_msgfont,.t_msgfont td,td,th,.subject,.lastpost,.author,.nums,#newspecialtmp,#newspecial,#postreplay,.signatures,#umenu,#nav,.pages_btns,.threadtype{font-size: "+sz+"px;}";
- GM_addStyle(fnt);
- fnt = ".postauthor dt {width:"+4*sz+"px} .mainbox td.postauthor{width:180px} .forumcontrol .modaction{width:150px;}";
- GM_addStyle(fnt);
- }
- function changeStyle(){ // 改变页面风格
- // 好孩子看不见
- GM_addStyle(".goodboysglasses {color:red;font-size:16;border:1px solid #ff0000;padding:15px 15px 15px 52px;width:75%;margin:20px 30px}");
- GM_addStyle(".goodboysglasses {background:url(data:img/png;base64,\
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ\
- bWFnZVJlYWR5ccllPAAAAqJJREFUeNrsV09rE0EUf7s7k91tTENBQ6FYegoUJRX8AiJegt5UUKkJ\
- JLd8A+9+gV5yS0KuirdC9SO0Fy8WwUuzh0hbYou20fyd9b1hdpumZbPohlzy4JHNZOb9fvN7895s\
- NNd1YZamw4xtTmBOQEPn9Xr9AKthRdM0yOfzJo71poQXQ6wuVZ4Q4kOhUHhBCiwQ+IOHjyCdXoda\
- rdalidMAp9iEQVi6rj/FMZsImMSI6Qasrt6GzMY9IJYRk5A7p9iEQViq/5j+GbBsE/b2duF7swmU\
- CrR4hATiFJNiEwZheWeQ+QRME05OfkCxWMzi1+Oo9c/lcvfxI1WpVHYIyzNJgOTgOKh2fqAItCPE\
- b6u4bcIgLO8K8BWIMcN7PFUepfWU8zGsCwJkg8EAqtXq0TTrnjBGzSfQ6XRhc/O1l4apGUlPWJcI\
- EGir1UJ9BOgT8AWm7s9AgIs9zCNLQV1dB82yQNONYAJiCEa/76/1FUhiaSy+/YwJmsCg58Lpmwwc\
- /TyDr/tf5ND6nbuweCsF+0tJmKQfHb3Mr/OrKTBNfIzbcCMWfD2ccwE2kt39+InaNpUsNa6dxy9f\
- QSLE5SII1LauEmCM4em0wGTBIXpCAOcMhsOhV7LymcYS6nKZpAAbrwLKoU4EuIkeTCDmCjl3pGSl\
- cdU6wxDgCvNyGWJQZliSgBbEfijk3HGjPSVCVoJx/fsAg9zGEnQGHGWOXev0G80Zax8XCjx7LlUI\
- dJzDx/sANodDp9FY3squwVZ28g5wrlwz0lwOHcdZXnv/LpQCDcfx15PaScMw0uVyeZtzngoToN/v\
- H5dKpSd4+L5JSf9jvabUu4m+otIYppLO0JvoLTX2z+u1kRQuUDsIeY6ol/6mzUS0foYvpfO/ZnMC\
- sybwV4ABAEMXBDR9AlSHAAAAAElFTkSuQmCC) no-repeat 10px 5px");
- if(_simple_style){ // 启用了精简风格
- onWindowResize();
- GM_addStyle("\
- body {margin:0 auto;background:#f0f0f0;}\
- .postact {line-height:20px}\
- .postact a,body, td, input, textarea, select, button,.posterinfo em {color:#222222 !important;}\
- .postauthor em a {color:#222222}\
- .postactions {border-top:0px}\
- .postinfo {border-bottom:0px}\
- .authorinfo em {margin:0px}\
- .posterinfo {color:#ffffff}\
- .posterinfo:hover {color:#222222}\
- .posterinfo:hover a {color:#222222}\
- .posterinfo .pagecontrol {display:none}\
- .posterinfo:hover .pagecontrol {display:block}\
- .authorinfo a {color:#ffffff}\
- .authorinfo:hover a {color:#222222}\
- #header .wrap {padding:0}\
- #umenu a {margin:0 2px}\
- #umenu {position:static;float:right}\
- .threadad td.postauthor,.adcontent {background: #f0f0f0;}\
- .signatures {font-size: 13px;color:#222222;max-height:100px !important;}\
- #moderate .colplural,#moderate .icon,.datatable .icon,#forumheader {display:none}\
- #nav {color:#000000;text-indent:0px;background:none;margin-bottom:8px;}\
- #nav a,#footlink,#footlink a,#rightinfo,#rightinfo a{color:#000000}\
- .datatable .subject{padding:2px 5px;}\
- td,.subject{font:13px/1.4em;}\
- ");
- }
- changeFontSize();
- if(!_hover_style){ // 用户 注册、积分、发帖数 等显示在头像下方
- var s = document.evaluate("//td[@class='postauthor']",document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = s.snapshotLength - 1; i >= 0; i--) {
- var userdata=s.snapshotItem(i).getElementsByTagName('dl')[0];
- if(userdata != undefined){
- userdata.style.margin="0px 10px 0px 20px";
- // 去掉了一些项目
- userdata.removeChild(userdata.lastChild);
- userdata.removeChild(userdata.lastChild);
- var regtime1=userdata.lastChild;
- userdata.removeChild(userdata.lastChild);
- var regtime2=userdata.lastChild;
- userdata.removeChild(userdata.lastChild);
- userdata.removeChild(userdata.lastChild);
- userdata.removeChild(userdata.lastChild);
- userdata.appendChild(regtime2);
- userdata.appendChild(regtime1);
- s.snapshotItem(i).appendChild(userdata);
- // 去除头像悬停菜单
- var avatar=s.snapshotItem(i).getElementsByClassName('avatar')[0];
- avatar.removeAttribute('onmouseover');
- }
- }
- GM_addStyle(".postauthor dt,.postauthor dd {color:#222222;height:1.2em;line-height:1.2em;}");
- }
- if(!_reply_avatar && _bVIEWTHREAD>0 && document.getElementById('fastpostform') )document.getElementById('fastpostform').getElementsByClassName('avatar')[0].innerHTML="";
- // 【发表回复】、【发表新帖】
- if(document.getElementById('post_reply')) document.getElementById('post_reply').getElementsByTagName('a')[0].innerHTML="发表回复";
- if(document.getElementById('newspecial')) document.getElementById('newspecial').innerHTML="发表新帖";
- if(document.getElementById('newspecialtmp')) document.getElementById('newspecialtmp').innerHTML="发表新帖";
- GM_addStyle("#post_reply,.forumcontrol #newspecial,.pages_btns #newspecial,.forumcontrol #newspecialtmp,.pages_btns #newspecialtmp{border:1px solid #003B54;line-height:22px;padding:2px 8px 2px 8px;float:left;margin:2px 5px 3px 5px}");
-
- // 顶部菜单
- if(document.getElementById('menu')){
- document.getElementById('menu').style.display='none';
- if(_uid>0){
- document.getElementById('umenu').appendChild(document.createTextNode(" | "));
- var menuitem=document.createElement('a');
- menuitem.innerHTML="搜索";
- menuitem.href='http://'+document.domain+'/forum/search.php';
- document.getElementById('umenu').appendChild(menuitem);
-
- document.getElementById('umenu').appendChild(document.createTextNode(" | "));
- menuitem=document.createElement('a');
- menuitem.innerHTML="我的主题";
- menuitem.target="_blank";
- menuitem.href='http://'+document.domain+'/forum/my.php?item=threads';
- document.getElementById('umenu').appendChild(menuitem);
-
- document.getElementById('umenu').appendChild(document.createTextNode(" "));
- menuitem=document.createElement('a');
- menuitem.innerHTML="我的回复";
- menuitem.target="_blank";
- menuitem.href='http://'+document.domain+'/forum/my.php?item=posts';
- document.getElementById('umenu').appendChild(menuitem);
-
- document.getElementById('umenu').appendChild(document.createTextNode(" "));
- menuitem=document.createElement('a');
- menuitem.innerHTML="我的收藏";
- menuitem.target="_blank";
- menuitem.href='http://'+document.domain+'/forum/my.php?item=favorites&type=thread';
- document.getElementById('umenu').appendChild(menuitem);
- }
- }
- // 下一页
- // var nextpageurl=document.getElementsByClassName('pages')[1].getElementsByClassName('next')[0];
- // if(nextpageurl != undefined){
- // GM_addStyle(".thread-follow-page{border:1px solid #f00;height:31px;line-height:31px;align:center} .thread-follow-page a:hover{text-decoration:none}.thread-follow-page a{background-color:#DFD0BD;display:block;width:100%;height:31px;}");
- // var nextpagebtn=document.createElement('div');
- // nextpagebtn.className="thread-follow-page";
- // nextpagebtn.innerHTML="<a href='"+nextpageurl.href+"'>点击显示下一页</a>"
- // var pagenav=document.getElementsByClassName('forumcontrol')[1];
- // if(pagenav != undefined){
- // document.getElementsByTagName('body')[0].appendChild(nextpagebtn);
- // document.getElementById('wrap').insertBefore(nextpagebtn,pagenav);
- // }
- // }
- }
- function appendControl(){ // 添加[屏蔽]按钮
- var s = document.evaluate("//div[@class='authorinfo']",
- document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = s.snapshotLength - 1; i >= 0; i--) {
- var t = s.snapshotItem(i);
-
- var a1=document.createElement('a');
- a1.innerHTML = '屏蔽';
- a1.href = '###';
- a1.addEventListener('click', onBlockUser,false);
-
- t.appendChild(document.createTextNode(" | "));
- t.appendChild(a1);
- }
- };
- function addConfigDiv(){ // 添加Alt+O的界面
- // 处理冲突界面
- GM_addStyle('\
- #hpdtool_syn_div { position:fixed;width:303px;bottom:20px;right:20px;font-size:13px;z-index:999;text-align:left;background-color:#9287AE;padding:15px;border:2px solid #bfbfbf;-moz-border-radius:5px;opacity:0.95;}\
- #hpdtool_syn_div hr {color: #bfbfbf;border: 1px solid;margin: 8px 0;}\
- #hpdtool_syn_div,#hpdtool_syn_div td,.hpdtool_syn_srv,.hpdtool_syn_lcl {color:#ffffff !important;}\
- #hpdtool_syn_list {margin-left:5px;max-height:600px;overflow:auto;}\
- #hpdtool_syn_div a {padding:2px 5px;-moz-border-radius: 4px;background: #eef9eb;width: 50px;border: 1px solid #aaa;}\
- #hpdtool_syn_div a:hover {border: 1px solid #aaa;background: #fff;color: #000;}\
- #hpdtool_syn_div .hpdtool_syn_new {width:45px;text-align:center;border-right:1px solid #fff;}\
- #hpdtool_syn_div .hpdtool_syn_srv {width:78px;max-width:78px;text-align:center;border-right:1px solid #fff;padding:2px 5px;}\
- #hpdtool_syn_div .hpdtool_syn_lcl {width:78px;max-width:78px;text-align:center;padding:2px 5px;}\
- ');
- var hpdtool_syn = document.createElement("div");
- hpdtool_syn.id = "hpdtool_syn_div";
- hpdtool_syn.style.display = "none";
- hpdtool_syn.innerHTML = "<div class='locker'><center><font face='Impact' size=3>同步冲突处理</font></center><hr>\
- 本地与服务器黑名单差异部分,<b>相同部分已省略</b>。请点选对应的列表进行同步。\
- <div id='hpdtool_syn_list'></div><br />\
- <a href='javascript:void(0)' id='hpdtool_use_new' >新列表</a>\
- <a href='javascript:void(0)' id='hpdtool_use_server' >服务器列表</a>\
- <a href='javascript:void(0)' id='hpdtool_use_local' >本地列表</a>\
- <a href='javascript:void(0)' id='hpdtool_use_nothing' >保持不变</a></div>";
- document.getElementsByTagName('body')[0].appendChild(hpdtool_syn);
- document.getElementById('hpdtool_use_new').addEventListener('click', function(){onSynChooseBtn(0);}, false);
- document.getElementById('hpdtool_use_server').addEventListener('click', function(){onSynChooseBtn(1);}, false);
- document.getElementById('hpdtool_use_local').addEventListener('click', function(){onSynChooseBtn(2);}, false);
- document.getElementById('hpdtool_use_nothing').addEventListener('click', function(){onSynChooseBtn(3);}, false);
-
- // Alt+O 控制界面
- GM_addStyle('\
- #hp_cfg_div {position:fixed;align:center;width: 303px;padding: 15px;bottom:20px;right:20px;z-index:99;color:#fff;background:#9287AE;border:2px solid #bfbfbf;-moz-border-radius:5px;opacity:0.95;text-align:left;font-size:14px !important;}\
- #hp_cfg_div input {height: 12px}\
- #s_syn {display: none}\
- #hp_cfg_div hr {color: #bfbfbf;border: 1px solid;margin: 8px 0;}\
- #hp_cfg_div a {-moz-border-radius: 4px;background: #eef9eb;width: 50px;border: 1px solid #aaa;}\
- #hp_cfg_div a:hover {border: 1px solid #aaa;background: #fff;color: #000;}\
- #s_ok,#s_cl,#s_syn {padding:2px 5px;}\
- #blacklist {margin-left:5px;max-height:600px;overflow:auto;}\
- #_chk_hightlight_color {margin-left:4px;}\
- ');
- var hp_cfg = document.createElement("div");
- hp_cfg.id = "hp_cfg_div";
- hp_cfg.style.display = "none";
- hp_cfg.innerHTML = '<center><font face="Impact" size=3 title="来自D版带着爱">4d4y ♥ tool</font> <sub>version 5.2</sub></center><hr />\
- 字体大小:\
- <input type="radio" id="_font_size_13px" name="_radio_font_size" value="13" /><font size=2>小</font>\
- <input type="radio" id="_font_size_14px" name="_radio_font_size" value="14" /><font size=3>中</font>\
- <input type="radio" id="_font_size_16px" name="_radio_font_size" value="16" /><font size=4.5>大</font>\
- <br />\
- 界面风格:\
- <cite title="精简界面风格" ><input type="checkbox" id="_chk_simple_style" />简版</cite>\
- <cite title="用户信息显示在悬浮菜单,不选则显示在头像下方" ><input type="checkbox" id="_chk_hover_style" />头像菜单</cite>\
- <cite title="回帖时显示自己头像" ><input type="checkbox" id="_chk_reply_avatar" />回帖头像</cite>\
- <br />\
- 新帖高亮:\
- <input id="_chk_hightlight_en" type="checkbox" />启用\
- <input id="_chk_hightlight_color" type="text" style="width:65px;height:18px;" title="HTML颜色代码, 输入无效代码将使用原来的设置" value="未定义"/><br />\
- 屏蔽用户:\
- <input id="_chk_blacklist_en_hpd" type="checkbox" />D版\
- <input id="_chk_blacklist_en_other" type="checkbox" />其他\
- <br />\
- <div id="blacklist"></div><br /><br />\
- <div align="center">\
- <a href="javascript:void(0)" id="s_ok" >√ 确定</a>\
- \
- <a href="javascript:void(0)" id="s_cl" >X 取消</a>\
- \
- <a href="javascript:void(0)" id="s_syn" >₪ 同步</a>\
- <br />\
- </div>\
- ';
- document.getElementsByTagName('body')[0].appendChild(hp_cfg);
- if(_uid == 0){
- document.getElementById('s_syn').innerHTML="未登录";
- document.getElementById('s_syn').href="http://"+document.domain+"/forum/logging.php?action=login";
- }
- document.getElementById('s_ok').addEventListener('click', function(){onSaveConfig(true);}, false);
- document.getElementById('s_cl').addEventListener('click', function(){onSaveConfig(false);}, false);
- document.getElementById('s_syn').addEventListener('click', function(){onClickSynBtn(false);}, false);
- document.getElementById('_font_size_13px').addEventListener('click', function(){changeFontSize(false);}, false);
- document.getElementById('_font_size_14px').addEventListener('click', function(){changeFontSize(false);}, false);
- document.getElementById('_font_size_16px').addEventListener('click', function(){changeFontSize(false);}, false);
- addHotKey('alt+O',function(){if(_syn_pending)return;refreshConfigDiv();onSaveConfig(false); });
- addHotKey('Esc',function(){if(_syn_pending)return;else document.getElementById('hp_cfg_div').style.display = 'none'});
- }
- function readConfig(){
- grave_image="url(data:img/png;base64,\
- iVBORw0KGgoAAAANSUhEUgAAAJYAAACECAYAAAEFGOLkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ\
- bWFnZVJlYWR5ccllPAAAA1xpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp\
- bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6\
- eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEz\
- NDM0MiwgMjAxMC8wMS8xMC0xODowNjo0MyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo\
- dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw\
- dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu\
- MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVz\
- b3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1N\
- Ok9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTIxRTYyMzYxMjZFMTExOTA1MkM0NDMxNTJG\
- QzY0QSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoyNUI0ODYyNDI2NjgxMUUxOEFEMkMyMzg3\
- QkVENjI2OCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyNUI0ODYyMzI2NjgxMUUxOEFEMkMy\
- Mzg3QkVENjI2OCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1Ij4gPHhtcE1N\
- OkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDEyMUU2MjM2MTI2RTExMTkw\
- NTJDNDQzMTUyRkM2NEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDEyMUU2MjM2MTI2RTEx\
- MTkwNTJDNDQzMTUyRkM2NEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94Onht\
- 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) no-repeat 90% 95%";
-
- _hightlight_en = GM_getValue('HiPDA_Discovery_HIGHLIGHT_ENABLE');
- if(_hightlight_en == undefined)_hightlight_en = false;
- if(_hightlight_en == "false" || !_hightlight_en) _hightlight_en = false;
- else _hightlight_en = true;
-
- _blacklist_en_hpd = GM_getValue('HiPDA_Discovery_BLACKLIST_ENABLE_HPD');
- if(_blacklist_en_hpd == undefined)_blacklist_en_hpd = true;
- if(_blacklist_en_hpd == "false" || !_blacklist_en_hpd) _blacklist_en_hpd = false;
- else _blacklist_en_hpd = true;
-
- _blacklist_en_other = GM_getValue('HiPDA_Discovery_BLACKLIST_ENABLE_OTHER');
- if(_blacklist_en_other == undefined)_blacklist_en_other = true;
- if(_blacklist_en_other == "false" || !_blacklist_en_other) _blacklist_en_other = false;
- else _blacklist_en_other = true;
-
- _simple_style = GM_getValue('HiPDA_Discovery_SIMPLE_STYLE');
- if(_simple_style == undefined)_simple_style = true;
- if(_simple_style == "false" || !_simple_style) _simple_style = false;
- else _simple_style = true;
-
- _hover_style = GM_getValue('HiPDA_Discovery_HOVER_STYLE');
- if(_hover_style == undefined)_hover_style = false;
- if(_hover_style == "false" || !_hover_style) _hover_style = false;
- else _hover_style = true;
-
- _reply_avatar = GM_getValue('HiPDA_Discovery_REPLY_AVATAR');
- if(_reply_avatar == undefined)_reply_avatar = false;
- if(_reply_avatar == "false" || !_reply_avatar ) _reply_avatar = false;
- else _reply_avatar = true;
-
- _syn_modified = GM_getValue('HiPDA_Discovery_SYN_MODIFIED');
- if(_syn_modified == undefined)_syn_modified = false;
- if(_syn_modified == "false" || !_syn_modified) _syn_modified = false;
- else _syn_modified = true;
-
- _hightlight_color = GM_getValue('HiPDA_Discovery_HIGHLIGHT_COLOR');
- if(_hightlight_color == undefined)_hightlight_color = "#F0E68C";
-
- _font_size = GM_getValue('HiPDA_Discovery_FONT_SIZE');
- if(_font_size == undefined)_font_size = '13';
- _syn_lastversion = GM_getValue('HiPDA_Discovery_SYN_LASTVERSION');
- if(_syn_lastversion == undefined)_syn_lastversion = 0;
-
- var b = GM_getValue('HiPDA_Discovery_BLACK_LIST');
- if(b == undefined)b='';
- blacklistArray = '';
- if(b.length)blacklistArray = b.split(",");
- else blacklistArray = new Array();
- blacklistLen=blacklistArray.length;
- blacklistStr=blacklistArray.toString();
-
- try{ // 取得当前登录用户 uid
- var c = document.getElementById('umenu').getElementsByTagName('cite')[0].getElementsByTagName('a')[0].href;
- _uid = c.substr(c.indexOf("uid=")+4);
- if(c.indexOf("&")>0)
- _uid = c.substr(0,c.indexOf("&"));
- }catch (e) {_uid = 0;}
-
- _today = year + "-" + month + "-" + day;
- _pxt = "1900-1-1 01:01";
- _pmt = year + "-" + month + "-" + day + " " + hour + ":" + min;
- var offset = window.location.search.indexOf("page=");
- if(offset>0){
- var t = window.location.search.substr(offset);
- if(t.indexOf("&") >0) _pc = t.slice(5,t.indexOf("&"));
- else _pc = t.slice(5);
- }
- else _pc = 1;
- offset = window.location.search.indexOf("fid=");
- if(offset>0){
- var t = window.location.search.substr(offset);
- if(t.indexOf("&") >0)_fid = t.slice(4,t.indexOf("&"));
- else _fid = t.slice(4);
- }
- else _fid = 2; // 默认D版好了
-
- _lvt = GM_getValue("HiPDA_Discovery_LAST_VISIT_TIME"+_fid);
- if(_lvt == undefined){
- _lvt = year + "-" + month + "-" + day + " " + hour + ":" + min;
- _first_time_use = true;
- GM_setValue("HiPDA_Discovery_LAST_VISIT_TIME"+_fid,_lvt);
- }
- else _first_time_use = false;
- }
- function refreshConfigDiv(){ // 刷新编辑黑名单的界面
- readConfig();
- document.getElementById('_chk_hightlight_color').value=_hightlight_color;
- document.getElementById('_chk_hightlight_en').checked=( !_hightlight_en || _hightlight_en=="false")?0:1;
- document.getElementById('_chk_blacklist_en_hpd').checked=( !_blacklist_en_hpd || _blacklist_en_hpd=="false")?0:1;
- document.getElementById('_chk_blacklist_en_other').checked=( !_blacklist_en_other || _blacklist_en_other=="false")?0:1;
- document.getElementById('_chk_simple_style').checked=( !_simple_style || _simple_style=="false")?0:1;
- document.getElementById('_chk_hover_style').checked=( !_hover_style || _hover_style=="false")?0:1;
- document.getElementById('_chk_reply_avatar').checked=( !_reply_avatar || _reply_avatar=="false")?0:1;
- // 被点击过以后就不必更新此按钮,直到刷新页面
- if(document.getElementById('s_syn').className != "disabled") {
- if(_uid == 0){
- document.getElementById('s_syn').innerHTML="未登录";
- document.getElementById('s_syn').href="http://"+document.domain+"/forum/logging.php?action=login";
- }
- else {
- document.getElementById('s_syn').innerHTML="₪ 同步";
- document.getElementById('s_syn').style.background='#eef9eb';
- document.getElementById('s_syn').style.color='#000';
- }
- }
- document.getElementById('s_syn').title="上次同步时间:"+GM_getValue('HiPDA_Discovery_SYN_LASTTIME');
- var rd=document.getElementsByName('_radio_font_size');
- for(var i=0;i<rd.length;i++){
- if(rd[i].value == _font_size)
- rd[i].checked="true";
- }
-
- if(blacklistLen){
- document.getElementById('blacklist').innerHTML='';
- for(var i=0;i<blacklistLen;i++){
- var t = blacklistArray[i];
- var lst=document.createElement('input');
- lst.className = 'bl_chk';
- lst.value = t;
- lst.type = 'checkbox';
- lst.checked = true;
- lst.addEventListener('click', onToggleBlackList,false);
- var dv=document.createElement('div');
- dv.appendChild(lst);
- dv.appendChild(document.createTextNode(t.substr(t.indexOf('=')+1)));
- document.getElementById('blacklist').appendChild(dv);
- }
- }else document.getElementById('blacklist').innerHTML = '您还没有屏蔽任何用户';
- }
- // 功能实现
- function mouseOverPost(event){
- this.style.background="";
- this.removeAttribute('onmouseover');
- }
- function processBlackList(){ // 屏蔽黑名单
- if( (_fid == 2)&&!_blacklist_en_hpd )return; // 当前浏览D版且未启用黑名单功能
- else if(!_blacklist_en_other)return; // 浏览其他版块
-
- if(_bVIEWTHREAD>0){ // 帖子
- var s = document.evaluate("//div[@class='postinfo']",document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = s.snapshotLength - 1; i >= 0; i--) {
- var t = s.snapshotItem(i);
- var a = t.getElementsByTagName('a')[0];
- if( a != undefined){
- var u = a.href.substring(a.href.indexOf('uid')+4);
- t.parentNode.parentNode.parentNode.parentNode.style.display=(blacklistStr.indexOf(u+'='+a.text)>=0)?'none':'';
- }
- }
- // 屏蔽 被引用 的黑名单用户发言
- s = document.evaluate("//div[@class='quote']//blockquote//font//font[@color='#999999']",document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = s.snapshotLength - 1; i >= 0; i--) {
- var t = s.snapshotItem(i);
- var n=t.innerHTML.substring(0,t.innerHTML.indexOf('发表于')-1);
- if(blacklistStr.indexOf(('='+n+','))>=0)t.parentNode.parentNode.parentNode.style.display = 'none';
- }
- }
- if(_bFORUMDISPLAY>0){ // 论坛列表
- // 屏蔽BLACK_LIST的发帖
- var s = document.evaluate("//td[@class='author']",document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = s.snapshotLength - 1; i >= 0; i--) {
- var t = s.snapshotItem(i);
- var a = t.getElementsByTagName('a')[0];
- if( a != undefined){
- var n = a.text;
- var u = a.href.substring(a.href.indexOf('uid')+4);
- if(blacklistStr.indexOf(u+'='+n)>=0)t.parentNode.parentNode.style.display='none';
- else t.parentNode.parentNode.style.display='';
- }
- }
- // 隐藏BLACK_LIST在最后回复位置的显示
- s = document.evaluate("//td[@class='lastpost']",document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = s.snapshotLength - 1; i >= 0; i--) {
- var t = s.snapshotItem(i);
- var a = t.getElementsByTagName('a')[1];
- if((a != undefined)&&(blacklistStr.indexOf(('='+a.text))>=0))a.innerHTML='anonymous';
- }
- }
- };
- function processShowHiddenText(){ // 好孩子看得见
- var s = document.evaluate("//font[\
- translate(@color,'ABCDEFGHIJKLMNOPQRSTUVWXYZ ','abcdefghijklmnopqrstuvwxyz')='white' \
- or translate(@color,'ABCDEFGHIJKLMNOPQRSTUVWXYZ ','abcdefghijklmnopqrstuvwxyz')='#ffffff'\
- or translate(@color,'ABCDEFGHIJKLMNOPQRSTUVWXYZ ','abcdefghijklmnopqrstuvwxyz')='#wheat'\
- or translate(@color,'ABCDEFGHIJKLMNOPQRSTUVWXYZ ','abcdefghijklmnopqrstuvwxyz')='#lemonchiffon']",
- document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = s.snapshotLength - 1; i >= 0; i--) {
- var t=s.snapshotItem(i).innerHTML;
- t=t.replace(/white/i,"red");
- t=t.replace(/#ffffff/i,"red");
- t=t.replace(/wheat/i,"red");
- t=t.replace(/lemonchiffon/i,"red");
- //t=s.snapshotItem(i).innerHTML='<fieldset class="goodboysglasses"><legend>好孩子看不见</legend>'+t+'</fieldset>';
- t=s.snapshotItem(i).innerHTML='<div class="goodboysglasses" title="好孩子看不见">'+t+'</div>';
- }
- };
- function processHighlightColor(){ // 对帖子进行高亮
- if( !_hightlight_en ){ // 如果不启用高亮就把这次页面打开的时刻写进去
- if( 1 == _pc )
- GM_setValue("HiPDA_Discovery_LAST_VISIT_TIME"+_fid,year + "-" + month + "-" + day + " " + hour + ":" + min)
- return;
- }
-
- if(_bFORUMDISPLAY>0){
- // 遍历页面中的帖子列表,将所有“最后回复时间”大于 _lvt 的帖子背景色换成 _hightlight_color
- // 这里没有排除置顶帖子
- var f = document.evaluate("//td[@class='lastpost']",
- document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = f.snapshotLength - 1; i >= 0; i--){
- var e = f.snapshotItem(i);
- var a = e.getElementsByTagName('a')[1];
- if( a != undefined){
- var _rt = a.text;
- if (timeDiff(_rt,_lvt)){
- e.parentNode.style.background=_hightlight_color;
- e.parentNode.addEventListener('mouseover',mouseOverPost,false);
- }
- if(timeDiff(_rt,_pxt))_pxt = _rt;
- if(timeDiff(_pxt,_lvt)) GM_setValue("HiPDA_Discovery_LAST_VISIT_TIME"+_fid,_pxt);
- }
- }
- // 将发帖日期超过30天的帖子里发帖人单元格背景换成 _old_post_bgcolor :灰色
- // 将当天发布的帖子里发帖日期颜色变成 _today_post_color :红色
- var snapResults = document.evaluate("//td [@class='author']",
- document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = snapResults.snapshotLength - 1; i >= 0; i--) {
- var e = snapResults.snapshotItem(i).getElementsByTagName('em')[0];
- if(e != undefined){
- var dd = dateDiff(e.innerHTML,_today);
- if (dd >= 30) {
- if (e.parentNode.parentNode.innerHTML.indexOf("images/default/pin")==-1 && e.parentNode.parentNode.innerHTML.indexOf('images/default/folder_lock')==-1 ){
- e.parentNode.parentNode.style.background=_old_post_bgcolor;
- e.parentNode.parentNode.removeEventListener('mouseover',mouseOverPost,false);
- }
- }
- if (dd == 0) {
- if (e.parentNode.parentNode.innerHTML.indexOf("images/default/pin")==-1 && e.parentNode.parentNode.innerHTML.indexOf('images/default/folder_lock')==-1 )
- e.style.color=_today_post_color;
- }
- }
- }
- }
- if(_bVIEWTHREAD>0){
- var pst=document.evaluate("//div[@class='postinfo']//strong//a//em",
- document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = pst.snapshotLength - 1; i >= 0; i--){
- if(pst.snapshotItem(i).innerHTML == 1){ // 1st floor
- var t1=pst.snapshotItem(i).parentNode.parentNode.parentNode.getElementsByClassName('authorinfo')[0].getElementsByTagName('em')[0];
- if(t1 != undefined){
- var postdate=t1.innerHTML;
- postdate = postdate.substr(4,postdate.indexOf(':')-7);
- if(dateDiff(postdate,_today) >=30)
- t1.parentNode.parentNode.parentNode.parentNode.getElementsByClassName('defaultpost')[0].style.background=grave_image;
- }
- }
- }
- }
- }
- function processImageZoom(){ // 调整附件图片大小
- var imglist=document.evaluate("//img[substring(@id,1,5)='aimg_']",
- document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (var i = imglist.snapshotLength - 1; i >= 0; i--)
- imglist.snapshotItem(i).addEventListener('load',onAttachImageLoaded,false);
- }
- function processConflict(){
- document.getElementById('hp_cfg_div').style.display = 'none';
- // 显示【勾选界面】,【服务器列表】,【本地列表】的差异换面和对应选项
- // 如果以服务器为准,则存储response的version和list即可
- // 如果以本地为准、或以新列表为准(先存储新列表),则请求action=update,等待返回结果【跳到 case 1:】
- newBlacklist = new Array();
- var listhtml="<table><tbody>";
- var i;
- for ( i in serverBlacklist ){
- var item = serverBlacklist[i];
- if(/\d+=.+/.test(item)){
- if(blacklistStr.indexOf(item)>=0){ // 服务、本地名单都有
- newBlacklist.push(item);
- }
- else{ // 服务器有,本地没有
- var n = item.substr(item.indexOf('=')+1);
- listhtml = listhtml +"<tr><td class='hpdtool_syn_new'><input class='hpdtool_syn_chk_new' type='checkbox' value='"+item+"'></td><td class='hpdtool_syn_srv' nowrap='nowrap'>"+n+"</td><td class='hpdtool_syn_lcl'> </td></tr>";
- }
- }
- }
- for ( i in blacklistArray ){
- var item = blacklistArray[i];
- if( /\d+=.+/.test(item) && serverListStr.indexOf( item )<0 ){ // 本地有,服务器没有
- var n = item.substr(item.indexOf('=')+1);
- listhtml = listhtml +"<tr><td class='hpdtool_syn_new'><input class='hpdtool_syn_chk_new' type='checkbox' value='"+item+"'></td><td class='hpdtool_syn_srv'> </td><td class='hpdtool_syn_lcl' nowrap='nowrap'>"+n+"</td></tr>";
- }
- }
- listhtml = listhtml + "</tbody></table>";
- document.getElementById('hpdtool_syn_list').innerHTML = listhtml;
- document.getElementById('hpdtool_syn_div').style.display="";
- }
- readConfig();
- changeStyle();
- changeURL();
- if(_bFORUMDISPLAY>0 || _bVIEWTHREAD>0){
- addConfigDiv();
- window.addEventListener('resize',onWindowResize,false);
- }
- if(_bFORUMDISPLAY>0){
- window.addEventListener('unload',onPageUnload,false);
- refreshMinTime(); // 一开始就刷新一次_pmt,否则直接就取下一页了
- if(!_first_time_use && _hightlight_en){ //第一次用就不往后续读取了
- if(timeDiff(_pmt,_lvt)){
- _pc++;
- GM_xmlhttpRequest({
- method: 'GET',
- url: 'http://'+document.domain+'/forum/forumdisplay.php?fid='+_fid+'&page='+_pc,
- onload: onLoadNewPage,
- overrideMimeType: "text/html; charset=gbk"
- });
- }
- }
- processHighlightColor();
- processBlackList();
- }
- if(_bVIEWTHREAD>0){
- appendControl();
- processBlackList();
- processHighlightColor();
- processShowHiddenText();
- _att_max_width=document.getElementsByClassName('t_msgfontfix')[0].clientWidth; // 最宽这么宽
- if(_att_max_width<10)_att_max_width=600;
- processImageZoom();
- }