| Current Path : /home/zieirix/www/plugins/system/jaosmap/assets/elements/japanel/ |
| Current File : /home/zieirix/www/plugins/system/jaosmap/assets/elements/japanel/depend.js |
/**
* ------------------------------------------------------------------------
* JA Open Street Map
* ------------------------------------------------------------------------
* Copyright (C) 2004-2018 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
* @license - Copyrighted Commercial Software
* Author: J.O.O.M Solutions Co., Ltd
* Websites: http://www.joomlart.com - http://www.joomlancers.com
* This file may not be redistributed in whole or significant part.
* ------------------------------------------------------------------------
*/
var JADependForm = function () {
var self = this;
self.initialized = false;
self.depends = {};
self.controls = {};
self.register = function (to, depend) {
var controls = self.controls;
if (!controls[to]) {
controls[to] = [];
self.elmsFrom(to).on('change', function (e) {
self.change(this);
});
}
if (controls[to].indexOf(depend) == -1) {
controls[to].push(depend);
}
};
self.compareVersions = function (a, b) {
var v1 = a.split('.');
var v2 = b.split('.');
var maxLen = Math.min(v1.length, v2.length);
for (var i = 0; i < maxLen; i++) {
var res = parseInt(v1[i]) - parseInt(v2[i]);
if (res != 0) {
return res;
}
}
return 0;
};
self.change = function (ctrlelm) {
var controls = self.controls,
depends = self.depends,
ctrls = controls[ctrlelm.name];
if (!ctrls) {
ctrls = controls[ctrlelm.name.substr(0, ctrlelm.name.length - 2)];
}
if (!ctrls) {
return false;
}
for (var i = 0; i < ctrls.length; i++) {
var dpd = ctrls[i];
var showup = true;
for (var ctrl in depends[dpd]) {
var cvals = depends[dpd][ctrl];
if (showup) {
var celms = self.elmsFrom(ctrl);
showup = showup && !self.closest(celms, '.control-group').data('disabled');
if (showup) {
showup = showup && self.valuesFrom(celms).some(function (val) {
return (cvals.indexOf(val) > -1 );
});
}
}
};
self.elmsFrom(dpd).each(function (i, delm) {
if (showup) {
self.enable(delm);
} else {
self.disable(delm);
}
}, this);
if (controls[dpd] && controls[dpd] != dpd) {
self.elmsFrom(dpd).trigger('change');
}
};
};
self.add = function (control, info) {
var depends = self.depends,
name = info.group + '[' + control + ']';
info = jQuery.extend({
group: 'params',
hiderow: true,
control: name
}, info);
info.hiderow = !!info.hiderow;
var arr = info.elms.split(',');
for (var i = 0; i < arr.length; i++) {
var elm = info.group + '[' + arr[i].trim() + ']';
if (!depends[elm]) {
depends[elm] = {};
}
if (!depends[elm][name]) {
depends[elm][name] = [];
}
depends[elm][name].push(info.val);
self.register(name, elm);
}
};
self.start = function () {
jQuery('h4.block-head').each(function (i, el) {
self.closest(el, 'div.control-group').addClass('segment');
}, this);
jQuery('.hideanchor').each(function (i, el) {
var ctr = self.closest(el, '.control-group');
if (ctr.length) {
ctr.addClass('hide');
}
}, this);
self.update();
self.initialized = true;
};
self.update = function () {
for (var k in self.controls) {
self.elmsFrom(k).trigger('change');
}
};
self.enable = function (el) {
var dur = self.initialized ? 300 : 0;
self.closest(el, '.control-group').show(dur).data('disabled', false);
};
self.disable = function (el) {
var dur = self.initialized ? 300 : 0;
self.closest(el, '.control-group').hide(dur).data('disabled', true);
};
self.elmsFrom = function (name) {
var multipe = name + '[]';
var elm = jQuery('[name="'+name+'"]');
if (!elm.length) {
elm = jQuery('[name="'+multipe+'"]');
}
return elm;
};
self.valuesFrom = function (els) {
var vals = [];
els.each(function(i, e) {
var el = jQuery(e),
val = el.val();
if (!val) {
return;
}
if (el.is('select')) {
vals = Array.isArray(val) ? val : [val];
} else if((el.is(':radio') || el.is(':checkbox')) && el.is(':checked')){
vals.push(val);
}
});
return vals;
};
self.closest = function (elm, sel) {
return jQuery(elm).parents(sel);
};
self.segment = function (seg) {
if (jQuery('#'+seg).hasClass('close')) {
self.showseg(seg);
} else {
self.hideseg(seg);
}
};
self.showseg = function (seg) {
var segelm = jQuery('#' + seg),
snext = self.closest(segelm, '.control-group').next();
while (snext.length && !snext.hasClass('segment')) {
if (!snext.hasClass('hide') && !snext.data('disabled') ) {
snext.show(200);
}
snext = snext.next();
}
segelm.removeClass('close').addClass('open');
};
self.hideseg = function (seg) {
var segelm = jQuery('#' + seg),
snext = self.closest(segelm, '.control-group').next();
while (snext.length && !snext.hasClass('segment')) {
if (!snext.hasClass('hide') && !snext.data('disabled')) {
snext.hide(200);
}
snext = snext.next();
}
segelm.removeClass('open').addClass('close');
};
};
var JADepend = window.JADepend || {};
JADepend.inst = new JADependForm();