X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/5913c54d19b8f6775633176032161d49f9b2f1aa..f216a5268a7e03c010b6abaed1fb29d1e387fa1f:/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
index 547456f0..478cb11b 100644
--- a/src/redakcja/static/js/wiki/view_editor_source.js
+++ b/src/redakcja/static/js/wiki/view_editor_source.js
@@ -1,109 +1,58 @@
-/* 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);
+    class CodeMirrorPerspective extends $.wiki.Perspective {
+        constructor(options) {
+            super(options);
+            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();
+        }
 
-		$(window).resize();
-		this.unfreezeState(this._uistate);
+        onEnter(success, failure) {
+            super.onEnter();
+            this.codemirror.setValue(this.doc.text);
+            this.codemirror.scrollTo(0, this.config().position || 0);
 
-		if(success) success();
-	}
+            if(success) success();
+        }
 
-	CodeMirrorPerspective.prototype.onExit = function(success, failure) {
-		this.freezeState();
+        onExit(success, failure) {
+            super.onExit();
+            this.config().position =  this.codemirror.getScrollInfo().top;
+            this.doc.setText(this.codemirror.getValue());
 
-		$.wiki.Perspective.prototype.onExit.call(this);
-		console.log('Exiting', this.doc);
-		this.doc.setText(this.codemirror.getCode());
+            $.wiki.exitTab('#SearchPerspective');
 
-        if ($('.vsplitbar').hasClass('active') && $('#SearchPerspective').hasClass('active')) {
-            $.wiki.switchToTab('#ScanGalleryPerspective');
+            if(success) success();
         }
+    }
 
-		if(success) success();
-	}
-
-	$.wiki.CodeMirrorPerspective = CodeMirrorPerspective;
+    $.wiki.CodeMirrorPerspective = CodeMirrorPerspective;
 
 })(jQuery);