X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/02a98d2af6f1fabf567b575c5f2d818688af1594..f7712b20c83a39b1020064cb87b1128f87b0ae51:/platforma/static/js/wiki/source_editor.js?ds=sidebyside

diff --git a/platforma/static/js/wiki/source_editor.js b/platforma/static/js/wiki/source_editor.js
index 0f671103..9cfa510a 100644
--- a/platforma/static/js/wiki/source_editor.js
+++ b/platforma/static/js/wiki/source_editor.js
@@ -1,49 +1,75 @@
 /* COMMENT */
 (function($) {
 	
-	function CodeMirrorPerspective(doc, callback) 
+	function CodeMirrorPerspective(options) 
 	{
-		this.perspective_id = 'CodeMirrorPerspective';
-		this.doc = doc; // document model
-		
-		var self = this;
-		
-		this.codemirror = CodeMirror.fromTextArea('codemirror_placeholder', {			
-			parserfile: 'parsexml.js',
-			path: STATIC_URL + "js/lib/codemirror/",
-			stylesheet: STATIC_URL + "css/xmlcolors_15032010.css",
-			parserConfig: {
-				useHTMLKludges: false
-			},
-			iframeClass: 'xml-iframe',
-			textWrapping: true,
-			lineNumbers: true,
-			width: "100%",
-			tabMode: 'spaces',
-			indentUnit: 0,
-			initCallback: function() {
-				$('#source-editor .toolbar button').click(function(event){
-	            event.preventDefault();
-	            var params = eval("(" + $(this).attr('data-ui-action-params') + ")");
-	            	scriptletCenter.scriptlets[$(this).attr('data-ui-action')](self.codemirror, params);
-	        	});
-	        
-	        	$('.toolbar select').change(function(event){
-		            var slug = $(this).val();
-		            
-		            $('.toolbar-buttons-container').hide().filter('[data-group=' + slug + ']').show();
-		            $(window).resize();
-		        });
-	        
-		        $('.toolbar-buttons-container').hide();
-		        $('.toolbar select').change();		
+		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/",
+				stylesheet: STATIC_URL + "css/xmlcolors_15032010.css",
+				parserConfig: {
+					useHTMLKludges: false
+				},
+				iframeClass: 'xml-iframe',
+				textWrapping: true,
+				lineNumbers: false,
+				width: "100%",
+				tabMode: 'spaces',
+				indentUnit: 0,
+				initCallback: function(){
+					
+					 self.codemirror.grabKeys(function(event) {			
+						if (event.button) {
+							$(event.button).trigger('click');
+							event.button = null;
+						}
+					}, function(event) {
+						/* CM reports characters 2 times - as event and as code */  
+						if((typeof event) != "object")
+							return false;
+							
+						if(!event.altKey)
+							return false;	
 						
-				console.log("Initialized CodeMirror");
-				// textarea is no longer needed
-				$('codemirror_placeholder').remove();
-				callback.call(self);
-			}	
-		});
+						var c = String.fromCharCode(event.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 button').click(function(event){
+						event.preventDefault();
+						var params = eval("(" + $(this).attr('data-ui-action-params') + ")");
+						scriptletCenter.scriptlets[$(this).attr('data-ui-action')](self.codemirror, params);
+					});
+					
+					$('.toolbar select').change(function(event){
+						var slug = $(this).val();
+						
+						$('.toolbar-buttons-container').hide().filter('[data-group=' + slug + ']').show();
+						$(window).resize();
+					});
+					
+					$('.toolbar-buttons-container').hide();
+					$('.toolbar select').change();
+					
+					console.log("Initialized CodeMirror");
+					// textarea is no longer needed
+					$('codemirror_placeholder').remove();
+					old_callback.call(self);
+				}
+			});	
+		};
+		
+		$.wiki.Perspective.call(this, options);
 	};
 	
 	
@@ -56,7 +82,7 @@
 	CodeMirrorPerspective.prototype.onEnter = function(success, failure) {
 		$.wiki.Perspective.prototype.onEnter.call(this);
 	
-		console.log(this.doc);
+		console.log('Entering', this.doc);
 		this.codemirror.setCode(this.doc.text);
 		if(success) success();
 	}
@@ -64,7 +90,7 @@
 	CodeMirrorPerspective.prototype.onExit = function(success, failure) {
 		$.wiki.Perspective.prototype.onExit.call(this);
 	
-		console.log(this.doc);
+		console.log('Exiting', this.doc);
 		this.doc.setText(this.codemirror.getCode());
 		if(success) success();
 	}