Otwieranie do edycji motywów i przypisów zaraz po ich wstawieniu.
[redakcja.git] / platforma / static / js / main.js
index 739808d..9262c18 100644 (file)
@@ -317,10 +317,6 @@ function html(element) {
             xtype == 'motyw' || xtype == 'begin' || xtype == 'end') {
             return false;
         }
-
-        // this is hopefully redundant
-        //if(! node.is('*.utwor *') )
-        //    return false;
         
         // don't allow themes inside annotations
         if( node.is('*[x-annotation-box] *') )
@@ -360,9 +356,11 @@ function html(element) {
         range.insertNode(tag[0]);
 
         xml2html({
-            xml: '<pr><slowo_obce>'+text+'</slowo_obce></pr>',
+            xml: '<pr><slowo_obce>'+text+'</slowo_obce> --- </pr>',
             success: function(text) {
-                tag.replaceWith(text);
+                var t = $(text);
+                tag.replaceWith(t);
+                openForEdit(t);
             },
             error: function() {
                 tag.remove();
@@ -371,6 +369,85 @@ function html(element) {
         })
     }
     
+    function addTheme()
+    {
+        var selection = window.getSelection();
+        var n = selection.rangeCount;
+
+        console.log("Range count:", n);
+        if(n == 0) {
+            window.alert("Nie zaznaczono żadnego obszaru");
+            return false;
+        }
+
+        // for now allow only 1 range
+        if(n > 1) {
+            window.alert("Zaznacz jeden obszar");
+            return false;
+        }
+
+        // remember the selected range
+        var range = selection.getRangeAt(0);
+        console.log(range.startContainer, range.startOffset, range.endContainer, range.endOffset);
+
+        // verify if the start/end points make even sense -
+        // they must be inside a x-node (otherwise they will be discarded)
+        // and the x-node must be a main text
+        if (!verifyTagInsertPoint(range.startContainer)) {
+            window.alert("Motyw nie może się zaczynać w tym miejscu.");
+            return false;
+        }
+
+        if (!verifyTagInsertPoint(range.endContainer)) {
+            window.alert("Motyw nie może się kończyć w tym miejscu.");
+            return false;
+        }
+
+        var date = (new Date()).getTime();
+        var random = Math.floor(4000000000*Math.random());
+        var id = (''+date) + '-' + (''+random);
+
+        var spoint = document.createRange();
+        var epoint = document.createRange();
+
+        spoint.setStart(range.startContainer, range.startOffset);
+        epoint.setStart(range.endContainer, range.endOffset);
+
+        console.log('spoint', spoint.startContainer, spoint.startOffset, spoint.endContainer, spoint.endOffset);
+        console.log('epoint', epoint.startContainer, epoint.startOffset, epoint.endContainer, epoint.endOffset);
+
+        var mtag, btag, etag, errors;
+
+        // insert theme-ref
+                
+        xml2html({
+            xml: '<end id="e'+id+'" />',
+            success: function(text) {
+                etag = $('<span></span>');
+                epoint.insertNode(etag[0]);
+                etag.replaceWith(text);
+                xml2html({
+                    xml: '<motyw id="m'+id+'">motyw</motyw>',
+                    success: function(text) {
+                        mtag = $('<span></span>');
+                        spoint.insertNode(mtag[0]);
+                        mtag.replaceWith(text);
+                        xml2html({
+                            xml: '<begin id="b'+id+'" />',
+                            success: function(text) {
+                                btag = $('<span></span>');
+                                spoint.insertNode(btag[0])
+                                btag.replaceWith(text);
+                                selection.removeAllRanges();
+                                openForEdit($('.motyw[theme-class=' + id + ']'));
+                            }
+                        });
+                    }
+                });
+            }
+        });
+    }
+    
     function openForEdit($origin)
     {       
         var $box = null
@@ -388,6 +465,11 @@ function html(element) {
         var w = $box.outerWidth();
         var h = $box.innerHeight();
     
+        if ($origin.is(".annotation-inline-box")) {
+            w = Math.max(w, 400);
+            h = Math.max(h, 60);
+        }
+        
         console.log('width:', w, 'height:', h);
 
         // start edition on this node
@@ -397,10 +479,9 @@ function html(element) {
             left: x,
             top: y,
             width: w
-            // right: 0
-        }).appendTo($box[0].offsetParent || element).show();
+        }).appendTo($box[0].offsetParent || $box.parent()).show();
         
-        console.log($overlay, $box[0].offsetParent || element);
+        console.log($overlay, $box[0].offsetParent || $box.parent());
         
         var serializer = new XMLSerializer();
     
@@ -414,7 +495,7 @@ function html(element) {
                 
                 setTimeout(function() {
                     $('textarea', $overlay).focus();
-                }, 100);
+                }, 50);
                 
                 $('textarea', $overlay).one('blur', function(event) {
                     var nodeName = $box.attr('x-node') || 'pe';
@@ -458,6 +539,11 @@ function html(element) {
         addAnnotation();
         return false;
     });
+    
+    $('#insert-theme-button').click(function() {
+        addTheme();
+        return false;
+    });
 }