upgrade omega again
[indybay:drupal.git] / docs / sites / all / modules / contrib / context / context_ui / context_ui.js
1 (function($) {
2
3 /**
4  * Context plugin form.
5  */
6 function DrupalContextPlugins(form) {
7   this.form = form;
8
9   // Sync the form selector and state field with the list of plugins currently enabled.
10   this.setState = function() {
11     var state = [];
12     $('.context-plugin-list > li', this.form).each(function() {
13       var plugin = $(this).attr('class').split('context-plugin-')[1].split(' ')[0];
14       if ($(this).is('.disabled')) {
15         $('.context-plugin-selector select option[value='+plugin+']', this.form).show();
16       }
17       else {
18         state.push(plugin);
19         $('.context-plugin-selector select option[value='+plugin+']', this.form).hide();
20       }
21     });
22     // Set the hidden plugin list state.
23     $('.context-plugin-selector input.context-plugins-state', this.form).val(state.join(','));
24
25     // Reset the selector.
26     $('.context-plugin-selector select', this.form).val(0);
27     return this;
28   };
29
30   // Add a plugin to the list.
31   this.addPlugin = function(plugin) {
32     $('.context-plugin-list > li.context-plugin-'+plugin, this.form).removeClass('disabled');
33     this.showForm(plugin).setState();
34     return this;
35   };
36
37   // Remove a plugin from the list.
38   this.removePlugin = function(plugin) {
39     $('.context-plugin-list > li.context-plugin-'+plugin, this.form).addClass('disabled');
40     this.hideForm(plugin).setState();
41     return this;
42   };
43
44   // Show a plugin form.
45   this.showForm = function(plugin) {
46     $('.context-plugin-forms > .context-plugin-form.active-form', this.form).removeClass('active-form');
47     $('.context-plugin-forms > .context-plugin-form-'+plugin, this.form).addClass('active-form');
48     $('.context-plugin-list > li > a').removeClass('active-form');
49     $('.context-plugin-list > li.context-plugin-'+plugin+' > a').addClass('active-form');
50     return this;
51   };
52
53   // Show a plugin form.
54   this.hideForm = function(plugin) {
55     $('.context-plugin-forms > .context-plugin-form-'+plugin, this.form).removeClass('active-form');
56     $('.context-plugin-list > li.context-plugin-'+plugin+' > a').removeClass('active-form');
57     return this;
58   };
59
60   // Select handler.
61   $('.context-plugin-selector select', this.form).change(function() {
62     var plugins = $(this).parents('div.context-plugins').data('contextPlugins');
63     if (plugins) {
64       var plugin = $(this).val();
65       plugins.addPlugin(plugin);
66     }
67   });
68
69   // Show form handler.
70   $('.context-plugin-list > li > a', this.form).click(function() {
71     var plugins = $(this).parents('div.context-plugins').data('contextPlugins');
72     if (plugins) {
73       var plugin = $(this).attr('href').split('#context-plugin-form-')[1];
74       plugins.showForm(plugin);
75     }
76     return false;
77   });
78
79   // Remove handler.
80   $('.context-plugin-list span.remove', this.form).click(function() {
81     var plugins = $(this).parents('div.context-plugins').data('contextPlugins');
82     if (plugins) {
83       var plugin = $(this).parent().attr('href').split('#context-plugin-form-')[1];
84       plugins.removePlugin(plugin);
85     }
86     return false;
87   });
88
89   // Set the plugin states.
90   this.setState();
91 }
92
93 Drupal.behaviors.context_ui = { attach: function(context) {
94   // Initialize context plugin form.
95   $('form div.context-plugins:not(.context-ui-processed)').each(function() {
96     $(this).addClass('context-ui-processed');
97     $(this).data('contextPlugins', new DrupalContextPlugins($(this)));
98   });
99
100   // Initialize context editor.
101   if ($().pageEditor) {
102     $('form.context-editor:not(.context-ui-processed)')
103       .addClass('context-ui-processed')
104       .pageEditor()
105       .each(function() {
106         var editor = $(this);
107         var defaultContext = $('li.context-editable', this).attr('id').split('context-editable-trigger-')[1];
108         $(this).data('defaultContext', defaultContext);
109
110         // Attach start/end handlers to editable contexts.
111         $('li.context-editable a.edit', editor).click(function() {
112           var trigger = $(this).parents('li.context-editable').addClass('context-editing');
113           var context = trigger.attr('id').split('context-editable-trigger-')[1];
114           editor.pageEditor('start', context);
115           return false;
116         });
117         $('li.context-editable a.done', editor).click(function() {
118           editor.pageEditor('end');
119           return false;
120         });
121         $(editor).submit(function() {
122           if (editor.pageEditor('isEditing')) {
123             editor.pageEditor('end');
124           }
125         });
126
127         // Handler for start event.
128         editor.bind('start.pageEditor', function(event, context) {
129           // Fallback to first context if param is empty.
130           if (!context) {
131             context = $(this).data('defaultContext');
132             $('li#context-editable-trigger-'+context, this).addClass('context-editing');
133           }
134           $(document.body).addClass('context-editing');
135           $('#context-editable-'+context, this).show();
136         });
137
138         // Handler for end event.
139         editor.bind('end.pageEditor', function(event, context) {
140           $(document.body).removeClass('context-editing');
141           $('div.contexts div.context-editable', this).hide();
142           $('li.context-editable').removeClass('context-editing');
143           $('form.context-editor').addClass('edited');
144         });
145       });
146   }
147 }};
148 })(jQuery);