|
<script> |
|
window.onerror = function(error){ |
|
var pre = document.createElement('pre'); |
|
pre.innerText = error.message || error.stack || String(error); |
|
document.body.appendChild(pre); |
|
alert(error); |
|
}</script> |
|
<noscript>No JS :(</noscript> |
|
{{Front}} |
|
<pre id="script-src" style="display:none;"> |
|
{{Script}} |
|
</pre> |
|
<script>var tpl = document.querySelector('#script-src'); |
|
var src = tpl.innerText; |
|
|
|
function getStorageMode() { |
|
if (typeof py === 'object') return 'py'; |
|
if ( |
|
document.location.href.indexOf('data:') !== 0 && |
|
typeof sessionStorage === 'object' |
|
) |
|
return 'session'; |
|
return 'dummy'; |
|
} |
|
|
|
function createDummyStorage() { |
|
var dummy = (window.DUMMY_STORAGE = window.DUMMY_STORAGE || {}); |
|
return { |
|
setItem: function (key, val) { |
|
dummy[key] = val; |
|
}, |
|
hasItem: function hasItem(key) { |
|
return Object.hasOwnProperty.call(dummy, key); |
|
}, |
|
getItem: function (key, defaultValue) { |
|
if (this.hasItem(key)) { |
|
return dummy[key]; |
|
} |
|
return defaultValue; |
|
}, |
|
clear: function clear() { |
|
dummy = window.DUMMY_STORAGE = {}; |
|
}, |
|
}; |
|
} |
|
|
|
function createPyStorage() { |
|
try { |
|
py.data = window.py.data || {}; |
|
var dataObj = { |
|
setItem: function (key, val) { |
|
py.data[key] = val; |
|
}, |
|
hasItem: function hasItem(key) { |
|
return Object.hasOwnProperty.call(py.data, key); |
|
}, |
|
getItem: function (key, defaultValue) { |
|
if (dataObj.hasItem(key)) { |
|
return py.data[key]; |
|
} |
|
return defaultValue; |
|
}, |
|
clear: function clear() { |
|
window.py.data = {}; |
|
}, |
|
}; |
|
return dataObj; |
|
} catch (err) { |
|
alert(err.message); |
|
} |
|
} |
|
|
|
function createSessionStorage() { |
|
return { |
|
setItem: function (key, val) { |
|
sessionStorage.setItem(key, val); |
|
}, |
|
hasItem: function hasItem(key) { |
|
return sessionStorage.getItem(key) !== null; |
|
}, |
|
getItem: function (key, defaultValue) { |
|
if (this.hasItem(key)) return sessionStorage.getItem(key); |
|
return defaultValue; |
|
}, |
|
clear: function clear() { |
|
sessionStorage.clear(); |
|
}, |
|
}; |
|
} |
|
|
|
function debug(debuggerId, value) { |
|
var div = |
|
document.getElementById(debuggerId) || document.createElement('div'); |
|
div.setAttribute('id', debuggerId); |
|
div.setAttribute('title', debuggerId); |
|
document.body.appendChild(div); |
|
if (typeof value === 'function') { |
|
div.innerText = value(div.innerText); |
|
} else { |
|
div.innerText = value; |
|
} |
|
} |
|
|
|
function persist(next) { |
|
window.setTimeout(function () { |
|
if (window.ankiStorage && !document.getElementById('back')) { |
|
window.ankiStorage.clear(); |
|
} |
|
var storageMode = getStorageMode(); |
|
var dataObj; |
|
function use(key, valueIfMissing) { |
|
if (dataObj.hasItem(key)) { |
|
return dataObj.getItem(key, valueIfMissing); |
|
} |
|
dataObj.setItem(key, valueIfMissing); |
|
return valueIfMissing; |
|
} |
|
function show(key, valueIfMissing) { |
|
var value = store.use(key, valueIfMissing); |
|
var elements = document.querySelectorAll('[id="'+key+'"], [name="'+key+'"]'); |
|
for (var i = 0; i < elements.length; i++) { |
|
elements[i].innerText = value; |
|
} |
|
return value; |
|
} |
|
switch (storageMode) { |
|
case 'session': |
|
dataObj = createSessionStorage(); |
|
break; |
|
case 'py': |
|
dataObj = createPyStorage(); |
|
break; |
|
default: |
|
dataObj = createDummyStorage(); |
|
break; |
|
} |
|
dataObj.use = use; |
|
dataObj.show = show; |
|
window.store = window.ankiStorage = dataObj; |
|
next(dataObj); |
|
}, 100); |
|
} |
|
|
|
var handleLoad = new Function(src); |
|
setTimeout(handleLoad, 0); |
|
|
|
</script> |