123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- Drupal.HierarchicalSelectConfigForm = {};
- (function ($, cfg) {
- cfg.context = function(configId) {
- if (configId === undefined) {
- return $('.hierarchical-select-config-form > *').not('.live-preview');
- }
- else {
- return $('#hierarchical-select-config-form-'+ configId + ' > *').not('.live-preview');
- }
- };
- cfg.levelLabels = function(configId) {
- var $status = $('.level-labels-status', cfg.context(configId));
- var $enforceDeepest = $('.enforce-deepest input', cfg.context(configId));
- var showHide = function(speed) {
- $affected = $('.level-labels-settings', cfg.context(configId));
- if (!$status.is(':checked')) {
- $affected.hide(speed);
- }
- else {
- // For showing/hiding rows, I'm relying on setting the style
- // "display: none" and removing it again. jQuery's show()/hide() leave
- // "display: block" behind and are thereby messing up the table layout.
- if ($enforceDeepest.slice(1, 2).is(':checked')) {
- $affected.find('tr').removeAttr('style');
- }
- else {
- // We need to take special measures if sticky headers are enabled, so
- // handle the show/hide separately when it's enabled.
- if ($affected.find('table.sticky-header').length == 0) {
- $affected.find('tr').slice(0, 2).removeAttr('style'); // Show header tr and root level tr.
- $affected.find('tr').slice(2).attr('style', 'display: none'); // Hide all other tr's.
- }
- else {
- $affected.find('table').show(speed); // Show both tables (the one with the sticky headers and the one with the actual content).
- $affected.find('table').slice(1).find('tr').slice(2).attr('style', 'display: none'); // Show all tr's after the header tr and root level tr of the 2nd table (the one with the actual content).
- }
- }
- // If $status was unchecked previously, the entire div would have been
- // hidden!
- if ($affected.css('display') == 'none') {
- $affected.show(speed);
- }
- }
- };
- $status.click(function() { showHide(200); });
- $enforceDeepest.click(function() { showHide(200); });
- showHide(0);
- };
- cfg.dropbox = function(configId) {
- var $status = $('.dropbox-status', cfg.context(configId));
- var showHide = function(speed) {
- var $affected = $('.dropbox-title, .dropbox-limit, .dropbox-reset-hs', cfg.context(configId)).parent();
- if ($status.is(':checked')) {
- $affected.show(speed);
- }
- else {
- $affected.hide(speed);
- }
- };
- $status.click(function() { showHide(200); });
- showHide(0);
- };
- cfg.editability = function(configId) {
- var $status = $('.editability-status', cfg.context(configId));
- var $allowNewLevels = $('.editability-allow-new-levels', cfg.context(configId));
- var showHide = function(speed) {
- var $affected = $('.editability-per-level-settings, .form-item:has(.editability-allow-new-levels)', cfg.context(configId));
- var $maxLevels = $('.form-item:has(.editability-max-levels)', cfg.context(configId));
- if ($status.is(':checked')) {
- if ($allowNewLevels.is(':checked')) {
- $affected.add($maxLevels).show(speed);
- }
- else {
- $affected.show(speed);
- }
- }
- else {
- $affected.add($maxLevels).hide(speed);
- }
- };
- var showHideMaxLevels = function(speed) {
- $affected = $('.editability-max-levels', cfg.context(configId)).parent();
- if ($allowNewLevels.is(':checked')) {
- $affected.show(speed);
- }
- else {
- $affected.hide(speed);
- }
- };
- $status.click(function() { showHide(200); });
- $allowNewLevels.click(function() { showHideMaxLevels(200); });
- showHideMaxLevels(0);
- showHide(0);
- };
- cfg.entityCount = function(configId) {
- var $status = $('.entity-count-enabled', cfg.context(configId));
- var showHide = function(speed) {
- var $affected = $('.entity-count-settings', cfg.context(configId));
- if ($status.is(':checked')) {
- $affected.show(speed);
- }
- else {
- $affected.hide(speed);
- }
- };
- $status.click(function() { showHide(200); });
- showHide(0);
- };
- cfg.livePreview = function(configId) {
- // React on changes to any input, except the ones in the live preview.
- $updateLivePreview = $('input', cfg.context(configId))
- .filter(':not(.create-new-item-input):not(.create-new-item-create):not(.create-new-item-cancel)')
- .change(function() {
- // TODO: Do an AJAX submit of the entire form.
- });
- };
- $(document).ready(function() {
- for (var id in Drupal.settings.HierarchicalSelect.configForm) {
- var configId = Drupal.settings.HierarchicalSelect.configForm.id;
- cfg.levelLabels(configId);
- cfg.dropbox(configId);
- cfg.editability(configId);
- cfg.entityCount(configId);
- //cfg.livePreview(configId);
- }
- });
- })(jQuery, Drupal.HierarchicalSelectConfigForm);
|