Poprawione tooltipy i skróty klawiszowe.
authorŁukasz Rekucki <lrekucki@gmail.com>
Fri, 4 Sep 2009 10:13:57 +0000 (12:13 +0200)
committerŁukasz Rekucki <lrekucki@gmail.com>
Fri, 4 Sep 2009 10:13:57 +0000 (12:13 +0200)
apps/toolbar/templates/toolbar/toolbar.html
project/static/js/editor.js
project/templates/explorer/panels/xmleditor.html

index a35c7bc..29528c1 100644 (file)
@@ -19,7 +19,8 @@
             <button type="button" 
                 ui:action="{{ button.scriptlet.name }}"
                 ui:action-params="{{ button.params|escape }}"
             <button type="button" 
                 ui:action="{{ button.scriptlet.name }}"
                 ui:action-params="{{ button.params|escape }}"
-                {% if button.key %}ui:hotkey="{{ button.key|keycode }}"{% endif %} >
+                {% if button.key %}ui:hotkey="{{ button.key|keycode }}"{% endif %} 
+                {% if button.tooltip %}ui:tooltip="{{ button.tooltip }}"{% endif %} >
             {{ button.label }}
             </button>
             {% endfor %}
             {{ button.label }}
             </button>
             {% endfor %}
index 9dd1224..3ad2989 100644 (file)
@@ -1,5 +1,6 @@
 function Panel(panelWrap) {
     var self = this;
 function Panel(panelWrap) {
     var self = this;
+    self.hotkeys = [];
     self.wrap = panelWrap;
     self.contentDiv = $('.panel-content', panelWrap);
     self.instanceId = Math.ceil(Math.random() * 1000000000);
     self.wrap = panelWrap;
     self.contentDiv = $('.panel-content', panelWrap);
     self.instanceId = Math.ceil(Math.random() * 1000000000);
@@ -110,6 +111,7 @@ Panel.prototype.saveInfo = function() {
 Panel.prototype.connectToolbar = function()
 {
     var self = this;
 Panel.prototype.connectToolbar = function()
 {
     var self = this;
+    self.hotkeys = [];
     
     // check if there is a one
     var toolbar = $("div.toolbar", this.contentDiv);
     
     // check if there is a one
     var toolbar = $("div.toolbar", this.contentDiv);
@@ -145,18 +147,53 @@ Panel.prototype.connectToolbar = function()
     // connect action buttons
     var action_buttons = $('*.toolbar-button-groups-container button', toolbar);
     action_buttons.each(function() {
     // connect action buttons
     var action_buttons = $('*.toolbar-button-groups-container button', toolbar);
     action_buttons.each(function() {
-        var button = $(this); 
-        
-        button.click(function() {
+        var button = $(this);
+        var hk = button.attr('ui:hotkey');
+
+        var callback = function() {
            editor.callScriptlet(button.attr('ui:action'),
                 self, eval(button.attr('ui:action-params')) );
            editor.callScriptlet(button.attr('ui:action'),
                 self, eval(button.attr('ui:action-params')) );
-        });
+        };
 
 
-        // connect hotkeys
+        // connect button
+        button.click(callback);
         
         
+        // connect hotkey
+        if(hk) self.hotkeys[parseInt(hk)] = callback;
+
+        // tooltip
+        if (button.attr('ui:tooltip') )
+        {
+            var tooltip = button.attr('ui:tooltip');
+            if(hk) tooltip += ' [Alt+'+hk+']';
+
+            button.wTooltip({
+                delay: 1000,
+                style: {
+                    border: "1px solid #7F7D67",
+                    opacity: 0.9,
+                    background: "#FBFBC6",
+                    padding: "1px",
+                    fontSize: "12px"
+                },
+                content: tooltip
+            });
+        }
     });
 }
 
     });
 }
 
+Panel.prototype.hotkeyPressed = function(event)
+{
+    var callback = this.hotkeys[event.keyCode];
+    if(callback) callback();
+}
+
+Panel.prototype.isHotkey = function(event) {
+    if( event.altKey && (this.hotkeys[event.keyCode] != null) )
+        return true;
+    return false;
+}
+
 //
 Panel.prototype.fireEvent = function(name) {
     $(document).trigger('panel:'+name, this);
 //
 Panel.prototype.fireEvent = function(name) {
     $(document).trigger('panel:'+name, this);
@@ -445,6 +482,10 @@ Editor.prototype.callScriptlet = function(scriptlet_id, panel, params) {
 }
   
 $(function() {
 }
   
 $(function() {
+    $.fbind = function (self, func) {
+        return function() { return func.apply(self, arguments); };
+    };
+    
     editor = new Editor();
 
     // do the layout
     editor = new Editor();
 
     // do the layout
index c818550..39a05e5 100644 (file)
@@ -1,6 +1,5 @@
 {% load toolbar_tags %}
 
 {% load toolbar_tags %}
 
-
 <div class="change-font-size" style="">
     <div class="decrease-font-size">A<sup>-</sup></div>
     <div class="increase-font-size">A<sup>+</sup></div>
 <div class="change-font-size" style="">
     <div class="decrease-font-size">A<sup>-</sup></div>
     <div class="increase-font-size">A<sup>+</sup></div>
@@ -23,40 +22,27 @@ panel_hooks = {
         var textareaId = 'xmleditor-' + Math.ceil(Math.random() * 1000000000);
                $('textarea', panel).attr('id', textareaId);
 
         var textareaId = 'xmleditor-' + Math.ceil(Math.random() * 1000000000);
                $('textarea', panel).attr('id', textareaId);
 
-               var texteditor = CodeMirror.fromTextArea(textareaId, {
+       var texteditor = CodeMirror.fromTextArea(textareaId, {
             parserfile: 'parsexml.js',
             path: "{{STATIC_URL}}js/codemirror/",
             stylesheet: "{{STATIC_URL}}css/xmlcolors.css",
             parserConfig: {useHTMLKludges: false},
             onChange: function() {
             parserfile: 'parsexml.js',
             path: "{{STATIC_URL}}js/codemirror/",
             stylesheet: "{{STATIC_URL}}css/xmlcolors.css",
             parserConfig: {useHTMLKludges: false},
             onChange: function() {
-                               panel.trigger('panel:contentChanged', self);
+               self.fireEvent('contentChanged');
             },
             initCallback: function(editor) {
                 // Editor is loaded
                 // Buttons are connected
                 // register callbacks for actions
             },
             initCallback: function(editor) {
                 // Editor is loaded
                 // Buttons are connected
                 // register callbacks for actions
-                
-
-/*                texteditor.grabKeys(function(event) { 
-                    if (keys[event.keyCode]) {
-                        keys[event.keyCode]();
-                    }
-                }, function(event) { return event.altKey && keys[event.keyCode]; }); */
+                texteditor.grabKeys(
+                    $.fbind(self, self.hotkeyPressed),
+                    $.fbind(self, self.isHotkey) );
             }
         })
         
         $(texteditor.frame).css({width: '100%', height: '100%'});
         
             }
         })
         
         $(texteditor.frame).css({width: '100%', height: '100%'});
         
-        $('#toolbar-buttons li').wTooltip({
-            delay: 1000, 
-            style: {
-                border: "1px solid #7F7D67",
-                opacity: 0.9, 
-                background: "#FBFBC6", 
-                padding: "1px",
-                fontSize: "12px"
-            }
-        });
+        
 
         $('.decrease-font-size', panel).click(function() {
             var frameBody = $('body', $(texteditor.frame).contents());
 
         $('.decrease-font-size', panel).click(function() {
             var frameBody = $('body', $(texteditor.frame).contents());