HEX
Server: nginx/1.26.3
System: Linux debian 6.1.0-31-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.128-1 (2025-02-07) x86_64
User: root (0)
PHP: 5.6.40
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/gxdaosen.net/wp-content/plugins/futurio-extra/lib/metabox/assets/js/jquery.dowhen.js
/* =============================================================================
   DO WHEN
   ========================================================================== */

(function ($) {

	'use strict';

	var _options,
		_fields = [],
		_getActionByName,
		_getValidActions,
		_parseAndSaveData,
		_doesFieldMatch,
		_onStateMatched,
		_onStateUnmatched,
		_checkDoState,
		_checkFieldDoState;

	_getValidActions = function() {
		var validActions = [];

		for (var action in $.fn.doWhen.actions) {
			if ($.fn.doWhen.actions.hasOwnProperty(action)) {
				validActions.push(action);
			}
		}

		return validActions.join(', ');
	};

	_getActionByName = function(action) {
		var config = {},
			matchedConfig = false;

		if (action === null) {
			throw Error('$.doWhen: Action must be specified. Valid options are: [' + _getValidActions() + ']');
		}

		for (var possibleAction in $.fn.doWhen.actions) {
			if ($.fn.doWhen.actions.hasOwnProperty(possibleAction) && possibleAction === action) {
				matchedConfig = $.fn.doWhen.actions[possibleAction];
			}
		}

		if (matchedConfig === false) {
			throw Error('$.doWhen: Invalid action "' + action + '". Valid options are: [' + _getValidActions() + ']');
		}

		// fill out any unfilled options with the defaults
		$.extend(config, $.fn.doWhen.actions.blank, matchedConfig);

		return config;
	};

	_parseAndSaveData = function(el) {
		var $el = $(el),
			when = $el.attr('data-' + _options.doWhenAttr),
			action = $el.data(_options.doActionAttr),
			actions = _getActionByName(action),
			parsed = [],
			jsonObject = false,
			convertToJSON;

		convertToJSON = function(str) {
			var json = false;

			try {
				json = $.parseJSON(str);
			} catch (e) {
				return false;
			}

			return json;
		};

		if (when.indexOf('||')) {
			var arrWhen = when.split('||');
			
			for (var i = 0, len = arrWhen.length; i < len; i += 1) {
				jsonObject = convertToJSON(arrWhen[i]);
				
				if (jsonObject !== false) {
					parsed.push(jsonObject);
				}
			}
		} else {
			jsonObject = convertToJSON(when);

			if (jsonObject !== false) {
				parsed.push(jsonObject);
			}
		}

		for (var j = 0, parsedLen = parsed.length; j < parsedLen; j += 1) {
			for (var key in parsed[j]) {
				var parsedItem = parsed[j];

				if (parsedItem.hasOwnProperty(key)) {
					// if the data is an empty array it means we can ignore it
					if (parsedItem[key].length === 0) {
						delete parsedItem[key];
					} else {
						// store all the form fields that impact conditional functionality
						if (!_fields.hasOwnProperty(key)) {
							_fields[key] = [];
						}

						// store all the elements related to the specific form field
						_fields[key].push(el);
					}
				}
			}
		}

		$el.data(_options.doActionAttr + '-parsed', actions);
		$el.data(_options.doWhenAttr + '-parsed', parsed);
	};

	_doesFieldMatch = function(idOrName, value) {
		var $field = $('#' + idOrName),
			isMatched = false,
			fieldValue = [];

		// find the field based on the id or name and get the value(s)
		if ($field.length === 0) {
			$field = $('[name="' + idOrName + '"]');

			if ($field.length === 0) {
				throw Error('$.doWhen: Invalid action "' + action + '". Valid options are: [' + _getValidActions() + ']');
			}

			$field.each(function(i, el) {
				if ($(el).prop('checked')) {
					fieldValue.push($(el).val());
				}
			});
		} else {
			fieldValue.push($field.val());
		}

		for (var i = 0, len = value.length; i < len; i += 1) {
			for (var i2 = 0, len2 = fieldValue.length; i2 < len2; i2 += 1) {
				if (value[i] === fieldValue[i2]) {
					isMatched = true;
				}
			}
		}

		return isMatched;
	};

	_onStateMatched = function($el) {
		var action = $el.data(_options.doActionAttr).toLowerCase(),
			actions = $el.data(_options.doActionAttr + '-parsed');

		actions.match($el, function() {
			$el.trigger('updated.doWhen').trigger('matched.' + action + '.doWhen');
		});
	};

	_onStateUnmatched = function($el) {
		var action = $el.data(_options.doActionAttr).toLowerCase(),
			actions = $el.data(_options.doActionAttr + '-parsed');

		actions.unmatch($el, function() {
			$el.trigger('updated.doWhen').trigger('unmatched.' + action + '.doWhen');
		});
	};

	_checkDoState = function($filteredItems) {
		var $items;

		if ($filteredItems) {
			$items = $filteredItems;
		} else {
			$items = $('[data-' + _options.doWhenAttr + ']');
		}

		$items.each(function(i, el) {
			var $el = $(el),
				conditions = $el.data(_options.doWhenAttr + '-parsed'),
				toDo = false;

			for (var j = 0, len = conditions.length; j < len; j += 1) {
				var condition = conditions[j],
					conditionMet = true;

				for (var key in condition) {

					if (condition.hasOwnProperty(key) && conditionMet) {
						conditionMet = _doesFieldMatch(key, condition[key]);
					}
				}

				if (conditionMet) {
					toDo = true;
				}
			}

			if (toDo) {
				_onStateMatched($el);
			} else {
				_onStateUnmatched($el);
			}
		});
	};

	_checkFieldDoState = function() {
		var $field = $(this),
			idOrName = $field.attr('id'),
			nodeName = this.nodeName.toUpperCase();

		if (nodeName === 'INPUT' && ($field.attr('type') === 'radio' || $field.attr('type') === 'checkbox')) {
			idOrName = $field.attr('name');
		}

		if (_fields.hasOwnProperty(idOrName)) {
			// only check the items which will change
			var $filteredItems = $(_fields[idOrName]);
			_checkDoState($filteredItems);
			return;
		}

		// can't detect which items are impacted so check all
		_checkDoState();
	};

	$.fn.doWhen = function(options) {

		_options = $.extend({}, $.fn.doWhen.defaults, options);

		_fields = [];

		$(this).find('[data-' + _options.doWhenAttr + ']').each(function(i, el) {
			// format and save the data
			_parseAndSaveData(el);
		});

		for (var key in _fields) {
			if (_fields.hasOwnProperty(key)) {
				var $field = $('#' + key),
					nodeName;

				if ($field.length === 0) {
					$field = $('[name="' + key + '"]');
				}

				nodeName = $field.get(0).nodeName.toUpperCase();

				if ((nodeName === 'SELECT' || nodeName === 'INPUT') === false) {
					$field = $('[name="' + key + '"]');
				}

				$field.off('change.doWhen', _checkFieldDoState)
					.on('change.doWhen', _checkFieldDoState);
			}
		}

		// check all fields
		_checkDoState();

		return this;

	};

	$.fn.doWhen.defaults = {
		doWhenAttr: 'do-when',
		doActionAttr: 'do-action'
	};

	$.fn.doWhen.actions = {
		blank: {
			match: function($el, callback) {
				callback();
			},
			unmatch: function($el, callback) {
				callback();
			}
		},
		show: {
			match: function($el, callback) {
				$el.slideDown();
				callback();
			},
			unmatch: function($el, callback) {
				$el.slideUp();
				callback();
			}
		},
		hide: {
			match: function($el, callback) {
				$el.slideUp();
				callback();
			},
			unmatch: function($el, callback) {
				$el.slideDown();
				callback();
			}
		},
		click: {
			match: function($el, callback) {
				$el.get(0).click();
				callback();
			},
			unmatch: function($el, callback) {
				callback();
			}
		},
		disable: {
			match: function($el, callback) {
				$el.prop('disabled', true);
				callback();

				if ($el.get(0).tagName.toLowerCase() === 'option') {
					var $select = $el.parent(),
						$enabledOptions = $select.find('option:not(:disabled)');

					if ($el.prop('selected')) {
						$enabledOptions.eq(0).prop('selected', true);
					}

					if ($enabledOptions.length <= 1) {
						$select.prop('disabled', true);
					}
				}
			},
			unmatch: function($el, callback) {
				$el.prop('disabled', false);
				callback();

				if ($el.get(0).tagName.toLowerCase() === 'option') {
					var $select = $el.parent(),
						$enabledOptions = $select.find('option:not(:disabled)');

					if ($enabledOptions.length > 1) {
						$select.prop('disabled', false);
					}
				}
			}
		}
	};

	$.fn.doWhen.addAction = function(name, match, unmatch) {
		$.fn.doWhen.actions[name] = {
			match: match,
			unmatch: unmatch
		};
	};

}(jQuery));