Add a button, realign the buttons.
[redakcja.git] / src / redakcja / static / js / wiki / view_editor_wysiwyg.js
index 726c243..bc498ce 100644 (file)
             success: function(text){
                 var t = $(text);
                 tag.replaceWith(t);
-                openForEdit(t);
+                openForEdit(t, trim=false);
             },
             error: function(){
                 tag.remove();
     }
 
     /* open edition window for selected fragment */
-    function openForEdit($origin){
+    function openForEdit($origin, trim=true){
         var $box = null
 
         // annotations overlay their sub box - not their own box //
         }
 
         // start edition on this node
-        var $overlay = $('<div class="html-editarea"><button class="accept-button">Zapisz</button><button class="delete-button">Usuń</button><button class="tytul-button akap-edit-button">tytuł dzieła</button><button class="wyroznienie-button akap-edit-button">wyróżnienie</button><button class="slowo-button akap-edit-button">słowo obce</button><button class="znak-button akap-edit-button">znak spec.</button><textarea></textarea></div>').css({
+        var $overlay = $('<div class="html-editarea"><div class="html-editarea-toolbar"><div class="html-editarea-toolbar-left"><button class="accept-button">Zapisz</button><button class="delete-button">Usuń</button></div><div class="html-editarea-toolbar-right"><button class="akap-edit-button">tytuł dzieła</button><button class="akap-edit-button">wyróżnienie</button><button class="akap-edit-button">słowo obce</button><button class="akap-edit-button">br</button><button class="akap-edit-button">znak spec.</button></div></div><textarea></textarea></div>').css({
             position: 'absolute',
             height: h,
             left: x,
             element: source,
             stripOuter: true,
             success: function(text){
-                $('textarea', $overlay).val($.trim(text));
+               let ttext = text;
+               if (trim) {
+                   ttext = ttext.trim();
+               }
+                $('textarea', $overlay).val(ttext);
 
                 setTimeout(function(){
                     $('textarea', $overlay).elastic().focus();
                     } else if (buttonName == "tytuł dzieła") {
                         startTag = "<tytul_dziela>";
                         endTag = "</tytul_dziela>";
-                    } else if(buttonName == "znak spec."){
+                    } else if (buttonName == "znak spec."){
                         addSymbol();
                         return false;
+                    } else if (buttonName == "br") {
+                        startTag = "<br/>";
+                        endTag = "";
                     }
 
                     var myField = textAreaOpened;
 
                 $('#html-view').bind('mousemove', function(event){
                     var editable = $(event.target).closest('*[x-editable]');
-                    $('.active', element).not(editable).removeClass('active').children('.active-block-button').remove();
+                    $('.active', element).not(editable).removeClass('active').children('.html-editarea-toolbar').remove();
 
                     if (!editable.hasClass('active')) {
-                        editable.addClass('active').append(button);
+                        editable.append($("<div class='html-editarea-toolbar'><div class='html-editarea-toolbar-left'></div></div>"));
+                        var buttonSpace = $('.html-editarea-toolbar-left', editable);
+                        editable.addClass('active');
+                        buttonSpace.append(button);
                         if (!editable.is('[x-edit-attribute]') &&
                             !editable.is('.annotation-inline-box') &&
                             !editable.is('[x-edit-no-format]')
                            ) {
-                            editable.append(uwagaButton);
+                            buttonSpace.append(uwagaButton);
                         }
                     }
                     if (editable.is('.annotation-inline-box')) {
                         $('*[x-annotation-box]', editable).css({
                         }).show();
                     }
+                    if (editable.is('.reference-inline-box')) {
+                       let preview = $('*[x-preview]', editable);
+                       preview.show();
+                       let link = $("a", preview);
+                       let href = link.attr('href');
+                       if (link.attr('title') == '?' && href.startsWith('https://www.wikidata.org/wiki/')) {
+                           link.attr('title', '…');
+                           let qid = href.split('/').reverse()[0];
+                           $.ajax({
+                               url: 'https://www.wikidata.org/w/rest.php/wikibase/v1/entities/items/' + qid + '?_fields=labels',
+                               dataType: "json",
+                               success: function(data) {
+                                   link.attr(
+                                       'title',
+                                       data['labels']['pl'] || data['labels']['en']
+                                   );
+                               },
+                           });
+                       }
+                    }
                 });
 
                 self.caret = new Caret(element);
                 $(document).on('click', '.edit-button', function(event){
                     self.flush();
                     event.preventDefault();
-                    openForEdit($(this).parent());
+                    openForEdit($(this).closest('.html-editarea-toolbar').parent());
                 });
 
                 $(document).on('click', '.uwaga-button', function(event){
                     self.flush();
                     event.preventDefault();
-                    createUwagaBefore($(this).parent());
+                    createUwagaBefore($(this).closest('.html-editarea-toolbar').parent());
                 });
             }
 
                     callback();
             }
 
+           let self = this;
             xml2html({
                 xml: this.doc.text,
                 base: this.doc.getBase(),
 
                     var htmlView = $('#html-view');
                     htmlView.html(element);
+                   self.renumber();
                     if ('PropertiesPerspective' in $.wiki.perspectives)
                         $.wiki.perspectives.PropertiesPerspective.enable();
 
                 }
             })
         }
+
+       renumber() {
+           let number = 0;
+            $('#html-view *').each((i, e) => {
+               let $e = $(e);
+               if ($e.closest('[x-node="abstrakt"]').length) return;
+               if ($e.closest('[x-node="nota_red"]').length) return;
+               if ($e.closest('[x-annotation-box="true"]').length) return;
+               let node = $e.attr('x-node');
+               if (node == 'numeracja') {
+                   number = 0;
+               } else if (['werset', 'akap', 'wers'].includes(node)) {
+                   number ++;
+                   $e.attr('x-number', number);
+               }
+           })
+       }
     }
 
     $.wiki.VisualPerspective = VisualPerspective;