您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Enhanced keywords highlight for Search Engines and All !
当前为
// ==UserScript== // @name Enhanced word highlight // @namespace http://userscripts.org/users/86496 // @description Enhanced keywords highlight for Search Engines and All ! // @include http://* // @include https://* // @exclude http://maps.google.com/* // @exclude https://maps.google.com/* // @grant GM_log // @grant GM_xmlhttpRequest // @grant GM_getValue // @grant GM_setValue // @grant GM_openInTab // @grant GM_registerMenuCommand // @version 1.6.0 // ==/UserScript== // great credit for original script wright os0x [http://userscripts.org/scripts/show/43419] // hzhbest modded | detail in http://userscripts.org/scripts/show/64877 //console.time("highlight"); //var l = function(){var len = arguments.length; var tx=''; for(i=0;i<len;i++){tx += (arguments[i] + '; ');} GM_log(tx.toString())};//+'['+len+']' function l(message) {if (typeof console == 'object') {console.log(message)} else {GM_log(message)}} (function word_hightlight(loaded){ //if (window.top != window.self) return; //don't run on frames or iframes // check browser if (!loaded && window.opera && document.readyState == 'interactive') { document.addEventListener('DOMContentLoaded', function(){ loaded = true; word_hightlight(true); }, false); window.addEventListener('load', function(){ if (!loaded) word_hightlight(true); }, false); return; } if (document.contentType && !/html/i.test(document.contentType)) return; // check api if (typeof GM_getValue == "function") { var getv = GM_getValue; var setv = GM_setValue; } else { // workaround functions, creadit to ww_start_t var setv = function(cookieName, cookieValue, lifeTime){ if (!cookieName) {return;} if (lifeTime == "delete") {lifeTime = -10;} else {lifeTime = 31536000;} document.cookie = escape(cookieName)+ "=" + escape(getRecoverableString(cookieValue))+ ";expires=" + (new Date((new Date()).getTime() + (1000 * lifeTime))).toGMTString() + ";path=/"; }; var getv = function(cookieName, oDefault){ var cookieJar = document.cookie.split("; "); for (var x = 0; x < cookieJar.length; x++ ) { var oneCookie = cookieJar[x].split("="); if (oneCookie[0] == escape(cookieName)) { try { eval('var footm = '+unescape(oneCookie[1])); } catch (e) {return oDefault;} return footm; } } return oDefault; }; } //{ values > var isOpera = !!this.opera, isFirefox = !!this.Components, isChromium = !!this.chromium, isSafari = this.getMatchedCSSRules && !isChromium; var STYLE_COLOR = ['#FFFF80','#99ccff','#ff99cc','#66cc66','#cc99ff','#ffcc66','#66aaaa','#dd9966','#aaaaaa','#dd6699']; var BORDER_COLOR = ['#aaaa20','#4477aa','#aa4477','#117711','#7744aa','#aa7711','#115555','#884411','#555555','#881144']; var STYLE_COLOR_2 = ['#FFFFa0','#bbeeff','#ffbbcc','#88ee88','#ccbbff','#ffee88','#88cccc','#ffbb88','#cccccc','#ffaabb']; var BORDER_COLOR_2 = ['#aaaa40','#6699aa','#aa6699','#339933','#9966aa','#aa9933','#337777','#aa6633','#777777','#aa3366']; var but_c = '#99cc99', but_ca = '#FFD000', but_cd = '#999999', but_cb = '#669966'; // button normal/active/disable background color/border color. // Initialize value var PRE = 'wordhighlight', ID_PRE = PRE + '_id', ST_PRE = PRE + '_store', PO_PRE = PRE + '_position', CO_PRE = PRE + '_config'; var STYLE_CLASS = '0123456789'.split('').map(function(a,i){return PRE + '_word'+i;}); var setuped = false; var highlight_off = false; var addKeyword = true; var keyword = '', words = [], word_lists = [], word_inputs_list, layers, positions = []; var words_off = []; var xp_all = new $XE('descendant::span[starts-with(@name,"' + PRE + '_word")]', document.body); var keyCodeStr = { 8: 'BAC', 9: 'TAB', 10: 'RET', 13: 'RET', 27: 'ESC', 33: 'PageUp', 34: 'PageDown', 35: 'End', 36: 'Home', 37: 'Left', 38: 'Up', 39: 'Right', 40: 'Down', 45: 'Insert', 46: 'Delete', 112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6', 118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12' }; var whichStr = { 32: 'SPC' }; var htmlDoc = isChromium ? document.implementation.createHTMLDocument('hogehoge') : document; var highlight_reset = function(){}; var canvas, cw, c2context, nav; var root = /BackCompat/i.test(document.compatMode) ? document.body : document.documentElement; var CanvasWidth = 150; var ratio = 1; var aside, section, td0, lock, edit, off, text_input, posi_tip, posi_tip_timer, inputBOX; // panel elements var sheet, main_sheet, move_sheet, inst_sheet; // style sheets //language detection if ((navigator.userAgent.toLowerCase().indexOf('zh-') == -1) || ((navigator.userAgent.toLowerCase().indexOf('firefox') != -1) && (navigator.language.indexOf('zh-') == -1))) { _L = 0; } else _L = 1; //var _L = (!!(navigator.userAgent.toLowerCase().indexOf('zh-') == -1))? 0:1; //if(navigator.userAgent.toLowerCase().indexOf('firefox') != -1) //{_L = (!!(navigator.language.indexOf('zh-') == -1))? 0:1;} // Thanks to SoIN(http://userscripts.org/users/302257) var _ti = { // en/zh locale string for tooltip. edit: ['Edit current keywords','编辑现有关键词'], edit_a: ['Confirm editing keywords','确认编辑关键词'], off: ['Toggle all keywords\' highlight','切换全部关键词的高亮'], td0: ['Double-click to minimize the panel','双击最小化面板'], td0_a: ['Double-click to restore EWH panel','双击恢复 EWH 面板'], lock: ['Lock current set of keywords','锁定当前的关键词组'], lock_a: ['Current locked keyword(s):','当前锁定的关键词组:'], lock_u: ['Function not supported by this browser','此浏览器不支持该功能'], close: ['Close Enhanced word highlight','关闭关键词高亮'], kwL: ['Left click to the next; Right click to the previous','左击跳到下一个;右击跳到上一个'], check: [['Toggle highlight of "','"'],['切换“','”的高亮']], mapl:['Toggle highlight map locking status','切换高亮分布图的锁定状态'], ad_nw: ['Toggle add/new keywords for highlight','切换添加/取代关键词的高亮'], subm: ['Submit keywords','提交关键词'], clos: ['Close input box','关闭输入框'] }; var _di = { // en/zh locale string for dialog. update: [['There is an update available for the Greasemonkey script "','."\nWould you like to go to the install page now?','No update is available for "','."','An error occurred while checking for updates:\n',' - Manual Update Check'], ['发现 GM 脚本“','”有更新,\n是否现在打开脚本发布页?','没找到“','”脚本的更新。','检查更新时出现了一个错误:\n',' - 手动检查更新']], confT: ['Enhanced word highlight Advanced Config','Enhanced word highlight 高级设置'], conf: [['What auto-pager tool do you mostly use?', 'Turn off highlight of short keywords by default?', 'Disable auto-highlight (auto-capture keywords for highlight) ?', 'Sort keyword for more accurate highlight (Recommended, except for regular expression users)', 'Save panel position', 'Show indicator bar when navigating'], ['你主要用那种自动翻页工具?', '是否默认停用短关键词的高亮?', '是否禁用自动高亮(自动抓取关键词来高亮)?', '排列关键词以更准确高亮(推荐;需要高亮正则表达式的用户除外)', '保存面板位置', '查找关键词时显示指示条']], confR: [[['Autopagerize GM script','Autopager extension','Other (can handle all auto-pager tools but works slow)'], ['Don\'t turn off','One-letter/digit word','One- and two-letter/digit word'], ['Enable','Completely disable','Disable on pages opened from supported search results','Disable on supported search result pages']], [['Autopagerize GM 脚本','Autopager 扩展','其他(能应付任何自动翻页工具但运作较慢)'], ['否','是;针对单个字母/数字','是,针对单/两个字母/数字'], ['不禁用','完全禁用','仅在从支持的搜索结果中打开的页面上禁用','仅在支持的搜索结果页面上禁用']]] }; //} var urlArr = [], queryArr = []; //{ Config I > // #### Config I #### --------------------------{{ // List of url patterns; Array('NAME', 'KEYWORD_PREFIX', 'URL_PATTERN') urlArr[0] = ['Google', 'q=', 'www.google.']; urlArr[1] = ['Yahoo', 'p=', 'search.yahoo.c']; urlArr[2] = ['Baidu', 'wd=', 'www.baidu.com']; urlArr[3] = ['Baidu', 'word=', '.baidu.com']; urlArr[4] = ['Ask', 'q=', 'www.ask.com']; urlArr[5] = ['Bing', 'q=', '.bing.com']; urlArr[6] = ['Youdao', 'q=', 'www.youdao.com']; // List of IDs of query input boxes; Array('#SEARCHBOX_ID#', 'SEARCHPAGE SPEC_URL') queryArr[0] = ['query', '/search']; // most common queryArr[1] = ['search', '']; // most common queryArr[2] = ['script_q', 'userscripts.org/scripts/search']; // userscripts.org queryArr[3] = ['top-search-input', 'www.verycd.com/search/folders']; // verycd.com queryArr[4] = ['search-q', '/search']; // addons.mozilla.org // keybinds var KEY_NEXT = 'n'; // "n" Next occurrence var KEY_PREV = 'N'; // "Shift-n" Previous occurrence var KEY_SEARCH = 'M-/'; // "Alt-/" Add keywords var KEY_OFF = 'M-,'; // "Alt-," Suspend highlight var KEY_CLOSE = 'C-M-/'; // "Ctrl-Alt-/" Disable highlight var KEY_EDIT = 'M-.'; // "Alt-." Edit highlight var KEY_REFRESH = 'r'; // "r" Refresh highlight // delay of highlighting (ms) var delay = 500; // instant highlight selected keywords var instant = true; // restore focus and scroll position after closing keyword input box with shortcut key? // mainly useful for keyboard navigation, not recommend for mouse navigation. var refocus = false; // minimize the panel initially? var panel_hide = false; // #### Config I #### --------------------------}} //} if (window.top != window.self) panel_hide = true; //hide panel in iframes //{ Config II > // #### Config II #### --------------------------{{ // What's your main auto-pager tool? // 0 - Autopagerize (GM script) // 1 - AuroPager (Firefox Extension) // 2 - Other (Other auto-pager scripts, site-specific scripts, bookmarklets, etc.) //<!> From top option to botom one, the compatibility of the script // will be strengthened while the performance of highlight will be lower. var ap_option = 0; // turn off short keywords (one or two letters or number) by default? // 0-no, 1-one letter, 2-one or two letters var off_short_words = 1; // Stop auto-highlight on supported pages? // 0-no, 1-yes, 2-only those from search results, 3-only search results var no_auto_hili = 0; // sort keywords? 0-no, 1-yes //<!> Setting this to "yes" will produce better highlight result, // while "no" will perform faster and support ReExp input better. var sort_keywords = 1; // save panel position? var save_panel_pos = false; // show indicator bar when navigating? var show_indc_bar = false; // #### Config II #### --------------------------}} //} // var config = { // key: {next:'n', prev:'N', srch:'C-/', off:'M-.', clos:'C-M-/', edit:'M-/', rfsh:'r'}, // delay:500, // instant:true, // refocus:false, // ap_comp: { // name: '', // val: getv('ap_comp', 0), // dom: {label:'LABLE', type:'radio', set:['set1','set2','set3']} // }, // short_w: { // name: '', // val: getv('short_w', 1), // dom: {label:'LABLE', type:'radio', set:['set1','set2','set3']} // }, // sort_kw: { // name: '', // val: getv('sort_kw', true), // dom: {label:'LABLE', type:'checkbox', set:['set1']} // } // } // GM APIs available? if (typeof GM_getValue == "function") var gm_ok = true; // Configs if (!gm_ok) { // var Ewh_configs = [ap_option, off_short_words, no_auto_hili, sort_keywords, save_panel_pos, show_indc_bar]; } else { var Ewh_configs = GM_getValue(CO_PRE, '0|1|0|1|0|0').split('|'); } for (i in Ewh_configs) {Ewh_configs[i] = Number(Ewh_configs[i]);} // Locked keywords if (gm_ok) var keyword_store = GM_getValue(ST_PRE); // Saved position var panel_pos_arr = ['right:-1px;','bottom:-1px;']; if (Ewh_configs[4] && gm_ok) panel_pos_arr = GM_getValue(PO_PRE, panel_pos_arr.join('|')).split('|'); // Configs menu if (gm_ok) window.addEventListener('load', function(){GM_registerMenuCommand(_di.confT[_L], config_box);}, false); if (gm_ok) { unsafeWindow.EWH_iSearch = function() {instant_search(false, null);}; unsafeWindow.EWH_cClose = function() {command_close();}; } // main process init_keyboard(); if (load_keyword() !== false || init_keyword() !== false) { //window.addEventListener('load', go, false); setTimeout(go, delay); } // var oldurl = window.location.href; // window.addEventListener('DOMNodeInserted', function(e){ l(window.location.href); // if (window.location.href !== oldurl) { // if (load_keyword() !== false || init_keyword() !== false) { // setTimeout(go, delay*2); // } // } // }, false); function go(){ setup(); /* // CHECK FOR UPDATE // if (gm_ok) {var SUC_script_num = 64877; try{function updateCheck(forced){if ((forced) || (parseInt(GM_getValue('SUC_last_update', '0')) + 86400000 <= (new Date().getTime()))){try{GM_xmlhttpRequest({method: 'GET',url: 'http://userscripts.org/scripts/source/'+SUC_script_num+'.meta.js?'+new Date().getTime(),headers: {'Cache-Control': 'no-cache'},onload: function(resp){var local_version, remote_version, rt, script_name;rt=resp.responseText;GM_setValue('SUC_last_update', new Date().getTime()+'');remote_version=parseInt(/@uso:version\s*(.*?)\s*$/m.exec(rt)[1]);local_version=parseInt(GM_getValue('SUC_current_version', '-1'));if(local_version!=-1){script_name = (/@name\s*(.*?)\s*$/m.exec(rt))[1];GM_setValue('SUC_target_script_name', script_name);if (remote_version > local_version){if(confirm(_di.update[_L][0]+script_name+_di.update[_L][1])){GM_openInTab('http://userscripts.org/scripts/show/'+SUC_script_num);GM_setValue('SUC_current_version', remote_version);}}else if (forced)alert(_di.update[_L][2]+script_name+_di.update[_L][3]);}else GM_setValue('SUC_current_version', remote_version+'');}});}catch (err){if (forced)alert(_di.update[_L][4]+err);}}}GM_registerMenuCommand(GM_getValue('SUC_target_script_name', 'BPT') + _di.update[_L][5], function(){updateCheck(true);});updateCheck(false);}catch(err){} }*/ } // Functions function highlight(doc, ext_word) { var _words = words.filter(function(w,i){return !words_off[i];}); if (_words.length <= 0) return; var _index; if (ext_word && ext_word.words) { _words = ext_word.words; _index = ext_word.index; } var exd_words, xw; if (_words.length === 1 && _words[0].exp) { exd_words = _words.map(function(e){return e.exp;}); xw = ''; } else { exd_words = _words.map(function(w){return w.test ? w : new RegExp('(' + w.replace(/\W/g,'\\$&') + ')(?!##)', 'ig');}); xw = ' and (' + _words.map(function(w){return ' contains(translate(self::text(),"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ"),'+escapeXPathExpr(w.toUpperCase())+') ';}).join(' or ') + ') '; } $X('descendant::text()[string-length(normalize-space(self::text())) > 0 ' + xw +' and not(ancestor::textarea or ancestor::script or ancestor::style or ancestor::aside)]', doc).forEach(function(text_node) { var df, text = text_node.nodeValue, id_index = 0, parent = text_node.parentNode, range = document.createRange(), replace_strings = [], new_text = reduce(exd_words, function(text,ew,i) { var _i = _index || i; return text.replace(ew,function($0,$1) { replace_strings[id_index] = '<span id="' + ID_PRE + id_index + '" class="' + STYLE_CLASS[_i%10] + '" name="'+PRE+'_word'+_i+'">' + $1 + '</span>'; return '##'+(id_index++)+'##'; }); }, text). replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'). replace(/##(\d+)##/g, function($0,$1) { return replace_strings[$1] || ''; }); if (replace_strings.length) { try { if (isChromium) { range.selectNodeContents(htmlDoc.documentElement); } else { range.selectNode(text_node); } df = range.createContextualFragment(new_text); if (df.firstChild) parent.replaceChild(df, text_node); range.detach(); } catch (e) { error(e); } } }); } function addsheet() { if (!main_sheet) { var hilistyles = STYLE_COLOR.map(function(rgb,i){ return 'span.' + PRE + '_word'+i+',.' + PRE + '_item'+i+'{background:'+rgb+'!important;}'; }); var borderstyles = BORDER_COLOR.map(function(rgb,i){ return 'li.' + PRE + '_item'+i+'{outline:1px solid '+rgb+'!important;}'; }); sheet = addCSS([ //Additional Style 'span[class^="' + PRE + '_word"]{color:black!important;font:inherit!important;display:inline!important;margin:0!important;padding:0!important;text-align:inherit!important;float:none!important;position:static!important;}', //vertical-align:inherit !important; '#' + PRE + '_words, #' + PRE + '_words *{font-family: Arial ;}', '#' + PRE + '_words{line-height:1;position:fixed;z-index:60000;opacity:0.8;list-style-type:none;margin:0;padding:0;width:auto;max-width:100%;' + panel_pos_arr[0] + panel_pos_arr[1] +'}', '#' + PRE + '_words > section{clear:right;line-height:1;border:1px solid #666;/*border-left-width:10px;*/background:#fff;display:block;position:relative;}', '#' + PRE + '_words * {margin:0;padding:0;width:auto;height:auto;}', '#' + PRE + '_words:hover{opacity:1;}', '#' + PRE + '_words:hover > section{opacity:1;border-color:#333;}', '#' + PRE + '_words #_ewh_handle{background:#666;width:10px;cursor:move;}', '#' + PRE + '_words:hover #_ewh_handle{background:#333;}', '#' + PRE + '_words.ewh_hide #_ewh_handle{cursor:pointer;}', // '#' + PRE + '_words.ewh_hide:hover #_ewh_handle{width:10px;}', // '#' + PRE + '_words.ewh_hide > section form.' + PRE + '_ctrl > input.c_b{display:none;}', '#' + PRE + '_words > nav{display:none;width:100%;padding:3px;position:relative;}', '#' + PRE + '_words > nav > canvas.backport{background:rgba(0,0,0,0.5);cursor:pointer;position:absolute;right:6px;z-index:3;}', '#' + PRE + '_words > nav > canvas.viewport{background:rgba(79,168,255,0.7);cursor:default;position:absolute;bottom:0px;right:6px;}',//outline:6px solid rgba(79,168,255,0.7); // '#' + PRE + '_words > nav:hover > canvas.backport{background:rgba(0,0,0,0.5);}', '#' + PRE + '_words:hover > nav{display:block;}', '#' + PRE + '_words > nav._locked{display:block;}', '#' + PRE + '_words:hover > nav > canvas.backport{bottom:0px;}', '#' + PRE + '_words > nav._locked > canvas.backport{bottom:0px;}', '#' + PRE + '_words.ewh_edit{opacity:1;}', '#' + PRE + '_words.ewh_edit #' + PRE + '_word_inputs_list{display:none;}', '#' + PRE + '_words form.' + PRE + '_editor{display:none;}', '#' + PRE + '_words.ewh_edit form.' + PRE + '_editor{display:inline-block;}', '#' + PRE + '_words.ewh_edit form.' + PRE + '_editor input{min-width:80px;}', '#' + PRE + '_words li{display:inline-block;margin:0.1em 0.2em;line-height:1.3em;font-size:medium;}', '#' + PRE + '_words > section > * {vertical-align:middle;}', '#' + PRE + '_words > section td {border:none;}', '#' + PRE + '_words > section > h3.' + PRE + '_title{display:inline-block;background:#333;color:#fff;padding:0.1em 0.3em;border:none;margin:0 0.2em;}', '#' + PRE + '_words > section form.' + PRE + '_ctrl{display:inline-block;}', '#' + PRE + '_words > section form.' + PRE + '_ctrl > input{display:inline;width:1.3em;margin:0.1em 0.1em;background:'+ but_c +';border:1px solid '+ but_cb +';cursor:pointer;font-size:10pt;color:black;}', '#' + PRE + '_words > section form.' + PRE + '_ctrl > input._active{background:'+ but_ca +';}', '#' + PRE + '_words > section form.' + PRE + '_ctrl > input._disable{background:'+ but_cd +' !important;cursor:default;}', '#' + PRE + '_words > section form.' + PRE + '_ctrl > input:hover{outline:1px solid '+ but_cb +'!important;}', '#' + PRE + '_word_inputs_list {padding:0!important;margin:0.2em!important;display:inline-block;border:none!important;}', '#' + PRE + '_word_inputs_list > li{position:relative;padding:0 4px;}', '#' + PRE + '_word_inputs_list > li.ewh_disable{background:white!important;outline:1px solid #999!important;}', '#' + PRE + '_word_inputs_list > li > label{cursor:pointer;color:black!important;}', '#' + PRE + '_word_inputs_list > li > input{cursor:pointer;}', // '#' + PRE + '_word_inputs_list > li > label > input[type=image]{vertical-align:top;padding:0;height:12px;}', '#' + PRE + '_word_inputs_list > li > input[type=checkbox]{display:none;position:absolute;right:0px;top:0px;opacity:0.7;}', '#' + PRE + '_word_inputs_list > li:hover{outline-width:2px!important;}', '#' + PRE + '_word_inputs_list > li:hover > input[type=checkbox]{display:block;}', '#' + PRE + '_word_inputs_list > li > input[type=checkbox]:hover{opacity:1;}', '#' + PRE + '_words > section td+td+td > input {display:inline;width:1.3em;margin:0.1em 0.1em;background:#FAFAFA;border:1px solid #aaaaaa;cursor:pointer;font-size:10pt;color:black;}', ].concat(hilistyles, borderstyles).join('\n')); main_sheet = true; } if (!move_sheet) addmovesheet() } function addmovesheet() { addCSS('.wordhighlight_em{outline:4px solid #FF7B00;-webkit-outline:4px solid #FF7B00;text-decoration:blink;}'); move_sheet = true; } function setup(init) { setuped = true; addsheet(); // build ui aside = creaElemIn('aside', document.body); aside.id = PRE + '_words'; section = creaElemIn('section', aside); var table_COL = creaElemIn('table', section); table_COL.setAttribute('style', 'border:0;margin:0;padding:0;border-spacing:2px;border-collapse:separate!important;'); table_COL.setAttribute('cellspacing', '0'); table_COL.setAttribute('cellpadding', '0'); var tbdy_COL = creaElemIn('tbody', table_COL); var tr_COL = creaElemIn('tr', tbdy_COL); td0 = creaElemIn('td', tr_COL); td0.id = '_ewh_handle'; td0.title = _ti.td0[_L]; var td1 = creaElemIn('td', tr_COL); td1.setAttribute('style', 'border-right: 1px solid black; padding:0.2em 0.3em 0 0;vertical-align:top;');//width:7.2em; var td2 = creaElemIn('td', tr_COL); var td3 = creaElemIn('td', tr_COL); var editor = creaElemIn('form', td2); editor.className = PRE + '_editor'; text_input = creaElemIn('input', editor); text_input.type = 'text'; var ctrl = creaElemIn('form', td1); ctrl.className = PRE + '_ctrl'; var close_button = creaElemIn('input', ctrl); close_button.type = 'button'; close_button.className = 'c_b'; close_button.value = 'X'; close_button.title = _ti.close[_L]; off = creaElemIn('input', ctrl); off.type = 'button'; off.value = 'O'; off.title = _ti.off[_L]; lock = creaElemIn('input', ctrl); lock.type = 'button'; lock.value = 'L'; edit = creaElemIn('input', ctrl); edit.type = 'button'; edit.value = 'E'; edit.title = _ti.edit[_L]; word_inputs_list = creaElemIn('ul', td2); word_inputs_list.id = PRE + '_word_inputs_list'; word_inputs_list.className = PRE + '_inputs'; var maplock = creaElemIn('input', td3); maplock.type = 'button'; maplock.value = '<'; maplock.title = _ti.mapl[_L]; // add interactivity edit.addEventListener('click',command_edit,false); off.addEventListener('click',command_off,false); close_button.addEventListener('click',command_close,false); editor.addEventListener('submit',function(e){ command_edit(); e.preventDefault(); },false); if (gm_ok) { lock.title = _ti.lock[_L]; lock.className = (keyword_store)? '_active' : ''; lock.addEventListener('click',function(){ if (aside.className == 'ewh_edit') return; if (keyword_store) { lock.className = ''; lock.title = _ti.lock[_L]; GM_setValue(ST_PRE, ''); keyword_store = ''; // lock.value = 'Lock: Off'; } else { lock.className = '_active'; lock.title = _ti.lock_a[_L] + ' ' + keyword; GM_setValue(ST_PRE, keyword); keyword_store = keyword; // lock.value = 'Lock: On'; } },false); } else { lock.title = _ti.lock_u[_L]; lock.className = '_disable'; } td0.addEventListener('dblclick',function(evt){//l(panel_hide,window.innerWidth - aside.offsetLeft,1); if (panel_hide) {//l('O'); aside.style.right = '0px'; aside.className = ''; panel_hide = false; this.title = _ti.td0[_L]; }else{//l(panel_hide); aside.style.right = (14 - aside.offsetWidth) +'px'; aside.className = 'ewh_hide'; panel_hide = true;//l(panel_hide,3); this.title = _ti.td0_a[_L]; } }, false); maplock.addEventListener('click',function(){ if(!nav.className) {nav.className = '_locked'; this.value = '>';} else {nav.className = ''; this.value = '<';} },false); // enable drag var drag = endrag(aside,{x:'right',y:'bottom'}); drag.hook('__drag_begin', function(e){ if (this.element && ((this.element.className === 'ewh_edit') || (this.element.className === 'ewh_hide'))) // || /^canvas$/i.test(e.target.localName) || /^lable$/i.test(e.target.localName)) return false; }); // build map nav = document.createElement('nav'); aside.insertBefore(nav,aside.firstChild); canvas = creaElemIn('canvas', nav); canvas.className='backport'; cw = creaElemIn('canvas', nav); cw.className='viewport'; var c2 = c2context = canvas.getContext('2d'); // /+drag codes by grea // scrolling per events this.perf = 2, this.perfic = 0; this.moveTo = function(evt){ if (perfic++ % perf || !window.drgg) return; var x = (evt.offsetX || evt.layerX)/ratio - root.clientWidth/2; var y = (evt.offsetY || evt.layerY)/ratio - root.clientHeight/2; window.scrollTo(x, y); } with(canvas){ addEventListener('mousedown', function(e){ window.drgg = true; moveTo(e); },false); addEventListener('mousemove', function(e){ moveTo(e); },false); addEventListener('mouseup', function(e){ window.drgg = false; moveTo(e); },false); addEventListener('mouseout', function(e){ window.drgg = false; moveTo(e); },false); } // +/codes end // add AutoPager page change detector if (Ewh_configs[0]) { this.pagef = 5, this.pagefic = 0; var docHeight = document.body.scrollHeight, pageChanged; this.checkpage = function(){ if ((pagefic++ % pagef == 0) && (document.body.scrollHeight > docHeight)) { switch (Ewh_configs[0]) { case 1: after_load(); break; case 2: resetup(); break; } docHeight = document.body.scrollHeight; } } } // sync with map & check page window.addEventListener('scroll',function(){ var x = window.pageXOffset * ratio; var y = window.pageYOffset * ratio; cw.style.bottom = (canvas.height - cw.height - y) + 'px'; cw.style.right = (-x + 6) + 'px'; if (Ewh_configs[0]) checkpage(); },false); // go to highlight highlight(document.body); word_lists = create_inputlist(words); layers = xp_all.get(); draw_wordmap(); if (!Ewh_configs[0]) init_autopager(); if (panel_hide && !init){ aside.style.right = (14 - aside.offsetWidth) +'px'; aside.className = 'ewh_hide'; td0.title = _ti.td0_a[_L]; } } function restore_words(words) { (words||xp_all.get()).forEach(function(layer,i){ var parent = layer.parentNode; while (layer.firstChild){ parent.insertBefore(layer.firstChild, layer); } parent.removeChild(layer); }); } function draw_wordmap() { var c2 = c2context;