123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- (function ($) {
- Drupal.CTools = Drupal.CTools || {};
- Drupal.CTools.dependent = {};
- Drupal.CTools.dependent.bindings = {};
- Drupal.CTools.dependent.activeBindings = {};
- Drupal.CTools.dependent.activeTriggers = [];
- Drupal.CTools.dependent.inArray = function(array, search_term) {
- var i = array.length;
- while (i--) {
- if (array[i] == search_term) {
- return true;
- }
- }
- return false;
- }
- Drupal.CTools.dependent.autoAttach = function() {
-
- for (i in Drupal.CTools.dependent.activeTriggers) {
- $(Drupal.CTools.dependent.activeTriggers[i]).unbind('change.ctools-dependent');
- }
- Drupal.CTools.dependent.activeTriggers = [];
- Drupal.CTools.dependent.activeBindings = {};
- Drupal.CTools.dependent.bindings = {};
- if (!Drupal.settings.CTools) {
- return;
- }
-
- for (id in Drupal.settings.CTools.dependent) {
-
-
-
-
- Drupal.CTools.dependent.activeBindings[id] = 0;
-
- for(bind_id in Drupal.settings.CTools.dependent[id].values) {
-
-
-
-
-
- if (!Drupal.CTools.dependent.bindings[bind_id]) {
- Drupal.CTools.dependent.bindings[bind_id] = [];
- }
-
- Drupal.CTools.dependent.bindings[bind_id].push(id);
-
-
- if (bind_id.substring(0, 6) == 'radio:') {
- var trigger_id = "input[name='" + bind_id.substring(6) + "']";
- }
- else {
- var trigger_id = '#' + bind_id;
- }
- Drupal.CTools.dependent.activeTriggers.push(trigger_id);
- if ($(trigger_id).attr('type') == 'checkbox') {
- $(trigger_id).siblings('label').addClass('hidden-options');
- }
- var getValue = function(item, trigger) {
- if ($(trigger).size() == 0) {
- return null;
- }
- if (item.substring(0, 6) == 'radio:') {
- var val = $(trigger + ':checked').val();
- }
- else {
- switch ($(trigger).attr('type')) {
- case 'checkbox':
- var val = $(trigger).attr('checked') ? true : false;
- if (val) {
- $(trigger).siblings('label').removeClass('hidden-options').addClass('expanded-options');
- }
- else {
- $(trigger).siblings('label').removeClass('expanded-options').addClass('hidden-options');
- }
- break;
- default:
- var val = $(trigger).val();
- }
- }
- return val;
- }
- var setChangeTrigger = function(trigger_id, bind_id) {
-
- var changeTrigger = function() {
- var val = getValue(bind_id, trigger_id);
- if (val == null) {
- return;
- }
- for (i in Drupal.CTools.dependent.bindings[bind_id]) {
- var id = Drupal.CTools.dependent.bindings[bind_id][i];
-
- if (typeof id != 'string') {
- continue;
- }
-
-
- if (!Drupal.CTools.dependent.activeBindings[id]) {
- Drupal.CTools.dependent.activeBindings[id] = {};
- }
- if (val != null && Drupal.CTools.dependent.inArray(Drupal.settings.CTools.dependent[id].values[bind_id], val)) {
- Drupal.CTools.dependent.activeBindings[id][bind_id] = 'bind';
- }
- else {
- delete Drupal.CTools.dependent.activeBindings[id][bind_id];
- }
- var len = 0;
- for (i in Drupal.CTools.dependent.activeBindings[id]) {
- len++;
- }
- var object = $('#' + id + '-wrapper');
- if (!object.size()) {
-
-
-
-
-
- var $original = $('#' + id);
- if ($original.is('fieldset') || $original.is('textarea')) {
- continue;
- }
- object = $('#' + id).parent();
- }
- if (Drupal.settings.CTools.dependent[id].type == 'disable') {
- if (Drupal.settings.CTools.dependent[id].num <= len) {
-
- object.attr('disabled', false);
- object.addClass('dependent-options');
- object.children().attr('disabled', false);
- }
- else {
-
-
-
- object.attr('disabled', true);
- object.children().attr('disabled', true);
- }
- }
- else {
- if (Drupal.settings.CTools.dependent[id].num <= len) {
-
- object.show(0);
- object.addClass('dependent-options');
- }
- else {
-
-
-
- object.css('display', 'none');
- }
- }
- }
- }
- $(trigger_id).bind('change.ctools-dependent', function() {
-
-
- changeTrigger(trigger_id, bind_id);
- });
-
- changeTrigger(trigger_id, bind_id);
- }
- setChangeTrigger(trigger_id, bind_id);
- }
- }
- }
- Drupal.behaviors.CToolsDependent = {
- attach: function (context) {
- Drupal.CTools.dependent.autoAttach();
-
-
- $("select.ctools-master-dependent")
- .once('ctools-dependent')
- .bind('change.ctools-dependent', function() {
- var val = $(this).val();
- if (val == 'all') {
- $('.ctools-dependent-all').show(0);
- }
- else {
- $('.ctools-dependent-all').hide(0);
- $('.ctools-dependent-' + val).show(0);
- }
- })
- .trigger('change.ctools-dependent');
- }
- }
- })(jQuery);
|