X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/9d566b4741eb66bf09b5c7d213aa8541886e100a..4e8fc8e3b409859927393db2e40877df3e74208f:/src/redakcja/static/js/wiki/view_editor_wysiwyg.js diff --git a/src/redakcja/static/js/wiki/view_editor_wysiwyg.js b/src/redakcja/static/js/wiki/view_editor_wysiwyg.js index c8f84e1f..e43905c9 100644 --- a/src/redakcja/static/js/wiki/view_editor_wysiwyg.js +++ b/src/redakcja/static/js/wiki/view_editor_wysiwyg.js @@ -223,29 +223,53 @@ if(editArea) { var specialCharsContainer = $("
Zamknij
"); - var specialChars = [' ', 'Ą','ą','Ć','ć','Ę','ę','Ł','ł','Ń','ń','Ó','ó','Ś','ś','Ż','ż','Ź','ź','Á','á','À','à', - 'Â','â','Ä','ä','Å','å','Ā','ā','Ă','ă','Ã','ã', - 'Æ','æ','Ç','ç','Č','č','Ċ','ċ','Ď','ď','É','é','È','è', - 'Ê','ê','Ë','ë','Ē','ē','Ě','ě','Ġ','ġ','Ħ','ħ','Í','í','Î','î', - 'Ī','ī','Ĭ','ĭ','Ľ','ľ','Ñ','ñ','Ň','ň','Ó','ó','Ö','ö', - 'Ô','ô','Ō','ō','Ǒ','ǒ','Œ','œ','Ø','ø','Ř','ř','Š', - 'š','Ş','ş','Ť','ť','Ţ','ţ','Ű','ű','Ú','ú','Ù','ù', - 'Ü','ü','Ů','ů','Ū','ū','Û','û','Ŭ','ŭ', - 'Ý','ý','Ž','ž','ß','Ð','ð','Þ','þ','А','а','Б', - 'б','В','в','Г','г','Д','д','Е','е','Ё','ё','Ж', - 'ж','З','з','И','и','Й','й','К','к','Л','л','М', - 'м','Н','н','О','о','П','п','Р','р','С','с', - 'Т','т','У','у','Ф','ф','Х','х','Ц','ц','Ч', - 'ч','Ш','ш','Щ','щ','Ъ','ъ','Ы','ы','Ь','ь','Э', - 'э','Ю','ю','Я','я','ѓ','є','і','ї','ј','љ','њ', - 'Ґ','ґ','Α','α','Β','β','Γ','γ','Δ','δ','Ε','ε', - 'Ζ','ζ','Η','η','Θ','θ','Ι','ι','Κ','κ','Λ','λ','Μ', - 'μ','Ν','ν','Ξ','ξ','Ο','ο','Π','π','Ρ','ρ','Σ','ς','σ', - 'Τ','τ','Υ','υ','Φ','φ','Χ','χ','Ψ','ψ','Ω','ω','–', - '—','¡','¿','$','¢','£','€','©','®','°','¹','²','³', - '¼','½','¾','†','§','‰','•','←','↑','→','↓', - '„','”','„”','«','»','«»','»«','’','[',']','~','|','−','·', - '×','÷','≈','≠','±','≤','≥','∈']; + var specialChars = [ + ' ', 'Ą','ą','Ć','ć','Ę','ę','Ł','ł','Ń','ń','Ó','ó','Ś','ś','Ż','ż','Ź','ź','Á','á','À','à', + 'Â','â','Ä','ä','Å','å','Ā','ā','Ă','ă','Ã','ã', + 'Æ','æ','Ç','ç','Č','č','Ċ','ċ','Ď','ď','É','é','È','è', + 'Ê','ê','Ë','ë','Ē','ē','Ě','ě','Ġ','ġ','Ħ','ħ','Í','í','Î','î', + 'Ī','ī','Ĭ','ĭ','Ľ','ľ','Ñ','ñ','Ň','ň','Ó','ó','Ö','ö', + 'Ô','ô','Ō','ō','Ǒ','ǒ','Œ','œ','Ø','ø','Ř','ř','Š', + 'š','Ş','ş','Ť','ť','Ţ','ţ','Ű','ű','Ú','ú','Ù','ù', + 'Ü','ü','Ů','ů','Ū','ū','Û','û','Ŭ','ŭ', + 'Ý','ý','Ž','ž','ß','Ð','ð','Þ','þ','А','а','Б', + 'б','В','в','Г','г','Д','д','Е','е','Ё','ё','Ж', + 'ж','З','з','И','и','Й','й','К','к','Л','л','М', + 'м','Н','н','О','о','П','п','Р','р','С','с', + 'Т','т','У','у','Ф','ф','Х','х','Ц','ц','Ч', + 'ч','Ш','ш','Щ','щ','Ъ','ъ','Ы','ы','Ь','ь','Э', + 'э','Ю','ю','Я','я','ѓ','є','і','ї','ј','љ','њ', + 'Ґ','ґ','Α','α','Β','β','Γ','γ','Δ','δ','Ε','ε', + 'Ζ','ζ','Η','η','Θ','θ','Ι','ι','Κ','κ','Λ','λ','Μ', + 'μ','Ν','ν','Ξ','ξ','Ο','ο','Π','π','Ρ','ρ','Σ','ς','σ', + 'Τ','τ','Υ','υ','Φ','φ','Χ','χ','Ψ','ψ','Ω','ω','–', + '—','¡','¿','$','¢','£','€','©','®','°','¹','²','³', + '¼','½','¾','†','§','‰','•','←','↑','→','↓', + '„','”','„”','«','»','«»','»«','’','[',']','~','|','−','·', + '×','÷','≈','≠','±','≤','≥','∈', + + // Hebrew + '\u05d0', '\u05d1', '\u05d2', '\u05d3', '\u05d4', '\u05d5', '\u05d6', '\u05d7', + '\u05d8', '\u05d9', '\u05da', '\u05db', '\u05dc', '\u05dd', '\u05de', '\u05df', + '\u05e0', '\u05e1', '\u05e2', '\u05e3', '\u05e4', '\u05e5', '\u05e6', '\u05e7', + '\u05e8', '\u05e9', '\u05e0', '\u05ea', + + '\u0591', '\u0592', '\u0593', '\u0594', '\u0595', '\u0596', '\u0597', + '\u0598', '\u0599', '\u059a', '\u059b', '\u059c', '\u059d', '\u059e', '\u059f', + '\u05a0', '\u05a1', '\u05a2', '\u05a3', '\u05a4', '\u05a5', '\u05a6', '\u05a7', + '\u05a8', '\u05a9', '\u05aa', '\u05ab', '\u05ac', '\u05ad', '\u05ae', '\u05af', + '\u05b0', '\u05b1', '\u05b2', '\u05b3', '\u05b4', '\u05b5', '\u05b6', '\u05b7', + '\u05b8', '\u05b9', '\u05ba', '\u05bb', '\u05bc', '\u05bd', '\u05be', '\u05bf', + '\u05c0', '\u05c1', '\u05c2', '\u05c3', '\u05c4', '\u05c5', '\u05c6', '\u05c7', + + '\ufb1d', '\ufb1e', '\ufb1f', + '\ufb20', '\ufb21', '\ufb22', '\ufb23', '\ufb24', '\ufb25', '\ufb26', '\ufb27', + '\ufb28', '\ufb29', '\ufb2a', '\ufb2b', '\ufb2c', '\ufb2d', '\ufb2e', '\ufb2f', + '\ufb30', '\ufb31', '\ufb32', '\ufb33', '\ufb34', '\ufb35', '\ufb36', + '\ufb38', '\ufb39', '\ufb3a', '\ufb3b', '\ufb3c', '\ufb3e', + '\ufb40', '\ufb41', '\ufb43', '\ufb44', '\ufb46', '\ufb47', + '\ufb48', '\ufb49', '\ufb4a', '\ufb4b', '\ufb4c', '\ufb4d', '\ufb4e', '\ufb4f', + ] var tableContent = ""; for(var i in specialChars) { @@ -526,6 +550,7 @@ $origin.html($(element).html()); } $overlay.remove(); + $.wiki.activePerspective().flush(); }, error: function(text){ alert('Błąd! ' + text); @@ -609,89 +634,89 @@ class VisualPerspective extends $.wiki.Perspective { constructor(options) { - var old_callback = options.callback; - - options.callback = function(){ - let self = this; - var element = $("#html-view"); - var button = $(''); - var uwagaButton = $(''); - - if (!CurrentDocument.readonly) { - - $('#html-view').bind('mousemove', function(event){ - var editable = $(event.target).closest('*[x-editable]'); - $('.active', element).not(editable).removeClass('active').children('.active-block-button').remove(); - - if (!editable.hasClass('active')) { - editable.addClass('active').append(button); - if (!editable.is('[x-edit-attribute]') && - !editable.is('.annotation-inline-box') && - !editable.is('[x-edit-no-format]') - ) { - editable.append(uwagaButton); - } - } - if (editable.is('.annotation-inline-box')) { - $('*[x-annotation-box]', editable).css({ - }).show(); + super(options); + let self = this; + var element = $("#html-view"); + var button = $(''); + var uwagaButton = $(''); + + if (!CurrentDocument.readonly) { + + $('#html-view').bind('mousemove', function(event){ + var editable = $(event.target).closest('*[x-editable]'); + $('.active', element).not(editable).removeClass('active').children('.active-block-button').remove(); + + if (!editable.hasClass('active')) { + editable.addClass('active').append(button); + if (!editable.is('[x-edit-attribute]') && + !editable.is('.annotation-inline-box') && + !editable.is('[x-edit-no-format]') + ) { + editable.append(uwagaButton); } - }); - - self.caret = new Caret(element); - - $('#insert-reference-button').click(function(){ - self.addReference(); - return false; - }); - - $('#insert-annotation-button').click(function(){ - addAnnotation(); - return false; - }); + } + if (editable.is('.annotation-inline-box')) { + $('*[x-annotation-box]', editable).css({ + }).show(); + } + }); - $('#insert-theme-button').click(function(){ - addTheme(); - return false; - }); + self.caret = new Caret(element); + $('#insert-reference-button').click(function(){ + self.flush(); + self.addReference(); + return false; + }); - $(".insert-inline-tag").click(function() { - self.insertInlineTag($(this).attr('data-tag')); - return false; - }); + $('#insert-annotation-button').click(function(){ + self.flush(); + addAnnotation(); + return false; + }); - $(".insert-char").click(function() { - addSymbol(caret=self.caret); - return false; - }); + $('#insert-theme-button').click(function(){ + self.flush(); + addTheme(); + return false; + }); - $(document).on('click', '.edit-button', function(event){ - event.preventDefault(); - openForEdit($(this).parent()); - }); + $(".insert-inline-tag").click(function() { + self.flush(); + self.insertInlineTag($(this).attr('data-tag')); + return false; + }); - $(document).on('click', '.uwaga-button', function(event){ - event.preventDefault(); - createUwagaBefore($(this).parent()); - }); - } + $(".insert-char").click(function() { + self.flush(); + addSymbol(caret=self.caret); + return false; + }); - $(document).on('click', '[x-node="motyw"]', function(){ - selectTheme($(this).attr('theme-class')); + $(document).on('click', '.edit-button', function(event){ + self.flush(); + event.preventDefault(); + openForEdit($(this).parent()); }); - element.on('click', '.annotation', function(event) { + $(document).on('click', '.uwaga-button', function(event){ + self.flush(); event.preventDefault(); - event.redakcja_caret_ignore = true; - $('[x-annotation-box]', $(this).parent()).toggleClass('editing'); - self.caret.detach(); + createUwagaBefore($(this).parent()); }); + } - old_callback.call(this); - }; + $(document).on('click', '[x-node="motyw"]', function(){ + selectTheme($(this).attr('theme-class')); + }); - super(options); + element.on('click', '.annotation', function(event) { + self.flush(); + event.preventDefault(); + event.redakcja_caret_ignore = true; + $('[x-annotation-box]', $(this).parent()).toggleClass('editing'); + self.caret.detach(); + }); } onEnter(success, failure) { @@ -714,6 +739,8 @@ var htmlView = $('#html-view'); htmlView.html(element); + if ('PropertiesPerspective' in $.wiki.perspectives) + $.wiki.perspectives.PropertiesPerspective.enable(); _finalize(success); }, @@ -725,44 +752,51 @@ _finalize(failure); } }); - }; + } + + flush() { + let self = this; + return new Promise((resolve, reject) => { + if ($('#html-view .error').length > 0) { + reject() + } else { + //return _finalize(failure); + html2text({ + element: $('#html-view').get(0), + stripOuter: true, + success: (text) => { + self.doc.setText(text); + resolve(); + }, + error: (text) => { + reject(text); + //$('#source-editor').html('

Wystąpił błąd:

' + text + '
'); + } + }); + } + }); + } onExit(success, failure) { var self = this; self.caret.detach(); - $.wiki.exitTab('#PropertiesPerspective'); + if ('PropertiesPerspective' in $.wiki.perspectives) + $.wiki.perspectives.PropertiesPerspective.disable(); - $.blockUI({ - message: 'Zapisywanie widoku...' - }); - - function _finalize(callback){ - $.unblockUI(); - if (callback) - callback(); - } - - if ($('#html-view .error').length > 0) - return _finalize(failure); - - html2text({ - element: $('#html-view').get(0), - stripOuter: true, - success: function(text){ - self.doc.setText(text); - _finalize(success); - }, - error: function(text){ - $('#source-editor').html('

Wystąpił błąd:

' + text + '
'); - _finalize(failure); - } + self.flush().then(() => { + success && success(); + }).catch((e) => { + // TODO report + console.log('REJECTED!', e); + failure && failure(); }); }; insertInlineTag(tag) { this.caret.detach(); + let self = this; let selection = window.getSelection(); var n = selection.rangeCount; @@ -832,6 +866,7 @@ success: function(html) { // What if no end? node.insertBefore($(html)[0], end); + self.flush(); } }); },