Jp Meta
http://topia.wikidot.com/jp-meta/code_/1
<head> <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0"/> <script src="./2" defer></script><!--config--> <script src="./3" defer></script> <link rel="stylesheet" href="./4"/> </head> <body> <input type="text" id="que" /> <ul id="list"></ul> <pre id="progress">Awaiting fetching...</pre> <script> if(window !== window.parent) { var site = `http://${document.referrer.split("http://")[1].split("/")[0]}/`; var _wrap = document.createElement("div"); document.body.appendChild(_wrap); var _old= 0; var url = location.href.replace(/^.*\//,'/'); (function _f() { var _new = _wrap.getBoundingClientRect().top; if(_new !== _old){ var iframe = document.createElement("iframe"); var _rand = String(Math.floor(Math.random() * 10000)); _wrap.innerHTML = ''; iframe.src = `${site}common--javascript/resize-iframe.html?${_rand}#${_new}${url}`; iframe.style.display = "none"; _wrap.appendChild(iframe); _old = _new; } setTimeout(_f, 250); })(); } </script> </body>
var CONFIG = { PROG: document.querySelector('#progress'), LIST: document.querySelector('#list'), QUE: document.querySelector('#que') }
var WIKI = { DECODE: function(s){ var b = 0, l = 0, n = 0; return s ? (s = (s + '\n') .split('\n').map(function(v) { var _b = 0, _ = v.replace(/^(\>+?) /, function(a, b) { return(_b=b.split('').length,'') }); return(_=b==_b?_:('<'+(b>_b?'/':'')+'blockquote>').repeat(Math.abs(b-_b))+_,b=_b,_); }), s.pop(), s.join('\n')) .replace(/\[{2}(.+?)\]{2}/g, '<$1>') .replace(/\*{2}(.+?)\*{2}/g, '<b>$1</b>') .replace(/\/{2}(.+?)\/{2}/g, '<i>$1</i>') .replace(/\-{2}(.+?)\-{2}/g, '<span style="text-decoration: line-through;">$1</span>') .replace(/#{2}(.+?)\|(.+?)#{2}/g, '<span style="color:$1">$2</span>') : s; } } var FORMAT = { scp: { TYPE: { base: function(a) { return a.map(v=>v.trim()).filter(v=>v).map(v=>{ var m = v.match(/^\[{3}(.+?)(?:\|(.*?)|)\]{3}(?: \- (.+?)||(.+?))$/), x = m ? 0 : {n: v.match(/\[{3}(.+?)(?:\||\]{3})/), a: v.replace(/\[{3}(.+?)(?:\|(.*?)|)\]{3}/g,(_,a,b)=>(b||a))}, o = m ? {pagename: m[1], aka: WIKI.DECODE(m[2]), metatitle: WIKI.DECODE(m[3])} : {pagename: x.n&&x.n[1], aka: WIKI.DECODE(x.a), metatitle: void(0)}; return (m && m[4] && (o.aka = o.pagename + WIKI.DECODE(m[4])), o) }); } } } }; FORMAT['scp'].TYPE['en'] = function(s) { var a = s.split(/\[\[# \d+?\]\](?:\n\+ .*?\n|)/).slice(1), l = a.length; a[l-1] = a[l-1].split(/\[\[\/div\]\]/)[0]; return FORMAT['scp'].TYPE.base(a.map(v=>v.split(/(?:\n|)\* /)).flat()); }; FORMAT['scp'].TYPE['ru'] = function(s) { return FORMAT['scp'].TYPE.base((s.split('[[# list]]')[1].split('[[/div]]')[0].match(/\* (.+?)\n/g)||[]).map(v=>v.match(/\* (.+?)\n/)[1])); }; FORMAT['scp'].TYPE['jp'] = FORMAT['scp'].TYPE['ko'] = FORMAT['scp'].TYPE['cn'] = FORMAT['scp'].TYPE['fr'] = FORMAT['scp'].TYPE['pl'] = FORMAT['scp'].TYPE['es'] = FORMAT['scp'].TYPE['th'] = FORMAT['scp'].TYPE['de'] = FORMAT['scp'].TYPE['it'] = FORMAT['scp'].TYPE['ua'] = FORMAT['scp'].TYPE['pt'] = FORMAT['scp'].TYPE['cz'] = FORMAT['scp'].TYPE['zh'] = FORMAT['scp'].TYPE['en']; (async(_)=>{ var r = {}, o = {}, i = 2, x, y, t; while(i) { (x = null, t = (await(await fetch(`../../local--code_/jp-inc/${i++}`)).text()).replace(/^\<(.*?)\>/, (_,k) => (x = k, '')).trim(), x ? (r[x] = t, y = ((s,a,b)=>(a.forEach(v=>(b=v.split('='), s[b[0]] = b[1])),s))({},x.split('&')), CONFIG.PROG.innerText = (`Now loading: ${y.type}-${y.lang} (${y.index})`)) : (i = 0)); } Object.keys(r).forEach(k=>(x=>(k.split(/=|&/).forEach(a=>(x=(x[a]=x[a]||{}))),x.key=((s,a,b)=>(a.forEach(v=>(b=v.split('='), s[b[0]] = b[1])),s))({},k.split('&')),x.value=FORMAT[x.key.type].TYPE[x.key.lang](r[k])))(o)); CONFIG.PROG.innerText = 'Loading complete.'; _._MetaData = Object.assign({},o); var EX = { KEY: Object.keys(o.type.scp.lang) } EX.REG = new RegExp(`(?:\\s|\\-|^)(${EX.KEY.join('|')})(?:\\s|$)`); CONFIG.QUE.addEventListener('input',e=>{ var s = e.target.value.toLowerCase(), x; var m = s.replace(EX.REG, (_,l)=>(x = l,'')); var t = x ? ((a,_)=>(_ = o.type["scp"].lang[x].index, Object.keys(_).forEach(i=>(a = a.concat(_[i].value))),a))([]) : ((a,_)=>(EX.KEY.forEach(l=>(_ = o.type["scp"].lang[l].index,Object.keys(_).forEach(i=>{a = a.concat(_[i].value)}))),a))([]); var r = t.filter(v=>((v.pagename||'').toLowerCase().match(m) || (v.aka||'').replace(/\<.+?\>/g,'').toLowerCase().match(m) || (v.metatitle||'').replace(/\<.+?\>/g,'').toLowerCase().match(m))).slice(0,20); CONFIG.LIST.innerHTML = r.map(v=>`<li><a href="http://scp-jp.wikidot.com/${v.pagename.toLowerCase()}" target="_blank">${v.aka||v.pagename}</a>${v.metatitle ? ' - <span>'+v.metatitle+'</span>' : ''}</li>`).join(''); }) })(this);
body { font-family: sans-serif; font-size: 0.8em; padding: 0 .35em; } a { color: #b01; text-decoration: none; } a:hover { text-decoration: underline; } ul { list-style: square; } input { border: 1px solid #aaa; border-radius: .25em; display: block; font-size: 1.3em; padding: .5em; transition: all .25s; width: 100%; } input:focus { border-color: #901; outline: none; } pre { background: #333; color: #3f3; display: block; font-family: 'Andale Mono', 'Courier New', Courier, monospace; font-weight: bold; padding: .5em; text-align: center; }
page revision: 23, last edited: 16 Dec 2020 13:57