Coding style overhaul for Python files (PEP8 conformant). Removed buggy csstidy pytho...
[redakcja.git] / platforma / static / js / wiki / source_editor.js
index 0f67110..9cfa510 100644 (file)
@@ -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();
        }