Files
f0ckm/views/rules.html

59 lines
2.5 KiB
HTML

@include(snippets/header)
<div class="pagewrapper">
<div id="main">
<div class="rules">
@if(rules_text)
<div class="dynamic-page-content" id="rules-dynamic-content"></div>
<script id="rules-raw-data" type="application/json">{{ rules_text_b64 }}</script>
<script>
(function() {
var raw = document.getElementById('rules-raw-data');
var el = document.getElementById('rules-dynamic-content');
function escapeHtml(str) {
return str.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;').replace(/'/g,'&#39;');
}
function sanitizeHtml(html) {
var tmp = document.createElement('div');
tmp.innerHTML = html;
tmp.querySelectorAll('script,iframe,object,embed,form,input,button,select,meta,link,base,style').forEach(function(el) { el.remove(); });
tmp.querySelectorAll('*').forEach(function(node) {
Array.from(node.attributes).forEach(function(attr) {
if (/^on/i.test(attr.name) || (attr.name === 'href' && /^javascript:/i.test(attr.value.trim()))) {
node.removeAttribute(attr.name);
}
});
});
return tmp.innerHTML;
}
function render() {
if (raw && el && typeof marked !== 'undefined') {
var bytes = Uint8Array.from(atob(raw.textContent.trim()), function(c) { return c.charCodeAt(0); });
var text = new TextDecoder('utf-8').decode(bytes);
var renderer = new marked.Renderer();
renderer.code = function(code, lang) {
var escaped = escapeHtml(typeof code === 'object' ? (code.text || '') : code);
var langAttr = (typeof code === 'object' ? code.lang : lang) || '';
return '<pre><code' + (langAttr ? ' class="language-' + escapeHtml(langAttr) + '"' : '') + '>' + escaped + '</code></pre>';
};
renderer.codespan = function(code) {
var escaped = escapeHtml(typeof code === 'object' ? (code.text || '') : code);
return '<code>' + escaped + '</code>';
};
el.innerHTML = sanitizeHtml(marked.parse(text, { gfm: true, breaks: true, renderer: renderer }));
}
}
if (typeof marked !== 'undefined') {
render();
} else {
document.addEventListener('DOMContentLoaded', render);
}
})();
</script>
@else
<h1>Rules</h1>
@endif
</div>
</div>
</div>
@include(snippets/footer)