r2921 - labs: panel

r2921 - labs: panel


Author: idlesign
Date: Tue Jul 14 22:29:24 2009
New Revision: 2921
Modified:
branches/labs/panel/ui.panel.js
Log:
labs: panel
* changed: 'collapsed' ident moved from tag attribute to .data
* new: 'disable' method (& 'disabled' option)
Modified: branches/labs/panel/ui.panel.js
==============================================================================
--- branches/labs/panel/ui.panel.js    (original)
+++ branches/labs/panel/ui.panel.js    Tue Jul 14 22:29:24 2009
@@ -1,5 +1,5 @@
/*
-* Panel Draft 0.3.2
+* Panel Draft 0.3.4
* for jQuery UI
*
* Copyright (c) 2009 Igor 'idle sign' Starikov
@@ -44,6 +44,8 @@
         // suppose 'o.controls' should be a ui.toolbar control
         this.rightBox.append('<span></span>');
         this.controlsBox =
this.rightBox.children().eq(0).addClass(o.controlsClass).html(o.controls);
+        } else {
+         this.controlsBox = null;
        }
        // styling
@@ -100,8 +102,8 @@
             o.collapsed = true;
            }
         }
-         // store state as attribute
-         this.panelBox.attr('collapsed', o.collapsed);
+         // store state as data
+         this.panelBox.data('collapsed', o.collapsed);
         // panel collapsed - trigger action
         if (o.collapsed) {
@@ -112,6 +114,9 @@
        if (!o.accordion && o.draggable && $.fn.draggable){
this._makeDraggable(); }
        this.panelBox.show();
+
+        // disabled panel handling
+        this.disable(o.disabled);
     }
    },
@@ -138,6 +143,26 @@
     return false;
    },
+    disable: function (disable){
+     var o = this.options;
+
+     if (disable===undefined) disable = true;
+     if (disable) {
+        this.panelBox.children().addClass(o.disableClass);
+        // lock panel controls
+        if (this.controlsBox){
+         this.controlsBox.bind('click', function() { return false; });
+        }
+     } else {
+        this.panelBox.children().removeClass(o.disableClass);
+        if (this.controlsBox){
+         this.controlsBox.unbind('click');
+        }
+     }
+     // save state
+     o.disabled = disable;
+    },
+
    toggle: function (collapseSpeed, innerCall){
     var self = this,
        o = this.options,
@@ -219,7 +244,7 @@
        o.collapsed = !o.collapsed;
     }
-     panelBox.attr('collapsed', o.collapsed);
+     panelBox.data('collapsed', o.collapsed);
     // save state in cookie if allowed
     if (o.cookie) {
@@ -228,7 +253,7 @@
     // inner toggle call to show only one unfolded panel if 'accordion'
option is set
     if (o.accordion && !innerCall){
-        
$("."+o.accordion+"[role='panel'][collapsed='false'][id!='"+(o.id)+"']").panel('toggle',
collapseSpeed, true);
+        
$("."+o.accordion+"[role='panel'][id!='"+(o.id)+"']:not(:data(collapsed))").panel('toggle',
collapseSpeed, true);
     }
     // css animation for header and button
@@ -251,7 +276,7 @@
        .html(o.content);
     this.panelBox
        .removeAttr('role')
-        .removeAttr('collapsed')
+        .removeData('collapsed')
        .unbind('.panel')
        .removeClass(o.widgetClass);
@@ -269,7 +294,7 @@
});
$.extend($.ui.panel, {
-    version: '0.3.2',
+    version: '0.3.4',
    defaults: {
     event: 'click',
     collapsible: true,
@@ -278,6 +303,7 @@
     accordion: false,
     collapseSpeed: 'fast',
     draggable: false,
+     disabled: false,
     // true vertical text with svg or filter rendering
     trueVerticalText: false,
     // neccessary for true vertical text
@@ -297,6 +323,7 @@
     titleTextClass: 'ui-panel-title-text',
     iconClass: 'ui-icon',
     hoverClass: 'ui-state-hover',
+     disableClass: 'ui-state-disabled',
     collapsePnlClass: 'ui-panel-clps-pnl',
     //icons
     headerIconClpsd: 'ui-icon-triangle-1-e',