X-Git-Url: http://git.shiar.net/minimedit.git/blobdiff_plain/d3ed59c2753c2babd5aa9a1c5e0109c644904ba8..229b6a2dc688e92570dd7f8b766adec3e1ee01ed:/edit/page.js diff --git a/edit/page.js b/edit/page.js index 3071844..ccc1115 100644 --- a/edit/page.js +++ b/edit/page.js @@ -1,11 +1,25 @@ +var pagebody; + +function editorcontents() { + return document.getElementsByClassName('static')[0]; +} + +function editorsetup() { + +CKEDITOR.disableAutoInline = true; + CKEDITOR.plugins.add('inlinesave', { init: function(editor) { editor.addCommand( 'inlinesave', { exec: function (editor) { var pagename = window.location.pathname; var body = editor.getData(); + // trim trailing whitespace in non-empty paragraphs + body = body.replace(/((?!

).{3})(?:\s|\u200B)+(?=<\/p>)/g, '$1'); // empty line is equivalent to a paragraph break body = body.replace(/
\s*
/g, '

'); + // keep names and preceding abbreviations together + body = body.replace(/\b((?:dhr|mw|me?vr|mr?s?)\.)\s+(?=[A-Z])/ig, '$1 '); // wrap long line after each sentence body = body.replace(/^(\t*).{73,}/mg, function (line, indent) { var dots = '(?:.{24,72}|.{73,}?)'; // chars before punctuation @@ -114,6 +128,8 @@ CKEDITOR.on('instanceCreated', function (event) { { name: 'Attributie', element: 'em', attributes: { 'class': 'right' } }, { name: 'Quote', element: 'q' }, { name: 'Gemarkeerd', element: 'span', styles: { 'background-color': 'Yellow' } }, + { name: 'Ingelogd', element: 'span', attributes: { 'class': 'login' } }, + { name: 'Uitgelogd', element: 'span', attributes: { 'class': 'logout' } }, { name: 'Kadertekst', element: 'aside' }, { name: 'Uitgelijnd', element: 'div', attributes: { 'class': 'right' } }, @@ -149,20 +165,23 @@ CKEDITOR.on('instanceCreated', function (event) { }; }); - CKEDITOR.disableAutoInline = true; - -// add edit link to menu -var pagebody = document.getElementsByClassName('static')[0]; if (pagebody) { + // add edit link to menu var editlink = document.querySelector('a[href="#edit"]'); if (editlink) editlink.onclick = function (e) { editlink.style.fontWeight = 'bold'; editlink.href = ''; editlink.onclick = undefined; + document.body.replaceChild(pagebody, editorcontents()); pagebody.setAttribute('contenteditable', true); pagebody.querySelectorAll('[data-dyn]').forEach(function (el) { - el.outerHTML = '[[' + el.getAttribute('data-dyn') + ']]'; + let blockname = el.getAttribute('data-dyn'); + if (!blockname) { + el.remove(); + return; + } + el.outerHTML = '[[' + blockname + ']]'; }); CKEDITOR.inline(pagebody, { customConfig: '' }); document.body.className = 'edit'; @@ -173,3 +192,12 @@ if (pagebody) { } } +} + +document.addEventListener('DOMContentLoaded', function (e) { + pagebody = editorcontents().cloneNode(true); + var editorinc = document.createElement('script'); + editorinc.addEventListener('load', editorsetup); + editorinc.src = ckesrc; + document.getElementsByTagName('head')[0].appendChild(editorinc); +});