Plugowalne akcje w toolbarach.
[redakcja.git] / project / static / js / editor.js
index 6e63eb0..5366c58 100644 (file)
@@ -47,6 +47,7 @@ Panel.prototype.load = function (url) {
                        $(self.contentDiv).html(data);
                        self.hooks = panel_hooks;                       
                        panel_hooks = null;
+            self.connectToolbar();
                        self.callHook('load');
                },
         error: function(request, textStatus, errorThrown) {
@@ -104,6 +105,52 @@ Panel.prototype.saveInfo = function() {
        return saveInfo;
 }
 
+Panel.prototype.connectToolbar = function() {
+    // check if there is a one
+    var toolbar = $("div.toolbar", this.contentDiv);
+    $.log('Connecting toolbar', toolbar);
+    if(toolbar.length == 0) return;
+
+    // connect group-switch buttons
+    var group_buttons = $('*.toolbar-tabs-container button', toolbar);
+
+    $.log('Found groups:', group_buttons);
+
+    group_buttons.each(function() {
+        var group = $(this);
+        var group_name = group.attr('ui:group');
+        $.log('Connecting group: ' + group_name);
+
+        group.click(function() {
+            // change the active group
+            var active = $("*.toolbar-tabs-container button.active");
+            if (active != group) {
+                active.removeClass('active');                
+                group.addClass('active');
+                $(".toolbar-button-groups-container p").each(function() {
+                    if ( $(this).attr('ui:group') != group_name) 
+                        $(this).hide();
+                    else
+                        $(this).show();
+                });
+            }
+        });        
+    });
+
+    // connect action buttons
+    var action_buttons = $('*.toolbar-button-groups-container button');
+    action_buttons.each(function() {
+        var button = $(this);
+        var action = button.attr('ui:action').split(':');
+        var action_name = action[0];
+        var action_data = action[1];
+        
+        button.click(function() {
+            $.log('emiting action ', action_name, ' with data: ', action_data);
+            $(document).trigger('ui:action:' + action_name, action_data);
+        });
+    });
+}
 
 function Editor() {
        this.rootDiv = $('#panels');
@@ -121,7 +168,7 @@ Editor.prototype.setupUI = function() {
        $('#panels > *.panel-wrap').each(function() {
                var panelWrap = $(this);
                $.log('wrap: ', panelWrap);
-               panel = new Panel(panelWrap);
+               var panel = new Panel(panelWrap);
                panelWrap.data('ctrl', panel); // attach controllers to wraps
         panel.load($('.panel-toolbar select', panelWrap).val());
         
@@ -130,6 +177,9 @@ Editor.prototype.setupUI = function() {
             panelWrap.data('ctrl').load(url);
             self.savePanelOptions();
         });
+
+        $('.panel-toolbar button.refresh-button', panelWrap).click(
+            function() { panel.refresh(); } );            
     });
 
        $(document).bind('panel:contentChanged', function() { self.onContentChanged.apply(self, arguments) });
@@ -145,7 +195,8 @@ Editor.prototype.loadConfig = function() {
         panels: [
             {name: 'htmleditor', ratio: 0.5},
             {name: 'gallery', ratio: 0.5}
-        ]
+        ],
+        lastUpdate: 0,
     }
     
     try {
@@ -197,6 +248,7 @@ Editor.prototype.savePanelOptions = function() {
         })
     });
     self.options.panels = panels;
+    self.options.lastUpdate = (new Date()).getTime() / 1000;
     $.log($.toJSON(self.options));
     $.cookie('options', $.toJSON(self.options), { expires: 7, path: '/'});
 }
@@ -220,20 +272,21 @@ Editor.prototype.saveToBranch = function(msg)
        }
 
        saveInfo = changed_panel.data('ctrl').saveInfo();
-        var postData = ''
-        if(saveInfo.postData instanceof Object)
-            postData = $.param(saveInfo.postData);
-        else
-            postData = saveInfo.postData;
+    var postData = ''
+    
+    if(saveInfo.postData instanceof Object)
+        postData = $.param(saveInfo.postData);
+    else
+        postData = saveInfo.postData;
 
-        postData += '&' + $.param({'commit_message': msg})
+    postData += '&' + $.param({'commit_message': msg})
 
        $.ajax({
                url: saveInfo.url,
                dataType: 'json',
                success: function(data, textStatus) {
                        if (data.result != 'ok')
-                               $.log('save errors: ', data.errors)
+                               self.showPopup('save-error', data.errors[0]);
                        else {
                                self.refreshPanels(changed_panel);
                 $('#toolbar-button-save').attr('disabled', 'disabled');
@@ -307,30 +360,37 @@ Editor.prototype.sendPullRequest = function () {
        }); */
 }
 
-Editor.prototype.showPopup = function(name) 
+Editor.prototype.showPopup = function(name, text
 {
     var self = this;
-    self.popupQueue.push(name)
+    self.popupQueue.push( [name, text] )
 
     if( self.popupQueue.length > 1) 
         return;
 
-    $('#message-box > #' + name).fadeIn();
+    var box = $('#message-box > #' + name);
+    $('*.data', box).html(text);
+    box.fadeIn();
  
-   self._nextPopup = function() {
+    self._nextPopup = function() {
         var elem = self.popupQueue.pop()
         if(elem) {
-            elem = $('#message-box > #' + elem);
-            elem.fadeOut(300, function() {
-                if( self.popupQueue.length > 0) 
-                    $('#message-box > #' + self.popupQueue[0]).fadeIn();
-                    setTimeout(self._nextPopup, 1700);
-            });
+            var box = $('#message-box > #' + elem[0]);
 
+            box.fadeOut(300, function() {
+                $('*.data', box).html();
+    
+                if( self.popupQueue.length > 0) {
+                    box = $('#message-box > #' + self.popupQueue[0][0]);
+                    $('*.data', box).html(self.popupQueue[0][1]);
+                    box.fadeIn();
+                    setTimeout(self._nextPopup, 5000);
+                }
+            });
         }
     }
 
-    setTimeout(self._nextPopup, 2000);
+    setTimeout(self._nextPopup, 5000);
 }