-
-
Save shishi/526511 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Fast look up JP and EN | |
// @namespace http://d.hatena.ne.jp/jimo1001/ | |
// @description Fast look up Japanese and English character strings. | |
// @include * | |
// ==/UserScript== | |
var VERSION = "2009.03.16"; | |
var SITEINFO_IMPORT_URLS = | |
[ | |
'http://wedata.net/databases/FluJE/items.json', | |
]; | |
//----------------------------------------------------------------------------- | |
// SPACE ALC(英辞郎 on the WEB)はコメントを外せば利用できますが、『英辞郎 on the Web』の利用規約に違反しますので自己責任で行ってください. | |
//----------------------------------------------------------------------------- | |
var LOCAL_SITEINFO = | |
[ | |
// { | |
// name: 'SPACE ALC(英辞郎)', | |
// url: 'http://eow.alc.co.jp/[context]/', | |
// icon: 'data:image/gif;base64,R0lGODlhEAAQALMAABQSFI+Qj8/Pz1FRUbGxsefp53Nzc6KjouDf4GNkY769vvz+/ICCgCQmJJmYmVxaXCH5BAAAAAAALAAAAAAQABAAAwRocElZThqGzC1Pe4cgOE/ALUx2IJtjbASzEIPCObL0SuyZSAHBiUM4oIYcRFCzKfQmhQDhYTAkEg+AI7l9ChJCjsI2YTAKw62EAEYW1IgBEhheOBLoJOMpUTwYBCIHDGpDAgcBDgp5ExEAOw==', | |
// xpath: '(id("searchWord")/strong | id("itemsNumber") | id("resultList")//ul//li[position()<4])', | |
// NGxpath: 'id("resultArea")//ul/div/ul', | |
// lang: 'both', | |
// type: 'dictionary', | |
// enc: 'UTF-8' | |
// }, | |
] | |
var SITEINFO = []; | |
//=== Default settings === | |
var DefaultSettings = function() { | |
var s = { | |
ver: VERSION, | |
shortcutkey: { | |
navi_toggle: 'A-y', // show toggle(open/close) navi | |
close_all: 'ESC', // close all element | |
QL_run: 'y', // Run quick Look up | |
site: [], | |
}, | |
remove_result_all: true, | |
enable_wheel_button: true, | |
enable_modifier_key: true, // push modifier key when select character strings. | |
modifier_key: 'altKey', // modifier key for selection. | |
effect : true, | |
lookup: { // word, search | |
ja: [], // default site of input japanese strings | |
en: [], // default site of input english strings | |
ja_type: 'dictionary', | |
en_type: 'dictionary', | |
}, | |
translation: { // for select text | |
JtoE: true, // translate Japanese to English | |
ja_chars: '10', // translate Japanese more than this number of characters | |
EtoJ: true, // translate English to Japanese | |
en_words: '3', // translate Enlish more than this number of words | |
ja: [], | |
en: [], | |
} | |
} | |
return s; | |
} | |
//=== images === | |
var IMAGES = { | |
close: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEPCSG3H1gAAAEXSURBVEjH7ZQxioQwFIb/jELA3trWI2yTC2gnpJrFwwlTCyk8g0fwEBZWivBithCDo7O7MpBU80PQPPPzveQ9w9I0NXCsrusghEC4LAsAwJiVyRh7adh/N8ac1r2KHRUSEXwp1Fr7hx2PaX+kWZYBAJqmsWvzPD/Fjv5jWW5EBCKC1hpa69M7EUEpZaFEZEFKKfzl3+YWHMex2Rd4n9U+O2MMiqKwsbquf22Uo6/v+7Ub322Qd3y3aZpwZUgpAQBVVQEApJS46rWwKxmVZfkE2p5b/KpYFEXOb5BxHNeaBUHg7z/zAeOcr7BhGMA5xzzPzkBJkgBAGwohWgBfjjfXAvhmDw+1um+tf4c/Pd01D4e7+uijf/UDzMDkaVlBIbwAAAAASUVORK5CYII=', | |
close_focused: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEOJH1zcmwAAAI6SURBVEjH7ZWxbhQxEIa/sb23iU4Q5Q3Scd21vAASSJSIJjxDxCvwCikp0l1HQZECiRrpKqR0ES8REuWS3K09ptjZxdnkolyRCkayfPbO/L/n94xPfk6nmSe2TycnTCcTwmqx2CjQAVrMm1i4urx80EFCeDRYjvFhsuXV1dqP3jlwriV1Duf9HR9NiawK2uaZdH2+4eb6uj2VOYmBh6oiOYcT4c3FBQDfd3d7wNfn5wB829np9zqM2DR38FoZm+b2naSEADElvAjiHMfjMW8XC16dnfW/AY7H4/agKZFUiSn9Je7u1PbazMr7sXkERFWCOceU+OI971Lqib6ORj04gOZMzpkIZKCx+ZaMF4NK2zInKS9e9dYaYBUjObdwyWJKkgjcDCo2/CqyGgGVzcFGbXsfDfhQhIOcea/KoUgPtjSiaGNl6+UgmZYV8LbREVUDos8ibANH0uZ5kHMPUBc4JXCpSKgL562CpC5kPRJBgHEROBMhA88K2ZzNZQJVud4pPtQD0k5aAYIITqSv0KxKyplKlVjIHS1WbV3WehibfKEgGdkpvTV28J5QVXjvERG8cyTVvrea5ZKUM16VBGzbnXVF0kv8wxbLdW3fvQ6Dfnys1cDzvT2AeZhOJnPg5RM//PMXp6cfZNZKu1WM2pTsOqErzk5ZKfpVrc2SqdaYgisTawXc7MNvgLAPzawN0nuCqqIr/KCiuz7uYpLFNUMy7mkDZuuz6jJzRUz3/A2zW5Vjf/O/vf/2r9of0FcAZ6gVKMEAAAAASUVORK5CYII=', | |
maximize: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEUA2hUPdwAAAECSURBVEjH7ZU9boQwEIU/ByRL29ClS2txhDRcALmhSscRqSwuQJErcIFcARrMbBEiWbBIoKyp9klT2J4fv3n+UYDkeU5s9H1PCjDPMwAiAoBS6mFAuC4iG79HcyFSgGmauAIpgPf++mLrNoUtLctyN0nbtrvxYY6ntPFo/IbZelchmqbZHJCqqjYyrFn9jU8x29P2FLNxHA857/kdjU/PaFPX9b+0VYDcbrfox34Yhl9mSZJcc8+01pcU01qDMUYA0VoLEMW01mKMEQVQFMU38BmTWdd1KgXIsuwL8M65n+hv40J3tta+Ax6YFvPA5Jx7yrfwZq39WJLOKwv7/sIL8XEHfSOYLUXK0YIAAAAASUVORK5CYII=', | |
maximize_focused: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEQMcTvqVgAAAFCSURBVEjH7ZRLjoJAEIa/mhTplWsS9nIDk7kBh/AcXsJ7eAhOMIln8AAaF2KQV1y0C+WhwODMyKz8EwKprqqPeqQFsMvlks1mw1iaTqcsFgsUoCgKiqLAWguAiHQGNc+ttS2/LhtAnucAV1iWZWRZNlplZW4FSNO0oo+hJElqWJIk5HnealOzpWEY9iYLgqCzzZ2wOI7/1Mah2NPpVMOiKKoqe/yrpmazWWtB1ut1awTNeBHhcDjcw56prG+uQ7HH47GG7XY74jgehG232x/ZS00mkxp2Pp+fms1+v//VTMv8CqCqOI7zbYDneb1nQ7GqWsMcx+m9NV6hCmaMQVVRVQSo9qhktxZTHozS4dS0Xb+NMeD7vgWsMcbePF7+GGOs7/tWXdcV13W/gE/GlciK8TW/vT/m/J/uVnA1YlVvvTWoCzHOs7tnGF6IAAAAAElFTkSuQmCC', | |
minimize: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEXFi6kivQAAAC5SURBVEjH7ZK9DYMwEIU/m0g3BkUaj0DjVRgOsQkNM6DsgZCAS0Vk8eOkwSgSr7J97/R+ZOO916ZpcM5xNh7LYZ5nAFQVAGPM7kI4V9UNb+9tIzaOY7pk0zSlF1vXtK40rOmoxvX+cr+2xsVt6Cp0t/dBYglD7jXJ+r6PEsuyjM6rqvoqZkmITzJr47p1XcddW/u7WJZlaZKJSDKxNs/zous6RIRhGE4REhGM9/4JvIAWKLhx48Zf4w2OIF4eoa/2XgAAAABJRU5ErkJggg==', | |
minimize_focused: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAXCAYAAAD6FjQuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAAd0SU1FB9gBFxEWDMrdQs8AAAFGSURBVEjH7ZQ9bsJAEIW/RYu2oqRxQxFxBxrfwBdAuZHvEeUCvgENN6DxBRAFINvsrlxsCrTYsbHJ30aKlFd5Zt/MmzcaWcRx7DabDWmakuc5obBcLpE+sNZircU5B4AQ4m5R+9051+PdywEYYxoxrTVa62DOtNaN2OVywRgTTKyqqkasqiqMMb01dVfaXtPQGrv1PbGiKIKusSzLRux0Ot2cdafy6Lptc4cceu7xeHwvFtLZ+XxuxPb7PUVRDJIPh8Nos/l8Pvo+m82Y+KCua0KiruvGmZSS6XQ6SI6iaLTZWK3vL9vkob/GT+AmppS6BlIigNsdee3eYYpOUtwhtXPXbwlsF4vFarfboZTCWhvEmVIKEcfxE5ADW2AV8kjEC/CaJACss2yU7HlfQZZlyGcgedDs0RAfxST5xrSfwW/p/OMP4w3tcqDExRHCHwAAAABJRU5ErkJggg==', | |
openSwitch: 'data:image/gif;base64,R0lGODlhEAAQAJECAP///6uopv///wAAACH5BAEAAAIALAAAAAAQABAAAAIbVI6Zpu0PIwRAImoPjrT353nSZpFjlaWqxbAFADs=', | |
closeSwitch: 'data:image/gif;base64,R0lGODlhEAAQAJECAP///6uopv///wAAACH5BAEAAAIALAAAAAAQABAAAAIWVI6Zpu0Po5y0JoAzflrbD4aixUxCAQA7', | |
o: 'data:image/gif;base64,R0lGODlhEAAQAIABANLS0////yH5BAEAAAEALAAAAAAQABAAAAIcjI+py+2PgARvznZDVjLS1R0hF26kVZnQyrZQAQA7', | |
x: 'data:image/gif;base64,R0lGODlhEAAQAIABAJ+foP///yH5BAEAAAEALAAAAAAQABAAAAIdjI+py+1vAECSyRluu9px+HkctnSdUh0pxLYuVAAAOw==', | |
indicator: 'data:image/gif;base64,R0lGODlhEAAQAPYAAAAAAAEBAQICAgMDAwQEBAgICA0NDRMTEx4eHiAgICIiIiQkJCgoKCkpKSoqKisrKzAwMDExMTU1NTs7Oz4+Pl1dXWpqamtra3FxcZSUlJiYmJmZmZubm5ycnJ2dnaKioqOjo6ioqKmpqaurq66urrCwsLGxsbKysry8vMXFxcrKyuXl5ejo6Orq6v///wYGBgsLCwwMDA4ODhAQEBQUFBUVFRgYGBoaGh0dHSwsLC4uLjIyMjMzM1BQUFZWVlxcXF9fX2BgYGFhYWRkZGZmZmdnZ3Nzc3h4eHp6ent7e4SEhI+Pj8bGxsnJydXV1djY2Nra2t3d3d7e3uLi4ufn5+vr6wkJCScnJzo6Ol5eXmhoaJqamqqqqq2tre3t7QUFBQ8PDxcXF9TU1N/f3+np6XJycgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/i1NYWRlIGJ5IEtyYXNpbWlyYSBOZWpjaGV2YSAod3d3LmxvYWRpbmZvLm5ldCkAIfkEAQoAAAAsAAAAABAAEAAABl9AgHA4IZEmw6RwIDikXK7UQSlkZDQVFrTloAoyq5UJBT0ZqINNWMTAYBBUYQQ0osSHgYlFUrgPFSUqHWd+AIAqHoR+eRddhXgNEASPAAsfIRCUCRwfD5QACQsCn6SlQQAh+QQBCgAAACwAAAAAEAAQAAAHaYAAgoMzPz8zg4mKSVNTSAQ4NwGJMD0+NiMrKyVJUlBDiT1MKkFDT05LKy4uTzeDPk0qRAQ7Ojssq1E4gzJARTWDBEpVVEaTADQ7MYoALzkNA4IvRydCzMzT1dfMNDwG2+Dh4uPk5ebngQAh+QQBCgAAACwAAAAAEAAQAAAHaIAAgoMCCgoCg4mKEyYmEwAEA4oACQsAFioqWhBbGQyJCRwfDA0eHhIfKysZiIILHyEQAAYGVlyqGpKCAg8QBIkUXCdZB5OTVyhVKVjGiRgu0F3Ng8/R04IIJ17L14IyDzTd4uPk5eaBACH5BAEKAAAALAAAAAAQABAAAAdqgACCgwAvL4SIhDRHRzSJiTtdXTsxPj0wjwAGQkIwQCpMPZmERCpNPqODNURBYamDX0MkSWCvO04rYz+vEGK5u6NfEUsnSLWZBEotVEgEqTlkLi5ROKkMK9JPN6kCRmNQQ68AAjg3AeKJgQAh+QQBCgAAACwAAAAAEAAQAAAHZoAAgoOEhYaHiIYCCwmJhA8fHI2OABAhHwuUAAQQDQGagg4XE5+OBh4qJQqUBh2pq44FEhakjhQjIBGICGUYDCIrKxsDhgYnLi4oJsEZAoYOLcgsFRoZDIcHKcgpBwLEiBMkJBOGgQAh+QQBCgAAACwAAAAAEAAQAAAHaIAAgoOEhYaHiImKi4yNjoMGPDSNQidHL4yVl4IDDDmYhTE7kwABRlRVSgSDNUVAMoM4US4uLDs6OwREKk0+gzdPtCtLTk9DQSpMPYRDUFJJJSsrIzY+PTCEATc4BEhTU0mMMz8/M4aBACH5BAEKAAAALAAAAAAQABAAAAdmgACCg4SFhoeIiYqLjIM0DzKMWCleJwiLXS6aGJiaLpyKk1UoV4wHWSdcFIQEEA8CgwMaKytcVgYGABAhHwuDAhm0HxIeHg0MHxwJhAwZWxBaKioWAAvLhQMEABMmJhOMAgoKsIWBACH5BAEKAAAALAAAAAAQABAAAAdqgACCg4SFgwE3OAKGhkNQY0aLjII3Ty4uKwyTgjhRl2Q5mwAESFRVSgSbYEgnSxFfoj9jK2IQogCyK04Rt2BJJEOwtwBhQUQ1wz5NKkTDPUwqQDBCQgaTMD0+MTtdXTvDNEdHNMMALy+MgQA7' | |
} | |
//----------------------------------------------------------------------------- | |
// 設定ここまで | |
//----------------------------------------------------------------------------- | |
var SETTINGS = ''; | |
var FluJE = { | |
resultList: [], | |
resultCloseFlag: false, | |
selectionFlag: true, | |
//=== remove result calame === | |
removeResult: function (e) { | |
var navi = $('FluJE_navi'); | |
var selection = window.getSelection().toString(); | |
if(selection!="" || !FluJE.resultCloseFlag) return; | |
if(navi && navi.style.display!='none') return; | |
if(SETTINGS.remove_result_all){ | |
if(FluJE.resultList.length){ | |
FluJE.resultList.forEach(function (c_node){ | |
document.body.removeChild(c_node); | |
}); | |
FluJE.resultList = []; | |
FluJE.resultCloseFlag = false; | |
} | |
}else{ | |
var result = FluJE.resultList[FluJE.resultList.length-1]; | |
if(result){ | |
document.body.removeChild(result); | |
FluJE.resultList.pop(); | |
} | |
} | |
}, | |
//=== All close (remove result calame and close navi calame) === | |
allRemove: function(){ | |
var navi = $('FluJE_navi'); | |
var qlookup = $('FluJE_quick_lookup'); | |
if(qlookup){ | |
qlookup.style.display = 'none'; | |
qlookup.style.opacity = 0; | |
} | |
if(navi){ | |
navi.style.display = 'none'; | |
navi.style.opacity = 0; | |
} | |
if(FluJE.resultList.length){ | |
FluJE.resultList.forEach( | |
function (e){ document.body.removeChild(e); }); | |
FluJE.resultList = []; | |
} | |
}, | |
//=== Mouseup Event (selection) === | |
selectionEvent: function(evt, ids, force){ | |
var self = FluJE; | |
var selection = window.getSelection().toString(); | |
if(!selection || !FluJE.selectionFlag) return; | |
FluJE.resultCloseFlag = false; | |
setTimeout(function(){ FluJE.resultCloseFlag = true }, 100); | |
if(!force) { | |
if(SETTINGS.enable_modifier_key){ | |
if(!(evt[SETTINGS.modifier_key]) || evt.button != 0 ) | |
return; | |
}else{ | |
if(evt[SETTINGS.modifier_key] || evt.button != 0) | |
return; | |
else if(selection) | |
setTimeout(function(){ return; }, 100); | |
} | |
} | |
if(ids && ids.length) | |
FluJE.showResult(selection, self.autoSelector(selection, ids)); | |
else | |
FluJE.showResult(selection, self.autoSelector(selection)); | |
window.getSelection().removeAllRanges(); | |
}, | |
//=== select site(s) automatic === | |
autoSelector: function(str, ids){ | |
var ids_ja = [], ids_en = [], type = "", lang = ""; | |
if(ids && ids.length){ | |
ids.forEach(function(val){ | |
if(checkInputLang(val, 'ja')) | |
ids_ja.push(val); | |
if(checkInputLang(val, 'en')) | |
ids_en.push(val); | |
}); | |
}else | |
ids = [] | |
str = str.replace(/^\s+|\s+$/g, ""); | |
if(!str.match(/^[\S]+\s.*$/i)){ | |
var re = new RegExp("[^a-z0-9]{"+SETTINGS.translation.ja_chars+",}", "i"); | |
if(/^\s*$|[^a-z\s]/i.test(str)){ | |
lang = "ja"; | |
if(SETTINGS.lookup.ja_type=='search') | |
type = 'lookup'; | |
else if(re.test(str) && SETTINGS.translation.JtoE) | |
type = 'translation' | |
else | |
type = 'lookup' | |
}else { | |
lang = 'en'; | |
type='lookup'; | |
} | |
}else { | |
lang = 'en' | |
if(SETTINGS.lookup.en_type=='search') | |
type = 'lookup' | |
else if((str.match(/\s/mg).length >= SETTINGS.translation.en_words-1) && SETTINGS.translation.EtoJ) | |
type = 'translation' | |
else | |
type = 'lookup' | |
} | |
if(ids.length){ | |
if(lang == 'ja') | |
return ids_ja; | |
else if (lang == 'en') | |
return ids_en; | |
else return; | |
} | |
if(SETTINGS[type][lang] && SETTINGS[type][lang].length) | |
return SETTINGS[type][lang]; | |
}, | |
//----------------------------------------------------------------------------- | |
// output result gotten from keyword | |
//----------------------------------------------------------------------------- | |
//=== show results === | |
loaded: false, | |
initCSS: function(){ | |
var cls1 = 'div.FluJE_result', cls2 = cls1+' div.FluJE_result_area', cls3 = cls2+' div.FluJE_result_article'; | |
var inherit = 'background: inherit; background-image: inherit; background-color: inherit; color: inherit; text-align: inherit; font-size: inherit; font-style: inherit; font-weight: inherit; margin: inherit; text-decoration: inherit; border: 0px; height: auto; padding: 0; font-family: inherit; vertical-align: inherit; line-height: inherit; font-stretch: inherit; font-variant: inherit; font-size-adjust: inherit; letter-spacing: inherit;'; | |
var css = [ cls1,'{ font-size: 14px; position: fixed; margin: 0; padding: 0; bottom: 0; left: 0; right: 0; max-height: 50%; overflow: auto; vertical-align: baseline; border: 0; border-collapse: separate; text-align: left; text-indent: 0; text-decoration: none; color: #FFF; font-family: sans-serif; font-weight: normal; font-style: normal; font-size: medium; font-stretch: normal; font-variant: normal; font-size-adjust: none; letter-spacing: normal; background: none; background-color: #000; background-image: none; -moz-border-radius: 3px; opacity: 0.8; z-index: 1000; }\n', | |
cls1,' > div{',inherit,' min-height: 22px; }\n', | |
cls1,' img.FluJE_switch_img{ position: absolute; cursor: pointer; top: 1px; right: 1px; margin: 3px 2px 0 5px; width: 16px; height: 16px; z-index: 3000; }\n', | |
cls2,'{ position: relative; overflow: auto; z-index: 1500; }\n', | |
cls3,'{ position: relative; -moz-border-radius: 3px; color: #FFF; background-color: #111; margin: 5px; padding: 3px 0 0 30px; z-index: 1000; min-height: 22px; }\n', | |
cls3,' span.indicator{ ',inherit,' position: absolute; top: 0; color: #FFF; left: 40px; width: 200px; height: 18px; padding-left: 30px; background-image: url(',IMAGES.indicator,'); background-repeat: no-repeat; z-index: 3000; }\n', | |
cls3,' *{',inherit,' background-color: #111; margin: 0; padding: 0; color: #FFFFFF; font-size: 14px; }\n', | |
cls3,' h1, ',cls3,' h2{ width: 100%; max-width: 100%; font-size: 110%; height: auto; font-weight: bold; color: #9FF; }\n', | |
cls3,' h1 *, ',cls3,' h2 *{ width: 100%; max-width: 100%; font-size: 110%; height: auto; font-weight: bold; color: #9FF; }\n', | |
cls3,' h3, ',cls3,' h4, ',cls3,' h5, ',cls3,' h6{ width: 100%; max-width: 100%; height: auto; color: #9F9; font-size: 95%; font-weight:100%; }\n', | |
cls3,' h3 *, ',cls3,' h4 *, ',cls3,' h5 *, ',cls3,' h6 *{ width: 100%; max-width: 100%; height: auto; color: #9F9; font-size: 95%; font-weight:100%; }\n', | |
cls3,' strong, ',cls3,' em{ color: #F99; font-size: 105%; font-weight: bold; }\n', | |
cls3,' strong *, ',cls3,' em *{ color: #F99; font-size: 105%; font-weight: bold; }\n', | |
cls3,' tr td{ padding: 7px; }\n', | |
cls3,' a{ color: #FF9; text-decoration: none; }\n', | |
cls3,' a:hover{ color: #FF9; text-decoration: underline; }\n', | |
cls3,' img{ display: none; }\n', | |
cls3,' a.FluJE_permalink{ position: absolute; padding: 0; margin: 0; top: 0px; left: 2px; text-decoration: none; width: 0; height: 0; color: none; border:0; background-color: none; }\n', | |
cls3,' img.FluJE_site_icon{ position: absolute; -moz-border-radius: 3px; top: 0px; left: 2px; width: 16px; height: 16px; padding: 1px; background-color: #FFF; display: inline; }\n', | |
cls3,' span.FluJE_msg{ padding-left: 10px; color: #999; }\n', | |
cls3,' span.FluJE_error_msg{ padding-left: 10px; color: #999; }\n', | |
'div#FluJE_flash_msg{ position: fixed; bottom: 0; left: 0; right: 0; color: #9F9; font-weight: normal; font-size: 90%; text-align: center; background-color: #000; padding: 5px 0; margin: 0; opacity: 0.8; }\n', | |
'div#FluJE_flash_error_msg{ position: fixed; bottom: 0; left: 0; right: 0; color: #F99; font-weight: bold; font-size: 120%; text-align: center; background-color: #000; padding: 5px 0; margin: 0; opacity: 0.8; }\n' | |
].join(''); | |
return css; | |
}, | |
showMessage: function(str, param){ | |
var self = FluJE; | |
if(!str) return; | |
if(!self.loaded) loadStyle(self.loaded, self.initCSS()); | |
if(param == "error") | |
var msg = document.body.appendChild($N('div', {id:'FluJE_flash_error_msg', style:'display: none'}, str)); | |
else | |
var msg = document.body.appendChild($N('div', {id:'FluJE_flash_msg', style:'display: none'}, str)); | |
Effect.flash(msg); | |
return; | |
}, | |
showResult: function(str, items){ | |
var self = FluJE; | |
if(!str) return; | |
if(loadStyle(self.loaded, self.initCSS(), function(){ self.showResult(str, items); })){ | |
self.loaded = true; | |
return; | |
} | |
if(!items){ | |
var items = self.autoSelector(str); | |
if(!items){ | |
var msg = document.body.appendChild($N('div', {id:'FluJE_flash_error_msg', style:'display: none'}, '!!! Plese select one or more sites. !!!')); | |
Effect.flash(msg); | |
return; | |
} | |
} | |
var root = document.body.appendChild($N('div', {class:'FluJE_result'})); | |
ResultNavi.init(root, str); | |
self.resultList.push(root); | |
root.addEventListener('click', function(evt) { | |
evt.stopPropagation(); | |
var tag_name = evt.target.nodeName; | |
if(tag_name=='IMG' || tag_name=='A' || !self.resultCloseFlag || window.getSelection().toString()!="") return; | |
document.body.removeChild(root); | |
self.resultList.pop(); | |
}, false); | |
var result_elems = [], indicator = [], permalinks = []; | |
var indicator_img = $N('span', {class:'indicator', style:'display: inline'}, 'Now Loading...'); | |
items.forEach(function (num, index){ | |
indicator.push(indicator_img.cloneNode(true)); | |
var site_icon = $N('img', {class:'FluJE_site_icon', src: getIcon(num), title: SITEINFO[num].name}); | |
permalinks.push($N('a', {class:'FluJE_permalink', target: '_blank'}, [site_icon])); | |
result_elems.push($N('div',{class:'FluJE_result_article'}, [permalinks[index], indicator[index]])); | |
}); | |
var area = root.appendChild($N('div', {class:'FluJE_result_area'}, result_elems)); | |
self.getResults(str, items, function(results, index, hash){ | |
if(hash){ | |
var num = hash.num; | |
var url = hash.url; | |
} | |
permalinks[index].setAttribute('href', url); | |
indicator[index].style.display = 'none'; | |
results.forEach(function (e){ | |
e = document.importNode(e, true); | |
result_elems[index].appendChild(e); | |
}); | |
self.resultCloseFlag = true; | |
}); | |
}, | |
createElements: function(req, sites, url, index, num, func) { | |
var info = sites[num]; | |
var r = req.responseText.replace(/<object[\S\s]+<\/object>/img, ''); | |
var reqdom = convertToHTMLDocument(r); | |
var tmp = []; | |
var results = []; | |
tmp = $X(info.xpath, reqdom); | |
if(tmp!='' && (info.NGxpath==null || (info.NGxpath && $X(info.NGxpath, reqdom)==''))){ | |
if(info.type=='dictionary' || info.type=='search'){ | |
tmp.forEach(function(result) { | |
var links = $X(".//a", result); | |
links.forEach(function(link){ | |
if(link.getAttribute("href") && link.getAttribute("href").charAt(0) != "#"){ | |
if(link.getAttribute("href").toLowerCase().indexOf("http") != 0){ | |
if(info.link){ | |
link.setAttribute("href",info.link+link.getAttribute("href").replace(new RegExp('[0-9a-z/.+-]*/', 'i') ,"")); | |
}else{ | |
link.setAttribute("href", | |
url.match(new RegExp('http://[0-9a-z/.+-]+/', 'i')) | |
+link.getAttribute("href").replace(new RegExp('[0-9a-z/.+-]*/') ,"")); | |
} | |
} | |
link.setAttribute("target","_blank"); | |
}else if(link.hasChildNodes()){ | |
link.removeAttribute('href'); | |
} | |
}); | |
results.push(result); | |
}); | |
}else if(info.type=='translation'){ | |
tmp.forEach(function(result){ | |
results.push(result); | |
}); | |
} | |
}else{ | |
results.push($N('span', {class: 'FluJE_error_msg'}, 'Not Found')); | |
} | |
func(results, index, {num:num, url:url}); | |
}, | |
//=== get results === | |
/* func::argument (1st:Results(Array), 2nd:Site Number, 3rd: Result URL) */ | |
getResults: function(str, items, func){ | |
var sites = SITEINFO; | |
if(!items) return; | |
items.forEach(function (e, index){ | |
var data = '', method = 'GET', url = ''; | |
if(sites[e].enc && (sites[e].lang=='ja' || sites[e].lang=='both')){ | |
var cs = EscapeEncoding(sites[e].enc, str); | |
}else{ | |
var cs = str.replace(/’/mg, "\'").replace(/,/mg, ','); | |
} | |
if(sites[e].type=='dictionary'){ | |
url = sites[e].url.replace(/\[context\]/, cs); | |
}else if(sites[e].type=='search'){ | |
cs = cs.replace(/\s/mg, sites[e].space); | |
url = sites[e].url.replace(/\[context\]/, cs); | |
}else if(sites[e].type=='translation'){ | |
if(sites[e].method=='POST'){ | |
method = 'POST'; | |
url = sites[e].url; | |
if(sites[e].lang == 'ja'){ | |
data = sites[e].data.replace(/\[context\]/, cs); | |
}else if(sites[e].lang == 'en'){ | |
data = sites[e].data.replace(/\[context\]/, cs.replace(/\s/mg, sites[e].space)); | |
} | |
}else{ | |
cs = cs.replace(/\s/mg, sites[e].space); | |
url = sites[e].url.replace(/\[context\]/, cs); | |
} | |
} | |
GM_xmlhttpRequest({ | |
overrideMimeType:"text/html; charset="+sites[e].enc, | |
method: method, | |
url: url, | |
headers: { | |
'User-agent': 'Mozilla/5.0 (compatible)', | |
'Content-Type' : 'application/x-www-form-urlencoded', | |
'Accept': 'application/atom+xml,application/xml,text/xml', | |
}, | |
data: data, | |
onerror: function(){ | |
func([$N('span', {class: 'FluJE_error_msg'}, 'ERROR')], e, url); | |
return; | |
}, | |
onload: function(res) { | |
FluJE.createElements(res, sites, url, index, e, func); | |
} | |
}); | |
}); | |
}, | |
getSiteInfo : function() { | |
var a = []; | |
var cache = eval(GM_getValue("cacheInfo")); | |
if(!cache) { | |
this.importSiteInfo(); | |
return ; | |
} | |
a = a.concat(LOCAL_SITEINFO); | |
SITEINFO_IMPORT_URLS.forEach(function(i) { | |
a = a.concat(cache[i].info); | |
}); | |
a.forEach(function(val,index){ | |
a[index].id = index; | |
}); | |
return a; | |
}, | |
importSiteInfo: function(){ | |
if (document.getElementById('FluJE_navi')){ | |
var node = document.getElementById('FluJE_navi'); | |
node.parentNode.removeChild(node); | |
} | |
SITEINFO_IMPORT_URLS.forEach(function(i) { | |
var opt = { | |
method: 'get', | |
url: i, | |
onload: function(res) { | |
FluJE.showMessage("import site info."); | |
return FluJE.getCacheCallback(res, i); | |
}, | |
onerror: function(res){ | |
FluJE.showMessage("import error.", "error"); | |
}, | |
} | |
GM_xmlhttpRequest(opt); | |
}) | |
}, | |
getCacheCallback: function(res, url) { | |
if (res.status != 200) { | |
return getCacheErrorCallback(url); | |
} | |
var info = null; | |
try { | |
info = eval(res.responseText).map(function(i) { return i.data }) | |
} | |
catch(e) { | |
info = [] | |
var matched = false | |
var hdoc = convertToHTMLDocument(res.responseText) | |
var textareas = $X('.//*[@class="FluJE_data"]', hdoc) | |
textareas.forEach(function(textarea) { | |
var d = parseInfo(textarea.value) | |
if (d) { | |
info.push(d) | |
if (!matched && location.href.match(d.url)) { | |
matched = d | |
} | |
} | |
}) | |
} | |
if (info.length > 0) { | |
cacheInfo = {} | |
cacheInfo[url] = { | |
url: url, | |
expire: new Date(new Date().getTime()), | |
info: info | |
} | |
GM_setValue('cacheInfo', cacheInfo.toSource()) | |
SITEINFO = this.getSiteInfo(); | |
}else { | |
this.getCacheErrorCallback(url) | |
} | |
}, | |
getCacheErrorCallback: function(url) { | |
var expire = new Date(new Date().getTime()) | |
var chacheInfo = {} | |
if (cacheInfo[url]) { | |
cacheInfo[url].expire = expire | |
} | |
else { | |
cacheInfo[url] = { | |
url: url, | |
expire: expire, | |
info: [] | |
} | |
} | |
GM_setValue('cacheInfo', cacheInfo.toSource()) | |
}, | |
//=== window onLoad === | |
onLoad: function(){ | |
//== GM_getValue == | |
Setting.load(); | |
SITEINFO = FluJE.getSiteInfo(); | |
//== Userscript command == | |
GM_registerMenuCommand('Fast look up JP and EN - reset setting', function(){Setting.reset()}); | |
//== Event == | |
ShortcutKey.add(window, SETTINGS.shortcutkey.navi_toggle, Navi.toggle); | |
ShortcutKey.add(window, SETTINGS.shortcutkey.close_all, FluJE.allRemove, true); | |
ShortcutKey.add(window, SETTINGS.shortcutkey.QL_run, QLu.run); | |
if(SETTINGS.shortcutkey.site.length){ | |
var keys = []; | |
if(SETTINGS.shortcutkey.site.length) { | |
SETTINGS.shortcutkey.site.forEach(function(v,i){ | |
var match = false; | |
keys.forEach(function(key, idx){ | |
if(key.shortcutkey == v.shortcutkey) { | |
keys[idx].id.push(v.id); | |
match = true; | |
} | |
}); | |
if(!match) | |
keys.push({shortcutkey:v.shortcutkey, id:[v.id]}); | |
}); | |
} | |
if(keys.length) { | |
keys.forEach(function(key, idx){ | |
ShortcutKey.add(window, key.shortcutkey, function(evt){ | |
FluJE.selectionEvent(evt, key.id, true); | |
}, false); | |
}); | |
} | |
} | |
window.addEventListener("mouseup", FluJE.selectionEvent, true); | |
window.addEventListener('click', FluJE.removeResult, false); | |
GM_registerMenuCommand('Fast look up JP and EN - import siteinfo', function(){ | |
FluJE.importSiteInfo(); | |
}); | |
if(SETTINGS.enable_wheel_button) { | |
window.addEventListener('click', function(e){ | |
if(e.button==1) | |
FluJE.selectionEvent(e, false, true); | |
}, false); | |
} | |
}, | |
} | |
//----------------------------------------------------------------------------- | |
// EFFECT | |
//----------------------------------------------------------------------------- | |
var Effect = { | |
flag: true, | |
flash: function(node){ | |
var self = this; | |
this.fadeio(node); | |
setTimeout(function(){ self.fadeio(node, null, true); }, 2000); | |
}, | |
highlight: function(node, bool){ | |
if(bool){ | |
node.style.backgroundColor = '#CFC'; | |
setTimeout(function(){ node.style.backgroundColor='#FFF'; }, 500); | |
}else{ | |
node.style.backgroundColor = '#F99'; | |
setTimeout(function(){ node.style.backgroundColor='#FFF'; }, 500); | |
} | |
}, | |
smoothsize: function(node, original, fixed) { | |
var self = this; | |
if(original > fixed) { | |
node.offsetHeight -= 5; | |
orininal -= 5; | |
setTimeout(function(){ | |
self.smoothsize(node, original, fixed); | |
}, 20); | |
} | |
return; | |
}, | |
fadeio: function(node, func, rm, sw, count){ | |
var self = this; | |
if(!sw){ | |
if(!this.flag) return; | |
if(!node.style.opacity) node.style.opacity = 0; | |
if(node.style.display=='none') node.style.display = 'block'; | |
if(parseFloat(node.style.opacity) > 0.5) { | |
sw = 'out', count = 8, this.flag = false; | |
}else{ | |
sw = 'in', count = 0, this.flag = false; | |
} | |
} | |
if(!SETTINGS.effect){ | |
if(sw=='in') { | |
node.style.opacity = 0.8; | |
this.flag = true; | |
}else { | |
node.style.opacity = 0; | |
node.style.display = 'none'; | |
this.flag = true; | |
} | |
if(func) setTimeout(func, 10); | |
return; | |
} | |
if(sw == 'in'){ | |
if(count <= 8){ | |
node.style.opacity = count/10; | |
count++; | |
setTimeout(function(){ | |
self.fadeio(node, func, rm, sw, count); | |
}, 20); | |
}else{ | |
if(func) func(); | |
this.flag = true; return; | |
} | |
}else if(sw == 'out'){ | |
if(count >= 0){ | |
node.style.opacity = count/10; | |
count--; | |
setTimeout(function(){ | |
self.fadeio(node, func, rm, sw, count); | |
}, 20); | |
}else{ | |
if(func) func(); | |
if(rm) node.parentNode.removeChild(node); | |
else node.style.display = 'none'; | |
this.flag = true; return; | |
} | |
} | |
} | |
} | |
//----------------------------------------------------------------------------- | |
// Navigation | |
//----------------------------------------------------------------------------- | |
var Navi = { | |
loaded: false, | |
initCSS: function() { | |
var id1 = 'div#FluJE_navi', id2 = id1+' div#FluJE_navi_container', cls1 = id2+' table.FluJE_navi_table', cls2_1 = cls1+' .FluJE_site_num_ja', cls2_2 = cls1+' .FluJE_site_num_en', id3 = id2+' div#FluJE_navi_setting'; | |
var inherit = 'background:inherit; background-image:inherit; background-color:inherit; color:inherit; text-align:inherit; font-size:inherit; font-style:inherit; font-weight:inherit; margin:inherit; text-decoration:inherit; border:0px; font-family:inherit; vertical-align:inherit; line-height:inherit; font-stretch:inherit; font-variant:inherit; font-size-adjust:inherit; letter-spacing:inherit;'; | |
var css = [ id1,'{ position: fixed; margin: 0; padding: 28px 10px 20px 5px; top: 10px; left: 10px; width: 400px; height: 400px; max-height: 100%; vertical-align: baseline; border: 0; border-collapse: separate; text-align: left; text-indent: 0; text-decoration: none; color: #FFF; font-family: sans-serif; font-weight: normal; font-style: normal; font-size: 9pt; font-stretch: normal; font-variant: normal; font-size-adjust: none; letter-spacing: normal; background: none; background-color: #000; background-image: none; -moz-border-radius: 10px; opacity:0.8; z-index:1000; }\n', | |
id1,' div#FluJE_navi_title{ ',inherit,' position: absolute; top: 3px; left: 10px; }\n', | |
id1,' div#FluJE_navi_title span{ ',inherit,' font-size: 10pt; color: #999; font-weight: bold; }\n', | |
id1,' div#FluJE_navi_title span#FluJE_navi_version{ ',inherit,' font-size: 90%; margin-left: 10px; color: #666; font-weight: normal; }\n', | |
id1,' .FluJE_navi_button{ position: absolute; cursor: pointer; width: 27px; height: 23px; }\n', | |
id1,' div#FluJE_navi_minimize_button{ top: 5px; right: 64px; background: url(',IMAGES.minimize,') no-repeat; }\n', | |
id1,' div#FluJE_navi_minimize_button:hover{ background: url(',IMAGES.minimize_focused,') no-repeat; }\n', | |
id1,' div#FluJE_navi_maximize_button{ top: 5px; right: 37px; background: url(',IMAGES.maximize,') no-repeat; }\n', | |
id1,' div#FluJE_navi_maximize_button:hover{ background: url(',IMAGES.maximize_focused,') no-repeat; }\n', | |
id1,' div#FluJE_navi_close_button{ top: 5px; right: 10px; background: url(',IMAGES.close,') no-repeat; }\n', | |
id1,' div#FluJE_navi_close_button:hover{ background: url(',IMAGES.close_focused,') no-repeat; }\n', | |
id1,' span.FluJE_navi_title{ ',inherit,' color: #FFF; font-weight: bold; margin-top: 5px; }\n', | |
id2,'{ ',inherit,' position: static; top: 25px; height: 100%; max-height: 100%; width: 99%; padding: 5px; max-height: auto; overflow-y: auto; overflow-x: hidden; vertical-align: middle; border-top: 1px dashed #666; border-bottom: 1px dashed #666; }\n', | |
id2,' div.FluJE_navi_table_area{ ',inherit,' width: 98%; padding: 5px 3px; margin-bottom: 10px; border: 1px solid #666; }\n', | |
id2,' div.FluJE_navi_reset{ ',inherit,' float: right; border: 1px solid #999; background-color: #333; color: #F33; cursor: pointer; padding: 0 3px; }\n', | |
cls1,'{ ',inherit,' width: 100%; border: 0; margin: 0; vertical-align: middle; border-collapse: separate; border-spacing: 2px; }\n', | |
cls1,' tbody{ ',inherit,' width: 100%; margin: 0; vertical-align: middle; }\n', | |
cls1,' tr, ',cls1,' td{ ',inherit,' font-size: 95%; background-color: #000; padding: 3px; margin: 0; }\n', | |
cls1,' tr *, ',cls1,' td *{ ',inherit,' background-color: #000; }\n', | |
cls1,' tr td input, ',cls1,' select{ background-color: #FFF; color: #000; height: 20px; width: 220px; float: right; }\n', | |
cls1,' tr td input.FluJE_navi_site_sc{ background-color: #FFF; color: green; text-align: center; font-weight: bold; height: 20px; width: 50px; float: right; }\n', | |
cls1,' tr td input:hover, ',id2,' tr td select:hover{ ',inherit,' color: #000; background-color: #FFF; -moz-outline: 2px solid -moz-rgba(16,96,146,0.8); -moz-outline-offset: 1px; -moz-outline-radius: 3px; }\n', | |
cls1,' tr td input[type=\"text\"]:focus, ',id2,' tr td select:focus{ ',inherit,' color: #000; background-color: #FFF; -moz-outline: 2px solid -moz-rgba(16,186,224,0.8); -moz-outline-offset: 1px; -moz-outline-radius: 3px; }\n', | |
cls1,' th { ',inherit,' font-weight: bold; }\n', | |
cls1,' span{ color: #FFF; background-color: inherit; border: 0px; font-size: 9.5pt; float: left; }\n', | |
cls1,' span.FluJE_navi_site_name{ display: none; }\n', | |
cls1,' .FluJE_site_number{ font-size: 10pt; font-weight: bold; text-align: center; width: 16px; height: 16px; background-color: inherit; display: block; }\n', | |
cls1,' td.FluJE_site_num_ja[state=enable]:hover{ -moz-outline: 1px solid -moz-rgba(16,96,146,0.8); -moz-outline-offset: 1px; -moz-outline-radius: 3px; background-color: #006; }\n', | |
cls1,' td.FluJE_site_num_en[state=enable]:hover{ -moz-outline: 1px solid -moz-rgba(146,96,16,0.8); -moz-outline-offset: 1px; -moz-outline-radius: 3px; background-color: #600; }\n', | |
cls1,' img.FluJE_navi_icon{ padding: 1px; width: 16px; height: 16px; -moz-border-radius: 3px; background-color: #FFF; margin-right: 5px; float: left; }\n', | |
cls1,' th{ ',inherit,' text-align: center; color: #CCC; font-weight: normal; padding: 0px; }\n', | |
cls1,' th.Flu_navi_setting_title{ ',inherit,' color: #999; font-weight: bold; font-size: 10pt; }\n', | |
cls2_1,'{ background-color: #003; width: 16px; text-align: center; vertical-align: middle; cursor: pointer; }\n', | |
cls2_2,'{ background-color: #300; width: 16px; text-align: center; vertical-align: middle; cursor: pointer; }\n', | |
id3,' input[type=text]{ width: 75px; float: left; padding-left: 3px; }\n', | |
id3,' input[type=checkbox]{ width: auto; float: left; }\n', | |
id3,' select{ margin: 0; padding: 0; background-color: #FFF; color: #000; width: auto; float: left; }\n', | |
id3,' select option{ background-color: #FFF; color: #000;}\n' | |
].join(''); | |
return css; | |
}, | |
//=== create dictionary search translation table === | |
createMainHTML: function() { | |
var html_dict = "", html_search = "", html_trans = "", html_setting = ""; | |
html_dict += "<div class='FluJE_navi_table_area'><div class='FluJE_navi_reset' evt='reset_lookup'>reset</div><span class='FluJE_navi_title'>Dictionary</span>" | |
+ "<table class='FluJE_navi_table'><tbody>" | |
+ "<tr><th class='FluJE_site_num_ja'>Ja</th><th class='FluJE_site_num_en'>En</th><th>Icon</th><th>Search form</th><th>Shortcut</th></tr>"; | |
html_search += "<span class='FluJE_navi_title'>Search</span>" | |
+ "<table class='FluJE_navi_table'><tbody>"; | |
html_trans += "<div class='FluJE_navi_table_area'><div class='FluJE_navi_reset' evt='reset_translation'>reset</div><span class='FluJE_navi_title'>Translation</span>" | |
+ "<table class='FluJE_navi_table'><tbody>"; | |
var item_length = SITEINFO.length; | |
for(var i=0; i<item_length; i++){ | |
var site_name = SITEINFO[i].name, site_name_rev = ''; | |
var html = "", key = "", type = SITEINFO[i].type, lang = SITEINFO[i].lang, id = SITEINFO[i].id; | |
if(SETTINGS.shortcutkey.site && SETTINGS.shortcutkey.site.length > 0){ | |
SETTINGS.shortcutkey.site.forEach(function(val,idx){ | |
if(val.id == i) | |
key = val.shortcutkey; | |
}); | |
} | |
var sort = (type == 'translation') ? 'translation' : 'lookup'; | |
html+="<tr><td class='FluJE_site_num_ja' name=\'ja:"+type+"\' site_id="+id+" sort="+sort+" alt='site_number' evt='chenge_site_num' state="+(function(){ if(lang=='ja' || lang=='both') return 'enable'; else 'disable'; })()+">"+SiteNumElement.get(i, 'ja', 'html')+"</td>" | |
+ "<td class='FluJE_site_num_en' name=\'en:"+type+"\' site_id="+id+" sort="+sort+" alt='site_number' evt='chenge_site_num' state="+(function(){ if(lang=='en' || lang=='both') return 'enable'; else 'disable'; })()+">"+SiteNumElement.get(i, 'en', 'html')+"</td>" | |
+ "<td><img class='FluJE_navi_icon' title=\'"+site_name+"\' src=\'"+getIcon(i)+"\'><span class='FluJE_navi_site_name'>"+site_name+"</span></td>" | |
+ "<td><input class='FluJE_navi_inputtext' evt='lookup' type='text' size=30 name="+i+"></td>" | |
+ "<td><input class='FluJE_navi_site_sc' site_id="+id+" evt='shortcut' type='text' size=5 name="+i+" value="+key+"></td></tr>"; | |
if(type == 'dictionary') | |
html_dict += html; | |
else if(type=='search') | |
html_search += html; | |
else if(type=='translation') | |
html_trans += html; | |
} | |
html_dict += "</tbody></table>"; | |
html_search += "</tbody></table></div>"; | |
html_trans += "</tbody></table></div>"; | |
return html_dict + html_search + html_trans; | |
}, | |
//=== crate setting table === | |
createSettingHTML: function() { | |
var html = "<div class='FluJE_navi_reset' evt='reset_setting'>reset</div><span class='FluJE_navi_title'>Setting</span>" | |
+ "<table class='FluJE_navi_table'><tbody>" | |
+ "<tr><th title='検索結果をクリック時に、現在表示している結果すべて消すか、クリックした結果のみ消すか'>表示中の結果を全消去</th>" | |
+ "<td><input type='checkbox' evt='remove_result_all' "+(function(){if(SETTINGS['remove_result_all']) return 'checked'})()+"></td></tr>" | |
+ "<tr><th title='ブラウザ上の文字列選択における辞書引き/検索/翻訳時に修飾キーを利用するか'>修飾キーを有効</th>" | |
+ "<td><input type='checkbox' evt='enable_modifier_key' "+(function(){ if(SETTINGS['enable_modifier_key']) return 'checked'})()+"></td></tr>" | |
+ "<tr><th title='Alt, Control, Shift, Metaキーの何れかを選択してください'>修飾キー</th>" | |
+ "<td><input class='FluJE_navi_inputtext' type='text' evt='modifier_key' value="+SETTINGS.modifier_key+"></td></tr>" | |
+ "<tr><th title='ポップアップ表示時のフェードイン,フェードアウトを有効にするか'>エフェクトを有効</th>" | |
+ "<td><input type='checkbox' evt='check_effect' "+(function(){ if(SETTINGS['effect']) return 'checked'})()+"></td></tr>" | |
+ "<tr><th colspan=2 class='Flu_navi_setting_title'>[ Translation ]</th><td></td></tr>" | |
+ "<tr><th title='日英翻訳を有効にするか チェックしていない場合は辞書引き/検索のみとなります'>日英翻訳を有効</th>" | |
+ "<td><input type='checkbox' evt='Ja_to_En' "+(function(){if(SETTINGS.translation['JtoE']) return 'checked'})()+"></td></tr>" | |
+ "<tr><th title='ここで決められた文字数以上は翻訳されます'>辞書引き上限文字数</th>" | |
+ "<td><input class='FluJE_navi_inputtext' evt='Ja_char' type='text' value="+SETTINGS.translation['ja_chars']+"> (Push ENTER)</td></tr>" | |
+ "<tr><th title='英日翻訳を有効にするか チェックしていない場合は辞書引き/検索のみとなります'>英日翻訳を有効</th>" | |
+ "<td><input type='checkbox' evt='En_to_Ja' "+(function(){if(SETTINGS.translation['EtoJ']) return 'checked'})()+"></td></tr>" | |
+ "<tr><th title='ここで決められた単語数以上は翻訳されます'>辞書引き上限単語数</th>" | |
+ "<td><input class='FluJE_navi_inputtext' type='text' evt='En_word' value="+SETTINGS.translation['en_words']+"> (Push ENTER)</td></tr>" | |
+ "<tr><th colspan=2 class='Flu_navi_setting_title'>[ Shortcut Key ](要リロード)</th></tr>" | |
+ "<tr><th title='ショートカットキーにより「Navi」の表示と非表示を切り替えます'>Naviの表示/非表示</th>" | |
+ "<td><input class='FluJE_navi_inputtext' evt='navi_toggle' type='text' value="+SETTINGS.shortcutkey.navi_toggle+"></td></tr>" | |
+ "<tr><th title='ショートカットキーによりFast look up JP and ENで表示されたポップアップを全て閉じます'>すべて閉じる</th>" | |
+ "<td><input class='FluJE_navi_inputtext' evt='close_all' type='text' value="+SETTINGS.shortcutkey.close_all+"></td></tr>" | |
+ "<tr><th title='ショートカットキーにより「Quick Look up」を起動します'>Quick Lookup</th>" | |
+ "<td><input class='FluJE_navi_inputtext' evt='QL_run' type='text' value="+SETTINGS.shortcutkey.QL_run+"></td></tr>" | |
+ "</tbody></table>"; | |
return html; | |
}, | |
getHTML: function() { | |
var html = "<div id='FluJE_navi_title'><span>Fast look up JP and EN</span><span id='FluJE_navi_version'>ver."+VERSION+"<span></div>" | |
+ "<div class='FluJE_navi_button' id='FluJE_navi_minimize_button' evt='minimize'></div>" | |
+ "<div class='FluJE_navi_button' id='FluJE_navi_maximize_button' evt='maximize'></div>" | |
+ "<div class='FluJE_navi_button' id='FluJE_navi_close_button' evt='close'></div>" | |
+ "<div id='FluJE_navi_container'>" | |
+ Navi.createMainHTML() | |
+ "<div class='FluJE_navi_table_area' id='FluJE_navi_setting'>" | |
+ this.createSettingHTML() + "</div></div>"; | |
return html; | |
}, | |
//=== Navi Event === | |
events: function(evt, navi) { | |
var self = this; | |
var tnode = evt.target; | |
var container = $('FluJE_navi_container'); | |
switch(tnode.getAttribute('evt')) { | |
case 'close': { | |
Effect.fadeio(navi); | |
evt.stopPropagation(); break; | |
} | |
case 'minimize': { | |
if(container.style.display != 'none') { | |
container.style.display='none'; | |
navi.style.width = null; | |
navi.style.height = 'auto'; | |
navi.style.bottom = null; break; | |
}else { | |
container.style.display='block'; | |
navi.style.width = null | |
navi.style.height = null; | |
navi.style.bottom = null; break; | |
} | |
} | |
case 'maximize': { | |
var show_site_name = function(disp) { | |
var max_width = 0; | |
$X(".//span[@class='FluJE_navi_site_name']", container).forEach(function(node){ | |
if(disp=='block') { | |
node.style.display="block"; | |
if(max_width < node.offsetWidth) { | |
max_width = (node.offsetWidth*(node.offsetHeight/20)+50) | |
} | |
node.parentNode.style.width = max_width; | |
}else { | |
node.style.display="none"; | |
node.parentNode.style.width=null | |
} | |
}); | |
} | |
if(container.style.display=='none') | |
container.style.display = 'block'; | |
if(navi.style.bottom != '10px') { | |
show_site_name("block"); | |
navi.style.width = 'auto'; | |
navi.style.height = 'auto'; | |
navi.style.bottom = '10px'; | |
}else{ | |
show_site_name("none"); | |
navi.style.height = null; | |
navi.style.width = null; | |
navi.style.bottom = null; | |
} | |
break; | |
} | |
case 'lookup': { | |
if(tnode.getAttribute('added_event')=='true') return; | |
tnode.setAttribute('added_event', true); | |
ShortcutKey.add(tnode, 'RET', function(evt) { | |
FluJE.showResult(tnode.value, [parseInt(tnode.name, 10)]); | |
evt.stopPropagation(); | |
}, false); break; | |
} | |
case 'chenge_site_num': { | |
var modifier_key = evt[SETTINGS.modifier_key]; | |
if(tnode.getAttribute('alt') == 'site_number'){ | |
SiteNumElement.check(tnode, container, modifier_key); | |
break; | |
}else if(tnode.parentNode.getAttribute('alt') == 'site_number'){ | |
SiteNumElement.check(tnode.parentNode, container, modifier_key); | |
break; | |
}else break; | |
} | |
case 'reset_lookup': { | |
SETTINGS.lookup.ja = [], SETTINGS.lookup.en = []; | |
SiteNumElement.replace($X('.//td[@class="FluJE_site_num_ja"][@sort="lookup"]', container), {lang:'ja', sort:'lookup'}); | |
SiteNumElement.replace($X('.//td[@class="FluJE_site_num_en"][@sort="lookup"]', container), {lang:'en', sort:'lookup'}); | |
Setting.save(); | |
break; | |
} | |
case 'reset_translation': { | |
SETTINGS.translation.ja = [], SETTINGS.translation.en = []; | |
SiteNumElement.replace($X('.//td[@class="FluJE_site_num_ja"][@sort="translation"]', container), {lang:'ja', sort:'translation'}); | |
SiteNumElement.replace($X('.//td[@class="FluJE_site_num_en"][@sort="translation"]', container), {lang:'en', sort:'translation'}); | |
Setting.save(); | |
break; | |
} | |
case 'reset_setting': { | |
Setting.reset([['remove_result_all'],['enable_modifier_key'],['modifier_key'],['effect'],['translation','JtoE'],['translation','ja_chars'],['translation','EtoJ'],['translation','en_words'],['shortcutkey']]); | |
$('FluJE_navi_setting').innerHTML = this.createSettingHTML(); | |
break; | |
} | |
case 'remove_result_all': { | |
Setting.set('remove_result_all', tnode.checked); | |
break; | |
} | |
case 'enable_modifier_key': { | |
Setting.set('enable_modifier_key', tnode.checked); | |
break; | |
} | |
case 'modifier_key': { | |
if(tnode.getAttribute('added_event')=='true') return; | |
tnode.setAttribute('added_event', true); | |
tnode.addEventListener('keyup',function(evt){ | |
var key = ''; | |
if(evt.shiftKey || evt.keyCode==16) key = 'shiftKey'; | |
if(evt.ctrlKey || evt.keyCode==17) key = 'ctrlKey'; | |
if(evt.altKey || evt.keyCode==18) key = 'altKey'; | |
if(evt.metaKey || evt.keyCode==224) key = 'metaKey'; | |
tnode.value = key; | |
if(key){ | |
Effect.highlight(tnode, true); | |
Setting.set('modifier_key', key); | |
}else{ | |
Effect.highlight(tnode, false); | |
setTimeout(function(){ tnode.value = SETTINGS.modifier_key; }, 500); | |
} | |
evt.stopPropagation(); | |
}, false); | |
break; | |
} | |
case 'check_effect': { | |
Setting.set('effect', tnode.checked); | |
break; | |
} | |
case 'Ja_to_En': { | |
Setting.set(['translation','JtoE'], tnode.checked); | |
break; | |
} | |
case 'Ja_char': { | |
if(tnode.getAttribute('added_event')=='true') return; | |
tnode.setAttribute('added_event', true); | |
ShortcutKey.add(tnode, 'RET', function(e) { | |
if(isNaN(tnode.value)){ | |
Effect.highlight(tnode, false); | |
}else{ | |
Effect.highlight(tnode, true); | |
Setting.set(['translation','ja_chars'], parseInt(e.target.value, 10)); | |
} | |
}, false); | |
break; | |
} | |
case 'En_to_Ja': { | |
Setting.set(['translation','EtoJ'], tnode.checked); | |
break; | |
} | |
case 'En_word': { | |
if(tnode.getAttribute('added_event')=='true') return; | |
tnode.setAttribute('added_event', true); | |
ShortcutKey.add(tnode, 'RET', function(e) { | |
if(isNaN(tnode.value)){ | |
Effect.highlight(tnode, false); | |
}else{ | |
Effect.highlight(tnode, true); | |
Setting.set(['translation','en_words'], parseInt(e.target.value, 10)); | |
} | |
}, false); | |
break; | |
} | |
case 'navi_toggle': { | |
ShortcutKey.set(tnode, 'navi_toggle'); | |
break; | |
} | |
case 'close_all': { | |
ShortcutKey.set(tnode, 'close_all'); | |
break; | |
} | |
case 'QL_run': { | |
ShortcutKey.set(tnode, 'QL_run'); | |
break; | |
} | |
case 'shortcut': { | |
var index = null, _s = SETTINGS.shortcutkey; | |
var id = tnode.getAttribute('site_id'); | |
if(!_s.site){ | |
SETTINGS.shortcutkey.site = []; | |
}else{ | |
_s.site.forEach(function(val,i){ | |
if(val.id == id) index = i; | |
}); | |
} | |
if(index == null){ | |
_s.site.push({id:parseInt(id)}); | |
index = _s.site.length - 1; | |
} | |
ShortcutKey.set(tnode, 'site', index); | |
break; | |
} | |
default: break; | |
} | |
}, | |
//=== show toggle (open/close) Navi === | |
toggle: function(){ | |
var self = Navi; | |
var navi = $('FluJE_navi'); | |
if(navi){ | |
if(navi.style.display != 'none'){ | |
Effect.fadeio(navi); | |
return; | |
}else{ | |
Effect.fadeio(navi); | |
return; | |
} | |
}else{ | |
if(loadStyle(self.loaded, self.initCSS(), self.toggle)){ | |
self.loaded = true; | |
return; | |
} | |
var navi = document.body.appendChild($N('div', {id:'FluJE_navi'})); | |
navi.innerHTML = self.getHTML(); | |
Effect.fadeio(navi); | |
//== Navi Event Listener == | |
navi.addEventListener('keyup', function(evt){ | |
self.events(evt, navi); | |
}, false); | |
navi.addEventListener('click', function(evt){ | |
self.events(evt, navi); | |
}, false); | |
} | |
} | |
} | |
//----------------------------------------------------------------------------- | |
// Navigation at result area. | |
//----------------------------------------------------------------------------- | |
var ResultNavi = { | |
loaded: false, | |
initCSS: function(){ | |
var cls1 = 'div.FluJE_result div.FluJE_result_navi', cls2 = cls1+' div.FluJE_result_navi_area', cls3_1 = cls2+' td.FluJE_site_num_ja', cls3_2 = cls2+' td.FluJE_site_num_en'; | |
var inherit = 'background: inherit; background-image: inherit; background-color: inherit; color: inherit; text-align: inherit; font-size: inherit; font-style: inherit; font-weight: inherit; margin: inherit; text-decoration: inherit; border: 0px; height: auto; padding: 0; font-family: inherit; vertical-align: inherit; line-height: inherit; font-stretch: inherit; font-variant: inherit; font-size-adjust: inherit; letter-spacing: inherit;'; | |
var css = [ cls1,'{ background: #333; background-image: none; background-color: #333; color: #FFF; text-align: inherit; font-size: 16px; font-style: normal; font-weight: normal; margin: 0; text-decoration: none; border: 0px; font-family: inherit; vertical-align: middle; line-height: 100%; font-stretch: normal; font-variant: normal; font-size-adjust: none; letter-spacing: normal; height: auto; max-height: 70px; padding: 1px 30px 1px 0; }\n', | |
cls1,' *{ ',inherit,' padding: 0; }\n', | |
cls2,'{ padding-top:5px; }\n', | |
cls2,' div{ height: 18px; }\n', | |
cls2,' td{ padding: 0 2px; }\n', | |
cls2,' img.FluJE_site_icon{ -moz-border-radius: 3px; cursor: pointer; background-color: #FFF; padding: 1px; margin: 0; width: 16px; height: 16px; }\n', | |
cls2,' span.FluJE_site_number{ text-align: center; color: #FFF; font-weight: bold; font-size: 14px; }\n', | |
cls2,' table{ vertical-align: middle; border-collapse: separate; border-spacing: 2px; }\n', | |
cls3_1,'{ cursor: pointer; width: 18px; height: 18px; text-align: center; background-color: #335; }\n', | |
cls3_2,'{ cursor: pointer; width: 18px; height: 18px; text-align: center; background-color: #533; }\n', | |
cls3_1,'[state=enable]:hover{ -moz-outline: 1px solid -moz-rgba(16,96,146,0.8); -moz-outline-offset: 1px; -moz-outline-radius: 3px; }\n', | |
cls3_2,'[state=enable]:hover{ -moz-outline: 1px solid -moz-rgba(146,96,16,0.8); -moz-outline-offset: 1px; -moz-outline-radius: 3px; }\n' | |
].join(''); | |
return css; | |
}, | |
createHTML: function(){ | |
var html_icon = "<table><tbody><tr><td>Lang</td>", html_ja = "<tr><td class='FluJE_site_num_ja'>Ja</td>", html_en = "<tr><td class='FluJE_site_num_en' >En</td>"; | |
SITEINFO.forEach(function(e, num){ | |
var type = SITEINFO[num].type, lang = SITEINFO[num].lang, id = SITEINFO[num].id; | |
var sort = (type == 'translation') ? 'translation' : 'lookup'; | |
html_icon += "<td><img class='FluJE_site_icon' evt='relookup' src=\'"+getIcon(num)+"\' title=\'"+e.name+"\' name="+num+"></td>"; | |
html_ja += "<td evt='chenge_site_num' class='FluJE_site_num_ja' alt='site_number' name=\'ja:"+type+"\' site_id="+id+" sort="+sort+" state="+(function(){ if(lang=='ja' || lang=='both') return 'enable'; else return 'disable'; })()+">"+SiteNumElement.get(num, 'ja', 'html')+"</td>"; | |
html_en += "<td evt='chenge_site_num' class='FluJE_site_num_en' alt='site_number' name=\'en:"+type+"\' site_id="+id+" sort="+sort+" state="+(function(){ if(lang=='en' || lang=='both') return 'enable'; else return 'disable'; })()+">"+SiteNumElement.get(num, 'en', 'html')+"</td>"; | |
}); | |
html_icon += "</tr>"; | |
html_ja += "</tr>"; | |
html_en += "</tr></tbody></table>"; | |
return html_icon+html_ja+html_en; | |
}, | |
init: function(pNode, str){ | |
var self = ResultNavi; | |
var root = ''; | |
var oicon = pNode.appendChild($N('img', {class:'FluJE_switch_img', src:IMAGES.openSwitch, style:'display: inline;'})); | |
var cicon = pNode.appendChild($N('img', {class:'FluJE_switch_img', src:IMAGES.closeSwitch, style:'display: none;'})); | |
oicon.addEventListener('click', function(e){ | |
oicon.style.display = 'none'; | |
cicon.style.display = 'inline'; | |
if(!root){ | |
if(loadStyle(self.loaded, self.initCSS(), function(){ root = self.show(pNode, str); })){ | |
self.loaded = true; | |
return; | |
}else{ | |
root = self.show(pNode, str); | |
} | |
}else if(root.style.display == 'none'){ | |
root.style.display='block'; | |
}else{ | |
return; | |
} | |
}, false); | |
cicon.addEventListener('click', function(evt){ | |
oicon.style.display = 'inline'; | |
cicon.style.display = 'none'; | |
root.style.display = 'none'; | |
FluJE.resultCloseFlag = true; | |
}, false); | |
}, | |
show: function(pNode, str){ | |
var root = $N('div', {class: 'FluJE_result_navi'}); | |
var area = root.appendChild($N('div', {class:'FluJE_result_navi_area', style:'display: block; float: right;'})); | |
area.innerHTML = this.createHTML(); | |
area.addEventListener('click', function(evt){ | |
var tnode = evt.target; | |
switch(tnode.getAttribute('evt')){ | |
case 'chenge_site_num': { | |
if(tnode.getAttribute('alt') == 'site_number'){ | |
SiteNumElement.check(tnode, area); | |
evt.stopPropagation(); break; | |
}else if(tnode.parentNode.getAttribute('alt') == 'site_number'){ | |
SiteNumElement.check(tnode.parentNode, area); | |
evt.stopPropagation(); break; | |
}else break; | |
} | |
case 'relookup': { | |
FluJE.showResult(str, [parseInt(tnode.name, 10)]); break; | |
} | |
default: break; | |
} | |
}, false); | |
root.appendChild($N('div', {style:'clear:both !important;'})); | |
pNode.insertBefore(root, pNode.firstChild); | |
return root; | |
} | |
} | |
//----------------------------------------------------------------------------- | |
// Quick Lookup | |
//----------------------------------------------------------------------------- | |
var QLu = { | |
loaded: false, | |
initCSS: function() { | |
var id1 = 'div#FluJE_quick_lookup', id2 = id1+' input#FluJE_quick_lookup_input'; | |
var inherit = 'background: inherit; background-image: inherit; background-color: inherit; color: inherit; text-align: inherit; font-size: inherit; font-style: inherit; font-weight: inherit; margin: inherit; text-decoration: inherit; border: 0px; height: auto; padding: 0; font-family: inherit; vertical-align: inherit; line-height: inherit; font-stretch: inherit; font-variant: inherit; font-size-adjust: inherit; letter-spacing: inherit;'; | |
var css = [ id1,'{ background: #000; background-image: none; background-color: #000; color: #FFF; text-align: center; font-size: 15px; font-style: normal; font-weight: normal; margin: 0; text-decoration: none; border: 0px; padding: 0; font-family: inherit; vertical-align: middle; line-height: 100%; font-stretch: normal; font-variant: normal; font-size-adjust: none; letter-spacing: normal; z-index: 10000; height: 40px; position: fixed; left: 10px; right: 10px; bottom: 51%; padding-top: 20px; opacity: 0; -moz-border-radius: 10px; }\n', | |
id1,' span{ ',inherit,' margin-right: 10px; font-weight: bold; }\n', | |
id2,'{ ',inherit,' padding-left: 3px; padding-top: 2px; height: 20px; width: 85%; background-color: #FFF; color: #333; text-align: left; }\n' | |
].join(''); | |
return css; | |
}, | |
close: function(elm) { | |
$('FluJE_quick_lookup_input').blur(); | |
Effect.fadeio(elm); | |
}, | |
createNode: function(){ | |
var self = this; | |
var title = $N('span', null, 'Quick Lookup:'); | |
var input = $N('input', {id:'FluJE_quick_lookup_input'}); | |
var div = document.body.appendChild($N('div', {id:'FluJE_quick_lookup'}, [title, input])); | |
//== Event == | |
div.addEventListener('click', function(e){ | |
if(e.target != input) | |
self.close(div); | |
}, false); | |
input.addEventListener('focus', function(){ | |
input.style.backgroundColor = "#FFFFFF"; | |
},false); | |
input.addEventListener('blur', function(){ | |
input.style.backgroundColor = "#CCCCCC"; | |
},false); | |
ShortcutKey.add(input, 'RET', function(evt){ | |
switch(evt.target.value){ | |
case 'exit': { self.close(div); return; } | |
case '': { FluJE.removeResult(); break;} | |
default: FluJE.removeResult(); break; | |
} | |
FluJE.showResult(input.value); | |
}); | |
return div; | |
}, | |
run: function() { | |
var self = QLu; | |
if($('FluJE_quick_lookup')){ | |
Effect.fadeio($('FluJE_quick_lookup'), function(){ | |
$('FluJE_quick_lookup_input').select(); | |
}); | |
return; | |
} | |
if(loadStyle(self.loaded, self.initCSS(), self.run)){ | |
self.loaded = true; | |
return; | |
} | |
var div = self.createNode(); | |
Effect.fadeio(div, function(){ | |
$('FluJE_quick_lookup_input').select(); | |
}); | |
} | |
} | |
//----------------------------------------------------------------------------- | |
// SETTING CONTROL | |
//----------------------------------------------------------------------------- | |
var Setting = { | |
_default: DefaultSettings(), | |
save: function() { | |
GM_setValue('settings', SETTINGS.toSource()); | |
}, | |
load: function(){ | |
try { | |
var s = eval(GM_getValue('settings')); | |
if(s.ver && s.ver == VERSION){ | |
SETTINGS = s; | |
return 1; | |
} | |
} catch(e) {} | |
Setting.reset(); | |
SETTINGS = this._default; | |
this.save(); | |
return 0; | |
}, | |
reset: function(args){ | |
switch(typeof args){ | |
case 'object': { | |
for(var i in args){ | |
var type = typeof args[i]; | |
if(type == 'object'){ | |
this.set(args[i], "default", false); | |
}else if(type == 'string'){ | |
this.set(args, "default", false); break; | |
}else { break; } | |
} | |
break; | |
} | |
case 'string': { this.set(args, "default", false); break; } | |
case 'undefined': { this.set(); break; } | |
default: break; | |
} | |
this.save(); | |
}, | |
set: function(name, value, bool){ | |
var d = this._default; | |
switch(typeof name){ | |
case 'object': { | |
if(name.length <= 2){ | |
if(value=='default') | |
(name.length===1) ? value = d[name[0]] : value = d[name[0]][name[1]]; | |
(name.length===1) ? SETTINGS[name[0]] = value : SETTINGS[name[0]][name[1]] = value; | |
}else { | |
var str = ""; | |
for(var n in name) | |
str += "[\'"+name[n]+"\']"; | |
if(value=="default") | |
value = eval("Setting._default" + str); | |
str = "SETTINGS" + str; | |
str += (typeof value == 'string') ? "=\'"+value.toString()+"\'" : "="+value.toString(); | |
eval(str); | |
} | |
break; | |
} | |
case 'string': { SETTINGS[name] = value; break; } | |
case 'undefined': { SETTINGS = this._default; break; } | |
default: break; | |
} | |
if(bool!=false){ this.save(); } | |
}, | |
setSite: function(lang, num, param, modifier_key){ | |
var n = null; | |
var sites = SITEINFO; | |
var t = sites[num].type; | |
var s = (t == 'dictionary' || t == 'search') ? 'lookup' : 'translation'; | |
if (!SETTINGS[s]) | |
SETTINGS = Setting._default; | |
n = SETTINGS[s]; | |
var lookup_type = (lang=='ja') ? 'ja_type' : 'en_type'; | |
if(param){ | |
if(modifier_key) | |
n[lang].unshift(num); | |
else | |
n[lang].push(num); | |
if(t=='dictionary'){ | |
if(!n[lookup_type]) n[lookup_type] = t; | |
}else if(t=='search'){ | |
n[lookup_type] = t; | |
} | |
}else{ | |
n[lang] = this.delArray(n[lang], num); | |
if(t == 'search'){ | |
var ck_search = false; | |
for(var i in n[lang]){ | |
if(sites[i].type == 'search'){ | |
ck_search = true; break; | |
} | |
n[lookup_type] = (ck_search) ? 'search' : 'dictionary'; | |
} | |
} | |
} | |
this.save(); | |
}, | |
delArray: function(array, num){ | |
var a = 0, b = null; | |
array.forEach(function(e){ | |
if(e==num){ | |
b = a; | |
} | |
a++; | |
}); | |
var array_new = new Array(); | |
array_new = array.slice(0,b); | |
for(var i = b;i<array.length-1;i++){ | |
array_new[i] = array[i+1]; | |
} | |
return array_new; | |
}, | |
} | |
//----------------------------------------------------------------------------- | |
// Shortcut Key | |
//----------------------------------------------------------------------------- | |
var ShortcutKey = { | |
sp: { | |
9: 'TAB', | |
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' | |
}, | |
ssp: { | |
8: 'BS', | |
10: 'RET', | |
13: 'RET', | |
32: 'SPC' | |
}, | |
add: function(elm, key, func, global) { | |
var sp = this.sp, ssp = this.ssp; | |
var keycode; | |
var m = []; | |
if(key) { | |
var keys = key.split(' '); | |
var position = 0; | |
var num = keys.length-1; | |
keys[position].replace(/^(?:([ACMS]{1,3})-)?(\w+)$/, function($0, $1, $2, $3) { | |
for(var i=0; i<$1.length; i++){ | |
var x = $1.charAt(i); | |
m.push(({ | |
C: "ctrl", | |
S: "shift", | |
A: "alt", | |
M: "meta" | |
})[x] + "Key"); | |
} | |
keycode = $2; | |
}); | |
elm.addEventListener('keypress', function(evt) { | |
var kc = ''; | |
if(evt.which) | |
kc = ssp[evt.which] || String.fromCharCode(evt.which).toLowerCase(); | |
else kc = sp[evt.keyCode]; | |
if(m.length) { | |
if((evt[m[0]] && (m[1]==undefined ? true : evt[m[1]]) && (m[2]==undefined ? true : evt[m[2]])) && kc==keycode) { | |
func(evt); | |
} | |
} else { | |
if(kc==keycode && !evt.shiftKey && !evt.altKey && !evt.ctrlKey && !evt.metaKey) { | |
if(global) func(evt); | |
else if(elm!=evt.target && /^(?:input|textarea)$/.test(evt.target.nodeName.toLowerCase())) return; | |
evt.preventDefault(); | |
func(evt); | |
} | |
} | |
}, false); | |
} else { | |
elm.addEventListener('keypress', func, false); | |
} | |
}, | |
get: function(elm, func) { | |
var sp = this.sp, ssp = this.ssp; | |
elm.addEventListener('keypress',function(evt){ | |
var key = []; | |
if(evt.ctrlKey) key.push('C'); | |
if(evt.shiftKey) key.push('S'); | |
if(evt.altKey) key.push('A'); | |
if(evt.metaKey) key.push('M'); | |
if(evt.ctrlKey || evt.shiftKey || evt.altKey || evt.metaKey) key.push('-'); | |
if(evt.which){ | |
var k = ssp[evt.which] || String.fromCharCode(evt.which).toLowerCase(); | |
key.push(k); | |
}else if(evt.keyCode){ | |
key.push(sp[evt.keyCode]); | |
} | |
if(key.length!=0) | |
func(evt, key.join('')); | |
evt.preventDefault(); | |
evt.stopPropagation(); | |
}, true); | |
}, | |
set: function(elm, sc_name, sc_index) { | |
this.get(elm, function(e, key){ | |
if(key=="ESC"){ | |
setTimeout(function(){ elm.value = key.toString(); }, 100); | |
}else{ | |
elm.value = key.toString(); | |
} | |
if(sc_name=='site') | |
Setting.set(['shortcutkey','site', sc_index, 'shortcutkey'], key); | |
else | |
Setting.set(['shortcutkey',sc_name], key); | |
elm.style.backgroundColor = '#CFC'; | |
setTimeout(function(){ elm.style.backgroundColor='#FFF'; }, 500); | |
}); | |
}, | |
} | |
var checkInputLang = function(num, lang){ | |
var site_lang = SITEINFO[num].lang; | |
switch(SITEINFO[num].lang) { | |
case 'both': return true; | |
case lang: return true; | |
default: return false; | |
} | |
} | |
//=== control number of sites === | |
var SiteNumElement = { | |
get: function(num, lang, format) { | |
var n = null; | |
var t = SITEINFO[num].type; | |
var s = (t == 'dictionary' || t == 'search') ? 'lookup' : 'translation'; | |
if(SETTINGS[s][lang]) | |
n = SETTINGS[s][lang]; | |
else { | |
var d = Setting._default; | |
n = d[s][lang]; | |
} | |
for(var i=0; i<n.length; i++){ | |
if(n[i]==num){ | |
if(format=='html') return "<span class='FluJE_site_number' title="+SITEINFO[i].name+" name="+num+" param='true' state='enable' evt='chenge_site_num'>"+(i+1).toString()+"</span>"; | |
else return $N('span', {class:'FluJE_site_number', title:SITEINFO[num].name, name: num, param: 'true', state:'enable', evt: 'chenge_site_num' }, (i+1).toString()); | |
} | |
} | |
if(checkInputLang(num, lang)){ | |
if(format=='html') return "<img class='FluJE_site_number' title="+SITEINFO[num].name+" name="+num+" param='false' state='enable' evt='chenge_site_num' src=\'"+IMAGES.o+"\'>"; | |
else return $N('img', {class:'FluJE_site_number', title:SITEINFO[num].name, name: num, param: 'false', state:'enable', evt: 'chenge_site_num', src:IMAGES.o}); | |
} | |
if(format=='html') return "<img class='FluJE_site_number' title="+SITEINFO[num].name+" name="+num+" param='false' state='disable' evt='chenge_site_num' src=\'"+IMAGES.x+"\'>"; | |
else return $N('img', {class:'FluJE_site_number', title:SITEINFO[num].name, name: num, param: 'false', state:'disable', evt: 'chenge_site_num', src:IMAGES.x}); | |
}, | |
replace: function(list, args, self, modifier_key) { | |
var lang = args.lang, sort = args.sort; | |
if(self){ | |
var elm = self.firstChild; | |
if(elm.getAttribute('state')=='disable') return; | |
Setting.setSite(lang, parseInt(elm.getAttribute('name'), 10), !eval(elm.getAttribute('param')), modifier_key); | |
} | |
var num = list.length; | |
for(var i=0; i<num; i++){ | |
if(list[i]){ | |
var id = list[i].getAttribute('site_id'); | |
if(list[i].hasChildNodes()) | |
list[i].removeChild(list[i].firstChild); | |
list[i].appendChild(this.get(parseInt(id, 10), lang)); | |
} | |
} | |
}, | |
check: function(tnode, pnode, modifier_key) { | |
if(tnode.getAttribute('state')!='enable') return; | |
tnode.getAttribute('name').match(/^([^:]+):(.*)$/); | |
var lang = RegExp.$1; | |
var type = RegExp.$2; | |
var sort = (type == 'translation') ? 'translation' : 'lookup'; | |
var node_list = $X('.//td[@class=\"FluJE_site_num_'+lang+'\"][@sort=\"'+sort+'\"]', pnode); | |
this.replace(node_list, {lang:lang, sort:sort}, tnode, modifier_key); | |
}, | |
} | |
var getIcon = function(num){ | |
if(num==undefined || SITEINFO.length<num) | |
return; | |
if(SITEINFO[num].icon) | |
return SITEINFO[num].icon; | |
else | |
return SITEINFO[num].url.match(new RegExp('http://[^/]+/', "i"))+'favicon.ico'; | |
} | |
//=== load Fast look up JP and EN === | |
if(document.body){ FluJE.onLoad(); } | |
//----------------------------------------------------------------------------- | |
// Library | |
//----------------------------------------------------------------------------- | |
//=== load CSS === | |
function loadStyle(flag, css, func) { | |
if(flag) | |
return false; | |
if(css) | |
addStyle(css); | |
if(func) { | |
setTimeout(func, 100); | |
return true; | |
} | |
} | |
//=== log for debug (display in firebug) === | |
function log() { | |
if(console) console.log.apply(console, Array.slice(arguments)); | |
} | |
//=== in place of gm_addstyle === | |
function addStyle(css,id) { | |
try{ | |
var link = document.createElement('link'); | |
link.rel = 'stylesheet'; | |
link.href = 'data:text/css,' + escape(css); | |
document.documentElement.childNodes[0].appendChild(link); | |
}catch(e){ | |
if(css) GM_addStyle(css); | |
} | |
} | |
//=== Escape Encoding === | |
function EscapeEncoding(type, str){ | |
switch(type){ | |
case 'EUC-JP': return EscapeEUCJP(str); | |
case 'Shift_JIS': return EscapeSJIS(str); | |
case 'UTF-8': return EscapeUTF8(str); | |
default: return str; | |
} | |
} | |
JCT11280=Function('var a="zKV33~jZ4zN=~ji36XazM93y!{~k2y!o~k0ZlW6zN?3Wz3W?{EKzK[33[`y|;-~j^YOTz$!~kNy|L1$353~jV3zKk3~k-4P4zK_2+~jY4y!xYHR~jlz$_~jk4z$e3X5He<0y!wy|X3[:~l|VU[F3VZ056Hy!nz/m1XD61+1XY1E1=1y|bzKiz!H034zKj~mEz#c5ZA3-3X$1~mBz$$3~lyz#,4YN5~mEz#{ZKZ3V%7Y}!J3X-YEX_J(3~mAz =V;kE0/y|F3y!}~m>z/U~mI~j_2+~mA~jp2;~m@~k32;~m>V}2u~mEX#2x~mBy+x2242(~mBy,;2242(~may->2&XkG2;~mIy-_2&NXd2;~mGz,{4<6:.:B*B:XC4>6:.>B*BBXSA+A:X]E&E<~r#z+625z s2+zN=`HXI@YMXIAXZYUM8X4K/:Q!Z&33 3YWX[~mB`{zKt4z (zV/z 3zRw2%Wd39]S11z$PAXH5Xb;ZQWU1ZgWP%3~o@{Dgl#gd}T){Uo{y5_d{e@}C(} WU9|cB{w}bzvV|)[} H|zT}d||0~{]Q|(l{|x{iv{dw}(5}[Z|kuZ }cq{{y|ij}.I{idbof%cu^d}Rj^y|-M{ESYGYfYsZslS`?ZdYO__gLYRZ&fvb4oKfhSf^d<Yeasc1f&a=hnYG{QY{D`Bsa|u,}Dl|_Q{C%xK|Aq}C>|c#ryW=}eY{L+`)][YF_Ub^h4}[X|?r|u_ex}TL@YR]j{SrXgo*|Gv|rK}B#mu{R1}hs|dP{C7|^Qt3|@P{YVV |8&}#D}ef{e/{Rl|>Hni}R1{Z#{D[}CQlQ||E}[s{SG_+i8eplY[=[|ec[$YXn#`hcm}YR|{Ci(_[ql|?8p3]-}^t{wy}4la&pc|3e{Rp{LqiJ],] `kc(]@chYnrM`O^,ZLYhZB]ywyfGY~aex!_Qww{a!|)*lHrM{N+n&YYj~Z b c#e_[hZSon|rOt`}hBXa^i{lh|<0||r{KJ{kni)|x,|0auY{D!^Sce{w;|@S|cA}Xn{C1h${E]Z-XgZ*XPbp]^_qbH^e[`YM|a||+=]!Lc}]vdBc=j-YSZD]YmyYLYKZ9Z>Xcczc2{Yh}9Fc#Z.l{}(D{G{{mRhC|L3b#|xK[Bepj#ut`H[,{E9Yr}1b{[e]{ZFk7[ZYbZ0XL]}Ye[(`d}c!|*y`Dg=b;gR]Hm=hJho}R-[n}9;{N![7k_{UbmN]rf#pTe[x8}!Qcs_rs[m`|>N}^V})7{^r|/E}),}HH{OYe2{Skx)e<_.cj.cjoMhc^d}0uYZd!^J_@g,[[[?{i@][|3S}Yl3|!1|eZ|5IYw|1D}e7|Cv{OHbnx-`wvb[6[4} =g+k:{C:}ed{S]|2M]-}WZ|/q{LF|dYu^}Gs^c{Z=}h>|/i|{W]:|ip{N:|zt|S<{DH[p_tvD{N<[8Axo{X4a.^o^X>Yfa59`#ZBYgY~_t^9`jZHZn`>G[oajZ;X,i)Z.^~YJe ZiZF^{][[#Zt^|]Fjx]&_5dddW]P0C[-]}]d|y {C_jUql] |OpaA[Z{lp|rz}:Mu#]_Yf6{Ep?f5`$[6^D][^u[$[6^.Z8]]ePc2U/=]K^_+^M{q*|9tYuZ,s(dS{i=|bNbB{uG}0jZOa:[-]dYtu3]:]<{DJ_SZIqr_`l=Yt`gkTnXb3d@kiq0a`Z{|!B|}e}Ww{Sp,^Z|0>_Z}36|]A|-t}lt{R6pi|v8hPu#{C>YOZHYmg/Z4nicK[}hF_Bg|YRZ7c|crkzYZY}_iXcZ.|)U|L5{R~qi^Uga@Y[xb}&qdbd6h5|Btw[}c<{Ds53[Y7]?Z<|e0{L[ZK]mXKZ#Z2^tavf0`PE[OSOaP`4gi`qjdYMgys/?[nc,}EEb,eL]g[n{E_b/vcvgb.{kcwi`~v%|0:|iK{Jh_vf5lb}KL|(oi=LrzhhY_^@`zgf[~g)[J_0fk_V{T)}I_{D&_/d9W/|MU[)f$xW}?$xr4<{Lb{y4}&u{XJ|cm{Iu{jQ}CMkD{CX|7A}G~{kt)nB|d5|<-}WJ}@||d@|Iy}Ts|iL|/^|no|0;}L6{Pm]7}$zf:|r2}?C_k{R(}-w|`G{Gy[g]bVje=_0|PT{^Y^yjtT[[[l!Ye_`ZN]@[n_)j3nEgMa]YtYpZy].d-Y_cjb~Y~[nc~sCi3|zg}B0}do{O^{|$`_|D{}U&|0+{J3|8*]iayx{a{xJ_9|,c{Ee]QXlYb]$[%YMc*]w[aafe]aVYi[fZEii[xq2YQZHg]Y~h#|Y:thre^@^|_F^CbTbG_1^qf7{L-`VFx Zr|@EZ;gkZ@slgko`[e}T:{Cu^pddZ_`yav^Ea+[#ZBbSbO`elQfLui}.F|txYcbQ`XehcGe~fc^RlV{D_0ZAej[l&jShxG[ipB_=u:eU}3e8[=j|{D(}dO{Do[BYUZ0/]AYE]ALYhZcYlYP/^-^{Yt_1_-;YT`P4BZG=IOZ&]H[e]YYd[9^F[1YdZxZ?Z{Z<]Ba2[5Yb[0Z4l?]d_;_)a?YGEYiYv`_XmZs4ZjY^Zb]6gqGaX^9Y}dXZr[g|]Y}K aFZp^k^F]M`^{O1Ys]ZCgCv4|E>}8eb7}l`{L5[Z_faQ|c2}Fj}hw^#|Ng|B||w2|Sh{v+[G}aB|MY}A{|8o}X~{E8paZ:]i^Njq]new)`-Z>haounWhN}c#{DfZ|fK]KqGZ=:u|fqoqcv}2ssm}.r{]{nIfV{JW)[K|,Z{Uxc|]l_KdCb%]cfobya3`p}G^|LZiSC]U|(X|kBlVg[kNo({O:g:|-N|qT}9?{MBiL}Sq{`P|3a|u.{Uaq:{_o|^S}jX{Fob0`;|#y_@[V[K|cw[<_ }KU|0F}d3|et{Q7{LuZttsmf^kYZ`Af`}$x}U`|Ww}d]| >}K,r&|XI|*e{C/a-bmr1fId4[;b>tQ_:]hk{b-pMge]gfpo.|(w[jgV{EC1Z,YhaY^q,_G[c_g[J0YX]`[h^hYK^_Yib,` {i6vf@YM^hdOKZZn(jgZ>bzSDc^Z%[[o9[2=/YHZ(_/Gu_`*|8z{DUZxYt^vuvZjhi^lc&gUd4|<UiA`z]$b/Z?l}YI^jaHxe|;F}l${sQ}5g}hA|e4}?o{ih}Uz{C)jPe4]H^J[Eg[|AMZMlc}:,{iz}#*|gc{Iq|/:|zK{l&}#u|myd{{M&v~nV};L|(g|I]ogddb0xsd7^V})$uQ{HzazsgxtsO^l}F>ZB]r|{7{j@cU^{{CbiYoHlng]f+nQ[bkTn/}<-d9q {KXadZYo+n|l[|lc}V2{[a{S4Zam~Za^`{HH{xx_SvF|ak=c^[v^7_rYT`ld@]:_ub%[$[m](Shu}G2{E.ZU_L_R{tz`vj(f?^}hswz}GdZ}{S:h`aD|?W|`dgG|if{a8|J1{N,}-Ao3{H#{mfsP|[ bzn+}_Q{MT{u4kHcj_q`eZj[8o0jy{p7}C|[}l){MuYY{|Ff!Ykn3{rT|m,^R|,R}$~Ykgx{P!]>iXh6[l[/}Jgcg{JYZ.^qYfYIZl[gZ#Xj[Pc7YyZD^+Yt;4;`e8YyZVbQ7YzZxXja.7SYl[s]2^/Ha$[6ZGYrb%XiYdf2]H]kZkZ*ZQ[ZYS^HZXcCc%Z|[(bVZ]]:OJQ_DZCg<[,]%Zaa [g{C00HY[c%[ChyZ,Z_`PbXa+eh`^&jPi0a[ggvhlekL]w{Yp^v}[e{~;k%a&k^|nR_z_Qng}[E}*Wq:{k^{FJZpXRhmh3^p>de^=_7`|ZbaAZtdhZ?n4ZL]u`9ZNc3g%[6b=e.ZVfC[ZZ^^^hD{E(9c(kyZ=bb|Sq{k`|vmr>izlH[u|e`}49}Y%}FT{[z{Rk}Bz{TCc/lMiAqkf(m$hDc;qooi[}^o:c^|Qm}a_{mrZ(pA`,}<2sY| adf_%|}`}Y5U;}/4|D>|$X{jw{C<|F.hK|*A{MRZ8Zsm?imZm_?brYWZrYx`yVZc3a@f?aK^ojEd {bN}/3ZH]/$YZhm^&j 9|(S|b]mF}UI{q&aM]LcrZ5^.|[j`T_V_Gak}9J[ ZCZD|^h{N9{~&[6Zd{}B}2O|cv]K}3s}Uy|l,fihW{EG`j_QOp~Z$F^zexS`dcISfhZBXP|.vn|_HYQ|)9|cr]<`&Z6]m_(ZhPcSg>`Z]5`~1`0Xcb4k1{O!bz|CN_T{LR|a/gFcD|j<{Z._[f)mPc:1`WtIaT1cgYkZOaVZOYFrEe[}T$}Ch}mk{K-^@]fH{Hdi`c*Z&|Kt{if[C{Q;{xYB`dYIX:ZB[}]*[{{p9|4GYRh2ao{DS|V+[zd$`F[ZXKadb*A] Ys]Maif~a/Z2bmclb8{Jro_rz|x9cHojbZ{GzZx_)]:{wAayeDlx}<=`g{H1{l#}9i|)=|lP{Qq}.({La|!Y{i2EZfp=c*}Cc{EDvVB|;g}2t{W4av^Bn=]ri,|y?|3+}T*ckZ*{Ffr5e%|sB{lx^0]eZb]9[SgAjS_D|uHZx]dive[c.YPkcq/}db{EQh&hQ|eg}G!ljil|BO]X{Qr_GkGl~YiYWu=c3eb}29v3|D|}4i||.{Mv})V{SP1{FX}CZW6{cm|vO{pS|e#}A~|1i}81|Mw}es|5[}3w{C`h9aL]o{}p[G`>i%a1Z@`Ln2bD[$_h`}ZOjhdTrH{[j_:k~kv[Sdu]CtL}41{I |[[{]Zp$]XjxjHt_eThoa#h>sSt8|gK|TVi[Y{t=}Bs|b7Zpr%{gt|Yo{CS[/{iteva|cf^hgn}($_c^wmb^Wm+|55jrbF|{9^ q6{C&c+ZKdJkq_xOYqZYSYXYl`8]-cxZAq/b%b*_Vsa[/Ybjac/OaGZ4fza|a)gY{P?| I|Y |,pi1n7}9bm9ad|=d{aV|2@[(}B`d&|Uz}B}{`q|/H|!JkM{FU|CB|.{}Az}#P|lk}K{|2rk7{^8^?`/|k>|Ka{Sq}Gz}io{DxZh[yK_#}9<{TRdgc]`~Z>JYmYJ]|`!ZKZ]gUcx|^E[rZCd`f9oQ[NcD_$ZlZ;Zr}mX|=!|$6ZPZYtIo%fj}CpcN|B,{VDw~gb}@hZg`Q{LcmA[(bo`<|@$|o1|Ss}9Z_}tC|G`{F/|9nd}i=}V-{L8aaeST]daRbujh^xlpq8|}zs4bj[S`J|]?G{P#{rD{]I`OlH{Hm]VYuSYUbRc*6[j`8]pZ[bt_/^Jc*[<Z?YE|Xb|?_Z^Vcas]h{t9|Uwd)_(=0^6Zb{Nc} E[qZAeX[a]P^|_J>e8`W^j_Y}R{{Jp__]Ee#e:iWb9q_wKbujrbR}CY`,{mJ}gz{Q^{t~N|? gSga`V_||:#mi}3t|/I`X{N*|ct|2g{km}gi|{={jC}F;|E}{ZZjYf*frmu}8Tdroi{T[|+~}HG{cJ}DM{Lp{Ctd&}$hi3|FZ| m}Kr|38}^c|m_|Tr{Qv|36}?Up>|;S{DV{k_as}BK{P}}9p|t`jR{sAm4{D=b4pWa[}Xi{EjwEkI}3S|E?u=X0{jf} S|NM|JC{qo^3cm]-|JUx/{Cj{s>{Crt[UXuv|D~|j|d{YXZR}Aq}0r}(_{pJfi_z}0b|-vi)Z mFe,{f4|q`b{}^Z{HM{rbeHZ|^x_o|XM|L%|uFXm}@C_{{Hhp%a7|0p[Xp+^K}9U{bP}: tT}B|}+$|b2|[^|~h{FAby[`{}xgygrt~h1[li`c4vz|,7p~b(|mviN}^pg[{N/|g3|^0c,gE|f%|7N{q[|tc|TKA{LU}I@|AZp(}G-sz{F |qZ{}F|f-}RGn6{Z]_5})B}UJ{FFb2]4ZI@v=k,]t_Dg5Bj]Z-]L]vrpdvdGlk|gF}G]|IW}Y0[G| /bo|Te^,_B}#n^^{QHYI[?hxg{[`]D^IYRYTb&kJ[cri[g_9]Ud~^_]<p@_e_XdNm-^/|5)|h_{J;{kacVopf!q;asqd}n)|.m|bf{QW|U)}b+{tL|w``N|to{t ZO|T]jF}CB|0Q{e5Zw|k |We}5:{HO{tPwf_uajjBfX}-V_C_{{r~gg|Ude;s+}KNXH}! `K}eW{Upwbk%ogaW}9EYN}YY|&v|SL{C3[5s.]Y]I]u{M6{pYZ`^,`ZbCYR[1mNg>rsk0Ym[jrE]RYiZTr*YJ{Ge|%-lf|y(`=[t}E6{k!|3)}Zk} ][G{E~cF{u3U.rJ|a9p#o#ZE|?|{sYc#vv{E=|LC}cu{N8`/`3`9rt[4|He{cq|iSYxY`}V |(Q|t4{C?]k_Vlvk)BZ^r<{CL}#h}R+[<|i=}X|{KAo]|W<`K{NW|Zx}#;|fe{IMr<|K~tJ_x}AyLZ?{GvbLnRgN}X&{H7|x~}Jm{]-| GpNu0}.ok>|c4{PYisrDZ|fwh9|hfo@{H~XSbO]Odv]%`N]b1Y]]|eIZ}_-ZA]aj,>eFn+j[aQ_+]h[J_m_g]%_wf.`%k1e#Z?{CvYu_B^|gk`Xfh^M3`afGZ-Z|[m{L}|k3cp[it ^>YUi~d>{T*}YJ{Q5{Jxa$hg|%4`}|LAgvb }G}{P=|<;Ux{_skR{cV|-*|s-{Mp|XP|$G|_J}c6cM{_=_D|*9^$ec{V;|4S{qO|w_|.7}d0|/D}e}|0G{Dq]Kdp{}dfDi>}B%{Gd|nl}lf{C-{y}|ANZr}#={T~|-(}c&{pI|ft{lsVP}){|@u}!W|bcmB{d?|iW|:dxj{PSkO|Hl]Li:}VYk@|2={fnWt{M3`cZ6|)}|Xj}BYa?vo{e4|L7|B7{L7|1W|lvYO}W8nJ|$Vih|{T{d*_1|:-n2dblk``fT{Ky|-%}m!|Xy|-a{Pz}[l{kFjz|iH}9N{WE{x,|jz}R {P|{D)c=nX|Kq|si}Ge{sh|[X{RF{t`|jsr*fYf,rK|/9}$}}Nf{y!1|<Std}4Wez{W${Fd_/^O[ooqaw_z[L`Nbv[;l7V[ii3_PeM}.h^viqYjZ*j1}+3{bt{DR[;UG}3Og,rS{JO{qw{d<_zbAh<R[1_r`iZTbv^^a}c{iEgQZ<exZFg.^Rb+`Uj{a+{z<[~r!]`[[|rZYR|?F|qppp]L|-d|}K}YZUM|=Y|ktm*}F]{D;g{uI|7kg^}%?Z%ca{N[_<q4xC]i|PqZC]n}.bDrnh0Wq{tr|OMn6tM|!6|T`{O`|>!]ji+]_bTeU}Tq|ds}n|{Gm{z,f)}&s{DPYJ`%{CGd5v4tvb*hUh~bf]z`jajiFqAii]bfy^U{Or|m+{I)cS|.9k:e3`^|xN}@Dnlis`B|Qo{`W|>||kA}Y}{ERYuYx`%[exd`]|OyiHtb}HofUYbFo![5|+]gD{NIZR|Go}.T{rh^4]S|C9_}xO^i`vfQ}C)bK{TL}cQ|79iu}9a];sj{P.o!f[Y]pM``Jda^Wc9ZarteBZClxtM{LW}l9|a.mU}KX}4@{I+f1}37|8u}9c|v${xGlz}jP{Dd1}e:}31}%3X$|22i<v+r@~mf{sN{C67G97855F4YL5}8f{DT|xy{sO{DXB334@55J1)4.G9A#JDYtXTYM4, YQD9;XbXm9SX]IB^4UN=Xn<5(;(F3YW@XkH-X_VM[DYM:5XP!T&Y`6|,^{IS-*D.H>:LXjYQ0I3XhAF:9:(==.F*3F1189K/7163D,:@|e2{LS36D4hq{Lw/[email protected]:0307::6D7}&l{Mx657;89;,K5678H&93D(H<&<>0B90X^I;}Ag1{P%3A+>><975}[S{PZE453?4|T2{Q+5187;>447:81{C=hL6{Me^:=7ii{R=.=F<81;48?|h8}Uh{SE|,VxL{ST,7?9Y_5Xk3A#:$%YSYdXeKXOD8+TXh7(@>(YdXYHXl9J6X_5IXaL0N?3YK7Xh!1?XgYz9YEXhXaYPXhC3X`-YLY_XfVf[EGXZ5L8BXL9YHX]SYTXjLXdJ: YcXbQXg1PX]Yx4|Jr{Ys4.8YU+XIY`0N,<H%-H;:0@,74/:8546I=9177154870UC]d<C3HXl7ALYzXFXWP<<?E!88E5@03YYXJ?YJ@6YxX-YdXhYG|9o{`iXjY_>YVXe>AYFX[/(I@0841?):-B=14337:8=|14{c&93788|di{cW-0>0<097/A;N{FqYpugAFT%X/Yo3Yn,#=XlCYHYNX[Xk3YN:YRT4?)-YH%A5XlYF3C1=NWyY}>:74-C673<69545v {iT85YED=64=.F4..9878/D4378?48B3:7:7/1VX[f4{D,{l<5E75{dAbRB-8-@+;DBF/$ZfW8S<4YhXA.(5@*11YV8./S95C/0R-A4AXQYI7?68167B95HA1*<M3?1/@;/=54XbYP36}lc{qzSS38:19?,/39193574/66878Yw1X-87E6=;964X`T734:>86>1/=0;(I-1::7ALYGXhF+Xk[@W%TYbX7)KXdYEXi,H-XhYMRXfYK?XgXj.9HX_SX]YL1XmYJ>Y}WwIXiI-3-GXcYyXUYJ$X`Vs[7;XnYEZ;XF! 3;%8;PXX(N3Y[)Xi1YE&/ :;74YQ6X`33C;-(>Xm0(TYF/!YGXg8 9L5P01YPXO-5%C|qd{{/K/E6,=0144:361:955;6443@?B7*7:F89&F35YaX-CYf,XiFYRXE_e{}sF 0*7XRYPYfXa5YXXY8Xf8Y~XmA[9VjYj*#YMXIYOXk,HHX40YxYMXU8OXe;YFXLYuPXP?EB[QV0CXfY{:9XV[FWE0D6X^YVP*$4%OXiYQ(|xp|%c3{}V`1>Y`XH00:8/M6XhQ1:;3414|TE|&o@1*=81G8<3}6<|(f6>>>5-5:8;093B^3U*+*^*UT30XgYU&7*O1953)5@E78--F7YF*B&0:%P68W9Zn5974J9::3}Vk|-,C)=)1AJ4+<3YGXfY[XQXmT1M-XcYTYZXCYZXEYXXMYN,17>XIG*SaS|/eYJXbI?XdNZ+WRYP<F:R PXf;0Xg`$|1GX9YdXjLYxWX!ZIXGYaXNYm6X9YMX?9EXmZ&XZ#XQ>YeXRXfAY[4 ;0X!Zz0XdN$XhYL XIY^XGNXUYS/1YFXhYk.TXn4DXjB{jg|4DEX]:XcZMW=A.+QYL<LKXc[vV$+&PX*Z3XMYIXUQ:ZvW< YSXFZ,XBYeXMM)?Xa XiZ4/EXcP3%}&-|6~:1(-+YT$@XIYRBC<}&,|7aJ6}bp|8)K1|Xg|8C}[T|8Q.89;-964I38361<=/;883651467<7:>?1:.}le|:Z=39;1Y^)?:J=?XfLXbXi=Q0YVYOXaXiLXmJXO5?.SFXiCYW}-;|=u&D-X`N0X^,YzYRXO(QX_YW9`I|>hZ:N&X)DQXP@YH#XmNXi$YWX^=!G6YbYdX>XjY|XlX^XdYkX>YnXUXPYF)FXT[EVTMYmYJXmYSXmNXi#GXmT3X8HOX[ZiXN]IU2>8YdX1YbX<YfWuZ8XSXcZU%0;1XnXkZ_WTG,XZYX5YSX Yp 05G?XcYW(IXg6K/XlYP4XnI @XnO1W4Zp-9C@%QDYX+OYeX9>--YSXkD.YR%Q/Yo YUX].Xi<HYEZ2WdCE6YMXa7F)=,D>-@9/8@5=?7164;35387?N<618=6>7D+C50<6B03J0{Hj|N9$D,9I-,.KB3}m |NzE0::/81YqXjMXl7YG; [.W=Z0X4XQY]:MXiR,XgM?9$9>:?E;YE77VS[Y564760391?14941:0=:8B:;/1DXjFA-564=0B3XlH1+D85:0Q!B#:-6&N/:9<-R3/7Xn<*3J4.H:+334B.=>30H.;3833/76464665755:/83H6633:=;.>5645}&E|Y)?1/YG-,93&N3AE@5 <L1-G/8A0D858/30>8<549=@B8] V0[uVQYlXeD(P#ID&7T&7;Xi0;7T-$YE)E=1:E1GR):--0YI7=E<}n9|aT6783A>D7&4YG7=391W;Zx<5+>F#J39}o/|cc;6=A050EQXg8A1-}D-|d^5548083563695D?-.YOXd37I$@LYLWeYlX<Yd+YR A$;3-4YQ-9XmA0!9/XLY_YT(=5XdDI>YJ5XP1ZAW{9>X_6R(XhYO65&J%DA)C-!B:97#A9;@?F;&;(9=11/=657/H,<8}bz|j^5446>.L+&Y^8Xb6?(CYOXb*YF(8X`FYR(XPYVXmPQ%&DD(XmZXW??YOXZXfCYJ79,O)XnYF7K0!QXmXi4IYFRXS,6<%-:YO(+:-3Q!1E1:W,Zo}Am|n~;3580534*?3Zc4=9334361693:30C<6/717:<1/;>59&:4}6!|rS36=1?75<8}[B|s809983579I.A.>84758=108564741H*9E{L{|u%YQ<%6XfH.YUXe4YL@,>N}Tv|ve*G0X)Z;/)3@A74(4P&A1X:YVH97;,754*A66:1 D739E3553545558E4?-?K17/770843XAYf838A7K%N!YW4.$T19Z`WJ*0XdYJXTYOXNZ 1XaN1A+I&Xi.Xk3Z3GB&5%WhZ1+5#Y[X<4YMXhQYoQXVXbYQ8XSYUX4YXBXWDMG0WxZA[8V+Z8X;D],Va$%YeX?FXfX[XeYf<X:Z[WsYz8X_Y]%XmQ(!7BXIZFX]&YE3F$(1XgYgYE& +[+W!<YMYFXc;+PXCYI9YrWxGXY9DY[!GXiI7::)OC;*$.>N*HA@{C|}&k=:<TB83X`3YL+G4XiK]i}(fYK<=5$.FYE%4*5*H*6XkCYL=*6Xi6!Yi1KXR4YHXbC8Xj,B9ZbWx/XbYON#5B}Ue}+QKXnF1&YV5XmYQ0!*3IXBYb71?1B75XmF;0B976;H/RXU:YZX;BG-NXj;XjI>A#D3B636N;,*%<D:0;YRXY973H5)-4FXOYf0:0;/7759774;7;:/855:543L43<?6=E,.A4:C=L)%4YV!1(YE/4YF+ F3%;S;&JC:%/?YEXJ4GXf/YS-EXEYW,9;E}X$}547EXiK=51-?71C%?57;5>463553Zg90;6447?<>4:9.7538XgN{|!}9K/E&3-:D+YE1)YE/3;37/:05}n<}:[email protected]=.(A Q3%6K>3(P3#AYE$-6H/456*C=.XHY[#S.<780191;057C)=6HXj?955B:K1 E>-B/9,;5.!L?:0>/.@//:;7833YZ56<4:YE=/:7Z_WGC%3I6>XkC*&NA16X=Yz2$X:Y^&J48<99k8}CyB-61<18K946YO4{|N}E)YIB9K0L>4=46<1K0+R;6-=1883:478;4,S+3YJX`GJXh.Yp+Xm6MXcYpX(>7Yo,/:X=Z;Xi0YTYHXjYmXiXj;*;I-8S6N#XgY}.3XfYGO3C/$XjL$*NYX,1 6;YH&<XkK9C#I74.>}Hd`A748X[T450[n75<4439:18A107>|ET}Rf<1;14876/Yb983E<5.YNXd4149>,S=/4E/<306443G/06}0&}UkYSXFYF=44=-5095=88;63844,9E6644{PL}WA8:>)7+>763>>0/B3A545CCnT}Xm|dv}Xq1L/YNXk/H8;;.R63351YY747@15YE4J8;46;.38.>4A369.=-83,;Ye3?:[email protected]+N353;/;@(X[YYD>@/05-I*@.:551741Yf5>6A443<3535;.58/86=D4753442$635D1>0359NQ @73:3:>><Xn?;43C14 ?Y|X611YG1&<+,4<*,YLXl<1/AIXjF*N89A4Z576K1XbJ5YF.ZOWN.YGXO/YQ01:4G38Xl1;KI0YFXB=R<7;D/,/4>;$I,YGXm94@O35Yz66695385.>:6A#5}W7n^4336:4157597434433<3|XA}m`>=D>:4A.337370?-6Q96{`E|4A}C`|Qs{Mk|J+~r>|o,wHv>Vw}!c{H!|Gb|*Ca5}J||,U{t+{CN[!M65YXOY_*B,Y[Z9XaX[QYJYLXPYuZ%XcZ8LY[SYPYKZM<LMYG9OYqSQYM~[e{UJXmQYyZM_)>YjN1~[f3{aXFY|Yk:48YdH^NZ0|T){jVFYTZNFY^YTYN~[h{nPYMYn3I]`EYUYsYIZEYJ7Yw)YnXPQYH+Z.ZAZY]^Z1Y`YSZFZyGYHXLYG 8Yd#4~[i|+)YH9D?Y^F~Y7|-eYxZ^WHYdYfZQ~[j|3>~[k|3oYmYqY^XYYO=Z*4[]Z/OYLXhZ1YLZIXgYIHYEYK,<Y`YEXIGZI[3YOYcB4SZ!YHZ*&Y{Xi3~[l|JSY`Zz?Z,~[m|O=Yi>??XnYWXmYS617YVYIHZ(Z4[~L4/=~[n|Yu{P)|];YOHHZ}~[o33|a>~[r|aE]DH~[s|e$Zz~[t|kZFY~XhYXZB[`Y}~[u|{SZ&OYkYQYuZ2Zf8D~[v}% ~[w3},Q[X]+YGYeYPIS~[y}4aZ!YN^!6PZ*~[z}?E~[{3}CnZ=~[}}EdDZz/9A3(3S<,YR8.D=*XgYPYcXN3Z5 4)~[~}JW=$Yu.XX~] }KDX`PXdZ4XfYpTJLY[F5]X~[2Yp}U+DZJ::<446[m@~]#3}]1~]%}^LZwZQ5Z`/OT<Yh^ -~]&}jx[ ~m<z!%2+~ly4VY-~o>}p62yz!%2+Xf2+~ly4VY-zQ`z (=] 2z~o2",C={" ":0,"!":1},c=34,i=2,p,s="",u=String.fromCharCode,t=u(12539);while(++c<127)C[u(c)]=c^39&&c^92?i++:0;i=0;while(0<=(c=C[a.charAt(i++)]))if(16==c)if((c=C[a.charAt(i++)])<87){if(86==c)c=1879;while(c--)s+=u(++p)}else s+=s.substr(8272,360);else if(c<86)s+=u(p+=c<51?c-16:(c-55)*92+C[a.charAt(i++)]);else if((c=((c-86)*92+C[a.charAt(i++)])*92+C[a.charAt(i++)])<49152)s+=u(p=c<40960?c:c|57344);else{c&=511;while(c--)s+=t;p=12539}return s')(); | |
JCT8836=JCT11280.substring(0,8836); | |
function EscapeEUCJP(str){ | |
return str.replace(/[^*+.-9A-Z_a-z-]/g,function(s){ | |
var c=s.charCodeAt(0); | |
return (c<128?(c<16?"%0":"%")+c.toString(16):65376<c&&c<65440?"%8E%"+(c-65216).toString(16):(c=JCT8836.indexOf(s))<0?"%A1%A6":"%"+((c-(c%=94))/94+161).toString(16)+"%"+(c+161).toString(16)).toUpperCase() | |
}) | |
}; | |
function EscapeSJIS(str){ | |
return str.replace(/[^*+.-9A-Z_a-z-]/g,function(s){ | |
var c=s.charCodeAt(0),m; | |
return c<128?(c<16?"%0":"%")+c.toString(16).toUpperCase():65376<c&&c<65440?"%"+(c-65216).toString(16).toUpperCase():(c=JCT11280.indexOf(s))<0?"%81E":"%"+((m=((c<8272?c:(c=JCT11280.lastIndexOf(s)))-(c%=188))/188)<31?m+129:m+193).toString(16).toUpperCase()+(64<(c+=c<63?64:65)&&c<91||95==c||96<c&&c<123?String.fromCharCode(c):"%"+c.toString(16).toUpperCase()) | |
}) | |
}; | |
function EscapeUTF8(str){ | |
return str.replace(/[^*+.-9A-Z_a-z-]/g,function(s){ | |
var c=s.charCodeAt(0); | |
return (c<16?"%0"+c.toString(16):c<128?"%"+c.toString(16):c<2048?"%"+(c>>6|192).toString(16)+"%"+(c&63|128).toString(16):"%"+(c>>12|224).toString(16)+"%"+(c>>6&63|128).toString(16)+"%"+(c&63|128).toString(16)).toUpperCase() | |
}) | |
}; | |
//=== like prototype.js === | |
function $(id){ | |
return document.getElementById(id); | |
} | |
function $N(name, attr, childs) { | |
var ret = document.createElement(name); | |
for (var k in attr) { | |
if (!attr.hasOwnProperty(k)) continue; | |
v = attr[k]; | |
if (k == "class") { | |
ret.className = v; | |
} else { | |
ret.setAttribute(k, v); | |
} | |
} | |
switch (typeof childs) { | |
case "string": { | |
ret.appendChild(document.createTextNode(childs)); | |
break; | |
} | |
case "object": { | |
for (var i = 0, len = childs.length; i < len; i++) { | |
var child = childs[i]; | |
if (typeof child == "string") { | |
ret.appendChild(document.createTextNode(child)); | |
} else { | |
ret.appendChild(child); | |
} | |
} | |
break; | |
} | |
} | |
return ret; | |
} | |
//=== extend version of $X === | |
/* $X(exp); | |
$X(exp, context); | |
$X(exp, type); | |
$X(exp, context, type); | |
http://coderepos.org/share/browser/lang/javascript/userscripts/jautopagerize.user.js?rev=1966 */ | |
function $X (exp, context, type /* want type */) { | |
if (arguments.callee.forceRelative || navigator.userAgent.indexOf("Safari/523.12") != -1) | |
exp = exp.replace(/id\(\s*(["'])([^"']+)\1\s*\)/g, '//*[@id="$2"]'); | |
if (arguments.callee.forceRelative) | |
exp = exp.indexOf("(//") == 0 | |
? "(.//" + exp.substring(3) | |
: (exp[0] == "/" ? "." : "./") + exp; | |
if (typeof context == "function") { | |
type = context; | |
context = null; | |
} | |
if (!context) context = document; | |
exp = (context.ownerDocument || context).createExpression(exp, function (prefix) { | |
return document.createNSResolver((context.ownerDocument == null ? context | |
: context.ownerDocument).documentElement) | |
.lookupNamespaceURI(prefix) || document.documentElement.namespaceURI; | |
}); | |
switch (type) { | |
case String: | |
return exp.evaluate(context, XPathResult.STRING_TYPE, null).stringValue; | |
case Number: | |
return exp.evaluate(context, XPathResult.NUMBER_TYPE, null).numberValue; | |
case Boolean: | |
return exp.evaluate(context, XPathResult.BOOLEAN_TYPE, null).booleanValue; | |
case Array: | |
var result = exp.evaluate(context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); | |
var ret = []; | |
for (var i = 0, len = result.snapshotLength; i < len; i++) { | |
ret.push(result.snapshotItem(i)); | |
} | |
return ret; | |
case undefined: | |
var result = exp.evaluate(context, XPathResult.ANY_TYPE, null); | |
switch (result.resultType) { | |
case XPathResult.STRING_TYPE : return result.stringValue; | |
case XPathResult.NUMBER_TYPE : return result.numberValue; | |
case XPathResult.BOOLEAN_TYPE: return result.booleanValue; | |
case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: { | |
/* not ensure the order. */ | |
var ret = []; | |
var i = null; | |
while (i = result.iterateNext()) { | |
ret.push(i); | |
} | |
return ret; | |
} | |
} | |
return null; | |
default: | |
throw(TypeError("$X: specified type is not valid type.")); | |
} | |
} | |
//=== HTML -> DOM === | |
function convertToHTMLDocument(html) { | |
var xml_str = [ | |
'<?xml version="1.0"?>', | |
'<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">', | |
'<output method="html"/>', | |
'</stylesheet>' | |
].join('\n'); | |
var xsl = (new DOMParser()).parseFromString(xml_str, 'text/xml'); | |
var xsltp = new XSLTProcessor(); | |
xsltp.importStylesheet(xsl); | |
var doc = xsltp.transformToDocument(document.implementation.createDocument("", "", null)); | |
doc.appendChild(doc.createElement("html")); | |
var range = doc.createRange(); | |
range.selectNodeContents(doc.documentElement); | |
doc.documentElement.appendChild(range.createContextualFragment(html)); | |
return doc; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment