123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- (function($) {
- /**
- * Context plugin form.
- */
- function DrupalContextPlugins(form) {
- this.form = form;
- // Sync the form selector and state field with the list of plugins currently enabled.
- this.setState = function() {
- var state = [];
- $('.context-plugin-list > li', this.form).each(function() {
- var plugin = $(this).attr('class').split('context-plugin-')[1].split(' ')[0];
- if ($(this).is('.disabled')) {
- $('.context-plugin-selector select option[value="'+plugin+'"]', this.form).show();
- }
- else {
- state.push(plugin);
- $('.context-plugin-selector select option[value="'+plugin+'"]', this.form).hide();
- }
- });
- // Set the hidden plugin list state.
- $('.context-plugin-selector input.context-plugins-state', this.form).val(state.join(','));
- // Reset the selector.
- $('.context-plugin-selector select', this.form).val(0);
- return this;
- };
- // Add a plugin to the list.
- this.addPlugin = function(plugin) {
- $('.context-plugin-list > li.context-plugin-'+plugin, this.form).removeClass('disabled');
- this.showForm(plugin).setState();
- return this;
- };
- // Remove a plugin from the list.
- this.removePlugin = function(plugin) {
- $('.context-plugin-list > li.context-plugin-'+plugin, this.form).addClass('disabled');
- this.hideForm(plugin).setState();
- return this;
- };
- // Show a plugin form.
- this.showForm = function(plugin) {
- $('.context-plugin-forms > .context-plugin-form.active-form', this.form).removeClass('active-form');
- $('.context-plugin-forms > .context-plugin-form-'+plugin, this.form).addClass('active-form');
- $('.context-plugin-list > li > a').removeClass('active-form');
- $('.context-plugin-list > li.context-plugin-'+plugin+' > a').addClass('active-form');
- return this;
- };
- // Show a plugin form.
- this.hideForm = function(plugin) {
- $('.context-plugin-forms > .context-plugin-form-'+plugin, this.form).removeClass('active-form');
- $('.context-plugin-list > li.context-plugin-'+plugin+' > a').removeClass('active-form');
- return this;
- };
- // Select handler.
- $('.context-plugin-selector select', this.form).change(function() {
- var plugins = $(this).parents('div.context-plugins').data('contextPlugins');
- if (plugins) {
- var plugin = $(this).val();
- plugins.addPlugin(plugin);
- }
- });
- // Show form handler.
- $('.context-plugin-list > li > a', this.form).click(function() {
- var plugins = $(this).parents('div.context-plugins').data('contextPlugins');
- if (plugins) {
- var plugin = $(this).attr('href').split('#context-plugin-form-')[1];
- plugins.showForm(plugin);
- }
- return false;
- });
- // Remove handler.
- $('.context-plugin-list span.remove', this.form).click(function() {
- var plugins = $(this).parents('div.context-plugins').data('contextPlugins');
- if (plugins) {
- var plugin = $(this).parent().attr('href').split('#context-plugin-form-')[1];
- plugins.removePlugin(plugin);
- }
- return false;
- });
- // Set the plugin states.
- this.setState();
- }
- Drupal.behaviors.context_ui = { attach: function(context) {
- // Initialize context plugin form.
- $('form div.context-plugins:not(.context-ui-processed)').each(function() {
- $(this).addClass('context-ui-processed');
- $(this).data('contextPlugins', new DrupalContextPlugins($(this)));
- });
- // Initialize context editor.
- if ($().pageEditor) {
- $('form.context-editor:not(.context-ui-processed)')
- .addClass('context-ui-processed')
- .pageEditor()
- .each(function() {
- var editor = $(this);
- var defaultContext = $('li.context-editable', this).attr('id').split('context-editable-trigger-')[1];
- $(this).data('defaultContext', defaultContext);
- // Attach start/end handlers to editable contexts.
- $('li.context-editable a.edit', editor).click(function() {
- var trigger = $(this).parents('li.context-editable').addClass('context-editing');
- var context = trigger.attr('id').split('context-editable-trigger-')[1];
- editor.pageEditor('start', context);
- return false;
- });
- $('li.context-editable a.done', editor).click(function() {
- editor.pageEditor('end');
- return false;
- });
- $(editor).submit(function() {
- if (editor.pageEditor('isEditing')) {
- editor.pageEditor('end');
- }
- });
- // Handler for start event.
- editor.bind('start.pageEditor', function(event, context) {
- // Fallback to first context if param is empty.
- if (!context) {
- context = $(this).data('defaultContext');
- $('li#context-editable-trigger-'+context, this).addClass('context-editing');
- }
- $(document.body).addClass('context-editing');
- $('#context-editable-'+context, this).show();
- });
- // Handler for end event.
- editor.bind('end.pageEditor', function(event, context) {
- $(document.body).removeClass('context-editing');
- $('div.contexts div.context-editable', this).hide();
- $('li.context-editable').removeClass('context-editing');
- $('form.context-editor').addClass('edited');
- });
- });
- }
- }};
- })(jQuery);
|