149 lines
5.2 KiB
JavaScript
149 lines
5.2 KiB
JavaScript
(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);
|