Zastąpienie splittera zwykłym chowaniem i pokazywaniem po kliknięciu.
[redakcja.git] / platforma / static / js / main.js
index edd92c5..284fd19 100644 (file)
@@ -58,151 +58,209 @@ function serialize(element) {
     return result;
 };
 
+function highlight(colour) {
+    var range, sel;
+    if (window.getSelection) {
+        // Non-IE case
+        sel = window.getSelection();
+        if (sel.getRangeAt) {
+            range = sel.getRangeAt(0);
+        }
+        document.designMode = "on";
+        if (range) {
+            sel.removeAllRanges();
+            sel.addRange(range);
+        }
+        // Use HiliteColor since some browsers apply BackColor to the whole block
+        if ( !document.execCommand("HiliteColor", false, colour) ) {
+            document.execCommand("BackColor", false, colour);
+        }
+        document.designMode = "off";
+    } else if (document.selection && document.selection.createRange) {
+        // IE case
+        range = document.selection.createRange();
+        range.execCommand("BackColor", false, colour);
+    }
+}
+
+function selectTheme(themeId)
+{
+    var selection = window.getSelection();
+    
+    // remove current selection
+    selection.removeAllRanges();
+
+    var range = document.createRange();
+    var s = $(".motyw[theme-class='"+themeId+"']")[0];
+    var e = $(".end[theme-class='"+themeId+"']")[0];
+    // console.log('Selecting range:', themeId, range, s, e);
+    
+    if(s && e) {
+        range.setStartAfter(s);
+        range.setEndBefore(e);
+        selection.addRange(range);
+        // highlight('yellow');
+        // selection.removeAllRanges();
+    }
+};
+
+// function unselectThemes(themeId) {
+//     $('.Apple-style-span').each(function() {
+//         $(this).after($(this).html());
+//         $(this).remove();
+//     });
+// }
 
 $(function() {
-    var editor = CodeMirror.fromTextArea('id_text', {
+    CodeMirror.fromTextArea('id_text', {
         parserfile: 'parsexml.js',
         path: "/static/js/lib/codemirror/",
         stylesheet: "/static/css/xmlcolors.css",
         parserConfig: {
             useHTMLKludges: false
         },
+        iframeClass: 'xml-iframe',
         textWrapping: true,
         tabMode: 'spaces',
         indentUnit: 0,
-    });
-    
-    $('#splitter').splitter({
-        type: "v",
-        outline: true,
-        minLeft: 480,
-        sizeRight: 0,
-        anchorToWindow: true,
-        resizeToWidth: true,
+        initCallback: function(editor) {
+            
+            function createXSLT(xsl) {
+                var p = new XSLTProcessor();
+                p.importStylesheet(xsl);
+                return p;
+            }
+
+            function transform() {
+                $.ajax({
+                    url: '/static/xsl/wl2html_client.xsl',
+                    dataType: 'xml',
+                    success: function(data) {
+                        var doc = null;
+                        var parser = new DOMParser();
+                        var serializer = new XMLSerializer();
+                        var htmlXSL = createXSLT(data);
+
+                        doc = editor.getCode().replace(/\/\s+/g, '<br />');
+                        doc = parser.parseFromString(doc, 'text/xml');
+                        console.log('xml', doc);
+                        doc = htmlXSL.transformToFragment(doc, document);
+                        console.log('after transform', doc);
+                        $('#html-view').html(doc.firstChild);
+                    },
+                    error: function() {alert('Error loading XSL!')}
+                });        
+            };
+
+            function reverseTransform () {
+                $.ajax({
+                    url: '/static/xsl/html2wl_client.xsl',
+                    dataType: 'xml',
+                    success: function(data) {
+                        var doc = null;
+                        var parser = new DOMParser();
+                        var serializer = new XMLSerializer();
+                        var xsl = createXSLT(data);
+
+                        doc = serializer.serializeToString($('#html-view div').get(0))
+                        doc = parser.parseFromString(doc, 'text/xml');
+                        console.log('xml',doc, doc.documentElement);
+                        // TODO: Sprawdzenie błędów
+                        doc = xsl.transformToDocument(doc);
+                        console.log('after transform', doc, doc.documentElement);
+                        doc = serialize(doc.documentElement).join('');
+                        // doc = serializer.serializeToString(doc.documentElement)
+                        editor.setCode(doc);
+                    },
+                    error: function() {alert('Error loading XSL!')}
+                });
+            };
+
+            $('#save-button').click(function(event) {
+                event.preventDefault();
+                console.log(editor.getCode(), $('form input[name=text]').get(0));
+                $('form textarea[name=text]').val(editor.getCode());
+                $('form').ajaxSubmit(function() {
+                    alert('Udało się!');
+                });
+            });
+
+            $('#simple-view-tab').click(function() {
+                if ($(this).hasClass('active')) {
+                    return;
+                }
+                $(this).addClass('active');
+                $('#source-view-tab').removeClass('active');
+                $('#source-editor').hide();
+                $('#simple-editor').show();
+                transform();
+            });
+
+            $('#source-view-tab').click(function() {
+                if ($(this).hasClass('active')) {
+                    return;
+                }
+                $(this).addClass('active');
+                $('#simple-view-tab').removeClass('active');
+                $('#simple-editor').hide();
+                $('#source-editor').show();
+                reverseTransform();
+            });
+
+            $('.toolbar button').click(function(event) {
+                event.preventDefault();
+                var params = eval("(" + $(this).attr('ui:action-params') + ")");
+                scriptletCenter.scriptlets[$(this).attr('ui:action')](editor, params);
+            });
+
+            $('.toolbar select').change(function() {
+                var slug = $(this).val();
+
+                $('.toolbar-buttons-container').hide().filter('[data-group=' + slug + ']').show();
+                $(window).resize();
+            });
+
+            $('.toolbar-buttons-container').hide();
+            $('.toolbar select').change();
+
+            var button = $('<button class="edit-button">Edytuj</button>');
+            $('#html-view').bind('mousemove', function(event) {
+                var editable = $(event.target).closest('*[x-editable]');
+                $('#html-view .active[x-editable]').not(editable).removeClass('active').children('.edit-button').remove();
+                if (!editable.hasClass('active')) {
+                    editable.addClass('active').append(button);
+                }
+            });
+
+            $('.motyw').live('click', function() {
+                selectTheme($(this).attr('theme-class'));
+            });
+            
+            $('#simple-view-tab').click();
+            
+        }
     });
     
     $(window).resize(function() {
-        $('iframe').height($(window).height() - $('#tabs').outerHeight());
+        $('iframe').height($(window).height() - $('#tabs').outerHeight() - $('#source-editor .toolbar').outerHeight());
     });
     
     $(window).resize();
     
-    $('.vsplitbar').dblclick(function() {
+    $('.vsplitbar').click(function() {
         if ($('#sidebar').width() == 0) {
-            $('#splitter').trigger('resize', [$(window).width() - 480]);
+            $('#sidebar').width(480).show();
+            $('#source-editor, #simple-editor').css({right: 495});
+            $('.vsplitbar').css({right: 480})
+            // $('#splitter').trigger('resize', [$(window).width() - 480]);
         } else {
-            $('#splitter').trigger('resize', [$(window).width()]);
+            $('#sidebar').width(0).hide();
+            $('#source-editor, #simple-editor').css({right: 15});
+            $('.vsplitbar').css({right: 0});
+            // $('#splitter').trigger('resize', [$(window).width()]);
         }
+        $(window).resize();
     });
-
-    loadSuccess = function() {
-        if (this.get('state') != 'loading') {
-            alert('erroneous state:', this.get('state'));
-        }
-    }
                 
-    function createXSLT(xsl) {
-        var p = new XSLTProcessor();
-        p.importStylesheet(xsl);
-        return p;
-    }
-    
-    function transform() {
-        $.ajax({
-            url: '/static/xsl/wl2html_client.xsl',
-            dataType: 'xml',
-            success: function(data) {
-                var doc = null;
-                var parser = new DOMParser();
-                var serializer = new XMLSerializer();
-                var htmlXSL = createXSLT(data);
-                
-                doc = editor.getCode().replace(/\/\s+/g, '<br />');
-                doc = parser.parseFromString(doc, 'text/xml');
-                console.log('xml', doc);
-                doc = htmlXSL.transformToFragment(doc, document);
-                console.log('after transform', doc);
-                $('#html-view').html(doc.firstChild);
-            },
-            error: function() {alert('Error loading XSL!')}
-        });        
-    };
-    
-    function reverseTransform () {
-        $.ajax({
-            url: '/static/xsl/html2wl_client.xsl',
-            dataType: 'xml',
-            success: function(data) {
-                var doc = null;
-                var parser = new DOMParser();
-                var serializer = new XMLSerializer();
-                var xsl = createXSLT(data);
-                
-                doc = serializer.serializeToString($('#html-view div').get(0))
-                doc = parser.parseFromString(doc, 'text/xml');
-                console.log('xml',doc, doc.documentElement);
-                // TODO: Sprawdzenie błędów
-                doc = xsl.transformToDocument(doc);
-                console.log('after transform', doc, doc.documentElement);
-                doc = serialize(doc.documentElement).join('');
-                // doc = serializer.serializeToString(doc.documentElement)
-                editor.setCode(doc);
-            },
-            error: function() {alert('Error loading XSL!')}
-        });
-    };
-    
-    $('#save-button').click(function(event) {
-        event.preventDefault();
-        console.log(editor.getCode(), $('form input[name=text]').get(0));
-        $('form textarea[name=text]').val(editor.getCode());
-        $('form').ajaxSubmit(function() {
-            alert('Udało się!');
-        });
-    });
-    
-    $('#simple-view-tab').click(function() {
-        if ($(this).hasClass('active')) {
-            return;
-        }
-        $(this).addClass('active');
-        $('#source-view-tab').removeClass('active');
-        $('#source-editor').hide();
-        $('#simple-editor').show();
-        transform();
-    });
-    
-    $('#source-view-tab').click(function() {
-        if ($(this).hasClass('active')) {
-            return;
-        }
-        $(this).addClass('active');
-        $('#simple-view-tab').removeClass('active');
-        $('#simple-editor').hide();
-        $('#source-editor').show();
-        reverseTransform();
-    });
-    
-    $('.toolbar button').click(function(event) {
-        event.preventDefault();
-        var params = eval("(" + $(this).attr('ui:action-params') + ")");
-        scriptletCenter.scriptlets[$(this).attr('ui:action')](editor, params);
-    });
-    
-    $('.toolbar select').change(function() {
-        var slug = $(this).val();
-        
-        $('.toolbar-buttons-container').hide().filter('[data-group=' + slug + ']').show();
-    });
-    
-    $('.toolbar-buttons-container').hide();
-    $('.toolbar select').change();
-    
-    // $('#html-view *[x-editable]').live('mouseover', function() {
-    //     $(this).css({backgroundColor: 'red', marginLeft: -50, paddingLeft: 50});
-    //     $(this).append('<button class="edit-button">Edytuj</button>');
-    // }).live('mouseout', function() {
-    //     $(this).css({backgroundColor: null, marginLeft: 0, paddingLeft: 0});
-    //     $('.edit-button', this).remove();
-    // });
+
 });