Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save shishi/526511 to your computer and use it in GitHub Desktop.
Save shishi/526511 to your computer and use it in GitHub Desktop.
// ==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