Rearrange source to src dir.
[redakcja.git] / src / redakcja / static / js / wiki / view_editor_source.js
diff --git a/src/redakcja/static/js/wiki/view_editor_source.js b/src/redakcja/static/js/wiki/view_editor_source.js
new file mode 100644 (file)
index 0000000..547456f
--- /dev/null
@@ -0,0 +1,109 @@
+/* COMMENT */
+(function($) {
+
+       function CodeMirrorPerspective(options)
+       {
+               var old_callback = options.callback;
+        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);
+       };
+
+       CodeMirrorPerspective.prototype.onEnter = function(success, failure) {
+               $.wiki.Perspective.prototype.onEnter.call(this);
+
+               console.log('Entering', this.doc);
+               this.codemirror.setCode(this.doc.text);
+
+               /* fix line numbers bar */
+               var $nums = $('.CodeMirror-line-numbers');
+           var barWidth = $nums.width();
+
+               $(this.codemirror.frame.contentDocument.body).css('padding-left', barWidth);
+               // $nums.css('left', -barWidth);
+
+               $(window).resize();
+               this.unfreezeState(this._uistate);
+
+               if(success) success();
+       }
+
+       CodeMirrorPerspective.prototype.onExit = function(success, failure) {
+               this.freezeState();
+
+               $.wiki.Perspective.prototype.onExit.call(this);
+               console.log('Exiting', this.doc);
+               this.doc.setText(this.codemirror.getCode());
+
+        if ($('.vsplitbar').hasClass('active') && $('#SearchPerspective').hasClass('active')) {
+            $.wiki.switchToTab('#ScanGalleryPerspective');
+        }
+
+               if(success) success();
+       }
+
+       $.wiki.CodeMirrorPerspective = CodeMirrorPerspective;
+
+})(jQuery);