Add language tags definition, caret and bubbles in editor.
[redakcja.git] / src / redakcja / static / js / wiki / view_editor_source.js
index 547456f..988d23c 100644 (file)
@@ -1,90 +1,60 @@
-/* COMMENT */
 (function($) {
 
 (function($) {
 
-       function CodeMirrorPerspective(options)
-       {
-               var old_callback = options.callback;
+    function CodeMirrorPerspective(options) {
+       var old_callback = options.callback;
         options.callback = function(){
         options.callback = function(){
-                       var self = this;
-
-                       this.codemirror = CodeMirror.fromTextArea('codemirror_placeholder', {
-                               parserfile: 'parsexml.js',
-                               path: STATIC_URL + "js/lib/codemirror-0.8/",
-                               stylesheet: STATIC_URL + "css/xmlcolors_20100906.css",
-                               parserConfig: {
-                                       useHTMLKludges: false
-                               },
-                               iframeClass: 'xml-iframe',
-                               textWrapping: true,
-                               lineNumbers: true,
-                               width: "100%",
-                               height: "100%",
-                               tabMode: 'default',
-                               indentUnit: 0,
-                               readOnly: CurrentDocument.readonly || false,
-                               initCallback: function(){
-
-                                       self.codemirror.grabKeys(function(event) {
-                                               if (event.button) {
-                                                       $(event.button).trigger('click');
-                                                       event.button = null;
-                                               }
-                                       }, function(keycode, event) {
-                                               if(!event.altKey)
-                                                       return false;
-
-                                               var c = String.fromCharCode(keycode).toLowerCase();
-                                               var button = $("#source-editor button[data-ui-accesskey='"+c+"']");
-                                               if(button.length == 0)
-                                                       return false;
-
-                                               /* it doesn't matter which button we pick - all do the same */
-                                               event.button = button[0];
-                                               return true;
-                                       });
-
-                                       $('#source-editor .toolbar').toolbarize({
-                                           actionContext: self.codemirror
-                                       });
-
-                                       console.log("Initialized CodeMirror");
-
-                                       // textarea is no longer needed
-                                       $('codemirror_placeholder').remove();
-
-                                       old_callback.call(self);
-                               }
-                       });
-               };
-
-               $.wiki.Perspective.call(this, options);
-       };
-
-
-       CodeMirrorPerspective.prototype = new $.wiki.Perspective();
-
-       CodeMirrorPerspective.prototype.freezeState = function() {
-               this.config().position = this.codemirror.win.scrollY || 0;
-       };
-
-       CodeMirrorPerspective.prototype.unfreezeState = function () {
-               this.codemirror.win.scroll(0, this.config().position || 0);
-       };
+           var self = this;
+
+           this.codemirror = CodeMirror.fromTextArea($(
+                '#codemirror_placeholder').get(0), {
+                    mode: 'xml',
+                    lineWrapping: true,
+                   lineNumbers: true,
+                   readOnly: CurrentDocument.readonly || false,
+                    identUnit: 0,
+                });
+
+
+           $('#source-editor').keydown(function(event) {
+               if(!event.altKey)
+                   return;
+
+               var c = event.key;
+               var button = $("#source-editor button[data-ui-accesskey='"+c+"']");
+               if(button.length == 0)
+                   return;
+                button.get(0).click();
+                event.preventDefault();
+           });
+
+           $('#source-editor .toolbar').toolbarize({
+               actionContext: self.codemirror
+           });
+
+           // textarea is no longer needed
+           $('#codemirror_placeholder').remove();
+           old_callback.call(self);
+       }
 
 
-       CodeMirrorPerspective.prototype.onEnter = function(success, failure) {
-               $.wiki.Perspective.prototype.onEnter.call(this);
+        $.wiki.Perspective.call(this, options);
+    };
 
 
-               console.log('Entering', this.doc);
-               this.codemirror.setCode(this.doc.text);
 
 
-               /* fix line numbers bar */
-               var $nums = $('.CodeMirror-line-numbers');
-           var barWidth = $nums.width();
+    CodeMirrorPerspective.prototype = new $.wiki.Perspective();
 
 
-               $(this.codemirror.frame.contentDocument.body).css('padding-left', barWidth);
-               // $nums.css('left', -barWidth);
+    CodeMirrorPerspective.prototype.freezeState = function() {
+        this.config().position =  this.codemirror.getScrollInfo().top;
+    };
+
+    CodeMirrorPerspective.prototype.unfreezeState = function () {
+        this.codemirror.scrollTo(0, this.config().position || 0);
+    };
+
+       CodeMirrorPerspective.prototype.onEnter = function(success, failure) {
+               $.wiki.Perspective.prototype.onEnter.call(this);
+
+               this.codemirror.setValue(this.doc.text);
 
 
-               $(window).resize();
                this.unfreezeState(this._uistate);
 
                if(success) success();
                this.unfreezeState(this._uistate);
 
                if(success) success();
                this.freezeState();
 
                $.wiki.Perspective.prototype.onExit.call(this);
                this.freezeState();
 
                $.wiki.Perspective.prototype.onExit.call(this);
-               console.log('Exiting', this.doc);
-               this.doc.setText(this.codemirror.getCode());
+           this.doc.setText(this.codemirror.getValue());
 
 
-        if ($('.vsplitbar').hasClass('active') && $('#SearchPerspective').hasClass('active')) {
-            $.wiki.switchToTab('#ScanGalleryPerspective');
-        }
+            if ($('.vsplitbar').hasClass('active') && $('#SearchPerspective').hasClass('active')) {
+                $.wiki.switchToTab('#ScanGalleryPerspective');
+            }
 
 
-               if(success) success();
+           if(success) success();
        }
 
        $.wiki.CodeMirrorPerspective = CodeMirrorPerspective;
        }
 
        $.wiki.CodeMirrorPerspective = CodeMirrorPerspective;