Coding style overhaul for Python files (PEP8 conformant). Removed buggy csstidy pytho...
[redakcja.git] / platforma / static / js / wiki / source_editor.js
index 6f7ed3d..9cfa510 100644 (file)
@@ -1,47 +1,75 @@
 /* COMMENT */
 (function($) {
        
 /* COMMENT */
 (function($) {
        
-       function CodeMirrorPerspective(doc, callback
+       function CodeMirrorPerspective(options
        {
        {
-               this.perspective_id = 'CodeMirrorPerspective';
-               this.doc = doc;
+               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;   
+                                               
+                                               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);
+                               }
+                       });     
+               };
                
                
-               var self = this;
-               
-               $('#source-editor .toolbar button').click(function(event){
-            event.preventDefault();
-            var params = eval("(" + $(this).attr('ui:action-params') + ")");
-            scriptletCenter.scriptlets[$(this).attr('ui:action')](editor, 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();
-               
-               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() {
-                               console.log("Initialized CodeMirror");
-                               callback.call(self);
-                       }       
-               });
+               $.wiki.Perspective.call(this, options);
        };
        
        
        };
        
        
        CodeMirrorPerspective.prototype.onEnter = function(success, failure) {
                $.wiki.Perspective.prototype.onEnter.call(this);
        
        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();
        }
        
                this.codemirror.setCode(this.doc.text);
                if(success) success();
        }
        
+       CodeMirrorPerspective.prototype.onExit = function(success, failure) {
+               $.wiki.Perspective.prototype.onExit.call(this);
+       
+               console.log('Exiting', this.doc);
+               this.doc.setText(this.codemirror.getCode());
+               if(success) success();
+       }
+       
        $.wiki.CodeMirrorPerspective = CodeMirrorPerspective;
                
 })(jQuery);
        $.wiki.CodeMirrorPerspective = CodeMirrorPerspective;
                
 })(jQuery);