Hard linking of texts to catalogue.
[redakcja.git] / src / redakcja / static / js / wiki / view_editor_wysiwyg.js
index c8f84e1..e43905c 100644 (file)
         if(editArea) {
             var specialCharsContainer = $("<div id='specialCharsContainer'><a href='#' id='specialCharsClose'>Zamknij</a><table id='tableSpecialChars' style='width: 600px;'></table></div>");
 
-            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 = "<tr>";
 
             for(var i in specialChars) {
                                 $origin.html($(element).html());
                             }
                             $overlay.remove();
+                            $.wiki.activePerspective().flush();
                         },
                         error: function(text){
                             alert('Błąd! ' + text);
 
     class VisualPerspective extends $.wiki.Perspective {
         constructor(options) {
-            var old_callback = options.callback;
-
-            options.callback = function(){
-                let self = this;
-                var element = $("#html-view");
-                var button = $('<button class="edit-button active-block-button">Edytuj</button>');
-                var uwagaButton = $('<button class="uwaga-button active-block-button">Uwaga</button>');
-
-                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 = $('<button class="edit-button active-block-button">Edytuj</button>');
+            var uwagaButton = $('<button class="uwaga-button active-block-button">Uwaga</button>');
+
+            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) {
 
                     var htmlView = $('#html-view');
                     htmlView.html(element);
+                    if ('PropertiesPerspective' in $.wiki.perspectives)
+                        $.wiki.perspectives.PropertiesPerspective.enable();
 
                     _finalize(success);
                 },
                     _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('<p>Wystąpił błąd:</p><pre>' + text + '</pre>');
+                        }
+                    });
+                }
+            });
+        }
 
         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('<p>Wystąpił błąd:</p><pre>' + text + '</pre>');
-                    _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;
                         success: function(html) {
                             // What if no end?
                             node.insertBefore($(html)[0], end);
+                            self.flush();
                         }
                     });
                 },