+
+function codePlugin() {
+
+ function elemIsCodeBlock(elem) {
+ return elem.className === 'CodeMirrorContainer';
+ }
+
+ function showPopup(editor) {
+ let selectedNode = editor.selection.getNode();
+ if (!elemIsCodeBlock(selectedNode)) {
+ return;
+ }
+
+ let lang = selectedNode.hasAttribute('data-language') ? selectedNode.getAttribute('data-language') : '';
+ let currentCode = selectedNode.querySelector('textarea').textContent;
+ console.log('SHOW POPUP');
+ // TODO - Show custom editor
+ }
+
+ window.tinymce.PluginManager.add('codeeditor', (editor, url) => {
+
+ let $ = editor.$;
+
+ editor.addButton('codeeditor', {
+ text: 'Code block',
+ icon: false,
+ onclick() {
+ showPopup(editor);
+ }
+ });
+
+ // Convert
+ editor.on('PreProcess', function (e) {
+ $('div.CodeMirrorContainer', e.node).
+ each((index, elem) => {
+ let $elem = $(elem);
+ let code = elem.querySelector('textarea').textContent;
+
+ // $elem.attr('class', $.trim($elem.attr('class')));
+ $elem.removeAttr('contentEditable');
+
+ $elem.empty().append('<pre></pre>').find('pre').first().append($('<code></code>').each((index, elem) => {
+ // Needs to be textContent since innerText produces BR:s
+ elem.textContent = code;
+ }).attr('class', $elem.attr('class')));
+ console.log($elem[0].outerHTML);
+ });
+ });
+
+ editor.on('SetContent', function () {
+ let codeSamples = $('pre').filter((index, elem) => {
+ return elem.contentEditable !== "false";
+ });
+
+ if (codeSamples.length) {
+ editor.undoManager.transact(function () {
+ codeSamples.each((index, elem) => {
+ console.log(elem.textContent);
+ let outerWrap = Code.wysiwygView(elem);
+ outerWrap.addEventListener('dblclick', () => {
+ showPopup(editor);
+ })
+ });
+ });
+ }
+ });
+
+ });
+}
+