Your IP : 18.219.40.177
/**
* Select Module
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.PrefixSelect = function(window, $, EventMgr, App) {
'use strict';
var CACHE = {},
selectPrefixSelector = '.i-myselect_is_prefix',
inputPrefixSelector = 'input.i-input_has_prefix',
timeOutId;
function $content() {
return App.Common.selectorCache('.i-form-wr');
}
function inputPrefixHandlerWrapper(e) {
var self = this;
clearTimeout(timeOutId);
timeOutId = setTimeout(function() {
inputPrefixHandler(self);
}, 300);
}
/**
* Input prefix handler
*
**/
function inputPrefixHandler(elem, isInit) {
var value = elem.value,
tabId = elem.getAttribute('data-tabid'),
prefixSelectName = elem.getAttribute('data-prefix-name'),
selectIndex = getSelectIndex(tabId, prefixSelectName),
prevPrefix = elem.getAttribute('data-prefix'),
findObject = findInSelect(value, selectIndex),
selectElem;
if (isInit) {
selectElem = $('#' + tabId + '-' + prefixSelectName + ' li.selected')
.trigger('click', [null, { isIgnore: true }]);
var prefix = selectElem.attr('data-code');
var mask = selectElem.attr('data-mask');
//set data-prefix
elem.setAttribute('data-prefix', prefix);
//set data-mask
if (mask) {
elem.setAttribute('data-mask', mask);
EventMgr.trigger('inputMaskChangeBySetvalues', { elem: elem, mask: mask, value: value });
}
return;
}
//set find prefix value
if (findObject.isFind && prevPrefix !== findObject.prefix) {
$($('#' + tabId + '-' + prefixSelectName + ' li[data-code="' + findObject.prefix + '"]:not(".selected")')[0])
.trigger('click', [null, { isIgnore: true }]);
//set data-prefix
elem.setAttribute('data-prefix', findObject.prefix);
if (findObject.mask) {
elem.setAttribute('data-mask', findObject.mask);
EventMgr.trigger('inputMaskChangeBySetvalues', { elem: elem, mask: findObject.mask, value: value });
}
}
}
//get cached index
function getSelectIndex(tabId, name) {
if (!CACHE[tabId]) {
CACHE[tabId] = {};
} else if (CACHE[tabId][name]) {
return CACHE[tabId][name];
}
CACHE[tabId][name] = makeIndex(tabId, name);
return CACHE[tabId][name];
}
//make select values index
function makeIndex(tabId, name) {
var items = $('#' + tabId + '-' + name + ' li'),
l = items.length,
index = {};
while (l--) {
index[items[l].getAttribute('data-code')] = { mask: items[l].getAttribute('data-mask')};
}
return index;
}
//find in select index
function findInSelect(value, selectIndex) {
var searchPrefix = String(value).replace(/\)/g, '').replace(/\(/g, '').replace(/\s/g, '');
for (var i = 0, l = String(value).length; i < l; i++) {
if (selectIndex[searchPrefix]) {
return { isFind: true, prefix: searchPrefix, mask: selectIndex[searchPrefix].mask };
}
searchPrefix = searchPrefix.substring(0, searchPrefix.length - 1);
}
return { isFind: false };
}
//remove value ignore white spaces
function removeIgnoreWhiteSpace(replacement, value) {
var valueArr = String(value).split(''),
replacementArr = String(replacement).split(''),
replacementLength = replacementArr.length,
ii = 0;
for (var i = 0, l = valueArr.length; i < l; i++) {
if (valueArr[i] !== ' ' &&
valueArr[i] !== '(' &&
valueArr[i] !== ')' &&
valueArr[i] !== '_' &&
valueArr[i] !== '-') {
if (valueArr[i] === replacementArr[ii]) {
ii++;
valueArr[i] = '';
if (replacementLength === ii) {
break;
}
}
} else {
valueArr[i] = '';
}
}
return valueArr.join('');
}
/**
* Select prefix handler
*
**/
function prefixHandler(e, data, d) {
if (d && d.isIgnore) {
return;
}
var targetName = this.getAttribute('data-targetinput'),
tabId = this.getAttribute('data-tabid'),
$target = $('#' + targetName + '-' + tabId),
targetPrefix = $target.attr('data-prefix'),
key = this.value,
value = $target.val(),
$selectElem = $('#' + tabId + '-' + this.getAttribute('name') + ' li[data-val="' + key + '"]'),
newPrefix = $selectElem.attr('data-code'),
mask = $selectElem.attr('data-mask');
//remove prev prefix
value = removeIgnoreWhiteSpace(targetPrefix, value);
//just insert to 1st position
value = newPrefix + value;
$target.val(value);
if (mask) {
EventMgr.trigger('inputMaskChangeBySetvalues', { elem: $target[0], mask: mask, value: value });
}
//set new prefix
$target.attr('data-prefix', newPrefix);
}
function checkInitValue(e, data) {
var tabId = data.tabId;
$('#cont-' + tabId + ' .i-input_has_prefix').each(function() {
inputPrefixHandler(this, true);
});
}
function init() {
EventMgr.on($content(), selectPrefixSelector, 'change', prefixHandler);
EventMgr.on($content(), inputPrefixSelector, 'change', inputPrefixHandlerWrapper);
EventMgr.on($content(), inputPrefixSelector, 'keyup', inputPrefixHandlerWrapper);
EventMgr.bind('appendForm', checkInitValue);
}
var api = {
init: init
};
return api;
} (window, $, EventMgr, App);