Your IP : 3.128.180.89
/**
* namespace APP
*/
var App = App || {};
/**
* Init method of application
*/
App.init = function() {
'use strict';
App.mgr();
//core methods here
function nextEventBind(e, data) {
var event = data.event,
cb = data.cb,
tData = data.tData;
if (typeof cb === 'function') {
EventMgr.one(event, cb, tData);
}
}
EventMgr.bind('nextEventBind', nextEventBind);
};
/**
* Global vars
*/
App.Global = function() {
'use strict';
var HeaderMoving = false,
bannerHtml = null,
warning = [],
anychartXML = null,
selid,
scrollTop,
targetId = '',
msg = {};
return {
HeaderMoving: HeaderMoving,
bannerHtml: bannerHtml,
warning: warning,
anychartXML: anychartXML,
selid: selid,
scrollTop: scrollTop,
msg: msg,
targetId: targetId
};
}();
'use strict';
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/**
* Module with utilits
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
*/
/*global App:true*/
App.u = App.Common = function (window, $, EventMgr) {
'use strict';
var init = function init() {
EventMgr.on($(window.document), linkSelector, 'keydown', linkKeyDownHandler);
},
ENTERKEY = 13,
SPACE = 32,
linkSelector = 'a',
getQueryString = function getQueryString(queryObj, noesc) {
var j = 0,
paramString = '',
curValue,
keyVar;
for (keyVar in queryObj) {
if (keyVar !== '') {
if (j !== 0) {
paramString += '&';
}
curValue = queryObj[keyVar];
//encode params
if (noesc) {
paramString += keyVar + '=' + curValue;
} else {
paramString += keyVar + '=' + encodeURIComponent(curValue);
}
j++;
}
}
return paramString;
},
//parse url to object
//@todo unit test
parseParams = function parseParams(paramString) {
if (paramString !== undefined && paramString !== null) {
paramString = paramString.replace(/^\?/, '');
var paramStirngArray = paramString.split('&'),
paramStirngObj = {},
re = /=(.+)?/,
tmp;
for (var i = 0; i < paramStirngArray.length; i++) {
tmp = paramStirngArray[i].split(re);
paramStirngObj[tmp[0]] = tmp[1] ? tmp[1] : '';
}
return paramStirngObj;
} else {
return {};
}
},
//@todo unit test
serializeForAttr = function serializeForAttr(obj) {
var keyVar,
paramStr = '',
i = 0;
/* jslint forin:true */
for (keyVar in obj) {
i++;
if (i !== 1) {
paramStr += '&';
}
paramStr += keyVar + '=' + encodeURIComponent(obj[keyVar]);
}
return paramStr;
},
//from here
// http://www.jonefox.com/blog/2009/05/21/internet-explorer-and-the-innerhtml-property/
replaceHtml = function replaceHtml(el, html) {
if (el) {
var oldEl = typeof el === 'string' ? document.getElementById(el) : el,
newEl = document.createElement(oldEl.nodeName);
//Preserve any properties we care about (id and class in this example)
newEl.id = oldEl.id;
newEl.className = oldEl.className;
//set the new HTML and insert back into the DOM
newEl.innerHTML = html;
if (oldEl.parentNode) {
oldEl.parentNode.replaceChild(newEl, oldEl);
} else {
oldEl.innerHTML = html;
}
//return a reference to the new element in case we need it
oldEl = null;
return newEl;
}
},
linkKeyDownHandler = function linkKeyDownHandler(e) {
var codeKey = e.which || e.keyCode;
if (ENTERKEY === codeKey || SPACE === codeKey) {
$(this).trigger('click');
e.preventDefault();
}
},
wordWrap = function wordWrap(str, wordLen) {
if (!str) {
return str;
}
wordLen = wordLen || 100;
var wArr = str.split(' '),
length = wArr.length,
cWord,
cWordLen,
newWord,
wordLenReg = new RegExp('(.{' + wordLen + '})', 'g');
for (var i = 0; i < length; i++) {
if (wArr[i].length > wordLen) {
cWord = wArr[i].split(wordLenReg);
cWordLen = cWord.length;
newWord = '';
for (var j = 0; j < cWordLen; j++) {
if (cWord[j] !== '') {
newWord += cWord[j] + '<br>';
}
}
str = str.replace(wArr[i], newWord);
//replace \n to <br/>
str = str.replace(/\n/g, '<br/>');
}
}
return str;
},
injectCss = function injectCss(url) {
var link = document.createElement('link');
link.setAttribute('rel', 'stylesheet');
link.setAttribute('type', 'text/css');
link.setAttribute('href', url);
document.getElementsByTagName('head')[0].appendChild(link);
},
required = function required(file, callback, param) {
var script = document.getElementsByTagName('script')[0],
newjs = document.createElement('script');
newjs.onreadystatechange = function () {
if (newjs.readyState === 'loaded' || newjs.readyState === 'complete') {
newjs.onreadystatechange = null;
if (App.u.isFunction(callback)) {
callback(param);
param = null;
file = null;
}
}
};
newjs.onload = function () {
if (App.u.isFunction(callback)) {
callback(param);
param = null;
file = null;
}
};
newjs.src = file;
script.parentNode.insertBefore(newjs, script);
},
noMoreId = {},
noMoreCheckTimeId,
noMoreThan = function noMoreThan(id, timeOut, func) {
var time = new Date().getTime(),
dTime;
timeOut = timeOut ? timeOut : 100;
if (!noMoreId[id]) {
noMoreId[id] = {
q: false,
lastRun: time,
timeOut: timeOut
};
runFunc(func, time, id);
} else {
dTime = time - noMoreId[id].lastRun;
//check for timeout
if (dTime > timeOut) {
runFunc(func, time, id);
clearTimeout(noMoreCheckTimeId);
//to queue
} else {
noMoreId[id].q = true;
clearTimeout(noMoreCheckTimeId);
//todo closure
noMoreCheckTimeId = setTimeout(function () {
checkLastCall(func, time, id);
}, timeOut * 2);
}
}
},
checkLastCall = function checkLastCall(func, time, id) {
if (noMoreId[id].q === true) {
runFunc(func, time, id);
}
},
runFunc = function runFunc(func, time, id) {
if (typeof func === 'function') {
func();
noMoreId[id].lastRun = time;
noMoreId[id].q = false;
}
},
clone = function clone(obj) {
// Handle the 3 simple types, and null or undefined
if (null === obj || 'object' !== (typeof obj === 'undefined' ? 'undefined' : _typeof(obj))) {
return obj;
}
var copy;
// Handle Date
if (obj instanceof Date) {
copy = new Date();
copy.setTime(obj.getTime());
return copy;
}
// Handle Array
if (obj instanceof Array) {
copy = [];
for (var i = 0, len = obj.length; i < len; i++) {
copy[i] = clone(obj[i]);
}
return copy;
}
// Handle Object
if (obj instanceof Object) {
copy = {};
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) {
copy[attr] = clone(obj[attr]);
}
}
return copy;
}
throw new Error("Unable to copy obj! Its type isn't supported.");
},
msg = {},
storage = { breadcrumb: {}, dashboard: {} },
/**
* Cache jQuery Selector for static elems
*/
selectorCache = function () {
var selectors = {};
return function (selector) {
if (selectors[selector]) {
return selectors.selector;
}
selectors.selector = $(selector);
return selectors.selector;
};
}(),
//check for string
isString = function isString(string) {
return typeof string === 'string';
},
//check for function
isFunction = function isFunction(func) {
return typeof func === 'function';
},
//check for type Number
isNumber = function isNumber(num) {
return typeof num === 'number';
},
//escape regexp expression
escapeRegExp = function escapeRegExp(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
},
//escape qoute & double quote
escapeQuote = function escapeQuote(str) {
return String(str).replace(/"/g, '"');
},
getCaretPosition = function getCaretPosition(obj) {
obj.focus();
if (obj.selectionStart) {
return obj.selectionStart;
} else if (document.selection) {
var sel = document.selection.createRange();
var clone = sel.duplicate();
sel.collapse(true);
clone.moveToElementText(obj);
clone.setEndPoint('EndToEnd', sel);
return clone.text.length;
}
return 0;
},
CSSEscape = function CSSEscape(value) {
var string = String(value);
var length = string.length;
var index = -1;
var codeUnit;
var result = '';
var firstCodeUnit = string.charCodeAt(0);
while (++index < length) {
codeUnit = string.charCodeAt(index);
// Note: there’s no need to special-case astral symbols, surrogate
// pairs, or lone surrogates.
// If the character is NULL (U+0000), then throw an
// `InvalidCharacterError` exception and terminate these steps.
if (codeUnit == 0x0000) {
throw new InvalidCharacterError('Invalid character: the input contains U+0000.');
}
if (
// If the character is in the range [\1-\1F] (U+0001 to U+001F) or is
// U+007F, […]
codeUnit >= 0x0001 && codeUnit <= 0x001F || codeUnit == 0x007F ||
// If the character is the first character and is in the range [0-9]
// (U+0030 to U+0039), […]
index == 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039 ||
// If the character is the second character and is in the range [0-9]
// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]
index == 1 && codeUnit >= 0x0030 && codeUnit <= 0x0039 && firstCodeUnit == 0x002D) {
// http://dev.w3.org/csswg/cssom/#escape-a-character-as-code-point
result += '\\' + codeUnit.toString(16) + ' ';
continue;
}
// If the character is not handled by one of the above rules and is
// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or
// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to
// U+005A), or [a-z] (U+0061 to U+007A), […]
if (codeUnit >= 0x0080 || codeUnit == 0x002D || codeUnit == 0x005F || codeUnit >= 0x0030 && codeUnit <= 0x0039 || codeUnit >= 0x0041 && codeUnit <= 0x005A || codeUnit >= 0x0061 && codeUnit <= 0x007A) {
// the character itself
result += string.charAt(index);
continue;
}
// Otherwise, the escaped character.
// http://dev.w3.org/csswg/cssom/#escape-a-character
result += '\\' + string.charAt(index);
}
return result;
},
insertStringAfterCaret = function insertStringAfterCaret(elem, textToInsert, removeLine) {
if (!elem || !textToInsert) {
return;
}
elem.focus();
var val = elem.value,
end = val.length === 0 ? 0 : getCaretPosition(elem),
start = removeLine ? val.lastIndexOf('\n', end - 1) + 1 : end,
before = val.substring(0, start),
after = val.substring(end);
elem.value = before + textToInsert + after;
var r,
index = (before + textToInsert).length;
if (elem.setSelectionRange) {
elem.setSelectionRange(index, index);
} else {
r = elem.createTextRange();
r.collapse(true);
r.select(index, index);
}
},
formatDateTime = function formatDateTime(timestamp) {
var date = new Date(timestamp);
return date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2) + ' ' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ':' + ('0' + date.getSeconds()).slice(-2);
},
parseDate = function parseDate(timeString) {
var cArr = String(timeString).split(' ');
if (cArr.length === 2) {
var dArr = cArr[0].split('-'),
tArr = cArr[1].split(':');
if (dArr.length === 3 && tArr.length === 3) {
return new Date(dArr[0], parseInt(dArr[1], 10) - 1, dArr[2], tArr[0], tArr[1], tArr[2]);
}
}
return new Date();
},
//check file size function
checkFileSize = function checkFileSize(tabId, name) {
var inputFile = name ? $('#' + name + '-' + tabId) : $('#form-wrapper-' + tabId + ' input[type="file"]'),
msg = null,
field = null;
inputFile.each(function () {
var maxSize = this.getAttribute('data-max-size'),
msgSize = this.getAttribute('data-maxsize-msg');
field = this;
if (this.files && maxSize) {
maxSize -= 0;
for (var i = 0, l = this.files.length; i < l; i++) {
if (this.files[i].size > maxSize) {
msg = String(pageInfo.messages.fileMaxSize).replace('__VALUE__', msgSize);
return false;
}
}
}
});
return {
msg: msg,
field: field
};
},
openInNewWindow = function openInNewWindow(url, param) {
var newwindow = window.open('', param);
if (newwindow) {
newwindow.openner = null;
newwindow.location = url;
}
},
removeParam = function removeParam(form, param) {
var len = form.length,
i,
name;
for (i = 0; i < len; i++) {
name = form[i].name;
delete param[name];
}
return param;
},
/**
* Устанавливаем позиционирование выпадающего списка на форме
*/
setOptionListPosition = function setOptionListPosition(prefixId, id) {
var elemHeight, elem, bodyHeight, elemTop, formTop, form, tabId;
bodyHeight = window.document.body.offsetHeight;
//calculate position for list options
elem = $(prefixId + id);
elem[0].style.top = '';
elemTop = elem.offset().top;
elemHeight = elem[0].offsetHeight;
if (bodyHeight - elemTop < elemHeight) {
tabId = elem[0].getAttribute('data-tabid');
form = $('#form-scroll-' + tabId);
if (form.length === 0) {
//if it filter
form = $('#tcw-' + tabId);
}
formTop = form.offset().top;
if (formTop > elemTop - elemHeight - 19) {
elem[0].style.top = '-' + elemHeight / 2 + 'px';
} else {
elem[0].style.top = '-' + elemHeight + 'px';
}
}
},
/**
* Получить предыдущую html ноду
* @param {HTMLElement} node - html node
* @return {null | HTMLElement}
*/
getPreviousNode = function getPreviousNode(node) {
var el = node;
var previousSibling = null;
if (el) {
while (!previousSibling && el) {
el = el.previousSibling;
if (el.nodeType === 1) {
previousSibling = el;
}
}
}
return previousSibling;
},
/**
* Check on refresh menu flag in response
*/
checkRefreshMenu = function checkRefreshMenu(data) {
if (data.refreshMenu) {
EventMgr.trigger('favoriteMenuUpdateDone');
}
};
return {
init: init,
setOptionListPosition: setOptionListPosition,
parseParams: parseParams,
replaceHtml: replaceHtml,
serializeForAttr: serializeForAttr,
wordWrap: wordWrap,
required: required,
noMoreThan: noMoreThan,
checkRefreshMenu: checkRefreshMenu,
clone: clone,
injectCss: injectCss,
msg: msg,
removeParam: removeParam,
storage: storage,
selectorCache: selectorCache,
isNumber: isNumber,
isString: isString,
isFunction: isFunction,
getQueryString: getQueryString,
escapeRegExp: escapeRegExp,
insertStringAfterCaret: insertStringAfterCaret,
getCaretPosition: getCaretPosition,
escapeQuote: escapeQuote,
formatDateTime: formatDateTime,
parseDate: parseDate,
checkFileSize: checkFileSize,
openInNewWindow: openInNewWindow,
CSSEscape: CSSEscape,
getPreviousNode: getPreviousNode
};
}(window, $, EventMgr);
//# sourceMappingURL=App.Common.js.map
'use strict';
/**
* Модуль для работы с DOM
* App.Dom
* @param {object} window global object
* @return {{addClass: function, removeClass: function,
* toggleClass: function, byId: function, hasClass: function
* }}
*
*/
App.Dom = function (window) {
'use strict';
var doc = document,
testAPIelem = doc.createElement('div');
/**
* getElementById wrapper
* @param {String} id value of id
* @return {?null|object}
*/
function byId(id) {
if (typeof id !== 'string') {
return null;
}
return doc.getElementById(id);
}
/**
* add class to HTMLNode
* @param {HTMLNode} elem HTML node
* @param {string} className name of adding class
* @type {Function}
*/
var addClass = testAPIelem.classList ? function (elem, className) {
if (!elem) {
return;
}
if (typeof className !== 'string') {
return;
}
elem.classList.add(className);
} : function (elem, className) {
if (!elem) {
return;
}
if (typeof className !== 'string') {
return;
}
if (!elem.className.match(className)) {
elem.className += ' ' + className;
}
};
/**
* remove class
* @param {HTMLNode} elem HTML node
* @param {string} className name of removing class
* @type {Function}
*/
var removeClass = testAPIelem.classList ? function (elem, className) {
if (!elem) {
return;
}
if (typeof className !== 'string') {
return;
}
elem.classList.remove(className);
} : function (elem, className) {
if (!elem) {
return;
}
if (typeof className !== 'string') {
return;
}
var regex = new RegExp(className, 'g');
elem.className += elem.className.replace(regex, '');
};
/**
* toggle class
* @param {HTMLNode} elem HTML node
* @param {string} className name of toggling class
* @type {Function}
* @return {undefined}
*/
var toogleClass = testAPIelem.classList ? function (elem, className) {
if (!elem) {
return;
}
if (typeof className !== 'string') {
return;
}
elem.classList.toggle(className);
} : function (elem, className) {
if (!elem) {
return;
}
if (typeof className !== 'string') {
return;
}
var classes = elem.className;
if (classes.match(className)) {
var regex = new RegExp(className, 'g');
elem.className += classes.replace(regex, '');
} else {
elem.className += ' ' + className;
}
};
/**
* check for has class
* @param {HTMLNode} elem HTML node
* @param {string} className name of checking class
* @type {Function}
* @return {boolean|undefined}
*/
var hasClass = testAPIelem.classList ? function (elem, className) {
if (!elem) {
return;
}
if (typeof className !== 'string') {
return;
}
return elem.classList.contains(className);
} : function (elem, className) {
if (!elem) {
return;
}
if (typeof className !== 'string') {
return;
}
var classes = elem.className;
return classes.match(className);
};
return {
init: function init() {},
byId: byId,
addClass: addClass,
removeClass: removeClass,
toogleClass: toogleClass,
hasClass: hasClass
};
}(window);
//# sourceMappingURL=App.Dom.js.map
'use strict';
/**
* Menu module
*
* find in menu, show/hide menu items,
* @param {object} window global object
* @param {object|function} $ jQuery
* @param {object} EventMgr Event manager
* @param {object} App Application
*/
App.Menu = function (window, $, EventMgr, App) {
'use strict';
var groups = [],
menuType = '',
init = function init() {
EventMgr.bind('loadPage', buildGroups);
EventMgr.bind('loadPage', utilGroups);
//EventMgr.bind('loadPage', checkWidthItems);
EventMgr.bind('loadPage', indexMenu);
EventMgr.bind('readCookie', MenuSetUp);
EventMgr.obind(headerGroupSel, 'click', toggleShowGroup);
EventMgr.obind(groupControlsSel, 'click', groupsControlHandler);
EventMgr.obind(menuPosControlSel, 'click', setMenuPosition);
EventMgr.obind(menuPosBtnSel, 'click', lockMenuPosition);
EventMgr.obind($searchField(), 'keyup', searchHandler);
EventMgr.obind(searchCloseBtnSel, 'click', searchItemsClear);
EventMgr.bind('changeTabStatus', activateMenuItem);
EventMgr.bind('closeTab', deactivateMenuItems);
EventMgr.bind('comboCtrlShiftMKeyUp', focusSearchInput);
EventMgr.obind($left(), 'mouseenter', showMenu);
EventMgr.obind($left(), 'mouseleave', hideMenu);
EventMgr.obind($topMenu(), 'change', topMenuHandler);
EventMgr.bind('favoriteMenuUpdateDone', getFavoriteMenu);
EventMgr.bind('menuObjectGot', updateFavoriteMenu);
},
/**
* make popular and favorite menu
*/
utilGroups = function utilGroups() {
//@TODO looks some messy
//@TODO move it to xslt
//add classes popular and favorite to parent
$('.group .popular').parents('.group').addClass('popular');
$('.group .favorite').parents('.group').addClass('favorite');
// add classes unfavorite and unpopular for hidding it
var self;
$('.group').each(function () {
self = $(this);
if (!self.hasClass('favorite')) {
self.addClass('unfavorite');
}
if (!self.hasClass('popular')) {
self.addClass('unpopular');
}
});
},
$topMenu = function $topMenu() {
return $('#_select-tab0-val');
},
$left = function $left() {
return $('#left');
},
$cbutton = function $cbutton() {
return $('#cbutton');
},
$menuItems = function $menuItems() {
return $('#menu-items a.textlink');
},
//wrapper for group
$group = function $group() {
return $('.group');
},
//wrapper for group's header
headerGroupSel = '.h-group',
//wrapper for elemetns which has class menev; menuType and plus/minus
groupControlsSel = '.menev',
// menu open/close button
menuPosControlSel = '#mainmenu #cbutton, #mainmenu #mfb',
menuPosBtnSel = '#menu-items-wr',
$searchField = function $searchField() {
return $('#m-search');
},
searchCloseBtnSel = '#close-search a',
checkWidthItems = function checkWidthItems() {
var width, scrollWidth;
$menuItems().each(function () {
width = this.offsetWidth;
scrollWidth = this.scrollWidth - 1;
if (width < scrollWidth) {
if (!this.className.match('overwidth')) {
this.className += ' overwidth';
}
}
});
},
menuScrollId = 'menu-items-wr',
setMenuType = function setMenuType(type) {
var $menu = $('#menu-items');
$menu.removeClass('favorite popular all').addClass(type);
$('.menev').removeClass('active');
$('#' + type).addClass('active');
menuType = type;
},
lockMenuPosition = function lockMenuPosition(e) {
if (!e.target.className.match('listened-elem')) {
var body = $('body');
if (body.hasClass('active-menu')) {
return false;
} else {
// body.addClass('active-menu');
setMenuPosition.apply(window, [{ type: 'click' }]);
}
}
},
// first menu set up
setMenuPosition = function setMenuPosition(e, data) {
var body = $('body'),
left = $('#left'),
content = $('#content'),
cbutton = $cbutton(),
menupos,
tabId,
elemTab;
if (e.type === 'click') {
//lol code! must think about!
menupos = body.hasClass('active-menu') ? 'closed' : 'open';
tabId = $('.tab-content_st_active').attr('data-tabid');
elemTab = $('#cont-' + tabId);
$('#sort_table-' + tabId).css('width', '100%');
$('.block-table .sort_table').css('width', '100%');
elemTab.addClass('table-manip');
if (menupos === 'closed') {
left.stop().animate({
left: '-203'
}, 300, function () {
EventMgr.trigger('hideHint');
});
content.stop().animate({
marginLeft: '0'
}, 300);
cbutton.stop().fadeIn(300);
} else {
content.stop().animate({
marginLeft: '205'
}, 300);
cbutton.stop().fadeOut(300);
}
body.toggleClass('active-menu');
setTimeout(function () {
EventMgr.trigger('menuPositionChanged', {
menupos: menupos,
tabId: tabId
});
elemTab.removeClass('table-manip');
menupos = null;
tabId = null;
}, 350);
} else if (e.type === 'begin') {
//console.log(data);
menupos = data;
if (menupos === 'closed') {
body.toggleClass('active-menu');
} else {
content.css('marginLeft', '205px');
}
}
$('#mfb').attr('data-state', menupos);
},
showMenu = function showMenu() {
var self = $(this),
body = $('body'),
cbutton = $cbutton();
if (!body.hasClass('active-menu')) {
self.stop().animate({
left: '0'
}, 350);
cbutton.stop().fadeOut(300);
}
},
hideMenu = function hideMenu() {
var self = $(this),
body = $('body'),
cbutton = $cbutton();
if (!body.hasClass('active-menu')) {
self.stop().animate({
left: '-203'
}, 350);
cbutton.stop().fadeIn(300);
}
},
MenuSetUp = function MenuSetUp(e, data) {
var cookie = data,
ee,
curMenuPos,
re,
content,
curMbar,
keyVar;
//set menu position
ee = {};
ee.type = 'begin';
if (cookie.menupos) {
re = new RegExp(pageInfo.product + '-' + pageInfo.level + '-' + '(open|closed)');
curMenuPos = cookie.menupos.match(re);
if (curMenuPos !== null) {
setMenuPosition(ee, curMenuPos['1']);
} else {
content = $('#content');
content.css('marginLeft', '205px');
}
} else {
content = $('#content');
content.css('marginLeft', '205px');
setMenuPosition(ee, 'open');
}
//set menu type
if (cookie.mbar) {
re = new RegExp(pageInfo.product + '-' + pageInfo.level + '-' + '(all|popular|favorite)');
if (cookie.mbar.match(re)) {
curMbar = cookie.mbar.match(re);
setMenuType(curMbar['1']);
}
} else {
setMenuType('all');
}
//set menu items status
if (cookie.menupane && cookie.menupane !== '') {
/* jslint forin:true */
for (keyVar in groups) {
//check only collapsed
re = new RegExp(groups[keyVar].level + '_' + groups[keyVar].id + '-0');
if (cookie.menupane.match(re)) {
groups[keyVar].disactivate();
} else {
re = new RegExp(groups[keyVar].level + '_' + groups[keyVar].id + '-1');
if (cookie.menupane.match(re)) {
groups[keyVar].activate();
}
}
}
}
//check width for hint
checkWidthItems();
},
// buildGroups
buildGroups = function buildGroups() {
var group = $group(),
pLength = group.length;
for (var i = 0; i < pLength; i++) {
groups[group[i].id] = new MenuGroup(pageInfo.level, group[i].id, '0', $(group[i]));
}
},
// Handler for menu manipulation
groupsControlHandler = function groupsControlHandler(e) {
var controller = this.getAttribute('id');
switch (controller) {
case 'minus':
collapseGroups('minus');
break;
case 'plus':
collapseGroups('plus');
break;
case 'all':
switchTypeMenu('all');
break;
case 'favorite':
switchTypeMenu('favorite');
break;
case 'popular':
switchTypeMenu('popular');
break;
}
e.preventDefault();
},
// @method collapseGroups
// @param {String} type Type of event; minus or plus
collapseGroups = function collapseGroups(type) {
var keyVar;
if (type === 'minus') {
/* jslint forin:true */
for (keyVar in groups) {
groups[keyVar].disactivate();
}
} else if (type === 'plus') {
/* jslint forin:true */
for (keyVar in groups) {
groups[keyVar].activate();
}
}
EventMgr.trigger('groupChanged', { groups: groups });
EventMgr.trigger('updateScroll', { id: menuScrollId });
},
//@method switchTypeMenu
//@param {String} type Type of Menu ; all, popular, favorite
switchTypeMenu = function switchTypeMenu(type) {
menuType = type;
setMenuType(type);
EventMgr.trigger('menuTypeChanged', type);
},
//show/hide groups
toggleShowGroup = function toggleShowGroup(e) {
var groupId = this.getAttribute('data-group');
groups[groupId].toggle();
EventMgr.trigger('groupChanged', { groups: groups });
EventMgr.trigger('updateScroll', { id: menuScrollId });
//check width for hint
checkWidthItems();
e.preventDefault();
},
lastTimeSearch = 0,
indexMenuArray = [],
REPLACEMENT = { 'q': 'й',
'w': 'ц',
'e': 'у',
'r': 'к',
't': 'е',
'y': 'н',
'u': 'г',
'i': 'ш',
'o': 'щ',
'p': 'з',
'[': 'х',
']': 'ъ',
'a': 'ф',
's': 'ы',
'd': 'в',
'f': 'а',
'g': 'п',
'h': 'р',
'j': 'о',
'k': 'л',
'l': 'д',
';': 'ж',
"'": 'э',
'z': 'я',
'x': 'ч',
'c': 'с',
'v': 'м',
'b': 'и',
'n': 'т',
'm': 'ь',
',': 'б',
'/': 'ю',
'й': 'q',
'ц': 'w',
'у': 'e',
'к': 'r',
'е': 't',
'н': 'y',
'г': 'u',
'ш': 'i',
'щ': 'o',
'з': 'p',
'х': '[',
'ъ': ']',
'ф': 'a',
'ы': 's',
'в': 'd',
'а': 'f',
'п': 'g',
'р': 'h',
'о': 'j',
'л': 'k',
'д': 'l',
'ж': ';',
'э': "'",
'я': 'z',
'ч': 'x',
'с': 'c',
'м': 'v',
'и': 'b',
'т': 'n',
'ь': 'm',
'б': ',',
'ю': '/',
' ': ' '
},
transformToMistakeLayout = function transformToMistakeLayout(string) {
if (typeof string === 'string') {
var stringArr = string.split(''),
l = stringArr.length,
mistakeString = new Array(l);
while (l--) {
if (REPLACEMENT[stringArr[l]]) {
mistakeString[l] = REPLACEMENT[stringArr[l]];
} else {
mistakeString[l] = stringArr[l];
}
}
return mistakeString.join('');
}
},
indexMenu = function indexMenu() {
var item, self;
$('#menu-items a.textlink').each(function () {
item = {};
self = $(this);
item.parent = self.parent();
item.text = self.text().toLowerCase();
item.mistakeText = transformToMistakeLayout(item.text);
item.parentGroup = self.parents('.group');
indexMenuArray.push(item);
});
},
//search for menu
searchHandler = function searchHandler(e) {
var time = new Date().getTime(),
value,
valLen,
$CloseBtn = $('#close-search');
if (time - lastTimeSearch < 100) {
lastTimeSearch = time;
return;
}
lastTimeSearch = time;
$CloseBtn.removeClass('not_active');
value = this.value;
valLen = value.length;
if (valLen === 0) {
searchItemsClear();
$CloseBtn.addClass('not_active');
} else if (valLen === 1) {
searchItemsClear();
} else if (valLen > 1) {
//show close button
searchItemsClear();
searchItems(value);
}
EventMgr.trigger('updateScroll', { id: 'menu-items-wr' });
},
// close search
searchItemsClear = function searchItemsClear(e) {
$('.cont').removeClass('cont');
$('#mainmenu').removeClass('search');
$('.s-hidden').removeClass('s-hidden');
$('#m-search').removeClass('not_found');
//if it from close button
if (e) {
$('#close-search').addClass('not_active');
$searchField().val('');
EventMgr.trigger('updateScroll', { id: 'menu-items-wr' });
}
scrollToActPosition();
},
scrollToActPosition = function scrollToActPosition() {
var actMenu = $('.m-item.active'),
TOPMARGIN = 67;
if (actMenu.length) {
EventMgr.trigger('scrollTo', {
'raw': false,
id: 'menu-items-wr',
offsetTop: actMenu[0].offsetTop - TOPMARGIN });
}
},
// Search function
searchItems = function searchItems(term) {
var count = 0,
l = indexMenuArray.length,
misTerm = transformToMistakeLayout(term);
$('#mainmenu').addClass('search');
while (l--) {
if (indexMenuArray[l].text.indexOf(term.toLowerCase()) + 1 || indexMenuArray[l].mistakeText.indexOf(term.toLowerCase()) + 1 || indexMenuArray[l].text.indexOf(misTerm.toLowerCase()) + 1 || indexMenuArray[l].mistakeText.indexOf(misTerm.toLowerCase()) + 1) {
indexMenuArray[l].parent.removeClass('s-hidden');
indexMenuArray[l].parentGroup.addClass('cont');
count++;
} else {
indexMenuArray[l].parent.addClass('s-hidden');
}
}
if (count === 0) {
$('#m-search').addClass('not_found');
} else {
$('#m-search').removeClass('not_found');
}
},
focusSearchInput = function focusSearchInput(e, data) {
$left().trigger('mouseenter');
$searchField().focus();
},
//activate menu item
activateMenuItem = function activateMenuItem(e, data) {
$('.m-item').removeClass('active');
if (data.func) {
var elem = App.Dom.byId('l-' + String(data.func).replace(/\./g, '_'));
if (elem !== null) {
elem.className += ' active';
}
}
},
deactivateMenuItems = function deactivateMenuItems() {
$('.m-item').removeClass('active');
},
topMenuHandler = function topMenuHandler(e) {
var action = this.value,
elid = this.getAttribute('data-handler-val');
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: { func: action, elid: elid },
invar: {},
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failCommonAjaxResponse',
queue: 'noqueue' });
},
getFavoriteMenu = function getFavoriteMenu(e, data) {
EventMgr.trigger('ajaxRequest', {
param: {
func: 'desktop',
out: 'sjson'
},
outtype: 'json',
trfunc: 'menuObjectGot'
});
},
getMessage = function getMessage(name, doc) {
var messages = doc && doc.messages && doc.messages.msg || {};
return messages['menu_' + name];
},
updateMenuItemText = function updateMenuItemText(name, $menuItem, doc) {
var newMessage = getMessage(name, doc);
if (newMessage && $menuItem) {
$menuItem.children('a.textlink').text(newMessage);
}
};
updateFavoriteMenu = function updateFavoriteMenu(e, data) {
if (!data.doc.mainmenu) {
return;
}
var mainmenu = data.doc.mainmenu,
groups = mainmenu.node,
groupLen = groups.length,
groupItems,
$menuItem,
$groupItem,
groupItem,
groupItemLens,
favoriteParent = false,
menuItem;
while (groupLen--) {
groupItems = groups[groupLen].node;
groupItem = groups[groupLen];
groupItemLens = groupItems.length;
favoriteParent = false;
while (groupItemLens--) {
menuItem = groupItems[groupItemLens];
$menuItem = $('#l-' + String(menuItem.$name).replace(/\./g, '_'));
if (menuItem.$favorite) {
favoriteParent = true;
if ($menuItem.hasClass('unfavorite')) {
$menuItem.switchClass('favorite', 'unfavorite');
}
} else {
if ($menuItem.hasClass('favorite')) {
$menuItem.switchClass('unfavorite', 'favorite');
}
}
updateMenuItemText(menuItem.$name, $menuItem, data.doc);
}
$groupItem = $('#' + String(groupItem.$name).replace(/\./g, '_'));
if (favoriteParent) {
if ($groupItem.hasClass('unfavorite')) {
$groupItem.switchClass('favorite', 'unfavorite');
}
} else {
if ($groupItem.hasClass('favorite')) {
$groupItem.switchClass('unfavorite', 'favorite');
}
}
}
};
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.Menu.js.map
'use strict';
/**
* Update elements size
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
App.UpSize = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
EventMgr.obind($window, 'resize', getSizes);
EventMgr.obind($window, 'resize', updateMenuHeight);
EventMgr.obind($window, 'resize', updateHeightTabContent);
EventMgr.obind($window, 'resize', updateTableHeight);
EventMgr.obind($window, 'resize', updFormContent);
EventMgr.bind('loadPage', getSizes);
EventMgr.bind('loadPage', updateMenuHeight);
EventMgr.bind('appended', setStyleTabContent);
EventMgr.bind('appendList', updateTableHeight);
EventMgr.bind('appendList', setRowsWidth);
EventMgr.bind('setRowsWidth', setRowsWidth);
EventMgr.bind('changedTab', updateDashTable);
EventMgr.bind('menuPositionChanged', updateDashTable);
EventMgr.bind('menuPositionChanged', updateTableHeightFunc);
EventMgr.bind('updTableHeight', updateTableHeight);
EventMgr.bind('updFormHeight', updFormContent);
EventMgr.bind('appendForm', updFormContent);
EventMgr.bind('appendForm, setValuesDone', updateHeightFormListBlocks);
EventMgr.bind('verticalScroll', updateButtonBar);
},
// offset topBar
top = 0,
// height work window
tabHeight = 0,
//window height
windowHeight = 0,
//windowWidth = 0,
getWindowHeight = function getWindowHeight() {
windowHeight = $window.height();
//windowWidth = $window.width();
},
calcHeight = function calcHeight() {
tabHeight = windowHeight - getTopF();
},
//offset topBar
getTopF = function getTopF() {
if (top === 0 && $menu().length > 0) {
top = $menu().offset().top;
}
return top;
},
$menu = function $menu() {
return App.u.selectorCache('#menu-items-wr');
},
$window = function () {
return $(window);
}(),
//calculate height
getSizes = function getSizes() {
getWindowHeight();
calcHeight();
},
updateMenuHeight = function updateMenuHeight() {
$menu().height(tabHeight);
},
//@todo add update
setStyleTabContent = function setStyleTabContent(e, data) {
var tabId = data.tabId,
tabCont = App.Dom.byId('cont-' + tabId);
if (tabCont !== null) {
tabCont.style.height = tabHeight + 'px';
if (tabId === 'tab0') {
tabCont.style.marginTop = '-' + tabHeight + 'px';
}
}
tabCont = null;
},
updFormContent = function updFormContent(e, data) {
setTimeout(function () {
var formHeight = windowHeight - getTopF(),
tabId,
formWrapper,
topForm,
availableHeight;
if (data) {
tabId = data.tabId;
} else {
var tabAct = $('.tab-content_st_active');
if (tabAct.attr('data-tab-type') === 'form') {
tabId = tabAct.attr('data-tabid');
} else {
return;
}
}
formWrapper = $('#incont-' + tabId + ' .topWrapper');
if (formWrapper.length > 0) {
//set height for formwrapper
$('.tab-content').height(formHeight);
var formScrollCont = $('#form-scroll-' + tabId);
topForm = formWrapper[0].offsetHeight;
availableHeight = tabHeight - topForm;
var allFormHeight = formScrollCont[0].scrollHeight;
if (tabId === 'modal1') {
formScrollCont.height('auto');
var innerFormHeigth = formScrollCont.height();
formScrollCont.height(innerFormHeigth + 'px');
if (allFormHeight < availableHeight) {
$('#cont-modal1').height('auto');
}
} else {
//set height for form inner
formScrollCont.height(availableHeight);
EventMgr.trigger('updateScroll', { id: 'form-scroll-' + tabId });
//fixed or not buttons
if (allFormHeight > availableHeight) {
$('#incont-' + tabId + ' .i-buttons_form-type_form').addClass('l-buttons_pos_fixed');
$('#form-scroll-in-' + tabId).addClass('l-form__inner_fly_buttons');
} else {
$('#incont-' + tabId + ' .i-buttons_form-type_form').removeClass('l-buttons_pos_fixed');
$('#form-scroll-in-' + tabId).removeClass('l-form__inner_fly_buttons');
}
}
}
}, 0);
},
updateHeightTabContent = function updateHeightTabContent() {
$('#cont-tab0').css('marginTop', '-' + tabHeight + 'px').height(tabHeight);
$('.tab-content').height(tabHeight);
},
updateTableHeight = function updateTableHeight() {
// setTimeout('APP.upSize.updth()', '100');
setTimeout(function () {
updateTableHeightFunc();
}, '100');
},
updateTableHeightFunc = function updateTableHeightFunc() {
var self, tabId, statusBarHeight, topTable, availableHeight;
$('.tab-content_st_active .content').each(function () {
tabId = this.getAttribute('data-tabid');
self = $(this);
//height table
statusBarHeight = '27';
// offset top table
topTable = this.offsetTop;
// availible height for table
availableHeight = tabHeight - topTable - statusBarHeight;
// new table height
self.height(availableHeight);
updateWidthTableHead(tabId);
EventMgr.trigger('updateScroll', { id: 'ltwr-' + tabId });
});
EventMgr.trigger('updatedTableHeight', { tabId: tabId });
},
//set row width for sorting table
setRowsWidth = function setRowsWidth(e, data) {
var id = data.tabId,
table = App.Dom.byId('sort_table-' + id),
tabElem = $('#cont-' + id),
sBarCells;
if (!table) {
return;
}
var tableWidth = table.offsetWidth,
cellsSort = table.rows['0'].cells,
statusBar = App.Dom.byId('statusbar-' + id);
if (statusBar !== null) {
sBarCells = statusBar.rows['0'].cells;
}
if (tableWidth === 0) {
return null;
}
var parentTable = App.Dom.byId('lt-' + id);
if (parentTable === null) {
return;
}
var cellsParent = parentTable.rows['0'].cells,
len = cellsSort.length,
lenTmp = len,
width,
per,
autoSize = false,
colWithoutWidth = 0,
widthPer,
widths = [],
widthsPer = [],
sumWidthPer = 0,
sumWidth = 0,
halfSumWidth,
otherWidths = 0;
tabElem.addClass('table-manip');
//get all width
while (lenTmp--) {
widths[lenTmp] = cellsParent[lenTmp].clientWidth;
widthPer = parseInt(cellsSort[lenTmp].getAttribute('width'), 10);
if (isNaN(widthPer)) {
colWithoutWidth++;
} else {
widthsPer[lenTmp] = widthPer;
}
sumWidth += widths[lenTmp];
sumWidthPer += widthsPer[lenTmp];
}
if (colWithoutWidth || sumWidthPer < 90 && sumWidthPer > 110) {
autoSize = true;
}
//check for more 50% width
halfSumWidth = sumWidth / 2;
lenTmp = len;
while (lenTmp--) {
if (widths[lenTmp] > halfSumWidth) {
for (var i = 0; i < len; i++) {
if (i !== lenTmp) {
otherWidths += widths[i];
}
}
widths[lenTmp] = otherWidths;
sumWidth = otherWidths * 2;
break;
}
}
//set width in percent
while (len--) {
width = widths[len];
if (autoSize) {
per = Math.round(width / sumWidth * 100) + '%';
} else {
per = widthsPer[len] + '%';
}
cellsSort[len].style.width = per;
cellsParent[len].style.width = per;
try {
sBarCells[len].style.width = per;
} catch (ex) {}
}
parentTable.style.tableLayout = 'fixed';
table.style.tableLayout = 'fixed';
setTimeout(function () {
tabElem.removeClass('table-manip');
tabElem.removeClass('init');
}, 100);
},
updateWidthTableHead = function updateWidthTableHead(tabId) {
var parentTable = App.Dom.byId('lt-' + tabId),
sortTable = App.Dom.byId('sort_table-' + tabId),
statusTable = App.Dom.byId('statusbar-' + tabId),
width;
if (parentTable !== null) {
width = parentTable.offsetWidth + 'px';
if (sortTable !== null) {
sortTable.style.width = width;
}
if (statusTable !== null) {
statusTable.style.width = width;
}
}
parentTable = null;
sortTable = null;
statusTable = null;
},
updateDashTable = function updateDashTable(e, data) {
var tabId = data.tabId;
if (tabId === 'tab0') {
EventMgr.trigger('updateScroll', {});
}
},
/**
* Set height for all blocks in form list block
* @param {object} e
* @param {object} data
*/
updateHeightFormListBlocks = function updateHeightFormListBlocks(e, data) {
var tabId = data.tabId,
selector = '.' + tabId + '-list .b-form-blocks__block',
maxHeight = 0,
curHeight,
$elems = $(selector);
if ($elems.length > 0) {
$elems.each(function () {
curHeight = this.offsetHeight;
if (curHeight > maxHeight) {
maxHeight = curHeight;
}
});
$elems.each(function () {
this.style.height = maxHeight + 'px';
App.Dom.addClass(this, 'b-form-block__block_set_height');
});
}
},
/**
* update class for buttons wrapper
* @param {object} e
*/
updateButtonBar = function updateButtonBar(e) {
var data, $btnWrapper;
if (e.originalEvent && e.originalEvent.detail) {
data = e.originalEvent.detail;
//check for is it form scroll
if (data.id && data.id.match('form-scroll')) {
$btnWrapper = $('#' + data.id + ' .l-buttons_pos_fixed');
if ($btnWrapper.length > 0) {
//check for scroll state top/middle/bottom
if (data.bottom) {
if (!$btnWrapper.hasClass('l-buttons_pos_bottom')) {
$btnWrapper.addClass('l-buttons_pos_bottom');
}
} else {
if ($btnWrapper.hasClass('l-buttons_pos_bottom')) {
$btnWrapper.removeClass('l-buttons_pos_bottom');
}
}
}
}
}
};
return {
init: init,
updth: updateTableHeightFunc
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.UpSize.js.map
'use strict';
/**
* ScrollController
* requires ScrollHandler!!!
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @param {object} ScrollHandler Scrollbar library
*/
App.ScrollController = function (window, $, EventMgr, App, ScrollHandler) {
'use strict';
var init = function init() {
EventMgr.bind('menuTypeChanged', updateScroll);
EventMgr.obind($window(), 'resize', updateScroll);
EventMgr.bind('updateScroll', updateScroll);
EventMgr.bind('loadPage', attachScrollMenu);
EventMgr.bind('appendForm,appendedFilter', attachScrollTabtoForm);
EventMgr.bind('appendToolbarAce', attachScrollToToolbarAce);
EventMgr.bind('appendReport', attachScrollTabtoForm);
EventMgr.bind('appendList', attachScrollTabtoList);
EventMgr.bind('appendMapDone', attachScrollTabtoRack);
EventMgr.bind('loadLoginForm', attachScrolltoLoginForm);
EventMgr.bind('appendDashboard', attachScrollTabtoDB);
EventMgr.bind('appendDashList', attachScrolltoBlockDB);
EventMgr.bind('closeTabEvent', detachScroll);
EventMgr.bind('scrollTo', scrollTo);
},
$window = function $window() {
return $(window);
},
updateScroll = function updateScroll(e, data) {
if (data && data.id) {
ScrollHandler.update(data.id);
} else {
ScrollHandler.update();
}
data = null;
},
detachScroll = function detachScroll(e, data) {
ScrollHandler.detach(data.tabId);
data = null;
},
attachScrollMenu = function attachScrollMenu() {
setTimeout(function () {
ScrollHandler.attach('menu-items-wr', 'menu-items', 'tab0');
}, 10);
},
attachScrolltoBlockDB = function attachScrolltoBlockDB(e, data) {
var blockId = data.tabId,
cont = blockId + '-scrollwrapper',
obj = 'lt-' + blockId;
ScrollHandler.attach(cont, obj, blockId, true, true);
data = null;
},
//вешаем сколл на форму
attachScrollTabtoForm = function attachScrollTabtoForm(e, data) {
setTimeout(function () {
var tabId = data.tabId;
ScrollHandler.attach('form-scroll-' + tabId, 'form-scroll-in-' + tabId, tabId, true);
$('#frm-' + tabId + ' .band-table').each(function () {
var id = this.id;
ScrollHandler.attach(id, 'lt-' + id, tabId, true, true);
});
$('#frm-' + tabId + ' .b-form-list_view_table').each(function () {
var id = this.id;
ScrollHandler.attach(id, 'inner-' + id, tabId, true, true);
});
// for select
$('#frm-' + tabId + ' .b-myselect__select-ul').each(function () {
var id = this.getAttribute('id');
ScrollHandler.attach('cont-' + id, id, tabId, true);
});
// for multiselect
$('#frm-' + tabId + ' .b-mselect__ul-choose').each(function () {
var id = this.getAttribute('data-id');
ScrollHandler.attach(id + '-ms-list', id + '-ms-list-ul', tabId, true);
});
// for multiselect
$('#frm-' + tabId + ' .b-mselect__view-value').each(function () {
var id = this.getAttribute('data-id');
ScrollHandler.attach(this.id, id + '-ms-view', tabId, true);
});
//for tree
$('#frm-' + tabId + ' .tree-inner').each(function () {
var id = this.getAttribute('id');
ScrollHandler.attach('cont-' + id, id, tabId, true, true);
});
//for select autocomplite
$('#frm-' + tabId + ' .b-select-ac__list').each(function () {
var id = this.getAttribute('id');
ScrollHandler.attach('cont-' + id, id, tabId, true);
});
// $('#frm-' + tabId + ' .b-textdata').each(function() {
// var id = this.getAttribute('id');
// ScrollHandler.attach(id, id + '-inner', tabId, true, true);
// });
tabId = null;
data = null;
}, 50);
},
attachScrollToToolbarAce = function attachScrollToToolbarAce(e, data) {
var tabId = data.tabId;
$('#frm-' + tabId + ' .b-myselect__select-ul').each(function () {
var id = this.getAttribute('id');
ScrollHandler.attach('cont-' + id, id, tabId, true);
});
},
attachScrollTabtoDB = function attachScrollTabtoDB(e, data) {
var tabId = 'tab0';
ScrollHandler.attach('cont-' + tabId, 'incont-' + tabId, 'tab0', true);
tabId = null;
},
attachScrolltoLoginForm = function attachScrolltoLoginForm(e, data) {
$('.b-myselect__select-ul').each(function () {
var id = this.getAttribute('id');
ScrollHandler.attach('cont-' + id, id, 'tab1', true);
id = null;
});
},
attachScrollTabtoList = function attachScrollTabtoList(e, data) {
var tabId = data.tabId;
ScrollHandler.attach('ltwr-' + tabId, 'lt-' + tabId, tabId, true);
ScrollHandler.attach('cont-' + tabId + '-pager-slist', tabId + '-pager-slist', tabId, true);
tabId = null;
},
attachScrollTabtoRack = function attachScrollTabtoRack(e, data) {
if (data.map.type === 'rack') {
var tabId = data.tabId;
ScrollHandler.attach(tabId + '-map', 'b-rack-' + tabId, tabId, true);
}
},
scrollTo = function scrollTo(e, data) {
var offsetTop = data.offsetTop,
id = data.id,
raw = data.raw,
animate = data.animate;
ScrollHandler.scrollTo(id, offsetTop, raw, animate);
};
return {
init: init
};
}(window, $, EventMgr, App, ScrollHandler);
//# sourceMappingURL=App.ScrollController.js.map
'use strict';
/**
* App.AceEditor модуль подключения подстветки синтаксиса
*
* http://ace.c9.io/
*
* скрипты либы лежат в /common/ace
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @param {object} doT doT template
*/
App.AceEditor = function (window, $, EventMgr, App, doT) {
'use strict';
var init = function init() {
EventMgr.bind('appendForm', loadEditor);
EventMgr.bind('gotToolbarEditorTemplate', setToolbarEditorTemplate);
EventMgr.on(mainWrapperSelector, fontSizeSetSelector, 'change', setFontSize);
EventMgr.on(mainWrapperSelector, themeSetSelector, 'change', setTheme);
EventMgr.on(mainWrapperSelector, modeSetSelector, 'change', setMode);
EventMgr.on(mainWrapperSelector, keyBindingSetSelector, 'change', setKeyBinding);
EventMgr.on(mainWrapperSelector, showHiddenSetSelector, 'change', setShowHidden);
EventMgr.on(mainWrapperSelector, showGutterSetSelector, 'change', setShowGutter);
EventMgr.on(mainWrapperSelector, softWrapSetSelector, 'change', setSoftWrap);
EventMgr.on(mainWrapperSelector, fullscreenSetSelector, 'click', setFullscreen);
EventMgr.on(mainWrapperSelector, fullscreenExitSelector, 'click', exitFullscreen);
EventMgr.on(mainWrapperSelector, '.i-button_type_ok, .i-button_type_setvalue', 'click', syncContent);
EventMgr.bind('preSetValues', syncContent);
EventMgr.bind('resizeEditor', resizeEditor);
EventMgr.on(mainWrapperSelector, '.b-textarea.editor', 'change', updateContent);
},
//selectors
mainWrapperSelector = '#main-wrapper',
fontSizeSetSelector = '.toolbar-editor .editor-set-font',
themeSetSelector = '.toolbar-editor .editor-set-theme',
modeSetSelector = '.toolbar-editor .editor-set-mode',
keyBindingSetSelector = '.toolbar-editor .editor-set-keybinding',
showHiddenSetSelector = '.toolbar-editor .editor-set-show_hidden',
showGutterSetSelector = '.toolbar-editor .editor-set-show_gutter',
softWrapSetSelector = '.toolbar-editor .editor-set-soft_wrap',
fullscreenSetSelector = '.toolbar-editor .editor-set-fullscreen',
fullscreenExitSelector = '.toolbar-editor .editor-exit-fullscreen',
//keybining variables
keybindings = {
ace: null, // Null = use "default" keymapping
vim: 'ace/keyboard/vim',
emacs: 'ace/keyboard/emacs'
/*custom: new HashHandler({
"gotoright": "Tab",
"indent": "]",
"outdent": "[",
"gotolinestart": "^",
"gotolineend": "$"
})*/
},
editors = {},
//save settings object
saveConf = function saveConf(data) {
if (typeof localStorage !== 'undefined') {
var dataStr = JSON.stringify(data),
productId = pageInfo.product + '_5_' + pageInfo.user + '_' + pageInfo.hostName,
itemId = productId + '_toolbar_ide';
localStorage.setItem(itemId, dataStr);
return true;
}
return false;
},
//get saved settings
readConf = function readConf() {
if (typeof localStorage !== 'undefined') {
var productId = pageInfo.product + '_5_' + pageInfo.user + '_' + pageInfo.hostName,
itemId = productId + '_toolbar_ide',
dataStr = localStorage.getItem(itemId);
return JSON.parse(dataStr) || {};
}
return false;
},
//save one setting
preSaveConf = function preSaveConf(name, value) {
var dataObj = readConf();
if (dataObj) {
dataObj[name] = value;
saveConf(dataObj);
}
},
//set font size from toolbar controller
setFontSize = function setFontSize() {
var value = this.value,
id = this.getAttribute('data-tabid');
editors[id].setFontSize(value + 'px');
preSaveConf('font', value);
},
//set theme by toolbar controller
setTheme = function setTheme() {
var value = this.value,
id = this.getAttribute('data-tabid');
editors[id].setTheme(value);
preSaveConf('theme', value);
},
//set lang by toolbar controller
setMode = function setMode() {
var value = this.value,
id = this.getAttribute('data-tabid');
editors[id].getSession().setMode('ace/mode/' + value);
},
//set key binding by toolbar controller
setKeyBinding = function setKeyBinding() {
var value = this.value,
id = this.getAttribute('data-tabid');
editors[id].setKeyboardHandler(keybindings[value]);
preSaveConf('keybinding', value);
},
//set invisibles by toolbar controller
setShowHidden = function setShowHidden() {
var value = this.value === 'on',
id = this.getAttribute('data-tabid');
editors[id].setShowInvisibles(value);
preSaveConf('invisibles', value);
},
//set gutter by toolbar controller
setShowGutter = function setShowGutter() {
var value = this.value === 'on',
id = this.getAttribute('data-tabid');
editors[id].renderer.setShowGutter(value);
editors[id].renderer.updateFull();
},
//set soft wrap by toolbar controller
setSoftWrap = function setSoftWrap() {
var value = this.value,
id = this.getAttribute('data-tabid'),
session = editors[id].session,
renderer = editors[id].renderer;
switch (value) {
case 'off':
session.setUseWrapMode(false);
renderer.setPrintMarginColumn(80);
break;
case 'free':
session.setUseWrapMode(true);
session.setWrapLimitRange(null, null);
renderer.setPrintMarginColumn(80);
break;
default:
session.setUseWrapMode(true);
var col = parseInt(value, 10);
session.setWrapLimitRange(col, col);
renderer.setPrintMarginColumn(col);
}
preSaveConf('soft_wrap', value);
},
//set fullwidth screen editor
setFullscreen = function setFullscreen() {
var id = this.getAttribute('data-tabid');
App.Dom.byId(id + '-editor').className += ' fullscreen';
App.Dom.byId('exit-fullscreen-' + id).parentNode.className += ' fullscreen';
editors[id].resize();
editors[id].focus();
editors[id].renderer.updateFull();
},
exitFullscreen = function exitFullscreen() {
var id = this.getAttribute('data-tabid'),
editorElem = App.Dom.byId(id + '-editor'),
btnElem = App.Dom.byId('exit-fullscreen-' + id).parentNode;
editorElem.className = editorElem.className.replace(/fullscreen/g, '');
btnElem.className = btnElem.className.replace(/\sfullscreen/g, '');
editors[id].resize();
editors[id].focus();
},
//load editor if need
loadEditor = function loadEditor(e, data) {
var tabId = data.tabId,
editor,
textareas;
textareas = $('#cont-' + tabId + ' .editor');
if (textareas.length > 0) {
if (typeof window.ace !== 'undefined') {
appendEditor(textareas);
} else {
loadEditorScript(textareas);
}
}
},
//load editor scripts
loadEditorScript = function loadEditorScript(elems) {
var file = '/manimg/common/ace/ace.js';
App.Common.required(file, initEditor, elems);
var url = pageInfo.host + pageInfo.theme + 'templates/toolbar-editor.html';
EventMgr.trigger('ajaxRequest', {
url: url,
trfunc: 'gotToolbarEditorTemplate',
outtype: 'html',
type: 'get',
queue: 'templates' });
},
//init editor and setup fullwidth handler
initEditor = function initEditor(elems) {
if (typeof require !== 'undefined') {
//keybindings.vim = require("ace/keyboard/vim");
var commands = require('ace/commands/default_commands').commands;
// add command for all new editors
commands.push({
name: 'Toggle Fullscreen',
bindKey: 'Esc',
exec: function exec(editor) {
editor.container.className = editor.container.className.replace(/fullscreen/g, '');
var id = editor.container.getAttribute('data-id'),
elem = App.Dom.byId('exit-fullscreen-' + id).parentNode;
elem.className = elem.className.replace(/\sfullscreen/g, '');
editor.resize();
editor.focus();
}
});
}
appendEditor(elems);
},
//insert editor and setup it
appendEditor = function appendEditor(elems) {
var editor,
id,
editArea,
tabId,
name,
dataObj = readConf();
//set default settings
dataObj.theme = dataObj.theme || 'ace/theme/eclipse';
dataObj.font = dataObj.font || 11;
dataObj.keybinding = dataObj.keybinding ? dataObj.keybinding === null ? null : dataObj.keybinding : null;
dataObj.invisibles = dataObj.invisibles === undefined ? false : dataObj.invisibles;
saveConf(dataObj);
elems.each(function () {
var codelang = this.getAttribute('data-codelang'),
readOnly = this.getAttribute('readonly'),
highlight = this.getAttribute('data-highlight'),
highlightString;
codelang = codelang || 'text';
id = this.id;
tabId = this.getAttribute('data-tabid');
name = this.name;
editArea = App.Dom.byId(id + '-editor');
if (!editArea) {
return true;
}
editArea.style.width = '100%';
editArea.style.height = this.offsetHeight + 'px';
editor = window.ace.edit(id + '-editor');
editors[id] = editor;
editor.getSession().setMode('ace/mode/' + codelang);
editor.getSession().setNewLineMode('unix');
editor.getSession().setValue(this.value);
editor.focus();
//editor.getHighlightSelectedWord(true);
if (readOnly !== null) {
editor.setReadOnly(true);
}
//set hifglight string
if (highlight) {
setTimeout(function () {
var highlightField = App.Dom.byId(highlight + '-' + tabId);
highlightString = highlightField ? highlightField.value : null;
if (highlightString) {
var found = editor.find({ needle: highlightString, wrap: true });
if (found) {
editor.session.addMarker(found, 'ace_orion_highlight_red', 'background');
editor.scrollToLine(found.start.row, true, true);
}
}
}, 1);
}
this.style.display = 'none';
appendToolbar(id, tabId, this, codelang);
});
},
syncContent = function syncContent(e, self) {
var tabId = this.getAttribute('data-tabid') || self.getAttribute('data-tabid'),
elems = $('#frm-' + tabId + ' .editor'),
l = elems.length,
id;
while (l--) {
id = elems[l].id;
elems[l].value = editors[id].getValue();
}
},
updateContent = function updateContent() {
var id = this.id;
editors[id].setValue(this.value);
},
//set variable with html template of toolbar
setToolbarEditorTemplate = function setToolbarEditorTemplate(e, data) {
toolbarEditorTemplate = doT.template(data);
},
//foreach all elemems and set saved values
setToolbarVal = function setToolbarVal(savedObj, tabId) {
for (var keyVar in savedObj) {
if (typeof savedObj[keyVar] === 'boolean') {
if (savedObj[keyVar]) {
$('#' + tabId + '-' + keyVar).trigger('click');
}
} else {
$('#' + tabId + '-' + keyVar + ' li[data-val="' + savedObj[keyVar] + '"]').trigger('click');
}
}
},
//toolbar template variable
toolbarEditorTemplate = '',
//append toolbar and set saved values in elems
appendToolbar = function appendToolbar(id, tabId, elem, codelang) {
if (toolbarEditorTemplate === '') {
setTimeout(function () {
appendToolbar(id, tabId, elem, codelang);
}, 300);
} else {
var savedData = readConf(),
msg = App.Common.msg,
dataObj = {
tabId: id,
fontMsg: msg.fontMsg || 'Font',
modeMsg: msg.modeMsg || 'Mode',
themeMsg: msg.themeMsg || 'Theme',
keyBindMsg: msg.keyBindMsg || 'Key Binding',
showInvMsg: msg.showInvMsg || 'Show Invisibles',
showGutMsg: msg.showGutMsg || 'Show Gutter',
softWrapMsg: msg.softWrapMsg || 'Soft Wrap',
fullscreenMsg: msg.fullscreenMsg || 'Fullscreen',
exitFullscreenMsg: msg.exitFullscreenMsg || 'Exit Fullscreen',
darkMsg: 'Dark',
brightMsg: 'Bright',
modeValue: codelang
},
//@TODO!!!
toolbarHTML = toolbarEditorTemplate(dataObj);
var elemeId = elem.id;
$(elem).after(toolbarHTML);
App.Dom.removeClass(App.Dom.byId('resizer_editor-' + elemeId), 'b-resizer_for_editor');
savedData.mode = codelang;
setToolbarVal(savedData, id);
setTimeout(function () {
EventMgr.trigger('appendToolbarAce', { tabId: tabId });
EventMgr.trigger('updateScroll', { id: 'form-scroll-' + tabId });
}, 100);
}
},
resizeEditor = function resizeEditor(e, data) {
var id = data.id ? data.id.replace('-editor', '') : undefined;
if (editors[id]) {
editors[id].resize();
}
};
return {
init: init
};
}(window, $, EventMgr, App, doT);
//# sourceMappingURL=App.AceEditor.js.map
'use strict';
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/**
* Модуль.
* ваш К.О.
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
App.ActionHandler = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
EventMgr.onwithdata($content(), actionBtnSel, 'click', 'menuAction', actionController);
EventMgr.on($content(), formBtnFunc, 'click', actionFormController);
EventMgr.on($content(), cancelDefActionNonActSel, 'click', cancelDefAct);
EventMgr.on($content(), reloadTabBtnSel, 'click', reloadTabController);
EventMgr.on('#main-wrapper', formSubmitSel, 'click', submitForm);
EventMgr.on($content(), ticketRate, 'click', ticketRateHandler);
EventMgr.bind('rateResponse', rateResponseHandler);
// EventMgr.onwithdata('#main-wrapper', formSubmitSel, 'click', 'formSubmit',
// submitForm);
EventMgr.bind('failedAjaxResponseForDashboard', failedDashboardBlockRequestHandler);
EventMgr.bind('failMenuAjaxResponse', failMenuRequest);
EventMgr.bind('failCommonAjaxResponse', failListRequest);
EventMgr.bind('failFormAjaxResponse', failFormRequest);
EventMgr.bind('tabLoading', tabLoadingHandler);
EventMgr.bind('tabLoadingHide', tabLoadingHideHandler);
EventMgr.on($content(), dismissMsgSelector, 'click', dismissMessage);
},
$content = function $content() {
return $('#main-wrapper');
},
// wrapper for right menu links
actionBtnSel = '.m-item a, .b-menu-item',
//wrapper for reload tab btn
reloadTabBtnSel = '.reload',
// wrapper for toolbar's group btn
//prevent default not active actions
cancelDefActionNonActSel = '.notActive span',
formSubmitSel = '.i-button_type_ok',
formBtnFunc = '.i-button_type_func',
dismissMsgSelector = '.i-message__dismiss-link',
ticketRate = '.i-ticket__rate',
cancelDefAct = function cancelDefAct(e) {
e.preventDefault();
},
tabLoadingId = {},
tabLoadingHandler = function tabLoadingHandler(e, data) {
var tabId = data.tabId;
clearTimeout(tabLoadingId[tabId]);
tabLoadingId[tabId] = setTimeout(function () {
$('#cont-' + tabId).addClass('loading');
}, 350);
},
tabLoadingHideHandler = function tabLoadingHideHandler(e, data) {
var tabId = data.tabId;
setTimeout(function () {
clearTimeout(tabLoadingId[tabId]);
$('#cont-' + tabId).removeClass('loading');
}, 0);
//for be sure what it fucking loading hide
setTimeout(function () {
$('#cont-' + tabId).removeClass('loading');
}, 100);
//for be defintly sure what it fucking loading hide
setTimeout(function () {
$('#cont-' + tabId).removeClass('loading');
}, 200);
//for be absolutly sure what it fucking loading hide
setTimeout(function () {
$('#cont-' + tabId).removeClass('loading');
}, 350);
},
//handler for failed request from menu
failMenuRequest = function failMenuRequest(e, data) {
$('.m-item.loading').removeClass('loading');
if (data.erType === 'json') {
EventMgr.trigger('pullMsg', { msg: 'JSON Parse Error. Func: "' + data.param.func + '"' });
} else if (data.erMsg) {
EventMgr.trigger('pullMsg', { msg: data.erMsg });
} else {
EventMgr.trigger('pullMsg', { msg: 'Request failed. Try again. Func: "' + data.param.func + '"' });
}
},
//handler for failed request from list
failListRequest = function failListRequest(e, data) {
var tabId = data.invar ? data.invar.tabId ? data.invar.tabId : data.invar.parent ? data.invar.parent : data.invar.targetTabId : undefined;
EventMgr.trigger('tabLoadingHide', { tabId: tabId });
if (data.erType === 'json') {
EventMgr.trigger('pullMsg', { msg: 'JSON Parse Error. Func: "' + data.param.func + '"' });
} else if (data.erMsg) {
EventMgr.trigger('pullMsg', { msg: data.erMsg });
} else {
EventMgr.trigger('pullMsg', { msg: 'Request failed. Try again. Func: "' + data.param.func + '"' });
}
},
disabledButton = function disabledButton(btn) {
btn.addClass('b-button_st_disabled');
btn.html(btn.attr('data-disabled'));
},
resetButtonForDefault = function resetButtonForDefault(arg) {
//return btn state
var btn, tabId;
if (typeof arg === 'string') {
tabId = arg;
btn = $('#form-wrapper-' + tabId + ' .b-button_st_disabled');
} else {
btn = arg;
}
if (btn.length) {
btn.html(btn[0].getAttribute('data-enabled'));
btn.removeClass('b-button_st_disabled');
}
},
//handler fot failed request from form
failFormRequest = function failFormRequest(e, data) {
var tabId = data.invar.tabId;
if (data.erType === 'json') {
EventMgr.trigger('pullMsg', { msg: 'JSON Parse Error. Func: "' + data.param.func + '"' });
} else if (data.erMsg) {
EventMgr.trigger('pullMsg', { msg: data.erMsg });
} else {
EventMgr.trigger('pullMsg', { msg: 'Request failed. Try again. Func: "' + data.param.func + '"' });
}
//reset button
resetButtonForDefault(tabId);
//for run after upload callback
setTimeout(function () {
//return progressbar state
var loader = $('#' + tabId + '-progressbar .b-progressbar__loader');
$('#' + tabId + '-progressbar').removeClass('b-progressbar_type_withbtn');
//remove animated
loader.addClass('b-progressbar__loader_type_animate');
//add static color
loader.removeClass('b-progressbar__loader_type_static');
loader.css('width', '');
loader.html('');
//remove cancel btn
$('#' + tabId + '-progressbar .b-progressbar__btn-wr').remove();
}, 1);
EventMgr.trigger('tabLoadingHide', { tabId: tabId });
},
failedDashboardBlockRequestHandler = function failedDashboardBlockRequestHandler(e, data) {
var blockId = data.invar.blockId,
tblock = App.Dom.byId('t' + blockId);
if (tblock) {
tblock.className = tblock.className.replace(/loading/g, '');
}
if (data.erType === 'json') {
EventMgr.trigger('pullMsg', { msg: 'JSON Parse Error. Func: "' + data.param.func + '"' });
} else if (data.erMsg) {
EventMgr.trigger('pullMsg', { msg: data.erMsg });
} else {
EventMgr.trigger('pullMsg', { msg: 'Request failed. Try again. Func: "' + data.param.func + '"' });
}
},
//reload page handler
reloadTabController = function reloadTabController(e, data) {
var tabId = '',
addedParam = {};
if (e) {
tabId = this.getAttribute('data-tabid');
addedParam = {
clickstat: 'title'
};
e.preventDefault();
} else {
tabId = data.tabId;
}
EventMgr.trigger('reloadTab', {
addedParam: addedParam,
tabId: tabId,
help: true,
selid: true,
filter: true });
},
ticketRateHandler = function ticketRateHandler(e) {
var func = this.getAttribute('data-func'),
type = this.getAttribute('data-type'),
name = this.getAttribute('data-name'),
$parent = this.parentNode,
elid = $parent.getAttribute('data-id'),
plid = $parent.getAttribute('data-elid'),
param = {
func: func,
elid: elid,
plid: plid
};
if (type === 'setrate') {
EventMgr.trigger('ajaxRequest', {
param: param,
invar: {
$parent: $parent,
rateType: name,
self: this
},
outtype: 'json',
trfunc: 'rateResponse',
failfunc: 'failCommonAjaxResponse'
});
} else if (type === 'rate') {
EventMgr.trigger('ajaxRequest', {
param: param,
invar: {
parent: $(this).closest('.tab-content_st_active').attr('data-tabid')
},
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failCommonAjaxResponse',
queue: 'noqueue' });
}
},
rateResponseHandler = function rateResponseHandler(e, data) {
if (!data.error) {
$(data.$parent).addClass('b-ticket__rate_rated_' + data.rateType);
$(data.self).removeClass('i-ticket__rate');
} else if (data.erMsg) {
EventMgr.trigger('pullMsg', { msg: data.erMsg });
}
},
actionFormController = function actionFormController(e) {
var $self = $(this),
func = $self.attr('data-func'),
id = $self.attr('data-id'),
tabId = $self.attr('data-tabid'),
param = {
func: func
};
//check for button id
if (id && id !== 'undefined') {
id = id.split('=', 2);
if (id[1]) {
param[id[0]] = id[1];
}
}
EventMgr.trigger('ajaxRequest', {
param: param,
invar: {
parent: tabId
},
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failMenuAjaxResponse',
queue: 'menu' });
EventMgr.trigger('tabLoading', { tabId: tabId });
},
checkSameTabsOpened = function checkSameTabsOpened(func, tabs) {
var resp = {
exist: false,
tabId: null,
status: 0
};
var curFunc, regExpWitDot;
if (func && tabs && (typeof tabs === 'undefined' ? 'undefined' : _typeof(tabs)) === 'object') {
/* jslint forin:true */
for (var key in tabs) {
if (tabs[key]) {
curFunc = tabs[key].func;
if (!curFunc && tabs[key].paramObjAll) {
curFunc = tabs[key].paramObjAll.func;
}
//check if empty func like basket.empty
//regExpWitDot = new RegExp('^' + func + '\\.');
//.empty
regExpWitDot = func + '.empty';
//if ((String(curFunc).match(regExpWitDot) || curFunc === func) &&
if ((regExpWitDot === curFunc || curFunc === func) && tabs[key].hType === 'parent') {
resp.exist = true;
resp.tabId = key;
resp.status = tabs[key].status;
//be sure that found active same tab
if (resp.status === 1) {
break;
}
}
}
}
}
return resp;
},
//handler for menu action
actionController = function actionController(e, data) {
var self = $(this),
href = this.getAttribute('data-url'),
parent = this.getAttribute('data-parent'),
re = new RegExp('/?func=+'),
cgi = this.getAttribute('data-cgi'),
sameModule = false,
queue = 'menu',
isFromMenu = self.hasClass('i-menu-link'),
fromFatalError = self.parent().hasClass('b-fatal-error__refresh-link'),
newtab = false,
url,
param;
if (e.ctrlKey || e.metaKey || self.hasClass('newtab')) {
newtab = true;
queue = 'noqueue';
}
if (self.hasClass('wohan')) {
return true;
}
//if from fatal error close alertBox
if (fromFatalError) {
$('#modal_alert_ok').trigger('click');
}
if (href) {
if (href.match(re)) {
url = cgi ? pageInfo.host + cgi : pageInfo.url;
href = href.replace('?', '');
param = App.Common.parseParams(href);
param.clickstat = 'yes';
//check for same module open from menu
if (!newtab) {
var actFunc = $('.tab-content_st_active').attr('data-func');
if (param.func === actFunc) {
sameModule = true;
}
}
//check for exist tabs with this function
var checkTabs = checkSameTabsOpened(param.func, data.__tabs);
if (checkTabs.exist && !checkTabs.status && isFromMenu) {
$('#switch-' + checkTabs.tabId).trigger('lclick');
EventMgr.trigger('reloadTab', { tabId: checkTabs.tabId, resetFilterOn: true });
} else {
EventMgr.trigger('ajaxRequest', {
url: url,
param: param,
invar: {
parent: parent, newtab: newtab, sameModule: sameModule, __src: 'menuAction', __src_func: param.func },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failMenuAjaxResponse',
queue: queue });
//add loading class to menu
self.parents('.m-item').addClass('loading');
}
} else {
//what else?
console.log(url);
}
}
if (e) {
e.preventDefault();
}
},
//handler for submit form
submitForm = function submitForm(e, data) {
e.preventDefault();
var self = $(this),
flags = self.getFlags(),
tabId = self.attr('data-tabid'),
form = $('#frm-' + tabId),
vars = form.getVars(),
action = form.attr('action'),
param = form.serializeObject(),
parent = self.attr('data-parent'),
type = self.attr('data-type'),
hasFiles = form.hasClass('withfiles'),
act = self.attr('data-act'),
id = self.attr('data-id'),
isShowcaseForm = form.hasClass('b-form_showcase_yes'),
name = self.attr('data-name'),
progressTypeElem = App.Dom.byId(tabId + '-progresstype'),
progressType,
confirmMsg,
RequiredMsg,
progressid,
param1,
text,
passwdField,
pwstrength,
options;
//prevent dbclick
if (self.hasClass('b-button_st_disabled')) {
return false;
}
disabledButton(self);
if (progressTypeElem !== null) {
progressType = progressTypeElem.value;
}
//check for valid
if (act !== 'back') {
//check file length
var fileSizeRes = App.u.checkFileSize(tabId);
if (fileSizeRes.msg) {
EventMgr.trigger('errMsgValid', {
self: fileSizeRes.field,
err: fileSizeRes.msg,
number: 0
});
resetButtonForDefault(self);
return false;
}
//check passwd confirm fields
confirmMsg = checkConfirm(tabId);
if (confirmMsg.msg !== '') {
EventMgr.trigger('showAlert', confirmMsg);
resetButtonForDefault(self);
return false;
}
//check required fields
RequiredMsg = checkRequired(tabId);
if (RequiredMsg.msg !== '') {
EventMgr.trigger('errMsgValid', {
self: RequiredMsg.himself,
err: RequiredMsg.msg,
number: 0
});
//watching while input not be empty for remove error
$(RequiredMsg.himself).bind('keyup', function () {
if (this.value !== '') {
$(this).unbind('keyup');
EventMgr.trigger('okMsgValid', {
self: this,
number: 0,
notOk: true
});
}
});
resetButtonForDefault(self);
return false;
}
//maybe it not needed
// if ($('#frm-' + tabId +
// ' .row-error:not(".l-form__row_hidden_yes") input.test').length !== 0) {
// return false;
// }
//check password strength
passwdField = $('#frm-' + tabId + ' input[data-check-field]');
if (passwdField.length !== 0) {
pwstrength = getPwdStrength(passwdField);
var badPwd = false;
passwdField.each(function () {
var pname = this.getAttribute('name');
if (pwstrength !== 0 && param[pname] !== '' && $(this).width() !== 0) {
if (pwstrength > App.Forms.checkPassStrength(param[pname])) {
EventMgr.trigger('showAlert', { msg: pageInfo.pwErrorMsg });
badPwd = true;
return false;
}
}
});
if (badPwd) {
resetButtonForDefault(self);
return false;
}
}
}
if (act === 'back') {
param.sback = 'ok';
//not needed progress when press back btn
progressType = 'false';
}
//check for button id
if (id && id !== 'undefined') {
id = id.split('=', 2);
if (id[1]) {
param[id[0]] = id[1];
}
}
//add name of button
if (name) {
/* jslint camelcase: false */
param.clicked_button = name;
/* jslint camelcase: true */
}
//add progressid
progressid = progressType;
param.progressid = progressid;
param1 = { elid: progressid, func: 'progress.get', sfrom: 'ajax' };
//check for target
if (act === 'blank') {
var $form,
winId = progressid + new Date().getTime(),
$formWrapper = $('#form-wrapper-' + tabId);
$formWrapper.wrap(function () {
return '<form action="' + action + '" id="form-' + winId + '" method="POST" enctype="multipart/form-data" target="' + winId + '"/>';
});
$form = $('#form-' + winId);
$form.append('<input type="hidden" class="i-input-tmp-elem" value="ok" name="sok"/>');
$form.append('<input type="hidden" class="i-input-tmp-elem" value="' + name + '" name="clicked_button"/>');
if (id && id[1]) {
$form.append('<input type="hidden" class="i-input-tmp-elem"' + ' value="' + id[1] + '" name="' + id[0] + '"/>');
}
//remove sfrom=ajax
$form.find('input[name="sfrom"]').remove();
window.open('', winId);
$form.submit();
if (!flags.keepform) {
App.Tabs.closeTab(e, tabId);
if (parent) {
EventMgr.trigger('reloadTab', { tabId: parent });
}
} else {
$formWrapper.unwrap();
$('.i-input-tmp-elem').remove();
}
//try reload parent after close form
resetButtonForDefault(self);
return false;
}
var $mixedContols = $('#frm-' + tabId + ' .i-control-mixed');
if ($mixedContols.length !== 0) {
param = App.u.removeParam($mixedContols, param);
}
//get progressType before request
progressType = String(progressType).split('_')[0];
//options for form & form with files submit
options = {
url: pageInfo.host + action,
param: param,
invar: {
tabId: tabId,
parent: parent,
type: type,
progresstype: progressType,
progressid: progressid,
iType: 'replace',
dataSaved: true,
targetTabId: tabId,
__vars: vars
},
type: 'post',
outtype: 'json',
trfunc: 'ajaxFormResponse',
queue: 'noqueue',
failfunc: 'failFormAjaxResponse' };
//check for files
//THIS IS FORM WITH FILE
/* jshint camelcase: false */
if (hasFiles) {
param.sok = 'ok';
EventMgr.trigger('setBrandSettings', {
options: options,
tabId: tabId,
pid: progressid,
name: name,
param: param,
addParams: {
sok: 'ok',
sfrom: 'ajax',
clicked_button: name,
pid: progressid
},
parent: parent });
} else if (type === 'report') {
//THIS IS REPORT
param.sok = 'ok';
options = {
url: pageInfo.host + action,
param: param,
invar: { parent: parent, tabId: tabId, __src: 'report' },
outtype: 'json',
trfunc: 'ajaxResponse',
queue: 'noqueue',
failfunc: 'failCommonAjaxResponse'
};
EventMgr.trigger('ajaxRequest', options);
} else {
//THIS IS FORM
param.sok = 'ok';
EventMgr.trigger('ajaxRequest', options);
}
if (progressType !== 'false') {
setTimeout(function () {
EventMgr.trigger('ajaxRequest', {
param: param1,
invar: {
tabId: tabId,
param: param1,
type: type,
progresstype: progressType },
outtype: 'json',
trfunc: 'progressBarResponse',
queue: 'noqueue' });
}, 1000);
}
EventMgr.trigger('tabLoading', { tabId: tabId });
},
getPwdStrength = function getPwdStrength(passwdField) {
var pws = passwdField.attr('data-check-args'),
firstSing;
if (!pws) {
return pageInfo.pwstrength;
}
firstSing = pws.substring(0, 1);
if (firstSing === '-' || firstSing === '+') {
return parseFloat(pws) + parseFloat(pageInfo.pwstrength);
} else {
return parseFloat(pws);
}
},
//check required field on form
checkRequired = function checkRequired(tabId) {
var field = $('#form-wrapper-' + tabId + ' input[required="required"],' + ' #form-wrapper-' + tabId + ' .b-textarea[required="required"]'),
msg = '',
self = null;
if (field.length > 0) {
field.each(function () {
//check for empty and not hidden
var value = String(this.value).replace(/\s/g, '');
if (this.className.match('i-control-mixed')) {
return true;
}
if (value === '' && this.offsetWidth !== 0) {
msg = getRequiredMsg();
self = this;
return false;
}
if (this.getAttribute('data-type') === 'multiple' && value === '') {
var id = this.getAttribute('data-id'),
elem = App.Dom.byId(id + '-ms-view');
if (elem && elem.offsetWidth !== 0) {
msg = getRequiredMsg();
self = elem.parentNode;
return false;
}
}
});
}
return {
param: tabId,
msg: msg,
himself: self
};
},
//get message for required error
getRequiredMsg = function getRequiredMsg() {
return pageInfo.messages.empty;
},
//check password confirm field
checkConfirm = function checkConfirm(tabId) {
var field = $('#form-wrapper-' + tabId + ' input[data-confirm="yes"]'),
msg = '',
self = null;
if (field.length > 0) {
field.each(function () {
var confirmField = this.getAttribute('data-check-field'),
value1 = this.value,
confirmFieldElem = App.Dom.byId(confirmField + '-' + tabId),
confirmFieldElemFake = App.Dom.byId(confirmField + '-' + tabId + '-fake'),
value2;
if (confirmFieldElem !== null) {
value2 = confirmFieldElem.value;
}
if (value1 !== value2 && (confirmFieldElem.offsetWidth !== 0 || confirmFieldElemFake.offsetWidth !== 0)) {
msg = pageInfo.confirm;
self = this;
}
return;
});
}
return {
msg: msg,
himself: self,
callback: function callback() {
this.focus();
}
};
},
//banner dismiss link handler
dismissMessage = function dismissMessage(e, data) {
if (e) {
e.preventDefault();
}
var self = $(this),
param;
self.parents('.i-message').hide();
param = this.getAttribute('data-href');
EventMgr.trigger('updTableHeight');
param = App.Common.parseParams(param);
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: param,
trfunc: 'DoNothing',
queue: 'noqueue' });
};
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.ActionHandler.js.map
'use strict';
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/**
* Модуль обрабатывает запросы с листа
* ваш К.О.
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
/*global App:true*/
App.ActionHandlerList = function (window, $, EventMgr, App) {
'use strict';
var dummyToolbtn = '.i-toolbtn-type-dummy',
actionBannerSelector = '.i-message__more-link, .i-wizard__step-link',
backBtnListSelector = '.back-btn-row',
breadcrumbSelector = '.breadcrumb',
controlPropSelector = '.controlprop',
pageNumListSelector = '.pager-list_type_list .pager-list__item_act',
tSettingSel = '.tsetting',
rowTableSel = '.list_table tr',
pagerInputSel = '.pager-list__input',
pagerBtnSelector = '.pager-list__input-submit',
pagerSlistSel = 'input[name="pager-slist"]',
toolBarBtnGroupActSel = '.toolbar-button.active span.action.group,' + ' .toolbar-button.active span.action.groupdownload',
toolBarBtnSel = '.toolbar-button.active span.action:not(".group")',
toolBarBtnPreviewSel = '.toolbar-button.active span.action-preview',
dashboardButtonSel = '.dashboard-button',
modalActive = false,
storage = App.u.storage,
nestedListSel = '.i-nestedlist',
editFormSel = '.i-editform',
//selected elems from not list view
selectedElems = {},
// selected items
$selectedItems = function $selectedItems() {
return $('.tab-content_st_active .list_table .selected:not(".filtred")');
},
$firstListItem = function $firstListItem() {
return $('.tab-content_st_active .b-list__table-row:not(".back-btn")').get(0);
},
$content = function $content() {
return $('#main-wrapper');
};
//update selected elems object from not list view
function updateSelectedElems(e, data) {
var tabId = data.tabId,
elems = data.elems;
selectedElems[tabId] = elems;
}
//add elid for toolbar &
function updateSelectedElemsForForm(e, data) {
var tabId = data.tabId;
if (App.Dom.byId('toolbar-' + tabId)) {
selectedElems[tabId] = [{
elid: $('#frm-' + tabId).find('input[name="elid"]').val()
}];
//maybe dangeours
EventMgr.trigger('listSelect', { tabId: 'cont-' + tabId, len: 1 });
}
}
function removeSelectedElems(e, data) {
var tabId = data.tabId;
delete selectedElems[tabId];
}
/**
* Banner/Wizard Link handler
* @param {object} e
* @this {elem}
*/
function bannerAction(e) {
var href = this.getAttribute('data-href'),
wizardLink = App.Dom.hasClass(this, 'i-wizard__step-link'),
outerLink = App.Dom.hasClass(this, 'i-message__outer-link'),
iType = wizardLink ? 'replace' : false,
src = wizardLink ? 'wizardLink' : '',
param = App.Common.parseParams(href),
tabId = $(this).parents('.tab-content').attr('data-tabid'),
parent = App.Dom.hasClass(this, 'i-wizard__step-link') ? false : tabId,
targetTabId = App.Dom.hasClass(this, 'i-wizard__step-link') ? tabId : false,
formParam = $('#frm-' + tabId).serializeObject();
if (!outerLink) {
if (e) {
e.preventDefault();
}
} else {
return true;
}
if (formParam) {
delete formParam.func;
delete formParam.snext;
//delete formParam.elid;
delete formParam.sfrom;
$.extend(param, formParam);
}
EventMgr.trigger('ajaxRequest', {
param: param,
trfunc: 'ajaxResponse',
invar: {
dataSaved: true,
parent: parent,
iType: iType,
__src: src,
targetTabId: targetTabId },
queue: 'noqueue',
outtype: 'json',
failfunc: 'failCommonAjaxResponse' });
EventMgr.trigger('tabLoading', { tabId: tabId });
}
function nestedListHandler(e) {
e.preventDefault();
var $self = $(this),
elid = $self.closest('.b-list__table-row').attr('data-elid'),
index = $self.closest('td').index(),
th = $self.closest('table').find('th')[index],
colname = th.getAttribute('data-colname'),
nested = th.getAttribute('data-nestedlist'),
blank = th.getAttribute('data-nestedlist-blank'),
tabCont = $self.closest('.tab-content'),
tabId = tabCont.attr('data-tabid'),
pfunc = tabCont.attr('data-func'),
toolbarNode = App.Dom.byId('toolbar-' + tabId),
plid,
form = $('#frm-' + tabId),
filterParamString = form.serialize(),
param = {};
param.parentfilter = filterParamString;
param.func = 'nestedlist';
param.elid = elid;
param.col = colname;
param.nestedlist = nested;
/* jslint camelcase: false */
param.col_value = this.innerHTML;
/* jslint camelcase: true */
param.pfunc = pfunc;
if (toolbarNode) {
plid = filterXSS.friendlyAttrValue(toolbarNode.getAttribute('data-plid') || '');
if (plid) {
param.plid = plid;
}
}
EventMgr.trigger('ajaxRequest', {
param: param,
invar: {
newtab: blank,
__src: 'nestedList'
},
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
queue: 'nested-' + tabId,
failfunc: 'failCommonAjaxResponse' });
if (!blank) {
EventMgr.trigger('tabLoading', { tabId: tabId });
}
}
/**
* Back button in 1st list row handler
* @param {object} e
* @this {elem}
*/
function backBtnHandlerList(e) {
e.preventDefault();
var tabId = this.getAttribute('data-tabid');
$('#cont-' + tabId + ' .toolbar-button__item-img.back.img-link').trigger('click');
}
//breacrumb link handler
function breadcrumbHandler(e) {
e.preventDefault();
var id = this.getAttribute('data-id'),
tabId = $(this).parents('.tab-content').attr('data-tabid'),
param = storage.breadcrumb[tabId][id],
targetTabId = tabId;
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: param,
invar: { targetTabId: targetTabId, iType: 'replace' },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failCommonAjaxResponse',
queue: 'noqueue' });
EventMgr.trigger('tabLoading', { tabId: tabId });
}
//do if confirm
function confirmOk(confirmObj) {
modalActive = false;
var paramString = confirmObj.param,
tabId = confirmObj.tabId,
url = confirmObj.cgi ? pageInfo.host + confirmObj.cgi : pageInfo.url,
param = (typeof paramString === 'undefined' ? 'undefined' : _typeof(paramString)) === 'object' ? paramString : App.Common.parseParams(paramString),
progressid,
param1;
if (confirmObj.progressbar) {
param.progressid = confirmObj.progressbar;
progressid = confirmObj.progressbar;
}
if (confirmObj.download) {
paramString = (typeof paramString === 'undefined' ? 'undefined' : _typeof(paramString)) === 'object' ? App.Common.serializeForAttr(paramString) : paramString;
//for show error in new window #17646
window.open(url + '?' + paramString);
return;
} else {
EventMgr.trigger('ajaxRequest', {
url: url,
param: param,
invar: { tabId: tabId, tabs: confirmObj.to, __from: confirmObj.__from, __blockId: confirmObj.__blockId, '__src': 'groupAction' },
type: 'get',
trfunc: 'ajaxGroupComplete',
outtype: 'json',
queue: 'noqueue',
failfunc: 'failCommonAjaxResponse' });
}
if (confirmObj.progressbar) {
param1 = { elid: progressid, func: 'progress.get', sfrom: 'ajax' };
setTimeout(function () {
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: param1,
invar: { tabId: tabId,
param: param1,
type: '',
progresstype: confirmObj.progressbar },
type: 'get',
outtype: 'json',
trfunc: 'progressBarResponse',
queue: 'noqueue' });
param1 = null;
tabId = null;
}, 700);
} else if (!confirmObj.download) {
EventMgr.trigger('tabLoading', { tabId: tabId });
}
}
//handler for group action, open confirm msg
function groupActionHandler(e, data) {
var confirmText = data.confirm,
self = data.self,
rows = data.rows,
tabId = data.tabId,
param = data.params,
progressbar = data.progressbar,
download = data.download,
delimiter = new RegExp(', ', 'g'),
lb = new RegExp('\n', 'g'),
dataText,
confirmObj = {};
if (typeof rows === 'string' && data.confirmDelimiter) {
if (data.confirmDelimiter === '\n') {
data.confirmDelimiter = '<br/>';
}
rows = rows.replace(delimiter, data.confirmDelimiter);
}
if (typeof confirmText === 'string') {
confirmText = confirmText.replace(lb, '<br>');
}
dataText = confirmText + ' ' + rows + '?';
confirmObj.data = dataText;
confirmObj.tabId = tabId;
confirmObj.param = param;
confirmObj.progressbar = progressbar;
confirmObj.download = download;
confirmObj.cgi = data.cgi;
confirmObj.to = data.to;
confirmObj.__from = data.__from;
confirmObj.__blockId = data.__blockId;
EventMgr.trigger('confirmBoxShow', {
callbackOk: confirmOk,
callbackCancel: null,
self: data.self,
text: dataText,
warning: data.warning,
args: [confirmObj]
});
}
//group action
function groupAction(e) {
if (e) {
e.preventDefault();
}
var self = $(this),
toolbar = self.parent(),
confirm = toolbar.attr('data-confirm'),
confirmDelimiter = toolbar.attr('data-confirm-d'),
itemId = self.attr('data-itemid'),
progressbar = self.attr('data-progressid') || false,
classes = self.attr('class'),
cgi = self.attr('data-cgi'),
//tabId = this.getAttribute('data-parent'),
tabId = self.attr('data-parent'),
params = App.Common.parseParams(self.attr('data-url')),
warning = App.Dom.hasClass(self[0], 'i-confirm-warning'),
download = App.Dom.hasClass(self[0], 'groupdownload'),
invar = { confirm: confirm,
params: params,
tabId: tabId,
progressbar: progressbar ? progressbar + itemId : false,
download: download,
confirmDelimiter: confirmDelimiter,
warning: warning,
cgi: cgi,
self: this
};
EventMgr.trigger('clickedGroupItem', {
invar: invar,
tabId: tabId,
classes: classes });
}
//relaod after group actions
function reloadAfterGroupAction(e, data) {
var tabId = data.tabId,
//check for user.su
newLocation = data.location,
newWin = data.newwin,
newFormParams = data.formParam,
newListParams = data.listParam,
parent = data.parent || '',
tabs = data.tabs,
error = data.error,
param;
App.Common.checkRefreshMenu(data);
//check for open as child
if (data.openAsChild) {
parent = data.tabId;
}
if (data.reload) {
window.location = pageInfo.url;
} else if (newLocation && newWin) {
window.open(newLocation, '_blank');
} else if (newLocation) {
window.location = newLocation;
} else if (newFormParams) {
param = App.Common.parseParams(newFormParams);
EventMgr.trigger('ajaxRequest', {
noesc: true,
param: param,
invar: { parent: parent, srcTabId: tabId },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
queue: 'noqueue' });
return false;
} else if (newListParams) {
param = App.Common.parseParams(newListParams);
EventMgr.trigger('ajaxRequest', {
noesc: true,
param: param,
invar: { parent: parent, srcTabId: tabId },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
queue: 'noqueue' });
return false;
} else if (error) {
EventMgr.trigger('ajaxResponse', data);
return;
} else if (data.__from === 'dashboard' && data.__blockId) {
$('#tblock-' + data.__blockId + ' .dashblock-reload').trigger('click');
return;
}
if (data.message && data.message.length) {
App.Global.bannerHtml = data.message;
App.Global.warning = data.warning;
App.Global.targetId = tabId;
}
if (tabId !== undefined) {
EventMgr.trigger('reloadTab', { tabId: tabId, filter: true });
} else {
param = tabs[0][0];
EventMgr.trigger('ajaxRequest', {
param: param,
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
queue: 'noqueue',
failfunc: 'failCommonAjaxResponse' });
}
}
//control props handler
function controlPropHandler(e) {
e.preventDefault();
e.stopPropagation();
var type = this.getAttribute('data-type'),
func = this.getAttribute('data-func'),
cgi = this.getAttribute('data-cgi'),
self = $(this),
tr = self.parents('tr'),
blockId = self.closest('.b-form-page_view_dblock').attr('data-tabid'),
elid = tr.attr('data-elid'),
keyName = tr.attr('data-elkeyname'),
param = [],
paramString = '',
url = cgi ? pageInfo.host + cgi : pageInfo.url,
parent = self.parents('.content').attr('data-tabid'),
confirm = {},
tabs,
toolbar = $('#cont-' + parent + ' .toolbar'),
plid = filterXSS.friendlyAttrValue(toolbar.attr('data-plid') || ''),
convert = toolbar.attr('data-convert'),
value = this.getAttribute('data-value');
paramString += 'elid=' + encodeURIComponent(elid);
if (plid) {
param.plid = plid;
// plid already encode
paramString += '&plid=' + plid;
}
if (convert) {
param.tconvert = convert;
paramString += '&tconvert=' + encodeURIComponent(convert);
}
if (value) {
param.value = value;
paramString += '&value=' + value;
}
param.func = func;
param.elid = elid;
if (type === 'list' || type === 'form' || type === 'edit') {
EventMgr.trigger('ajaxRequest', {
url: url,
param: param,
invar: { parent: parent },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
queue: 'noqueue' });
} else if (type === 'url') {
//how it does work?
App.u.openInNewWindow(func, '_blank');
} else if (type === 'group') {
confirm = this.getAttribute('data-confirm');
tabs = { 0: [param] };
param.sok = 'ok';
var grActParam = {
confirm: confirm,
rows: keyName,
tabId: parent,
params: param,
to: tabs,
// __from: 'dashboard',
self: this,
cgi: cgi };
if (blockId) {
grActParam.__from = 'dashboard';
grActParam.__blockId = blockId;
}
groupActionHandler.apply(window, [{}, grActParam]);
} else if (type === 'window') {
paramString += '&func=' + func;
window.open(url + '?' + paramString + '&newwindow=yes', '_blank');
}
}
//handler for modules with param elid plid
function actionControllerWithParam(e, data) {
var i = 0,
paramString,
self = $(this),
type = this.getAttribute('data-type'),
cgi = this.getAttribute('data-cgi'),
name = this.getAttribute('data-name'),
updateTab = App.Dom.hasClass(this, 'updatetab'),
newTab = App.Dom.hasClass(this, 'newtab'),
classes = self.attr('class'),
href,
parent,
re,
url,
param = {},
targetTabId,
plid,
moreOne = false,
hasProgressBar = false,
tabId,
tconvert,
progressid,
iType,
rParent,
elems,
l,
rl;
param.plid = '';
href = this.getAttribute('data-url');
parent = this.getAttribute('data-parent');
tabId = parent;
if (type !== 'new' && type !== 'list' && type !== 'url' && type !== 'windownosel') {
if (self.parents('.toolbar').attr('data-plid') !== undefined) {
param.plid = filterXSS.friendlyAttrValue(self.parents('.toolbar').attr('data-plid') || '');
}
//check for map selected
if (selectedElems[tabId]) {
elems = selectedElems[tabId];
l = elems.length;
rl = l - 1;
while (l--) {
if (l !== rl) {
param.elid += ', ';
if (elems[l].name) {
param.name += ', ';
}
} else {
param.elid = '';
if (elems[l].name) {
param.name = '';
}
}
param.elid += elems[l].elid;
if (elems[l].name) {
param.name += elems[l].name;
}
}
//get form list
} else {
$selectedItems().each(function () {
if (i !== 0) {
param.elid += ', ';
moreOne = true;
} else {
param.elid = '';
}
param.elid += this.getAttribute('data-elid');
if (i === 0) {
param.elname = this.getAttribute('data-elkeyname');
} else if (param.elname) {
delete param.elname;
}
i++;
});
}
//check for elid for groupformnosel
if (type === 'groupformnosel') {
if (!param.elid) {
var firstRow = $firstListItem();
if (firstRow) {
param.elid = firstRow.getAttribute('data-elid');
}
}
}
tconvert = self.parents('.toolbar').attr('data-convert');
if (tconvert) {
param.tconvert = tconvert;
}
} else {
plid = filterXSS.friendlyAttrValue(self.parents('.toolbar').attr('data-plid') || '');
param.plid = plid || '';
}
re = new RegExp('/?func=+');
if (href.match(re)) {
url = cgi ? pageInfo.host + cgi : pageInfo.url;
href = href.replace('?', '');
paramString = href + '&elid=' + encodeURIComponent(param.elid) + '&plid=' + encodeURIComponent(param.plid);
param.func = href.replace('func=', '');
//check for progressbar
progressid = this.getAttribute('data-progressid') + this.getAttribute('data-itemid');
if (this.getAttribute('data-progressbar')) {
hasProgressBar = true;
}
//choose type
if (type === 'window' || type === 'groupwindow' || type === 'windownosel') {
window.open(url + '?' + paramString + '&newwindow=yes', '_blank');
return false;
//groupedit
} else if (type === 'edit' && moreOne) {
param.faction = param.func;
param.func = 'groupedit';
hasProgressBar = true;
EventMgr.trigger('clickedGroupItem', {
invar: {
url: url,
tabId: tabId,
params: param,
newTab: newTab,
parent: parent,
type: type,
updateTab: updateTab,
name: name,
hasProgressBar: hasProgressBar,
progressid: progressid
},
tabId: tabId,
classes: classes,
triggerAction: 'requestListAction'
});
return false;
} else if (type === 'url') {
if (cgi) {
App.u.openInNewWindow(url, '_blank');
} else {
App.u.openInNewWindow(param.func, '_blank');
}
return false;
}
//trigger requestAction here
EventMgr.trigger('requestListAction', {
url: url,
params: param,
newTab: newTab,
parent: parent,
tabId: tabId,
type: type,
updateTab: updateTab,
name: name,
hasProgressBar: hasProgressBar,
progressid: progressid
});
} else {
//what else?
console.log(href);
}
//call progressbar if needed
if (e) {
e.preventDefault();
}
}
function requestAction(e, data) {
var url = data.url,
param = data.params,
tabId = data.tabId,
newTab = data.newTab,
parent = data.parent,
type = data.type,
name = data.name,
updateTab = data.updateTab,
hasProgressBar = data.hasProgressBar,
progressid = data.progressid,
iType,
rParent,
targetTabId;
if (hasProgressBar) {
param.progressid = progressid;
setTimeout(function () {
var param1 = {
elid: progressid,
func: 'progress.get',
sfrom: 'ajax' };
EventMgr.trigger('ajaxRequest', {
param: param1,
invar: {
tabId: tabId,
param: param1,
type: '',
progresstype: undefined },
type: 'get',
outtype: 'json',
trfunc: 'progressBarResponse',
queue: 'noqueue' });
}, 700);
}
//call function and refresh list after (like group action)
if (type === 'refresh' || type === 'action') {
EventMgr.trigger('ajaxRequest', {
url: url,
param: param,
invar: { tabId: tabId, __src: 'toolbarAction-refresh' },
type: 'get',
trfunc: 'ajaxGroupComplete',
outtype: 'json',
queue: 'noqueue',
failfunc: 'failCommonAjaxResponse' });
EventMgr.trigger('tabLoading', { tabId: tabId });
return false;
} else if (updateTab) {
targetTabId = parent;
iType = 'replace';
//flag for remember parent
rParent = true;
parent = null;
}
if (newTab) {
parent = null;
}
//param = APP.common.parseParams(param);
EventMgr.trigger('ajaxRequest', {
url: url,
param: param,
invar: {
dataSaved: true,
newtab: newTab,
parent: parent,
targetTabId: targetTabId,
iType: iType,
__srcBtn: name,
__src: 'toolbarAction',
rParent: rParent },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failCommonAjaxResponse',
queue: 'noqueue' });
if (!newTab) {
EventMgr.trigger('tabLoading', { tabId: tabId });
}
}
function actionPreviewHandler(e) {
var $self = $(this),
plid = '',
elid = '',
i = 0,
href = this.getAttribute('data-url'),
$fakeNode = $('#b-lightbox-fake-link');
if ($self.parents('.toolbar').attr('data-plid') !== undefined) {
plid = filterXSS.friendlyAttrValue($self.parents('.toolbar').attr('data-plid') || '');
}
$selectedItems().each(function () {
if (i !== 0) {
elid += ', ';
} else {
elid = '';
}
elid += this.getAttribute('data-elid');
i++;
});
$fakeNode.attr('href', '?' + href + '&elid=' + elid + '&plid=' + plid);
$fakeNode.trigger('click');
}
//hotkey handler for toolbtn
function hotKeysHandler(e, d) {
if (d && d.key && d.keys && d.len) {
if (window.document.activeElement && window.document.activeElement.getAttribute('type')) {
return;
}
var hotKeyClass = 'hotkey-';
//check for CTRL
if (d.ctrl) {
hotKeyClass += 'Ctrl-';
}
//check for SHIFT
if (d.shift) {
hotKeyClass += 'Shift-';
}
hotKeyClass += d.key;
var $toolbtn = $('.tab-content_st_active .' + hotKeyClass);
if ($toolbtn.length) {
$toolbtn.find('.img-link').trigger('click');
}
}
}
//DbClick on table row
function actionDbClickController(e) {
if (e) {
e.preventDefault();
}
blockSelection();
var $toolBarBtn = $('.tab-content_st_active' + ' .toolbar-button.active .img-link.default');
if ($toolBarBtn.length > 0) {
if ($toolBarBtn.hasClass('group')) {
groupAction.apply($toolBarBtn);
} else if ($toolBarBtn.hasClass('action-preview')) {
actionPreviewHandler.apply($toolBarBtn[0]);
} else {
actionControllerWithParam.apply($toolBarBtn[0]);
}
EventMgr.trigger('hideContextIcon');
}
}
//list pager handler
function pagerHandler(e, data) {
var tabCont = $(this).parents('.tab-content'),
tabId = tabCont.attr('data-tabid'),
pCnt = $('#cont-' + tabId + ' .page_cnt .cnt').val(),
pNum = this.getAttribute('data-n'),
/* jslint camelcase: false */
param = { p_num: pNum, p_cnt: pCnt };
/* jslint camelcase: true */
EventMgr.trigger('reloadTab', { tabId: tabId, param: param });
}
function slistPagerHandler(e, data) {
var pNum = $(this).val(),
//@todo move to variable
tabCont = $('.tab-content_st_active'),
tabId = tabCont.attr('data-tabid'),
pCnt = $('#cont-' + tabId + ' .page_cnt .cnt').val(),
/* jslint camelcase: false */
param = {
p_num: pNum,
p_cnt: pCnt
};
/* jslint camelcase: true */
EventMgr.trigger('reloadTab', { tabId: tabId, param: param });
}
//pager input in list
function pagerInputHandler(e, data) {
var code = e.keyCode || e.which,
select;
if (code === 13) {
select = $('.tab-content_st_active ' + '.pager-wrapper input[name="pager-slist"]');
if (select.val() !== 1) {
select.val(1);
}
slistPagerHandler.apply(select);
e.preventDefault();
}
}
//pager ok button handler
function pagerBtnHandler(e) {
var select = $('.tab-content_st_active ' + '.pager-wrapper input[name="pager-slist"]');
if (select.val() !== 1) {
select.val(1);
}
slistPagerHandler.apply(select);
e.preventDefault();
}
//handler for tsetting button in list
function actionControllerTsetting(e) {
var href = this.getAttribute('data-url'),
parent = this.getAttribute('data-parent'),
re = new RegExp('/?func=+'),
queue = 'menu',
newtab = false,
url,
param;
if (href) {
if (href.match(re)) {
url = pageInfo.url;
href = href.replace('?', '');
// convert string to object
param = App.Common.parseParams(href);
//noesc param
EventMgr.trigger('ajaxRequest', {
url: url,
param: param,
noesc: true,
invar: {
parent: parent,
newtab: newtab,
__src: 'tSetting',
__srcBtn: 'tsetting'
},
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
queue: queue,
failfunc: 'failCommonAjaxResponse' });
EventMgr.trigger('tabLoading', { tabId: parent });
} else {
//what else?
console.log(url);
}
}
if (e) {
e.preventDefault();
}
}
//open list and form form dashboard
function dashBoardButtonHandler(e) {
e.preventDefault();
var type = this.getAttribute('data-type'),
func = this.getAttribute('data-func'),
form = this.getAttribute('data-form'),
name = this.getAttribute('data-name'),
tabs,
self,
rows,
tabid,
confirm,
blockId,
funcParam = App.Common.parseParams(func),
funcForm = App.Common.parseParams(form);
if (type === 'group') {
self = $(this);
blockId = self.closest('.b-form-page_view_dblock').attr('data-tabid'), rows = self.parents('tr').attr('data-elid');
tabid = undefined;
confirm = self.parents('table.list_table').find('div[data-confirm-' + name + ']').attr('data-confirm-' + name);
tabs = [[{ status: 1, title: '', params: funcParam }]];
var grActParam = {
confirm: confirm,
rows: rows,
tabId: tabid,
to: tabs,
self: this,
params: funcForm };
if (blockId) {
grActParam.__from = 'dashboard';
grActParam.__blockId = blockId;
}
groupActionHandler.apply(window, [{}, grActParam]);
return;
} else {
//if not defined func list open only form
if (!funcParam.func) {
tabs = [[{ status: 1, title: '', params: funcForm }]];
} else {
tabs = [[{ status: 1, title: '', params: funcParam }, { status: 1, title: '', params: funcForm }]];
}
//tabs = { 0 : [funcParam, funcForm] };
}
EventMgr.trigger('multiLoadTab', { tabs: tabs, isNotInit: true });
}
function editFormHandler(e) {
e.preventDefault();
var $self = $(this),
elid = $self.closest('.b-list__table-row').attr('data-elid'),
index = $self.closest('td').index(),
th = $self.closest('table').find('th')[index],
editFunc = th.getAttribute('data-editform'),
tabCont = $self.closest('.tab-content'),
tabId = tabCont.attr('data-tabid'),
toolbarNode = App.Dom.byId('toolbar-' + tabId),
invar = {},
param = {
func: editFunc,
elid: elid
},
plid;
if (toolbarNode) {
plid = filterXSS.friendlyAttrValue(toolbarNode.getAttribute('data-plid') || '');
if (plid) {
param.plid = plid;
}
}
if (tabId !== 'tab0') {
invar.parent = tabId;
}
EventMgr.trigger('ajaxRequest', {
param: param,
invar: invar,
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
queue: 'dashboard',
failfunc: 'failCommonAjaxResponse' });
}
function dummyToolbtnHandler(e) {
if (e) {
e.preventDefault();
}
}
function init() {
EventMgr.on($content(), actionBannerSelector, 'click', bannerAction);
EventMgr.on($content(), backBtnListSelector, 'click', backBtnHandlerList);
EventMgr.on($content(), breadcrumbSelector, 'click', breadcrumbHandler);
EventMgr.bind('listSelectedData', groupActionHandler);
EventMgr.bind('requestListAction', requestAction);
EventMgr.on($content(), controlPropSelector, 'click', controlPropHandler);
EventMgr.on($content(), toolBarBtnGroupActSel, 'click', groupAction);
EventMgr.on($content(), toolBarBtnSel, 'click', actionControllerWithParam);
EventMgr.on($content(), toolBarBtnPreviewSel, 'click', actionPreviewHandler);
EventMgr.on($content(), pageNumListSelector, 'click', pagerHandler);
EventMgr.bind('updateSelectedElems', updateSelectedElems);
EventMgr.bind('appendForm', updateSelectedElemsForForm);
EventMgr.bind('closeTabEvent', removeSelectedElems);
EventMgr.on($content(), tSettingSel, 'click', actionControllerTsetting);
EventMgr.bind('ajaxGroupComplete', reloadAfterGroupAction);
EventMgr.on($content(), rowTableSel, 'dblclick', actionDbClickController);
EventMgr.on($content(), pagerInputSel, 'keydown', pagerInputHandler);
EventMgr.on($content(), pagerBtnSelector, 'click', pagerBtnHandler);
EventMgr.on($content(), pagerSlistSel, 'change', slistPagerHandler);
EventMgr.on($content(), dashboardButtonSel, 'click', dashBoardButtonHandler);
EventMgr.on($content(), nestedListSel, 'click', nestedListHandler);
EventMgr.on($content(), editFormSel, 'click', editFormHandler);
EventMgr.on($content(), dummyToolbtn, 'click', dummyToolbtnHandler);
EventMgr.bind('otherKeyUp', hotKeysHandler);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.ActionHandlerList.js.map
'use strict';
/**
* Модуль.
* ваш К.О.
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
App.ActionHandlerDashboard = function (window, $, EventMgr, App) {
'use strict';
var storage = App.Common.storage,
refDashboardBlock = '.dashblock-reload',
pageNumDashSel = '.pager-list_type_dashboard .pager-list__item_act',
actionMultiBtnSel = '.multi-item a, .multi-item span',
$content = function $content() {
return $('#main-wrapper');
},
blockToUpdate = [];
function dashboardLoad() {
var url = pageInfo.url,
param = { func: 'dashboard' };
EventMgr.trigger('ajaxRequest', {
url: url,
param: param,
invar: { exType: 'dashboard' },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
queue: 'dashboard' });
}
function dashoardCheckSwitchTab(e, data) {
var tabId = data.tabId;
if (tabId === 'tab0') {
dashboardLoad();
EventMgr.unbind('activateTab', dashoardCheckSwitchTab);
}
}
//startpage
function dashBoard() {
if (pageInfo.startpage !== 'dashboard' || pageInfo.startform) {
var data = { 'lateLoad': true, exType: 'dashboard' };
EventMgr.trigger('ajaxResponse', data);
EventMgr.bind('activateTab', dashoardCheckSwitchTab);
} else {
dashboardLoad();
}
}
//for autoupdate
function refreshDashBlock(e, data) {
var block = data.block;
if (block && $('#cont-tab0').hasClass('tab-content_st_active')) {
$('#tblock-' + block.name).find('.dashblock-reload').trigger('click');
}
if (block.autoupdate) {
setTimeout(function (block) {
return function () {
EventMgr.trigger('refreshDashBlock', { block: block });
};
}(block), block.autoupdate * 1000);
}
}
function addBlockToUpdate(e, block) {
blockToUpdate.push(block);
}
function checkForUpdate(e, d) {
if (d && d.tabId === 'tab0') {
update();
}
}
function update(e, data) {
for (var i = 0, l = blockToUpdate.length; i < l; i++) {
EventMgr.trigger('refreshDashBlock', { block: blockToUpdate[i] });
}
}
function refDashboardBlockHandler(e) {
e = e || window.event;
e.preventDefault();
e.stopPropagation();
var id = $(this).closest('.l-form-page__title-wr').attr('data-name').replace('.', '_'),
blockId = 'block-' + id,
block = App.Dom.byId(blockId),
name,
param,
pNum,
tblock,
startTime;
if (block) {
tblock = App.Dom.byId('t' + blockId);
if (tblock) {
startTime = new Date().getTime();
tblock.className += ' loading ';
}
name = block.getAttribute('data-block-name');
param = storage.dashboard[name];
pNum = $('#' + blockId + ' .page.active').attr('data-n');
if (pNum) {
/* jslint camelcase: false */
param.p_num = pNum;
/* jslint camelcase: true */
}
EventMgr.trigger('ajaxRequest', {
param: param,
invar: { blockId: blockId, startTime: startTime },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponseForDashboard',
failfunc: 'failedAjaxResponseForDashboard',
queue: 'dash_pager' + id });
}
}
//pager on dashboard block
function pagerHandlerDash() {
var self = $(this),
parent = self.parents('.block-table'),
id = parent.attr('id'),
pNum = self.attr('data-n'),
name = parent.attr('data-block-name'),
tblock = App.Dom.byId('t' + id),
param = storage.dashboard[name],
startTime;
/* jslint camelcase: false */
param.p_num = pNum;
/* jslint camelcase: true */
if (tblock) {
startTime = new Date().getTime();
tblock.className += ' loading ';
}
EventMgr.trigger('ajaxRequest', {
param: param,
invar: { blockId: id, startTime: startTime },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponseForDashboard',
failfunc: 'failedAjaxResponseForDashboard',
queue: 'dash_pager' + id });
}
//handler for dashboard button
function actionMultiController(e) {
if (e) {
e.preventDefault();
}
var form = this.getAttribute('data-form'),
list = this.getAttribute('data-list'),
top = this.getAttribute('data-top'),
type = this.getAttribute('data-type'),
tabs,
param;
if (type === 'form-list') {
tabs = [];
tabs.push([{
'title': '',
status: 1,
params: { func: list } }, { title: '',
status: 1,
params: { func: form } }]);
EventMgr.trigger('multiLoadTab', { tabs: tabs });
} else if (type === 'list' || type === 'form') {
param = { func: list || form };
EventMgr.trigger('ajaxRequest', {
param: param,
type: 'get',
invar: {
__src: 'dashboardBtn'
},
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failCommonAjaxResponse',
queue: 'multiload' });
} else if (type === 'top') {
//reload desktop by reload flag for build tab function
param = { func: top };
EventMgr.trigger('ajaxRequest', {
param: param,
type: 'get',
outtype: 'json',
invar: {
dataSaved: true,
reload: true
},
trfunc: 'ajaxResponse',
failfunc: 'failCommonAjaxResponse',
queue: 'multiload' });
}
}
function init() {
EventMgr.bind('refreshDashBlock', refreshDashBlock);
EventMgr.bind('loadPage', dashBoard);
EventMgr.bind('addBlockToUpdate', addBlockToUpdate);
EventMgr.bind('changedTab', checkForUpdate);
EventMgr.on($content(), refDashboardBlock, 'click', refDashboardBlockHandler);
EventMgr.on($content(), pageNumDashSel, 'click', pagerHandlerDash);
EventMgr.on($content(), actionMultiBtnSel, 'click', actionMultiController);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.ActionHandlerDashboard.js.map
'use strict';
/**
* ajax helper module
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
*/
App.AjaxHelper = function (window, $, EventMgr) {
'use strict';
var init = function init() {
EventMgr.bind('ajaxRequest', ajaxRequest);
EventMgr.bind('ajaxRequestAbort', ajaxRequestAbort);
},
CACHE = {},
ajaxRequestAbort = function ajaxRequestAbort(e, data) {
var id = data.id;
if (CACHE[id] && CACHE[id].xhr.abort) {
CACHE[id].erMsg = 'Request canceled By User';
CACHE[id].xhr.abort();
}
},
addRequestHook = function addRequestHook(cb) {
if (typeof cb === 'function') {
requestHooks.push(cb);
}
},
addResponseHook = function addResponseHook(cb) {
if (typeof cb === 'function') {
responseHooks.push(cb);
}
},
requestHooks = [],
responseHooks = [],
applyRequestHooks = function applyRequestHooks(data) {
for (var i = 0, l = requestHooks.length; i < l; i++) {
requestHooks[i].apply(this, [data]);
}
},
applyResponseHooks = function applyResponseHooks(data) {
for (var i = 0, l = responseHooks.length; i < l; i++) {
responseHooks[i].apply(this, [data]);
}
},
ajaxRequest = function ajaxRequest(e, dataSource) {
applyRequestHooks(dataSource);
var cUrl = dataSource.url || pageInfo.url,
param = dataSource.param || {},
formData = dataSource.formData || {},
inVar = dataSource.invar || {},
trFunc = dataSource.trfunc || 'ajaxResponse',
failFunc = dataSource.failfunc || false,
type = dataSource.type || 'get',
outType = dataSource.outtype || 'html',
queueName = dataSource.queue || 'queue',
noesc = !!dataSource.noesc,
reqType = dataSource.reqType || 'jquery',
progressCb = dataSource.progressCb || function () {},
rp = dataSource.rp || [],
id = dataSource.id;
inVar.__dataSource = dataSource;
if (queueName === 'noqueue') {
queueName = new Date().getTime();
}
param.sfrom = 'ajax';
param.operafake = new Date().getTime();
var paramString = getQueryString(param, noesc);
if (reqType === 'jquery') {
EventMgr.trigger('getAjaxRequest', {});
var ajaxParams = {
url: cUrl,
type: type,
dataType: 'html',
data: paramString,
headers: { 'ISP-Client': 'Web-interface' },
//data : param,
async: true,
success: success,
xhrFields: { withCredentials: true },
error: error
};
if (type === 'jsonp') {
ajaxParams.jsonp = 'callback';
ajaxParams.dataType = 'jsonp';
ajaxParams.crossDomain = true;
}
$.ajaxq(queueName, ajaxParams);
} else {
//progress upload
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', progressCb, false);
xhr.open('POST', cUrl);
//set header for long request
xhr.setRequestHeader('ISP-Client', 'Web-interface');
xhr.onreadystatechange = function () {
if (this.readyState === 4) {
if (this.status === 200) {
delete CACHE[id];
success(this.responseText);
} else {
error(this, this.statusText, this.statusText);
}
}
};
formData.append('sfrom', 'ajax');
CACHE[id] = { xhr: xhr };
xhr.send(formData);
}
/* jshint latedef: false*/
function success(data) {
if (type !== 'jsonp') {
data = data.replace(/\\'/g, "'");
data = data.replace(/^<![\w\s\"-\/]*>/g, '');
if (!data) {
//wtf?
console.log('empty response');
EventMgr.trigger('ajaxError', {});
return;
}
}
if (outType === 'json' && type !== 'jsonp') {
//remove non-printable characters
data = data.replace(/[\x00-\x08\x0B-\x0C\x0E-\x1F]/g, '');
try {
data = jQuery.parseJSON(data);
} catch (e) {
//error
console.log('jsonParseError', dataSource, failFunc);
dataSource.erType = 'json';
if (failFunc) {
EventMgr.trigger(failFunc, dataSource);
}
//EventMgr.trigger('ajaxError', {});
return;
}
}
if (outType !== 'html') {
data.sourceParamString = paramString;
//add props in returned object
$.extend(data, inVar);
data.selfUrl = pageInfo.url + '?' + data.urlparam;
//remove some param from response
if (rp.length) {
data = removeParams(data, rp);
}
}
if (trFunc !== 'DoNothing') {
EventMgr.trigger(trFunc, data);
}
EventMgr.trigger('giveAjaxRequest', {});
}
/* jshint latedef: false*/
function error(jqXHR, textStatus, errorThrown) {
//check for long request
if ((errorThrown === 'Service Unavailable' || jqXHR.status === 503) && !dataSource.ignore503) {
//go to new url while request not end
var longUrl = jqXHR.responseText;
dataSource.url = pageInfo.host + '/' + longUrl;
dataSource.reqType = 'jquery';
EventMgr.trigger('ajaxRequest', dataSource);
} else if (trFunc === 'ajaxResponse' && inVar.exType === 'dashboard') {
inVar.error = true;
inVar.shithappend = true;
EventMgr.trigger('ajaxResponse', inVar);
} else if (failFunc) {
var regex = /<div class="fatal-error-desc">(.*?)<\/div>/ig,
errText = String(jqXHR.responseText).match(regex);
if (errText && errText[0]) {
dataSource.erMsg = errText[0];
}
if (CACHE[dataSource.id] && App.u.isString(CACHE[dataSource.id].erMsg)) {
dataSource.erMsg = CACHE[dataSource.id].erMsg;
}
EventMgr.trigger(failFunc, dataSource);
delete CACHE[dataSource.id];
}
console.log(textStatus);
}
},
removeParams = function removeParams(data, rp) {
var l = rp.length;
while (l--) {
data[rp[l]] = null;
}
return data;
},
//join with &
getQueryString = function getQueryString(queryObj, noesc) {
var j = 0,
paramString = '',
curValue,
keyVar;
for (keyVar in queryObj) {
if (keyVar !== '') {
if (j !== 0) {
paramString += '&';
}
curValue = queryObj[keyVar];
//encode params
if (noesc) {
paramString += keyVar + '=' + curValue;
} else {
paramString += keyVar + '=' + encodeURIComponent(curValue);
}
j++;
}
}
return paramString;
};
return {
init: init,
addRequestHook: addRequestHook,
addResponseHook: addResponseHook
};
}(window, $, EventMgr);
//# sourceMappingURL=App.AjaxHelper.js.map
'use strict';
/**
* Alert module
* shows alert message
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @return {object} api
*/
App.Alert = function (window, $, EventMgr) {
'use strict';
var init = function init() {
EventMgr.bind('showAlert', showAlert);
EventMgr.obind($modalBtn(), 'click', hideAlert);
},
$body = function $body() {
return $('body');
},
$modalMsg = function $modalMsg() {
return $('#modal_alert_message');
},
$modalBtn = function $modalBtn() {
return $('#modal_alert_ok');
},
callback = null,
himself = null,
param = null,
activeClass = 'active-modal-alert',
showAlert = function showAlert(e, data) {
var msg = data.msg,
closeTimeout = data.closeTimeout,
modalMsg = $modalMsg(),
textarea;
callback = data.callback || null;
himself = data.himself || window;
param = data.param;
modalMsg.html(msg);
$body().addClass(activeClass);
setTimeout(function () {
textarea = modalMsg.find('.b-textarea');
if (textarea.length) {
textarea.select();
} else {
$modalBtn().focus();
}
}, 1);
if (closeTimeout) {
setTimeout(function () {
hideAlert();
}, closeTimeout);
}
},
hideAlert = function hideAlert() {
$body().removeClass(activeClass);
if (callback !== null) {
callback.apply(himself, [param]);
}
};
return {
init: init
};
}(window, $, EventMgr);
//# sourceMappingURL=App.Alert.js.map
'use strict';
/**
* Модуль утилит для манипуляции с формой
* @param {object} window глобальный объект
* @param {object} $ jQuery глобальный объект
* @param {object} App объект приложения
*/
App.FormUtils = function (window, $, App) {
function changeReadOnly(elems, set) {
if (!elems || elems.length === 0) {
return;
}
if (set) {
elems.find('.b-myselect,' + ' .b-radio,' + ' .b-checkbox__control,' + ' .l-slider__wr,' + ' .b-input_for_slider,' + ' .b-mselect').addClass('readonly').removeClass('mselect-av');
} else {
elems.find('.b-myselect, .b-radio,' + ' .b-checkbox__control,' + ' .l-slider__wr,' + ' .b-input_for_slider,' + ' .b-mselect').removeClass('readonly').addClass('mselect-av');
}
elems.find('.b-input, .b-textarea').attr('readonly', set);
}
var api = {
changeReadOnly: changeReadOnly
};
return api;
}(window, $, App);
//# sourceMappingURL=App.FormUtils.js.map
'use strict';
/**
* Модуль обработки скрытия полей на форме
* @param {object} window глобальный объект
* @param {object} $ jQuery глобальный объект
* @param {object} EventMgr менеджер событий
* @param {object} formUtils утилиты для манипуляции с формой
* @param {object} commonUtils общие утилиты
*/
App.FormDependFields = function (window, $, EventMgr, formUtils, commonUtils) {
/** селектор контролов управляющих скрытием полей */
var dependFieldSlistSelector = '.control-field input[type="hidden"],' + ' .control-field .b-input,' + ' .control-field .b-input_type_file,' + ' .control-field .b-textarea';
/**
* Получаем ссылку на ноду формы
* @return {object} jQuery объект
*/
function $content() {
return commonUtils.selectorCache('.i-form-wr');
}
//hide/show field by select, radio and checkbox
/**
* Обработчик скрытия зависимых полей от данного контрола
*/
function dependFieldsSlistHandler() {
var handlerValue = this.getAttribute('data-handler-val');
var name = this.getAttribute('name');
var type = this.getAttribute('type');
var tabId = this.getAttribute('data-tabid');
var rowIsHidden = false,
shadowShowElems = void 0,
shadowHideElems = void 0,
HideElems = void 0,
shadowedRow = void 0;
if (!name) {
return;
}
//show hidden fields by "hide"
shadowHideElems = $('.hidden-shadow-' + name);
HideElems = $('.hidden-' + name);
//unshadow shadow elems
formUtils.changeReadOnly(shadowHideElems, false);
shadowHideElems.removeClass('hidden-shadow-' + name);
HideElems.removeClass('hidden-' + name);
//hide field by else
$('.showed-' + name).addClass('depended-hidden-s').addClass('l-form__row_hidden_yes').removeClass('showed-' + name);
//check row if already shadowed by else or 1st start
shadowedRow = $('.depended-shadow-s');
if (!shadowedRow.hasClass('row-shadow')) {
shadowedRow.addClass('row-shadow');
formUtils.changeReadOnly(shadowedRow, true);
}
//shadow field by else
shadowShowElems = $('.showed-shadow-' + name).removeClass('showed-shadow-' + name).addClass('depended-shadow-s').addClass('row-shadow');
//add readonly from shadow
formUtils.changeReadOnly(shadowShowElems, true);
rowIsHidden = $(this).parents('.l-form__row, .filter-item').hasClass('l-form__row_hidden_yes');
// если поле не скрыто, то оно учавствует в скрытие полей
if (!rowIsHidden) {
//for text and native hidden
if (type === 'text' || type === 'textarea' || !handlerValue) {
var value = this.value;
if (value === '') {
//hide field by "hide" (empty = "yes")
$('#frm-' + tabId + ' [data-hide-' + name + '-' + hash('empty-yes') + ' = "yes"]').addClass('hidden-' + name).addClass('l-form__row_hidden_yes');
//shadow field by "hide" (empty = "yes")
shadowHideElems = $('#frm-' + tabId + ' [data-shadow-' + name + '-' + hash('empty-yes') + ' = "yes"]').addClass('hidden-shadow-' + name).addClass('row-shadow');
formUtils.changeReadOnly(shadowHideElems, true);
} else {
//hide fields by "hide" (empty = no)
$('#frm-' + tabId + ' [data-hide-' + name + '-' + hash('empty-no') + ' = "yes"]').addClass('hidden-' + name).addClass('l-form__row_hidden_yes');
//shadow fields by "hide" (empty = no)
shadowHideElems = $('#frm-' + tabId + ' [data-shadow-' + name + '-' + hash('empty-no') + ' = "yes"]').addClass('hidden-shadow-' + name).addClass('row-shadow');
formUtils.changeReadOnly(shadowHideElems, true);
}
// для селектов и радиобаттонов
} else {
//show field by "show"
$('#frm-' + tabId + ' [data-show-' + name + '-' + handlerValue + ' = "yes"]').addClass('showed-' + name).removeClass('depended-hidden-s').removeClass('l-form__row_hidden_yes');
//unshadow field by "show"
shadowShowElems = $('#frm-' + tabId + ' [data-show-shadow-' + name + '-' + handlerValue + ' = "yes"]').addClass('showed-shadow-' + name).removeClass('depended-shadow-s').removeClass('row-shadow');
formUtils.changeReadOnly(shadowShowElems, false);
//hide field by "hide"
$('#frm-' + tabId + ' [data-hide-' + name + '-' + handlerValue + ' = "yes"]').addClass('hidden-' + name).addClass('l-form__row_hidden_yes');
//shadow field by "hide"
shadowHideElems = $('#frm-' + tabId + ' [data-shadow-' + name + '-' + handlerValue + ' = "yes"]').addClass('hidden-shadow-' + name).addClass('row-shadow');
formUtils.changeReadOnly(shadowHideElems, true);
}
}
}
/**
* Вызываем обработчик if/else скрытия полей
* @param {string} tabId id таба
*/
function dependSlistHandlerRun(tabId) {
$('#cont-' + tabId + ' tr:not(".row-error") .control-field' + ' input[type="hidden"],' + ' #cont-' + tabId + ' tr:not(".row-error") .control-field' + ' input[type="text"],' + ' #cont-' + tabId + ' tr:not(".row-error") .control-field' + ' input[type="password"],' + ' #cont-' + tabId + ' tr:not(".row-error") .control-field' + ' .b-input_type_file,' + ' #cont-' + tabId + ' .control-field.filter-item input[type="hidden"],' + ' #cont-' + tabId + ' .control-field .b-textarea,' + ' #cont-' + tabId + ' .control-field.filter-item input[type="text"]').each(function () {
dependFieldsSlistHandler.apply(this);
});
}
/**
* Hide page if no visible fields
* @param {String} tabId
*/
function checkEmptyPage(tabId) {
$('#form-wrapper-' + tabId + ' .b-form-page').each(function () {
var id = this.getAttribute('id');
if ($('#' + id + ' .l-form__row:not(.l-form__row_hidden_yes):not(.depended-hidden-s)').length > 0) {
this.style.display = '';
} else {
this.style.display = 'none';
}
});
}
/**
* Handler for changed control fields
*
* every contol field runs hide/show function from up to down from
* @param {object} e event object
* @param {object} data
* @this {object} HTML node
*/
function firstDependFieldsSlistHandler(e, data) {
//проверяем на тип boolean для проверки на setvalue=once/final
var tabId = !!data && typeof data !== 'boolean' ? data.tabId : this.getAttribute('data-tabid');
// сбрасываем все правила скрытия
$('#cont-' + tabId + ' .l-form__row_hidden_yes').removeClass('l-form__row_hidden_yes');
$('#cont-' + tabId + ' .row-shadow').removeClass('row-shadow');
dependSlistHandlerRun(tabId);
checkEmptyPage(tabId);
EventMgr.trigger('updFormHeight', { tabId: tabId });
EventMgr.trigger('reloadSlider', { tabId: tabId });
EventMgr.trigger('upPrefixField', { tabId: tabId });
}
function init() {
EventMgr.bind('appendForm,appendReport,appendedFilter,initFuncRun', firstDependFieldsSlistHandler);
EventMgr.on($content(), dependFieldSlistSelector, 'change', firstDependFieldsSlistHandler);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App.FormUtils, App.Common);
//# sourceMappingURL=App.FormDependFields.js.map
'use strict';
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/**
* Form module
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @param {object} ScrollHandler Scrollbar library
*/
App.Forms = function (window, $, EventMgr, App, ScrollHandler) {
'use strict';
function init() {
EventMgr.on($content(), headerFormSelector, 'click', collapsedForm);
EventMgr.on($content(), unlimitBtnSelector, 'click', insertUnlimValue);
//zoom
EventMgr.on($content(), zoomBtnSelector, 'click', zoomHandler);
EventMgr.on($content(), zoomTextareaSelector, 'change', syncZoomValue);
EventMgr.on($content(), zoomTextareaSelector, 'keyup', addLineBreakToZoomField);
EventMgr.on($content(), zoomTextareaELSelector, 'keyup', syncZoomValue);
EventMgr.on($content(), passwdBtnSelector, 'click', genPassword);
EventMgr.on($content(), showpwdBtnSelector, 'click', showPassword);
EventMgr.on($content(), calendarBtnSelector, 'click', calendarHandler);
//checkbox
EventMgr.on($content(), checkboxChangeSelector, 'change', changeElHandler);
EventMgr.on($content(), checkboxSelector, 'click', changeCheckboxValue);
//radio
EventMgr.on($content(), radiobuttonSelector, 'click', changeRadioValue);
EventMgr.on($content(), descRadioSelector, 'click', radioLabelClickHandler);
EventMgr.on($content(), radiobuttonSelector, 'keydown', radioBtnKeyDownHandler);
EventMgr.on($content(), bandShowSelector, 'click', bandShowHandler);
EventMgr.on($content(), dependSlistSelector, 'change', dependSlistHandler);
EventMgr.on($content(), setvalueSelector, 'change', setValueHandler);
EventMgr.on($content(), setvalueBtnSelector, 'click', setValueHandler);
EventMgr.on($content(), resetBtnSelector, 'click', resetHandler);
EventMgr.on($content(), userexpLinkSelector, 'click', levelUp);
EventMgr.on($content(), nestedreportSelector, 'click', nestedReportHandler);
EventMgr.on($content(), fakePasswdSelector, 'change', fakePasswdCopy);
EventMgr.bind('forceSetValues', forceSetValues);
EventMgr.bind('appendForm,appendReport,appendedFilter,forceDepend', firstDependSlistHandler);
EventMgr.bind('loadPage', loadPassList);
EventMgr.bind('appendForm,appendReport,switchTabForm,setFocus', setFocus);
EventMgr.bind('appendForm', scrollToSelectedBranch);
EventMgr.bind('formSetValues', formSetValues);
EventMgr.bind('syncInputToZoom', syncInputWithZoom);
EventMgr.on($content(), passwdField, 'change', checkPass);
EventMgr.on($content(), inputTypeTextSelector, 'keydown', submitFormByEnter);
EventMgr.on($content(), checkBoxSelectTextareaRadioFormSelector, 'keydown', submitFormByCtrlEnter);
EventMgr.on($content(), passwdField, 'keyup', checkPass);
EventMgr.on($content(), novalueSelector, 'change', changeNovalueFieldHandler);
EventMgr.on($content(), formBtnSelector, 'keydown', formBtnKeyDownHandler);
EventMgr.on($content(), descLabelCheckboxSelector, 'click', checkboxDescClickHandler);
EventMgr.bind('gotPasswdList', gotPasswdListHandler);
EventMgr.on($content(), treeHitarea, 'click', treeCollpasedControl);
EventMgr.on($content(), treeLabelSelector, 'click', treeSelectedControl);
EventMgr.on($content(), treeMultiLabelSelector, 'click', treeMultiSelectedControl);
EventMgr.on($content(), treeCommonLabelSelector, 'dblclick', treeCollpasedControlWrapper);
EventMgr.on($content(), fakeFileInput, 'click', fakeFileInputHandler);
EventMgr.on($content(), FileInput, 'change', fileInputChangeHandler);
EventMgr.on($content(), treeReszieConrtolSelector, 'mousedown', treeResizeControl);
EventMgr.on($content(), confirmField, 'keyup, change', checkConfirmField);
EventMgr.on($content(), quoteSelector, 'click', quoteHandler);
//clear tab cache
EventMgr.bind('closeTabEvent,appendForm,appendFilter,appendReport', cleanTabCache);
EventMgr.bind('appendForm', prefixFieldSetUp);
EventMgr.bind('upPrefixField', prefixFieldSetUp);
EventMgr.on($content(), formListRow, 'click', formListRowClickHandler);
EventMgr.bind('focusOnErrorField', focusOnErrorField);
EventMgr.on($content(), '.b-textarea_responsive_yes', 'keyup', textareaResize);
EventMgr.bind('appendForm', checkTitleWidth);
EventMgr.on($content(), ticketBtnUp, 'click', ticketMoveUpHandler);
EventMgr.on($content(), ticketBtnDown, 'click', ticketMoveDownHandler);
EventMgr.on($content(), ticketCollapse, 'click', ticketCollapseHandler);
}
var appDom = App.Dom;
var CACHE = {};
function cleanTabCache(e, data) {
var tabId = data.tabId;
if (CACHE[tabId]) {
delete CACHE[tabId];
}
}
function $content() {
return App.Common.selectorCache('.i-form-wr');
}
var pageInfo = window.pageInfo,
quoteSelector = '.b-quote',
treeReszieConrtolSelector = '.b-resizer',
fakeFileInput = '.b-input-file-fake',
FileInput = '.b-input_type_file',
treeHitarea = '.tree-wrapper .tree-hitarea',
treeLabelSelector = '.b-tree_type_default .tree-handler',
treeCommonLabelSelector = '.tree-wrapper .tree-handler',
treeMultiLabelSelector = '.b-tree_type_multiple .tree-handler',
fakePasswdSelector = 'input.fakePasswd',
novalueSelector = 'input[data-novalue], textarea[data-novalue]',
passwdField = '.b-form-passwd-field, .b-form-passwd-field + input',
userexpLinkSelector = 'div.userexperience',
//wrapper for zoom textarea
zoomTextareaSelector = '.b-textarea_for_zoom',
//zoom field in inline-edit
zoomTextareaELSelector = '.edit-field-form .b-textarea_for_zoom',
//wrapper for body
//wrapper for radiobutton
radiobuttonSelector = '.b-radio:not(".readonly")' + ' .b-radio__control',
//wrapper for checkboxes
checkboxSelector = '.b-checkbox__control',
//wrapper for headers of form page
headerFormSelector = '.b-form-page__title',
bandShowSelector = '.band-content .band_show_button',
//wrapper for unlim btn from form
unlimitBtnSelector = '.b-input-btn_type_unlimit',
//zoom button
zoomBtnSelector = '.b-input-btn_type_zoom',
//password button
passwdBtnSelector = '.b-input-btn_type_passwd',
//calendar button
calendarBtnSelector = '.b-input-btn_type_calendar',
//show passwd button
showpwdBtnSelector = '.b-input-btn_type_showpwd',
//checkbox onchange
checkboxChangeSelector = 'input[type="checkbox"].onchange',
//wrapper for control field select and radio
dependSlistSelector = '.depend.b-myselect input[type="hidden"],' + ' .depend.b-select-ac input[type="hidden"],' + ' .depend.b-radio input[type="hidden"]',
setvalueSelector = '.setvalue input[type="hidden"],' + ' .b-select-ac_setvalues_yes input[type="hidden"],' + ' .setvalue input[type="text"],' + ' .setvalue input[type="password"],' + ' .setvalue .b-textarea',
setvalueBtnSelector = '.i-button_type_setvalues',
resetBtnSelector = '.i-button_type_reset',
formBtnSelector = '.i-button, .b-checkbox__control',
inputTypeTextSelector = '.l-form__wrapper .i-input-control,' + ' .filter-wrapper .i-input-control',
checkBoxSelectTextareaRadioFormSelector = '.l-form__wrapper' + ' .b-radio__control,' + ' .l-form__wrapper .b-textarea,' + ' .l-form__wrapper .b-myselect__select-value,' + ' .filter-wrapper .b-myselect__select-value,' + ' .l-form__wrapper .b-checkbox__control,' + ' .l-form__wrapper .b-mselect__view-value',
nestedreportSelector = '.data-wrapper.nestedreport',
descRadioSelector = '.b-label__visible_for_radio, .b-radio-img__row',
descLabelCheckboxSelector = ' .l-form__row_type_checkbox .b-label__visible',
confirmField = '.b-form-confirm-field, .b-form-passwd-field',
ticketBtnUp = '.i-ticket__btn-move_up',
ticketBtnDown = '.i-ticket__btn-move_down',
ticketCollapse = '.i-ticket__btn-collapse',
formListRow = '.b-form-list__row, .b-form-blocks__block';
function $activeTab() {
return $('.tab-content_st_active');
}
//check for title overwidth & set hint overwidth
function checkTitleWidth(e, data) {
$('#cont-' + data.tabId).find('.b-title_type-form').each(function () {
var width = this.offsetWidth,
scrollWidth = this.scrollWidth - 1;
if (width < scrollWidth) {
this.className += ' overwidth';
this.removeAttribute('data-hint');
}
});
}
function quoteHandler(e) {
e.preventDefault();
var content = '',
selection;
if (typeof window.getSelection !== 'undefined') {
var sel = window.getSelection();
content = sel.toString();
} else if (typeof document.selection !== 'undefined') {
if (document.selection.type === 'Text') {
selection = document.selection.createRange();
content = selection.text;
}
}
if (content === '') {
return;
}
var lines = content.split('\n'),
l = lines.length;
content = '';
for (var i = 0; i < l; i++) {
content += '> ' + lines[i];
if (i !== l - 1) {
content += '\n';
}
}
var targetId = this.getAttribute('data-target'),
elem = App.Dom.byId(targetId);
if (elem) {
App.u.insertStringAfterCaret(elem, content);
}
}
function fakeFileInputHandler() {
var id = this.getAttribute('data-source');
$('#' + id).trigger('click');
}
function checkFileSize(tabId, name) {
var fileSizeRes = App.u.checkFileSize(tabId, name);
if (fileSizeRes.msg) {
EventMgr.trigger('errMsgValid', {
self: fileSizeRes.field,
err: fileSizeRes.msg,
number: 0
});
} else {
EventMgr.trigger('okMsgValid', {
self: fileSizeRes.field,
number: 0,
notOk: true
});
}
}
function fileInputChangeHandler() {
var id = this.id,
tabId = this.getAttribute('data-tabid'),
fElemInput = App.Dom.byId('f-' + id),
value = this.value,
startIndex = value.indexOf('\\') >= 0 ? value.lastIndexOf('\\') : value.lastIndexOf('/'),
filename = '',
stateWrapper = App.Dom.byId('b-input-file__wr-' + tabId);
if (this.files) {
var filesList = this.files,
l = filesList.length;
for (var i = 0; i < l; i++) {
if (i !== 0) {
filename += ', ';
}
filename += filesList[i].name;
}
App.Dom.addClass(stateWrapper, 'b-input-file__wr_state_selected');
//check file size
checkFileSize(tabId, this.getAttribute('name'));
} else {
filename = value.substring(startIndex);
if (filename.indexOf('\\') === 0 || filename.indexOf('/') === 0) {
filename = filename.substring(1);
}
App.Dom.removeClass(stateWrapper, 'b-input-file__wr_state_selected');
}
filename = window.filterXSS(filename);
fElemInput.innerHTML = filename;
fElemInput.setAttribute('data-hint', filename);
}
//tree resizer
var treeResizeObj = {};
//tree resize drag
function treeResizeControl(e) {
var id = this.getAttribute('data-id'),
tabId = this.getAttribute('data-tabid'),
elem = App.Dom.byId(id),
moveTrigger = this.getAttribute('data-move-trigger') || false,
offsetTop = parseInt(this.offsetTop, 10),
$tip = $('.b-tip_name_textarea_resize');
//hide tip if it showing
if ($tip.length) {
$tip.find('.b-tip__close').trigger('click');
}
treeResizeObj.height = parseInt(elem.style.height, 10);
if (!treeResizeObj.height) {
treeResizeObj.height = elem.offsetHeight;
}
treeResizeObj.elem = elem;
treeResizeObj.id = id;
treeResizeObj.tabId = tabId;
treeResizeObj.moveTrigger = moveTrigger;
e = e || window.event;
if (e.touches) {
treeResizeObj.shiftY = e.touches[0].pageY;
treeResizeObj.top = e.touches[0].pageY - offsetTop;
document.ontouchmove = treeResizeMove;
document.ontouchend = treeResizeDrop;
document.ontouchcancel = treeResizeDrop;
} else {
treeResizeObj.shiftY = e.clientY;
treeResizeObj.top = e.clientY - offsetTop;
document.onmousemove = treeResizeMove;
document.onmouseup = treeResizeDrop;
}
document.body.style.cursor = 'n-resize';
}
var treeResizerTimeId = 1;
// tree resize move
function treeResizeMove(e) {
var diffY;
if (e.touches) {
diffY = e.touches[0].pageY - treeResizeObj.shiftY;
} else {
diffY = e.clientY - treeResizeObj.shiftY;
}
if (treeResizeObj.elem) {
treeResizeObj.elem.style.height = treeResizeObj.height + diffY + 'px';
}
if (treeResizeObj.moveTrigger) {
clearTimeout(treeResizerTimeId);
treeResizerTimeId = setTimeout(function () {
EventMgr.trigger(treeResizeObj.moveTrigger, {
id: treeResizeObj.id, tabId: treeResizeObj.tabId });
}, 100);
}
e.preventDefault();
}
// tree resize drop
function treeResizeDrop(e) {
if (e.touches) {
document.ontouchmove = null;
document.ontouchend = null;
document.ontouchcancel = null;
} else {
document.onmousemove = null;
document.onmouseup = null;
}
EventMgr.trigger('updFormHeight', { tabId: treeResizeObj.tabId });
document.body.style.cursor = '';
$(treeResizeObj.elem).removeClass('b-textarea_responsive_yes');
e.preventDefault();
}
//dblclick handler
function treeCollpasedControlWrapper(e) {
e.preventDefault();
var $self = $(this);
$self.prev().trigger('click');
}
function treeCollpasedControl() {
var parent = this.parentNode,
className = parent.className,
name,
params,
url,
self,
tabId,
root,
elem,
img,
src,
id;
self = $(this);
root = self.parents('.tree-inner');
tabId = root.attr('data-tabid');
id = root.attr('id');
//added class collapsed
if (className.match(/t-opened/)) {
className = className.replace(/t-opened/g, '');
className += ' collapsed';
//remove collapsed
} else if (className.match(/collapsed/)) {
//just open
if (className.match(/loaded/)) {
className = className.replace(/collapsed/g, '');
className += ' t-opened';
//load children
} else if (!className.match(/loading/)) {
name = App.Dom.byId(id + '-value').name;
params = $('#frm-' + tabId).serializeObject();
url = pageInfo.url;
/* jslint camelcase:false */
params.sv_field = name;
params.sv_tree = 'yes';
/* jslint camelcase:true */
elem = self.siblings('.tree-handler');
img = self.siblings('.tree-handler').children('.icon').children('img');
src = img.attr('src');
img.attr('src', pageInfo.theme + 'img/loader.gif');
params[name] = elem.attr('data-val');
//elem.parent().addClass('loading');
className += ' loading';
//get text node
/* jshint camelcase: false */
params.sv_text = $(elem).find('.tree-label').text();
EventMgr.trigger('ajaxRequest', {
url: url,
param: params,
trfunc: 'formGetTreeBranch',
invar: {
tabId: tabId,
name: name,
elem: elem,
src: src,
img: img,
id: 'cont-' + id },
type: 'get', outtype: 'json', queue: 'noqueue' });
}
}
parent.className = className;
EventMgr.trigger('updateScroll', { id: 'cont-' + id });
}
function treeSelectedControl(e) {
var $self = $(this),
id = $self.parents('.tree-inner').attr('id');
//remove other selection
$selectedTreeElem(id).removeClass('selected');
var input = App.Dom.byId(id + '-value');
input.value = this.getAttribute('data-val');
$(input).trigger('change');
this.className += ' selected';
}
function $selectedTreeElem(id) {
return $('#' + id + ' .tree-handler.selected');
}
function treeMultiSelectedControl(e) {
var $self = $(this),
id = $self.parents('.tree-inner').attr('id'),
value = '';
//remove other selection
var input = App.Dom.byId(id + '-value');
if (e.ctrlKey || e.metaKey) {
//unselected
if ($self.hasClass('selected')) {
$self.removeClass('selected');
//add selection
} else {
$self.addClass('selected');
}
$selectedTreeElem(id).each(function (index) {
if (index !== 0) {
value += ',';
}
value += this.getAttribute('data-val');
});
} else {
$selectedTreeElem(id).removeClass('selected');
value = this.getAttribute('data-val');
this.className += ' selected';
}
input.value = value;
$(input).trigger('change');
}
function scrollToSelectedBranch() {
setTimeout(function () {
$('.tree-wrapper .selected').each(function () {
var id = $(this).parents('.tree-wrapper').attr('id');
EventMgr.trigger('scrollTo', { id: id, offsetTop: this.offsetTop });
});
}, 100);
}
function resetHandler() {
var tabId = this.getAttribute('data-tabid'),
form = App.Dom.byId('frm-' + tabId);
form.reset();
}
function changeNovalueFieldHandler() {
if (this.getAttribute('data-novalue')) {
this.setAttribute('data-novalue', 'no');
if (this.placeholder) {
this.placeholder = '';
}
}
}
//submit form by ENTER keyup under text and password fields
function submitFormByEnter(e) {
e = e || window.event;
var codeKey = e.which || e.keyCode,
tabId;
if (codeKey === ENTERKEY) {
//sometime form submit native...
e.preventDefault();
var $self = $(this);
tabId = this.getAttribute('data-tabid');
$self.trigger('change');
$self.trigger('blur');
clickButtonTrigger(tabId);
}
}
//submit form by ENTER + CTRL under textarea, select, radio, checkbox
function submitFormByCtrlEnter(e) {
e = e || window.event;
var codeKey = e.which || e.keyCode,
tabId;
if (codeKey === ENTERKEY && (e.ctrlKey || e.metaKey)) {
e.preventDefault();
$(this).trigger('blur');
tabId = this.getAttribute('data-tabid');
clickButtonTrigger(tabId);
}
}
/**
* Ищем кнопку типа ok для отправки формы, сперва ищем дефлотную(default="yes"), затем (type=ok), (type=next), кнопку фильтра()
*/
function clickButtonTrigger(tabId) {
// ищем кнопку default, кнопку ok, потом первую попавшусю
var $defaultButton = $('#cont-' + tabId + ' .i-button_default_yes');
var $okButton = $('#cont-' + tabId + ' .b-button_act_ok');
var $nextButton = $('#cont-' + tabId + ' .b-button_act_next');
var $filterButton = $('#frm-' + tabId + ' .b-button__filter-set');
setTimeout(function () {
var $button;
if ($defaultButton[0]) {
$button = $defaultButton;
} else if ($okButton[0]) {
$button = $okButton;
} else if ($nextButton[0]) {
$button = $nextButton;
} else if ($filterButton) {
$button = $filterButton;
}
$button.first().trigger('click');
}, 1);
}
function loadPassList() {
var url,
data = getLocalStorage('mgr5-passwdlist'),
version = getLocalStorage('mgr5-passwd-ver'),
newVersion = false;
if (pageInfo.version !== version) {
setLocalStorage('mgr5-passwd-ver', pageInfo.version);
newVersion = true;
}
if (data && data !== '' && !newVersion) {
passwdlist = data;
} else {
url = '/manimg/common/passwd.list';
EventMgr.trigger('ajaxRequest', {
url: url, param: {}, trfunc: 'gotPasswdList',
outtype: 'html', type: 'get' });
}
}
function getLocalStorage(itemId) {
if (typeof localStorage !== 'undefined') {
return localStorage.getItem(itemId);
} else {
return false;
}
}
function setLocalStorage(itemId, data) {
if (typeof localStorage !== 'undefined') {
localStorage.setItem(itemId, data);
} else {
return false;
}
}
var passwdlist = '';
function gotPasswdListHandler(e, data) {
passwdlist = '\n' + data + '\n';
setLocalStorage('mgr5-passwdlist', passwdlist);
}
//The following function returns the logarithm of y with base x (ie. logx y):
function getBaseLog(x, y) {
return Math.log(y) / Math.log(x);
}
var passType = { 0: 'short', 1: 'weak', 2: 'good', 3: 'strong' };
function checkConfirmField(e) {
var self, tabId;
if (this.getAttribute('data-check-field')) {
tabId = this.getAttribute('data-tabid');
self = App.Dom.byId(this.getAttribute('data-check-field') + '-' + tabId);
} else {
self = this;
}
var confirmId = self.getAttribute('data-confirm-field'),
parentId = self.getAttribute('data-parent'),
confirmField = App.Dom.byId(confirmId),
messageElem = App.Dom.byId('check-confirm-' + parentId),
isChanged = false,
showConfirmMsg = false;
if (App.Dom.hasClass(messageElem, 'b-form-confirm-message_show_true')) {
showConfirmMsg = true;
}
if (!!confirmField && self.value !== confirmField.value) {
if (!showConfirmMsg) {
App.Dom.addClass(messageElem, 'b-form-confirm-message_show_true');
isChanged = true;
}
} else {
if (showConfirmMsg) {
App.Dom.removeClass(messageElem, 'b-form-confirm-message_show_true');
isChanged = true;
}
}
if (isChanged) {
EventMgr.trigger('updateScroll', { id: 'form-scroll-' + tabId });
}
}
function checkPass() {
var strength,
value = App.u.escapeRegExp($.trim(this.value)),
name = this.getAttribute('data-parent'),
regexp = new RegExp('\n' + value + '\n', 'i'),
tabId = this.getAttribute('data-tabid'),
id = 'checkpass-indicator-wrapper-' + name,
wr = App.Dom.byId(id),
isChanged = false;
if (wr) {
if (this.value !== '') {
if (passwdlist.match(regexp)) {
strength = 0;
} else {
strength = checkPassStrength(this.value);
}
if (wr.className !== passType[strength] + ' showed') {
wr.className = passType[strength] + ' showed';
isChanged = true;
}
} else {
if (wr.className !== '') {
wr.className = '';
isChanged = true;
}
}
}
if (isChanged) {
EventMgr.trigger('updateScroll', { id: 'form-scroll-' + tabId });
}
}
function checkPassStrength(value) {
var len = value.length,
str = value.split(''),
uniq = 0,
special = 0,
repeatTypes = 0,
varCase = 0,
symbArr = {},
strType = [],
ind,
i,
lvl = 0;
for (i = 0; i < len; i++) {
//count uniq symbols
if (!symbArr[str[i]]) {
uniq++;
}
symbArr[str[i]] = true;
//count special symbols
if (str[i].match(/[!@#$%^&*?_~{}"'()|\\+\[\]]\s/)) {
special++;
strType.push('sn');
//count lowcase
} else if (str[i].match(/[a-z]/)) {
strType.push('ll');
//count uppercase
} else if (str[i].match(/[A-Z]/)) {
strType.push('lu');
//count number
} else if (str[i].match(/\d/)) {
strType.push('dn');
//any cyrillic symbol = 2 special
} else {
special++;
special++;
strType.push('sn');
}
if (i !== 0) {
//check for repeat types symbol
if (strType[i].substr(0, 1) === strType[i - 1].substr(0, 1)) {
repeatTypes++;
}
//check for diffirent case
if (strType[i].substr(1, 1) !== strType[i - 1].substr(1, 1)) {
varCase++;
}
}
}
ind = (len + Math.sqrt(0.5 * special + varCase) - Math.sqrt(repeatTypes)) * getBaseLog(len, uniq);
if (ind < 3) {
lvl = 0;
//weak
} else if (ind >= 3 && ind < 6) {
lvl = 1;
//good
} else if (ind >= 6 && ind < 9) {
lvl = 2;
//hard
} else if (ind >= 9) {
lvl = 3;
} else {
lvl = 0;
}
return lvl;
}
//handler for level up link
function levelUp(e) {
e.preventDefault();
var exp = this.getAttribute('data-level'),
tabId = getActiveTabId(),
form = $('#frm-' + tabId),
param = form.serializeObject(),
$mixedContols = form.find('.i-control-mixed');
param.userexperience = exp;
if ($mixedContols.length !== 0) {
param = App.u.removeParam($mixedContols, param);
}
if (param.snext) {
delete param.snext;
}
if (param.sback) {
delete param.sback;
}
EventMgr.trigger('reloadTab', { tabId: tabId, param: param });
}
function nestedReportHandler(e) {
e.preventDefault();
var elid = this.getAttribute('data-elid'),
$self = $(this),
index = $self.parents('td').index(),
th = $self.parents('table').find('th')[index],
colname = th.getAttribute('data-colname'),
nested = th.getAttribute('data-nestedreport'),
parent = getActiveTabId(),
plid = App.Dom.byId(parent + '-plid'),
form = $('#frm-' + parent),
param = form.serializeObject();
elid = elid || $self.find('.b-list__table-col-content').first().html();
param.func = nested;
param.elid = elid;
param.colname = colname;
if (plid !== null) {
param.plid = plid.value;
}
EventMgr.trigger('ajaxRequest', {
param: param,
invar: { parent: parent },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
queue: 'nested-' + parent,
failfunc: 'failCommonAjaxResponse' });
EventMgr.trigger('tabLoading', { tabId: parent });
}
var isIE = '\v' === 'v';
function scrollToFormRow($focusedField, tabId, animate) {
setTimeout(function () {
var formRow = $focusedField.closest('.l-form__row'),
offsetTop = formRow[0] ? formRow[0].offsetTop : 0,
$page = $focusedField.closest('.b-form-page'),
formScrollEl = App.Dom.byId('form-scroll-' + tabId),
heightViewPort = formScrollEl ? parseInt(formScrollEl.style.height, 10) : 0;
if ($page[0]) {
offsetTop += $page[0].offsetTop;
}
EventMgr.trigger('scrollTo', {
id: 'form-scroll-' + tabId,
offsetTop: offsetTop,
animate: animate });
}, 100);
}
function focusOnErrorField(e, data) {
var $focusField = $('.row-error .b-input, .row-error .b-textarea, .row-error .b-checkbox__control'),
tabId = data.tabId,
$page;
if ($focusField.length > 0) {
$page = $focusField.closest('.b-form-page');
if ($page.hasClass('b-form-page_st_collapsed')) {
$page.find('.i-form-page__title').trigger('click');
}
$focusField.focus();
scrollToFormRow($focusField, tabId, true);
}
}
function setFocus(e, data) {
if (isIE || window.pageInfo.mobile) {
return;
}
var tabId = data.tabId,
form = document.getElementById('frm-' + tabId);
if (form === null) {
return;
}
var len = form.length,
elem = null,
curElem,
name,
r1,
readonly,
forceFocused = $('#form-wrapper-' + tabId + ' .b-form__focus-field');
//force focused field by attr focus="yes"
if (forceFocused.length > 0) {
forceFocused.focus();
scrollToFormRow(forceFocused, tabId, false);
return;
}
//find out accessable field
for (var i = 0; i < len; i++) {
elem = form[i];
//for select
if (elem.type === 'hidden' && elem.getAttribute('data-type') === 'select') {
curElem = $(elem).parent();
if (!curElem.hasClass('readonly') && curElem.width() !== 0) {
name = elem.getAttribute('name');
$('#_' + name + '-' + tabId + ' .b-myselect__select-value').focus();
window.scrollToTopLeft();
return;
}
//for radio
} else if (elem.type === 'hidden' && elem.getAttribute('data-type') === 'radio') {
curElem = $(elem).parent();
if (!curElem.hasClass('readonly') && curElem.width() !== 0) {
name = elem.getAttribute('name');
$('.tab-content_st_active div[data-id="' + name + '"][tabindex="0"]').focus();
window.scrollToTopLeft();
return;
}
} else if (elem.type === 'hidden' && elem.getAttribute('data-type') === 'checkbox') {
name = elem.getAttribute('name');
$('#' + tabId + '-' + name).focus();
window.scrollToTopLeft();
return;
}
r1 = elem.getAttribute('readonly');
readonly = r1 !== null;
if (elem.type !== 'hidden' && !readonly && elem.offsetWidth !== 0) {
elem.focus();
window.scrollToTopLeft();
return;
}
}
form = null;
elem = null;
}
function AttrIsSupported(element, attr) {
var elem = document.createElement(element);
return attr in elem;
}
/**
* forceSetValues
* @param {object} e event object
* @param {object} data object with data
*/
function forceSetValues(e, data) {
var tabId = data.tabId,
url = pageInfo.url,
name = data.name,
params = $('#frm-' + tabId).serializeObject();
/* jslint camelcase:false */
params.sv_field = name;
/* jslint camelcase:true */
EventMgr.trigger('ajaxRequest', {
url: url,
param: params,
trfunc: 'formSetValues',
invar: { tabId: tabId },
type: 'get',
outtype: 'json',
queue: 'multiload' });
}
/**
* Callback setvalues field changed
* send request for new values
* @param {object} e event object
* @param {boolean} sv setvalues once flag
* @return {boolean}
* @this {object} HTML node
*/
var lastTargetElemId = 'default_value';
function setValueHandler(e, sv, srcId) {
var self = this;
setTimeout(function () {
EventMgr.trigger('preSetValues', [self, 100]);
//check for loop
var elemId = self.getAttribute('id'),
$self = $(self),
flags = $self.getFlags();
if ($self.hasClass('b-textarea_for_zoom')) {
return true;
}
if (lastTargetElemId === srcId) {
return true;
}
lastTargetElemId = elemId;
//check for setvalues once
if (sv) {
return true;
}
//var tabId = $activeTab().attr('data-tabid'),
var tabId = self.getAttribute('data-tabid'),
$form = $('#frm-' + tabId),
params = $form.serializeObject(),
addParams = {},
url = pageInfo.url,
once = App.Dom.hasClass(self.parentNode, 'sv_nochange'),
blocking = App.Dom.hasClass(self.parentNode, 'sv_blocking') || flags.blocking,
name = self.getAttribute('data-name') ? self.getAttribute('data-name') : self.name,
id = self.getAttribute('data-id'),
isShowcaseForm = $form.hasClass('b-form_showcase_yes'),
hasFile = $form.hasClass('withfiles'),
skipFile = App.Dom.hasClass(self.parentNode, 'sv_skipfiles'),
$noSetValues = $form.find('.i-nosetvalues');
if ($noSetValues.length !== 0) {
params = App.u.removeParam($noSetValues, params);
}
//check for button id
if (id && id !== 'undefined') {
id = id.split('=', 2);
if (id[1]) {
params[id[0]] = id[1];
addParams[id[0]] = id[1];
}
}
/* jshint camelcase: false */
params.sv_field = name;
var options = {
url: url,
param: params,
failfunc: 'failFormAjaxResponse',
trfunc: 'formSetValues',
invar: { tabId: tabId, once: once, blocking: blocking },
type: 'post',
outtype: 'json',
queue: 'multiload' };
//if form has input@type=file
if (hasFile && !skipFile) {
/* jshint camelcase: false */
options.invar.blocking = true;
addParams.sv_field = name;
addParams.sfrom = 'ajax';
EventMgr.trigger('setBrandSettings', {
options: options,
tabId: tabId,
param: params,
addParams: addParams
});
} else {
/* jslint camelcase:true */
EventMgr.trigger('ajaxRequest', options);
if (blocking) {
EventMgr.trigger('tabLoading', { tabId: tabId });
}
}
}, 0);
}
/**
* Проверяем на изменение значения мультиселекта
*/
function isMultiSelectValuesChanged(stringVal, arrVal) {
//check for empty value - only slist rerender
if (arrVal === '') {
return true;
}
if (typeof stringVal === 'string') {
if (typeof arrVal === 'string') {
arrVal = arrVal.split(',');
} else if (typeof arrVal.join !== 'function') {
return false;
}
var oldValues = stringVal.split(','),
l = oldValues.length;
oldValues.sort();
arrVal.sort();
if (oldValues.length !== arrVal.length) {
return true;
}
while (l--) {
if (oldValues[l] !== arrVal[l]) {
return true;
}
}
return false;
}
return false;
}
/**
* Setvalues handler
* change values in fields from response
* @param {object} e event object
* @param {object} data object with data
**/
function formSetValues(e, data) {
//check for auth
if (data.ok && data.reload) {
window.location.reload();
}
var tabId = data.tabId,
form = App.Dom.byId('frm-' + tabId),
once = data.once,
blocking = data.blocking,
readonlyArray = [];
if (blocking) {
EventMgr.trigger('tabLoadingHide', { tabId: tabId });
}
if (form === null || data.error) {
return;
}
var setvalues = data.setvalues,
elem = '',
keyVar,
tagName,
value,
changed,
dType,
type,
liAct,
elemId;
if ((typeof setvalues === 'undefined' ? 'undefined' : _typeof(setvalues)) === 'object') {
/* jslint forin:true */
for (keyVar in setvalues) {
elem = form.elements[keyVar];
//check for bad words
if (keyVar === 'item' || keyVar === 'length') {
continue;
}
if (elem) {
tagName = elem.tagName;
value = setvalues[keyVar];
changed = true;
if (value === null) {
continue;
}
if (tagName === 'INPUT') {
type = elem.getAttribute('type');
if (elem.value !== value) {
//input@type=text
if (type === 'text' || type === 'password') {
changed = elem.value !== value.value;
elem.value = value.value;
if (value.prefix) {
var $prefixNode = $(elem).parent().find('.i-input__prefix');
if ($prefixNode.length) {
$prefixNode.html(value.prefix);
EventMgr.trigger('upPrefixField', { tabId: tabId });
}
}
//slider logic
if (value.min !== undefined || value.max !== undefined || value.step !== undefined) {
var id = elem.id,
$sliderNode = $('#' + id + '-slider');
if (value.min !== undefined) {
$sliderNode.attr('data-min', value.min);
}
if (value.max !== undefined) {
$sliderNode.attr('data-max', value.max);
}
if (value.step !== undefined) {
$sliderNode.attr('data-step', value.step);
}
EventMgr.trigger('reloadSlider', { tabId: tabId });
}
//mask logic
if (value.mask !== undefined) {
EventMgr.trigger('inputMaskChangeBySetvalues', { elem: elem, mask: value.mask, value: value.value });
}
} else if (type === 'file') {
//reset file value
if (value.value === '') {
var $elem = $(elem);
$elem.replaceWith($elem.val('').clone(true));
$(form.elements[keyVar]).trigger('change');
}
} else if (type === 'hidden') {
// #17927 setvalues[keyVar].slist
changed = elem.value !== value.value || setvalues[keyVar].slist;
if (changed) {
elemId = elem.getAttribute('id');
dType = elem.getAttribute('data-type');
//select
if (dType === 'select') {
//replace slist values
if (value.slist) {
$('ul#' + tabId + '-' + elem.name).html(renderSlistElem(setvalues[keyVar].slist));
//clean slist cache for searching
EventMgr.trigger('cleanSlistCache', {
tabId: tabId,
id: tabId + '-' + elem.name });
//check for search in list
if (setvalues[keyVar].slist && setvalues[keyVar].slist.length > 10) {
var $mySelect = $('#_' + elem.name + '-' + tabId);
if (!$mySelect.hasClass('sb-select')) {
$mySelect.addClass('sb-select');
}
}
EventMgr.trigger('forceDepend', { tabId: tabId });
if (setvalues[keyVar].slist && setvalues[keyVar].slist.length !== 0) {
//set active item
if (setvalues[keyVar].value !== '') {
liAct = $('#' + tabId + '-' + keyVar + ' li[data-val="' + setvalues[keyVar].value + '"]');
} else {
liAct = $('#' + tabId + '-' + keyVar + ' li[data-val="' + elem.value + '"]');
if (liAct.length === 0) {
liAct = $('ul#' + tabId + '-' + elem.name + ' li:first');
}
}
} else {
//set null msg
$('#_' + keyVar + '-' + tabId + ' .b-myselect__select-value').html(setvalues.nullmsg);
}
} else {
// case without slist
//set active item
liAct = $('#' + tabId + '-' + keyVar + ' li[data-val="' + value.value + '"]');
}
//set value for select
if (liAct.length > 0) {
var $selectElem = $('#_' + keyVar + '-' + tabId),
isReadonly = $selectElem.hasClass('readonly');
//check for readonly
if (isReadonly) {
$selectElem.removeClass('readonly');
}
liAct.trigger('click', [once, elemId]);
if (isReadonly) {
$selectElem.addClass('readonly');
}
}
//radio
} else if (dType === 'radio') {
if (value.slist && App.Tabs.tabs[tabId] && App.Tabs.tabs[tabId].formSource && App.Tabs.tabs[tabId].formSource[keyVar]) {
var sourceElem = App.Tabs.tabs[tabId].formSource[keyVar],
radioHtml = '';
sourceElem.slist = value.slist;
if (value.value) {
sourceElem.value = value.value;
//set first value
} else if (sourceElem.slist[0]) {
sourceElem.value = sourceElem.slist[0].key;
}
radioHtml = templates.formItemRadio(sourceElem);
$('#' + tabId + '-' + keyVar + '-radio').replaceWith(radioHtml);
}
if (!value.slist) {
$('#' + 'frm-' + tabId + ' .' + keyVar + '-' + tabId + '-' + window.hash(value.value)).trigger('click', [once, elemId]);
}
// checkbox
} else if (dType === 'checkbox') {
$('#' + tabId + '-' + keyVar).trigger('click', [[once, true]]);
// multiselect
} else if (dType === 'multiple') {
// replace value.value with value
var mvalue = value.value !== undefined ? value.value : value;
changed = isMultiSelectValuesChanged(elem.value, mvalue);
// вызываем при изменение значений или наличие slist
if (changed || value.slist) {
var id = elem.getAttribute('data-id');
EventMgr.trigger('selectValues', {
id: id, sElems: setvalues[keyVar] });
}
// input@type=hidden
} else if (dType === 'tree') {
$('#' + keyVar + '-' + tabId + ' li[data-val="' + setvalues[keyVar].value + '"]').trigger('click', [once, true]);
} else {
elem.value = value.value;
}
}
}
if (changed) {
elemId = elem.getAttribute('id');
$(elem).trigger('change', [once, elemId]);
}
}
} else {
changed = elem.value !== value.value;
elem.value = value.value;
if (changed) {
elemId = elem.getAttribute('id');
$(elem).trigger('change', [once, elemId]);
if (elem.classList && elem.classList.contains('b-text-editor')) {
EventMgr.trigger('TinyMCE_setContent', { content: elem.value, id: elemId });
}
}
}
//set readonly
if (value.readonly) {
var readonly = value.readonly === 'yes';
//changeReadOnly($(elem).closest('.l-form__row'), readonly);
//add to array and set after all
readonlyArray.push({ elem: elem, readonly: readonly });
}
} else {
//textdata
elem = App.Dom.byId(tabId + '-' + keyVar);
if (elem) {
type = elem.getAttribute('data-type');
if (type === 'img') {
elem.src = setvalues[keyVar].value;
//ticket
} else if (type === 'ticket') {
var newTicketHtml = templates.formItemTicketMsg(setvalues[keyVar]);
if (newTicketHtml) {
$(newTicketHtml).appendTo(elem);
}
// EventMgr.trigger('setFocus', { tabId: tabId });
//list
} else if (type === 'list') {
setvalues[keyVar].id = tabId;
setvalues[keyVar].type = 'form';
if (setvalues[keyVar].view === 'blocklist') {
elem.innerHTML = templates.formListBlocksContent(setvalues[keyVar]);
} else {
elem.innerHTML = templates.formListContent(setvalues[keyVar]);
}
} else if (type === 'listfilter') {
setvalues[keyVar].id = tabId;
elem.innerHTML = templates.formListFilter(setvalues[keyVar]);
//buttons
} else if (type === 'buttons') {
var buttons = setvalues[keyVar],
l = setvalues[keyVar].length;
for (var i = 0; i < l; i++) {
//check for same buttons
if (data.__formModel && data.__formModel.__buttons[i] && buttons[i].name !== data.__formModel.__buttons[i].name) {
var parent = $('#' + tabId + '-buttons .b-button').first().attr('data-parent');
elem.innerHTML = templates.buttons({
buttons: buttons,
id: tabId,
parent: parent,
type: 'form',
cancelBtnClass: ''
});
//update form model
EventMgr.trigger('updateModel', {
tabId: tabId,
name: '__buttons',
value: buttons
});
break;
}
}
if (l === 0) {
elem.innerHTML = '';
//update form model
EventMgr.trigger('updateModel', {
tabId: tabId,
name: '__buttons',
value: buttons
});
}
} else if (type === 'link') {
//unescape & -> &
var hrefLink = String(setvalues[keyVar].value).replace(/&/g, '&');
elem.href = hrefLink;
elem.setAttribute('data-url', App.u.escapeQuote(hrefLink));
} else if (type === 'datetime') {
var d = App.u.parseDate(setvalues[keyVar].value),
dt = new Date().getTime() - d.getTime();
elem.setAttribute('data-difftime', dt);
} else if (type === 'textdata') {
elem = App.Dom.byId(tabId + '-' + keyVar + '-inner');
elem.innerHTML = window.htmlDecode(setvalues[keyVar].value);
// EventMgr.trigger('updateScroll', { id: tabId + '-' + keyVar });
} else {
elem.innerHTML = window.htmlDecode(setvalues[keyVar].value);
}
EventMgr.trigger('updateScroll', { id: 'form-scroll-' + tabId });
} else {
//for frame
elem = App.Dom.byId(keyVar + '-' + tabId);
if (elem && elem.getAttribute('data-type') === 'frame') {
elem.setAttribute('src', setvalues[keyVar].value);
}
}
}
}
}
//set readonly
for (var i = 0, l = readonlyArray.length; i < l; i++) {
App.FormUtils.changeReadOnly($(readonlyArray[i].elem).closest('.l-form__row'), readonlyArray[i].readonly);
}
EventMgr.trigger('setValuesDone', { tabId: tabId });
}
function renderSlistElem(elems) {
var elemHTML = templates.formItemSelectList({ slist: elems, value: '' });
return elemHTML;
}
//remove space and insert line break when press SPACE in zoom field
function addLineBreakToZoomField(e) {
var codeKey = e.which || e.keyCode;
if (codeKey === SPACE) {
e.preventDefault();
var allText = this.value,
currentPos = getCaret(this),
beforeText = allText.substr(0, currentPos),
afterText = allText.substr(currentPos);
this.value = beforeText.replace(/((\s*\S+)*)\s*/, '$1') + '\n' + afterText.replace(/((\s*\S+)*)\s*/, '$1');
setCaretPosition(this, beforeText.length);
}
}
//from
// http://stackoverflow.com/questions/11779140/how-to-push-cursor-to-the-next-line-when-user-hits-ctrl-enter
function getCaret(el) {
if (el.selectionStart) {
return el.selectionStart;
} else if (document.selection) {
el.focus();
var r = document.selection.createRange();
if (r === null) {
return 0;
}
var re = el.createTextRange(),
rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
return rc.text.length;
}
return 0;
}
function setCaretPosition(elem, caretPos) {
if (elem !== null) {
if (elem.createTextRange) {
var range = elem.createTextRange();
range.move('character', caretPos);
range.select();
} else {
if (elem.selectionStart) {
elem.focus();
elem.setSelectionRange(caretPos, caretPos);
} else {
elem.focus();
}
}
}
}
//sync value zoom textarea and input
function syncZoomValue(e) {
var self = $(this),
controlField = self.attr('data-control-field'),
tabId = $activeTab().attr('data-tabid'),
input = $('#cont-' + tabId + ' input[name="' + controlField + '"],' + ' #editinlist-wrapper-' + tabId + ' input[name="' + controlField + '"]'),
value = self.val().replace(/\n+/g, ' ').replace(/(^\s*|\s*$)/g, '').replace(/\s+/g, ' ');
input.val(value).trigger('change');
}
function syncInputWithZoom(e, data) {
var tabId = data.tabId,
input = data.self,
controlField,
textarea,
value;
if (input && App.Dom.hasClass(input, 'testzoom')) {
controlField = input.name;
textarea = $('#cont-' + tabId + ' .b-textarea[name="zoom-' + controlField + '"],' + ' #editinlist-wrapper-' + tabId + ' .b-textarea[name="zoom-' + controlField + '"]');
value = input.value.replace(/(^\s*|\s*$)/g, '').replace(/\s+/g, '\n');
if (textarea.length > 0) {
textarea[0].value = value;
}
}
}
//calendar handler
function calendarHandler(e) {
var self = $(this),
calendarFieldName = self.attr('data-control-field'),
type = self.attr('data-type'),
activeTab = $activeTab().attr('data-tabid'),
calendarField = App.Dom.byId(calendarFieldName + '-' + activeTab),
syncFieldName,
syncField;
if (calendarField) {
syncFieldName = calendarField.getAttribute('data-syncfield');
if (syncFieldName) {
syncField = App.Dom.byId(syncFieldName + '-' + activeTab);
}
}
//not good
if (calendarField !== null) {
if (type === 'month') {
App.Calendar.showMonth(calendarField, syncField, e);
} else {
App.Calendar.show(calendarField, syncField, e);
}
}
}
//zoom handler
function zoomHandler() {
var self = $(this),
controlField = self.attr('data-control-field'),
row = self.parents('.l-form__row'),
tabId = $activeTab().attr('data-tabid'),
input = $('#cont-' + tabId + ' input[name="' + controlField + '"],' + ' #editinlist-wrapper-' + tabId + ' input[name="' + controlField + '"]'),
textarea = $('#cont-' + tabId + ' .b-textarea[name="zoom-' + controlField + '"],' + ' #editinlist-wrapper-' + tabId + ' .b-textarea[name="zoom-' + controlField + '"]'),
value;
if (row.hasClass('zoom')) {
//state = 'zoom';
row.removeClass('zoom');
value = textarea[0].value.replace(/\n+/g, ' ').replace(/(^\s*|\s*$)/g, '').replace(/\s+/g, ' ');
input.val(value);
} else {
// state = 'unzoom';
row.addClass('zoom');
value = input.val().replace(/(^\s*|\s*$)/g, '').replace(/\s+/g, '\n');
textarea[0].value = value;
}
EventMgr.trigger('updFormHeight', { tabId: tabId });
EventMgr.trigger('updateFixedField', { tabId: tabId });
}
//toggle password field type text/password
function showPassword() {
var pwdFieldName = this.getAttribute('data-control-field'),
tabId = this.getAttribute('data-tabid'),
pwdField = App.Dom.byId(pwdFieldName + '-' + tabId);
if (pwdField) {
var type = pwdField.getAttribute('type');
if (type === 'text') {
pwdField.setAttribute('type', 'password');
$(this).removeClass('b-input-btn_pwd_liketext');
} else if (type === 'password') {
pwdField.setAttribute('type', 'text');
$(this).addClass('b-input-btn_pwd_liketext');
}
}
}
function fakePasswdCopy() {
var parentId = this.getAttribute('data-parent'),
parent = App.Dom.byId(parentId);
if (parent !== null) {
parent.value = this.value;
$(parent).trigger('change');
}
}
//password generation
function genPassword() {
var pwdFieldName = this.getAttribute('data-control-field'),
pwdField = $('.tab-content_st_active input[name="' + pwdFieldName + '"]'),
current = pwdField.val(),
confFieldName = pwdField.attr('data-check-field'),
pwdLen = pageInfo.pwgenlen || 8,
pwdChar = pageInfo.pwgencharacters || '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
confField = $('.tab-content_st_active' + ' input[name="' + confFieldName + '"][type="password"]'),
n = 0,
rn,
nnn = 0,
tabId = $activeTab().attr('data-tabid'),
pwdFake,
confirmFake;
if (pwdField.attr('readonly')) {
return;
}
if (pwdFieldName) {
$('.b-input-btn_type_showpwd[data-control-field="' + pwdFieldName + '"]').remove();
}
pwdFake = App.Dom.byId(pwdFieldName + '-' + tabId + '-fake');
confirmFake = App.Dom.byId(confFieldName + '-' + tabId + '-fake');
if (pwdFake && pwdFake.offsetWidth === 0) {
pwdFake.style.display = 'block';
if (confirmFake) {
confirmFake.style.display = 'block';
}
pwdField.hide();
if (confField) {
confField.hide();
}
}
var lowerCase = pwdChar.match(/[a-z]/g),
upperCase = pwdChar.match(/[A-Z]/g),
number = pwdChar.match(/\d/g),
special = pwdChar.match(/[!,@,#,$,%,^,&,*,?,_,~]/g),
pwgenchar = {},
typesPull = [],
i,
nn = 0,
letters = 0;
if (lowerCase || upperCase) {
nn++;
typesPull.push('l');
}
if (lowerCase) {
lowerCase = lowerCase.join('');
if (!upperCase) {
pwgenchar.l = lowerCase;
} else {
pwgenchar.lc = lowerCase;
}
letters++;
}
if (upperCase) {
upperCase = upperCase.join('');
if (!lowerCase) {
pwgenchar.l = upperCase;
} else {
pwgenchar.uc = upperCase;
}
letters++;
}
if (number) {
number = number.join('');
pwgenchar.d = number;
typesPull.push('d');
nn++;
}
if (special) {
special = special.join('');
pwgenchar.s = special;
typesPull.push('s');
nn++;
}
for (i = 0; i < pwdLen - nn; i++) {
if (nnn === nn) {
nnn = 0;
}
typesPull.push(typesPull[nnn]);
nnn++;
}
rn = Math.floor(Math.random() * pwdLen + 1) % nn;
typesPull = shiftArray(typesPull, rn);
var elemObj = {
passwdField: pwdField,
confirmField: confField,
passwdFake: pwdFake,
confirmFake: confirmFake,
pwdLen: pwdLen,
//pwdChar : pwdChar,
typesPull: typesPull,
pwgenchar: pwgenchar,
letters: letters
};
genPasswd(current, n, elemObj, 'lc');
}
//last to one
function shiftArray(arr, n) {
var elem,
len = arr.length - 1;
while (n--) {
elem = arr[0];
arr.splice(0, 1);
arr[len] = elem;
}
return arr;
}
function genPasswd(current, n, elemObj, prevCase) {
current = current.substr(0, n);
var pwd = '',
curCase = prevCase,
curType,
typesPull = elemObj.typesPull,
pwgenchar = elemObj.pwgenchar,
letters = elemObj.letters;
for (var i = n; i < elemObj.pwdLen; i++) {
curType = typesPull[i];
if (curType === 'l' && letters === 2) {
if (curCase === 'lc') {
curCase = 'uc';
} else {
curCase = 'lc';
}
curType = curCase;
if (i === n) {
prevCase = curCase;
}
}
pwd += pwgenchar[curType].substr(Math.floor(Math.random() * pwgenchar[curType].length), 1);
}
n++;
current += pwd;
elemObj.passwdField.val(current);
elemObj.confirmField.val(current);
elemObj.passwdFake.value = current;
if (elemObj.confirmFake) {
setTimeout(function () {
elemObj.confirmFake.value = current;
}, 1);
}
if (n < elemObj.pwdLen) {
setTimeout(function () {
genPasswd(current, n, elemObj, prevCase);
}, 35);
} else {
$(elemObj.passwdField).trigger('change');
$(elemObj.passwdFake).trigger('change');
$(elemObj.confirmField).trigger('change');
}
}
function getActiveTabId() {
return $('.tab-content_st_active').attr('data-tabid') || false;
}
var UPKEY = 38,
DOWNKEY = 40,
LEFTKEY = 37,
RIGHTKEY = 39,
ENTERKEY = 13,
TABKEY = 9,
ESCKEY = 27,
SPACE = 32;
//trigger click if ENTER||SPACE KEYDOWN by element
function formBtnKeyDownHandler(e) {
e = e || window.event;
var codeKey = e.which || e.keyCode;
if (codeKey === ENTERKEY || codeKey === SPACE) {
e.preventDefault();
$(this).trigger('click');
}
}
function radioBtnKeyDownHandler(e) {
e = e || window.event;
var codeKey = e.which || e.keyCode,
name,
id,
tabId,
radios;
if (codeKey === UPKEY && !e.ctrlKey) {
e.preventDefault();
name = this.getAttribute('data-id');
id = this.getAttribute('data-handler-val');
radios = $(this).closest('.b-radio').find('div[data-id="' + name + '"]');
var prev = null;
radios.each(function () {
var curId = this.getAttribute('data-handler-val');
if (curId === id && prev !== null) {
this.setAttribute('tabindex', '');
prev.setAttribute('tabindex', '0');
changeRadioValue.apply(prev);
prev.focus();
window.scrollToTopLeft();
return false;
}
prev = this;
});
} else if (codeKey === DOWNKEY && !e.ctrlKey) {
e.preventDefault();
name = this.getAttribute('data-id');
id = this.getAttribute('data-handler-val');
radios = $(this).closest('.b-radio').find('div[data-id="' + name + '"]');
var next = false;
radios.each(function () {
if (next) {
this.setAttribute('tabindex', '0');
changeRadioValue.apply(this);
this.focus();
return false;
}
var curId = this.getAttribute('data-handler-val');
if (curId === id) {
this.setAttribute('tabindex', '');
next = true;
}
});
}
}
function radioLabelClickHandler() {
var rClass = this.getAttribute('data-r-class'),
targetElem = $('.' + rClass);
targetElem.trigger('click');
}
function checkboxDescClickHandler(e, sv) {
var tabId = this.getAttribute('data-tabid'),
id = this.getAttribute('data-id'),
targetElem = $('.b-checkbox__control[data-tabid="' + tabId + '"]' + '[data-id="' + id + '"]');
targetElem.trigger('click', [sv]);
}
//set radio value
function changeRadioValue(e, sv) {
var self = $(this),
id = this.getAttribute('data-id'),
val = this.getAttribute('data-val'),
handlerVal = this.getAttribute('data-handler-val');
if (self.hasClass('checked')) {
return false;
} else {
$('.' + id).removeClass('checked').attr('tabindex', '');
self.addClass('checked');
this.setAttribute('tabindex', '0');
this.focus();
$('#' + id).val(val).attr('data-handler-val', handlerVal).trigger('change', [sv]);
}
}
/**
* Callback checkbox click event
* check/uncheck checkbox
* @param {object} e event object
* @param {boolean} setvalues flag once
* @return {boolean}
* @this {object} HTML node
*/
function changeCheckboxValue(e, param) {
var $self = $(this),
id = this.getAttribute('data-id'),
elem;
param = param || [];
if ($self.hasClass('readonly') && !param[1]) {
return false;
}
if ($self.hasClass('checked')) {
$self.removeClass('checked');
elem = $('input[name=' + id + ']').val('off').attr('data-handler-val', hash('off'));
} else {
$self.addClass('checked');
elem = $('input[name=' + id + ']').val('on').attr('data-handler-val', hash('on'));
}
elem.trigger('change', [param[0]]);
}
function collapsedForm(e) {
//dangerously
var TIMEOUT = 300;
e = e || window.event;
//check for dashboard block reload click
if (e && e.target) {
if ($(e.target).hasClass('dashblock-reload')) {
return;
}
}
if (!App.Global.HeaderMoving) {
var self = $(this),
parent = self.parent(),
elemSlide = parent.next(),
elemParent = parent.parent(),
tabId = elemParent.attr('data-tabid'),
name = parent.attr('data-name'),
type = parent.attr('data-type'),
$stateElem = parent.find('.b-triangle'),
collapsed = elemParent.hasClass('b-form-page_st_collapsed');
if (collapsed) {
elemSlide.slideDown(TIMEOUT);
elemParent.removeClass('b-form-page_st_collapsed');
$stateElem.attr('data-state', 'expanded');
} else {
elemSlide.slideUp(TIMEOUT);
$stateElem.attr('data-state', 'collapsed');
setTimeout(function () {
elemParent.addClass('b-form-page_st_collapsed');
elemParent = null;
}, TIMEOUT - 20);
}
//form page
if (type !== 'dashboard-block') {
EventMgr.trigger('saveFormPageState', {
tabId: tabId,
name: name,
collapsed: collapsed
});
setTimeout(function () {
EventMgr.trigger('updFormHeight', { tabId: tabId });
EventMgr.trigger('updateScroll', {});
tabId = null;
}, TIMEOUT);
} else {
//dashboard block
setTimeout(function () {
EventMgr.trigger('updateScroll', {});
}, TIMEOUT);
var position = self.parents('.b-dashboard_cell').attr('data-pos'),
display = collapsed ? 'max' : 'min',
block = self.parent().attr('data-name');
var param = {
func: 'dashboard.save', out: 'xml',
block: block, display: display, position: position };
var url = pageInfo.url;
EventMgr.trigger('ajaxRequest', {
url: url, param: param,
trfunc: 'DoNothing', queue: 'noqueue' });
if (!collapsed) {
setTimeout(function () {
EventMgr.trigger('updateScroll', {});
}, TIMEOUT);
} else {
setTimeout(function () {
EventMgr.trigger('updateScroll', {});
EventMgr.trigger('upDashTableList', { tabId: 'block-' + block });
block = null;
}, 10);
}
}
} else {
App.Global.HeaderMoving = false;
}
e.preventDefault();
}
function insertUnlimValue() {
var parId = this.getAttribute('data-control-field'),
tabId = getActiveTabId(),
parentEl = App.Dom.byId(parId + '-' + tabId),
value = parentEl.getAttribute('data-unlimit');
if (parentEl !== null) {
parentEl.value = value;
//for setvalues
$(parentEl).trigger('change');
}
}
function changeElHandler(e) {
var showAttr = this.getAttribute('show'),
show = showAttr.split(','),
len = show.length,
checked = this.getAttribute('checked'),
className = 'hideEl';
while (len--) {
$('formItem' + show[len]).toggleClass(className);
}
}
//hide/show depend items in select and radio
function dependSlistHandler(e) {
var value = this.value,
name = this.getAttribute('name'),
type = this.getAttribute('data-type'),
tabId = this.getAttribute('data-tabid'),
elem,
selectElem,
showElem;
//hide select options
$('#frm-' + tabId + ' div[data-depend="' + name + '"] .dependelem.b-myselect__select-li_show_yes').removeClass('b-myselect__select-li_show_yes');
$('#frm-' + tabId + ' div[data-depend="' + name + '"] .dependelem[data-dependkey="' + value + '"]').addClass('b-myselect__select-li_show_yes');
//uncheck radio
selectElem = $('#frm-' + tabId + ' div[data-depend="' + name + '"] .b-myselect__select-li_show_yes .b-radio__control.checked');
if (selectElem.length === 0) {
$('#frm-' + tabId + ' div[data-depend="' + name + '"] .b-radio__control').removeClass('checked');
elem = $('#frm-' + tabId + ' div[data-depend="' + name + '"] .b-myselect__select-li_show_yes .b-radio__control')[0];
if (elem) {
changeRadioValue.apply(elem);
}
}
//check for more one depend select
var $dependSelect = $('#frm-' + tabId + ' div[data-depend="' + name + '"]');
if ($dependSelect.length > 1) {
$dependSelect.each(function () {
var showElem = $(this).find('.dependelem[data-dependkey="' + value + '"].b-myselect__select-li_show_yes');
dependSelectCheckForOprion(showElem, name, tabId, $(this));
});
} else {
//unselect option
showElem = $('#frm-' + tabId + ' div[data-depend="' + name + '"] ' + 'li.dependelem[data-dependkey="' + value + '"].b-myselect__select-li_show_yes');
dependSelectCheckForOprion(showElem, name, tabId);
}
//unselect multiselect
if ($dependSelect.length) {
$dependSelect.each(function () {
if (appDom.hasClass(this, 'b-mselect')) {
EventMgr.trigger('mselectUnselectByDepend', { self: this });
}
});
}
EventMgr.trigger('updateScroll', { id: 'form-scroll-' + tabId });
}
/**
* Проверяем на наличия опций у зависимого селекта, если их нет скрываем поле
*/
function dependSelectCheckForOprion(showElem, name, tabId, $self) {
var $elem = $self || $('#frm-' + tabId + ' div[data-depend="' + name + '"]');
if (showElem.length === 0) {
$elem.closest('.l-form__row').css('display', 'none');
} else {
$elem.closest('.l-form__row').css('display', '');
}
}
//show depend items in append form
function firstDependSlistHandler(e, data) {
var tabId = data.tabId;
$('#cont-' + tabId + ' tr:not(".row-error") .depend.b-myselect ' + 'input[type="hidden"],' + ' #cont-' + tabId + ' .depend.b-radio input[type="hidden"],' + ' #cont-' + tabId + ' .depend.b-select-ac input[type="hidden"]').each(function () {
dependSlistHandler.apply(this);
});
EventMgr.trigger('updFormHeight', { tabId: tabId });
EventMgr.trigger('reloadSlider', { tabId: tabId });
}
function bandShowHandler(e) {
var id = this.getAttribute('data-id'),
self = $(this),
toggleClass = 'data-table-hidden';
if (self.hasClass(toggleClass)) {
self.removeClass(toggleClass);
$('#' + id).slideDown(300);
} else {
self.addClass(toggleClass);
$('#' + id).slideUp(300);
}
setTimeout(function () {
EventMgr.trigger('updateScroll', {});
}, 350);
}
/**
* setUp padding for input with prefix
* @param {object} e
* @param {object} data
*/
function prefixFieldSetUp(e, data) {
var tabId = data.tabId;
setTimeout(function () {
$('#cont-' + tabId + ' .i-input__prefix').each(function () {
var elemWidth = this.offsetWidth,
input = App.Common.getPreviousNode(this),
inputWidth,
PADDING = 7,
BORDER = 1;
if (input) {
inputWidth = input.offsetWidth;
input.style.width = inputWidth - elemWidth - (PADDING + BORDER * 2) + 'px';
input.style.paddingLeft = elemWidth + 'px';
}
});
}, 1);
}
//click for row in form list
function formListRowClickHandler(e) {
//check for loop
if (e.target) {
var $target = $(e.target);
if ($target.hasClass('i-button') || $target.prop('tagName') === 'A' || $target.hasClass('b-checkbox__control')) {
return;
}
}
var $self = $(this),
buttons = $self.find('.i-button_default_yes'),
checkbox = $self.find('.i-checkbox_type_default');
if (buttons.length === 1) {
buttons.trigger('click');
} else if (checkbox.length === 1) {
checkbox.trigger('click');
}
}
//
function textareaResize(e) {
var lastHeight = parseInt(this.style.height, 10),
scrollHeight,
maxHeight = (this.getAttribute('data-max-rows') - 0) * 12,
BTNBOXHEIGHT = 62,
id = this.getAttribute('id'),
tabId = this.getAttribute('data-tabid');
this.style.height = 'auto';
scrollHeight = this.scrollHeight - 0;
if (maxHeight < scrollHeight) {
$(this).removeClass('b-textarea_responsive_yes');
}
this.style.height = scrollHeight + 'px';
if (lastHeight !== scrollHeight) {
EventMgr.trigger('updFormHeight', {
tabId: tabId });
//scroll textarea for visible area
var textareaBotPos = $(this).offset().top + scrollHeight + BTNBOXHEIGHT,
windowHeight = window.innerHeight;
if (textareaBotPos > windowHeight) {
var $self = $(this),
offsetTop = $self.closest('.l-form__row')[0] ? $self.closest('.l-form__row')[0].offsetTop : 0,
$page = $self.closest('.b-form-page'),
formScrollEl = App.Dom.byId('form-scroll-' + tabId),
heightViewPort = formScrollEl ? parseInt(formScrollEl.style.height, 10) : 0;
if ($page[0]) {
offsetTop += $page[0].offsetTop;
}
offsetTop -= heightViewPort - (scrollHeight + BTNBOXHEIGHT + this.offsetTop);
EventMgr.trigger('scrollTo', {
id: 'form-scroll-' + tabId,
offsetTop: offsetTop,
raw: false
});
}
}
}
function ticketMoveUpHandler(e) {
var tabId = this.getAttribute('data-tabid'),
$self = $(this),
$row = $self.closest('.l-form__row'),
offsetTop = 0;
if ($row[0]) {
offsetTop = $row[0].offsetTop;
EventMgr.trigger('scrollTo', {
id: 'form-scroll-' + tabId,
offsetTop: offsetTop,
animate: true
});
}
}
function ticketMoveDownHandler(e) {
var tabId = this.getAttribute('data-tabid'),
$self = $(this),
$row = $self.closest('.l-form__row'),
$form = $self.closest('.l-form__wrapper'),
offsetTop = 0,
height = 0,
formHeight = 0,
MAGICNUMBER2 = 120,
//min height item for work
MAGICNUMBER = 160; //btn box height
if ($row[0] && $form[0]) {
offsetTop = $row[0].offsetTop;
height = $row[0].offsetHeight;
if (height < 120) {
return;
}
formHeight = $form[0].offsetHeight;
EventMgr.trigger('scrollTo', {
id: 'form-scroll-' + tabId,
offsetTop: offsetTop + height - formHeight + MAGICNUMBER,
animate: true
});
}
}
function ticketCollapseHandler(e) {
e.preventDefault();
var $self = $(this),
tabId = $self.closest('.tab-content').attr('data-tabid');
if ($self.hasClass('mbar-showall')) {
$self.removeClass('mbar-showall').addClass('mbar-hideall');
$self.closest('.b-ticket__table-row_is_collapsible').removeClass('b-ticket__table-row_is_collapsed');
} else {
$self.removeClass('mbar-hideall').addClass('mbar-showall');
$self.closest('.b-ticket__table-row_is_collapsible').addClass('b-ticket__table-row_is_collapsed');
}
EventMgr.trigger('updFormHeight', { tabId: tabId });
}
return {
init: init,
checkPassStrength: checkPassStrength,
CACHE: CACHE
};
}(window, $, EventMgr, App, ScrollHandler);
//# sourceMappingURL=App.Forms.js.map
'use strict';
/**
* Модуль кастомного мультиселекта
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
App.MultiSelect = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
EventMgr.on('#main-wrapper', '.mselect-av .b-mselect__view-value', 'click', listOpenHandler);
EventMgr.on('#main-wrapper', '.mselect-av .b-mselect__ul-choose li', 'click', chooseElemHandler);
EventMgr.on('#main-wrapper', '.mselect-av .b-mselect__ul-view .b-mselect__unselect', 'click', unChooseElemHandler);
// EventMgr.on('#main-wrapper', '.mselect-av .b-input-btn_type_plus',
// 'click', selectAllHandler);
// EventMgr.on('#main-wrapper', '.mselect-av .b-input-btn_type_minus',
// 'click', unSelectAllHandler);
EventMgr.on('#main-wrapper', '.mselect-av .b-mselect__item_select-all', 'dblclick', unSelectAllHandler);
EventMgr.on('#main-wrapper', '.mselect-av .b-mselect__ul-view .b-mselect__item', 'mouseover', checkSize);
EventMgr.on('#main-wrapper', '.mselect-av .b-mselect__view-value', 'keydown', keydownHandler);
EventMgr.bind('selectValues', selectValues);
EventMgr.bind('multiSelectUnselect', unSelectAllFromOut);
EventMgr.bind('mselectUnselectByDepend', unselectByDepend);
},
listWrapperIdPostfix = '-ms-list-wrapper',
listIdPostfix = '-ms-list',
chooseListIdPostfix = '-ms-view',
appDom = App.Dom,
$body = function $body() {
return $('body');
},
//show select options
listOpenHandler = function listOpenHandler(e) {
var id = this.getAttribute('data-id'),
list = appDom.byId(id + listWrapperIdPostfix),
bodyHeight,
elemHeight,
formTop,
elemTop,
tabId,
form;
if (e.target && e.target.className.match('scrlbr')) {
return;
}
if (list) {
if (list.offsetWidth === 0) {
//for close other list
$('body').trigger('click');
bodyHeight = window.document.body.offsetHeight;
appDom.removeClass(list, 'closed');
//calculate list options position
elemHeight = list.offsetHeight;
list.style.top = '';
elemTop = $(list).offset().top;
if (bodyHeight - elemTop < elemHeight) {
tabId = list.getAttribute('data-tabid');
form = $('#form-scroll-' + tabId);
formTop = form.offset().top;
if (formTop > elemTop - elemHeight - appDom.byId(id + '-ms-view').offsetHeight) {
list.style.top = '-' + elemHeight / 2 + 'px';
} else {
list.style.top = '-' + elemHeight + 'px';
}
}
$body().on('click', listCloseHandler);
e.stopPropagation();
EventMgr.trigger('updateScroll', { id: id + listIdPostfix });
} else {
appDom.addClass(list, 'closed');
EventMgr.off('body', 'click');
$body().off('click', listCloseHandler);
}
}
},
//close select options
listCloseHandler = function listCloseHandler(e) {
if (e.target) {
if (!appDom.hasClass(e.target, 'b-mselect__item') && !appDom.hasClass(e.target, 'scrlbr')) {
closeList();
} else {
return;
}
}
$body().off('click', listCloseHandler);
e.stopPropagation();
},
//
closeList = function closeList(id) {
var elems, selected;
if (typeof id === 'string') {
elems = $('#' + id + '-ms-list-wrapper');
} else {
elems = $('.b-mselect__options');
}
elems.addClass('closed');
//remove selected hightlight
if (typeof id === 'string') {
selected = $('#' + id + '-ms-list-ul').find('.b-mselect__item_st_selected');
} else {
selected = $('.b-mselect__item_st_selected');
}
selected.removeClass('b-mselect__item_st_selected');
},
checkAllSelectedElem = function checkAllSelectedElem(id) {
var $items = $('#' + id + '-ms-list-ul'),
selectedCount = $items.find('.chosen').length,
allCount = $items.find('.b-mselect__item').length - 1;
return {
selectedCount: selectedCount,
allCount: allCount,
allSelected: allCount === selectedCount
};
},
chooseElemHandler = function chooseElemHandler(e, data) {
var clone = this.cloneNode(true),
id = this.parentNode.getAttribute('data-id'),
clist = App.Dom.byId(id + chooseListIdPostfix),
maxSelect = clist.getAttribute('data-maxselect'),
selectedObj = checkAllSelectedElem(id),
selectedCount = selectedObj.selectedCount,
preventChange = data ? data.preventChange ? true : false : false;
maxSelect = maxSelect === '' ? 9999 : parseInt(maxSelect, 10);
if (selectedCount === maxSelect) {
//closeList(id);
return;
}
//check for selected
if (appDom.hasClass(this, 'b-mselect__item_select-all')) {
if (selectedObj.allSelected) {
unSelectAllValues(id);
} else {
selectAllValues(id);
}
} else if (appDom.hasClass(this, 'chosen')) {
appDom.removeClass(this, 'chosen');
$('.b-mselect__item[data-s-id="' + clone.id + '"] .b-mselect__unselect').trigger('click');
} else {
clone.setAttribute('data-s-id', clone.id);
clone.id = '';
if (!clist) {
return;
}
appDom.addClass(this, 'chosen');
appDom.addClass(clone, 'chosen');
clist.appendChild(clone);
setValue(id, preventChange);
}
},
unChooseElemHandler = function unChooseElemHandler(e) {
var elem = this.parentNode,
sid = elem.getAttribute('data-s-id'),
sElem = appDom.byId(sid),
id = sElem.parentNode.getAttribute('data-id');
elem.parentNode.removeChild(elem);
appDom.removeClass(sElem, 'chosen');
setValue(id);
// closeList(id);
e.stopPropagation();
},
unSelectAllHandler = function unSelectAllHandler(e) {
var id = this.getAttribute('data-id');
unSelectAllValues(id);
e.preventDefault();
},
unSelectAllFromOut = function unSelectAllFromOut(e, data) {
var id = data.id;
unSelectAllValues(id);
},
//unselect all values
unSelectAllValues = function unSelectAllValues(id) {
$('#' + id + '-ms-view .b-mselect__item.chosen').remove();
$('#' + id + '-ms-list-ul .chosen').removeClass('chosen');
setValue(id);
},
selectAllHandler = function selectAllHandler(e) {
var id = this.getAttribute('data-id');
selectAllValues(id);
e.preventDefault();
},
//select all values
selectAllValues = function selectAllValues(id) {
var elems = $('#' + id + '-ms-list-ul .b-mselect__item'),
l = elems.length,
clone,
clist = App.Dom.byId(id + chooseListIdPostfix),
maxSelect = clist.getAttribute('data-maxselect'),
selectedCount = $('#' + id + '-ms-list-ul li.chosen').length;
maxSelect = maxSelect === '' ? 9999 : parseInt(maxSelect, 10);
for (var i = 0; i < l; i++) {
if (selectedCount === maxSelect) {
break;
}
if (appDom.hasClass(elems[i], 'dependelem') && !appDom.hasClass(elems[i], 'b-myselect__select-li_show_yes')) {
continue;
}
if (appDom.hasClass(elems[i], 'b-mselect__item_select-all')) {
continue;
}
if (!appDom.hasClass(elems[i], 'chosen')) {
clone = elems[i].cloneNode(true);
clone.setAttribute('data-s-id', clone.id);
clone.id = '';
appDom.addClass(elems[i], 'chosen');
appDom.addClass(clone, 'chosen');
clist.appendChild(clone);
selectedCount++;
}
}
setValue(id);
},
//setvalue when change
setValue = function setValue(id, preventChange) {
var elem = appDom.byId(id + chooseListIdPostfix),
cElems = elem.children,
l = cElems.length,
val,
value = '',
input = appDom.byId(id + '-ms-value'),
wrapper = appDom.byId(id + '-ms'),
scrollId = $(wrapper).find('.b-mselect__view-value').attr('id'),
tabId = elem.getAttribute('data-tabId');
if (l !== 1) {
while (l--) {
val = cElems[l].getAttribute('data-val');
value += val;
if (l !== 1) {
value += ',';
} else {
break;
}
}
} else {
value = '';
}
input.value = value;
if (value === '') {
appDom.removeClass(wrapper, 'selected');
} else {
appDom.addClass(wrapper, 'selected');
}
if (!preventChange) {
$(input).trigger('change');
}
EventMgr.trigger('updateScroll', { id: 'form-scroll-' + tabId });
EventMgr.trigger('updateScroll', { id: scrollId });
},
//apply setvalues
selectValues = function selectValues(e, data) {
var id = data.id,
slist = data.sElems.slist,
values = data.sElems.value !== undefined ? data.sElems.value : data.sElems,
l = values.length,
elem,
maxSelect = $('#' + id + '-ms-view').attr('data-maxselect');
maxSelect = maxSelect === '' ? 9999 : parseInt(maxSelect, 10);
if (slist) {
$('#' + id + '-ms-list-ul').html(renderMultiSelectValues(slist, id));
}
$('#' + id + '-ms').removeClass('selected');
$('#' + id + '-ms-list-ul li.chosen').removeClass('chosen');
$('#' + id + '-ms-view li.chosen').remove();
if (typeof values === 'string' && values !== '') {
elem = $('#' + id + '-ms-list-ul li[data-val="' + values + '"]').trigger('click');
} else {
if (maxSelect < l) {
l = maxSelect;
}
for (var i = 0; i < l; i++) {
if (i === l - 1) {
elem = $('#' + id + '-ms-list-ul li[data-val="' + values[i] + '"]').trigger('click', { 'preventChange': false });
} else {
elem = $('#' + id + '-ms-list-ul li[data-val="' + values[i] + '"]').trigger('click', { 'preventChange': true });
}
}
}
},
unselectByDepend = function unselectByDepend(e, data) {
var self = data.self;
$(self).find('.b-mselect__ul-view .dependelem:not(".b-myselect__select-li_show_yes") .b-mselect__unselect').each(function () {
$(this).trigger('click');
});
},
//render options for setvalues
renderMultiSelectValues = function renderMultiSelectValues(slist, id) {
var html = '',
l = slist.length;
html += '<li class="b-mselect__item b-mselect__item_select-all">' + pageInfo.messages.msg_select_all + '</li>';
for (var i = 0; i < l; i++) {
html += '<li class="b-mselect__item" data-val="' + slist[i].key + '" unselectable="on" data-handler-val="' + hash(slist[i].key) + '" data-dependkey="' + slist[i].depend + '" id="' + id + '-' + i + '">' + slist[i].value + '<span class="b-mselect__unselect"></span></li>';
}
return html;
},
UPKEY = 38,
DOWNKEY = 40,
LEFTKEY = 37,
RIGHTKEY = 39,
ENTERKEY = 13,
TABKEY = 9,
ESCKEY = 27,
SPACE = 32,
keydownHandler = function keydownHandler(e) {
var codeKey = e.which || e.keyCode,
ctrlKey = e.metaKey || e.ctrlKey,
closed = appDom.hasClass(appDom.byId(this.getAttribute('data-id') + listWrapperIdPostfix), 'closed');
//go up
if (codeKey === UPKEY && !closed) {
selectPrevOption.apply(this, []);
//go down
} else if (codeKey === DOWNKEY && !closed) {
selectNextOption.apply(this, []);
//close tab
} else if (codeKey === TABKEY && !closed) {
closeList();
//choose selected value & close select or not?
} else if ((codeKey === ENTERKEY || codeKey === SPACE) && !ctrlKey) {
if (closed) {
listOpenHandler.apply(this, [e]);
} else {
chooseSelected.apply(this, [e]);
}
//close list
} else if (codeKey === ESCKEY && !closed) {
e.stopPropagation();
closeList();
}
},
selectPrevOption = function selectPrevOption() {
var id = this.getAttribute('data-id'),
$list = $('#' + id + '-ms-list-ul'),
selElem = $list.find('.b-mselect__item_st_selected'),
prev = true,
prevElem = selElem;
if (selElem.length > 0) {
while (prev) {
prevElem = prevElem.prev();
if (prevElem.length > 0) {
prev = prevElem.hasClass('chosen');
} else {
prevElem = null;
prev = false;
}
}
if (prevElem) {
selElem.removeClass('b-mselect__item_st_selected');
prevElem.addClass('b-mselect__item_st_selected');
}
} else {
selElem = $list.find('.b-mselect__item:first:not(".chosen")');
selElem.addClass('b-mselect__item_st_selected');
}
},
selectNextOption = function selectNextOption() {
var id = this.getAttribute('data-id'),
$list = $('#' + id + '-ms-list-ul'),
selElem = $list.find('.b-mselect__item_st_selected'),
nextElem = selElem,
next = true;
if (selElem.length > 0) {
while (next) {
nextElem = nextElem.next();
if (nextElem.length > 0) {
next = nextElem.hasClass('chosen');
} else {
nextElem = null;
next = false;
}
}
if (nextElem) {
selElem.removeClass('b-mselect__item_st_selected');
nextElem.addClass('b-mselect__item_st_selected');
}
} else {
selElem = findFirst($list);
if (selElem) {
selElem.addClass('b-mselect__item_st_selected');
}
}
},
findFirst = function findFirst($list) {
var finding = true,
first = $list.find('.b-mselect__item:first');
while (finding) {
if (first.length > 0) {
if (first.hasClass('chosen')) {
first = first.next();
finding = true;
} else {
return first;
}
} else {
return false;
}
}
},
chooseSelected = function chooseSelected(e) {
var id = this.getAttribute('data-id'),
selected = $('#' + id + '-ms-list-ul').find('.b-mselect__item_st_selected');
if (selected.length > 0) {
selected.trigger('click');
} else {
closeList(id);
}
},
checkSize = function checkSize() {
if (App.Dom.hasClass(this, 'overwidth') || App.Dom.hasClass(this, 'notoverwidth')) {
return;
}
if (this.scrollWidth > this.offsetWidth) {
App.Dom.addClass(this, 'overwidth');
$(this).trigger('mouseover');
} else {
App.Dom.addClass(this, 'notoverwidth');
}
};
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.MultiSelect.js.map
'use strict';
/**
* Select Module
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.Select = function (window, $, EventMgr, App) {
'use strict';
var UPKEY = 38,
DOWNKEY = 40,
LEFTKEY = 37,
RIGHTKEY = 39,
ENTERKEY = 13,
TABKEY = 9,
ESCKEY = 27,
SPACE = 32,
//wrapper for select
selectSelector = '.b-myselect:not(".readonly")' + ' .b-myselect__select-selected',
//wrapper for select item
selectItemSelector = '.b-myselect:not(".readonly")' + ' .b-myselect__select-li',
selectKeySelector = '.b-myselect:not(".readonly")' + ' .b-myselect__select-selected,' + ' .b-myselect:not(".readonly") .sb-input',
CACHE = {},
CACHEOPENEDSELECT = {},
dependSlistSelector = '.depend.b-myselect input[type="hidden"],' + ' .depend.b-select-ac input[type="hidden"],' + ' .depend.b-radio input[type="hidden"]';
function $body() {
return $('body');
}
function getActiveTabId() {
return $('.tab-content_st_active').attr('data-tabid') || false;
}
//flag for active select list
function $content() {
return App.Common.selectorCache('.i-form-wr');
}
function $selectCont(id) {
if (id) {
return $('#' + id + '.b-myselect');
} else {
return $('.b-myselect');
}
}
//add /remove handler for body, for close selectlist
function addRemoveHandlerForBody(add) {
if (add) {
$body().on('click', bodyHandlerClick);
} else {
$body().off('click', bodyHandlerClick);
}
}
function closeOtherSelectList(tabId, click) {
if (!tabId) {
tabId = getActiveTabId();
}
if (CACHEOPENEDSELECT[tabId] && CACHEOPENEDSELECT[tabId].removeClass) {
CACHEOPENEDSELECT[tabId].addClass('b-myselect_st_close').removeClass('b-myselect_st_open');
addRemoveHandlerForBody();
}
}
function bodyHandlerClick(e) {
if (e) {
var scrElemClass = e.srcElement ? e.srcElement.className : e.target ? e.target.className : '',
scrollFlag = scrElemClass.indexOf('scrlbr'),
highlightFlag = scrElemClass.indexOf('highlight');
if (scrollFlag === -1 && highlightFlag === -1) {
closeOtherSelectList();
}
} else {
//what is it?!
e.stopPropagation();
}
}
//click for select
function selectListHandler(e) {
e.preventDefault();
e.stopPropagation();
var id = this.getAttribute('data-id'),
$selectContVar = $selectCont(id),
ids,
searchBox,
tabId = getActiveTabId(),
keySymbol,
r;
//check current state option list
if (!$selectContVar.hasClass('b-myselect_st_open')) {
$('body').trigger('click');
closeOtherSelectList(tabId);
$selectContVar.removeClass('b-myselect_st_close').addClass('b-myselect_st_open');
//set optionlist position
App.Common.setOptionListPosition('#opt', id);
ids = $selectContVar.find('.b-myselect__select-list').attr('id');
EventMgr.trigger('updateScroll', { id: ids });
addRemoveHandlerForBody(true);
//set focus on searchbox
if (this.parentNode.className.match('sb-select')) {
searchBox = App.Dom.byId('sb-' + ids);
if (searchBox) {
//try guess symbol of pressed key
if (e && e.originalEvent) {
if (e.originalEvent.key) {
keySymbol = e.originalEvent.key;
if (keySymbol.length > 1) {
keySymbol = null;
}
}
}
searchBox.value = keySymbol || '';
setTimeout(function () {
findElemsInSelect.apply(searchBox, [{ codeKey: 'ololo' }]);
}, 1);
searchBox.focus();
//set cursor after 1st symbol
if (keySymbol) {
if (searchBox.setSelectionRange) {
searchBox.setSelectionRange(1, 1);
} else {
r = searchBox.createTextRange();
r.collapse(true);
r.select(1, 1);
}
}
window.scrollToTopLeft();
}
}
CACHEOPENEDSELECT[tabId] = $selectContVar;
} else {
$selectContVar.removeClass('b-myselect_st_open').addClass('b-myselect_st_close');
delete CACHEOPENEDSELECT[tabId];
addRemoveHandlerForBody(false);
this.childNodes[1].focus();
window.scrollToTopLeft();
}
}
//select item handler
function setSelectedValue(e, sv, close) {
var self = $(this),
val = this.getAttribute('data-val'),
handlerVal = this.getAttribute('data-handler-val'),
content = self.html(),
id = self.parent().attr('data-id'),
currentSelect = $('#' + id + ' .b-myselect__select-value');
if (self.hasClass('group')) {
return;
}
var $inputValue = $('input#' + id + '-val');
var prevValue = $inputValue.val();
//вызываем change только при изменение значения, чтобы не зациклить setvalues
if (prevValue !== val) {
$inputValue.val(val).attr('data-handler-val', handlerVal).trigger('change', [sv, close]);
}
//if it clone from search - search self made it
if (!self.hasClass('b-myselect__select-li_clone_true')) {
self.addClass('selected').siblings().removeClass('selected');
} else if (!e) {
//up/down keydown
self.addClass('selected').siblings().removeClass('selected');
self.trigger('customclick');
content = self.siblings('.selected').find('.b-myselect__option-value').html();
}
currentSelect.html(content);
if (close !== false) {
$body().trigger('click');
if (e && !e.isTrigger) {
currentSelect.focus();
window.scrollToTopLeft();
}
}
EventMgr.trigger('selectChange', { id: id });
}
//идем по селекту вниз downkey
function selectListNext(e) {
var tabId = getActiveTabId(),
id = this.getAttribute('data-id'),
l,
currentLi = $('#' + id + ' li.selected'),
nextLi = currentLi.next(),
next = true,
closed = currentLi.parent()[0].offsetWidth ? false : true;
if (!currentLi[0].offsetWidth && !closed) {
currentLi = $('#' + id + ' li[style$="display: block;"]');
l = currentLi.length;
if (l > 0) {
setSelectedValue.apply(currentLi[0], [false, false, false]);
return;
}
}
while (next) {
if (nextLi.length === 0) {
return;
//detect showed elements by class 'show'
} else if (nextLi[0].offsetWidth && !closed) {
next = false;
} else if (closed && nextLi[0].className.match('b-myselect__select-li_show_yes')) {
next = false;
} else {
nextLi = nextLi.next();
}
}
setSelectedValue.apply(nextLi[0], [false, false, false]);
var offsetTop = nextLi[0].offsetTop,
scrollId = 'cont-' + id;
//if (offsetTop != 0) {
ScrollHandler.forceMoveSelectItem(scrollId, offsetTop);
//}
}
//идем по селекту вверх upkey
function selectListPrev() {
var tabId = getActiveTabId(),
id = this.getAttribute('data-id'),
l,
currentLi = $('#' + id + ' li.selected'),
prevLi = currentLi.prev(),
prev = true,
closed = currentLi.parent()[0].offsetWidth ? false : true;
if (!currentLi[0].offsetWidth && !closed) {
currentLi = $('#' + id + ' li[style$="display: block;"]');
l = currentLi.length;
if (l > 0) {
setSelectedValue.apply(currentLi[l - 1], [false, false, false]);
return;
}
}
while (prev) {
if (prevLi.length === 0) {
return;
//detect showed elements by class 'show'
} else if (prevLi[0].offsetWidth && !closed) {
prev = false;
} else if (closed && prevLi[0].className.match('b-myselect__select-li_show_yes')) {
prev = false;
} else {
prevLi = prevLi.prev();
}
}
setSelectedValue.apply(prevLi[0], [false, false, false]);
var offsetTop = prevLi[0].offsetTop,
scrollId = 'cont-' + id;
//if (offsetTop !== 0) {
ScrollHandler.forceMoveSelectItem(scrollId, offsetTop);
//}
}
//обработчик клавишных нажатий по селекту
function selectListKeyDownHandler(e) {
var codeKey = e.which || e.keyCode,
tabId = this.getAttribute('data-tabid'),
listOpened = !!CACHEOPENEDSELECT[tabId];
//by ENTER and SPACE
if ((codeKey === ENTERKEY || codeKey === SPACE) && !e.ctrlKey && this.type !== 'text') {
e.preventDefault();
selectListHandler.apply(this, [e]);
//by ENTER and SPACE search field
} else if (codeKey === ENTERKEY && !e.ctrlKey && this.type === 'text') {
selectFindFirstElem(this);
e.preventDefault();
//by TABKEY when openlist
} else if ((codeKey === TABKEY || codeKey === ESCKEY) && listOpened) {
// e.preventDefault();
// closeSelectList(e, true);
e.stopPropagation();
closeOtherSelectList(false, true);
//UP or LEFT when list opened
} else if ((codeKey === UPKEY || codeKey === LEFTKEY) && !listOpened && !e.ctrlKey && this.type !== 'text') {
e.preventDefault();
selectListPrev.apply(this, [e]);
//DOWN or RIGHT list opened
} else if ((codeKey === DOWNKEY || codeKey === RIGHTKEY) && !listOpened && !e.ctrlKey && this.type !== 'text') {
e.preventDefault();
selectListNext.apply(this, [e]);
//DOWN when list closed
} else if (codeKey === DOWNKEY && listOpened && !e.ctrlKey) {
e.preventDefault();
selectListNext.apply(this, [e]);
//UP when list closed
} else if (codeKey === UPKEY && listOpened && !e.ctrlKey) {
e.preventDefault();
selectListPrev.apply(this, [e]);
//Open by any symbol
} else if (this.type !== 'text' && codeKey > 32) {
selectListHandler.apply(this, [e]);
}
}
function selectFindFirstElem(self) {
var id, sElem, selElem, currentSelect;
id = self.getAttribute('data-id');
sElem = $('#' + id);
if (sElem.length === 0) {
return;
}
selElem = sElem.find('li.selected:visible');
if (selElem.length !== 0) {
selElem.trigger('click');
} else {
selElem = sElem.find('li:visible:first');
if (selElem.length !== 0) {
selElem.trigger('click');
} else {
$('body').trigger('click');
}
}
//set focus on select
currentSelect = $('#' + sElem.attr('data-id') + ' .b-myselect__select-value');
currentSelect.focus();
window.scrollToTopLeft();
}
var matchesElems = {};
//поиск по селекту
function findElemsInSelect(e) {
e = e || window.event;
var codeKey = e.which || e.keyCode;
if (codeKey === UPKEY || codeKey === DOWNKEY || TABKEY === codeKey) {
return;
}
var value,
id,
sElem,
sElems,
len,
regEx,
words,
wLen,
find,
inner,
searchAll = true,
optListId,
curElem,
selElems,
tabId,
matches,
listParent;
value = this.value.toLowerCase();
value = App.u.escapeRegExp(value);
id = this.getAttribute('data-id');
sElem = App.Dom.byId(id);
if (!sElem) {
return;
}
var $sElem = $(sElem);
optListId = String(sElem.getAttribute('data-id'));
sElems = sElem.children;
len = sElems.length;
tabId = this.getAttribute('data-tabId');
//cache html nodes
if (!CACHE[tabId]) {
CACHE[tabId] = {};
}
if (!CACHE[tabId][id]) {
sElems = sElem.children;
selElems = [];
var l = sElems.length,
t1,
pushed,
clone;
while (l--) {
clone = sElems[l].cloneNode(true);
clone.className += ' b-myselect__select-li_clone_true';
t1 = $(clone).find('.b-myselect__option-value');
/* jslint loopfunc:true */
pushed = selElems.push({
node: sElems[l],
clone: clone,
innerNode: t1,
inner: t1.html(),
bindClick: function bindClick() {
var $clone = $(this.clone);
$clone.bind('click', $.proxy(function (e) {
this.returnDefValue();
var $node = $(this.node);
$node.addClass('selected').siblings().removeClass('selected');
//for unknow reasons it doesn't bubble to parent li
//force click
if (e) {
var scrElemClass = e.srcElement ? e.srcElement.className : e.target ? e.target.className : '';
if (scrElemClass.indexOf('highlight') === 0) {
$node.trigger('click');
}
}
}, this));
$clone.bind('customclick', $.proxy(function () {
var $node = $(this.node);
$node.addClass('selected');
}, this));
},
returnDefValue: function returnDefValue() {
if (this.isMatched) {
this.innerNode.html(this.inner);
}
this.isMatched = false;
}
});
/* jslint loopfunc:false */
selElems[pushed - 1].bindClick();
CACHE[tabId][id] = selElems;
}
} else {
selElems = CACHE[tabId][id];
len = selElems.length;
}
if (value === '') {
//show all elems in list
$sElem.removeClass('b-myselect__select-ul_searching_true');
hideElement(matchesElems[id]);
scrollToSelectedElement(sElem, id);
EventMgr.trigger('updateScroll', { id: 'cont-' + id });
return;
} else {
$sElem.addClass('b-myselect__select-ul_searching_true');
}
if (!searchAll) {
regEx = new RegExp('^' + value);
} else {
regEx = new RegExp(value);
}
var wordLowerCase = '';
matchesElems[id] = [];
while (len--) {
curElem = selElems[len];
curElem.returnDefValue();
inner = curElem.inner;
words = inner.split(' ');
wLen = words.length;
find = false;
while (wLen--) {
wordLowerCase = words[wLen].toLocaleLowerCase();
matches = wordLowerCase.match(regEx);
if (matches) {
selElems[len].isMatched = true;
selElems[len].searchIndex = wordLowerCase.indexOf(matches[0]) + Math.pow(10, wLen);
find = true;
words[wLen] = addHightLight(value, words[wLen], searchAll);
matchesElems[id].push(selElems[len]);
}
}
if (!find) {
hideElement(curElem);
} else {
showElement(curElem);
curElem.innerNode.html(words.join(' '));
}
}
//sort result of find
if (matchesElems[id].length > 0) {
var lMatchesElems = matchesElems[id];
lMatchesElems.sort(sortMatches);
listParent = $(sElem);
var mLen = lMatchesElems.length;
while (mLen--) {
listParent.prepend(lMatchesElems[mLen].clone);
}
}
EventMgr.trigger('updateScroll', { id: 'cont-' + id });
ScrollHandler.scrollTo('cont-' + id, 0);
App.Common.setOptionListPosition('#opt', optListId);
}
function sortMatches(a, b) {
if (b.searchIndex === a.searchIndex) {
return 0;
}
if (b.searchIndex < a.searchIndex) {
return 1;
} else {
return -1;
}
}
function scrollToSelectedElement(sElem, id) {
var top, selectedElem;
selectedElem = $(sElem).find('.selected:not(".b-myselect__select-li_clone_true")');
if (selectedElem.length) {
top = selectedElem[0].offsetTop;
setTimeout(function () {
ScrollHandler.scrollTo('cont-' + id, top);
}, 1);
}
}
//показываем элемент или элементы в селекте
function showElement(elem) {
if (!elem) {
return;
}
var len = elem.length;
if (len) {
while (len--) {
if (elem[len].clone.className.match('b-myselect__select-li_show_yes')) {
elem[len].clone.style.display = 'block';
} else {
elem[len].clone.style.display = 'none';
}
}
} else {
if (elem.clone) {
if (elem.clone.className.match('b-myselect__select-li_show_yes')) {
elem.clone.style.display = 'block';
} else {
elem.clone.style.display = 'none';
}
}
}
}
//скрываем элемент или элементы в селекте
function hideElement(elem) {
if (!elem) {
return;
}
var len = elem.length;
if (len) {
while (len--) {
elem[len].clone.style.display = 'none';
}
} else {
if (elem.clone) {
elem.clone.style.display = 'none';
}
}
}
//добавляем выделение
function addHightLight(rep, value, searchAll) {
var re, elemValue;
if (!searchAll) {
re = rep ? new RegExp('(^' + rep + ')', 'i') : false;
} else {
re = rep ? new RegExp('(' + rep + ')', 'i') : false;
}
elemValue = value.replace(re, '<span class="highlight">$1</span>');
return elemValue;
}
/**
* Обрабатываем зависимости при отрисовке формы
*/
function firstDependSlistHandler(e, data) {
var tabId = data.tabId;
$('#cont-' + tabId + ' tr:not(".row-error") .depend.b-myselect ' + 'input[type="hidden"],' + ' #cont-' + tabId + ' .depend.b-radio input[type="hidden"],' + ' #cont-' + tabId + ' .depend.b-select-ac input[type="hidden"]').each(function () {
dependSlistHandler.apply(this);
});
EventMgr.trigger('updFormHeight', { tabId: tabId });
}
function dependSlistHandler() {
var value = this.value,
name = this.getAttribute('name'),
type = this.getAttribute('data-type'),
tabId = this.getAttribute('data-tabid'),
elem,
selectElem,
showElem,
$dependSelect;
//hide select options
$dependSelect = $('#frm-' + tabId + ' div[data-depend="' + name + '"]');
if ($dependSelect.length > 1) {
$dependSelect.each(function () {
var $self = $(this);
selectElem = $self.find('li.dependelem[data-dependkey="' + value + '"].selected.b-myselect__select-li_show_yes');
dependSlistCheckSelected(selectElem, $self);
});
} else {
selectElem = $dependSelect.find('li.dependelem[data-dependkey="' + value + '"].selected.b-myselect__select-li_show_yes');
dependSlistCheckSelected(selectElem, $dependSelect);
}
//set first value or prev key
EventMgr.trigger('updateScroll', { id: 'form-scroll-' + tabId });
}
function dependSlistCheckSelected(selectElem, $dependSelect) {
if (selectElem.length === 0) {
var id = $dependSelect.attr('id'),
prevValue = $('#' + id + '-val').val();
$dependSelect.find('li').removeClass('selected');
var elem = $dependSelect.find('li.b-myselect__select-li_show_yes[data-val="' + prevValue + '"]')[0] || $dependSelect.find('li.b-myselect__select-li_show_yes')[0];
if (elem) {
setSelectedValue.apply(elem);
} else {
//console.log('alarm!!! no elem');
}
}
}
/**
* Clean cache if slist changed by setvalues
* @param {object} e
* @param {object} data
*/
function cleanSlistCache(e, data) {
var id = data.id,
tabId = data.tabId;
if (CACHE && CACHE[tabId] && CACHE[tabId][id]) {
delete CACHE[tabId][id];
}
}
function init() {
//select
EventMgr.on($content(), selectSelector, 'click', selectListHandler);
EventMgr.on($content(), selectKeySelector, 'keydown', selectListKeyDownHandler);
EventMgr.on($content(), selectItemSelector, 'click', setSelectedValue);
EventMgr.on($content(), '.sb-input', 'keyup', findElemsInSelect);
EventMgr.on($content(), dependSlistSelector, 'change', dependSlistHandler);
EventMgr.bind('appendForm,appendReport,appendedFilter,forceDepend', firstDependSlistHandler);
EventMgr.bind('cleanSlistCache', cleanSlistCache);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.Select.js.map
'use strict';
/**
* App.Bands module
* Scroll to Ancor in report table
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
App.Bands = function (window, $, EventMgr, App) {
'use strict';
function init() {
EventMgr.on($content(), bandAncorLinkSelector, 'click', scrollToAncor);
}
function $content() {
return $('#content');
}
var bandAncorLinkSelector = 'span[data-child-id]';
function scrollToAncor(e) {
var chilid = this.getAttribute('data-child-id'),
topHim = $('#' + chilid).offset().top,
tabId = $('.tab-content_st_active').attr('data-tabid'),
topTabCont = $('#form-scroll-' + tabId).offset().top,
tabCont = App.Dom.byId('form-scroll-' + tabId),
scrollTop;
if (tabCont === null) {
return;
}
//tabCont.scrollTop = tabCont.scrollTop + (topHim - topTabCont);
scrollTop = tabCont.scrollTop + (topHim - topTabCont);
ScrollHandler.scrollTo('form-scroll-' + tabId, scrollTop, false, true);
//ScrollHandler.forceMove('form-scroll-' + tabId);
}
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.Bands.js.map
'use strict';
/**
* Change brand color
* @param {object} window global object
* @param {object|function} $ jQuery
* @param {object} EventMgr Event manager
* @param {object} App Application
*/
App.ChangeBrandColors = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
EventMgr.bind('changeSliderValue', changeBrandColor);
EventMgr.bind('appendForm', start);
},
changeBrandColor = function changeBrandColor(e, data) {
var tabId = data.tabId,
h = $('#' + tabId + '-h').val(),
s = $('#' + tabId + '-s').val(),
l = $('#' + tabId + '-l').val(),
colors = {};
colors[tabId + '-color1'] = '587B9D';
colors[tabId + '-color2'] = '78A5DF';
colors[tabId + '-color3'] = 'E1E7ED';
colors[tabId + '-color4'] = '879CB5';
colors[tabId + '-color5'] = '537393';
colors[tabId + '-color6'] = '6086ab';
colors[tabId + '-color7'] = 'dae2ec';
var i, elem;
/* jslint forin:true */
for (i in colors) {
elem = App.Dom.byId(i);
if (!elem) {
continue;
}
elem.style.backgroundColor = '#' + changeColor(colors[i], h, s, l);
}
},
start = function start(e, data) {
var tabId = data.tabId;
EventMgr.trigger('changeSliderValue', { tabId: tabId });
},
changeColor = function changeColor(rgbhex, hue, saturation, lightness) {
var r = parseInt(rgbhex.substr(0, 2), 16),
g = parseInt(rgbhex.substr(2, 2), 16),
b = parseInt(rgbhex.substr(4, 2), 16);
saturation /= 100;
lightness /= 100;
// this seems to give the same result as Photoshop
var satMul = saturation < 0 ? 1 + saturation : 1 + saturation * 2;
hue = hue % 360 / 360;
var hue6 = hue * 6;
var rgbDiv = 1 / 255;
var light255 = lightness * 255;
var lightp1 = 1 + lightness;
var lightm1 = 1 - lightness;
if (hue !== 0 || saturation !== 0) {
var vs = r,
s,
v,
h;
if (g > vs) {
vs = g;
}
if (b > vs) {
vs = b;
}
var ms = r;
if (g < ms) {
ms = g;
}
if (b < ms) {
ms = b;
}
var vm = vs - ms;
var l = (ms + vs) / 510;
if (l > 0) {
if (vm > 0) {
if (l <= 0.5) {
s = vm / (vs + ms) * satMul;
if (s > 1) {
s = 1;
}
v = l * (1 + s);
} else {
s = vm / (510 - vs - ms) * satMul;
if (s > 1) {
s = 1;
}
v = l + s - l * s;
}
if (r === vs) {
if (g === ms) {
h = 5 + (vs - b) / vm + hue6;
} else {
h = 1 - (vs - g) / vm + hue6;
}
} else if (g === vs) {
if (b === ms) {
h = 1 + (vs - r) / vm + hue6;
} else {
h = 3 - (vs - b) / vm + hue6;
}
} else {
if (r === ms) {
h = 3 + (vs - g) / vm + hue6;
} else {
h = 5 - (vs - r) / vm + hue6;
}
}
if (h < 0) {
h += 6;
}
if (h >= 6) {
h -= 6;
}
var m = l + l - v;
var sextant = h >> 0;
if (sextant === 0) {
r = v * 255;
g = (m + (v - m) * (h - sextant)) * 255;
b = m * 255;
} else if (sextant === 1) {
r = (v - (v - m) * (h - sextant)) * 255;
g = v * 255;
b = m * 255;
} else if (sextant === 2) {
r = m * 255;
g = v * 255;
b = (m + (v - m) * (h - sextant)) * 255;
} else if (sextant === 3) {
r = m * 255;
g = (v - (v - m) * (h - sextant)) * 255;
b = v * 255;
} else if (sextant === 4) {
r = (m + (v - m) * (h - sextant)) * 255;
g = m * 255;
b = v * 255;
} else if (sextant === 5) {
r = v * 255;
g = m * 255;
b = (v - (v - m) * (h - sextant)) * 255;
}
}
}
}
if (lightness < 0) {
r *= lightp1;g *= lightp1;b *= lightp1;
} else if (lightness > 0) {
r = r * lightm1 + light255;
g = g * lightm1 + light255;
b = b * lightm1 + light255;
}
r = r < 0 ? 0 : r > 255 ? 255 : Math.round(r);
g = g < 0 ? 0 : g > 255 ? 255 : Math.round(g);
b = b < 0 ? 0 : b > 255 ? 255 : Math.round(b);
var rh = r.toString(16);if (rh.length === 1) {
rh = '0' + rh;
}
var gh = g.toString(16);if (gh.length === 1) {
gh = '0' + gh;
}
var bh = b.toString(16);if (bh.length === 1) {
bh = '0' + bh;
}
return rh + gh + bh;
};
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.ChangeBrandColors.js.map
'use strict';
//Cookie module
App.Cookie = function () {
"use strict";
var init = function init() {
EventMgr.bind('menuTypeChanged', updateMenuType);
EventMgr.bind('groupChanged', updateMenu);
EventMgr.bind('loadPage', beginCookie);
EventMgr.bind('menuPositionChanged', updateMenuPos);
},
// get began cookie
beginCookie = function beginCookie() {
var menupane = getCookie('menupane'),
mbar = getCookie('mbar'),
menupos = getCookie('menupos'),
cookie = {
menupane: menupane,
mbar: mbar,
menupos: menupos
};
EventMgr.trigger('readCookie', cookie);
},
//update cookie menu type
updateMenuType = function updateMenuType(e, data) {
//check data?
var name = 'mbar',
re = new RegExp(pageInfo.product + '-' + pageInfo.level + '-' + '(all|popular|favorite)'),
value = pageInfo.product + '-' + pageInfo.level + '-' + data,
curCookie = getCookie(name);
if (curCookie.match(re)) {
value = curCookie.replace(re, value);
} else {
value = curCookie + ':' + value;
}
setCookie(name, value, 600);
},
// update cookie menu status items
updateMenu = function updateMenu(e, data) {
//check data?
//new method for toogle?
var groups = data.groups,
value,
name = 'menupane',
curCookie = getCookie(name),
re,
keyVar;
curCookie = curCookie.replace(/:+/g, ":");
/* jslint forin:true */
for (keyVar in groups) {
re = new RegExp(groups[keyVar].level + '_' + groups[keyVar].id + '-' + '[01]');
value = groups[keyVar].level + '_' + groups[keyVar].id + '-' + groups[keyVar].status;
if (curCookie.match(re)) {
curCookie = curCookie.replace(re, value);
} else {
if (curCookie !== '') {
curCookie += ':' + value;
} else {
curCookie += value;
}
}
}
setCookie(name, curCookie, 600);
},
// update cookie menu position
updateMenuPos = function updateMenuPos(e, data) {
//check data?
var name = 'menupos',
re = new RegExp(pageInfo.product + '-' + pageInfo.level + '-' + '(open|closed)'),
value = pageInfo.product + '-' + pageInfo.level + '-' + data.menupos,
curCookie = getCookie(name);
if (curCookie.match(re)) {
value = curCookie.replace(re, value);
} else {
value = curCookie + ':' + value;
}
setCookie(name, value, 600);
};
return {
init: init
};
}();
//# sourceMappingURL=App.Cookie.js.map
'use strict';
/**
* Dashboard block moving
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
App.DashboardDragAndDrop = function (window, $, EventMgr, App) {
'use strict';
var dashboardTabSel = '.b-form-page_view_dblock .i-form-page__title',
dragObj = {},
bPositions = [],
bCount = {},
pos = null,
dragPos = null,
after = false,
lastMoveTime = 0;
function init() {
EventMgr.on($content(), dashboardTabSel, 'mousedown', drag);
EventMgr.on($content(), dashboardTabSel, 'ontouchstart', drag);
}
function topBorder() {
return $('#content').offset().top;
}
function $content() {
return $('#content');
}
function $topCont() {
return $('#dash-top');
}
function $leftCont() {
return $('#dash-left');
}
function $rightCont() {
return $('#dash-right');
}
function getDragPos(name) {
var len = bPositions.length;
for (var i = 0; i < len; i++) {
if (bPositions[i].name === name) {
return i;
}
}
}
function drag(e) {
e = e || window.event;
//get positions all blocks
getPositions();
if (dragObj.shadow !== undefined) {
dragObj.shadow.remove();
}
var self = $(this).parent();
dragObj.obj = self.parent();
document.onmouseup = drop;
if (document.captureEvents) {
document.captureEvents(Event.MOUSEUP);
}
document.onmousemove = move;
if (document.captureEvents) {
document.captureEvents(Event.MOUSEMOVE);
}
document.ontouchend = drop;
document.ontouchmove = move;
if (e.touches) {
dragObj.y = e.touches[0].pageY;
dragObj.x = e.touches[0].pageX;
} else {
dragObj.y = e.clientY;
dragObj.x = e.clientX;
}
var width = dragObj.obj[0].offsetWidth,
height = dragObj.obj[0].offsetHeight,
widthHeader = self.find('.i-form-page__title').width(),
heightHeader = this.offsetHeight,
heightBody = height - heightHeader,
$shadow = $('<div class="dash-block-bg" style="width: ' + width + 'px; height: ' + height + 'px;"><div class="dash-block-bg-header" style="width: ' + widthHeader + 'px; height: ' + heightHeader + 'px;"></div><div class="dash-block-bg-body" style=" height: ' + heightBody + 'px;"></div></div>');
if (dragObj.obj.hasClass('b-form-page_st_collapsed')) {
$shadow.addClass('b-form-page_st_collapsed');
}
dragObj.obj.after($shadow);
dragObj.shadow = $shadow;
dragObj.name = dragObj.obj[0].getAttribute('data-tabid');
dragPos = getDragPos(dragObj.name);
var top = this.parentNode.parentNode.offsetTop,
left = this.parentNode.parentNode.offsetLeft;
dragObj.obj[0].style.left = left + 'px';
dragObj.obj[0].style.top = top + 'px';
dragObj.obj[0].style.width = width + 'px';
dragObj.obj[0].style.height = height + 'px';
dragObj.obj[0].style.position = 'absolute';
dragObj.obj.addClass('movingBlock');
if (e.preventDefault) {
e.preventDefault();
}
blockEvent(e);
}
function move(e) {
if (lastMoveTime - 0 === 0) {
lastMoveTime = new Date().getTime();
} else {
var currentTime = new Date().getTime();
if (currentTime - lastMoveTime < 50) {
return;
} else {
lastMoveTime = currentTime;
}
}
e = e || window.event;
var x = null,
y = null;
if (e.touches !== undefined) {
y = e.touches[0].pageY;
x = e.touches[0].pageX;
} else {
y = e.clientY;
x = e.clientX;
}
//moving block
var curX = x - dragObj.x,
curY = y - dragObj.y;
if (Math.abs(curX) < 10 && Math.abs(curY) < 10) {
return;
}
pos = null;
dragObj.x = x;
dragObj.y = y;
var top = parseInt(dragObj.obj[0].style.top, 10),
left = parseInt(dragObj.obj[0].style.left, 10);
dragObj.obj[0].style.left = left + curX + 'px';
dragObj.obj[0].style.top = top + curY + 'px';
var len = bPositions.length;
//moving shadow
for (var i = 0; i < len; i++) {
if (bPositions[i].x1 <= x && bPositions[i].x2 >= x && bPositions[i].y1 <= y && bPositions[i].y2 >= y) {
//insert before
// dragObj.shadow[0].style.width = bPositions[i].width;
// bPositions[i].self.before(dragObj.shadow);
pos = i;
after = false;
break;
} else if (bPositions[i].x1 <= x && bPositions[i].x2 >= x && bPositions[i].y1 <= y && bPositions[i].y2 + 37 >= y) {
//insert after
//dragObj.shadow[0].style.width = bPositions[i].width;
//bPositions[i].self.after(dragObj.shadow);
pos = i;
after = true;
break;
} else if (topBorder() >= y && bCount.top === 0) {
//insert into TOP
pos = 'TOP';
} else if ($rightCont().offset().left <= x && $rightCont().offset().top <= y) {
//insert into RIGHT
pos = 'RIGHT';
} else if ($rightCont().offset().left >= x && $rightCont().offset().top <= y) {
//insert into LEFT
pos = 'LEFT';
}
}
if (pos !== null) {
var content = App.Dom.byId('content');
if (content === null) {
return;
}
if (pos === 'TOP') {
$topCont().append(dragObj.shadow);
dragObj.shadow[0].style.width = content.offsetWidth - 36 + 'px';
} else if (pos === 'LEFT') {
$leftCont().append(dragObj.shadow);
dragObj.shadow[0].style.width = (content.offsetWidth - 36) / 2 + 'px';
} else if (pos === 'RIGHT') {
$rightCont().append(dragObj.shadow);
dragObj.shadow[0].style.width = (content.offsetWidth - 36) / 2 + 'px';
} else {
dragObj.shadow[0].style.width = bPositions[pos].width + 'px';
if (after) {
bPositions[pos].self.after(dragObj.shadow);
} else {
bPositions[pos].self.before(dragObj.shadow);
}
}
}
if (e.preventDefault) {
e.preventDefault();
}
//for remove collapsed block handler
App.Global.HeaderMoving = true;
blockEvent(e);
}
function drop(e) {
var rPos = false;
e = e || window.event;
document.onmousemove = null;
document.onmouseup = null;
document.ontouchmove = null;
document.ontouchend = null;
dragObj.obj.css('left', '').css('top', '').css('position', '').width('').height('').removeClass('movingBlock');
if (pos !== null) {
if (pos === 'TOP') {
$topCont().append(dragObj.obj);
dragObj.order = 9;
} else if (pos === 'LEFT') {
$leftCont().append(dragObj.obj);
dragObj.order = 9;
} else if (pos === 'RIGHT') {
$rightCont().append(dragObj.obj);
dragObj.order = 9;
} else if (dragObj.name !== bPositions[pos].name) {
rPos = true;
if (after) {
bPositions[pos].self.after(dragObj.obj);
dragObj.order = bPositions[pos].order;
} else {
bPositions[pos].self.before(dragObj.obj);
dragObj.order = bPositions[pos].order;
}
}
//don't save if after or before self
if (rPos) {
if (pos !== dragPos) {
if (after) {
//check for next
if (bPositions[dragPos + 1] !== undefined && bPositions[dragPos].pos === bPositions[pos].pos && bPositions[pos].order === bPositions[dragPos].order + 1) {} else {
dragObj.order += 1;
}
}
saveBlock(dragObj);
}
} else {
saveBlock(dragObj);
}
setTimeout(function () {
EventMgr.trigger('updateScroll', {});
}, 100);
}
if (e.preventDefault) {
e.preventDefault();
}
dragObj.shadow.remove();
pos = null;
//reload block after moved
if (dragObj.obj.children('h3').attr('data-block-type') === 'report') {
dragObj.obj.find('.dashblock-reload').trigger('click');
}
}
//send position to server
function saveBlock(dragObj) {
var position = dragObj.obj.parents('.b-dashboard_cell').attr('data-pos'),
order = dragObj.order,
display = 'max',
block = dragObj.name;
if (dragObj.shadow.hasClass('collapsed')) {
display = 'min';
}
var param = {
func: 'dashboard.save', order: order,
block: block, display: display, position: position },
url = pageInfo.url;
EventMgr.trigger('ajaxRequest', {
url: url, param: param, trfunc: 'DoNothing', queue: 'noqueue' });
}
//get position each block in dashboard
function getPositions() {
bPositions = [];
var leftCount = 0,
rightCount = 0,
topCount = 0,
self,
offset,
posObj;
$('#dash-top .b-form-page').each(function () {
self = $(this);
offset = self.offset();
posObj = {
x1: offset.left,
x2: offset.left + self.width(),
y1: offset.top,
y2: offset.top + self.height(),
width: self.width(),
self: self,
name: self.attr('data-tabid'),
order: topCount++,
pos: 'TOP'
};
bPositions.push(posObj);
});
$('#dash-left .b-form-page').each(function () {
self = $(this);
offset = self.offset();
posObj = {
x1: offset.left,
x2: offset.left + self.width(),
y1: offset.top,
y2: offset.top + self.height(),
width: self.width(),
self: self,
name: self.attr('data-tabid'),
order: leftCount++,
pos: 'LEFT'
};
bPositions.push(posObj);
});
$('#dash-right .b-form-page').each(function () {
self = $(this);
offset = self.offset();
posObj = {
x1: offset.left,
x2: offset.left + self.width(),
y1: offset.top,
y2: offset.top + self.height(),
width: self.width(),
self: self,
name: self.attr('data-tabid'),
order: rightCount++,
pos: 'RIGHT'
};
bPositions.push(posObj);
});
self = null;
offset = null;
posObj = null;
bCount = {
top: topCount,
left: leftCount,
right: rightCount
};
}
return {
init: init,
bPositions: bPositions
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.DashboardDragAndDrop.js.map
'use strict';
/**
* App.Deview модуль позволяет выводить ошибки или отладочную информацию, в виде небольшого блока сверху
*
* Использование:
* EventMgr.trigger('pullMsg', {@String});
*
*/
App.Deview = function () {
'use strict';
var init = function init() {
EventMgr.bind('pullMsg', pullMsg);
EventMgr.bind('loadPage', appendWrapper);
EventMgr.on(mainWrapperSelector, msgCloseSelector, 'click', removeMsg);
EventMgr.on(mainWrapperSelector, msgActionSelector, 'click', doAction);
},
i = 0,
$msg = function $msg() {
return $('.i-warning-banner__msg');
},
$msginner = function $msginner() {
return $('.i-warning-banner__inner');
},
mainWrapperSelector = 'body',
msgCloseSelector = '.i-warning-banner__close',
msgActionSelector = '.i-warning-banner_has_action',
//hide message
removeMsg = function removeMsg(e, data) {
clearTimeout(timeId);
$msg().animate({
opacity: '0.25',
marginTop: '-50'
});
$msginner().removeClass('i-warning-banner_has_action b-warning-banner_has_action b-menu-item newtab').attr('data-url', '');
},
timeId = null,
//show message
pullMsg = function pullMsg(e, d) {
i++;
var msg = d.msg,
timeOut = d.timeout || 9000,
func = d.func || false,
theme = d.theme || false;
$msginner().html(msg);
if (func) {
$msginner().addClass('i-warning-banner_has_action b-warning-banner_has_action b-menu-item newtab').attr('data-url', '?func=' + func);
}
if (theme) {
$msginner().addClass('b-warning-banner_has_action b-warning-banner_was_link').attr('href', '?theme=' + theme);
}
$msg().animate({
opacity: '1',
marginTop: '0'
});
clearTimeout(timeId);
timeId = setTimeout(function () {
$msg().animate({
opacity: '0.25',
marginTop: '-50'
});
}, timeOut);
},
doAction = function doAction(e) {
removeMsg();
},
//append html wrapper for block
appendWrapper = function appendWrapper() {
var wrapper = '<div id="deviewer">' + '<div class="msg i-warning-banner__msg" style="margin-top: -50px;">' + '<a class="msginner i-warning-banner__inner"></a>' + '<img src="' + pageInfo.theme + 'img/tab_close.png" class="msgclose i-warning-banner__close"/>' + '</div>' + '</div>';
$('#wrapper').append(wrapper);
if (pageInfo && pageInfo.warning_notify) {
EventMgr.trigger('pullMsg', pageInfo.warning_notify);
}
};
return {
init: init
};
}();
//# sourceMappingURL=App.Deview.js.map
'use strict';
/**
* Edit value in list module
*
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @param {object} templates doT template
*/
/*global App:true*/
App.EditInList = function (window, $, EventMgr, App, templates) {
'use strict';
var init = function init() {
EventMgr.on(contentSelector, editableFieldSelector, 'mouseover', showEditableIcon);
EventMgr.on(contentSelector, editableFieldSelector, 'mouseout', hideEditableIcon);
EventMgr.obind(editableIconSelector, 'mouseout', hideEditableIcon);
EventMgr.obind(editableIconSelector, 'mouseover', selfShowEditableIcon);
EventMgr.obind(editableIconSelector, 'click', openEditFieldForm);
EventMgr.bind('ajaxResponseEditInList', cachedFormData);
EventMgr.bind('ajaxResponseEditInListSave', responseSaveHandler);
EventMgr.bind('ajaxResponseEditInListSaveFailed', responseSaveHandlerFailed);
EventMgr.on(contentSelector, edittableOkBtnSelector, 'click', saveBtnHandler);
EventMgr.on(contentSelector, edittableCancelBtnSelector, 'click', closeEditBtnHandler);
EventMgr.on(contentSelector, edittableOverlay, 'click', closeEditBtnHandler);
EventMgr.on(contentSelector, editTableFieldSelector, 'keydown', hotKeyHandler);
EventMgr.obind($(document), 'keyup', removeKeyUp);
EventMgr.bind('closeTabEvent', removeEditForm);
EventMgr.bind('closeTabEvent', removeIndexCols);
EventMgr.bind('changedTab', removeEditForm);
EventMgr.bind('changedTab, appendList, appendForm, appendReport, appendMap', hideEditableIcon);
EventMgr.bind('appendList', removeIndexCols);
EventMgr.bind('failLoadForm', failLoadForm);
},
editableFieldSelector = '.editable',
editableIconSelector = '#edit-filed-in-list',
editTableFieldSelector = '.edit-field-form input[type="text"],' + ' .edit-field-form .b-textarea,' + ' .edit-field-form .b-textarea_for_zoom,' + ' .edit-field-form .b-myselect__select-selected .b-myselect__select-value,' + ' .edit-field-form .b-radio__control,' + ' .edit-field-form .b-checkbox__control',
contentSelector = '#main-wrapper',
edittableOkBtnSelector = '.i-btn-editlis-ok',
edittableCancelBtnSelector = '.i-btn-editlis-cancel',
edittableOverlay = '.i-tab-overlay_trig_editlist',
$$editableIcon = function $$editableIcon() {
return App.Dom.byId('edit-filed-in-list');
},
editingField = null,
currentField = null,
iconLeftPos = 0,
//show icon under field when mouseover
showEditableIcon = function showEditableIcon(e) {
var self = $(this),
offset = self.offset(),
left = offset.left,
top = offset.top,
width = this.offsetWidth,
editableIconElem = $$editableIcon();
if (editableIconElem.className === 'active') {
return;
}
currentField = self;
iconLeftPos = left + width - 22;
editableIconElem.style.left = iconLeftPos + 'px';
editableIconElem.style.top = top + 'px';
editableIconElem.style.display = 'block';
},
//show icon
selfShowEditableIcon = function selfShowEditableIcon() {
var editableIconElem = $$editableIcon();
editableIconElem.style.display = 'block';
},
//hide icon
hideEditableIcon = function hideEditableIcon() {
var editableIconElem = $$editableIcon();
if (editableIconElem.className !== 'active') {
editableIconElem.style.display = 'none';
}
},
templateBlock = function templateBlock(id) {
return '<div id="editinlist-wrapper-' + id + '" class="edit-field-form"><div class="edit-field-form-loader"><img src="' + pageInfo.theme + 'img/loader.gif"/></div></div>';
},
editFormElemData = {},
loading = {},
editableCols = {},
//get cols header for data
getEditableCols = function getEditableCols(id) {
var $tableTh = $('#lt-' + id + ' thead th');
editableCols[id] = {};
$tableTh.each(function (index) {
if (this.getAttribute('data-edit-func')) {
editableCols[id][index] = true;
} else {
editableCols[id][index] = false;
}
});
},
//open form edit
openEditFieldForm = function openEditFieldForm() {
editingField = currentField;
var activeTab = currentField.parents('.tab-content'),
funcName = activeTab.attr('data-func'),
parentTd = currentField.parents('td'),
index = parentTd.index(),
$th = currentField.parents('table').find('th'),
th = $th[index],
colName = th.getAttribute('data-colname'),
keyField = th.className.match('keyfield'),
tabId = activeTab.attr('data-tabid'),
parentTr = currentField.parents('tr'),
elid = parentTr.attr('data-elid'),
rowIndex = parentTr.attr('data-index'),
plid = filterXSS.friendlyAttrValue($('#cont-' + activeTab.attr('data-tabid') + ' .toolbar').attr('data-plid') || ''),
funcEdit = th.getAttribute('data-edit-func'),
curObj = {
tabId: tabId,
funcName: funcName,
colName: colName,
elid: elid,
plid: plid,
funcEdit: funcEdit,
parentTr: parentTr,
index: index,
rowIndex: rowIndex
},
tconvert;
if (keyField) {
tconvert = activeTab.find('.toolbar').attr('data-convert');
curObj.tconvert = tconvert;
}
$$editableIcon().className = 'active';
if (!loading[tabId]) {
if (!editFormElemData[tabId]) {
loadForm(curObj);
} else {
showForm(curObj);
}
}
},
//load form edit
loadForm = function loadForm(curObj) {
var url = pageInfo.url,
param = { func: curObj.funcEdit,
scolname: curObj.colName,
stablename: curObj.funcName,
stylesheet: 'editinlist',
elid: curObj.elid
};
if (curObj.tconvert) {
param.tconvert = curObj.tconvert;
}
if (curObj.plid) {
param.plid = curObj.plid;
}
EventMgr.trigger('ajaxRequest', {
url: url,
param: param,
invar: { id: curObj.tabId, curObj: curObj },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponseEditInList',
failfunc: 'failLoadForm',
queue: 'noqueue' });
loading[curObj.tabId] = true;
},
//handler for failed request
failLoadForm = function failLoadForm(e, data) {
EventMgr.trigger('pullMsg', { msg: 'Request failed. Try again.' });
$$editableIcon().className = '';
},
//remember form structure
cachedFormData = function cachedFormData(e, data) {
var tabId = data.id,
curObj = data.curObj,
editFormElem = $(templateBlock(tabId));
loading[curObj.tabId] = false;
editFormElemData[tabId] = data;
editFormElemData[tabId].eFwrapper = editFormElem;
editFormElemData[tabId].eFwrapper.removeClass('active');
editFormElemData[tabId].eFoverlay = $('#' + tabId + '-progressbar-overlay');
showForm(curObj);
//inser wrapper for form
$('.i-report-wr').append(editFormElem);
//$('#main-wrapper').append(editFormElem);
},
//show form edit
showForm = function showForm(curObj) {
if (!editFormElemData[curObj.tabId][curObj.colName]) {
EventMgr.trigger('pullMsg', { msg: 'Not found field. Sorry...' });
$$editableIcon().className = '';
return;
}
var id = curObj.tabId,
type = editFormElemData[id][curObj.colName].type,
elemObj = editFormElemData[id][curObj.colName],
value = editingField.hasClass('b-list__table-col-content') ? editingField.text() : editingField.find('.b-list__table-col-content').text(),
//position target cell
offset = editingField.offset(),
top = offset.top,
left = offset.left,
wrapper = editFormElemData[id].eFwrapper,
overlay = editFormElemData[id].eFoverlay,
field = '',
len,
html;
value = value.replace(/"/g, '"');
$$editableIcon().className = '';
editFormElemData[id].eFsend = false;
editFormElemData[id].curObj = curObj;
editFormElemData[id].eFvalue = value;
editFormElemData[id].editingField = editingField;
//insert current row value in object structure
if (type === 'text') {
elemObj.attr = elemObj.sourceAttr;
elemObj.value = value;
elemObj.setvalue = '';
elemObj.attr += ' value="' + value + '"';
} else if (type === 'select' || type === 'radio') {
if (value === '') {
elemObj.value = '';
elemObj.msg = elemObj.slist[0].value;
} else {
len = elemObj.slist.length;
while (len--) {
if (elemObj.slist[len].value === value) {
elemObj.value = elemObj.slist[len].key;
editFormElemData[id].eFvalue = elemObj.value;
len = 0;
}
}
elemObj.msg = value;
}
} else if (type === 'checkbox') {
if (value === 'on') {
elemObj.cbclass = 'checked';
} else {
elemObj.cbclass = '';
}
elemObj.value = value;
} else {
elemObj.value = value;
}
elemObj.id = id;
//render elem
if (type === 'text') {
if (elemObj.unlimit) {
field += '<div class="b-input-btn b-input-btn_type_unlimit" data-control-field="' + elemObj.name + '"></div>';
} else if (elemObj.date) {
field += '<div class="b-input-btn b-input-btn_type_calendar" data-control-field="' + elemObj.name + '"></div>';
}
if (elemObj.zoom) {
field += '<div class="b-input-btn b-input-btn_type_zoom" data-control-field="' + elemObj.name + '"></div>';
elemObj.textareaClasses = ' b-textarea_for_zoom';
field += templates.formItemInputWithZoom1(elemObj);
} else {
field += templates.formItemInput(elemObj);
}
//} else if (type === 'checkbox') {
//field = templates.formItemCheckbox(elemObj);
} else if (type === 'textarea') {
elemObj.third = '';
elemObj.hint = '';
field = templates.formItemTextarea(elemObj);
} else if (type === 'slider') {
elemObj.tabId = id;
field = templates.formItemSliderEditInList(elemObj);
setTimeout(function () {
EventMgr.trigger('appendEditInList', {
tabId: id });
}, 100);
} else if (type === 'select') {
field = templates.formItemSelect(elemObj);
} else if (type === 'radio') {
field = templates.formItemRadio(elemObj);
} else {
EventMgr.trigger('pullMsg', { msg: 'Not found field. Sorry...' });
$$editableIcon().className = '';
return;
}
for (var keyVar in editFormElemData[id]) {
if (editFormElemData[id][keyVar].type === 'hidden') {
field += '<' + editFormElemData[id][keyVar].attr + '/>';
}
}
// set position for edit form
wrapper.css('top', top + 'px');
wrapper.css('left', left + 'px');
//currentField.addClass('editing-field');
html = templates.editinListForm({
field: field,
elid: String(curObj.elid).replace(/"/g, '"'),
id: id,
func: curObj.funcEdit });
wrapper.html(html);
wrapper.show();
overlay.addClass('i-tab-overlay_trig_editlist' + ' b-tab-overlay_show_edlist');
//overlay.show();
checkPosition(wrapper, left);
setTimeout(function () {
checkPosition(wrapper, left);
}, 30);
setTimeout(function () {
focusOnField(elemObj);
}, 100);
},
//check position for wrapper
checkPosition = function checkPosition(elem, left) {
var width = elem.width(),
windowWidth = window.innerWidth,
PADDING = 12,
diff = windowWidth - (left + width + PADDING);
if (diff < 0) {
left = left + diff - 16;
elem.css('left', left + 'px');
}
},
//set focus on field [stable function]
focusOnField = function focusOnField(obj) {
var wrapperSelector = '#editinlist-wrapper-';
if (obj.type === 'text' || obj.type === 'slider' || obj.type === 'textarea') {
$(wrapperSelector + obj.id + ' ' + '[name="' + obj.name + '"]').focus();
} else if (obj.type === 'select') {
$(wrapperSelector + obj.id + ' ' + 'div[data-id="' + obj.name + '"] .b-myselect__select-value').focus();
} else if (obj.type === 'radio') {
$(wrapperSelector + obj.id + ' ' + 'div[data-id="' + obj.name + '"][tabindex="0"]').focus();
} else if (obj.type === 'checkbox') {
$(wrapperSelector + obj.id + ' ' + 'input[data-id="' + obj.name + '"]').focus();
}
},
//close btn handler
closeEditBtnHandler = function closeEditBtnHandler() {
var id = this.getAttribute('data-id');
if (!id) {
id = this.getAttribute('data-tabid');
//for radio and checkboxes
} else if (!id.match(/tab/)) {
id = this.getAttribute('data-tabid');
}
closeEdit(id);
},
//hide edit form
closeEdit = function closeEdit(id) {
if (editFormElemData[id]) {
editFormElemData[id].eFwrapper.hide();
// editFormElemData[id].eFoverlay.hide();
editFormElemData[id].eFoverlay.removeClass('b-tab-overlay_show_edlist' + ' i-tab-overlay_trig_editlist');
}
},
//save btn handler
saveBtnHandler = function saveBtnHandler(e, nextStep) {
var id = this.getAttribute('data-tabid');
if (id === undefined || id === null) {
id = this.getAttribute('data-id');
}
saveValue(id, nextStep);
},
//save value if it changed
saveValue = function saveValue(id, nextStep) {
if (!editFormElemData[id].eFsend) {
var $form = $('#editinlist-form-' + id),
param = $form.serializeObject();
if (editFormElemData[id].eFvalue !== param[editFormElemData[id].curObj.colName]) {
EventMgr.trigger('ajaxRequest', {
param: param,
invar: { id: id,
tabId: id,
nextStep: nextStep,
value: param[editFormElemData[id].curObj.colName] },
type: 'post',
outtype: 'json',
trfunc: 'ajaxResponseEditInListSave',
failfunc: 'ajaxResponseEditInListSaveFailed',
queue: 'noqueue' });
editFormElemData[id].eFsend = true;
editFormElemData[id].eFwrapper.addClass('active');
} else {
responseSaveHandler.apply({}, [{}, {
ok: true,
id: id,
nextStep: nextStep }]);
}
}
},
//
responseSaveHandlerFailed = function responseSaveHandlerFailed(e, data) {
if (data.erType === 'json') {
EventMgr.trigger('pullMsg', { msg: 'JSON Parse Error. Func: "' + data.param.func + '"' });
} else {
EventMgr.trigger('pullMsg', { msg: 'Request failed. Try again. Func: "' + data.param.func + '"' });
}
var id = data.invar.id;
editFormElemData[id].eFsend = false;
editFormElemData[id].eFwrapper.removeClass('active');
},
//hide edit form if ok, else will show error
responseSaveHandler = function responseSaveHandler(e, data) {
var id = data.id,
ok = data.ok,
value = data.value,
error = data.error,
errorMsg = data.ermsg,
nextStep = data.nextStep,
elid = data.elid,
elname = data.elname,
curObj = editFormElemData[id].curObj,
nameElem = curObj.colName,
len,
elemObj = editFormElemData[id][nameElem],
op = {};
editFormElemData[id].eFvalue = value;
if (ok) {
if (elemObj.type === 'select' || elemObj.type === 'radio') {
len = elemObj.slist.length;
while (len--) {
if (elemObj.slist[len].key === value) {
value = elemObj.slist[len].value;
}
}
}
// вставляем значения в таблицу
if (editFormElemData[id].editingField.hasClass('b-list__table-col-content')) {
editFormElemData[id].editingField.html(window.filterXSS(value));
} else {
editingField.find('.b-list__table-col-content').html(window.filterXSS(value));
}
editFormElemData[id].eFwrapper.removeClass('active');
closeEdit(id);
if (elid) {
//think jquery escape quotes
curObj.parentTr.attr('data-elid', elid);
if (elname) {
curObj.parentTr.attr('data-elkeyname', elname);
}
}
if (nextStep !== undefined) {
op.index = curObj.index;
op.direction = nextStep;
op.elid = curObj.elid;
op.tr = curObj.parentTr;
op.id = id;
}
if (nextStep !== undefined) {
editNextValue(op);
}
//update list model
if (data.__content && data.__content[curObj.rowIndex] && data.__content[curObj.rowIndex][nameElem]) {
data.__content[curObj.rowIndex][nameElem].v = value;
EventMgr.trigger('updateTotalList', {
tabId: id,
index: curObj.index,
colName: nameElem });
}
} else if (error) {
$('#err-cont-' + id).html('<div class="b-error-box">' + '<div class="b-error-box__top-triangle"></div>' + '<div class="b-error-box__inner">' + errorMsg + '</div></div>');
editFormElemData[id].eFsend = false;
editFormElemData[id].eFwrapper.removeClass('active');
}
},
//find next/prev/right/left edit cell
editNextValue = function editNextValue(op) {
var prev, next, run, i, cols, nextElem;
if (op.direction === 'up') {
prev = op.tr.prev();
if (prev.length !== 0) {
var prevElem = prev.find('.data')[op.index];
if (!prevElem.className.match(/editable/)) {
currentField = $(prevElem).parent();
} else {
currentField = $(prevElem);
}
openEditFieldForm.apply();
}
} else if (op.direction === 'down') {
next = op.tr.next();
if (next.length !== 0) {
nextElem = next.find('.data')[op.index];
if (!nextElem.className.match(/editable/)) {
currentField = $(nextElem).parent();
} else {
currentField = $(nextElem);
}
openEditFieldForm.apply();
}
} else if (op.direction === 'right') {
if (!editableCols[op.id]) {
getEditableCols(op.id);
}
run = true;
i = op.index;
cols = editableCols[op.id];
while (run) {
i++;
if (cols[i]) {
run = false;
nextElem = op.tr.find('.data')[i];
if (!nextElem.className.match(/editable/)) {
currentField = $(nextElem).parent();
} else {
currentField = $(nextElem);
}
openEditFieldForm.apply();
} else if (cols[i] === undefined) {
run = false;
}
}
} else if (op.direction === 'left') {
if (!editableCols[op.id]) {
getEditableCols(op.id);
}
run = true;
i = op.index;
cols = editableCols[op.id];
while (run) {
i--;
if (cols[i]) {
run = false;
nextElem = op.tr.find('.data')[i];
if (!nextElem.className.match(/editable/)) {
currentField = $(nextElem).parent();
} else {
currentField = $(nextElem);
}
openEditFieldForm.apply();
} else if (cols[i] === undefined) {
run = false;
}
}
}
},
keys = [],
ENTER_KEY = 13,
ESC_KEY = 27,
UP_KEY = 38,
DOWN_KEY = 40,
TAB_KEY = 9,
SHIFT_KEY = 16,
CTRL_KEY = 17,
ZERO = 0,
//hot key controller
hotKeyHandler = function hotKeyHandler(e) {
e = e || window.event;
var codeKey = e.which || e.keyCode,
textarea;
keys[codeKey] = true;
if (keys[ENTER_KEY]) {
textarea = this.className.match(/b-textarea/g);
if (!textarea || textarea && e.ctrlKey) {
e.preventDefault();
saveBtnHandler.apply(this, [{}, 'down']);
}
} else if (keys[ESC_KEY]) {
e.preventDefault();
e.stopPropagation();
closeEditBtnHandler.apply(this);
} else if (keys[UP_KEY] && keys[CTRL_KEY]) {
e.preventDefault();
saveBtnHandler.apply(this, [{}, 'up']);
} else if (keys[DOWN_KEY] && keys[CTRL_KEY]) {
e.preventDefault();
saveBtnHandler.apply(this, [{}, 'down']);
} else if (keys[UP_KEY]) {
if (!this.className.match(/b-myselect__select-value|b-radio__control|b-input_for_slider|b-textarea/g)) {
e.preventDefault();
saveBtnHandler.apply(this, [{}, 'up']);
}
} else if (keys[DOWN_KEY]) {
if (!this.className.match(/b-myselect__select-value|b-radio__control|b-input_for_slider|b-textarea/g)) {
e.preventDefault();
saveBtnHandler.apply(this, [{}, 'down']);
}
} else if ((keys[SHIFT_KEY] || keys[ZERO]) && keys[TAB_KEY]) {
e.preventDefault();
saveBtnHandler.apply(this, [{}, 'left']);
} else if (keys[TAB_KEY]) {
e.preventDefault();
saveBtnHandler.apply(this, [{}, 'right']);
}
},
removeKeyUp = function removeKeyUp(e) {
var codeKey = e.which || e.keyCode;
if (keys[ZERO]) {
delete keys[ZERO];
}
if (keys[codeKey]) {
delete keys[codeKey];
}
},
//handler for ext events
removeEditForm = function removeEditForm(e, data) {
var tabId = data.prevTabId || data.tabId;
closeEdit(tabId);
},
removeIndexCols = function removeIndexCols(e, data) {
var id = data.tabId;
if (!id) {
id = data.tabId;
}
if (editFormElemData[id]) {
editFormElemData[id].eFwrapper.remove();
delete loading[id];
delete editFormElemData[id];
delete editableCols[id];
}
};
return {
init: init
};
}(window, $, EventMgr, App, templates);
//# sourceMappingURL=App.EditInList.js.map
'use strict';
/**
* Модуль фильтра в списке
* @param {object} window global object
* @param {object|function} $ jQuery
* @param {object} EventMgr Event manager
* @param {object} App Application
* @param {object} templates HTML templates
*/
App.FilterList = function (window, $, EventMgr, App, templates) {
'use strict';
var init = function init() {
EventMgr.bind('appendFilter', getFilter);
EventMgr.bind('ajaxFilterResponse', gotFilterData);
EventMgr.bind('closeTabEvent', clearCache);
EventMgr.on($mainWrapper(), submitFilterBtnSelector, 'click', submitFilterForm);
EventMgr.on($mainWrapper(), filterBtnSelector, 'click', showHideFilter);
EventMgr.on($mainWrapper(), resetFilterSelector, 'click', resetFilter);
EventMgr.on($mainWrapper(), editFilterBtnSelector, 'click', showHideFilter);
EventMgr.on($mainWrapper(), clearFilterBtnSelector, 'click', clearFilter);
EventMgr.on($mainWrapper(), saveFilterBtnSelector, 'click', saveFilter);
EventMgr.on($mainWrapper(), nameFilterSel, 'keyup', syncName);
EventMgr.on($mainWrapper(), nameFilterSel, 'change', saveName);
EventMgr.on($mainWrapper(), removeFilterSel, 'click', removeFilter);
EventMgr.on($mainWrapper(), editFilterSel, 'click', editFilterName);
EventMgr.on($mainWrapper(), nameFilterSel, 'blur', closeEditFilterName);
EventMgr.on($mainWrapper(), applyFilterSel, 'click', applySavedFilter);
EventMgr.obind($(window), 'resize', resizeWindowHandler);
EventMgr.bind('loadPage', insertFastFilterIcon);
EventMgr.on($mainWrapper(), filterFieldSelector, 'mouseover', showFastFilterIcon);
EventMgr.on($mainWrapper(), filterFieldSelector, 'mouseout', hideFastFilterIcon);
EventMgr.bind('appendForm,appendList,appendReport,closeTabEvent', hideFastFilterIcon);
},
pageInfo = window.pageInfo,
CACHE = {},
$mainWrapper = function $mainWrapper() {
return App.u.selectorCache('.i-list-wr');
},
$overlay = function $overlay(tabId) {
return $('#' + tabId + '-progressbar-overlay');
},
submitFilterBtnSelector = '.b-button__filter-set',
resetFilterSelector = '.b-button__filter-reset',
editFilterBtnSelector = '.b-button__filter-change, .i-filter-applied',
clearFilterBtnSelector = '.b-button__filter-clear',
filterBtnSelector = '.tab-content_st_active .filter-btn',
saveFilterBtnSelector = '.b-button__filter-save',
nameFilterSel = '.b-filter__saved-name-edit',
removeFilterSel = '.b-filter__saved-remove',
editFilterSel = '.b-filter__saved-edit',
applyFilterSel = '.b-filter__saved-name',
filterIconSelector = '#b-fast-filter-icon',
filterFieldSelector = '.i-filter-field',
filterBtnIconSelector = '.b-filter__toggle',
disabledBtnClass = 'b-button_st_disabled',
disabledFilterIconClass = 'b-filter__toggle_is_disabled',
//handler for submit form
submitFilterForm = function submitFilterForm(e, data) {
var tabId = this.getAttribute('data-tabid'),
param = $('#frm-' + tabId).serializeObject();
param.sok = 'ok';
this.value = this.getAttribute('data-disabled');
this.className += ' b-button_st_disabled';
e.preventDefault();
EventMgr.trigger('ajaxRequest', {
param: param,
invar: { tabId: tabId, __src: 'filterset' },
trfunc: 'reloadTab',
outtype: 'json',
queue: 'filter' + tabId });
},
// Show/hide filter
showHideFilter = function showHideFilter(e) {
if ($(filterIconSelector).hasClass(disabledFilterIconClass)) {
return;
}
var activeTab = $('.tab-content_st_active');
activeTab.toggleClass('filter-hide').toggleClass('filter-opened');
var tabId = activeTab.attr('data-tabid');
//if show
if (!activeTab.hasClass('filter-hide')) {
EventMgr.trigger('setFocus', { tabId: tabId });
setTimeout(function () {
EventMgr.trigger('updateHorizScrollControl', {
id: 'filter-' + tabId });
$('#frm-' + tabId + ' .b-mselect__view-value').each(function () {
var id = this.getAttribute('data-id');
ScrollHandler.attach(this.id, id + '-ms-view', tabId, true);
});
}, 50);
$overlay(tabId).on('click', showHideFilter).addClass('b-tab-overlay_st_filter');
} else {
$overlay(tabId).off('click', showHideFilter).removeClass('b-tab-overlay_st_filter');
}
EventMgr.trigger('updTableHeight');
EventMgr.trigger('updateTipPosition');
e.preventDefault();
e.stopPropagation();
},
//get filter after load list
getFilter = function getFilter(e, data) {
var tabId = data.tabId,
func = data.func,
param = {};
if (data.listParam.filter === 'on') {
param = $.extend(param, data.listParam);
}
param.func = func;
EventMgr.trigger('ajaxRequest', {
param: param,
invar: { tabId: tabId },
trfunc: 'ajaxFilterResponse',
outtype: 'json',
queue: 'noqueue' });
},
//reset filter
resetFilter = function resetFilter(e) {
e.preventDefault();
//for not open filter form
e.stopPropagation();
var tabId = $('.tab-content_st_active').attr('data-tabid'),
func = $('#frm-' + tabId + ' input[name="func"]').val(),
param = { func: func, sok: 'ok', drop: 'on' };
EventMgr.trigger('ajaxRequest', {
param: param,
invar: { tabId: tabId, __src: 'filterset' },
trfunc: 'reloadTab',
outtype: 'json',
queue: 'noqueue' });
this.className += ' b-button_st_disabled';
},
//clear filter values
clearFilter = function clearFilter(e) {
var tabId = this.getAttribute('data-tabid'),
type,
id,
dType;
$('#frm-' + tabId).find('input').each(function () {
type = this.type;
dType = this.getAttribute('data-type');
//input[type=text]
if (type === 'text') {
this.value = '';
//checkbox
} else if (type === 'hidden' && dType === 'checkbox') {
this.value = 'off';
$('#frm-' + tabId + ' [data-id = "' + this.name + '"]').removeClass('checked');
//select
} else if (type === 'hidden' && dType === 'select') {
id = this.id.replace('-val', '');
$('#frm-' + tabId + ' ul[data-id = "' + id + '"] li:first').trigger('click');
//multiselect
} else if (type === 'hidden' && dType === 'multiple') {
id = this.getAttribute('data-id');
EventMgr.trigger('multiSelectUnselect', { id: id });
// $('#' + id + '-ms').find('.b-input-btn_type_minus')
// .trigger('click');
}
});
EventMgr.trigger('setFocus', { tabId: tabId });
e.preventDefault();
},
makeFilterParams = function makeFilterParams(model, tabId) {
var param = '',
$permaLink = $('#permalink-' + tabId),
defLink = $permaLink.attr('href');
for (var key in model) {
if (model[key].value) {
if (model[key].type === 'select') {
if (model[key].slist && model[key].slist[0] && model[key].slist[0].key !== model[key].value) {
param += '&' + key + '=' + model[key].value;
}
} else if (model[key].type === 'checkbox' && model[key].value === 'off') {
//ignore
} else {
param += '&' + key + '=' + model[key].value;
}
}
}
if (param) {
param += '&filter=on';
$permaLink.attr('data-clipboard-text', defLink + param);
}
},
gotFilterData = function gotFilterData(e, data) {
//check for new msg
if (data.msg) {
$.extend(App.u.msg, data.msg);
}
var tabId = data.tabId,
cols = calcFilterGrid(getSizeOfFilter()),
formItems = data.form[0].formItems,
form = renderFormItems(formItems, tabId, cols, data.func);
makeFilterParams(form.model, tabId);
CACHE[tabId] = {
model: form.model,
renderObject: formItems,
cols: cols
};
//check for filter cols
if (form.model && form.model.__formItemsLen > 0) {
renderWrapperFilter(data, form.html);
renderSavedFilter(data);
showFilterIcons(formItems, tabId);
enableFilterButtons();
} else {
//hide & remove all filter boxes
$('#cont-' + tabId).removeClass('filter').find('.filter-active').remove();
EventMgr.trigger('updTableHeight');
}
},
getSizeOfFilter = function getSizeOfFilter() {
var filterWrapperSel = '.b-content',
width = $(filterWrapperSel).width(),
PADDING = 20 + 16;
return width - PADDING;
},
calcFilterGrid = function calcFilterGrid(wrapperWidth) {
var BTNWIDTH = wrapperWidth > 960 ? 150 : 10,
ROWWIDTH = 348,
PADDINGLEFT = 12,
PADDINGRIGHT = 60,
acceptWidth = wrapperWidth - BTNWIDTH - PADDINGLEFT,
cols = parseInt(acceptWidth / ROWWIDTH, 10);
if (cols > 1) {
cols = parseInt((acceptWidth - PADDINGRIGHT * (cols - 1)) / ROWWIDTH, 10);
}
return cols;
},
timeId,
resizeWindowHandler = function resizeWindowHandler() {
clearTimeout(timeId);
timeId = setTimeout(function () {
updateFilterGrid();
}, 200);
},
updateFilterGrid = function updateFilterGrid() {
if (CACHE) {
var cols = calcFilterGrid(getSizeOfFilter()),
filter;
/* jslint forin:true */
for (var key in CACHE) {
filter = CACHE[key];
if (filter.cols !== cols) {
filter.cols = cols;
updateFilterForm(key);
}
}
}
},
/**
* Сделать доступными кнопки фильтра
*/
enableFilterButtons = function enableFilterButtons() {
$(resetFilterSelector).removeClass(disabledBtnClass);
$(editFilterBtnSelector).removeClass(disabledBtnClass);
$(filterBtnIconSelector).removeClass(disabledFilterIconClass);
},
updateFilterForm = function updateFilterForm(tabId) {
if (CACHE[tabId] && CACHE[tabId].renderObject) {
var rowsInCols = Math.ceil(CACHE[tabId].model.__formItemsLen / CACHE[tabId].cols),
curElem = 0,
curCol = 1;
$('#filter-' + tabId + ' .filter-item').each(function () {
curElem++;
$('#filter-' + tabId + ' .filter-table_n_' + curCol).append(this);
if (curElem === rowsInCols) {
curElem = 0;
curCol++;
}
});
}
},
renderSavedFilter = function renderSavedFilter(data) {
var filterList = data.savedFilters,
tabId = data.tabId;
if (filterList && filterList.length > 0) {
var l = filterList.length,
savedFilters = '';
for (var i = 0; i < l; i++) {
savedFilters += templates.filterSavedItem({
name: filterList[i],
id: 'tid' + new Date().getTime() + i,
func: data.func,
tabId: tabId,
active: data.savedFilterAct === filterList[i]
});
}
$('#cont-' + tabId + ' .b-filter__save-bar').addClass('b-filter__save-bar_has_items');
$('#cont-' + tabId + ' .b-filter__save-bar-inner').append($(savedFilters));
//bind horizontal scroll
setTimeout(function () {
EventMgr.trigger('bindHorizScrollControl', {
leftBtn: '#cont-' + tabId + ' .b-filter__btn-move_dir_left',
rightBtn: '#cont-' + tabId + ' .b-filter__btn-move_dir_right',
actElem: '#cont-' + tabId + ' .b-filter__saved-item_st_active',
innerBox: '#cont-' + tabId + ' .b-filter__save-bar-inner',
id: 'filter-' + tabId
});
}, 50);
}
},
//render filter items
renderWrapperFilter = function renderWrapperFilter(data, formHtml) {
var filter = {},
tabId = data.tabId,
html;
filter.title = data.title;
filter.form = formHtml;
filter.tabId = data.tabId;
filter.func = data.func;
filter.disabled = data.formflags.disabledText;
filter.filterMsg = data.filterMsg;
filter.sfname = data.savedFilterAct;
html = templates.filterWrapper(filter);
$('#filter-' + data.tabId).html(html);
EventMgr.trigger('appendedFilter', { tabId: tabId });
},
//show filter icon for col if filter applied
showFilterIcons = function showFilterIcons(formItems, tabId) {
var length = formItems.length,
i = 0,
name,
value,
filterIcon,
showIcon,
fastFilter,
delimiter = '=',
type,
sLen,
ind = 0;
for (i = 0; i < length; i++) {
if (formItems[i][0] !== undefined) {
name = formItems[i][0].name;
value = formItems[i][0].value;
type = formItems[i][0].type;
showIcon = false;
fastFilter = false;
//chekc for empty value
if (value !== '') {
showIcon = true;
}
if (type === 'select' || type === 'mselect') {
fastFilter = true;
}
if (type === 'select' && value === '*') {
showIcon = false;
} else if (type === 'select' && value !== '*') {
if (formItems[i][0].slist) {
sLen = formItems[i][0].slist.length;
while (sLen--) {
if (formItems[i][0].slist[sLen].key === value) {
value = formItems[i][0].slist[sLen].value;
if (sLen === 0) {
showIcon = false;
}
break;
}
}
}
} else if (type === 'checkbox' && value === 'off') {
showIcon = false;
} else if (type === 'mselect' && formItems[i][0].slist) {
value = '';
ind = 0;
for (var j = 0, l = formItems[i][0].slist.length; l > j; j++) {
if (formItems[i][0].values && formItems[i][0].values[j]) {
if (ind !== 0) {
value += ' | ';
}
value += formItems[i][0].slist[j].value;
ind++;
}
}
if (value === '') {
showIcon = false;
}
}
if (showIcon) {
if (formItems[i][0].delimiter) {
delimiter = formItems[i][0].delimiter;
}
filterIcon = $('#sort_table-' + tabId + ' [data-colname="' + name + '"] .filter-icon');
filterIcon.attr('data-hint', delimiter + ' "' + value + '"');
filterIcon.addClass('active');
}
if (fastFilter) {
if (!formItems[i][0].period) {
$('#lt-' + tabId).find('.b-list__table-col_name_' + name).addClass('i-filter-field');
}
}
}
}
},
//render filer items
renderFormItems = function renderFormItems(formItems, id, cols, func) {
var html = '',
row = '',
maxCols = 5,
index = 0,
formItemsLen = formItems.length,
j,
formItemLen,
k,
formItem,
formRow,
classes,
model = {},
rowsInCols = Math.ceil((formItemsLen - 1) / cols);
//-1 when 1st elem is empty for valid json
model.__formItemsLen = formItemsLen - 1;
for (j = 1; j < formItemsLen; j++) {
formItemLen = formItems[j].length;
formItem = formItems[j];
for (k = 0; k < formItemLen; k++) {
model[formItem[k].name] = formItems[j][k];
formRow = {};
formRow.first = '';
formRow.second = '';
formRow.hide = formItem[k].hide || {};
formRow.show = formItem[k].show || {};
formRow.classes = formItem[k].dependFields;
if (formItem[k].show !== undefined) {
if (formItem[k].shadow) {
formRow.classes += ' depended-shadow-s';
} else {
formRow.classes += ' depended-hidden-s';
}
}
classes = '';
formItem[k].id = id;
//render label
if (formItem[k].label) {
formRow.first += templates.filterItemLabel({
label: formItem[k].label,
name: formItem[k].name,
func: func,
classes: '' });
}
if (formItem[k].value) {
formItem[k].value = formItem[k].value.replace(/"/g, '"');
}
//render input text ||hidden || password
if (formItem[k].type === 'text' || formItem[k].type === 'hidden' || formItem[k].type === 'password') {
formItem[k].classes = classes;
if (formItem[k].date) {
formRow.second += '<div class="b-input-btn b-input-btn_type_calendar hint" data-hint="' + formItem[k].hintBtn + '" data-control-field="' + formItem[k].name + '"></div>';
}
if (!formItem[k].zoom) {
formRow.second += templates.formItemInput(formItem[k]);
} else {
formRow.second += '<div class="b-input-btn b-input-btn_type_zoom hint"' + ' data-hint="' + formItem[k].hintBtn + '" ' + 'data-control-field="' + formItem[k].name + '"></div>';
formItem[k].inputAttr = formItem[k].attr;
formItem[k].inputClasses = classes;
formItem[k].inputName = formItem[k].name;
formItem[k].textareaClasses = ' b-textarea_for_zoom';
formRow.second += templates.formItemInputWithZoom(formItem[k]);
}
} else if (formItem[k].type === 'select') {
//render select
formRow.second += templates.formItemSelect(formItem[k]);
} else if (formItem[k].type === 'aselect') {
//render select autocomplete
formRow.second += templates.formItemSelectAutocomplete(formItem[k]);
} else if (formItem[k].type === 'checkbox') {
formRow.second += templates.formItemCheckbox(formItem[k]);
} else if (formItem[k].type === 'mselect') {
formRow.second += templates.formItemMSelect(formItem[k]);
}
//render extra btn
row += templates.filterItem(formRow);
if (j % rowsInCols === 0 && rowsInCols !== 1) {
index++;
html += templates.filterRow({ content: row, index: index });
row = '';
}
}
}
if (row !== '') {
index++;
html += templates.filterRow({ content: row, index: index });
}
//render ended cols
maxCols -= cols;
for (var n = 0; n < maxCols; n++) {
index++;
html += templates.filterRow({ content: '', index: index });
}
return {
html: html,
model: model
};
},
addNewFilter = function addNewFilter(tabId, tid, filterFunc) {
var $savedFilter = $('#cont-' + tabId + ' .b-filter__saved-name-edit'),
$currentFilter = $('#cont-' + tabId + ' .b-filter__saved-item_st_active .b-filter__saved-name-edit'),
l = $savedFilter.length,
N = l + 1,
filterName;
if ($currentFilter.length > 0) {
filterName = $currentFilter.val();
} else {
filterName = getFilterName(N, $savedFilter);
}
return filterName;
},
getFilterName = function getFilterName(index, savedFilters) {
var name = App.u.msg.filterName + ' ' + index,
exist = false;
savedFilters.each(function () {
if (this.value === name) {
exist = true;
index++;
return;
}
});
return exist ? getFilterName(index, savedFilters) : name;
},
saveFilter = function saveFilter(e) {
e.preventDefault();
var tabId = this.getAttribute('data-id'),
param = $('#frm-' + tabId).serializeObject(),
tid = 'tid' + new Date().getTime(),
filterFunc = param.func,
filterName = addNewFilter(tabId, tid, filterFunc);
/* jslint camelcase: false */
param.faction = 'save';
param.fname = filterName;
param.sok = 'ok';
/* jslint camelcase: true */
EventMgr.trigger('ajaxRequest', {
param: param,
invar: { tabId: tabId, tid: tid },
trfunc: 'reloadTab',
outtype: 'json',
queue: 'filter' + tabId });
EventMgr.trigger('updTableHeight');
},
/**
* remove saved filter
* @param {object} e
* @this {object}
*/
removeFilter = function removeFilter(e) {
e.preventDefault();
var id = this.getAttribute('data-id'),
elem = App.Dom.byId('b-filter__saved-name-edit_tid_' + id),
param = {};
if (!elem) {
return;
}
param.fname = elem.value;
param.func = elem.getAttribute('data-func');
if (this.parentNode) {
this.parentNode.parentNode.removeChild(this.parentNode);
}
param.faction = 'drop';
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: param,
invar: {},
trfunc: 'DoNothing',
outtype: 'json'
});
EventMgr.trigger('updTableHeight');
},
ENTER_KEY = 13,
/**
* sync value name with display name
* @param {object} e
* @this {object}
*/
syncName = function syncName(e) {
var value = window.htmlEscape(this.value),
tabId = this.getAttribute('data-tabid'),
nameBox = this.nextSibling;
if (nameBox) {
nameBox.innerHTML = value;
if ($(this).parents('.b-filter__saved-item').hasClass('b-filter__saved-item_st_active')) {
$('#filter-' + tabId + ' .b-button__filter-save-name').html(value);
}
}
var codeKey = e.which || e.keyCode;
if (codeKey === ENTER_KEY) {
this.blur();
}
},
/**
* show input for rename saved filter
* @this {object}
*/
editFilterName = function editFilterName(e) {
e.preventDefault();
if (this.parentNode) {
App.Dom.addClass(this.parentNode, 'b-filter-flag_editing');
}
$(this.parentNode).find('.b-filter__saved-name-edit').focus().select();
},
/**
* rename saved filter
* @param {object} e
* @this {object}
*/
saveName = function saveName(e) {
/* jslint camelcase: false */
var name = this.value,
func = this.getAttribute('data-func'),
oldName = this.getAttribute('data-name'),
param = {
fnew_name: name,
fname: oldName,
faction: 'rename',
func: func
};
/* jslint camelcase: true */
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: param,
invar: {},
trfunc: 'DoNothing',
outtype: 'json'
});
this.setAttribute('data-name', name);
},
closeEditFilterName = function closeEditFilterName(e) {
if (this.parentNode) {
App.Dom.removeClass(this.parentNode.parentNode, 'b-filter-flag_editing');
}
},
applySavedFilter = function applySavedFilter(e) {
e.preventDefault();
var elem = App.Common.getPreviousNode(this),
id = elem.getAttribute('data-id'),
tabId = elem.getAttribute('data-tabid'),
param = {};
if (!elem) {
return;
}
param.func = elem.getAttribute('data-func');
param.fname = elem.getAttribute('data-name');
param.faction = 'set';
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: param,
invar: { tabId: tabId },
trfunc: 'reloadTab',
outtype: 'json' });
},
clearCache = function clearCache(e, data) {
var tabId = data.tabId;
if (CACHE && CACHE[tabId]) {
delete CACHE[tabId];
}
},
insertFastFilterIcon = function insertFastFilterIcon() {
$mainWrapper().append('<div class="b-fast-filter-icon" id="b-fast-filter-icon"></div>');
EventMgr.obind(filterIconSelector, 'mouseout', hideFastFilterIcon);
EventMgr.obind(filterIconSelector, 'mouseover', selfShowFastFilterIcon);
EventMgr.obind(filterIconSelector, 'click', setFilterByColValue);
},
iconLeftPos = 0,
filterField,
$fastFilterIcon = function $fastFilterIcon() {
return App.Dom.byId('b-fast-filter-icon');
},
showFastFilterIcon = function showFastFilterIcon() {
var self = $(this),
offset = self.offset(),
left = offset.left,
top = offset.top,
width = this.offsetWidth,
fastFilterIconElem = $fastFilterIcon(),
isEditable = self.hasClass('editable'),
marginLeft = 22;
filterField = self;
if (isEditable) {
marginLeft += 22;
}
if (fastFilterIconElem.className.match('active')) {
return;
}
iconLeftPos = left + width - marginLeft;
fastFilterIconElem.style.left = iconLeftPos + 'px';
fastFilterIconElem.style.top = top + 'px';
fastFilterIconElem.style.display = 'block';
},
hideFastFilterIcon = function hideFastFilterIcon(e) {
var fastFilterIconElem = $fastFilterIcon();
if (!fastFilterIconElem.className.match('active')) {
fastFilterIconElem.style.display = 'none';
}
},
selfShowFastFilterIcon = function selfShowFastFilterIcon() {
var fastFilterIconElem = $fastFilterIcon();
fastFilterIconElem.style.display = 'block';
},
setFilterByColValue = function setFilterByColValue(e) {
if (filterField) {
var value,
th,
td,
index,
colname,
filterControl,
tabId,
filterFieldContent,
keyValue,
type,
control,
findKey = false,
id;
filterFieldContent = filterField.find('.b-list__table-col-content');
if (filterField.length) {
keyValue = filterFieldContent.attr('data-v-id');
value = filterFieldContent.html();
index = filterField.closest('td').index();
th = filterField.closest('table').find('th')[index];
colname = th.getAttribute('data-colname');
tabId = filterField.closest('.tab-content').attr('data-tabid');
if (CACHE[tabId] && CACHE[tabId].model && CACHE[tabId].model[colname]) {
control = CACHE[tabId].model[colname];
type = control.type;
if (type === 'select' || type === 'mselect') {
//если не задан keyValue, то ищем в селекте UX-1662
if (!keyValue) {
for (var i = 0, l = control.slist.length; i < l; i++) {
if (control.slist[i].value === value) {
value = control.slist[i].key;
findKey = true;
break;
}
}
} else {
value = keyValue;
findKey = true;
}
if (type === 'mselect') {
id = tabId + '-' + colname + '-ms-value';
} else {
id = '_' + colname + '-' + tabId + '-val';
}
} else if (type === 'text') {
id = colname + '-' + tabId;
findKey = true;
}
filterControl = App.Dom.byId(id);
if (filterControl && findKey) {
filterControl.value = value;
$('#frm-' + tabId + ' .b-button__filter-set').trigger('click');
}
}
}
}
};
return {
init: init
};
}(window, $, EventMgr, App, templates);
//# sourceMappingURL=App.FilterList.js.map
'use strict';
/**
* Wrapper for google charts
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @param {object} pageInfo
*/
/*global App: true*/
App.GoogleCharts = function (window, $, EventMgr, App, pageInfo) {
'use strict';
var init = function init() {
EventMgr.bind('appendReport', loadGCharts);
EventMgr.bind('appendListWithDiagram', loadGChartFromList);
EventMgr.bind('loadGCharts', loadGCharts);
EventMgr.bind('loadGChart', loadGChart);
EventMgr.bind('loadGChartPrepare', loadGChartPrepare);
EventMgr.one('loadGChartScripts', loadGChartScript);
},
loadedGChartScripts = false,
//load google charts
loadGCharts = function loadGCharts(e, data) {
var bands = data.bands.bands,
tabId = data.tabId,
len = bands.length,
id,
gid,
i,
j,
lenD;
for (i = 0; i < len; i++) {
id = tabId + '-' + i;
gid = id + bands[i].id;
if (bands[i].diagram !== undefined) {
lenD = bands[i].diagram.length;
for (j = 0; j < lenD; j++) {
if (loadedGChartScripts) {
EventMgr.trigger('loadGChart', {
diagram: bands[i].diagram[j],
gid: gid + j,
empty: bands[i].empty,
tabId: tabId,
content: bands[i].content });
} else {
EventMgr.trigger('loadGChartPrepare', {
diagram: bands[i].diagram[j],
gid: gid + j,
empty: bands[i].empty,
tabId: tabId,
content: bands[i].content });
}
}
}
}
if (data.bands.emptyBand) {
var emptyBandData = data.bands.emptyBandData;
if (loadedGChartScripts) {
EventMgr.trigger('loadGChart', {
diagram: emptyBandData.diagram,
gid: tabId + '-band-empty',
tabId: tabId,
content: emptyBandData.content });
} else {
EventMgr.trigger('loadGChartPrepare', {
diagram: emptyBandData.diagram,
gid: tabId + '-band-empty',
tabId: tabId,
content: emptyBandData.content });
}
}
},
//
loadGChartFromList = function loadGChartFromList(e, data) {
var diagram = data.diagram,
gid = data.gid,
tabId = data.tabId,
content = data.content;
if (loadedGChartScripts) {
EventMgr.trigger('loadGChart', {
diagram: diagram,
gid: gid,
tabId: tabId,
content: content });
} else {
EventMgr.trigger('loadGChartPrepare', {
diagram: diagram,
gid: gid,
tabId: tabId,
content: content });
}
},
//load google chart
loadGChart = function loadGChart(e, data) {
var diagram = data.diagram,
content = data.content,
gid = data.gid,
wrapper = App.Dom.byId(gid),
tabId = data.tabId,
chart,
cdata,
options,
empty = data.empty,
chartsData,
rawData = false,
colors = ['#5c85d6', '#e36141', '#ffbc58', '#53b858', '#ba70ba', '#3fafd1', '#e37fa0', '#8dc43b', '#cc6665', '#aaa'];
if (diagram.colors && diagram.colors.length > 1) {
colors = diagram.colors;
colors.shift();
}
//check for data form dashbord or report
//dashboard data without line
if (diagram.chartsData && !diagram.chartsData.fakeArr) {
chartsData = diagram.chartsData.data;
rawData = true;
//dashboard data with line
} else if (diagram.chartsData && diagram.chartsData.fakeArr) {
chartsData = diagram.chartsData;
rawData = true;
//report
} else {
chartsData = makeData(diagram, content);
}
if (wrapper === null) {
return;
}
var len = chartsData.data ? chartsData.data.length : chartsData.length,
len2 = 0,
fakeArr = [],
pointSize = 0,
showTextEvery = 'automatic',
width = wrapper.offsetWidth;
//check for point size
if (len < 32) {
pointSize = 3;
}
//check for show labels
if (width > 700) {
showTextEvery = Math.round(len / 10);
} else {
showTextEvery = Math.round(len / 5);
}
//check when rawData
if (len === 1) {
if (chartsData.data) {
len2 = chartsData.data[0];
} else {
console.log('empty chart data');
return;
}
while (len2--) {
fakeArr.push(0);
}
// chartsData.push(fakeArr);
}
if (rawData) {
chartsData = prepareRawData(chartsData, len);
}
if (diagram && diagram.type === 'pie') {
if (rawData) {
cdata = window.google.visualization.arrayToDataTable(chartsData);
} else {
cdata = new window.google.visualization.DataTable();
for (var i = 0, l = chartsData.fakeArr.length; i < l; i++) {
if (chartsData.fakeArr[i] === null) {
cdata.addColumn({ type: 'string', role: 'tooltip' });
} else {
cdata.addColumn(i === 0 ? 'string' : 'number', chartsData.fakeArr[i]);
}
}
cdata.addRows(chartsData.data);
}
options = {
// backgroundColor : 'rgb(242, 249, 255)',
'backgroundColor.stroke': '#fff',
'vAxis': {
'minValue': 0,
'textStyle': { 'fontSize': '11' }
},
'colors': colors,
'is3D': true,
'legend': {
'alignment': 'center',
'textStyle': { 'fontSize': '11' }
},
'sliceVisibilityThreshold': diagram.others
};
if (diagram.title) {
options.title = diagram.title;
options.chartArea = { 'height': '80%' };
} else {
options.chartArea = { 'height': '94%' };
}
chart = new window.google.visualization.PieChart(App.Dom.byId(gid));
} else if (diagram && diagram.type === 'histogram') {
if (!chartsData.fakeArr) {
cdata = window.google.visualization.arrayToDataTable(chartsData);
} else {
cdata = new window.google.visualization.DataTable();
/* jshint shadow: true */
for (var i = 0, l = chartsData.fakeArr.length; i < l; i++) {
if (chartsData.fakeArr[i] === null) {
cdata.addColumn({ type: 'string', role: 'tooltip' });
} else {
cdata.addColumn(i === 0 ? 'string' : 'number', chartsData.fakeArr[i]);
}
}
cdata.addRows(chartsData.data);
}
options = {
//backgroundColor : 'rgb(242, 249, 255)',
'backgroundColor.stroke': '#fff',
colors: colors,
vAxis: {
//'minValue': 0,
textStyle: { fontSize: '11' },
viewWindow: {}
},
hAxis: {
textStyle: { fontSize: '11' }
},
legend: {
alignment: 'start',
position: 'right',
textStyle: { fontSize: '11' }
}
};
if (diagram.title) {
options.title = diagram.title;
}
//set min/max viewport for chart
if (diagram.min) {
options.vAxis.viewWindow.min = diagram.min;
}
if (diagram.max) {
options.vAxis.viewWindow.max = diagram.max;
}
chart = new window.google.visualization.ColumnChart(App.Dom.byId(gid));
} else if (diagram && (diagram.type === 'line' || diagram.type === 'area' || diagram.type === 'steppedarea')) {
if (!chartsData.fakeArr) {
cdata = window.google.visualization.arrayToDataTable(chartsData);
} else {
cdata = new window.google.visualization.DataTable();
for (var i = 0, l = chartsData.fakeArr.length; i < l; i++) {
/* jshint shadow: true */
if (chartsData.fakeArr[i] === null) {
cdata.addColumn({ type: 'string', role: 'tooltip' });
} else {
cdata.addColumn(i === 0 ? 'string' : 'number', chartsData.fakeArr[i]);
}
}
cdata.addRows(chartsData.data);
}
options = {
//backgroundColor : 'rgb(242, 249, 255)',
// 'chartArea' : { 'left' : 50 },
'backgroundColor.stroke': '#fff',
colors: colors,
vAxis: {
//'minValue' : 0,
textStyle: { fontSize: '11' },
viewWindow: {}
},
hAxis: {
showTextEvery: showTextEvery,
textStyle: { fontSize: '11' }
},
pointSize: pointSize,
focusTarget: 'category',
legend: {
alignment: 'start',
textStyle: { fontSize: '11' }
}
};
if (diagram.title) {
title = diagram.title;
}
//set min/max viewport for chart
if (diagram.min) {
options.vAxis.viewWindow.min = diagram.min;
}
if (diagram.max) {
options.vAxis.viewWindow.max = diagram.max;
}
if (diagram.type === 'line') {
chart = new window.google.visualization.LineChart(App.Dom.byId(gid));
} else if (diagram.type === 'area') {
chart = new window.google.visualization.AreaChart(App.Dom.byId(gid));
} else if (diagram.type === 'steppedarea') {
options.areaOpacity = 1;
options.isStacked = true;
chart = new window.google.visualization.SteppedAreaChart(App.Dom.byId(gid));
} else if (diagram.type === 'column') {
options.isStacked = true;
chart = new window.google.visualization.ColumnChart(App.Dom.byId(gid));
}
} else if (diagram && diagram.type === 'scatter') {
if (!chartsData.fakeArr) {
cdata = window.google.visualization.arrayToDataTable(chartsData);
} else {
//chartsData.data.unshift(chartsData.fakeArr);
//var tmpArr = chartsData.data;
//cdata = google.visualization.arrayToDataTable(tmpArr);
cdata = new window.google.visualization.DataTable();
/* jshint shadow: true */
for (var i = 0, l = chartsData.fakeArr.length; i < l; i++) {
if (chartsData.fakeArr[i] === null) {
cdata.addColumn({ type: 'string', role: 'tooltip' });
} else {
cdata.addColumn('number', chartsData.fakeArr[i]);
}
}
if (diagram.markerline !== undefined) {
for (var i = 0, l = chartsData.data.length; i < l; i++) {
chartsData.data[i].push(diagram.markerline - 0);
}
cdata.addColumn('number', diagram.markerlineLabel);
}
cdata.addRows(chartsData.data);
}
options = {
'backgroundColor.stroke': '#fff',
colors: colors,
vAxis: {
//'minValue' : 0,
textStyle: { fontSize: '11' },
viewWindow: {}
},
hAxis: {
showTextEvery: showTextEvery,
textStyle: { fontSize: '11' }
},
legend: false,
seriesType: 'scatter'
};
if (diagram.markerline !== undefined) {
options.series = {};
options.series[1] = { 'type': 'line' };
}
//set min/max viewport for chart
if (diagram.min) {
options.vAxis.viewWindow.min = diagram.min;
}
if (diagram.max) {
options.vAxis.viewWindow.max = diagram.max;
}
//chart = new google.visualization.ScatterChart(App.Dom.byId(gid));
chart = new window.google.visualization.ComboChart(App.Dom.byId(gid));
} else if (diagram) {
EventMgr.trigger('pullMsg', { msg: 'Diagram type "' + diagram.type + '" do not support' });
return;
}
if (empty) {
options.colors = colors;
}
chart.draw(cdata, options);
EventMgr.trigger('addedChart', { chart: chart, tabId: tabId });
var func = function func() {
EventMgr.trigger('updateScroll', { id: 'form-scroll-' + tabId });
EventMgr.trigger('updTableHeight');
};
App.Common.noMoreThan('form-scroll-' + tabId, 100, func);
},
prepareRawData = function prepareRawData(chartsData, len) {
var len2,
data = chartsData.data ? chartsData.data : chartsData;
while (len--) {
//check for separate data
//skip first elem with labels
if (len === 0 && !chartsData.fakeArr) {
continue;
}
len2 = data[len].length;
while (len2--) {
if (len2 !== 0) {
//check for separate data
//skip elem with hint
if (chartsData.fakeArr && !chartsData.fakeArr[len2]) {
continue;
}
data[len][len2] = parseData(data[len][len2]);
}
}
}
if (chartsData.data) {
chartsData.data = data;
} else {
chartsData = data;
}
return chartsData;
},
parseData = function parseData(value) {
return value === '' ? null : parseFloat(String(value).replace(/\s/g, ''));
},
makeData = function makeData(diagram, content) {
var type = diagram.type,
data,
elem,
fakeArr,
label = diagram.label,
dataCol = diagram.data,
labels = diagram.labelText,
lines = diagram.lines,
tooltip = diagram.tooltip,
woLabel = diagram.type === 'scatter',
len,
labelsLen,
i,
j,
labelsLenSrc;
//if (type == 'histogram' || type == 'pie') {
//withot lines
if (!lines) {
//check for one lines in histogram
dataCol = dataCol[0] ? dataCol[0] : dataCol;
//first fake row
fakeArr = ['fake', labels[0]];
if (dataCol.convert || tooltip) {
fakeArr.push(null);
}
// data = [elem];
data = [];
len = content.length;
i = 0;
while (len--) {
if (tooltip) {
elem = [content[i][label].v, parseFloat(content[i][dataCol.name].v.replace(/\s/g, ''))];
elem.push(content[i][tooltip].v + ': ' + elem[0] + ', ' + elem[1]);
} else if (dataCol.convert) {
elem = [content[i][label].v, parseFloat(content[i][dataCol.name].orig || content[i][dataCol.name].v), content[i][dataCol.name].v];
} else {
elem = [content[i][label].v, parseFloat(content[i][dataCol.name].v.replace(/\s/g, ''))];
}
//
if (woLabel) {
elem[0] = elem[0] - 0;
}
data.push(elem);
i++;
}
} else {
//first fake row
fakeArr = ['fake'];
labelsLen = dataCol.length;
labelsLenSrc = labelsLen;
i = 0;
while (labelsLen--) {
fakeArr.push(labels[i]);
if (dataCol[i].convert) {
fakeArr.push(null);
}
i++;
}
// data = [elem];
data = [];
len = content.length;
j = 0;
while (len--) {
elem = [content[j][label].v];
labelsLen = labelsLenSrc;
i = 0;
while (labelsLen--) {
if (dataCol[i].convert) {
elem.push(parseFloat(content[j][dataCol[i].name].orig || content[j][dataCol[i].name].v.replace(/\s/g, '')));
elem.push(content[j][dataCol[i].name].v === '' ? null : content[j][dataCol[i].name].v);
} else {
elem.push(content[j][dataCol[i].name].v === '' ? null : parseFloat(content[j][dataCol[i].name].v.replace(/\s/g, '')));
}
i++;
}
data.push(elem);
j++;
}
}
return {
data: data,
fakeArr: fakeArr
};
},
queueCharts = [],
loadGChartPrepare = function loadGChartPrepare(e, data) {
queueCharts.push(data);
EventMgr.trigger('loadGChartScripts', {});
},
//loading gchart form queue
runQueue = function runQueue() {
var len = queueCharts.length;
while (len--) {
EventMgr.trigger('loadGChart', queueCharts[len]);
}
queueCharts = [];
},
checkScripts = function checkScripts() {
if (window.google.visualization === undefined) {
setTimeout(function () {
checkScripts();
}, 100);
} else {
if (window.google.visualization.arrayToDataTable === undefined) {
setTimeout(function () {
checkScripts();
}, 100);
} else {
loadedGChartScripts = true;
runQueue();
}
}
},
//load google charts scripts
loadGChartScript = function loadGChartScript() {
setTimeout(function () {
window.google.load('visualization', '1', {
'callback': 'console.log("2 sec wait")',
'packages': ['corechart'],
'language': pageInfo.lang });
}, 100);
setTimeout(function () {
checkScripts();
}, 100);
};
return {
init: init
};
}(window, $, EventMgr, App, pageInfo);
//# sourceMappingURL=App.GoogleCharts.js.map
'use strict';
/**
* Wrapper for google charts
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @param {object} pageInfo
*/
/*global App: true*/
App.Captcha = function (window, $, EventMgr, App, pageInfo) {
'use strict';
var init = function init() {
EventMgr.bind('appendCaptcha', appendCaptcha);
};
function appendCaptcha(e, d) {
var id = d.id,
node = App.Dom.byId(id);
if (window.grecaptcha && typeof window.grecaptcha.render === 'function' && node) {
if (node.innerHTML === '') {
renderCaptcha(node);
} else {
//if doesnt rerender tab after refresh
setTimeout(function () {
appendCaptcha(e, d);
}, 100);
}
} else {
appendScript(node);
}
}
function appendScript(node) {
var file = 'https://www.google.com/recaptcha/api.js';
App.Common.required(file, renderCaptcha, node);
}
function renderCaptcha(node) {
if (node) {
window.grecaptcha.render(node, { sitekey: node.getAttribute('data-sitekey') });
}
}
return {
init: init
};
}(window, $, EventMgr, App, pageInfo);
//# sourceMappingURL=App.Captcha.js.map
'use strict';
/**
* Модуль обрабатывает ссылки на документацию
*
*/
var App = App || {};
App.Help = function (window, $, EventMgr) {
'use strict';
var init = function init() {
EventMgr.on($mainWrapper(), helpLinkSelector, 'click', showHelp);
},
$mainWrapper = function $mainWrapper() {
return $('#main-wrapper');
},
helpLinkSelector = '.help',
showHelp = function showHelp(e) {
var type = this.getAttribute('data-help-type'),
helpChain = this.getAttribute('data-help'),
func = $('.tab-content_st_active').attr('data-func'),
url;
e = e || window.event;
e.preventDefault();
if (type - 0 === 2 || type === 'default') {
window.open(pageInfo.url + '?func=help&topic=' + func + '&path=' + helpChain + '&newwindow=yes');
} else if (type === 'external') {
url = this.getAttribute('data-help-func');
App.u.openInNewWindow(url);
}
};
return {
init: init
};
}(window, $, EventMgr);
//# sourceMappingURL=App.Help.js.map
'use strict';
/**
* Модуль отвечает за отображение хинтов
* @param {object} window global object
* @param {object|function} $ jQuery
* @param {object} EventMgr Event manager
* @param {object} App Application
*/
/*global App:true*/
App.Hint = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
EventMgr.on($mainWrapper(), hintItemSelector, 'mouseover', hintShowHandler);
EventMgr.on($mainWrapper(), '.i-text-content', 'mouseover', hintInListShowHandler);
EventMgr.on($mainWrapper(), hintActiveItemSelector, 'mouseover', hintActiveShowHandler);
EventMgr.bind('hintActiveShowHandler', hintActiveShowHandler);
EventMgr.on($mainWrapper(), hintMenuItemSelector, 'mouseover', hintShowHandler);
EventMgr.on($mainWrapper(), hintItemSelector, 'mouseout', hintHideHandler);
EventMgr.on($mainWrapper(), '.i-text-content', 'mouseout', hintHideHandler);
EventMgr.on($mainWrapper(), previewItemSelector, 'mouseover', previewShowHandler);
EventMgr.on($mainWrapper(), previewItemSelector, 'mouseout', hintHideHandler);
EventMgr.on($mainWrapper(), hintActiveItemSelector, 'mouseout', hintHideHandler);
EventMgr.on($mainWrapper(), hintMenuItemSelector, 'mouseout', hintHideHandler);
EventMgr.on($mainWrapper(), hintBoxSelector, 'mouseover', hintShow);
EventMgr.on($mainWrapper(), hintBoxSelector, 'mouseout', hintHide);
EventMgr.on($body(), tipCloseSelector, 'click', closeTipByCross);
//EventMgr.on($body(), tipCloseCrossSelector, 'click', closeTipByCross);
EventMgr.bind('showHintMap', showHintMap);
EventMgr.bind('forceShowHint', forceShowHint);
EventMgr.bind('hideHint', hintHide);
EventMgr.bind('stopShowHint', stopShowHint);
EventMgr.bind('tabLoading', hintHide);
EventMgr.bind('closeTabEvent', hintHide);
EventMgr.bind('ajaxResponseHint', updateHint);
EventMgr.on('.force-hint-flag', '.force-hint', 'focus', showForceHint);
EventMgr.on('.force-hint-flag', '.force-hint', 'blur', forcehintHide);
EventMgr.bind('verticalScroll', checkPosition);
EventMgr.bind('showTips', showTips);
EventMgr.bind('loadPage', checkTipsForDesktop);
EventMgr.bind('updateTipPosition', updateTipPosition);
},
$mainWrapper = function $mainWrapper() {
return App.u.selectorCache('#main-wrapper');
},
$body = function $body() {
return App.u.selectorCache('#main-wrapper');
},
hintItemSelector = '.hint',
tipCloseSelector = '.b-tip',
tipCloseCrossSelector = '.b-tip__close',
pageInfo = window.pageInfo,
previewItemSelector = '#modal1-img li',
hintActiveItemSelector = '.acthint',
$hintBoxFn = function $hintBoxFn() {
return $('#hint');
},
$hintBoxInnerFn = function $hintBoxInnerFn() {
return $('#hint-inner');
},
hintBoxSelector = '#hint',
//$ elem inner hint
$$hintBoxInner,
$$hintBox,
hintMenuItemSelector = '.overwidth',
timer,
hideTimer,
lastSelf,
/**
* Force show hint when form elem in focus
* @param {object} e
* @this HTML Node
*/
showForceHint = function showForceHint(e) {
clearTimeout(hideTimer);
var $srcElem = $(this),
hintField = $srcElem.parents('.i-form__item').find('.field-help'),
self = hintField;
if (hintField.length > 0 && hintGetContent(self, false)) {
setTimeout(function () {
setHintPosition(self, true);
hintShow(undefined, true);
}, 1);
}
lastSelf = $srcElem;
},
forcehintHide = function forcehintHide() {
$$hintBox = $$hintBox || $hintBoxFn();
$$hintBox.css('visibility', '').removeClass('active');
},
checkPosition = function checkPosition() {
if ($$hintBox.hasClass('active')) {
if (lastSelf && lastSelf.hasClass('force-hint')) {
var hintField = lastSelf.parents('.l-form__row').find('.field-help');
if (hintField.offset().top < 142) {
forcehintHide();
} else {
setHintPosition(hintField, true);
}
}
}
},
//prevent show hint
stopShowHint = function stopShowHint() {
clearTimeout(timer);
},
/**
* Hint handler for DCMap
* get props of element and show it as list
* @param {object} e
*/
showHintMap = function showHintMap(e) {
var data = e.originalEvent.detail.props,
self = $(e.originalEvent.detail.elem),
hint = '<ul>',
msg = data.msg,
key,
$$hintBoxInner = $$hintBoxInner || $hintBoxInnerFn();
for (key in data) {
if (msg[key]) {
hint += '<li>' + '<label class="b-hint-line__label">' + msg[key] + ':</label>' + ' ' + data[key] + '</li>';
}
}
hint += '</ul>';
$$hintBoxInner.html(hint);
//@todo least 200ms mouseover don't show hint
timer = setTimeout(function () {
hintShow(self);
}, 500);
lastSelf = null;
},
/**
* Show hint like preview for development mode
* @param {object} e
* @this {object} HTML Node
*/
previewShowHandler = function previewShowHandler(e) {
var self = $(this),
imgName = this.getAttribute('data-val'),
text,
style,
src;
$$hintBoxInner = $$hintBoxInner || $hintBoxInnerFn();
if (!imgName) {
return;
}
src = 'src="/manimg/common/img/' + imgName + '.png"';
style = 'style="min-height: 16px; min-width: 16px;"';
text = '<img class="preview-icon" ' + style + ' ' + src + ' ></img>';
$$hintBoxInner.html(text);
//check for shadow
setHintPosition(self, false);
//@todo least 200ms mouseover don't show hint
timer = setTimeout(function () {
hintShow();
}, 500);
},
/**
* show hint for element with custom hint
* @param {object} e
* @param {object} data
*/
forceShowHint = function forceShowHint(e, data) {
var elem = data.elem,
hint = data.hint,
self = $(elem);
$$hintBoxInner = $$hintBoxInner || $hintBoxInnerFn();
$$hintBoxInner.html(hint);
setHintPosition(self, false);
hintShow();
lastSelf = null;
},
/**
* Get hint content for view
* find out hint content in elem attribute
* @param {object} self jQuery object of element
* @param {boolean} active Flag for active hint
* @return {boolean}
*/
hintGetContent = function hintGetContent(self, active) {
var state,
text,
shadow,
row,
mn,
overwidth = false;
$$hintBoxInner = $$hintBoxInner || $hintBoxInnerFn();
//get hint content
state = self[0].getAttribute('data-state');
if (state) {
text = self[0].getAttribute('data-hint-' + state);
if (!text) {
text = self[0].getAttribute('data-hint');
}
} else {
text = self[0].getAttribute('data-hint');
}
mn = self[0].getAttribute('data-hint-mn');
if (active) {
text = pageInfo.loading;
}
if (!text) {
if (self.hasClass('overwidth')) {
text = self[0].innerText || self[0].firstChild.nodeValue || self.html();
overwidth = true;
} else {
return false;
}
}
//filtred text
text = window.filterXSS(text);
shadow = self.hasClass('shadow');
if (shadow) {
row = self.parents('tr.row-shadow');
if (!row.length) {
text = text.replace(/<span class=['"]hint-.*/g, '');
}
}
$$hintBoxInner.html(text);
if (mn) {
if (!String(mn).match('hint')) {
mn = 'hint_' + mn;
}
$$hintBoxInner.attr('data-mn', mn);
} else {
$$hintBoxInner.attr('data-mn', null);
}
lastSelf = null;
return true;
},
/**
* Show hint handler
* call function for show hint
* @param {object} e
* @param {boolean} active Flag for active hint
* @this HTML Node
*/
hintShowHandler = function hintShowHandler(e, active) {
var self = $(this);
if (hintGetContent(self, active)) {
setHintPosition(self, false);
//@todo least 200ms mouseover don't show hint
timer = setTimeout(function () {
hintShow();
}, 500);
}
lastSelf = null;
//if hint on parent
if (e.stopPropagation) {
e.stopPropagation();
}
},
hintInListShowHandler = function hintInListShowHandler(e) {
if (this.className.match(/overwidth/)) {
hintShowHandler.apply(this, [e]);
} else {
var width = this.offsetWidth,
scrollWidth = this.scrollWidth - 1;
if (width < scrollWidth) {
this.className += ' overwidth';
hintShowHandler.apply(this, [e]);
}
}
},
/**
* Set position for hint
* detect best position for view hint
* @param {object} self jQuery object of element
* @param {boolean} fixed flag for fixed position of hint (for form items)
*/
setHintPosition = function setHintPosition(self, fixed, box, boxInner, forceRight, forceBottom) {
var PADDING = 15,
heightTail = 10,
marginElem = 3,
N3 = 7,
N4 = 30,
$hintBoxInner,
$hintBox;
if (box && boxInner) {
$hintBoxInner = boxInner;
$hintBox = box;
} else {
if (!$$hintBox || !$$hintBoxInner) {
$$hintBoxInner = $hintBoxInnerFn();
$$hintBox = $hintBoxFn();
}
$hintBoxInner = $$hintBoxInner;
$hintBox = $$hintBox;
}
//calculate hint position
var heightHintBox = $hintBoxInner[0].offsetHeight,
widthElem = self.width(),
heightElem,
selfOffset = self.offset(),
//top position of element
topElem = selfOffset.top,
//left position of element
leftElem = selfOffset.left,
docWidth = $('body').width(),
left,
top,
topFlag = false,
rightFlag = false,
LEFT_BORDER;
//check for svg elem
if (widthElem === 0 && self && self[0]) {
widthElem = self[0].getBoundingClientRect().width;
}
$hintBoxInner.removeClass('b-hint__inner_right_fixed' + ' b-hint__inner_right' + ' b-hint__inner_top' + ' b-hint__inner_top_right' + ' b-hint__inner_left');
//top of element hinting
if (!fixed) {
top = topElem - heightHintBox - heightTail - marginElem - PADDING;
left = leftElem + widthElem / 2 - N3;
LEFT_BORDER = 300;
} else {
top = topElem - PADDING;
left = leftElem + widthElem + marginElem + heightTail;
LEFT_BORDER = 250;
}
//check for left border
if (docWidth - left < LEFT_BORDER || forceRight) {
$hintBoxInner.addClass('b-hint__inner_right');
var right = docWidth - leftElem - N4;
rightFlag = true;
$hintBox.css('right', right + 'px');
$hintBox.css('left', '');
if (fixed) {
top = topElem - heightHintBox - heightTail - marginElem - PADDING;
}
} else {
if (fixed) {
$hintBoxInner.addClass('b-hint__inner_right_fixed');
}
$hintBoxInner.addClass('b-hint__inner_left');
$hintBox.css('left', left + 'px');
$hintBox.css('right', '');
}
//check for top border
if (heightHintBox > top || forceBottom) {
heightElem = self.outerHeight();
//check for svg elem
if (heightElem === 0 && self && self[0]) {
heightElem = self[0].getBoundingClientRect().height;
}
top = self.offset().top + heightElem + heightTail - PADDING;
if (rightFlag) {
$hintBoxInner.addClass('b-hint__inner_top_right');
} else {
$hintBoxInner.addClass('b-hint__inner_top');
}
}
$hintBox.css('top', top + 'px');
},
currentHintId,
/**
* Active hint handler
* get request for content hint
* @param {object} e
* @this {object}
*/
hintActiveShowHandler = function hintActiveShowHandler(e) {
var _this = this;
if (e.originalEvent.detail.elem) {
_this = e.originalEvent.detail.elem;
}
var self = $(_this),
tabId = $('.tab-content_st_active').attr('data-tabid'),
elid = self.parents('tr').attr('data-elid') || _this.getAttribute('data-elid'),
pName = _this.getAttribute('data-name'),
value = _this.getAttribute('data-value'),
hintfunc = _this.getAttribute('data-hintfunc');
//for acthint in col
if (!pName) {
var index = self.closest('td').index(),
th = self.closest('table').find('th')[index],
pName = th.getAttribute('data-colname');
}
if (hintfunc) {
currentHintId = tabId + value + elid + pName;
var params = {
func: hintfunc,
elid: elid,
type: pName
};
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: params,
invar: {
hintTabId: tabId,
hintElid: elid,
hintPName: pName,
hintValue: value,
self: self },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponseHint',
queue: 'actHint' + tabId,
failfunc: 'failCommonAjaxResponse' });
} else {
currentHintId = tabId + value + elid + pName;
EventMgr.trigger('getActiveHint', {
tabId: tabId,
elid: elid,
pName: pName,
value: value,
self: self });
}
hintShowHandler.apply(_this, [{}, true]);
e.preventDefault();
e.stopPropagation();
},
/**
* Update hint content when got response of active hint
* @param {object} e
* @param {object} data
*/
updateHint = function updateHint(e, data) {
var elid = data.hintElid,
tabId = data.hintTabId,
pName = data.hintPName,
value = data.hintValue,
self = data.self,
id = tabId + value + elid + pName,
textValue;
if (currentHintId === id) {
if (!data.hint || data.hint === '') {
textValue = 'Oops..';
} else {
textValue = window.htmlDecode(data.hint);
}
textValue = window.filterXSS(textValue);
$$hintBoxInner.html(textValue);
setHintPosition(self, false);
}
},
/**
* Show HTML Node of hint
* @param {object} self jQuery object of element
* @param {boolean} force Force show hint flag
*/
hintShow = function hintShow(self, force) {
$$hintBoxInner = $$hintBoxInner || $hintBoxInnerFn();
$$hintBox = $$hintBox || $hintBoxFn();
//check for hint show by self
if (self !== undefined && typeof self.width === 'function') {
setHintPosition(self, false);
}
$$hintBox.addClass('active');
if (force) {
$$hintBox.css('visibility', 'visible');
} else {
$$hintBox.css('visibility', '');
}
clearTimeout(timer);
},
hintHideHandler = function hintHideHandler(e) {
hintHide();
clearTimeout(timer);
},
/**
* Hide HTML Node of hint
*/
hintHide = function hintHide() {
$$hintBox = $$hintBox || $hintBoxFn();
$$hintBox.removeClass('active');
$$hintBox.find('.hint-cont').html();
currentHintId = '';
clearTimeout(timer);
},
renderTip = function renderTip(tipObject, inTab) {
var html = templates.tip(tipObject);
if (inTab) {
$('.tab-content_st_active').append(html);
} else {
$body().append(html);
}
return $('.b-tip_name_' + tipObject.name);
},
actTip,
/**
* show Tips
* @param {object} e
* @param {object} data
*
* find target element by classname i-tip-target_st_NAME
* */
showTips = function showTips(e, data) {
actTip = data;
var tips = data.tips,
inTab = data.inTab,
tabId = data.tabId,
l = tips.length,
sameModule = data.sameModule,
$target,
$tip,
TABMARGINTOP = 69,
TABMARGINLEFT = 205,
forceRight = false,
forceBottom = false;
//show only one tip
if ($('.b-tip').length) {
return;
}
while (l--) {
//check for exist this tip
if ($('.b-tip_name_' + tips[l].name).length) {
continue;
}
//check for sameModule load form menu
if (tips[l].name === 'title_reload' && !sameModule) {
continue;
}
if (tips[l].name === 'mbar_pin') {
inTab = false;
}
if (tips[l].name === 'tabs_close') {
if ($('.tab-group').length < 9) {
continue;
}
inTab = false;
}
//show inside tab
if (inTab) {
$target = $('#cont-' + tabId + ' .i-tip-target_st_' + tips[l].name);
} else {
$target = $('.i-tip-target_st_' + tips[l].name);
}
//show textarea only when it focused
if (tips[l].name === 'textarea_resize' && !data.textareaTip) {
$('.b-textarea').bind('focus', showTipsForTextarea);
textareaTip = [tips[l]];
continue;
} else if (data.textareaTip) {
var $textarea = $('.b-textarea');
if ($target.length) {
var $targetTextarea = $target.prev();
if ($targetTextarea.length) {
var height = $targetTextarea[0].offsetHeight,
scrollHeight = $targetTextarea[0].scrollHeight - 1;
if (height < scrollHeight) {
$textarea.off('focus', showTipsForTextarea);
forceBottom = true;
} else {
continue;
}
}
}
}
//force bottom position for new_btn tip
if (tips[l].name === 'btn_new') {
forceBottom = true;
}
if ($target.length) {
//check for visibility
if ($target[0].offsetWidth === 0 || $target[0].offsetHeight === 0) {
continue;
}
$tip = renderTip(tips[l], inTab);
setHintPosition($target, false, $tip, $tip.find('.b-tip__inner'), forceRight, forceBottom);
//correct position inside tab
if (inTab) {
$tip.css('top', parseFloat($tip.css('top')) - TABMARGINTOP);
var left;
if ($tip.length) {
left = $tip[0].style.left;
}
if (left) {
$tip.css('left', parseFloat(left) - TABMARGINLEFT);
}
}
$target.on('click', $.proxy(closeTipByCross, {
elem: $tip.find('.b-tip__close') }));
}
}
},
textareaTip = [],
showTipsForTextarea = function showTipsForTextarea(e) {
var tabId = this.getAttribute('data-tabid'),
tips = textareaTip;
EventMgr.trigger('showTips', {
tips: tips,
inTab: true,
textareaTip: true,
tabId: tabId });
},
closeTipByCross = function closeTipByCross(e) {
var self = this,
$self = $(this);
if (this.elem && this.elem[0]) {
this.elem.trigger('click');
return;
}
var id = self.getAttribute('data-name');
if (!id) {
id = $self.find('.b-tip__close').attr('data-name');
} else {
$self = $self.closest('.b-tip');
}
var param = {
func: 'tip',
elid: id
};
EventMgr.trigger('ajaxRequest', {
param: param,
type: 'get',
outtype: 'json',
trfunc: 'DoNothing',
queue: 'noqueue' });
//$('.i-tip-target_st_' + id).off('click');
actTip = null;
$self.remove();
},
closeTip = function closeTip(e) {
$(this).remove();
actTip = null;
},
checkTipsForDesktop = function checkTipsForDesktop(e, data) {
if (pageInfo && pageInfo.tips) {
//timeout for make all objects in theme
setTimeout(function () {
showTips.apply(window, [{}, { tips: pageInfo.tips }]);
}, 1500);
}
},
/**
* update position for Tip
* @param {object} e
* @param {object} data
*/
updateTipPosition = function updateTipPosition(e, data) {
if (actTip) {
$('.b-tip').remove();
showTips.apply(window, [{}, actTip]);
}
};
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.Hint.js.map
'use strict';
/**
* App.HorizontScroll
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
App.HorizontScroll = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
EventMgr.obind($rB(), 'mousedown', keyDownRight);
EventMgr.obind($lB(), 'mousedown', keyDownLeft);
EventMgr.obind($rB(), 'click', clickRight);
EventMgr.obind($lB(), 'click', clickLeft);
EventMgr.obind($window(), 'resize', getSizeElems);
EventMgr.bind('loadPage', getSizeElems);
EventMgr.bind('loadPage', start);
EventMgr.bind('appended', checkSize);
EventMgr.bind('switchTab', checkSize);
EventMgr.bind('closeTab', checkSize);
},
delta = 10,
cWidth = '',
extra = 0,
moveVar = false,
intId = null,
intMLId = null,
$window = function $window() {
return $(window);
},
$obj = function $obj() {
return $('#tab-cont');
},
$rB = function $rB() {
return $('#tab-mover-left');
},
$lB = function $lB() {
return $('#tab-mover-right');
},
start = function start() {
$obj().css('margin-left', '0px');
},
getSizeElems = function getSizeElems() {
var offsetWidth = document.body.offsetWidth;
cWidth = offsetWidth - 205 - 108 - 50;
},
keyDownRight = function keyDownRight(e) {
e = e || window.event;
clearInterval(intMLId);
document.onmouseup = cancelMove;
intId = setInterval(function () {
move(10);
}, 10);
if (e.preventDefault) {
e.preventDefault();
}
},
keyDownLeft = function keyDownLeft(e) {
e = e || window.event;
clearInterval(intMLId);
document.onmouseup = cancelMove;
intId = setInterval(function () {
move(-10);
}, 10);
if (e.preventDefault) {
e.preventDefault();
}
},
clickRight = function clickRight(e) {
e = e || window.event;
move(delta);
if (e.preventDefault) {
e.preventDefault();
}
},
clickLeft = function clickLeft(e) {
e = e || window.event;
move(delta);
if (e.preventDefault) {
e.preventDefault();
}
},
checkSize = function checkSize(e, data) {
var tabId = data.tabId;
setTimeout(function () {
checkSizeFunc(tabId);tabId = null;
}, 50);
},
checkSizeFunc = function checkSizeFunc(tabId) {
getSizeElems();
var objWidth = $obj().width(),
$body = $('body');
extra = objWidth - cWidth;
if (objWidth > cWidth) {
$body.addClass('tabscrollactive');
focusActiveTab(tabId);
} else {
$body.removeClass('tabscrollactive');
$obj().css('margin-left', '0');
}
},
focusActiveTab = function focusActiveTab(tabId) {
clearInterval(intMLId);
if (tabId === undefined) {
return;
}
var activeTab = App.Dom.byId(tabId);
if (activeTab === null) {
return;
}
var width = activeTab.offsetWidth,
left = activeTab.offsetLeft,
allWidth = width + left,
moveLen;
if (cWidth < allWidth) {
moveLen = allWidth - cWidth - parseInt($obj().css('margin-left'), 10);
intMLId = setInterval(function () {
moveLeft(moveLen);
}, 10);
} else if (left < 25) {
moveLen = -(parseInt($obj().css('margin-left'), 10) - left + 25);
//25 is left mover + padding
intMLId = setInterval(function () {
moveRight(moveLen);
}, 10);
}
activeTab = null;
},
moveLeft = function moveLeft(moveLen) {
var curMargin = -parseInt($obj().css('margin-left'), 10);
if (curMargin > moveLen) {
clearInterval(intMLId);
} else {
$obj().css('margin-left', -curMargin - 10 + 'px');
}
},
moveRight = function moveRight(moveLen) {
var curMargin = -parseInt($obj().css('margin-left'), 10);
if (curMargin < moveLen || -curMargin > 0) {
clearInterval(intMLId);
} else {
$obj().css('margin-left', -curMargin + 10 + 'px');
}
},
move = function move(delta) {
if (extra) {
var curMar = parseInt($obj().css('margin-left'), 10),
futMar = curMar + delta;
if (futMar < 0) {
if (extra + futMar > 0) {
$obj().css('margin-left', futMar + 'px');
} else {
$obj().css('margin-left', -extra + 'px');
}
if (moveVar) {
clearInterval(intId);
}
} else {
$obj().css('margin-left', '0px');
if (moveVar) {
clearInterval(intId);
}
}
}
},
cancelMove = function cancelMove() {
moveVar = false;
clearInterval(intId);
};
return {
init: init,
checkSizeFunc: checkSizeFunc,
move: move
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.HorizontScroll.js.map
'use strict';
//hotkey module
App.HotKeys = function (window, $, EventMgr) {
'use strict';
var init = function init() {
EventMgr.obind($(document), 'keydown', hotKeyHandler);
EventMgr.obind($(document), 'keyup', removeKeyUp);
EventMgr.obind($(window), 'focus', removeAllKeys);
},
hotkeys = {},
len = 0,
ZERO = 0,
ESC_KEY = 27,
CTRL_KEY = 17,
SHIFT_KEY = 16,
ENTER_KEY = 13,
SPACE = 32,
UP = 38,
DOWN = 40,
LEFT = 37,
RIGHT = 39,
M = 77,
A = 65,
F = 70,
X = 88,
Y = 89,
Z = 90,
B = 66,
C = 67,
V = 86,
N = 78,
S = 83,
D = 68,
G = 71,
H = 72,
J = 74,
K = 75,
L = 76,
Q = 81,
W = 87,
E = 69,
R = 82,
T = 84,
U = 85,
I = 73,
O = 79,
P = 80,
keyDic = {
77: 'M',
65: 'A',
70: 'F',
88: 'X',
89: 'Y',
90: 'Z',
66: 'B',
67: 'C',
86: 'V',
78: 'N',
83: 'S',
68: 'D',
71: 'G',
72: 'H',
74: 'J',
75: 'K',
76: 'L',
81: 'Q',
87: 'W',
69: 'E',
82: 'R',
84: 'T',
85: 'U',
73: 'I',
79: 'O',
80: 'P'
},
keys = {},
hotKeyHandler = function hotKeyHandler(e) {
e = e || window.event;
var codeKey = e.which || e.keyCode;
keys[codeKey] = true;
len++;
if (e.ctrlKey) {
keys[CTRL_KEY] = true;
}
if (e.shiftKey) {
keys[SHIFT_KEY] = true;
}
//esc
if (codeKey === ESC_KEY) {
EventMgr.trigger('escKeyUp', { e: e });
e.preventDefault();
//enter
} else if (codeKey === ENTER_KEY) {
EventMgr.trigger('enterKeyUp', { e: e });
//CTRL + SHIFT + M
} else if (keys[CTRL_KEY] && keys[SHIFT_KEY] && keys[M]) {
EventMgr.trigger('comboCtrlShiftMKeyUp', { codeKey: codeKey });
e.preventDefault();
//CTRL + SHIFT + A
} else if (keys[CTRL_KEY] && keys[SHIFT_KEY] && keys[A]) {
EventMgr.trigger('comboCtrlShiftAKeyUp', { codeKey: codeKey });
e.preventDefault();
//CTRL + SHIFT + F
} else if (keys[CTRL_KEY] && keys[SHIFT_KEY] && keys[F]) {
EventMgr.trigger('comboCtrlShiftFKeyUp', { codeKey: codeKey });
e.preventDefault();
//CTRL + SHIFT + Z
} else if (keys[CTRL_KEY] && keys[SHIFT_KEY] && keys[Z]) {
EventMgr.trigger('comboCtrlShiftZKeyUp', { codeKey: codeKey });
e.preventDefault();
//CTRL + SHIFT + X
} else if (keys[CTRL_KEY] && keys[SHIFT_KEY] && keys[X]) {
EventMgr.trigger('comboCtrlShiftXKeyUp', { codeKey: codeKey });
e.preventDefault();
//SPACE
} else if (keys[SPACE]) {
EventMgr.trigger('spaceKeyUp');
window.scrollTo(0, 0);
} else if (keys[UP]) {
EventMgr.trigger('upKeyUp', { codeKey: codeKey, shiftKey: keys[SHIFT_KEY], ctrl: keys[CTRL_KEY] });
} else if (keys[DOWN]) {
EventMgr.trigger('downKeyUp', { codeKey: codeKey, shiftKey: keys[SHIFT_KEY], ctrl: keys[CTRL_KEY] });
} else if (keys[LEFT]) {
EventMgr.trigger('leftKeyUp', { codeKey: codeKey, shift: keys[SHIFT_KEY], ctrl: keys[CTRL_KEY] });
} else if (keys[RIGHT]) {
EventMgr.trigger('rightKeyUp', { codeKey: codeKey, shift: keys[SHIFT_KEY], ctrl: keys[CTRL_KEY] });
//check for hotkey in toolbtn
} else {
var key = null;
if (keyDic[codeKey]) {
key = keyDic[codeKey];
} else {
for (var keyVar in keys) {
if (keyDic[keyVar]) {
key = keyDic[keyVar];
break;
}
}
}
EventMgr.trigger('otherKeyUp', { keys: $.extend({}, keys), key: key, len: len, shift: keys[SHIFT_KEY], ctrl: keys[CTRL_KEY] });
}
codeKey = null;
},
removeKeyUp = function removeKeyUp(e) {
var codeKey = e.which || e.keyCode;
if (keys[ZERO]) {
delete keys[ZERO];
len--;
}
if (keys[codeKey]) {
delete keys[codeKey];
len--;
}
if (e.ctrlKey) {
delete keys[CTRL_KEY];
len--;
}
},
removeAllKeys = function removeAllKeys(e) {
keys = {};
len = 0;
};
return {
init: init
};
}(window, $, EventMgr);
//# sourceMappingURL=App.HotKeys.js.map
'use strict';
//module keepalive for keep session
App.KeepAlive = function (window, $, EventMgr) {
'use strict';
var init = function init() {
EventMgr.bind('loadPage', start);
},
keepAlive = function keepAlive() {
var param = { func: 'keepalive' };
EventMgr.trigger('ajaxRequest', { url: pageInfo.url, param: param, trfunc: 'DoNothing', queue: 'noqueue' });
},
start = function start() {
setInterval(function () {
keepAlive();
}, 900001);
};
return {
init: init
};
}(window, $, EventMgr);
//# sourceMappingURL=App.KeepAlive.js.map
'use strict';
/**
* App.List
* manipulation with list
* @param {object} window global object
* @param {object|function} $ jQuery
* @param {object} EventMgr Event manager
* @param {object} App Application
* */
App.List = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
EventMgr.bind('clickedGroupItem', fillActiveRows);
EventMgr.bind('listMultiSelect, mapMultiSelect', activateToolbarGroup);
EventMgr.bind('listSelect, mapSelect', activateTollbarAll);
EventMgr.bind('listUnSelect, mapUnSelect', deactivateToolbarAll);
EventMgr.bind('switchTab', changeActTabId);
EventMgr.bind('listMultiSelect,listSelect,listLiveFound,listUnSelect', statusBarHandler);
EventMgr.on('#content', '.content .list_table tbody tr', 'click', rowSelect);
EventMgr.on('#content', $tableTd(), 'mousedown', preventSelectTd);
EventMgr.bind('hideToolBtn', toolBtnHide);
EventMgr.bind('showToolBtn', toolBtnShow);
EventMgr.bind('appendList', forceRowSelect);
EventMgr.bind('appendList', bindMoveBtn);
EventMgr.bind('updatedTableHeight', forceScrollTo);
EventMgr.bind('comboCtrlShiftAKeyUp', selectAllRow);
EventMgr.on(mainWrapperSel, selectAllSelector, 'click', selectAllRow);
EventMgr.bind('comboCtrlShiftFKeyUp', focusOnSearch);
EventMgr.bind('updateSelected', toolbarHandlerFuncWrapper);
EventMgr.on(mainWrapperSel, tableRowSelector, 'touchstart', swipeDetectorTouchStart);
EventMgr.bind('updateTotalList', updateStatusBarTotal);
EventMgr.bind('updateTotalWithConvert', updateTotalWithConvert);
EventMgr.bind('upKeyUp', arrowKeyUpHandler);
EventMgr.bind('downKeyUp', arrowKeyDownHandler);
},
pageInfo = window.pageInfo,
//current tabId (like cont-tab1)!!!
tabId = '',
mainWrapperSel = '#main-wrapper',
tableRowSelector = '.list_table tr',
selectAllSelector = 'a.select-all',
/**
* toolbar rows
* @param {String} tabIdParam TabId of tab
* @return {object} jQuery wrap nodes
*/
$tableRow = function $tableRow(tabIdParam) {
var tabId = '';
if (tabIdParam) {
tabId = '#' + tabIdParam + ' ';
}
return $(tabId + '.content .list_table tbody tr');
},
//grouping actions
$toolbarBtnGroup = function $toolbarBtnGroup() {
return $('#' + tabId + ' .toolbar-button__item-img.tb-group').parent();
},
//not grouping actions for action
$toolBarBtnNotGroup = function $toolBarBtnNotGroup() {
return $('#' + tabId + ' .toolbar-button__item-img.tb-not-group').parent();
},
$toolBarBtnNoSelEdit = function $toolBarBtnNoSelEdit() {
return $('#' + tabId + ' .toolbar-button__item-img.tb-nosel').parent();
},
$tableTd = function $tableTd() {
return 'table td';
},
//all toolbar btns
$toolbarBtnAll = function $toolbarBtnAll() {
return $('#' + tabId + ' .toolbar-button');
},
//prevent selected td in ff
preventSelectTd = function preventSelectTd(e) {
if (e.ctrlKey || e.metaKey || e.shiftKey) {
e.preventDefault();
}
},
focusOnSearch = function focusOnSearch() {
$('.tab-content_st_active .itsearch').focus();
},
changeActTabId = function changeActTabId(e, data) {
tabId = 'cont-' + data.tabId;
},
bindMoveBtn = function bindMoveBtn(e, data) {
var curTabId = data.tabId;
setTimeout(function () {
EventMgr.trigger('bindHorizScrollControl', {
leftBtn: '#cont-' + curTabId + ' .toolbar__btn-move_dir_left',
rightBtn: '#cont-' + curTabId + ' .toolbar__btn-move_dir_right',
innerBox: '#cont-' + curTabId + ' .toolbar__inner',
id: curTabId,
step: 50
});
}, 50);
},
selectAllRow = function selectAllRow(e) {
var rows = $('.tab-content_st_active .list_table tbody tr'),
sRows = $('.tab-content_st_active .list_table tbody tr.selected:not(".filtred")'),
len = rows.length,
sLen = sRows.length,
firstRow;
e = e || {};
if (len > 0) {
firstRow = rows[0];
if (rows[0].className.match('back-btn')) {
firstRow = rows[1];
sLen += 1;
}
if (sLen === len) {
rowSelect.apply(firstRow, [e]);
rowSelect.apply(firstRow, [e, true]);
} else {
rows.removeClass('last-selected');
rows.removeClass('first-selected');
$(rows[len - 1]).addClass('last-selected');
e.shiftKey = true;
rowSelect.apply(firstRow, [e]);
}
}
if (e.preventDefault) {
e.preventDefault();
}
},
scrollToSelectRow = function scrollToSelectRow(row, isNextRow, tabId) {
var MAGIC_NUMBER = 22,
offsetTop = row ? row.offsetTop : 0,
scrollId = 'ltwr-' + tabId,
boxHeight;
if (offsetTop) {
offsetTop = isNextRow ? offsetTop + MAGIC_NUMBER : offsetTop - MAGIC_NUMBER;
boxHeight = parseInt($('#ltwr-' + tabId).css('height'), 10);
ScrollHandler.forceMoveSelectItem(scrollId, offsetTop, boxHeight, 22);
}
},
selectFirstRow = function selectFirstRow() {
var rows = $('.tab-content_st_active .list_table tbody tr'),
firstRow = rows[0];
if (firstRow && firstRow.className) {
if (firstRow.className.match('back-btn')) {
firstRow = rows[1];
}
rowSelect.apply(firstRow, [{}]);
}
},
arrowKeyUpHandler = function arrowKeyUpHandler(e, d) {
if (window.document.activeElement && window.document.activeElement.getAttribute('type')) {
return;
}
var actTab = $('.tab-content_st_active'),
type = actTab.attr('data-tab-type');
if (type === 'list') {
var $sRows = $('.tab-content_st_active .list_table tbody tr.selected:not(".filtred")'),
$prevRow;
if ($sRows.first().hasClass('first-selected')) {
$prevRow = $sRows.last().prev();
} else {
$prevRow = $sRows.prev();
}
if ($prevRow.length) {
rowSelect.apply($prevRow[0], [d]);
scrollToSelectRow($prevRow[0], false, actTab.attr('data-tabid'));
} else if (!$sRows.length) {
selectFirstRow();
}
}
},
arrowKeyDownHandler = function arrowKeyDownHandler(e, d) {
if (window.document.activeElement && window.document.activeElement.getAttribute('type')) {
return;
}
var actTab = $('.tab-content_st_active'),
type = actTab.attr('data-tab-type');
if (type === 'list') {
var $sRows = $('.tab-content_st_active .list_table tbody tr.selected:not(".filtred")'),
$nextRow;
if ($sRows.first().hasClass('first-selected')) {
$nextRow = $sRows.last().next();
} else {
$nextRow = $sRows.next();
}
if ($nextRow.length) {
rowSelect.apply($nextRow[0], [d]);
scrollToSelectRow($nextRow[0], true, actTab.attr('data-tabid'));
} else if (!$sRows.length) {
selectFirstRow();
}
}
},
//handler of selecting rows
rowSelect = function rowSelect(e, fakeCtrl) {
var self = $(this),
tabIdOrg = self.parents('.tab-content').attr('data-tabid'),
tableRows,
i,
k,
elem,
lastId,
firstId,
curId,
lastIdElem,
smthg;
e = e || window.event;
tabId = 'cont-' + tabIdOrg;
if (tabIdOrg === 'tab0') {
tabId = self.parents('.block-table').attr('id');
}
tableRows = $tableRow(tabId);
//not select if nothing do with
if (!self.attr('data-elid')) {
if (!e.ctrlKey && !e.metaKey && !e.shiftKey && !fakeCtrl) {
tableRows.removeClass('selected').removeClass('last-selected').removeClass('first-selected');
}
return;
}
//check for link in changelog
if (e.target && e.target.nodeName === 'A') {
return true;
}
if (!e.ctrlKey && !e.metaKey && !e.shiftKey && !fakeCtrl) {
tableRows.removeClass('selected').removeClass('last-selected').removeClass('first-selected');
self.addClass('selected').addClass('last-selected');
//with SHIFT KEY
} else if (e.shiftKey) {
tableRows.removeClass('selected');
lastIdElem = $('#lt-' + tabIdOrg + ' tr.last-selected');
lastId = lastIdElem.attr('id');
firstId = $('#lt-' + tabIdOrg + ' tr.first-selected').attr('id');
if (!firstId) {
firstId = lastId;
lastIdElem.addClass('first-selected');
}
curId = self.attr('id');
if (firstId === undefined) {
return;
}
firstId = parseInt(firstId.replace('i-', ''), 10);
curId = parseInt(curId.replace('i-', ''), 10);
//go down
i = 0;
k = 0;
if (firstId > curId) {
i = curId;
k = firstId;
//go up
} else {
i = firstId;
k = curId;
}
for (i; i <= k; i++) {
elem = $('tr#i-' + i);
if (elem.attr('data-elid')) {
elem.addClass('selected');
}
}
tableRows.removeClass('last-selected');
self.addClass('last-selected');
// Remove text selection
if (document.selection) {
if (document.selection.type.toLowerCase() !== 'none') {
document.selection.empty();
}
} else if (window.getSelection) {
smthg = window.getSelection();try {
smthg.collapseToStart();
} catch (ex) {}
}
//with CTRL KEY
} else {
//multiselect
tableRows.removeClass('last-selected').removeClass('first-selected');
self.toggleClass('selected').addClass('last-selected');
if (document.selection) {
if (document.selection.type.toLowerCase() !== 'none') {
document.selection.empty();
}
} else if (window.getSelection) {
smthg = window.getSelection();
try {
smthg.collapseToStart();
} catch (ex) {}
}
}
toolbarHandler(tabId);
if (e.preventDefault) {
e.preventDefault();
}
},
toolbarHandlerFuncWrapper = function toolbarHandlerFuncWrapper(e, data) {
if (data.tabId) {
toolbarHandler('cont-' + data.tabId);
}
},
/**
* Toolbar handlers when selecting elements
* @param {String} tabId
*/
toolbarHandler = function toolbarHandler(tabId) {
var len,
toolBtnShow,
toolBtnHide,
toolBtnsRemove,
$selectedRows = $('#' + tabId + ' tr.selected:not(".filtred")');
len = $selectedRows.length;
//trigger events
if (len === 0) {
EventMgr.trigger('listUnSelect', {
tabId: tabId,
len: len,
selectedRows: $selectedRows });
} else if (len > 1) {
EventMgr.trigger('listMultiSelect', {
tabId: tabId,
len: len,
selectedRows: $selectedRows });
} else {
EventMgr.trigger('listSelect', {
tabId: tabId,
len: len,
selectedRows: $selectedRows });
}
//hide showed button
var $showedNodes = $('.toolbtnShow').parent();
if ($showedNodes.hasClass('active')) {
$showedNodes.switchClass('notActive', 'active').attr('data-state', 'disabled');
} else {
$showedNodes.attr('data-state', null);
}
toolBtnShow = $('#' + tabId + ' tr.selected.toolbtn-show:not(".filtred")');
if (toolBtnShow.length > 0) {
EventMgr.trigger('showToolBtn', {
toolBtnShow: toolBtnShow, len: len });
}
toolBtnHide = $('#' + tabId + ' tr.selected.toolbtn-hide:not(".filtred")');
if (toolBtnHide.length > 0) {
EventMgr.trigger('hideToolBtn', { toolBtnHide: toolBtnHide });
}
toolBtnsRemove = $('#' + tabId + ' tr.selected.toolbtn-remove:not(".filtred")');
if (toolBtnsRemove.length > 0) {
toolBtnRemove(toolBtnsRemove);
}
},
//force rowSelect [used in warning about not deleted elems]
forceRowSelect = function forceRowSelect(e, data) {
var tabId = data.tabId,
keyVar,
self;
if (App.Global.warning) {
/* jslint forin: true */
for (keyVar in App.Global.warning) {
self = $('#cont-' + tabId + ' [data-elid="' + App.Common.CSSEscape(keyVar) + '"]');
rowSelect.apply(self, [{}, true]);
}
App.Global.warning = null;
}
if (App.Global.selid) {
var len = App.Global.selid.length;
while (len--) {
self = $('#cont-' + tabId + ' [data-elid="' + App.Common.CSSEscape(App.Global.selid[len]) + '"]');
rowSelect.apply(self, [{}, true]);
}
App.Global.selid = undefined;
}
},
forceScrollTo = function forceScrollTo(e, data) {
var tabId = data.tabId;
if (App.Global.scrollTop) {
setTimeout(function () {
ScrollHandler.scrollTo('ltwr-' + tabId, App.Global.scrollTop, true, true);
App.Global.scrollTop = undefined;
}, 10);
}
},
toolBtnRemove = function toolBtnRemove(elems) {
var l = elems.length,
removeClass;
while (l--) {
removeClass = elems[l].getAttribute('data-remove');
removeClass = String(removeClass).replace(/,\s+$/, '');
$(removeClass).parent().addClass('removed').removeClass('active');
}
},
//disable toolbtn
toolBtnHide = function toolBtnHide(e, data) {
//selected rows
var $toolBtnHide = data.toolBtnHide,
l = $toolBtnHide.length,
len = l,
hideClass,
hides = {},
hideClassArray,
$targetNode,
duplicate;
//count hide rules for each toolbtn
while (l--) {
//hide class has id button
hideClass = $toolBtnHide[l].getAttribute('data-hide');
hideClass = String(hideClass).replace(/,\s+$/, '');
hideClassArray = hideClass.split(', ');
duplicate = {};
for (var i = 0, hLen = hideClassArray.length; i < hLen; i++) {
hideClass = hideClassArray[i];
if (duplicate[hideClass]) {
continue;
}
if (!hides[hideClass]) {
hides[hideClass] = 0;
}
hides[hideClass] += 1;
duplicate[hideClass] = true;
}
}
//if all rows in rules - hide btn
for (var key in hides) {
if (hides[key] === len) {
$targetNode = $(key).parent();
if ($targetNode.hasClass('active')) {
$targetNode.switchClass('notActive', 'active').attr('data-state', 'disabled');
}
}
}
},
//enable toolbtn
//show rules check
toolBtnShow = function toolBtnShow(e, data) {
var $toolBtnShow = data.toolBtnShow,
classArr,
len,
rules = {},
countRow = data.len,
showClass;
$toolBtnShow.each(function () {
showClass = this.getAttribute('data-show');
//for show toolbtn if one value for selected row
if (countRow > 1) {
classArr = showClass.split(',');
len = classArr.length;
showClass = '';
while (len--) {
if (classArr[len] !== ' ' && classArr[len] !== '') {
if (!rules[classArr[len]]) {
rules[classArr[len]] = 1;
} else {
rules[classArr[len]]++;
}
}
}
} else {
showClass = String(showClass).replace(/,\s+$/, '');
$(showClass).parent().switchClass('active', 'notActive').attr('data-state', null);
}
});
//if more one selected rows, check for rules each row
if (countRow > 1) {
/* jslint forin:true */
for (var keyVar in rules) {
//for group && inert toolbtn
showClass = keyVar + '.tb-group, ' + keyVar + '.tb-inert';
$(showClass).parent().switchClass('active', 'notActive').attr('data-state', null);
}
}
},
/**
* enabling group's btns
* disabling not group's btns
* @param {object} e event object
* @param {object} data data object
*/
activateToolbarGroup = function activateToolbarGroup(e, data) {
tabId = data ? data.tabId ? data.tabId : tabId : tabId;
$toolBarBtnNotGroup().switchClass('notActive', 'active').removeClass('removed').attr('data-state', 'noselect');
$toolbarBtnGroup().switchClass('active', 'notActive').removeClass('removed').attr('data-state', null);
$toolBarBtnNoSelEdit().switchClass('notActive', 'active').attr('data-state', 'noselect');
},
//enabling all toolbar's btns
activateTollbarAll = function activateTollbarAll(e, data) {
tabId = data ? data.tabId ? data.tabId : tabId : tabId;
$toolbarBtnAll().switchClass('active', 'notActive').removeClass('removed').attr('data-state', null);
},
isDenyByHideRules = function isDenyByHideRules(classes, ovhide) {
var hides = String(ovhide).split(','),
l = hides.length,
hideId;
while (l--) {
if (hides[l] && hides[l] !== ' ') {
hideId = hides[l].replace('#', '');
if (String(classes).match(hideId)) {
return true;
}
}
}
return false;
},
/**
* check for show rules in this row
* @param {String} classes
* @param {String} ovshow
* @return {boolean}
*/
isAllowByShowRules = function isAllowByShowRules(classes, ovshow) {
var shows = String(ovshow).split(','),
l = shows.length,
showId;
if (classes.match('toolbtnShow')) {
while (l--) {
if (shows[l] && shows[l] !== ' ') {
showId = shows[l].replace('.', '');
if (String(classes).match(showId)) {
return true;
}
}
}
} else {
return true;
}
return false;
},
//get array of name key fields active rows and create url
fillActiveRows = function fillActiveRows(e, data) {
var activeRows = [],
elids = [],
invar = data.invar,
locTabId = data.invar.tabId,
$curTab = $('#cont-' + locTabId),
toolbar = $curTab.find('.toolbar'),
plid = filterXSS.friendlyAttrValue(toolbar.attr('data-plid') || ''),
convert = toolbar.attr('data-convert'),
triggerAction = data.triggerAction || 'listSelectedData',
j = 0,
classes = data.classes,
content = data.__content,
actRowString;
$curTab.find('tr.selected:not(".filtred")').each(function () {
var rowIndex = this.getAttribute('data-index');
if (content[rowIndex]) {
if (content[rowIndex]._ovhide) {
if (isDenyByHideRules(classes, content[rowIndex]._ovhide)) {
return true;
}
}
if (content[rowIndex]._ovshow) {
if (!isAllowByShowRules(classes, content[rowIndex]._ovshow)) {
return true;
}
}
}
if (j < 10) {
var elName = String(this.getAttribute('data-elkeyname')),
elNameLength = elName.length;
if (elNameLength > 50) {
elName = elName.substring(0, 50);
elName += '...';
}
activeRows.push('<span class="b-text-wrapper">' + window.htmlEncode(elName) + '</span>');
}
elids.push(String(this.getAttribute('data-elid')).replace(/,\s/g, ', , '));
j++;
});
actRowString = activeRows.join(', ');
elids = elids.join(', ');
if (j > 10) {
actRowString += pageInfo.totalelem.replace(/__s__/, j);
}
if (convert) {
invar.params.tconvert = convert;
}
invar.params.elid = elids;
invar.params.plid = plid || '';
invar.rows = actRowString;
EventMgr.trigger(triggerAction, invar);
},
//disabling all toolbar's btns exclude "new" and "back" btns
deactivateToolbarAll = function deactivateToolbarAll(e, data) {
tabId = data ? data.tabId ? data.tabId : tabId : tabId;
$toolBarBtnNotGroup().switchClass('notActive', 'active').removeClass('removed').attr('data-state', 'noselect');
$toolbarBtnGroup().switchClass('notActive', 'active').removeClass('removed').attr('data-state', 'noselect');
$toolBarBtnNoSelEdit().switchClass('active', 'notActive').attr('data-state', null);
},
//recalc total of col in list
updateStatusBarTotal = function updateStatusBarTotal(e, data) {
if (!data.__headers || !data.__content) {
return;
}
var colName = data.colName,
content = data.__content,
index = data.index,
tabId = data.tabId,
l = content.length,
total = 0;
while (l--) {
if (content[l][colName]) {
total += content[l][colName].v - 0;
}
}
$('#cont-' + tabId).find('.sb-result_index_' + index).html(total);
},
statusBarHandler = function statusBarHandler(e, data) {
//check for selected row from from
if (!data.__headers || !data.__content) {
return;
}
var tabId = data.tabId,
len = data.len,
headers = data.__headers,
tableContent = data.__content,
headersLens = headers.length,
l,
$sbr,
$sbs,
$1sbr,
$1sbs,
$selectedRows = data.selectedRows,
selecedCount,
defPropStat,
index,
total = {},
type,
resultSum;
$1sbr = $('#' + tabId + ' .sb-result_index_0');
$1sbs = $('#' + tabId + ' .sb-selected_index_0');
if (len !== 0) {
//1st total col
$1sbr.removeClass('sb-result_st_active');
selecedCount = $1sbs.addClass('sb-selected_st_active').html().replace(/\d{1,100}/, len);
$1sbs.html(selecedCount);
//each for all selected elems
$selectedRows.each(function (i) {
index = this.getAttribute('data-index');
l = headersLens;
while (l--) {
type = headers[l].type;
//check for total
if (headers[l].total) {
if (tableContent[index] && tableContent[index][headers[l].name]) {
if (type === 'data' || type === 'money') {
//calc data
total[l] = dataCalc(total[l], tableContent[index][headers[l].name]);
} else if (type === 'indicator') {
//calc indicator
total[l] = indicatorCalc(total[l], tableContent[index][headers[l].name]);
} else if (type === 'prop') {
//calc props
total[l] = propCalc(total[l], tableContent[index][headers[l].name]);
}
}
}
//update html here
if (i === len - 1) {
if (headers[l].total) {
//all total
$sbr = $('#' + tabId + ' .sb-result_index_' + l).removeClass('sb-result_st_active');
//selected total
$sbs = $('#' + tabId + ' .sb-selected_index_' + l).addClass('sb-selected_st_active');
if (type === 'data' || type === 'money') {
resultSum = '';
/* jslint forin: true */
for (var key in total[l]) {
if (key === 'TOTAL_FINAL') {
continue;
}
if (resultSum !== '') {
resultSum += '; ';
}
if (type === 'money') {
resultSum += App.Tabs.moneyFormat(total[l][key]) + ' ' + key;
} else {
resultSum += total[l][key] + ' ' + key;
}
if (headers[l].convert && headers[l].convert !== 'money') {
convertData(headers[l].convert, resultSum, $sbs);
}
}
$sbs.html(pageInfo.total + ': ' + resultSum);
} else if (type === 'indicator') {
if (headers[l].convert) {
convertData(headers[l].convert, total[l], $sbs);
} else {
$sbs.html(pageInfo.total + ': ' + total[l].c);
}
} else if (type === 'prop') {
defPropStat = $sbr.html();
$sbs.html(renderPropsStat(total[l], defPropStat));
}
}
}
}
});
} else {
//1st total col
$1sbr.addClass('sb-result_st_active');
$1sbs.removeClass('sb-selected_st_active');
//show default values
l = headersLens;
while (l--) {
if (headers[l].total) {
$('#' + tabId + ' .sb-result_index_' + l).addClass('sb-result_st_active');
$('#' + tabId + ' .sb-selected_index_' + l).removeClass('sb-selected_st_active');
}
}
}
},
//convert data
convertData = function convertData(name, value, $sbs) {
var invar = {
$sbs: $sbs
};
//logic for indicator convert
if (value && value.a !== undefined) {
invar.__value = value;
invar.__name = name;
if (value.a_converted) {
value = value.b;
invar.__current = 'b';
} else {
value = value.a;
invar.__current = 'a';
}
}
EventMgr.trigger('ajaxRequest', {
param: {
func: 'convert',
name: name,
value: value
},
invar: invar,
type: 'get',
outtype: 'json',
trfunc: 'updateTotalWithConvert',
failfunc: 'DoNothing',
queue: 'multiload'
});
},
/**
* Calculate data
* @param {object|undefined} resultC template object with current
* calculated data
* @param {number|string} current number
* @return {object}
**/
dataCalc = function dataCalc(resultC, current) {
if (current.total && current.total === 'ignore') {
return resultC;
}
if (current.total && current.total === 'final') {
resultC = {
TOTAL_FINAL: true,
'': current.orig || current.v
};
return resultC;
} else if (resultC && resultC.TOTAL_FINAL) {
return resultC;
}
var dec1,
dec2 = 0,
maxDec = 0,
suffix;
resultC = resultC || {};
current = current.orig || current.v;
suffix = current.replace(/[0-9\s\.,-]+/, '');
current = current.replace(suffix, '').replace(/\s/g, '');
if (resultC[suffix] && resultC[suffix].length > 12 || current.length > 12) {
if (!resultC[suffix]) {
resultC[suffix] = current;
} else {
resultC[suffix] = calcLongNumber(resultC[suffix], current);
}
} else {
//check for suffix like "USD", "EUR"
if (resultC[suffix]) {
dec1 = decimalPlaces(resultC[suffix]);
dec2 = decimalPlaces(current);
maxDec = dec1 > dec2 ? dec1 : dec2;
} else {
maxDec = decimalPlaces(current);
}
if (current === '') {
current = '0';
}
if (!resultC[suffix]) {
resultC[suffix] = parseFloat(current);
} else {
resultC[suffix] = parseFloat(resultC[suffix]) + parseFloat(current);
}
}
if (resultC[suffix]) {
resultC[suffix] = resultC[suffix].toFixed ? resultC[suffix].toFixed(maxDec) : resultC[suffix];
}
return resultC;
},
indicatorCalc = function indicatorCalc(resultC, current) {
resultC = resultC || { a: 0, b: 0, c: 0 };
current.u = current.u_orig || current.u;
current.l = current.l_orig || current.l;
if (resultC.a.length > 12 || current.u.length > 12) {
resultC.a = calcLongNumber(resultC.a, current.u);
} else {
resultC.a = parseInt(resultC.a, 10) + parseInt(current.u, 10);
}
if (resultC.b.length > 12 || current.l.length > 12) {
resultC.b = calcLongNumber(resultC.b, current.l);
} else {
resultC.b = parseInt(resultC.b, 10) + parseInt(current.l, 10);
}
if (isNaN(resultC.a)) {
resultC.a = '-';
}
if (isNaN(resultC.b)) {
resultC.b = '-';
}
resultC.c = resultC.a + ' / ' + resultC.b;
return resultC;
},
decimalPlaces = function decimalPlaces(num) {
var match = ('' + num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
if (!match) {
return 0;
}
return Math.max(0,
// Number of digits right of decimal point.
match[1] ? match[1].length : 0,
// Adjust for scientific notation.
-(match[2] ? +match[2] : 0));
},
calcLongNumber = function calcLongNumber(num1, num2) {
var calcLongNaturalNumber = function calcLongNaturalNumber(num1, num2, one) {
num1 = String($.trim(num1));
num2 = String($.trim(num2));
var num1Arr = num1.split('').reverse(),
num2Arr = num2.split('').reverse(),
newNum = [],
bigNum = null,
next = 0,
i;
if (one) {
next = 1;
}
var len1 = num1Arr.length,
len2 = num2Arr.length,
len = 0,
firstPart = '';
if (len1 > len2) {
len = len2;
bigNum = num1;
} else {
len = len1;
bigNum = num2;
}
for (i = 0; i < len; i++) {
var tmpNum = parseInt(num1Arr[i], 10) + parseInt(num2Arr[i], 10) + next;
if (tmpNum >= 10) {
tmpNum = tmpNum - 10;
next = 1;
} else {
next = 0;
}
newNum.push(tmpNum);
}
if (len1 === len2) {
if (next === 1) {
newNum.push(1);
}
} else {
firstPart = bigNum.substr(0, bigNum.length - i - 1);
newNum.push(parseInt(bigNum[bigNum.length - i - 1], 10) + next);
}
newNum.push(firstPart);
newNum.reverse();
return newNum.join('');
},
addZeroes = function addZeroes(str, num) {
var z = '',
i;
for (i = 0; i < num; i++) {
z += '0';
}
return str + z;
};
var result = '';
if (String(num1).indexOf('.') !== -1 || String(num2).indexOf('.') !== -1) {
var num1Tail = num1.split('.'),
num2Tail = num2.split('.'),
resultTail = '',
resultHead = '';
if (num1Tail[1] === undefined) {
resultTail = num2Tail[1];
} else if (num2Tail[1] === undefined) {
resultTail = num1Tail[1];
} else {
var len1 = num1Tail[1].length,
len2 = num2Tail[1].length,
bigLen = 0;
if (len1 > len2) {
bigLen = len1;
num2Tail[1] = addZeroes(num2Tail[1], len1 - len2);
} else {
bigLen = len2;
num1Tail[1] = addZeroes(num1Tail[1], len2 - len1);
}
resultTail = calcLongNaturalNumber(num1Tail[1], num2Tail[1]);
if (resultTail.length > bigLen) {
resultHead = calcLongNaturalNumber(num1Tail[0], num2Tail[0], true);
} else {
resultHead = calcLongNaturalNumber(num1Tail[0], num2Tail[0]);
}
result = resultHead + '.' + resultTail;
}
} else {
result = calcLongNaturalNumber(num1, num2);
}
return result;
},
propCalc = function propCalc(resultC, current) {
if (resultC === undefined) {
resultC = [];
}
var cStat = current.psp,
cStatArr,
len;
if (!cStat) {
return;
}
cStatArr = cStat.split(':');
len = cStatArr.length;
for (var i = 0; i < len; i++) {
resultC[i] = parseInt(resultC[i] ? resultC[i] : 0, 10) + parseInt(cStatArr[i], 10);
}
return resultC;
},
renderPropsStat = function renderPropsStat(self, statAll) {
if (!self) {
return '';
}
var statAllArr = statAll.split(',');
for (var i = 0; i < self.length; i++) {
//ignore error with data
if (statAllArr[i] === undefined) {
break;
}
statAllArr[i] = statAllArr[i].replace(/>\d+/, '>' + self[i]);
if (self[i] - 0 === 0) {
statAllArr[i] = statAllArr[i].replace(/class=\"default\"/, 'class="no"');
} else {
statAllArr[i] = statAllArr[i].replace(/class=\"no\"/, 'class="default"');
}
}
return statAllArr.join(', ');
},
swipeStarted = false,
swipeTouch,
swipeDetecting = false,
swipeX,
swipeY,
swipeElem,
swipeDetectorTouchStart = function swipeDetectorTouchStart(e) {
if (e.touches && (e.touches.length !== 1 || swipeStarted)) {
return;
}
swipeDetecting = true;
swipeTouch = e.originalEvent.changedTouches[0];
swipeX = swipeTouch.pageX;
swipeY = swipeTouch.pageY;
swipeElem = this;
document.ontouchmove = swipeDetectorTouchMove;
document.ontouchend = swipeDetectorTouchDrop;
document.ontouchcancel = swipeDetectorTouchDrop;
},
swipeDetectorTouchMove = function swipeDetectorTouchMove(e) {
var curTouch = e.changedTouches[0];
if (!swipeStarted && !swipeDetecting) {
return;
}
if (curTouch[0] === swipeTouch) {
return;
}
if (Math.abs(swipeX - curTouch.pageX) >= Math.abs(swipeY - curTouch.pageY)) {
e.preventDefault();
swipeStarted = true;
}
swipeDetecting = false;
if (swipeStarted) {
$(swipeElem).trigger('click');
$(swipeElem).trigger('dblclick');
}
},
swipeDetectorTouchDrop = function swipeDetectorTouchDrop(e) {
document.ontouchmove = null;
document.ontouchend = null;
document.ontouchcancel = null;
swipeStarted = false;
swipeTouch = null;
swipeDetecting = false;
swipeX = null;
swipeY = null;
swipeElem = null;
},
updateTotalWithConvert = function updateTotalWithConvert(e, data) {
var $targetTotal = data.$sbs,
value = data.convertValue;
//logic for indicator
if (data.__value && data.__current) {
if (data.__current === 'a') {
data.__value.a_converted = value;
convertData(data.__name, data.__value, data.$sbs);
return;
} else if (data.__current === 'b') {
value = data.__value.a_converted + ' / ' + value;
}
}
$targetTotal.html(pageInfo.total + ': ' + value);
};
return {
dataCalc: dataCalc,
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.List.js.map
'use strict';
/**
* App.Listsorting
* sorting table list
* @param {object} window global object
* @param {function} $ jQuery
* @param {object} EventMgr EventManager
* @param {object} App EventManager
*
*/
App.ListSorting = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
EventMgr.on('#main-wrapper', '.td_sort .ovf', 'click', sortRows);
EventMgr.on('#main-wrapper', '.td_client_sort .ovf', 'click', sortRowsOnClient);
},
sortCol = function sortCol(a, b) {
if (b.number === a.number) {
return 0;
}
if (b.number < a.number) {
return 1;
} else {
return -1;
}
},
sortA = function sortA(a, b) {
if (b.data === a.data) {
return 0;
}
if (b.data < a.data) {
return 1;
} else {
return -1;
}
},
sortD = function sortD(a, b) {
if (!a.data) {
return -1;
} else if (!b.data) {
return 1;
}
a = a.data.replace(/[A-Za-z!,@,#,$,%,^,&,*,?,_,~"'/=<>|]+\-/g, '').replace(/[A-Za-z!,@,#,$,%,^,&,*,?,_,~"'/=<>|]/g, '').replace(/[-]+\s/g, '').replace(/-{2,}/, '-');
b = b.data.replace(/[A-Za-z!,@,#,$,%,^,&,*,?,_,~"'/=<>|]+\-/g, '').replace(/[A-Za-z!,@,#,$,%,^,&,*,?,_,~"'/=<>|]/g, '').replace(/[-]+\s/g, '').replace(/-{2,}/, '-');
return parseFloat(a) - parseFloat(b);
},
sortRowsOnClient = function sortRowsOnClient(e) {
//for selected text
if (typeof window.getSelection !== 'undefined') {
var selection = window.getSelection();
if (selection.toString() !== '') {
return;
}
}
var sortType = this.getAttribute('data-sorttype'),
porder = this.getAttribute('data-order'),
coln = this.getAttribute('data-coln'),
parent = $(this).parents('.block-table'),
tableId = parent.attr('id'),
table = document.getElementById('lt-' + tableId);
if (table === null) {
return;
}
var body = table.tBodies[0],
rows = body.rows,
len = rows.length,
orig,
$col,
$colContent,
mRows = [],
o = {},
i,
j,
$row,
tableHead,
HeadList,
hLRow,
attrs,
l,
$hRow,
hRow,
startI = 0,
cLen = 0;
if (!porder || porder === 'desc') {
porder = true;
} else {
porder = false;
}
for (i = startI; i < len; i++) {
o = {};
o.row = [];
for (j = 0; j < rows[i].cells.length; j++) {
o.row.push(rows[i].cells[j].innerHTML);
}
$row = $(rows[i]);
//copy and remove all attributes
attrs = rows[i].attributes;
l = attrs.length;
o.attrs = [];
while (l--) {
if (attrs[l].nodeName !== 'id') {
o.attrs.push({
name: attrs[l].nodeName,
value: attrs[l].nodeValue
});
rows[i].removeAttribute(attrs[l].nodeName);
}
}
$col = $row.find('.data-wrapper')[coln];
if ($col) {
//check for orig value
orig = null;
$colContent = $($col).find('.b-list__table-col-content');
if ($colContent.length) {
orig = $colContent[0].getAttribute('data-orig');
}
if (orig) {
o.data = orig;
} else {
o.data = $colContent.length ? $colContent.html() : $col.innerHTML;
}
}
mRows.push(o);
}
if (sortType === 'alpha') {
mRows.sort(sortA);
} else if (sortType === 'digit') {
mRows.sort(sortD);
}
if (!porder) {
mRows.reverse();
}
for (i = startI; i < len; i++) {
cLen = rows[i].cells.length;
for (j = 0; j < cLen; j++) {
App.u.replaceHtml(rows[i].cells[j], mRows[i].row[j]);
}
//copy all attributes
if (mRows[i].attrs) {
attrs = mRows[i].attrs;
l = attrs.length;
while (l--) {
rows[i].setAttribute(attrs[l].name, attrs[l].value);
}
}
//even class add
if (i % 2 !== 0) {
if (!rows[i].className.match(/even/)) {
rows[i].className += ' even';
}
} else {
rows[i].className = rows[i].className.replace(/even/, '');
}
}
tableHead = document.getElementById('lt-' + tableId);
if (tableHead === null) {
return;
}
hRow = tableHead.tHead.rows[0].cells[coln];
$hRow = $(hRow);
$('#lt-' + tableId + ' .triangle').removeClass('triangl-bot').removeClass('triangl-top');
if (!porder) {
$hRow.find('.triangle').addClass('triangl-top');
$hRow.find('.ovf').attr('data-order', 'desc');
} else {
$hRow.find('.triangle').addClass('triangl-bot');
$hRow.find('.ovf').attr('data-order', 'asc');
}
},
serverSorting = function serverSorting(elem, block, ctrl) {
var csorting = elem.getAttribute('sorting'),
ccolname = elem.getAttribute('data-colname'),
params = {},
dashboard = '',
pNum,
func,
tabId,
id,
cols = [],
sorting,
colname,
pCurrent = '';
//table in dashboard and not
if (!block) {
tabId = $(elem).parents('.content').attr('data-tabid');
var tabCont = $('#cont-' + tabId);
pNum = tabCont.attr('data-pnum');
} else {
var parent = $(elem).parents('.block-table'),
name = parent.attr('data-block-name');
id = parent.attr('id');
tabId = id;
dashboard = '&dashboard=' + name;
pNum = parent.attr('data-block-pnum');
params.dashboard = name;
func = parent.attr('data-block-func');
}
//if add field to sorting, build string soting
if (ctrl) {
$('#sort_table-' + tabId).find('.td_sort .ovf').each(function () {
sorting = this.getAttribute('sorting');
colname = this.getAttribute('data-colname');
if (sorting) {
cols.push({
name: this.getAttribute('data-colname'),
value: sorting,
number: String(sorting).charAt(1)
});
}
});
cols.sort(sortCol);
//make string
for (var i = 0, l = cols.length; i < l; i++) {
if (i !== 0) {
pCurrent += ',';
}
pCurrent += cols[i].value.charAt(0) + cols[i].name;
}
} else {
//add sorting if exist
if (csorting) {
ccolname = csorting.charAt(0) + ccolname;
}
}
/* jslint camelcase: false */
//format: '+/-name,+/-name';
params.p_current = pCurrent;
params.p_num = pNum;
//format: '+/-name';
params.p_col = ccolname;
/* jslint camelcase: true */
if (!block) {
EventMgr.trigger('reloadTab', { tabId: tabId, param: params });
} else {
params.func = func;
EventMgr.trigger('ajaxRequest', {
param: params,
invar: { blockId: id },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponseForDashboard',
failfunc: 'failedAjaxResponseForDashboard',
queue: 'noqueue' });
}
},
sortRows = function sortRows(e, data) {
//for selected text
if (typeof window.getSelection !== 'undefined') {
var selection = window.getSelection();
if (selection.toString() !== '') {
return;
}
}
var block = false;
if ($(this).parents('.block-table').length > 0) {
block = true;
}
serverSorting(this, block, e.ctrlKey || e.metaKey);
blockEvent(e);
e.preventDefault();
};
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.ListSorting.js.map
'use strict';
/**
* Live filter module
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
/*global App:true*/
App.LiveListFilter = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
EventMgr.on(mainWrapperSel, '.itsearch', 'keyup', searchHandler);
EventMgr.on(mainWrapperSel, '.itsearch', 'focus', showHint);
EventMgr.on(mainWrapperSel, '.itsearch', 'blur', hideHint);
EventMgr.bind('appendList', listIndex);
EventMgr.bind('forceListIndex', listIndex);
EventMgr.bind('closeTabEvent', removeIndex);
EventMgr.on(mainWrapperSel, '.close_tsearch a', 'click', closeSearch);
},
appDom = App.Dom,
pageInfo = window.pageInfo,
//object with index of rows
listIndexObj = {},
HIGHLIGHT = 'live-search-highlighted',
mainWrapperSel = '#main-wrapper',
table = null,
MINFINDLENGTH = 2,
/**
* show hint about find only current page
* @this {Node}
*/
showHint = function showHint() {
var tabId = this.getAttribute('data-tabid'),
pager = appDom.byId('_pager-slist-' + tabId);
if (pager) {
EventMgr.trigger('forceShowHint', {
elem: this,
hint: pageInfo.messages.hintLivefilter
});
}
},
/**
*
* @param {object} e
*/
hideHint = function hideHint(e) {
EventMgr.trigger('hideHint');
},
/**
* close search box
* @param {object} e
*/
closeSearch = function closeSearch(e) {
var tabId = this.getAttribute('data-tabid'),
input = appDom.byId(tabId + '-search');
input.value = '';
searchHandler.apply(input, []);
e.preventDefault();
},
reverse = false,
/**
* handler for search box
* @param {object} e
*/
searchHandler = function searchHandler(e) {
var tabId = this.getAttribute('data-tabid'),
input = $(this),
val = $.trim(this.value),
len = val.length,
$contTab = $('#cont-' + tabId);
reverse = String(val).charAt(0) === '-' ? true : false;
if (reverse) {
val = val.substring(1);
len -= 1;
}
table = appDom.byId('lt-' + tabId);
//@todo checking value...
if (len > 0) {
input.parent().addClass('livesearch');
} else {
input.parent().removeClass('livesearch');
$contTab.find('.list_table tr').removeClass('filtred').removeClass('ifound');
}
if (len >= MINFINDLENGTH) {
$contTab.addClass('livesearch-active');
} else {
$contTab.removeClass('livesearch-active');
$contTab.find('.list_table tr').removeClass('filtred').removeClass('ifound');
}
if (len === 0) {
EventMgr.trigger('updateSelected', { tabId: tabId });
}
function search(val, n, tabId) {
var curListIndex = listIndexObj[tabId],
l = curListIndex.length,
length,
i,
$selectedRows;
if (val.length < MINFINDLENGTH) {
//show all elements
for (i = 0; i < l; i++) {
show(curListIndex[i], false);
}
$selectedRows = $('#lt-' + tabId + ' tbody tr.ifound');
length = $selectedRows.length;
EventMgr.trigger('listLiveFound', {
selectedRows: $selectedRows,
tabId: 'cont-' + tabId,
len: length });
} else {
var lim = n + 10;
i = n;
for (i, len = l; i < len && i < lim; i++) {
checkMatches(curListIndex[i], val);
}
var changed = reverse ? String(input.val()).substring(1) !== val : input.val() !== val,
notOver = i < len;
if (!changed && i && len && notOver) {
search(val, i, tabId);
} else {
$selectedRows = $('#lt-' + tabId + ' tbody tr.ifound');
length = $selectedRows.length;
EventMgr.trigger('listLiveFound', {
selectedRows: $selectedRows,
tabId: 'cont-' + tabId,
len: length });
$('tr.ifound').removeClass('lf-odd');
$('tr.ifound:odd').addClass('lf-odd');
}
}
}
search(val, 0, tabId);
if (val.length >= MINFINDLENGTH) {
ScrollHandler.scrollTo('ltwr-' + tabId, 0);
}
EventMgr.trigger('updateSelected', { tabId: tabId });
},
/**
* check matches on finding value
* @param {object} elem
* @param {string} val
*/
checkMatches = function checkMatches(elem, val) {
var text = elem.text.toLowerCase(),
valLowCase = val.toLowerCase(),
match = text.indexOf(valLowCase) !== -1;
if (match && !reverse || !match && reverse) {
show(elem, val);
} else {
hide(elem);
}
},
/**
* show html element
* @param {object} elem
* @param {string} val
*/
show = function show(elem, val) {
if (!elem.isVisible) {
elem.tr.removeClass('filtred');
elem.tr.removeClass('selected');
elem.isVisible = true;
var len = table.rows.length;
table.deleteRow(len - 1);
}
elem.tr.addClass('ifound');
if (val) {
addHighlighting(elem, val);
} else {
removeHighlighting(elem);
}
},
/**
* hide html element
* @param {object} elem
*/
hide = function hide(elem) {
if (!elem.isVisible) {
return;
}
elem.tr.removeClass('ifound');
elem.tr.addClass('filtred');
elem.tr.removeClass('selected');
elem.isVisible = false;
var len = table.rows.length,
row = table.insertRow(len);
row.className = 'fake-row';
removeHighlighting(elem);
},
/**
* add highlighting to html element
* @param {object} elem
* @param {string} val
*/
addHighlighting = function addHighlighting(elem, val) {
if (elem.isHighLight && val) {
removeHighlighting(elem);
}
//setTimeout(function() {
try {
var re = val ? new RegExp('(' + App.u.escapeRegExp(val) + ')', 'ig') : false;
elem.isHighLight = true;
elem.data.each(function (index) {
var self = $(this),
text = window.filterXSS($.trim(self.html())),
hiText;
hiText = text.replace(re, '<span class="' + HIGHLIGHT + '">$1</span>');
if (hiText !== text) {
self.html(hiText);
}
});
} catch (e) {
console.log('e', e);
}
//}, 0);
},
/**
* remove highlighting from html element
* @param {object} elem
*/
removeHighlighting = function removeHighlighting(elem) {
// setTimeout(function() {
var highlighted = elem.data.find('.' + HIGHLIGHT);
highlighted.each(function (index) {
var self = $(this);
self.replaceWith(self.text());
elem.isHighLight = false;
});
// }, 0);
},
/**
* make index with rows
* @param {object} e event object
* @param {object} data object with data
*/
listIndex = function listIndex(e, data) {
var tabId = data.tabId,
collection = [],
elem,
ndata,
text;
$('#lt-' + tabId + ' tbody tr').each(function () {
elem = $(this);
ndata = elem.find('.b-list__table-col-content');
text = function text() {
var result = [],
txt;
ndata.each(function () {
txt = $.trim($(this).text());
result.push(txt);
});
return result.join('||');
};
collection.push({
tr: elem,
isVisible: true,
text: text(),
isHighLight: false,
data: ndata
});
});
listIndexObj[tabId] = collection;
},
/**
* remove index for closed tab
* @param {object} e
* @param {object} data
*/
removeIndex = function removeIndex(e, data) {
var tabId = data.tabId;
listIndexObj[tabId] = null;
delete listIndexObj[tabId];
};
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.LiveListFilter.js.map
'use strict';
/**
* LOad required modules
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
App.LoadScripts = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
//EventMgr.bind('loadPage', forceLoadScripts);
EventMgr.bind('gotAnyChartXML', setAnyChartXML);
EventMgr.bind('required', required);
EventMgr.one('loadACHTML5', loadACHTML5);
},
loadACHTML5 = function loadACHTML5() {
required(pageInfo.host + pageInfo.theme + 'AnyChart.js', runQueue, '');
required(pageInfo.host + pageInfo.theme + 'AnyChartHTML5.js', runQueue, '');
},
runQueue = function runQueue() {
if (window.AnyChart !== undefined && window.anychart.render !== undefined) {
AnyChart.renderingType = anychart.RenderingType.SVG_ONLY;
EventMgr.trigger('runQueue');
} else {
setTimeout(function () {
runQueue();
}, 250);
}
},
required = function required(file, callback, param) {
var script = document.getElementsByTagName('script')[0],
newjs = document.createElement('script');
newjs.onreadystatechange = function () {
if (newjs.readyState === 'loaded' || newjs.readyState === 'complete') {
newjs.onreadystatechange = null;
callback(param);
param = null;
file = null;
}
};
newjs.onload = function () {
callback(param);
param = null;
file = null;
};
newjs.src = file;
script.parentNode.insertBefore(newjs, script);
},
forceLoadScripts = function forceLoadScripts() {
if (App.Global.anychartXML === null) {
var url = pageInfo.host + pageInfo.theme + 'anychart.xml';
EventMgr.trigger('ajaxRequest', {
url: url,
trfunc: 'gotAnyChartXML',
outtype: 'html',
type: 'get',
queue: 'anychartxml' });
}
},
setAnyChartXML = function setAnyChartXML(e, data) {
App.Global.anychartXML = data;
};
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.LoadScripts.js.map
'use strict';
/**
* LocalStorage module
*
* read and write data to localStorage
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
*/
/*global App:true */
App.LocalStorage = function (window, $, EventMgr) {
'use strict';
var init = function init() {
if (window.localStorage) {
EventMgr.bind('changedTabs', updateTabsState);
EventMgr.bind('loadPage', readTabsState);
EventMgr.bind('writeDatatoLocalStorage', writeData);
EventMgr.bind('readDatafromLocalStorage', readData);
EventMgr.bind('removeDatafromLocalStorage', removeData);
EventMgr.bind('loadPage', readGlobalSettings);
EventMgr.bind('setGlobalSetting', setGlobalSetting);
}
},
pageInfo = window.pageInfo,
productId = pageInfo.product + '_5_' + pageInfo.user + '_' + pageInfo.hostName + '_' + pageInfo.lang + pageInfo.project,
writeData = function writeData(e, data) {
if (data && data.id) {
localStorage.setItem(data.id, JSON.stringify(data.data));
}
},
readData = function readData(e, data) {},
removeData = function removeData(e, data) {
if (data && data.id) {
localStorage.removeItem(data.id);
}
},
sortByIndex = function sortByIndex(a, b) {
if (a[0] && b[0]) {
return a[0].sIndex - b[0].sIndex;
} else {
return 0;
}
},
/**
* Update data of active tab in local storage
* @param {object} e
* @param {object} data
*/
updateTabsState = function updateTabsState(e, data) {
var tabs = data.tabs,
forceActive = data.forceActive,
tabsStorageObj = {},
keyVar,
chain,
ok,
ind,
tab;
tabsStorageObj.tabs = [];
//console.log("tabhandler");
for (keyVar in tabs) {
if (tabs[keyVar].hType === 'parent' && keyVar !== 'tab0' && tabs[keyVar].pin !== true) {
chain = [];
tab = {
sIndex: tabs[keyVar].sIndex,
status: tabs[keyVar].status,
title: tabs[keyVar].title,
params: tabs[keyVar].paramObjAll,
menuFunc: tabs[keyVar].menuFunc,
help: tabs[keyVar].help
};
if (forceActive && tabs[keyVar].beforeRequest) {
tab.beforeRequest = tabs[keyVar].beforeRequest;
}
chain.push(tab);
ok = true;
ind = keyVar;
while (ok) {
if (tabs[ind].child && tabs[ind] !== undefined) {
ind = tabs[ind].child;
tab = {
status: forceActive ? tabs[ind].forceActive ? 1 : 0 : tabs[ind].status,
title: tabs[ind].title,
params: tabs[ind].paramObjAll,
help: tabs[ind].help
};
if (forceActive && tabs[ind].beforeRequest) {
tab.beforeRequest = tabs[ind].beforeRequest;
}
chain.push(tab);
} else {
ok = false;
}
}
tabsStorageObj.tabs.push(chain);
}
}
chain = null;
tabsStorageObj.tabs.sort(sortByIndex);
var tabsStorageString = JSON.stringify(tabsStorageObj);
if (typeof localStorage !== 'undefined') {
localStorage.setItem(productId, tabsStorageString);
localStorage.setItem(productId + '_time', new Date().getTime());
}
tabsStorageString = null;
tabsStorageObj = null;
data = null;
},
/**
* read local storage data when startup
*
*
*/
readTabsState = function readTabsState() {
var tabsStorage,
now,
timeSave,
//parse for a lot of params in startform/startpage
startFormParam = App.u.parseParams('func=' + pageInfo.startform),
startPageParam = App.u.parseParams('func=' + pageInfo.startpage);
//startpage/startform handler
if (pageInfo.startpage !== 'dashboard') {
if (pageInfo.startform) {
tabsStorage = '{"tabs": [[{"status": 1,' + ' "title": "",' + ' "params": ' + JSON.stringify(startPageParam) + '},' + ' {"status": 1,' + ' "title": "",' + ' "params": ' + JSON.stringify(startFormParam) + '}]]}';
EventMgr.trigger('readStorage', { tabs: tabsStorage });
return;
} else {
tabsStorage = '{ "tabs": [[{"status": 1, "title": "", "params":' + ' ' + JSON.stringify(startPageParam) + '}]]}';
EventMgr.trigger('readStorage', { tabs: tabsStorage });
return;
}
} else if (pageInfo.startform) {
tabsStorage = '{"tabs": [[{"status": 1, "title": "", "params":' + ' ' + JSON.stringify(startFormParam) + '}]]}';
EventMgr.trigger('readStorage', { tabs: tabsStorage });
return;
}
now = new Date().getTime();
if (localStorage.getItem(productId)) {
//check for week expiries
timeSave = localStorage.getItem(productId + '_time');
if (now - timeSave > 604800 * 1000 || pageInfo.forgetTabs) {
localStorage.removeItem(productId);
localStorage.removeItem(productId + '_time');
} else {
tabsStorage = localStorage.getItem(productId);
EventMgr.trigger('readStorage', { tabs: tabsStorage });
}
}
},
readGlobalSettings = function readGlobalSettings() {
var settings = localStorage.getItem(productId + '_gs'),
settingsObj = JSON.parse(settings);
if (settingsObj) {
/* jslint forin:true */
for (var key in settingsObj) {
pageInfo[key] = settingsObj[key];
}
}
},
setGlobalSetting = function setGlobalSetting(e, data) {
var settings = localStorage.getItem(productId + '_gs'),
settingsObj = JSON.parse(settings) || {},
key = data.key,
value = data.value;
settingsObj[key] = value;
pageInfo[key] = value;
localStorage.setItem(productId + '_gs', JSON.stringify(settingsObj));
};
return {
init: init
};
}(window, $, EventMgr);
//# sourceMappingURL=App.LocalStorage.js.map
'use strict';
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/**
* Multi load tabs
* @param {object} window global object
* @param {object|function} $ jQuery
* @param {object} EventMgr Event manager
*/
App.MultiLoadTabs = function (window, $, EventMgr) {
'use strict';
var init = function init() {
EventMgr.bind('readStorage', loadFromStorage);
EventMgr.bind('loadChildren', loadChildren);
EventMgr.bind('multiLoadTab', loadTabs);
},
pageInfo = window.pageInfo,
loadFromStorage = function loadFromStorage(e, data) {
var cookie = data.tabs,
tabsObj;
try {
tabsObj = $.parseJSON(cookie);
EventMgr.trigger('multiLoadTab', { tabs: tabsObj.tabs });
} catch (exp) {}
},
loadTabs = function loadTabs(e, data) {
var delay = 50,
children,
tabs = data.tabs,
isNotInit = data.isNotInit,
keyVar,
len,
param,
curTab,
urlParams = App.u.parseParams(window.location.search),
showDashboard = urlParams.sfrom === 'loginform' && !(pageInfo.startform !== '' || pageInfo.startpage !== 'dashboard');
if (pageInfo.tabPin && pageInfo.tabPin.length > 1 && !isNotInit) {
for (var i = 1, l = pageInfo.tabPin.length; i < l; i++) {
tabs.unshift([pageInfo.tabPin[i]]);
}
}
if (tabs !== null) {
/* jslint forin:true */
for (keyVar in tabs) {
curTab = tabs[keyVar][0];
len = tabs[keyVar].length;
delay += 50;
if (len > 1) {
tabs[keyVar].splice(0, 1);
children = tabs[keyVar];
} else {
children = null;
}
if (_typeof(curTab.params) === 'object') {
if (curTab.beforeRequest) {
EventMgr.trigger('ajaxRequest', {
param: App.u.parseParams(curTab.beforeRequest),
trfunc: 'DoNothing',
queue: 'multiload'
});
}
/* jshint loopfunc:true*/
setTimeout(function (children, curTab) {
return function () {
if (curTab.status === 1 && !showDashboard) {
EventMgr.trigger('ajaxRequest', {
param: curTab.params,
noesc: pageInfo.startform !== '',
invar: { newtab: true, children: children, ignErr: true, __src_func: curTab.menuFunc },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
queue: 'multiload' });
} else {
if (curTab.title) {
EventMgr.trigger('ajaxResponse', {
newtab: true,
children: children,
ignErr: true,
pin: curTab.pin,
__src_func: curTab.menuFunc,
pinIcon: curTab.pinIcon,
type: 'empty',
title: curTab.title,
urlObj: curTab.params });
}
}
param = null;children = null;
};
}(children, curTab), delay);
}
}
}
data = null;
},
loadChildren = function loadChildren(e, data) {
var parent = data.parent,
children = data.children,
curTab = children[0],
urlParams = App.u.parseParams(window.location.search),
showDashboard = urlParams.sfrom === 'loginform' && !(pageInfo.startform !== '' || pageInfo.startpage !== 'dashboard');
if (children.length > 1) {
children = children.splice(1, 1);
} else {
children = null;
}
if (curTab.beforeRequest) {
EventMgr.trigger('ajaxRequest', {
param: App.u.parseParams(curTab.beforeRequest),
trfunc: 'DoNothing',
queue: 'multiload'
});
}
setTimeout(function (children, parent, curTab) {
return function () {
if (curTab.status === 1 && !showDashboard) {
EventMgr.trigger('ajaxRequest', {
param: curTab.params,
invar: { parent: parent, children: children, ignErr: true, help: curTab.help },
type: 'get',
noesc: pageInfo.startform !== '',
outtype: 'json',
trfunc: 'ajaxResponse',
queue: 'multiload' });
EventMgr.trigger('tabLoading', { tabId: parent });
} else {
EventMgr.trigger('ajaxResponse', {
parent: parent,
children: children,
ignErr: true,
help: curTab.help,
type: 'empty',
title: curTab.title,
pinIcon: curTab.pinIcon,
urlObj: curTab.params });
}
};
}(children, parent, curTab), 50);
};
return {
init: init
};
}(window, $, EventMgr);
//# sourceMappingURL=App.MultiLoadTabs.js.map
'use strict';
/**
* Progressbar module
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @param {object} templates Templates of App
*/
App.ProgressBar = function (window, $, EventMgr, App, templates) {
'use strict';
var CACHE = {};
// закончившиеся wait прогрессбары, на случай когда прогрессбар пришел раньше респонса формы
var ENDED_WAIT_PROGRESSBAR = {};
/**
* Remove ProgressBar
* @param {string} tabId
*/
function removeProgressBar(tabId) {
var tabCont = App.Dom.byId('cont-' + tabId);
App.Dom.removeClass(tabCont, 'tab-content__progressbar_show');
var progressbar = App.Dom.byId('cont-' + tabId + '-progressbar');
if (progressbar === null) {
return;
}
progressbar.style.display = 'none';
progressbar.innerHTML = '';
//show default loader
var defProgress = App.Dom.byId('cont-' + tabId + '-progressbar-default');
if (defProgress === null) {
return false;
}
if (defProgress.style.display === 'none') {
defProgress.style.display = null;
}
progressbar = null;
}
/**
* Wait progressbar response after panel restart
* @param {object} e
* @param {object} data
*/
function waitProgressBar(e, data) {
if (data.progresstype === 'wait' || data.invar && data.invar.progresstype === 'wait') {
setTimeout(function () {
EventMgr.trigger('ajaxRequest', {
param: data.param,
invar: data.invar,
type: 'get',
outtype: 'json',
trfunc: 'progressBarResponse',
failfunc: 'progressBarResponseFail',
queue: 'noqueue' });
}, 1500);
}
}
/**
* Render Progressbar HTML
* @param {object} e
* @param {object} data
*/
function renderProgressBar(e, data) {
var start = data.start,
progressType = data.progresstype,
tabId = '',
tabExist = false,
progressId = data.param.elid;
if (start !== '' && start !== undefined) {
var done = data.done,
now = data.now,
steps = data.steps,
comment = data.comment,
param = data.param,
colorClass = '';
tabId = data.tabId;
var per = 0,
left = '';
if (done !== '' && steps !== '') {
per = Math.round(done / steps * 100);
}
if (done !== '' && steps !== '' && progressType !== 'notime') {
var elapsedTime = now - start,
elapsedSteps = steps - done;
if (elapsedSteps !== 0 && done !== 0) {
left = Math.round(elapsedTime / done * elapsedSteps) + 'sec';
}
}
var width = per * 0.98;
if (per < 6) {
per = '.';
colorClass = 'blue-color';
} else {
if (per > 100) {
per = 100;
width = per * 0.98;
}
per += '%';
}
var html = templates.progressBar({
tabId: tabId,
per: per,
width: width,
left: '',
comment: comment,
colorClass: colorClass });
tabExist = appendProgressBar(tabId, progressId, html);
//if exist tab
if (tabExist) {
setTimeout(function () {
EventMgr.trigger('ajaxRequest', {
param: param,
invar: { tabId: tabId, param: param, progresstype: progressType },
type: 'get',
outtype: 'json',
trfunc: 'progressBarResponse',
failfunc: 'progressBarResponseFail',
queue: 'noqueue' });
param = null;tabId = null;progressType = null;
}, 1000);
}
} else {
tabId = data.tabId;
removeProgressBar(tabId);
//@todo remove cache
}
if (data.ok && progressType === 'wait') {
if (data.param && data.param.elid) {
ENDED_WAIT_PROGRESSBAR[data.param.elid] = true;
if (CACHE[data.param.elid]) {
CACHE[data.param.elid].progresstype = null;
if (CACHE[data.param.elid].progressok) {
CACHE[data.param.elid].__dataSource.rp = ['progressok'];
CACHE[data.param.elid].__dataSource.rp = ['progressok'];
EventMgr.trigger('tabLoading', { tabId: data.tabId });
EventMgr.trigger('ajaxRequest', CACHE[data.param.elid].__dataSource);
} else {
EventMgr.trigger('ajaxFormResponse', CACHE[data.param.elid]);
}
delete CACHE[data.param.elid];
}
}
}
}
/**
* Append Progressbar to form
* @param {string} tabId
* @param {string} html
* @return {boolean}
*/
function appendProgressBar(tabId, progressId, html) {
var progressChecker = App.Dom.byId(progressId),
tabCont = App.Dom.byId('cont-' + tabId);
if (!progressChecker) {
return false;
}
App.Dom.addClass(tabCont, 'tab-content__progressbar_show');
var progressbar = App.Dom.byId('cont-' + tabId + '-progressbar');
if (progressbar === null) {
return false;
}
progressbar.style.display = 'block';
progressbar.innerHTML = html;
progressbar = null;
var defProgress = App.Dom.byId('cont-' + tabId + '-progressbar-default');
if (defProgress === null) {
return false;
}
defProgress.style.display = 'none';
return true;
}
function progressBarSaveState(e, data) {
// если wait прогресс уже пришел с ok
if (ENDED_WAIT_PROGRESSBAR[data.progressid]) {
data.progresstype = null;
EventMgr.trigger('ajaxFormResponse', data);
} else if (data && data.progressid) {
CACHE[data.progressid] = data;
}
}
function init() {
EventMgr.bind('progressBarSaveState', progressBarSaveState);
EventMgr.bind('progressBarResponse', renderProgressBar);
EventMgr.bind('progressBarResponseFail', waitProgressBar);
}
return {
init: init
};
}(window, $, EventMgr, App, templates);
//# sourceMappingURL=App.ProgressBar.js.map
'use strict';
/**
* Upload files
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
App.SendFormWithFiles = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
EventMgr.bind('setBrandSettings', sendFormWithFiles);
EventMgr.on('#main-wrapper', '.i-button-form-send-cancel', 'click', abortFormSending);
},
abortFormSending = function abortFormSending(e) {
var id = this.getAttribute('data-id');
EventMgr.trigger('ajaxRequestAbort', { id: id });
},
sendFormWithFiles = function sendFormWithFiles(e, data) {
if (window.FormData) {
sendLikeFormData(data);
} else {
sendLikeFrame(data);
}
},
sendLikeFormData = function sendLikeFormData(data) {
var formData = new FormData(),
param = data.param,
tabId = data.tabId,
options = data.options,
id = new Date().getTime();
resetHiddenInput(tabId);
/* jshint forin:false */
for (var key in param) {
formData.append(key, param[key]);
}
$('#frm-' + tabId + ' input[type="file"]').each(function () {
if (this.files) {
var l = this.files.length,
name = this.name;
if (l > 1) {
name += '[]';
}
while (l--) {
formData.append(name, this.files[l]);
}
}
});
//formData.append('sok', 'ok');
options.formData = formData;
options.reqType = 'xhr';
options.id = id;
//clear class for setvalues
var $progressbar = $('#' + tabId + '-progressbar'),
$loader = $progressbar.find('.b-progressbar__loader'),
$btn = $progressbar.find('.b-progressbar__btn-wr');
$loader.removeClass('b-progressbar__loader_type_static');
if ($btn.length) {
$btn.remove();
}
options.progressCb = function (e) {
if (e.lengthComputable) {
var per = Math.round(e.loaded * 100 / e.total),
width = per * 0.98;
// loader = App.u.selectorCache('#' + tabId +
// '-progressbar .b-progressbar__loader');
//add static class & rewrite comment & add cancel btn
if (!$loader.hasClass('b-progressbar__loader_type_static')) {
//add class for small bottom padding
$('#' + tabId + '-progressbar').addClass('b-progressbar_type_withbtn');
//remove animated
$loader.removeClass('b-progressbar__loader_type_animate');
//add static color
$loader.addClass('b-progressbar__loader_type_static');
//add cancel btn
$('#' + tabId + '-progressbar .b-progressbar__inner').append('<div class="b-progressbar__btn-wr">' + '<div class="b-button b-button_style_small i-button-form-send-cancel" data-id="' + id + '">' + pageInfo.msgCancel + '</div>' + '</div>');
//rewite comment
$('#' + tabId + '-progressbar .b-progressbar__comment').html(window.pageInfo.formSending);
}
//set progress
$loader.css('width', width + '%');
if (per > 7) {
$loader.html(per + '%');
} else {
$loader.html('');
}
}
};
EventMgr.trigger('ajaxRequest', options);
EventMgr.trigger('tabLoading', { tabId: tabId });
},
sendLikeFrame = function sendLikeFrame(data) {
var tabId = data.tabId,
parent = data.parent,
frameId = 'iframe-' + Math.round(new Date().getTime() / 1000),
$form,
sForm,
action;
//find hidden by if/else input@type=hidden & reset it
resetHiddenInput(tabId);
$('body').after('<iframe width="0" height="0" style="display:none;" name="' + frameId + '" id="' + frameId + '"></iframe>');
sForm = document['frm-' + tabId];
action = sForm.getAttribute('action');
$('#form-wrapper-' + tabId).wrap(function () {
return '<form action="' + action + '" id="form-' + frameId + '" method="POST" enctype="multipart/form-data" target="' + frameId + '"/>';
});
$form = $('#form-' + frameId);
if (data.addParams) {
/* jshint forin: false */
for (var key in data.addParams) {
$form.append('<input type="hidden" name="' + key + '" value="' + data.addParams[key] + '"/>');
}
}
//$form.append('<input type="hidden" value="ok" name="sok"/>');
//$form.append('<input type="hidden" value="ajax" name="sfrom"/>');
// $form.append('<input type="hidden" value="' + data.pid +
// '" name="progressid"/>');
// $form.append('<input type="hidden" value="' + data.name +
// '" name="clicked_button"/>');
$('#' + frameId).load(function () {
handleResponse(this, frameId, data, parent);
});
$form.submit();
EventMgr.trigger('showLoader');
},
resetHiddenInput = function resetHiddenInput(tabId) {
//find hidden by if/else input@type=hidden & reset it
$('#form-wrapper-' + tabId).find('.l-form__row_hidden_yes input[type="file"]').each(function () {
var $self = $(this);
$self.wrap('<form>').closest('form').get(0).reset();
$self.unwrap();
});
},
handleResponse = function handleResponse(loadedFrame, frameId, data, parent) {
var response = {},
responseStr = loadedFrame.contentWindow.document.body.innerHTML,
tabId = data.tabId;
try {
//replace ' with ""
responseStr = responseStr.replace(/\\'/g, "'");
//remove doctype
responseStr = responseStr.replace(/<![\w\s\"-\/]*>/g, '');
//remove html tags
responseStr = responseStr.replace(/(<([^>]+)>)/g, '');
//check for 503 error
if (responseStr.match(/^long\/+/)) {
EventMgr.trigger('ajaxRequest', {
url: pageInfo.host + responseStr,
invar: {
iType: 'replace',
dataSaved: true,
tabId: tabId,
targetTabId: tabId,
parent: parent
},
type: 'post',
outtype: 'json',
trfunc: 'ajaxFormResponse',
queue: 'noqueue',
failfunc: 'failFormAjaxResponse'
});
return;
} else {
response = $.parseJSON($.trim(responseStr));
}
} catch (e) {
response = responseStr;
EventMgr.trigger('hideLoader');
EventMgr.trigger('pullMsg', { msg: 'JSON Parse Error.' });
}
//@TODO run formHandler
//@TODO remove iframe and wrapper
if (response) {
$('#form-wrapper-' + tabId).unwrap();
$('#' + frameId).remove();
response.tabId = tabId;
response.parent = parent;
var resp = $.extend(response, data.options.invar);
EventMgr.trigger(data.options.trfunc, resp);
//EventMgr.trigger('ajaxFormResponse', response);
EventMgr.trigger('hideLoader');
}
};
return {
init: init,
handleResponse: handleResponse
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.SendFormWithFiles.js.map
'use strict';
/**
* Slider module
* @param {object} window global object
* @param {object|function} $ jQuery
* @param {object} EventMgr Event manager
* @param {object} App Application
*/
/*global App:true*/
App.Slider = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
EventMgr.on($content(), sliderSelector, 'mousedown', drag);
EventMgr.on($content(), sliderWrapperSelector, 'mousedown', sliderToPoint);
EventMgr.bind('appendForm', start);
EventMgr.bind('appendEditInList', startEditInList);
EventMgr.bind('reloadSlider', start);
EventMgr.on($content(), sliderInputSelector, 'change', sliderMove);
EventMgr.on($content(), sliderInputSelector, 'keydown', sliderKeyDownHandler);
EventMgr.on($content(), sliderInputSelector, 'keyup', deleteSliderHandler);
EventMgr.on($content(), sliderSelector, 'ontouchstart', drag);
},
$content = function $content() {
return $('#main-wrapper');
},
sliderSelector = '.l-slider__wr:not(".readonly") .b-slider__el',
sliderInputSelector = '.b-input_for_slider:not(".readonly")',
sliderWrapperSelector = '.l-slider__wr:not(".readonly")',
max = 0,
min = 0,
self = null,
maxleft = 0,
shiftX = 0,
width = 0,
intId = null,
tabId = '',
inputId = null,
step = 0,
//flag for change input value
fromInput = false,
calcValue = function calcValue(np) {
var bound = max - min,
delta = bound / maxleft,
initDelta = min % step,
value = Math.round(np * delta) + parseInt(min, 10),
el = App.Dom.byId(inputId),
elSlider = App.Dom.byId(inputId + '-slider'),
ldf = value % step,
rdf = step - ldf;
if (ldf > rdf) {
value += rdf;
} else {
value -= ldf;
}
value += initDelta;
//check bounds
if (value > max) {
value = max;
} else if (value < min) {
value = min;
}
if (el !== null) {
el.value = value;
}
if (elSlider) {
elSlider.setAttribute('data-value', value);
}
EventMgr.trigger('changeSliderValue', { tabId: tabId });
},
getDataSlider = function getDataSlider() {
tabId = self.getAttribute('data-tabid');
inputId = self.getAttribute('data-id');
min = self.getAttribute('data-min');
step = parseInt(self.getAttribute('data-step'), 10);
if (!step) {
step = 1;
}
max = self.getAttribute('data-max');
width = $(self).parent().width();
maxleft = width - 9;
},
setPosition = function setPosition(newPosition) {
var np = 0;
if (newPosition <= maxleft && newPosition >= 0) {
np = newPosition;
} else if (newPosition > maxleft) {
fromInput = false;
np = maxleft;
} else {
fromInput = false;
np = 0;
}
self.style.left = np + 'px';
if (!fromInput) {
calcValue(np);
}
fromInput = false;
return false;
},
start = function start(e, data) {
tabId = data.tabId;
$('#incont-' + tabId + ' .b-slider__el').each(function () {
self = this;
fromInput = true;
getDataSlider();
if (width !== 0) {
var value = this.getAttribute('data-value'),
bound = max - min,
delta = bound / maxleft,
np = value / delta - min / delta;
setPosition(np);
}
});
},
startEditInList = function startEditInList(e, data) {
tabId = data.tabId;
$('#editinlist-wrapper-' + tabId + ' .b-slider__el').each(function () {
self = this;
fromInput = true;
getDataSlider();
var value = this.getAttribute('data-value'),
bound = max - min,
delta = bound / maxleft,
np = value / delta - min / delta;
setPosition(np);
});
},
sliderMove = function sliderMove(e, sv) {
e = e || window.event;
var f = this.value.substr(0, 1) === '-' ? '-' : '';
this.value = f + this.value.replace(/\D/g, '');
fromInput = true;
var id = this.getAttribute('id');
self = App.Dom.byId(id + '-slider');
getDataSlider();
var value = App.Dom.byId(inputId).value,
ldf = value % step,
rdf = step - ldf,
bound = max - min,
delta = bound / maxleft,
initDelta = min % step,
np,
elSlider = App.Dom.byId(inputId + '-slider');
value -= 0;
if (ldf > rdf) {
value += rdf;
} else {
value -= ldf;
}
value += initDelta;
this.value = value;
np = value / delta - min / delta;
if (np > maxleft) {
fromInput = false;
}
setPosition(np);
blockEvent(e);
if (elSlider) {
elSlider.setAttribute('data-value', value);
}
EventMgr.trigger('changeSliderValue', { tabId: tabId });
return false;
},
sliderKeyDownHandler = function sliderKeyDownHandler(e) {
e = e || window.event;
var codeKey = e.which || e.keyCode,
id;
if (codeKey === 38 || codeKey === 40) {
id = this.getAttribute('id');
self = $('a#' + id + '-slider')[0];
getDataSlider();
blockEvent(e);
}
if (codeKey === 38 && !e.ctrlKey) {
clearInterval(intId);
sliderMoveForKeyDown(true);
intId = setInterval(function () {
sliderMoveForKeyDown(true);
}, 100);
blockEvent(e);
} else if (codeKey === 40 && !e.ctrlKey) {
clearInterval(intId);
sliderMoveForKeyDown(false);
intId = setInterval(function () {
sliderMoveForKeyDown(false);
}, 100);
blockEvent(e);
}
},
deleteSliderHandler = function deleteSliderHandler() {
var f = this.value.substr(0, 1) === '-' ? '-' : '';
this.value = f + this.value.replace(/\D/g, '');
clearInterval(intId);
},
sliderMoveForKeyDown = function sliderMoveForKeyDown(up) {
var input = App.Dom.byId(inputId),
value = input.value;
if (up) {
value = parseInt(value, 10) + step;
} else {
if (value === max) {
value -= 3;
} else {
value -= step;
}
}
input.value = value;
EventMgr.trigger('changeSliderValue', { tabId: tabId });
$('#' + inputId).trigger('change');
},
sliderToPoint = function sliderToPoint(e) {
e = e || window.event;
self = $(this).children('.b-slider__el')[0];
getDataSlider();
shiftX = e.clientX - $(this).offset().left - 7;
setPosition(shiftX);
$('#' + inputId).trigger('change');
},
drag = function drag(e) {
$(this).trigger('focus');
e = e || window.event;
if (e.touches) {
shiftX = e.touches[0].pageX - parseInt(this.style.left, 10);
document.ontouchmove = move;
document.ontouchend = drop;
document.ontouchcancel = drop;
} else {
shiftX = e.clientX - parseInt(this.style.left, 10);
document.onmousemove = move;
document.onmouseup = drop;
}
self = this;
getDataSlider();
blockEvent(e);
return false;
},
//Handler for move
move = function move(e) {
e = e || window.event;
if (e.touches) {
setPosition(e.touches[0].pageX - shiftX);
} else {
setPosition(e.clientX - shiftX);
}
blockEvent(e);
return false;
},
//Handler for mouseup, unbind mousemove and mouseup
drop = function drop(e) {
$(this).trigger('blur');
e = e || window.event;
document.onmousemove = null;
document.onmouseup = null;
document.ontouchmove = null;
document.ontouchend = null;
document.ontouchcancel = null;
$('#' + inputId).trigger('change');
blockEvent(e);
};
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.Slider.js.map
'use strict';
/**
Select Autocomplete
provide select with options autocomplete
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @param {object} ScrollHandler Scrollbar library
* @return {object}
**/
App.SelectAutoComplete = function (window, $, EventMgr, App, ScrollHandler) {
'use strict';
var inputSelector = '.b-select-ac__input',
chooseListItem = '.i-select-ac__list-item',
keys = {
'38': 'UPKEY',
'40': 'DOWNKEY',
'37': 'LEFTKEY',
'39': 'RIGHTKEY',
'13': 'ENTERKEY',
'9': 'TABKEY'
};
function $content() {
var content;
return function () {
if (!content || content.length === 0) {
content = $('#main-wrapper');
}
return content;
}();
}
function $body() {
var content;
return function () {
if (!content || content.length === 0) {
content = $('body');
}
return content;
}();
}
function init() {
EventMgr.on($content(), inputSelector, 'keyup', keyUpHandler);
EventMgr.on($content(), inputSelector, 'keydown', tabUpHandler);
EventMgr.on($content(), inputSelector, 'blur', checkValue);
EventMgr.on($content(), inputSelector, 'click', getDefaultOptions);
EventMgr.on($content(), inputSelector, 'click', preventDefault);
EventMgr.bind('selectAutoCompleteResponse', makeChooseList);
EventMgr.on($content(), chooseListItem, 'click', chooseListItemHandler);
}
var timer, lastValue;
function preventDefault(e) {
e.preventDefault();
e.stopPropagation();
}
function getChooseList(elem, firstRun) {
var name = elem.getAttribute('data-name'),
tabId = elem.getAttribute('data-tabid'),
url = window.pageInfo.url,
param = $('#frm-' + tabId).serializeObject(),
value = elem.value;
param[name] = elem.value;
/* jslint camelcase: false */
param.sv_field = name;
param.sv_autocomplete = 'yes';
/* jslint camelcase: true */
if (value !== lastValue || firstRun) {
EventMgr.trigger('ajaxRequest', {
url: url,
param: param,
trfunc: 'selectAutoCompleteResponse',
invar: { tabId: tabId, sourceField: name, value: value },
type: 'post', outtype: 'json', queue: 'noqueue' });
}
lastValue = value;
}
function getDefaultOptions() {
// close others list
$body().trigger('click');
var elem = this;
getChooseList(elem, true);
}
/**
* KeyUp handler
* get choose list or set value from choose list
* @param {object} e
* @this {Node}
*/
function keyUpHandler(e) {
e = e || window.event;
var codeKey = e.which || e.keyCode;
if (keys[codeKey]) {
keyChooseListItem(e, keys[codeKey], this);
return;
}
var elem = this;
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(function () {
getChooseList(elem);
}, 200);
}
/**
* Choose value by up/down key
* @param {Object} e Event object
* @param {String} key Name of key
* @param {HTMLElement} elem
* @param {Boolean} dontPrevent Don't prevent default action
*/
function keyChooseListItem(e, key, elem, dontPrevent) {
var name = elem.getAttribute('data-name'),
tabId = elem.getAttribute('data-tabid'),
$selected = $('#b-select-ac-list__' + name + '-' + tabId + ' .b-select-ac__list-item_selected_yes');
if ($selected.length === 0) {
$selected = $('#b-select-ac-list__' + name + '-' + tabId + ' .i-select-ac__list-item:first');
if ($selected.length === 0) {
return;
} else {
$selected.addClass('b-select-ac__list-item_selected_yes');
chooseListItemHandler.apply($selected[0], [e, true, dontPrevent]);
return;
}
}
if (key === 'UPKEY') {
var prev = $selected.prev();
if (prev.length !== 0) {
$selected.removeClass('b-select-ac__list-item_selected_yes');
prev.addClass('b-select-ac__list-item_selected_yes');
chooseListItemHandler.apply(prev[0], [e, true, dontPrevent]);
}
} else if (key === 'DOWNKEY') {
var next = $selected.next();
if (next.length !== 0) {
$selected.removeClass('b-select-ac__list-item_selected_yes');
next.addClass('b-select-ac__list-item_selected_yes');
chooseListItemHandler.apply(next[0], [e, true, dontPrevent]);
}
} else if (key === 'ENTERKEY') {
chooseListItemHandler.apply($selected[0], [e, false, dontPrevent]);
} else if (key === 'TABKEY') {
//choose only when selected 1st elem
if ($selected.index() === 0) {
chooseListItemHandler.apply($selected[0], [e, true, dontPrevent]);
}
}
}
var chooseListStorage = {},
VALUESCACHE = {};
/**
* Build choose list from response
* @param {Object} e
* @param {Object} data
* @return {Boolean}
*/
function makeChooseList(e, data) {
var tabId = data.tabId,
fieldName = data.sourceField,
commonId = fieldName + '-' + tabId,
listElem = App.Dom.byId('b-select-ac-list__' + commonId),
listElemWrapperId = 'cont-b-select-ac-list__' + commonId,
listElemWrapper = App.Dom.byId(listElemWrapperId),
chooseList = data.setvalues[fieldName],
defValue = data.value,
l,
html = '',
value,
re,
options = {},
id = new Date().getTime(),
focusedElem = document.activeElement;
//show only if element is focused
if (focusedElem) {
if (focusedElem.getAttribute('data-name') !== fieldName) {
return false;
}
}
//trigger setvalues if somebody add other field values
if (data[data.sourceField]) {
data[data.sourceField] = null;
EventMgr.trigger('formSetValues', data);
}
if (chooseList && chooseList.slist) {
l = chooseList.slist.length;
for (var i = 0; i < l; i++) {
value = chooseList.slist[i].value;
if (typeof value === 'string') {
re = new RegExp('(' + App.u.escapeRegExp(defValue) + ')', 'i');
value = value.replace(re, '<span class="b-select-ac__font-normal">$1</span>');
html += '<li data-id="' + i + '" data-lid="' + id + '"' + ' class="b-select-ac__list-item i-select-ac__list-item">' + value + '</li>';
options[String(i)] = {
key: chooseList.slist[i].key,
value: chooseList.slist[i].value
};
}
}
chooseListStorage[String(id)] = {
options: options
};
listElem.innerHTML = html;
} else {
listElem.innerHTML = '<li class="b-select-ac__list-item i-select-ac__list-item ' + 'b-select-ac__list-item_notfound_yes" data-lid="' + id + '">' + pageInfo.notfound + '</li>';
}
if (listElemWrapper.style.display !== 'block') {
listElemWrapper.style.display = 'block';
$body().on('click.closeChooseList', $.proxy(closeChooseList, listElem));
} else {
$body().off('click.closeChooseList');
$body().on('click.closeChooseList', $.proxy(closeChooseList, listElem));
}
EventMgr.trigger('updateScroll', listElemWrapperId);
App.Common.setOptionListPosition('#opt-', commonId);
}
function setValue(opt) {
opt = opt || {};
var inputValue = App.Dom.byId(opt.id),
inputKey = App.Dom.byId('key-' + opt.id);
if (inputValue) {
inputValue.value = opt.value;
}
if (inputKey) {
inputKey.value = opt.key;
$(inputKey).trigger('change');
VALUESCACHE[opt.id] = {
key: opt.key,
value: opt.value
};
}
}
/**
* Set choosen value to element
* @param {Object} e
* @param {Boolean|Undefined} dontclose Don't close flag
* @param {Boolean|Undefined} dontPrevent Don't prevent default action
* @this {Node}
*/
function chooseListItemHandler(e, dontclose, dontPrevent) {
if (!dontPrevent) {
e.preventDefault();
}
var elem = this,
id = elem.getAttribute('data-id'),
lid = elem.getAttribute('data-lid'),
parentNode = elem.parentNode,
inputId = parentNode.getAttribute('data-id');
if (chooseListStorage[lid] && chooseListStorage[lid].options) {
if (chooseListStorage[lid].options[id] !== undefined) {
setValue({
id: inputId,
key: chooseListStorage[lid].options[id].key,
value: chooseListStorage[lid].options[id].value
});
}
}
if (!dontclose) {
closeChooseList.apply(parentNode, [{}, true]);
}
}
function tabUpHandler(e) {
e = e || window.event;
var codeKey = e.which || e.keyCode;
if (keys[codeKey] === 'TABKEY') {
if (this.value !== '') {
keyChooseListItem(e, 'TABKEY', this, true);
}
//close list
$body().trigger('click');
}
}
/**
* check congruence for value & key
*/
function checkValue(e, force) {
var id = this.getAttribute('id'),
optListWrapper = App.Dom.byId('cont-b-select-ac-list__' + id),
optList = App.Dom.byId('b-select-ac-list__' + id);
if (force || optListWrapper && optListWrapper.style.display === 'none' || $(optList).find('.b-select-ac__list-item_notfound_yes').length) {
var inputKey = App.Dom.byId('key-' + id);
if (VALUESCACHE[id] && inputKey && VALUESCACHE[id].key === inputKey.value) {
if (this.value !== '') {
this.value = VALUESCACHE[id].value;
} else {
setValue({ id: id, key: '', value: '' });
}
} else {
this.value = '';
}
}
}
/**
* check fullmatch value & options
*/
function checkFullmatch(options, value) {
var fullmatch = false,
fullmatchKey;
if (options && value !== undefined) {
var l = options.length;
for (var key in options) {
if (options.hasOwnProperty(key)) {
fullmatchKey = key;
if (options[key].value === value) {
fullmatch = true;
break;
}
}
}
}
return {
yes: fullmatch,
key: options[fullmatchKey].key
};
}
/**
* close Choose list
* @param {Boolean|Undefined} chosen
* @param {Object} e
* @this {Node}
*/
function closeChooseList(e, chosen) {
var listItem = $(this).find('.i-select-ac__list-item');
var listElemWrapper = this.parentNode;
if (listItem[0] && !chosen) {
var lid = listItem[0].getAttribute('data-lid'),
id = this.getAttribute('data-id');
if (id && chooseListStorage && chooseListStorage[lid]) {
var inputValue = App.Dom.byId(id),
fullmatch = checkFullmatch(chooseListStorage[lid].options, inputValue.value);
//if (chooseListStorage[lid].fullmatchKey !== false) {
if (fullmatch.yes) {
//set valuesCache
setValue({
id: id,
key: fullmatch.key,
value: inputValue.value
});
} else {
//check for valid value in value field
checkValue.apply(inputValue, [{}, true]);
}
}
}
listElemWrapper.style.display = 'none';
this.innerHTML = '';
$body().off('click');
chooseListStorage = {};
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App, ScrollHandler);
//# sourceMappingURL=App.SelectAutoComplete.js.map
'use strict';
/**
* resize cols in table
* @param {object} window global object
* @param {object|function} $ jQuery
* @param {object} EventMgr Event manager
* @param {object} App Application
*/
App.TableRowResize = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
EventMgr.on('#content', '.content .rowHandler', 'mousedown', tableResizeHandler);
},
shiftX = 0,
self = '',
left = '',
lastPos,
cWidth = '',
pcWidth = '',
prevCol = '',
curCol = '',
// min width of col (2% of table width)
minWidth = '',
tabId,
tableResizeHandler = function tableResizeHandler(e) {
e = e || window.event;
shiftX = e.clientX;
document.onmousemove = move;
document.onmouseup = drop;
this.style.position = 'absolute';
calcBounds(this);
var actTab = $('.tab-content_st_active .content'),
h = actTab.height();
tabId = actTab.attr('data-tabid');
this.style.height = h + 'px';
left = this.offsetLeft;
self = this;
blockEvent(e);
},
move = function move(e) {
e = e || window.event;
var newpos = e.clientX - shiftX;
if (checkBounds(newpos)) {
lastPos = newpos;
}
self.style.left = left + lastPos + 'px';
blockEvent(e);
},
drop = function drop(e) {
var param = setNewWidths();
self.style.height = '100%';
self.style.left = '';
self.style.position = '';
document.onmouseup = null;
document.onmousemove = null;
self = '';
if (!param) {
return;
}
param.func = 'colwidth';
param.out = 'xml';
param.elid = App.Tabs.tabs[tabId].func;
EventMgr.trigger('ajaxRequest', {
param: param,
trfunc: 'DoNothing',
queue: 'noqueue' });
},
calcBounds = function calcBounds(self) {
//width all table
var twidth = $('.tab-content_st_active .list_table').width(),
per;
curCol = self.parentNode;
//width cur col
cWidth = curCol.offsetWidth;
prevCol = App.Common.getPreviousNode(curCol);
// width prev col
pcWidth = prevCol.offsetWidth;
// one percent of width table in pixel
per = twidth / 100;
minWidth = 2 * per;
},
checkBounds = function checkBounds(newpos) {
if (newpos >= 0) {
if (cWidth - newpos < minWidth) {
return false;
}
} else {
if (pcWidth + newpos < minWidth) {
return false;
}
}
return true;
},
//set new width for cols when drag
setNewWidths = function setNewWidths() {
if (!lastPos) {
return undefined;
}
var curColWidth = parseInt(curCol.style.width, 10),
curPrevColWidth = parseInt(prevCol.style.width, 10),
sumWidth = curColWidth + curPrevColWidth,
newWidth,
otherWidth;
if (lastPos > 0) {
newWidth = 2 * (cWidth - lastPos) / minWidth;
newWidth = newWidth > 2 ? newWidth : 2;
curCol.style.width = Math.round(newWidth) + '%';
otherWidth = sumWidth - newWidth;
otherWidth = otherWidth > 2 ? otherWidth : 2;
prevCol.style.width = Math.round(otherWidth) + '%';
} else {
newWidth = 2 * (pcWidth + lastPos) / minWidth;
newWidth = newWidth > 2 ? newWidth : 2;
prevCol.style.width = Math.round(newWidth) + '%';
otherWidth = sumWidth - newWidth;
otherWidth = otherWidth > 2 ? otherWidth : 2;
curCol.style.width = Math.round(otherWidth) + '%';
}
lastPos = undefined;
return syncCols();
},
//sync col width on list table
syncCols = function syncCols() {
var colWidth = {};
$('.tab-content_st_active .sort_table td').each(function (index) {
var name = this.getAttribute('data-colname'),
width = parseInt(this.style.width, 10),
id = 'lt-' + $(this).parents('.sort_table').attr('id').replace('sort_table-', '');
// set width in pixel
this.firstChild.style.width = width * (minWidth / 2) + 'px';
colWidth[name] = width;
//for body table
$('.tab-content_st_active .list_table#' + id + ' tbody tr:first td:eq(' + index + ')').width(width + '%');
//for head table
$('.tab-content_st_active .list_table#' + id + ' th[data-colname="' + name + '"]').width(width + '%');
//for statusbar table
$('.tab-content_st_active .statusbar td[data-colname="' + name + '"]').width(width + '%');
});
return colWidth;
};
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.TableRowResize.js.map
'use strict';
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/**
* Модуль отвечает за вкладки и их рендер
* @param {object} window global object
* @param {object|function} $ jQuery
* @param {object} EventMgr Event manager
* @param {object} App Application
* @param {object} templates HTML templates
*/
App.Tabs = function (window, $, EventMgr, App, templates) {
'use strict';
var tabs = {},
pageInfo = window.pageInfo,
tabIndex = 1,
tabN = 'tab',
rowId = 0,
activeTab = '',
//current active tab id
defaultTab = '',
//defaultTab
mainWrapperSel = '#main-wrapper',
init = function init() {
EventMgr.bind('ajaxResponse', buildTabWrapper);
EventMgr.bind('builtTab', appendTab);
EventMgr.bind('comboCtrlShiftZKeyUp', closeAllTabs);
EventMgr.bind('comboCtrlShiftXKeyUp', closeOthersTabs);
EventMgr.on(mainWrapperSel, 'a.close', 'click', closeTabClickHandler);
EventMgr.on(mainWrapperSel, 'span.back', 'click', backBtnHandler);
EventMgr.on(mainWrapperSel, '#tabs .switch', 'click', switchTabs);
EventMgr.on(mainWrapperSel, '#tabs .switch', 'mousedown', closeTabsByMiddleBtn);
EventMgr.on(mainWrapperSel, '#tabs .switch', 'dblclick', upSwitchedTabs);
EventMgr.bind('reloadTab', reloadTabData);
EventMgr.bind('updateTab', updateTab);
EventMgr.bind('ajaxFormResponse', formHandler);
EventMgr.on(mainWrapperSel, '.i-button_type_cancel', 'click', cancelBtnHandler);
EventMgr.bind('ajaxResponseForDashboard', renderDashboardTable);
EventMgr.bind('addedChart', addChartToTab);
EventMgr.bind('formGetTreeBranch', formGetTreeBranch);
EventMgr.bind('getActiveHint', getActiveHint);
EventMgr.on(mainWrapperSel, 'input, textarea', 'change', formFieldChangeHandler);
EventMgr.on(mainWrapperSel, '.i-list-icon__stop', 'click', stopAutoUpdate);
EventMgr.addHook('formSetValues,formSubmit', addModelToSetvalues);
EventMgr.bind('updateModel', updateModelBySetvalues);
EventMgr.addHook('listMultiSelect,listSelect,listLiveFound,' + 'listUnSelect,ajaxResponseEditInListSave,updateTotalList,' + 'clickedGroupItem', addListModel);
EventMgr.bind('saveFormPageState', saveFormPageState);
EventMgr.on(mainWrapperSel, '.i-take-favorite', 'click', favoriteToggle);
EventMgr.on(mainWrapperSel, '.i-pin', 'click', pinToggle);
EventMgr.bind('loadPage', removeSfromParam);
EventMgr.addHook('menuAction,testColCheck', addTabsModel);
EventMgr.bind('changeTabSortIndex', changeTabSortIndex);
EventMgr.bind('updateTotalWithConvertReport', updateTotalWithConvertReport);
EventMgr.addToTriggerStack('escKeyUp', esckeyHandler, 1);
},
//remove sfrom param form url after login
removeSfromParam = function removeSfromParam() {
var params = App.u.parseParams(window.location.search);
if (params.sfrom) {
if (window.history) {
setTimeout(function () {
window.history.pushState('default', '', pageInfo.binary);
}, 10000);
}
}
},
checkDasboard = function checkDasboard(d) {
if (d && d.dashboard) {
$('#switch-tab0').trigger('click');
return false;
}
return true;
},
checkFeatures = function checkFeatures(data) {
//if has redirect keep new tabs
if (data && data.__src !== 'okList' && data.__src !== 'okForm') {
var params;
if (data.features && pageInfo.features && !data.wizard && data.features !== pageInfo.features) {
params = App.u.parseParams(window.location.search);
params.ssavetabs = 1;
if (!params.scountreload) {
params.scountreload = 1;
} else {
params.scountreload -= 0;
params.scountreload += 1;
}
if (params.scountreload < 5) {
window.location.search = '?' + App.u.getQueryString(params);
return false;
}
} else {
//remove params from url
params = App.u.parseParams(window.location.search);
if (params.ssavetabs) {
setTimeout(function () {
if (window.history) {
window.history.pushState('default', '', pageInfo.binary);
}
}, 10000);
}
}
}
return true;
},
checkReload = function checkReload(data) {
if (data) {
if (data.reload) {
var newLocation = pageInfo.url;
if (data.savetab) {
newLocation += '?sfrom=sessionexpired';
}
if (data.__src && (data.__src === 'menuAction' || data.__src === 'toolbarAction' || data.__src === 'report' || data.__src === 'reloadTab')) {
makeFakeTab(data);
}
if (data.__src && data.__src === 'filterset') {
addBeforeLoadRequest(data);
}
window.location = newLocation;
return false;
}
}
return true;
},
checkNewWin = function checkNewWin(data) {
if (data) {
if (data.location && data.newwin) {
window.open(data.location, '_blank');
//remove loading className
$('.m-item.loading').removeClass('loading');
return false;
} else if (data.location) {
window.location = data.location;
return false;
}
}
return true;
},
checkNewForm = function checkNewForm(data) {
if (data) {
var param,
options,
newFormParams = data.formParam,
parent = data.parent;
if (newFormParams) {
param = App.u.parseParams(newFormParams);
options = {
noesc: true,
param: param,
invar: {
waitingTabId: data.targetTabId,
parent: parent,
dataSaved: true,
'__src_func': data.__src_func,
'__src': 'okForm',
'__srcBtn': data.__srcBtn,
newtab: data.newtab
},
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
queue: 'noqueue' };
if (data.openAsChild) {
options.invar.parent = data.tabId;
}
EventMgr.trigger('ajaxRequest', options);
return false;
}
}
return true;
},
checkNewList = function checkNewList(data) {
if (data) {
var param,
newListParams = data.listParam,
parent = data.parent;
if (newListParams) {
param = App.u.parseParams(newListParams);
EventMgr.trigger('ajaxRequest', {
noesc: true,
param: param,
invar: {
waitingTabId: data.targetTabId,
parent: parent,
dataSaved: true,
'__src': 'okList',
'__srcBtn': data.__srcBtn,
newtab: data.newtab
},
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
queue: 'noqueue' });
if (data.openAsChild) {
options.invar.parent = data.tabId;
}
EventMgr.trigger('tabLoading', { tabId: parent });
return false;
}
}
return true;
},
storage = App.Common.storage,
//render breadcrumb
getBreadcrumb = function getBreadcrumb(breadcrumb) {
var str = '';
/* jslint forin:true */
for (var key in breadcrumb) {
str += '<a href="#" data-id="' + key + '" class="breadcrumb">' + breadcrumb[key].name + '</a>';
}
return str;
},
resetToDefaultFormButton = function resetToDefaultFormButton(tabId) {
if (tabs[tabId] && tabs[tabId].type === 'form') {
$('#frm-' + tabId + ' .b-button_st_disabled').each(function () {
var $self = $(this);
$self.html($self.attr('data-enabled'));
$self.removeClass('b-button_st_disabled');
});
}
},
//cancel btn handler
cancelBtnHandler = function cancelBtnHandler(e) {
var tabId = this.getAttribute('data-tabid'),
func = this.getAttribute('data-func'),
$self = $(this),
form = $('#frm-' + tabId),
isShowcaseForm = form.hasClass('b-form_showcase_yes'),
flags = $self.getFlags(),
parent,
options;
if (!tabs[tabId]) {
return;
}
parent = tabs[tabId].parent;
if (flags.refresh && parent) {
EventMgr.trigger('reloadTab', { tabId: parent, __src: 'formCancelRefresh', filter: true });
}
//return list if it from sametab
if (tabs[tabId].rParentObj) {
var param = tabs[tabId].rParentObj,
targetTabId = tabId;
tabs[tabId].rParent = undefined;
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url, param: param,
invar: {
parent: parent,
targetTabId: targetTabId,
iType: 'replace',
dataSaved: true
},
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failCommonAjaxResponse',
queue: 'noqueue' });
EventMgr.trigger('tabLoading', { tabId: tabId });
} else if (func) {
options = {
param: {
func: func
},
invar: {
parent: parent,
targetTabId: tabId,
iType: 'replace',
dataSaved: true
},
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failCommonAjaxResponse',
queue: 'noqueue'
};
EventMgr.trigger('ajaxRequest', options);
EventMgr.trigger('tabLoading', { tabId: tabId });
} else {
closeTab(e, tabId);
}
e.preventDefault();
},
unsavedDataCheckboxHandler = function unsavedDataCheckboxHandler(val) {
if (val === 'on') {
var options = {
param: {
func: 'usrparam',
elid: pageInfo.user,
checkunsaved: 'off',
sok: 'ok'
},
type: 'get',
outtype: 'json',
trfunc: 'DoNothing',
queue: 'noqueue'
};
EventMgr.trigger('ajaxRequest', options);
pageInfo.checkUnsaved = false;
}
},
addBeforeLoadRequest = function addBeforeLoadRequest(data) {
var tabId = data.tabId;
if (tabs[tabId]) {
tabs[tabId].beforeRequest = data.sourceParamString;
}
EventMgr.trigger("changedTabs", { tabs: tabs, forceActive: true });
},
makeFakeTab = function makeFakeTab(data) {
var tabId, tabObj;
tabId = tabN + tabIndex;
tabObj = {
status: 1,
forceActive: true,
title: '',
paramObjAll: App.u.parseParams(data.sourceParamString)
};
//check for su func
var func = tabObj.paramObjAll.func;
if (String(func).match(/su$/) || func === 'chlevel') {
return;
}
if (data.parent) {
if (data.targetTabId || data.tabId) {
tabId = data.targetTabId || data.tabId;
}
tabObj.hType = 'child';
if (tabs[data.parent]) {
tabs[data.parent].child = tabId;
}
} else {
if (data.targetTabId) {
tabId = data.targetTabId;
}
tabObj.hType = 'parent';
}
tabs[tabId] = tabObj;
EventMgr.trigger('changedTabs', { tabs: tabs, forceActive: true });
},
//wrapper buildTab for check for unsaved form data
buildTabWrapper = function buildTabWrapper(e, data) {
var isChanged = false,
tabId;
//check for open in new tab & replace tab from redirect
if (!data.newtab && !data.dataSaved && pageInfo.checkUnsaved) {
//check for active tab is form
if (tabs[activeTab]) {
//find form in tab group
tabId = findTabForm(activeTab);
if (tabId !== activeTab) {
//activate tab if not active
if (tabs[tabId] && tabs[tabId].status === 0) {
activateTab(tabId);
}
}
var changedFields = checkFormChange(tabId);
if (changedFields.isChanged) {
isChanged = true;
//show confirmBox
EventMgr.trigger('confirmBoxShow', {
callbackOk: buildTab,
callbackCancel: function callbackCancel() {
$('.m-item.loading').removeClass('loading');
},
text: String(pageInfo.unsavedData).replace('__VALUE__', changedFields.count) + '<br/><span class="b-text_style_bold">' + changedFields.labels + '</span>',
args: [e, data],
checkbox: {
msg: pageInfo.unsavedDontShow,
cb: unsavedDataCheckboxHandler
}
});
}
}
}
if (!isChanged) {
buildTab(e, data);
}
},
findTabForm = function findTabForm(tabId) {
if (tabs[tabId] && tabs[tabId].type === 'form') {
return tabId;
} else {
//form can be only last in tab group
if (tabs[tabId].child) {
return findTabForm(tabs[tabId].child);
}
}
return false;
},
//build new tab
buildTab = function buildTab(e, data) {
EventMgr.trigger('hideHint');
//check for user.su
var parent = data.parent ? data.parent : '',
ok = data.ok || false,
tabId,
obj,
type,
delay,
timeId;
//hide loader for parent tab
if (parent) {
EventMgr.trigger('tabLoadingHide', { tabId: parent });
//reset btn on form if opened as a child
resetToDefaultFormButton(parent);
}
//hide loader for targetTab (for case if has error)
if (data.targetTabId) {
EventMgr.trigger('tabLoadingHide', { tabId: data.targetTabId });
}
//hide loader for srcTab (when redirect) (for case if has error)
if (data.srcTabId) {
EventMgr.trigger('tabLoadingHide', { tabId: data.srcTabId });
}
if (!checkReload(data) || !checkNewWin(data) || !checkNewList(data) || !checkNewForm(data)) {
return false;
}
if (ok) {
if (parent !== undefined) {
EventMgr.trigger('reloadTab', { tabId: parent, filter: true, __src: 'buildTabOk' });
return;
}
}
EventMgr.trigger('startbuildTab', 'new empty tab');
tabId = tabN + tabIndex;
obj = data;
type = obj.type || obj.id;
if (obj.exType === 'dashboard') {
tabId = 'tab0';
} else if (obj.targetTabId) {
tabId = obj.targetTabId;
} else if (obj.showcase) {
tabId = 'tab0';
} else {
tabIndex++;
}
//Гвозди
//check for error on big Cicle
if (obj.error && !obj.ignErr && obj.type !== 'form' && obj.type !== 'inspectorForm' && obj.type !== 'showcaseForm' && obj.type !== 'report' || obj.userexpMsg === undefined && obj.error && obj.type === 'form') {
EventMgr.trigger('hideLoader');
type = 'fatalerror';
} else if (obj.error && obj.ignErr) {
return;
}
if (type === '' && !tabs.tab0 || obj.exType === 'dashboard') {
type = 'dashboard';
}
if (obj.msg) {
$.extend(App.Common.msg, obj.msg);
}
switch (type) {
case 'list':
buildList(tabId, obj);
break;
case 'form':
buildForm(tabId, obj);
break;
case 'dashboard':
buildDashboard(tabId, obj);
break;
case 'report':
buildReport(tabId, obj);
EventMgr.trigger('reportLoad');
break;
case 'map':
case 'rack':
buildMap(tabId, obj);
break;
case 'fatalerror':
buildFatalError(tabId, obj);
break;
case 'empty':
buildEmpty(tabId, obj);
break;
case 'inspectorForm':
buildInspectorForm(tabId, obj);
break;
case 'showcaseForm':
buildShowcaseForm(tabId, obj);
break;
default:
EventMgr.trigger('pullMsg', { msg: 'Do not support type = "' + type + '" of metadata' });
}
//handler for autoupdate
//@TODO this shit must to rewrite
delay = obj.autoupdate;
if (!tabs[tabId]) {
return;
}
if (tabs[tabId].timeId) {
clearTimeout(tabs[tabId].timeId);
}
if (obj.autoupdate !== undefined) {
timeId = setTimeout(function (tabId, delay) {
return function () {
EventMgr.trigger('updateTab', { tabId: tabId, delay: delay });
};
}(tabId, delay), obj.autoupdate * 1000);
tabs[tabId].autoupdate = true;
tabs[tabId].timeId = timeId;
} else {
tabs[tabId].autoupdate = false;
tabs[tabId].timeId = undefined;
}
//show tips
if (obj.tips) {
setTimeout(function () {
EventMgr.trigger('showTips', {
tips: obj.tips,
inTab: true,
tabId: tabId,
sameModule: obj.sameModule });
}, 1);
}
},
//build tab with list/table
buildList = function buildList(tabId, obj) {
var plid = '',
elid = '',
pagerParam = '',
breadcrumb,
body = prepareTab(obj, tabId);
if (obj.plid) {
//what the hell?
plid = '&plid=' + encodeURIComponent(obj.plid);
}
if (obj.elid) {
elid = '&elid=' + encodeURIComponent(obj.elid);
}
if (obj.sortOrder) {
pagerParam += '&p_order=' + obj.sortOrder;
}
if (obj.sortCol) {
pagerParam += '&p_sort=' + obj.sortCol;
}
if (obj.pager.pager === 'true') {
pagerParam += '&p_num=' + obj.pager.pageNum + '&p_cnt=' + obj.pager.pageCnt;
}
//flag for render bottom bar
obj.sbar = true;
if (App.Global.warning) {
obj.warning = App.Global.warning;
}
if (obj.selid) {
App.Global.selid = obj.selid;
}
if (obj.scrollTop) {
App.Global.scrollTop = obj.scrollTop;
}
obj.tabId = tabId;
//check for extra confirm
if (obj.warning) {
var warning = $.extend({}, obj.warning);
EventMgr.trigger('checkWarningForConfirm', { d: obj, w: warning });
}
var table = renderTable(obj);
//render pager
var pager = '';
if (obj.pager.pager === 'true') {
pager = buildPager(obj.pager, tabId);
}
var filter = '';
if (obj.filter === 'true') {
if (obj.activeFilter.status) {
filter = 'filter filter-hide filter-set';
} else {
filter = 'filter filter-hide';
}
}
breadcrumb = getBreadcrumb(obj.breadcrumb);
delete obj.breadcrumb.name;
storage.breadcrumb[tabId] = obj.breadcrumb;
body.autoupdate = obj.autoupdate !== undefined;
body.tsettings = App.u.escapeQuote(obj.hintTsettings) || '';
body.hAutoupdate = App.u.escapeQuote(obj.hintAutoupdate) || '';
body.hExport = App.u.escapeQuote(obj.hintExport) || '';
body.hSelectAll = App.u.escapeQuote(obj.hintSelectAll) || '';
body.fHelp = App.u.escapeQuote(obj.hintFilter) || '';
body.pNum = obj.pager.pageNum;
body.porder = obj.sortOrder;
body.sortCol = obj.sortCol;
body.pcnt = obj.pager.pageCnt;
body.breadcrumb = breadcrumb;
body.plidAttr = obj.plid ? 'data-plid= "' + filterXSS.safeAttrValue('div', 'data-plid', obj.plid) + '"' : '';
body.convertAttr = obj.convert ? 'data-convert=' + obj.convert : '';
body.oplid = obj.plid || '';
body.tsplid = obj.tsplid || '';
body.tsettingsParam = filterXSS.safeAttrValue('a', 'data-url', '?func=tsetting&elid=' + obj.func + '&plid=' + obj.tsplid);
body.table = table;
body.progressid = obj.progressid;
//for toolbar btn
body.tabIdAttr = 'data-parent=' + tabId;
body.pager = pager;
body.filter = filter;
body.afilter = obj.activeFilter;
body.param = pagerParam;
body.livefilter = obj.liveFilter || '';
tabs[tabId].body = body;
//save model
tabs[tabId].__content = obj.content;
tabs[tabId].__headers = obj.headers;
App.Global.bannerHtml = null;
App.Global.targetId = '';
//APP.Global.warning = null;
if (obj.filter === 'true') {
tabs[tabId].filter = true;
tabs[tabId].filterFunc = obj.filterFunc;
} else {
tabs[tabId].filter = false;
}
EventMgr.trigger('builtTab', {
tab: tabs[tabId],
newtab: obj.newtab,
targetTabId: obj.targetTabId,
iType: obj.iType,
srcData: obj });
activateNewTab(tabId, obj.newtab, obj.iType);
if (obj.children) {
EventMgr.trigger('loadChildren', {
parent: tabId,
children: obj.children });
}
//if tab have progressbar - run it
if (obj.progressid) {
var param = { elid: obj.progressid, func: 'progress.get' };
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: param,
invar: { tabId: tabId, param: param, progresstype: undefined },
type: 'get',
outtype: 'json',
trfunc: 'progressBarResponse',
queue: 'noqueue' });
}
//if tab have diagram - insert it
if (obj.diagram && obj.diagram[0]) {
EventMgr.trigger('appendListWithDiagram', {
diagram: obj.diagram[0],
content: obj.content,
tabId: tabId,
gid: 'diagram-' + tabId });
}
//check for saved live filter
if (obj.liveFilter) {
$('#' + tabId + '-search').trigger('keyup');
}
},
//build tab with form
buildForm = function buildForm(tabId, obj) {
var body = prepareTab(obj, tabId);
if (!obj.form) {
return;
}
obj.form.id = tabId;
obj.form.formflags = obj.formflags || {};
obj.form.parent = obj.parent || '';
obj.form.func = obj.func;
body = prepareFormTab(obj, tabId, body);
tabs[tabId].formModel = body.model;
tabs[tabId].formSource = body.formSource;
tabs[tabId].body = body;
EventMgr.trigger('builtTab', {
tab: tabs[tabId],
newtab: obj.newtab,
targetTabId: obj.targetTabId,
iType: obj.iType,
srcData: obj });
activateNewTab(tabId, obj.newtab, obj.iType);
if (obj.error) {
EventMgr.trigger('focusOnErrorField', { tabId: tabId });
}
},
//build tab with dashboard
buildDashboard = function buildDashboard(tabId, obj) {
var msg;
tabs[tabId] = new TabObj(tabId, 1, 'dashboard');
if (!obj.error && obj.blocks) {
tabs[tabId].body = renderDashboard(obj.blocks);
} else if (obj.lateLoad) {
msg = pageInfo.loading;
/*jslint sub: true*/
tabs[tabId].body = { id: tabId, top: msg, left: '', right: '' };
/*jslint sub: false*/
} else if (!obj.shithappend) {
msg = templates.fatalError({ message: obj.ermsg, ref: false });
tabs[tabId].body = { 'id': tabId, top: msg, left: '', right: '' };
} else {
msg = pageInfo.loading;
tabs[tabId].body = { id: tabId, top: msg, left: '', right: '' };
//shit happend trying again
setTimeout(function () {
var url = pageInfo.url,
param = { func: 'dashboard' };
EventMgr.trigger('ajaxRequest', {
url: url,
param: param,
invar: { exType: 'dashboard' },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
queue: 'dashboard' });
}, 500);
}
//if was error
$('#cont-tab0').remove();
tabs[tabId].func = obj.func;
EventMgr.trigger('builtTab', { tab: tabs[tabId] });
defaultTab = tabId;
//if dashboard loaded after list/form
/*jslint sub: true*/
if (!tabs['tab1'] || !tabs['tab1'].active) {
activateNewTab(tabId);
} else {
tabs['tab0'].deactive();
}
/*jslint sub: false*/
},
buildFatalError = function buildFatalError(tabId, obj) {
var ref,
refreshLink,
sTabId = obj.targetTabId || tabId,
cb;
$('.m-item.loading').removeClass('loading');
if (obj.__src === 'groupAction' || obj.__src === 'report' || obj.__src === 'toolbarAction-refresh') {
EventMgr.trigger('tabLoadingHide', { tabId: obj.tabId });
if (obj.__src === 'groupAction') {
EventMgr.trigger('reloadTab', { tabId: obj.tabId, filter: true });
}
} else if (obj.__src === 'wizardLink') {
EventMgr.trigger('tabLoadingHide', { tabId: obj.tabId });
sTabId = false;
} else if (obj.targetTabId) {
EventMgr.trigger('tabLoadingHide', { tabId: obj.targetTabId || obj.waitingTabId });
} else if (obj.waitingTabId) {
//reset to default form state
EventMgr.trigger('tabLoadingHide', { tabId: obj.waitingTabId });
resetToDefaultFormButton(obj.waitingTabId);
}
if (obj.ref) {
ref = pageInfo.url + obj.ref;
}
if (obj.ertype === 'unavailable') {
refreshLink = obj.sourceParamString;
}
//check for exist tab, and close it
if (sTabId) {
if (tabs[sTabId]) {
closeTab({ preventDefault: function preventDefault() {} }, sTabId);
}
}
//reload parent, becase it can be unexist elem
if (obj.parent) {
cb = function cb() {
EventMgr.trigger('reloadTab', { tabId: obj.parent, __src: 'fatalError' });
};
}
var html = templates.fatalAlert({
msg: obj.ermsg,
ref: ref,
refreshLink: refreshLink,
refreshLinkMsg: pageInfo.tryreload,
moreMsg: pageInfo.moreinfo
});
EventMgr.trigger('showAlert', {
msg: html,
callback: cb });
},
buildReport = function buildReport(tabId, obj) {
//@todo вынести
var bands,
body = prepareTab(obj, tabId);
obj.form.id = tabId;
obj.form.func = obj.func;
obj.reports.func = obj.func;
bands = renderBands(obj.reports, tabId);
body = prepareFormTab(obj, tabId, body);
body.helpType = 'default';
body.helpurl = '';
body.type = 'report';
body.bands = bands;
body.reportInfo = obj.reportInfo;
tabs[tabId].body = body;
EventMgr.trigger('builtTab', {
tab: tabs[tabId],
newtab: obj.newtab,
bands: obj.reports,
targetTabId: obj.targetTabId });
activateNewTab(tabId, obj.newtab, obj.iType);
},
buildMap = function buildMap(tabId, obj) {
var body = prepareTab(obj, tabId),
ermsg,
type = obj.type;
if (obj.ermsg && !obj.erobj) {
ermsg = templates.banner({ message: {
status: 'error',
classes: '',
id: tabId,
text: App.Common.wordWrap(obj.ermsg, 100),
ref: false,
refText: pageInfo.moreinfo,
dismiss: obj.msg.dismiss
} });
}
body.helpType = 'default';
body.helpurl = '';
body.type = type;
body.plid = obj.plid ? String(obj.plid).replace(/"/g, '"') : '';
body.elid = obj.elid ? String(obj.elid).replace(/"/g, '"') : '';
body.parent = obj.parent ? obj.parent : '';
body.ermsg = ermsg;
body.btng = obj.btng ? obj.btng : [];
body.btnview = obj.btnview ? 'o-' + obj.btnview : '';
body.plidAttr = obj.plid ? 'data-plid= "' + filterXSS.safeAttrValue('div', 'data-plid', obj.plid) + '"' : '';
body.convertAttr = obj.convert ? 'data-convert=' + obj.convert : '';
tabs[tabId].body = body;
EventMgr.trigger('builtTab', {
tab: tabs[tabId],
map: obj[type],
newtab: obj.newtab,
targetTabId: obj.targetTabId });
activateNewTab(tabId, obj.newtab, obj.iType);
},
buildEmpty = function buildEmpty(tabId, obj) {
var body = pageInfo.loading,
curTab;
prepareTab(obj, tabId);
curTab = tabs[tabId];
curTab.body = { id: tabId, text: '', comment: body };
curTab.status = 0;
curTab.notLoaded = true;
curTab.pin = obj.pin;
if (obj.children) {
EventMgr.trigger('loadChildren', {
parent: tabId,
children: obj.children });
}
EventMgr.trigger('builtTab', {
tab: curTab,
newtab: obj.newtab,
targetTabId: obj.targetTabId });
EventMgr.trigger('changedTabs', { tabs: tabs });
},
buildInspectorForm = function buildInspectorForm(tabId, obj) {
//if fatal error without form
if (obj.error && obj.userexpMsg === undefined) {
EventMgr.trigger('pullMsg', { msg: obj.ermsg });
return;
}
var body = prepareTab(obj, tabId);
//rename id
delete tabs[tabId];
tabId = 'modal1';
body.id = tabId;
if (!obj.form) {
return;
}
obj.form.id = tabId;
body = prepareFormTab(obj, tabId, body);
body.parent = obj.sourceTab;
var html = templates.tabContForm(body);
EventMgr.trigger('readyInspectorFormHtml', html);
},
//build external form
buildShowcaseForm = function buildShowcaseForm(tabId, obj) {
tabId = 'tab0';
var body = prepareTab(obj, tabId);
obj.form.id = tabId;
obj.form.formflags = obj.formflags || {};
obj.form.parent = obj.parent || '';
body = prepareFormTab(obj, tabId, body);
tabs[tabId].formModel = body.model;
tabs[tabId].formSource = body.formSource;
body.showcase = true;
body.nostep = !pageInfo.wizard_step;
body.notitle = !pageInfo.title;
// body.parent = obj.sourceTab;
var html = templates.tabContForm(body);
EventMgr.trigger('readyShowcaseFormHtml', html);
},
//fill body object for form
prepareFormTab = function prepareFormTab(obj, tabId, body) {
if (!body || !obj) {
return;
}
var ermsg = '',
userexpMsg = String(obj.userexpMsg).replace('__value__', obj.userexpHideFields),
renderObject;
//banner
if (obj.ermsg && !obj.erobj) {
ermsg = templates.banner({ message: {
status: 'error',
classes: 'i-message__outer-link',
id: tabId,
text: App.Common.wordWrap(obj.ermsg, 100),
ref: obj.ref ? obj.ref : false,
refText: pageInfo.moreinfo,
dismiss: obj.msg.dismiss || pageInfo.dismiss
} });
}
body.form = obj.form;
body.tabClass = obj.testMode ? ' tab-content_st_testmode' : '';
body.formstatus = obj.formstatus;
body.files = obj.withfiles ? 'withfiles' : 'withoutfiles';
body.bands = '';
body.progress = obj.progress ? obj.progress + '_' + body.itemId : false;
body.helpType = obj.helpType;
body.helpurl = obj.helpurl;
obj.form.testMode = obj.testMode;
renderObject = renderFormItems(obj.form, tabId);
body.pages = renderObject.html;
body.model = renderObject.model;
body.formSource = renderObject.source;
body.action = pageInfo.binary;
body.step = pageInfo.step;
body.formflags = obj.formflags ? obj.formflags : {};
body.buttons = obj.buttons;
body.parent = obj.parent ? obj.parent : '';
body.plid = obj.plid ? String(obj.plid).replace(/"/g, '"') : '';
body.elid = obj.elid ? String(obj.elid).replace(/"/g, '"') : '';
body.plidAttr = obj.plid ? 'data-plid= "' + filterXSS.safeAttrValue('div', 'data-plid', obj.plid) + '"' : '';
body.type = 'form';
//body.isUserexp = obj.isUserexp;
body.userexp = obj.userexp;
body.userexpMsg = userexpMsg;
body.reportInfo = undefined;
body.arePages = obj.form.length > 1 ? 'a-lot-of-pages' : '';
body.ermsg = ermsg;
body.__innervars = obj.__innervars ? objectToString(obj.__innervars) : '';
//add buttons to formModel
if (obj.buttons) {
body.model.__buttons = obj.buttons;
}
return body;
},
objectToString = function objectToString(object) {
var stringVars = '',
index = 0;
for (var key in object) {
if (index !== 0) {
stringVars += '|';
}
index++;
stringVars += key + ':' + object[key];
}
return stringVars;
},
isAlreadyPinTab = function isAlreadyPinTab(obj, tabId) {
var func = obj.func || (obj.urlObj ? obj.urlObj.func : ''),
already = false,
tab;
for (var key in tabs) {
tab = tabs[key];
if (key === tabId) {
return true;
}
if (tab && tab.paramObjAll && tab.paramObjAll.func === func) {
return true;
} else if (tab && tab.urlObj && tab.urlObj.func === func) {
return true;
}
}
return already;
},
//fill body object for all types
prepareTab = function prepareTab(obj, tabId) {
var body = {},
title,
titleLen = 0,
shortTitle,
hint,
tImg,
tStyle,
imgId,
selfUrl = obj.selfUrl ? obj.selfUrl.replace(/sfrom=ajax/g, '') : '',
curTab;
//dont show pin when isPin && from menu
obj.pin = obj.pin && obj.__src !== 'menuAction';
//check already same pin tab
if (obj.pin && !isAlreadyPinTab(obj, tabId)) {
obj.pin = true;
}
/* jshint camelcase: false*/
body.commonDir = pageInfo.commonDir;
body.itemId = obj.type + new Date().getTime();
body.id = tabId;
body.func = obj.func;
body.theme = obj.theme;
body.hReload = App.u.escapeQuote(obj.hintReload) || '';
body.comment = App.u.escapeQuote(obj.msg_loading) || '';
body.hFavorite = App.u.escapeQuote(obj.hintFavorite) || '';
body.hUnfavorite = App.u.escapeQuote(obj.hintUnFavorite) || '';
body.hPrint = App.u.escapeQuote(obj.hintPrint) || '';
body.hCopy = App.u.escapeQuote(obj.hintCopy) || '';
body.hPdf = App.u.escapeQuote(obj.hintPdf) || '';
body.hHelp = App.u.escapeQuote(obj.hHelp) || '';
body.hintUnpin = App.u.escapeQuote(obj.hintPin) || '';
body.hintPin = App.u.escapeQuote(obj.hintUnpin) || '';
body.hDevel = 'out=devel';
body.breadcrumb = '';
body.message = '';
body.selfurl = pageInfo.url + '?' + getQueryString(obj.urlObj);
body.devMode = devMode;
body.testMode = obj.testMode;
body.pdfOn = pdfOn;
body.btng = obj.btng ? obj.btng : [];
body.btnview = obj.btnview ? 'o-' + obj.btnview : '';
body.favorite = obj.favorite || false;
body.pin = obj.pin || false;
body.inmenu = !!App.Dom.byId('l-' + String(obj.func).replace(/\./g, '_'));
//for btn in form
body.parentAttr = obj.parent ? 'data-parent=' + obj.parent : '';
//for toolbar btn
body.tabIdAttr = 'data-parent=' + tabId;
//make permalink
var permaLinkObj = $.extend({}, obj.urlObj);
delete permaLinkObj.sfrom;
delete permaLinkObj.operafake;
delete permaLinkObj.clickstat;
permaLinkObj.startform = permaLinkObj.func;
delete permaLinkObj.elname;
delete permaLinkObj.func;
body.permaLink = pageInfo.url + '?' + getQueryString(permaLinkObj);
//remove error if not tagret tab
if (App.Global.targetId && App.Global.targetId !== tabId && App.Global.bannerHtml && App.Global.bannerHtml.length > 0) {
var msgLen = App.Global.bannerHtml.length;
while (msgLen--) {
if (App.Global.bannerHtml[msgLen].status === 'error') {
App.Global.bannerHtml.splice(msgLen, 1);
}
}
}
if (obj.message) {
if (App.Global.bannerHtml) {
body.message = obj.message.concat(App.Global.bannerHtml);
} else {
body.message = obj.message;
}
} else {
if (App.Global.bannerHtml) {
body.message = App.Global.bannerHtml;
}
}
if (body.message) {
//check for message exists
var l = body.message.length;
while (l--) {
if (body.message[l].refText === '') {
body.message[l].refText = obj.msg.moreinfo;
}
if (body.message[l].dismiss === '') {
body.message[l].dismiss = obj.msg.dismiss || pageInfo.dismiss;
}
}
}
if (!obj.targetTabId) {
tabs[tabId] = new TabObj(tabId, 1, obj.type, selfUrl);
} else {
tabs[tabId].type = obj.type;
tabs[tabId].selfUrl = selfUrl;
}
//set menu func name
if (obj.__src_func) {
tabs[tabId].menuFunc = obj.__src_func;
}
curTab = tabs[tabId];
if (obj.iType !== 'hardUpdate' && obj.iType !== 'replace') {
if (!obj.parent) {
curTab.hType = 'parent';
} else {
if (tabs[obj.parent] === undefined) {
return;
}
curTab.hType = 'child';
curTab.parent = obj.parent;
curTab.gParent = tabs[obj.parent].gParent ? tabs[obj.parent].gParent : obj.parent;
if (obj.type === 'empty') {
tabs[obj.parent].child = tabId;
}
}
} else {
obj.parent = curTab.parent;
}
//get title
if (obj.title && obj.title !== '') {
titleLen = obj.title.length;
if (titleLen < 25) {
title = obj.title;
} else {
title = obj.title.substr(0, 25) + '...';
}
if (titleLen < 10) {
shortTitle = obj.title;
} else {
shortTitle = obj.title.substr(0, 10) + '...';
}
hint = App.u.escapeQuote(obj.title);
} else {
title = '...';
}
curTab.title = obj.title;
body.tabTitle = obj.title;
//get icon for title
if (obj.parent) {
imgId = tabs[tabs[tabId].gParent].func;
} else {
imgId = obj.id;
}
tImg = getMainImg(imgId, obj.selfIcon, pageInfo.commonDir);
tStyle = getMainImg(imgId, obj.selfIcon, pageInfo.commonDir, true);
body.tImg = tImg;
body.tStyle = tStyle;
//remember parent params for return parent by cancel
if (obj.rParent) {
curTab.rParentObj = tabs[tabId].paramObjAll;
} else {
curTab.rParentObj = undefined;
}
//set tabs props
curTab.paramObjAll = obj.urlObj;
if (obj.type !== 'empty') {
curTab.notLoaded = false;
}
curTab.iType = obj.iType;
curTab.pinIcon = obj.pinIcon ? obj.pinIcon : getGroupIcon(imgId);
curTab.pin = obj.pin || false;
curTab.header = {
tabId: tabId,
title: title,
hint: hint,
isPin: obj.pin,
pinIcon: curTab.pinIcon,
shortTitle: shortTitle,
theme: pageInfo.theme };
curTab.func = obj.func;
curTab.favorite = obj.favorite;
curTab.features = obj.features;
curTab.wizard = obj.wizard;
//make help param
if (obj.help) {
curTab.help = obj.help;
} else if (obj.__src === 'toolbarAction' || obj.__src === 'okForm' || obj.__src === 'tSetting') {
if (obj.parent && tabs[obj.parent]) {
curTab.help = tabs[obj.parent].help + '.' + obj.__srcBtn;
} else {
curTab.help = obj.func;
}
} else {
//obj.__src === 'menuAction' ||
// obj.newtab ||
// obj.__src === 'dashboardBtn'
curTab.help = obj.func;
}
body.help = curTab.help;
return body;
},
getQueryString = function getQueryString(queryObj) {
var paramString = '',
j = 0,
curValue;
for (var key in queryObj) {
if (key !== '') {
if (j !== 0) {
paramString += '&';
}
//encode params
paramString += key + '=' + encodeURIComponent(queryObj[key]);
j++;
}
}
return paramString;
},
/**
* activate tab when switching
* @param {String} tabId
*/
activateTab = function activateTab(tabId) {
var gParent = '',
prevTabId = activeTab,
pTabId = '',
selid = [],
func;
//checking, probably deleted it early
if (tabs[activeTab]) {
tabs[activeTab].deactive();
//remove actChild from gParent if child
if (tabs[activeTab].gParent) {
gParent = tabs[activeTab].gParent;
tabs[gParent].actChild = null;
}
}
//write actChild to gParent if child
if (tabs[tabId].gParent) {
gParent = tabs[tabId].gParent;
tabs[gParent].actChild = tabId;
}
tabs[tabId].activate();
if (!gParent) {
pTabId = tabId;
} else {
pTabId = gParent;
}
EventMgr.trigger('activateTab', { tabId: tabId });
EventMgr.trigger('changedTab', { tabId: tabId, prevTabId: prevTabId });
EventMgr.trigger('changeTabStatus', {
func: getMenuFunction(pTabId),
type: 'activate' });
EventMgr.trigger('changedTabs', { tabs: tabs });
//EventMgr.trigger('switchTab', {tabId : tabId});
activeTab = tabId;
//updateTab or load if notloaded
if (tabs[tabId].aupdate || tabs[tabId].notLoaded) {
selid = true;
EventMgr.trigger('reloadTab', {
tabId: tabId,
selid: selid,
help: true,
filter: true });
}
},
isPinTab = function isPinTab(tabId) {
var isPin = false;
if (tabs[tabId] && tabs[tabId].pin) {
isPin = true;
} else if (tabs[tabId] && tabs[tabId].gParent) {
if (tabs[tabs[tabId].gParent] && tabs[tabs[tabId].gParent].pin) {
isPin = true;
}
}
return isPin;
},
getMenuFunction = function getMenuFunction(pTabId) {
var func = '';
//get func name
if (tabs[pTabId]) {
if (tabs[pTabId].menuFunc) {
func = tabs[pTabId].menuFunc;
} else if (tabs[pTabId].func) {
func = tabs[pTabId].func;
} else if (tabs[pTabId].paramObjAll) {
func = tabs[pTabId].paramObjAll.func;
}
}
return func;
},
/**
* activate new opened tab
* @param {String} tabId Activated tabId
* @param {Boolean} empty Empty Tabrea
* @param {String} iType
*/
activateNewTab = function activateNewTab(tabId, empty, iType) {
var isPin = isPinTab(activeTab);
if (activeTab === tabId) {
tabs[tabId].activate();
return;
}
var hType = tabs[tabId].hType,
parent = tabs[tabId].parent || null,
gParent = tabs[tabId].gParent || null,
pTabId,
child,
update = iType === 'hardUpdate' || iType === 'softUpdate',
replace = iType === 'replace';
//delete active tab if not default and not child
if (activeTab && activeTab !== defaultTab && !empty && hType !== 'child' && tabId !== 'tab0' && !update && !replace && !isPin) {
//close tabs group (parents & children)
closeTabGroup(activeTab);
}
//delete sibling child
if (parent && tabs[parent].child && !update && !replace) {
child = tabs[parent].child;
closeChildTab(child);
}
if (hType === 'child') {
//write child to parent
tabs[parent].child = tabId;
//write actChild to greatParent
tabs[gParent].actChild = tabId;
}
if (tabs[activeTab]) {
tabs[activeTab].deactive();
}
tabs[tabId].activate();
if (!gParent) {
pTabId = tabId;
} else {
pTabId = gParent;
}
activeTab = tabId;
//remove loading className
$('.m-item.loading').removeClass('loading');
EventMgr.trigger('activateTab', { tabId: tabId });
EventMgr.trigger('changeTabStatus', {
func: getMenuFunction(pTabId),
type: 'activate' });
EventMgr.trigger('changedTabs', { tabs: tabs });
},
/**
* finding out new active tab
* @param {String} tabId closed TabId
*/
newActiveTab = function newActiveTab(tabId, src) {
var newActTab, gParent, pTabId;
//check actChild
if (!tabs[tabId]) {
return;
}
if (tabs[tabId].gParent) {
gParent = tabs[tabId].gParent;
if (!tabs[gParent].actChild) {
return;
}
} else if (tabs[tabId].actChild) {} else if (tabId !== activeTab) {
return;
}
//set active to dashboard
if (tabs[tabId].hType === 'parent') {
if (src === 'backBtn') {
newActTab = 'tab0';
} else {
newActTab = getNextTab(tabId);
}
} else {
//set active to parent
newActTab = tabs[tabId].parent;
if (tabs[tabId].gParent) {
gParent = tabs[tabId].gParent;
tabs[gParent].actChild = newActTab;
}
}
//set actChild for
if (tabs[newActTab].gParent) {
tabs[tabs[newActTab].gParent].actChild = newActTab;
}
tabs[newActTab].activate();
if (!gParent) {
pTabId = newActTab;
} else {
pTabId = gParent;
}
activeTab = newActTab;
EventMgr.trigger('activateTab', { tabId: newActTab });
EventMgr.trigger('changeTabStatus', {
func: getMenuFunction(pTabId),
type: 'activate' });
EventMgr.trigger('changedTab', { tabId: newActTab });
EventMgr.trigger('changedTabs', { tabs: tabs });
if (tabs[newActTab].aupdate || tabs[newActTab].notLoaded) {
EventMgr.trigger('reloadTab', {
tabId: newActTab,
__src: 'activateTab',
selid: true,
filter: true });
}
},
//get right or left tab
getNextTab = function getNextTab(tabId) {
var tabsArr = [],
ind = 0,
selfIndex,
next,
prev;
for (var key in tabs) {
if (tabs[key].hType === 'parent') {
tabsArr.push(key);
if (key === tabId) {
selfIndex = ind;
}
ind++;
}
}
next = selfIndex + 1;
prev = selfIndex - 1;
if (tabsArr[next]) {
return getChild(tabsArr[next]);
} else if (tabsArr[prev]) {
return getChild(tabsArr[prev]);
} else {
return defaultTab;
}
},
//get last child tab
getChild = function getChild(tabId) {
var childTabId = tabId;
if (tabs[tabId].child) {
childTabId = getChild(tabs[tabId].child);
}
return childTabId;
},
//switch tabs
switchTabs = function switchTabs(e) {
e.preventDefault();
var tabId = this.getAttribute('data-tabid');
if (activeTab === tabId) {
return;
}
activateTab(tabId);
if (tabs[tabId].type === 'form' || tabs[tabId].type === 'report') {
EventMgr.trigger('switchTabForm', { tabId: tabId });
EventMgr.trigger('updFormHeight', { tabId: tabId });
} else {
EventMgr.trigger('updTableHeight');
}
EventMgr.trigger('switchTab', { tabId: tabId });
},
closeTabsByMiddleBtn = function closeTabsByMiddleBtn(e) {
if (e.which === 2 || e.button === 1) {
var tabId = this.getAttribute('data-tabid');
e.preventDefault();
if (tabId !== 'tab0') {
closeTabClickHandler.apply(this, [e]);
}
}
},
//update tab by dbclick
upSwitchedTabs = function upSwitchedTabs(e) {
e.preventDefault();
var tabId = this.getAttribute('data-tabid');
EventMgr.trigger('reloadTab', { tabId: tabId, __src: 'dblclickTab', filter: true });
},
//append new tab
appendTab = function appendTab(e, data) {
var tabObj = data.tab,
newtab = data.newtab || false,
bands = data.bands || '',
map = data.map || '',
tabId,
isPin = isPinTab(activeTab);
if (activeTab !== defaultTab && !newtab && !isPin) {
if (tabs[activeTab].gParent) {
tabId = tabs[activeTab].gParent;
} else {
tabId = activeTab;
}
}
if (!tabObj.iType) {
tabObj.render().append(tabId).clean();
} else if (tabObj.iType === 'hardUpdate') {
tabObj.render().update().clean();
} else if (tabObj.iType === 'softUpdate') {
tabObj.softUpdate().clean();
} else if (tabObj.iType === 'replace') {
tabObj.render().replace().clean();
}
EventMgr.trigger('appended', { tabId: tabObj.id });
//trigger events
if (tabObj.type === 'form') {
EventMgr.trigger('appendForm', {
tabId: tabObj.id,
tabObj: tabObj,
srcData: data.srcData });
} else if (tabObj.type === 'list') {
EventMgr.trigger('appendList', { tabId: tabObj.id, srcData: data.srcData });
} else if (tabObj.type === 'dashboard') {
EventMgr.trigger('appendDashboard', {});
} else if (tabObj.type === 'report') {
EventMgr.trigger('appendReport', { tabId: tabObj.id, bands: bands });
} else if (tabObj.type === 'map' || tabObj.type === 'rack') {
EventMgr.trigger('appendMap', { tabId: tabObj.id, map: map });
}
//get filter
if (tabObj.filter === true) {
EventMgr.trigger('appendFilter', {
tabId: tabObj.id,
listParam: tabObj.paramObjAll,
func: tabObj.filterFunc });
}
data = null;
checkFeatures(tabObj);
},
closeTabClickHandler = function closeTabClickHandler(e) {
e.stopPropagation();
var tabId = this.getAttribute('rel') || this.getAttribute('data-tabid'),
isChanged = false,
isPin = tabs[tabId].pin;
if (isPin) {
return;
}
if (tabs[tabId] && tabs[tabId].type === 'form' && pageInfo.checkUnsaved) {
var changedFields = checkFormChange(tabId);
if (changedFields.isChanged) {
isChanged = true;
EventMgr.trigger('confirmBoxShow', {
callbackOk: closeTab,
callbackCancel: '',
self: this,
text: String(pageInfo.unsavedData).replace('__VALUE__', changedFields.count) + '<br/><span class="b-text_style_bold">' + changedFields.labels + '</span>',
args: [e, tabId],
checkbox: {
msg: pageInfo.unsavedDontShow,
cb: unsavedDataCheckboxHandler
}
});
}
}
if (!isChanged) {
closeTab(e, tabId);
}
},
//close tab
closeTab = function closeTab(e, data, src) {
EventMgr.trigger('closeTab', {});
var tabId, parent;
if (data) {
tabId = data;
} else {
tabId = this.getAttribute('rel');
}
if (!tabs[tabId]) {
return;
}
//check for tab is pin
if (tabs[tabId] && tabs[tabId].pin) {
//reload tab if it form
if (tabs[tabId].type === 'form') {
EventMgr.trigger('reloadTab', { tabId: tabId, __src: 'pinForm' });
}
return;
}
EventMgr.trigger('closeTabEvent', { tabId: tabId });
newActiveTab(tabId, src); //set new active tab
//killing children
if (tabs[tabId] && tabs[tabId].child) {
closeChildTab(tabs[tabId].child);
}
//clear child from parent
if (tabs[tabId] && tabs[tabId].hType === 'child') {
parent = tabs[tabId].parent;
tabs[parent].child = null;
}
tabs[tabId].close();
delete tabs[tabId];
if (e) {
e.preventDefault();
}
EventMgr.trigger('updTableHeight');
EventMgr.trigger('changedTabs', { tabs: tabs });
},
/**
* close tab's group
* @param {Stirng} tabId closing tab
*/
closeTabGroup = function closeTabGroup(tabId) {
EventMgr.trigger('closeTab', { tabId: tabId });
if (tabs[tabId].child) {
closeChildTab(tabs[tabId].child);
}
if (tabs[tabId].parent) {
closeParentTab(tabs[tabId].parent);
}
if (tabId !== 'tab0') {
tabs[tabId].close();
delete tabs[tabId];
EventMgr.trigger('closeTabEvent', { tabId: tabId });
}
},
/**
* close tab's parent
* @param {String} tabId closing tab parent (will remove)
*/
closeParentTab = function closeParentTab(tabId) {
EventMgr.trigger('closeTabEvent', { tabId: tabId });
if (tabs[tabId].parent) {
closeParentTab(tabs[tabId].parent);
}
tabs[tabId].close();
delete tabs[tabId];
},
/**
* close tab's child
* @param {Stirng} tabId closing tab child (will remove)
*/
closeChildTab = function closeChildTab(tabId) {
EventMgr.trigger('closeTabEvent', { tabId: tabId });
if (tabs[tabId].child) {
closeChildTab(tabs[tabId].child);
}
tabs[tabId].close();
delete tabs[tabId];
},
//close all tabs
closeAllTabs = function closeAllTabs(e) {
if (tabs) {
for (var key in tabs) {
if (tabs.hasOwnProperty(key)) {
if (key !== 'tab0') {
closeTab(e, key);
}
}
}
}
},
//close all tabs expect active
closeOthersTabs = function closeOthersTabs(e) {
if (tabs) {
var actTabId = $('.tab-content_st_active').attr('data-tabid'),
actParentTabId = tabs[actTabId].gParent ? tabs[actTabId].gParent : actTabId;
for (var key in tabs) {
if (tabs.hasOwnProperty(key)) {
if (key !== 'tab0' && tabs[key].hType === 'parent' && key !== actParentTabId) {
closeTab(e, key);
}
}
}
}
},
//back btn handler
backBtnHandler = function backBtnHandler(e, data) {
e.preventDefault();
var tabId,
parentId,
selid = [],
self = $(this),
plid = filterXSS.friendlyAttrValue(self.parents('.toolbar').attr('data-plid') || ''),
isReport = self.closest('.tab-content').attr('data-report') === 'report';
if (data) {
tabId = data;
} else {
tabId = this.getAttribute('rel');
}
selid.push(plid);
parentId = tabs[tabId].parent;
if (App.Dom.hasClass(this, 'updatetab')) {
var pos = plid.lastIndexOf('/'),
url = pageInfo.url,
parent = null,
targetId = tabId,
funcName = this.getAttribute('data-url').replace('func=', ''),
param = {};
param.func = funcName;
if (pos !== -1) {
plid = plid.substring(0, pos);
pos = plid.lastIndexOf('/');
if (pos === -1) {
param.elid = plid;
} else {
param.plid = plid.substring(0, pos);
param.elid = plid.substr(pos + 1);
}
}
EventMgr.trigger('ajaxRequest', {
url: url,
param: param,
invar: { parent: parent, targetTabId: targetId, iType: 'replace', __src: 'toolbarAction' },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failCommonAjaxResponse',
queue: 'noqueue' });
EventMgr.trigger('tabLoading', { tabId: tabId });
} else {
closeTab.apply(this, [e, tabId, 'backBtn']);
if (parentId && !isReport) {
EventMgr.trigger('reloadTab', {
tabId: parentId,
__src: 'backBtn',
selid: selid,
filter: true });
EventMgr.trigger('tabLoading', { tabId: parentId });
}
}
},
//update tab by autoupdate
updateTab = function updateTab(e, data) {
var tabId = data.tabId,
delay = data.delay,
selid;
if (activeTab !== tabId) {
if (tabs[tabId] !== undefined && tabs[tabId].autoupdate) {
setTimeout(function (tabId, delay) {
return function () {
EventMgr.trigger('updateTab', { tabId: tabId, delay: delay });
};
}(tabId, delay), delay * 1000);
tabs[tabId].autoupdate = true;
}
} else {
selid = true;
EventMgr.trigger('reloadTab', {
tabId: tabId,
__src: 'autoUpdate',
selid: selid,
filter: true });
}
},
//stop autoupdate by click button
stopAutoUpdate = function stopAutoUpdate(e) {
e.preventDefault();
var tabId = this.getAttribute('data-tabid');
if (tabs[tabId]) {
tabs[tabId].autoupdate = false;
clearTimeout(tabs[tabId].timeId);
App.Dom.removeClass(this, 'i-list-icon__stop');
App.Dom.addClass(this, 'b-elem_style_gracescale');
}
},
//get elid selected elements
getSelectedElems = function getSelectedElems(tabId) {
var selid = [],
elid;
$('#cont-' + tabId + ' .list_table tr.selected:not(".filtred")').each(function () {
elid = this.getAttribute('data-elid');
selid.push(elid);
});
return selid;
},
getScrollTop = function getScrollTop(tabId) {
var elem = App.Dom.byId('ltwr-' + tabId + '-scrollbar-handler'),
top = 0;
if (elem) {
top = parseFloat(elem.style.top, 10);
}
return top;
},
//render table
//return with unopenned <div>,
// for external usage need to add unclosed <div>
renderTable = function renderTable(args) {
var keyVar,
headers = args.headers,
headersName = {},
tableHead,
tableBody,
output;
/* jslint forin: true */
for (keyVar in headers) {
headersName[headers[keyVar].name] = {
type: headers[keyVar].type,
hidden: headers[keyVar].hidden ? true : false
};
}
args.headersName = headersName;
tableHead = renderTableHeader(args);
tableBody = renderTableBody(args);
output = tableHead.output;
output += tableBody;
if (args.sbar) {
output += '<div class="bottom-bar">';
output += tableHead.sBar;
}
return output;
},
renderTableHeader = function renderTableHeader(args) {
var output = '',
dHeader = '',
sBar = '',
tabId = args.tabId,
headers = args.headers,
props = args.props,
elKeyName = args.elKeyName || args.elKey,
elKey = args.elKey,
colLen = headers.length,
keyVar,
header,
className,
triangle,
thAttr,
divAttr,
rowHandler,
dataSorttype,
text,
total,
first;
output += '<table class="list_table init b-list__table_type_body" id="lt-' + tabId + '">' + '<thead><tr>';
dHeader += '<table id="sort_table-' + tabId + '" class="sort_table b-list__table_type_head">' + '<thead class="1"><tr>';
sBar += '<table id="statusbar-' + tabId + '" class="statusbar b-list__table_type_footer">' + '<tbody class="1"><tr>';
/* jslint forin: true */
for (keyVar in headers) {
header = headers[keyVar];
//check for only data diagram col
if (header && header.hidden) {
continue;
}
className = header.hint ? ' hint ' : '';
className += header.align ? ' align-' + header.align : '';
if (header.minimize) {
className += ' i-minimize-col ';
}
triangle = '';
first = keyVar - 0 === 0;
thAttr = ' data-colname="' + header.name + '" ';
divAttr = ' data-colname="' + header.name + '" ';
divAttr += ' data-coln="' + keyVar + '" ';
thAttr += header.total ? ' data-type="' + header.type + '" ' : '';
thAttr += header.nestedreport ? ' data-nestedreport="' + header.nestedreport + '" ' : '';
thAttr += header.nestedlist ? ' data-nestedlist="' + header.nestedlist + '" ' : '';
thAttr += header.nestedlistBlank ? ' data-nestedlist-blank="true" ' : '';
thAttr += header.editform ? ' data-editform="' + header.editform + '" ' : '';
header.hint = header.hint ? App.u.escapeQuote(header.hint) : undefined;
thAttr += header.hint ? ' data-hint="' + header.hint + '" ' : '';
thAttr += header.width ? ' width="' + header.width + '"' : '';
//resize col handler
rowHandler = keyVar - 0 !== 0 ? '<div class="rowHandler"><div class="rowLine1"></div>' + '<div class="rowLine2"></div></div>' : '';
thAttr += header.edit ? ' data-edit-func="' + header.edit + '" ' : '';
if (elKey === header.name) {
className += ' keyfield ';
}
if (elKeyName === header.name) {
className += ' keynamefield ';
}
if (first) {
className += 'first ';
text = pageInfo.selected + ' - 1';
} else {
text = '';
}
if (colLen - 1 === keyVar) {
className += 'last';
}
//sorting cols
if (header.sort && !args.band) {
className += ' td_sort i-tip-target_st_sort i-tip-target_st_msort';
dataSorttype = header.sort;
} else if (header.sort && args.band) {
className += ' td_client_sort i-tip-target_st_sort i-tip-target_st_msort';
dataSorttype = header.sort;
}
divAttr += dataSorttype ? ' data-sorttype="' + dataSorttype + '" ' : '';
//sorted col
if (header.sorted) {
if (String(header.sorted).match(/\+/)) {
//asc
triangle = '<div class="triangl-bot triangle"></div>';
} else {
//desc
triangle = '<div class="triangl-top triangle"></div>';
}
if (args.sortedCount > 1) {
triangle += '<div class="b-sort-table__sort-order">' + String(header.sorted).charAt(1) + '</div>';
}
divAttr += 'sorting="' + header.sorted + '"';
} else {
triangle = '<div class="triangle"></div>';
}
triangle += '<div class="filter-icon hint" data-hint=""></div>';
//check for development flag
if (devMode) {
triangle += '<a href="#" class="devel-link-settings devel-link-settings--col" data-elid="' + header.name + '" data-tabid="' + tabId + '"></a>';
triangle += '<a href="#" class="devel-link-delete devel-link-delete--col" data-elid="' + header.name + '" data-name="' + header.pName + '" data-tabid="' + tabId + '"></a>';
if (first) {
triangle += '<a href="#" class="devel-link-add devel-link-add--col" data-tabid="' + tabId + '"></a>';
}
}
if (header.type === 'button') {
for (keyVar in header.confirm) {
if (header.confirm[keyVar] !== '') {
divAttr += ' data-confirm-' + keyVar + '="' + header.confirm[keyVar] + '" ';
}
}
}
//@todo warning!!! diff html
output += '<th class="' + className + '" ' + thAttr + '>' + '<div class="ovf" ' + divAttr + '><span class="data-wrapper" data-mn="' + header.name + '" data-fn="' + args.func + '">' + header.pName + '</span>' + triangle + '</div> ' + rowHandler + '</th>';
dHeader += '<td class="' + className + '" ' + thAttr + '>' + '<div class="ovf" ' + divAttr + '><span class="data-wrapper" data-mn="' + header.name + '" data-fn="' + args.func + '">' + header.pName + '</span>' + triangle + '</div> ' + rowHandler + '</td>';
//row selected
if (keyVar - 0 === 0) {
sBar += '<td ' + thAttr + '>' + '<div class="ovf"><span class="sb-result sb-result_index_0 sb-result_st_active" data-mn="msg_total" data-fn="desktop">' + pageInfo.total + ': ' + args.pager.pageElems + '</span><span class="sb-selected sb-selected_index_0" data-mn="msg_selected" data-fn="desktop">' + pageInfo.selected + ': 1</span></div></td>';
} else {
//count total row
if (header.total !== '') {
//check for type props or not
if (_typeof(header.total) === 'object') {
total = renderPropsStat(header.total, props);
className += ' data';
} else {
total = header.total;
className += ' data';
}
} else {
total = '';
className += ' empty';
}
sBar += '<td ' + thAttr + '>' + '<div class="ovf">' + '<span class="sb-result sb-result_st_active sb-result_index_' + keyVar + '">' + total + ' </span>' + '<span class="sb-selected sb-selected_index_' + keyVar + '">' + text + '</span></div></td>';
}
}
output += '</tr></thead>';
dHeader += '</tr></thead></table>';
output = dHeader + output;
sBar += '</tr></thead></table>';
return {
output: output,
sBar: sBar };
},
renderTableBody = function renderTableBody(args) {
var output = '<tbody>',
plid = args.plid ? ' data-plid="' + filterXSS.safeAttrValue('div', 'data-plid', args.plid) + '" ' : '',
keyVar,
contentItem,
elid,
className,
curElKeyName,
curElKey,
id,
hint,
attr,
len,
headers = args.headers,
elKeyName = args.elKeyName || args.elKey,
elKey = args.elKey,
ii = 0,
content = args.content;
args.defProp = args.props ? findDefProp(args.props) : null;
if (args.backBtn) {
len = args.headers.length;
output += '<tr class="back-btn"><td colspan="' + len + '">' + '<div class="back-btn-row hint" data-tabid="' + args.tabId + '" >' + '<div class="hint back-btn-row-hint" data-hint="' + App.u.escapeQuote(App.Common.msg.hintBack) + '"></div></td></tr>';
ii++;
}
//render tbody
/* jslint forin:true */
for (keyVar in content) {
contentItem = content[keyVar];
elid = '';
className = '';
curElKeyName = '';
curElKey = '';
ii++;
rowId++;
id = '';
hint = '';
attr = plid;
attr += ' id="i-' + rowId + '" ';
//data-index for detect row in model
attr += ' data-index="' + keyVar + '"';
if (elKey !== undefined && contentItem[elKey] !== undefined) {
curElKey = contentItem[elKey].v.replace(/"/g, '"');
attr += ' data-elid="' + curElKey + '" ';
elid = contentItem[elKey].v;
}
if (elKeyName !== undefined && contentItem[elKeyName] !== undefined) {
curElKeyName = contentItem[elKeyName].v.replace(/"/g, '"');
attr += ' data-elkeyname ="' + curElKeyName + '" ';
}
if (ii % 2 === 0) {
className = ' even ';
} else {
className = '';
}
if (contentItem._ovcol) {
className += ' ' + contentItem._ovcol + ' ';
}
if (contentItem._ovhide) {
attr += ' data-hide="' + contentItem._ovhide + '" ';
className += ' toolbtn-hide ';
}
if (contentItem._ovremove) {
attr += ' data-remove="' + contentItem._ovremove + '" ';
className += ' toolbtn-remove ';
}
if (contentItem._ovshow) {
attr += ' data-show="' + contentItem._ovshow + '" ';
className += ' toolbtn-show ';
}
if (args.warning) {
if (args.warning[elid] !== undefined) {
if (args.warning[elid].msg !== undefined) {
className += ' warning';
hint = App.u.escapeQuote(args.warning[elid].msg);
delete args.warning[elid];
}
}
}
className += ' b-list__table-row';
output += '<tr class="' + className + '"' + attr + ' >';
output += buildRow(contentItem, args, hint);
output += '</tr>';
}
if (args.warning) {
EventMgr.trigger('nextEventBind', {
event: 'appendList',
tData: args.warning,
cb: function cb(e, data) {
if (e.data) {
var tabId = data.tabId,
bannerText = $('#cont-' + tabId + ' .b-message__text_warning').get(0),
warning = e.data,
extraText = '';
if (bannerText) {
for (var key in warning) {
if (warning[key]) {
extraText += warning[key].msg + '<br/>';
}
}
if (extraText) {
bannerText.innerHTML = extraText;
}
EventMgr.trigger('updateScroll', { id: 'cont-' + tabId });
}
}
}
});
}
output += '</tbody>';
output += buildLastRow(args);
output += '</table>';
output += '</div>'; //close table div from template
return output;
},
//render Row
buildRow = function buildRow(row, args, hint) {
var headers = args.headersName,
output = '',
elKey = args.elKey,
i = 0,
ind = 0,
warning,
color,
keyVar,
usage,
type,
currentRow,
editableClass,
contentClassName,
colNameClass,
contentAttrs,
attr,
className,
value,
id,
per,
buttons,
j,
button,
func,
form,
name,
btnMsg,
onlyForm;
/* jslint forin:true */
for (keyVar in headers) {
//check for only diagram col
if (headers[keyVar] && headers[keyVar].hidden) {
continue;
}
i++;
warning = '';
className = '';
editableClass = '';
colNameClass = 'b-list__table-col_name_' + keyVar;
color = '';
value = '';
attr = '';
usage = '';
per = '';
contentAttrs = '';
buttons = '';
onlyForm = false;
if (elKey === keyVar) {
className += ' key-field ';
}
if (i === 1 && hint !== '' && hint !== undefined) {
warning = '<div class="warning-img hint" data-hint="' + hint + '"></div>';
}
currentRow = row[keyVar];
if (args.headers[ind].edit) {
editableClass += ' editable ';
}
if (args.testMode) {
editableClass += ' i-testmode-field ';
}
if (args.headers[ind].fastFilter && !args.blockId) {
editableClass += ' i-filter-field ';
}
contentClassName = args.headers[ind].nestedlist !== undefined && !currentRow.nestedlist ? ' i-nestedlist b-list__table-col-content_type_link' : '';
contentClassName += args.headers[ind].editform !== undefined && !currentRow.nolink ? ' i-editform b-list__table-col-content_type_link ' + 'b-list__table-col-content_style_underline' : '';
if (currentRow !== undefined) {
type = headers[keyVar].type;
//data/prop/money
if (type === 'data' || type === 'prop' || type === 'money') {
if (currentRow.color !== undefined) {
className += ' status-' + currentRow.color;
}
if (args.headers[ind].acthint) {
className += ' acthint ';
}
value = args.headers[ind].noescaping ? window.filterXSS(window.htmlDecode(currentRow.v)) : currentRow.v;
id = currentRow.id ? window.filterXSS(window.htmlDecode(currentRow.id)) : null;
contentClassName += args.headers[ind].wrap ? ' b-list__table-col-content_is_wrap ' : '';
className += args.headers[ind].nestedreport !== undefined ? ' nestedreport ' : '';
className += args.headers[ind].align ? ' align-' + args.headers[ind].align : '';
attr += currentRow.link ? ' data-child-id="' + args.oTabId + '-' + currentRow.childid + '" ' : '';
attr += currentRow.elid ? ' data-elid="' + currentRow.elid + '" ' : '';
contentAttrs += id ? ' data-v-id="' + id + '"' : '';
contentAttrs += currentRow.orig ? 'data-orig="' + currentRow.orig + '"' : '';
if (currentRow.props) {
attr += currentRow.psp ? ' data-stat="' + currentRow.psp + '" ' : '';
output += '\n <td>\n <div class="ovf i-text-content ' + editableClass + '">\n ' + warning + '\n <span class="data-wrapper " ' + attr + '>\n ' + makeProps(currentRow, args, row) + '\n </span>\n <span class="data middle ' + className + '">\n <span class="b-list__table-col-content ' + contentClassName + '" ' + contentAttrs + '>' + currentRow.v + '</span>\n </span>\n </div>\n </td>';
} else {
output += '\n <td class="first ' + colNameClass + '">\n ' + warning + '\n <span class="i-text-content data-wrapper data ' + className + ' ' + editableClass + '" ' + attr + '>\n <span class="b-list__table-col-content ' + contentClassName + '" ' + contentAttrs + '>' + value + '</span>\n </span>\n </td>';
}
//indicator
} else if (type === 'indicator') {
if (currentRow.u && currentRow.l) {
if (currentRow.color !== undefined) {
className = ' status-' + currentRow.color;
}
if (parseInt(currentRow.l, 10) !== 0) {
if (parseInt(currentRow.u, 10) === 0) {
per = 0;
} else {
per = Math.round(currentRow.u / currentRow.l * 100);
if (per === 0 || !per) {
per = 0;
}
per = per > 100 ? 100 : per;
}
usage = '<div class="used-wr">' + '<div class="used" style="width:' + per + '%"></div></div>';
}
}
output += '<td class="first">' + '<span class="i-text-content data-wrapper data ' + className + editableClass + '">' + warning + '<span class="b-list__table-col-content ' + contentClassName + '">' + window.htmlDecode(currentRow.v) + '</span>' + '</span>' + usage + '</td>';
//indicator brackets
} else if (type === 'indicatorbrackets') {
if (currentRow.color !== undefined) {
className = ' status-' + currentRow.color;
}
value = currentRow.l || '';
if (currentRow.u !== '') {
value += ' (<span class="' + className + '">' + currentRow.u + '</span>)';
}
output += '<td class="first">' + '<span class="i-text-content data-wrapper data">' + warning + '<span class="b-list__table-col-content ' + contentClassName + '">' + value + '</span>' + '</span></td>';
//buttons
} else if (type === 'button') {
for (j = 0; j < currentRow.buttons.length; j++) {
button = currentRow.buttons[j];
if (button !== '') {
name = button;
//for billing dashboard show msg for btn from col & open only form
onlyForm = args.btn[name].msgsrc && row[args.btn[name].msgsrc];
attr = '';
if (!onlyForm) {
attr += ' data-func="func=' + args.func + '" ';
}
attr += ' data-type="' + args.btn[button].type + '" ';
attr += ' data-name="' + button + '" ';
type = args.btn[button].type;
if (onlyForm) {
btnMsg = row[args.btn[name].msgsrc].v;
} else {
btnMsg = args.btn[name].name;
}
if (type === 'edit' || type === 'group' || type === 'editlist') {
attr += ' data-form="func=' + args.btn[button].func + '&elid=' + row[args.elKey].v + '" ';
}
buttons += '<a href="#" ' + attr + ' class="dashboard-button">' + btnMsg + '</a> ';
//buttons += args.btn[currentRow.buttons[i]].name + ' ';
}
}
output += '<td><span class="data-wrapper">' + buttons + '</span></td>';
}
} else {
output += '<td><span class="data-wrapper ' + className + '"></span></td>';
}
ind++;
}
return output;
},
/**
* Рендерем props и xprop для статусбара
* @param total
*/
renderPropsStat = function renderPropsStat(total, props) {
var stat = '',
i = 0,
keyVar,
cumma = '',
propName,
prop,
sprite = false,
extension,
className = '';
/* jslint forin:true */
for (keyVar in total) {
if (i !== 0) {
cumma = ',</span> ';
} else {
cumma = '';
}
if (total[keyVar] - 0 === 0) {
className = 'no';
} else {
className = 'default';
}
prop = props[keyVar];
sprite = prop.style === '';
if (!sprite) {
extension = prop.animated ? '.gif' : '.png';
stat += cumma + '<span class="' + className + '"><img class="props" src="' + pageInfo.commonDir + 'img/' + prop.onImg + extension + '"/>' + total[keyVar];
} else {
stat += cumma + '<span class="' + className + '"><div class="props s-icon s16x16 ' + prop.onImg + ' i-total-prop-' + keyVar + '"></div>' + total[keyVar];
}
i++;
}
stat += '</span>';
return stat;
},
//render props
makeProps = function makeProps(row, args, rows) {
var output = '',
propName,
func,
type,
className,
hide,
hint,
attr,
props = row.props,
len = props.length,
i;
for (i = 1; i < len; i++) {
if (props[i].n) {
propName = props[i].n;
hint = App.u.escapeQuote(args.props[propName].hint);
func = args.props[propName].func;
type = args.props[propName].type;
hide = args.props[propName].hide;
attr = '';
className = '';
if (func && checkFunc(hide, rows)) {
attr += ' data-func="' + func + '" ';
attr += ' data-type="' + type + '" ';
attr += ' data-value="' + props[i].v.replace(/"/g, '"') + '" ';
className += 'controlprop';
if (type === 'group') {
attr += ' data-confirm="' + args.props[propName].confirm + '" ';
}
if (args.props[propName].cgi) {
attr += ' data-cgi="' + args.props[propName].cgi + '" ';
}
}
attr += 'data-name="' + args.props[propName].name + '"';
// I don't why this rules
//if (args.props[propName].name !== propName) {
//check for don't rewrite func attr
if (!func) {
attr += ' data-value="' + props[i].v.replace(/"/g, '"') + '" ';
}
if (args.props[propName].acthint) {
className += ' acthint';
} else {
className += ' hint';
}
if (hint !== '' && hint) {
hint = App.u.escapeQuote(hint.replace('__value__', props[i].v));
attr += ' data-hint="' + hint + '" ';
} else if (props[i].v !== '' && props[i].v) {
attr += ' data-hint="' + App.u.escapeQuote(props[i].v) + '" ';
}
if (args.props[propName].style) {
attr += args.props[propName].style;
}
if (args.props[propName].animated) {
output += '<img class="props ' + className + ' " ' + attr + ' src="' + pageInfo.commonDir + 'img/' + args.props[propName].onImg + '.gif"/>';
} else {
output += '<div class="s-icon s16x16 props ' + className + ' ' + args.props[propName].onImg + '" ' + attr + '></div>';
}
}
}
return output;
},
//check for hide rule for function
checkFunc = function checkFunc(hide, rows) {
if (!hide) {
return true;
}
var l = hide.length,
name,
value;
while (l--) {
name = hide[l].n;
value = hide[l].v;
if (rows[name] && rows[name].v === value) {
return false;
}
}
return true;
},
//find default prop
findDefProp = function findDefProp(props) {
var keyVar;
for (keyVar in props) {
if (props[keyVar].defImg) {
return keyVar;
}
}
return null;
},
//update total report for convert col
updateTotalWithConvertReport = function updateTotalWithConvertReport(e, data) {
var id = data.id;
$('#' + id).html(data.convertValue);
},
buildLastRow = function buildLastRow(args) {
var headers = args.headers,
colCount = headers.length,
tFoot = '<tfoot><tr>',
content = args.content,
total,
hint = '',
msg = App.Common.msg,
align = '',
name,
id;
for (var i = 0; i < colCount; i++) {
if (headers && headers[i] && headers[i].hidden) {
continue;
}
total = '';
id = '';
align = 'align-' + (headers[i].align || '');
if (headers[i].total === 'sum') {
name = headers[i].name;
total = sumRows(name, content);
hint = msg.totalSum || '';
} else if (headers[i].total === 'sumsuffix') {
hint = msg.totalSum || '';
total = sumRowsSuffix(name, content, headers[i].convert);
name = headers[i].name;
} else if (headers[i].total === 'count') {
total = content.length;
hint = msg.totalCount || '';
} else if (headers[i].total === 'avg') {
name = headers[i].name;
total = avgRows(name, content);
hint = msg.totalAvg || '';
}
if (headers[i].convert && total !== '') {
id = args.tabId + '-' + name;
EventMgr.trigger('ajaxRequest', {
param: {
func: 'convert',
name: headers[i].convert,
value: total
},
invar: {
id: id
},
type: 'get',
outtype: 'json',
trfunc: 'updateTotalWithConvertReport',
failfunc: 'failMenuAjaxResponse',
queue: 'multiload'
});
}
tFoot += '<td id="' + id + '" class="hint ' + align + '" data-hint="' + App.u.escapeQuote(hint) + '">' + total + '</td>';
}
tFoot += '</tfoot>';
return tFoot;
},
sumRows = function sumRows(name, rows) {
var len = rows.length,
sum = 0,
v,
maxDec = 0,
curDec;
while (len--) {
if (rows[len][name].orig) {
v = rows[len][name].orig - 0;
} else if (rows[len][name].v === '') {
v = 0;
} else {
v = parseFloat(rows[len][name].v.replace(/\s/g, ''));
}
curDec = decimalPlaces(v);
maxDec = curDec > maxDec ? curDec : maxDec;
sum += v;
}
if (maxDec > 0) {
sum = sum.toFixed(maxDec);
}
return sum;
},
sumRowsSuffix = function sumRowsSuffix(name, rows, convert) {
var len = rows.length,
resultC,
resultSum = '';
while (len--) {
resultC = App.List.dataCalc(resultC, rows[len][name]);
}
/* jslint forin: true */
for (var key in resultC) {
if (resultSum !== '') {
resultSum += '; ';
}
if (convert === 'money') {
resultSum += App.Tabs.moneyFormat(resultC[key]) + ' ' + key;
} else {
resultSum += resultC[key] + ' ' + key;
}
}
return resultSum;
},
avgRows = function avgRows(name, rows) {
var len = rows.length,
lenForLoop = len,
sum = 0,
avg,
v;
while (lenForLoop--) {
v = rows[lenForLoop][name].v === '' ? 0 : parseFloat(rows[lenForLoop][name].orig || rows[lenForLoop][name].v);
sum += v;
}
avg = sum / len;
if (avg.toFixed) {
avg = avg.toFixed(2);
}
return avg;
},
moneyFormat = function moneyFormat(num) {
var strNum = '' + parseFloat(num).toFixed(2),
parts = strNum.split('.'),
head = parts[0] || '',
tail = parts[1] || '',
s = [];
if (head) {
var l = head.length,
p = Math.floor(l / 3);
for (var i = 0; i < p; i++) {
s.push(head.substr(l - i * 3 - 3, 3));
}
s.push(head.substr(0, l % 3));
s.reverse();
}
if (s.length > 0) {
return s.join(' ') + '.' + tail;
} else {
return num;
}
},
decimalPlaces = function decimalPlaces(num) {
var match = ('' + num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
if (!match) {
return 0;
}
return Math.max(0,
// Number of digits right of decimal point.
match[1] ? match[1].length : 0,
// Adjust for scientific notation.
-(match[2] ? +match[2] : 0));
},
/**
* get Image for group
* check for selficon, else get icon from menu group
* @param {String} id
* @param {String} name
* @param {String} theme
* @param {Boolean} style
*/
getMainImg = function getMainImg(id, name, theme, style) {
var elem, output, pElem, extImg;
elem = App.Dom.byId('l-' + id);
pElem = $(elem).parent();
extImg = pElem.attr('data-img');
if (!name) {
//use this way because id can have dot.
name = pElem.attr('data-group');
}
if (name && name.indexOf(".") != -1) {
output = '';
} else {
output = 'mb-' + name;
}
if (style && extImg) {
if (name && name.indexOf(".") != -1) {
output = 'style="background: url(' + name + ') left top no-repeat"';
} else {
var prefix = 'img/mb-',
suffix = '.png';
output = 'style="background: url(' + theme + prefix + name + suffix + ') left top no-repeat"';
}
}
if (!extImg && style) {
output = '';
}
//output = theme + prefix + name + suffix;
return output;
},
getGroupIcon = function getGroupIcon(id) {
var elem, pElem, output, extImg;
id = String(id).replace(/\./g, '_');
elem = App.Dom.byId('l-' + id);
pElem = $(elem).parent();
name = pElem.attr('data-group');
extImg = pElem.attr('data-img');
if (extImg) {
output = 'class="subtab__text_for_pin s16x16 s-icon" style="background: url(/manimg/common/img/m-' + name + '.png) left top no-repeat"';
} else {
output = 'class="subtab__text_for_pin s16x16 s-icon m-' + name + '"';
}
return output;
},
devMode = pageInfo.devmode,
pdfOn = pageInfo.pdfOn,
dateTimeId,
renderFormItem = function renderFormItem(item, tabId, classes) {
var itemHTML = '';
classes = classes || '';
//render input text ||hidden || password
if (item.type === 'text' || item.type === 'hidden' || item.type === 'color' || item.type === 'password') {
item.setvalue = item.setvalue || '';
if (item.value) {
item.value = App.u.escapeQuote(item.value);
}
if (item.test && !item.zoom) {
classes += ' test';
} else if (item.test && item.zoom) {
classes += ' testzoom';
}
//render help buttons
if (item.passwd) {
itemHTML += '<div class="b-input-btn b-input-btn_type_passwd hint"' + ' data-hint="' + App.u.escapeQuote(item.hintGenBtn) + '"' + ' data-control-field="' + item.name + '"></div>';
}
if (item.showpwd) {
itemHTML += '<div class="' + (item.passwd ? 'b-input-btn_is_left' : '') + ' b-input-btn b-input-btn_type_showpwd hint"' + ' data-hint="' + App.u.escapeQuote(item.hintShowPwdBtn) + '"' + ' data-control-field="' + item.name + '"' + ' data-tabid="' + tabId + '"></div>';
}
if (item.date) {
itemHTML += '<div class="b-input-btn b-input-btn_type_calendar hint"' + ' data-hint="' + App.u.escapeQuote(item.hintBtn) + '"' + ' data-control-field="' + item.name + '"' + ' data-type="' + item.date + '"></div>';
}
if (item.unlimit) {
itemHTML += '<div class="b-input-btn b-input-btn_type_unlimit hint"' + ' data-hint="' + App.u.escapeQuote(item.hintBtn) + '"' + ' data-control-field="' + item.name + '"></div>';
}
if (item.change) {
itemHTML += '<div class="b-input-btn b-input-btn_type_change hint"' + ' data-hint="' + App.u.escapeQuote(item.hintBtn) + '"></div>';
}
if (item.zoom) {
itemHTML += '<div class="b-input-btn b-input-btn_type_zoom hint"' + ' data-hint="' + App.u.escapeQuote(item.hintBtn) + '" ' + 'data-control-field="' + item.name + '"></div>';
item.inputAttr = item.attr;
item.inputClasses = classes;
item.inputName = item.name;
item.textareaClasses = ' b-textarea_for_zoom';
itemHTML += templates.formItemInputWithZoom(item);
} else if (item.type === 'password') {
item.classes += classes;
if (item.confirm) {
item.confirmField = item.confirmField + '-' + tabId;
item.classes += ' b-form-confirm-field';
} else if (item.passwd) {
item.classes += ' b-form-passwd-field';
}
itemHTML += templates.formItemPassword(item);
if (item.passwd) {
item.pwcheck.id = tabId;
item.pwcheck.name = item.name;
itemHTML += templates.passwdCheck(item.pwcheck);
} else if (item.confirm) {
itemHTML += templates.confirmCheck(item);
}
} else {
item.classes += classes;
itemHTML += templates.formItemInput(item);
}
//render input@type=file
} else if (item.type === 'file') {
item.classes += classes;
item.setvalue = '';
item.value = '';
itemHTML += templates.formItemFile(item);
} else if (item.type === 'textarea') {
//render textarea
item.classes += item.editor;
item.value = window.htmlEscape(item.value);
itemHTML += templates.formItemTextarea(item);
//data for plugin
if (item.variables) {
EventMgr.trigger('saveVarsTinyMCE', {
name: item.name,
tabId: tabId,
vars: item.variables
});
}
} else if (item.type === 'desc') {
//render description
itemHTML += templates.formItemDesk(item);
} else if (item.type === 'htmldata') {
//render htmldata
itemHTML += templates.formItemHtmldata(item);
} else if (item.type === 'select') {
//render select
//separate image & value for filtred value
item.msg = window.filterXSS(item.msg);
item.msg = item.img + item.msg;
itemHTML += templates.formItemSelect(item);
} else if (item.type === 'mselect') {
//render multi select
itemHTML += templates.formItemMSelect(item);
if (item.msg_select_all && pageInfo && pageInfo.messages) {
pageInfo.messages.msg_select_all = item.msg_select_all;
}
} else if (item.type === 'aselect') {
//render select autocomplete
itemHTML += templates.formItemSelectAutocomplete(item);
} else if (item.type === 'radio') {
if (item.hint === '') {
item.readonly += ' nohint';
}
//render radio
itemHTML += templates.formItemRadio(item);
} else if (item.type === 'radioimg') {
//render radio-img
itemHTML += templates.formItemRadioImg(item);
} else if (item.type === 'checkbox') {
if (item.hint === '') {
item.dependFields += ' nohint';
}
if (item.desc === '') {
item.dependFields += ' nodesc';
}
itemHTML += templates.formItemCheckbox(item);
//render slider
} else if (item.type === 'slider') {
//@TODO change with value
itemHTML += templates.formItemSlider(item);
//render mgrview
} else if (item.type === 'mgrview') {
itemHTML += templates.formItemMgrview({
tabId: tabId, theme: pageInfo.theme });
//render textdata
} else if (item.type === 'textdata') {
item.value = window.htmlDecode(item.value);
itemHTML += templates.formItemTextData(item);
//render tree
} else if (item.type === 'tree') {
itemHTML += renderTree(item, tabId);
} else if (item.type === 'ticket') {
itemHTML += templates.formItemTicket(item);
} else if (item.type === 'link') {
itemHTML += templates.formItemLink(item);
} else if (item.type === 'frame') {
itemHTML += templates.formItemFrame(item);
} else if (item.type === 'datetime') {
var d = App.u.parseDate(item.value);
item.difftime = new Date().getTime() - d.getTime();
item.value = App.u.formatDateTime(d.getTime());
itemHTML += templates.formItemDateTime(item);
dateTimeId = setInterval(function (tabId, name) {
return function () {
var elem = App.Dom.byId(tabId + '-' + name);
if (!tabs[tabId] || !elem) {
clearInterval(dateTimeId);
return;
}
var dt = elem.getAttribute('data-difftime') - 0;
elem.innerHTML = App.u.formatDateTime(new Date().getTime() - dt);
};
}(tabId, item.name), 500);
} else if (item.type === 'listfilter') {
itemHTML += templates.formListFilterWrapper({ name: item.name, id: item.id, content: templates.formListFilter(item) });
} else if (item.type === 'captcha') {
itemHTML += templates.formItemCaptcha(item);
EventMgr.trigger('appendCaptcha', { id: tabId + '-' + item.name });
}
return itemHTML;
},
//render form items
renderFormItems = function renderFormItems(form, tabId) {
var length = form.length,
i,
pages = '',
formHtml,
formItemsLen,
j,
formItems,
formItemLen,
k,
formItem,
formRow,
classes,
valuesForm = {},
sourceForm = {};
for (i = 0; i < length; i++) {
formHtml = {
name: form[i].name,
title: '',
content: '',
classes: '',
withList: form[i].withList,
display: form[i].collapsed ? 'none' : 'block',
collapsed: form[i].collapsed,
hide: form[i].hide ? form[i].hide : {},
show: form[i].show ? form[i].show : {},
tabId: tabId
};
if (form[i].title !== '') {
//render title Page
formHtml.title = templates.formPageTitle({
title: form[i].title,
name: form[i].name,
id: form[i].name,
type: 'page',
collapsed: form[i].collapsed,
hintCollapse: pageInfo.pageCollapse,
hintExpand: pageInfo.pageExpand,
blockType: '',
theme: pageInfo.theme,
reload: false });
}
if (!form[i].formItems) {
continue;
}
formItemsLen = form[i].formItems.length;
formItems = form[i].formItems;
//foreach for fields
for (j = 0; j < formItemsLen; j++) {
formItemLen = formItems[j].length;
formItem = formItems[j];
//foreach for elems
for (k = 0; k < formItemLen; k++) {
if (formItem[k].skip) {
continue;
}
sourceForm[formItem[k].name] = formItem[k];
//make form model for watching
valuesForm[formItem[k].name] = {
'defValue': formItem[k].value,
'isChanged': false,
'value': formItem[k].value,
'label': formItem[k].label || formItem[k].desc || false
};
if (formItem[k].type === 'textarea') {
if (formItem[k].value === '\n') {
formItem[k].value = '';
valuesForm[formItem[k].name].value = '';
valuesForm[formItem[k].name].defValue = '';
}
}
formRow = {};
formRow.first = '';
formRow.second = '';
formRow.third = '';
formRow.hint = '';
formRow.classes = '';
formRow.hide = formItem[k].hide || {};
formRow.show = formItem[k].show || {};
formRow.id = formItem[k].name + '-' + form.id;
formRow.desc = '';
formRow.error = formItem[k].error ? formItem[k].error : '';
formRow.colspan = formItem[k].error ? 'colspan="2"' : '';
formRow.fname = formItem[k].name;
formRow.label = formItem[k].label;
formRow.tabId = form.id;
formRow.devMode = devMode;
formRow.testMode = form.testMode;
formItem[k].id = form.id;
//render label
if (formItem[k].label) {
formRow.first += templates.formItemLabel({
label: formItem[k].label,
img: formItem[k].l_img || '',
required: formItem[k].required,
tabId: form.id,
func: form.func,
id: formItem[k].name,
devMode: devMode });
} else if (formItem[k].type !== 'textdata') {
formRow.first += '<div></div>';
}
//render hint
if (formItem[k].hint !== '' && formItem[k].hint) {
formRow.third += App.u.escapeQuote(formItem[k].hint);
if (formItem[k].shadowHint) {
formRow.third += " <span class='hint-shadow'>" + App.u.escapeQuote(formItem[k].shadowHint) + '</span>';
formRow.hint += ' shadow ';
}
formRow.hint += 'field-help_available_yes';
}
if (formItem[k].setvalue) {
var timeout = parseInt(formItem[k].setvalue, 10),
timeId;
if (!isNaN(timeout)) {
/* jslint loopfunc:true*/
timeId = setInterval(function (tabId, name) {
return function () {
if (!tabs[tabId]) {
clearInterval(timeId);
}
EventMgr.trigger('forceSetValues', {
tabId: tabId, name: name
});
};
}(tabId, formItem[k].name), timeout * 1000);
}
} else if (formItem[k].type === 'textarea') {
if (formItem[k].quote) {
formRow.classes += ' b-form-row_with_quote ';
}
formItem[k].third = formRow.third;
formItem[k].error = formRow.error;
}
//@todo move to template
if (formItem[k].desc && formItem[k].desc !== '') {
formRow.desc = formItem[k].desc || '';
//check for checkbox desc
if (formItem[k].type === 'checkbox') {
if (formItem[k].desc !== '') {
formRow.desc = '';
}
}
formRow.descName = formItem[k].descName || '';
}
if (formItem[k].type === 'checkbox' && !formItem[k].desc) {
formRow.classes += ' row-with-no-desc ';
}
formRow.classes += ' l-form__row_type_' + formItem[k].type;
if (formItem[k].fixed) {
formRow.classes += ' i-form__row_fixed_yes b-form__row_fixed_yes';
}
if (formItem[k].error) {
formRow.classes += ' row-error';
}
//check for hide/show rules
if (formItem[k].show !== undefined) {
if (formItem[k].shadow) {
formRow.classes += ' depended-shadow-s';
} else {
formRow.classes += ' depended-hidden-s';
}
}
//render form item
formRow.second = renderFormItem(formItem[k], tabId, '');
//render extra field
if (formItem[k].hasAddition) {
var nextFormItem = formItem[k + 1];
if (nextFormItem) {
if (nextFormItem.type === 'checkbox') {
if (nextFormItem.desc !== '') {
formRow.desc = '';
}
} else if (nextFormItem.type === 'text') {
formRow.id = nextFormItem.name + '-' + form.id;
}
nextFormItem.id = form.id;
formRow.second += renderFormItem(nextFormItem, tabId, '');
formRow.classes += ' l-form__row_has_addition';
if (formItem[k].propWidth) {
formRow.classes += ' l-form__row_propwidth';
}
//check for error
if (nextFormItem.error) {
formRow.error = nextFormItem.error;
formRow.classes += ' row-error';
formRow.colspan = 'colspan="2"';
}
}
}
//render form row
//render input@type=hidden row
if (formItem[k].type === 'hidden') {
formHtml.content += templates.formItemRowHidden(formRow);
//render fullwidth row
} else if (formItem[k].fullwidth) {
formRow.classes += ' fullwidth-row';
formHtml.content += templates.formItemFullWidthRow(formRow);
//render desc row
} else if (formItem[k].formwidth) {
formRow.classes += ' formwidth-row';
formHtml.content += templates.formItemFormWidthRow(formRow);
//render desc row
} else if (formItem[k].type === 'desc') {
formRow.third = '';
formRow.hint = '';
formHtml.content += templates.formItemRowDesc(formRow);
//render row without label
} else if (formItem[k].type === 'list') {
formItem[k].id = form.id;
formItem[k].formflags = form.formflags;
formItem[k].parent = form.parent;
formItem[k].testMode = form.testMode;
//for btn template change type
formItem[k].type = 'form';
if (!(formItem[k].rows && formItem[k].rows.length === 1 && formItem[k].view === 'table')) {
formHtml.content += templates.formListItemRow(formItem[k]);
}
} else if (formRow.first === '') {
formHtml.content += templates.formItemRowWithoutLabel(formRow);
//render normal row
} else {
formHtml.content += templates.formItemRow(formRow);
}
if (formItem[k].plainhint) {
var hLen = formItem[k].plainhint.length;
//start from 1 because 1st elem empty
for (var h = 1; h < hLen; h++) {
formItem[k].plainhint[h].name = formItem[k].name;
formHtml.content += templates.formPlainHintRow(formItem[k].plainhint[h]);
}
}
}
}
formHtml.view = 'form';
pages += templates.formPageWrapper(formHtml);
}
return {
html: pages,
model: valuesForm,
source: sourceForm
};
},
formGetTreeBranch = function formGetTreeBranch(e, data) {
var setvalues = data.setvalues,
elem = data.elem,
name = data.name,
items = setvalues[name].tlist,
html = renderTlist(items),
id = data.id;
elem.after(html);
data.img.attr('src', data.src);
elem.parent().addClass('loaded t-opened').removeClass('collapsed loading');
EventMgr.trigger('updateScroll', { id: id });
},
//render tree
renderTree = function renderTree(items, tabId) {
var elems = items.tlist,
html,
rows = items.rows * 18,
id = items.name + '-' + tabId;
html = renderTlist(elems, items.value);
return '<div class="tree-wrapper ' + items.setvalue + ' ' + items.multiple + '" id="cont-' + id + '" style="height:' + rows + 'px;">' + '<div id="' + id + '" class="tree-inner" data-tabid="' + tabId + '">' + html + '<input data-type="tree" type="hidden" name="' + items.name + '" value="' + items.value + '" class="' + items.classes + '"id="' + items.name + '-' + tabId + '-value" data-tabid="' + tabId + '"/></div></div>' + '<div class="b-resizer" data-move-trigger="updateScroll" data-id="cont-' + id + '" data-tabid="' + tabId + '"></div>';
},
//render tree list
renderTlist = function renderTlist(items, value) {
var len = items.length,
i,
html = '',
child,
className = '',
selected;
html = '<ul>';
for (i = 0; i < len; i++) {
child = items[i].child.length > 0;
className = child ? 't-opened loaded' : items[i].collapsed ? 'collapsed' : '';
className += len - 1 === i ? ' last ' : '';
selected = items[i].key === value ? ' selected ' : '';
html += ' <li class="' + className + ' folder"> <div class="tree-hitarea bline"></div> <div class="tree-handler ' + selected + '" data-val="' + items[i].key + '" ><div class="bline icon"><img src="' + pageInfo.commonDir + 'img/' + items[i].img + '.png" /></div><div class="tree-label bline">' + items[i].value + '</div></div>';
if (child) {
html += renderTlist(items[i].child, value);
}
html += '</li>';
}
html += '</ul>';
return html;
},
renderInfoList = function renderInfoList(obj) {
return templates.infoList({ rows: obj.rows, testMode: obj.testMode });
},
//render dashboard blocks
renderDashboard = function renderDashboard(blocks) {
var bLength = blocks.length,
top = '',
left = '',
right = '',
dashboard = '',
contentBlock,
title,
param,
classes,
display,
blockId,
id,
titleObject,
contentObject,
obj;
storage.dashboard = {};
for (var i = 0; i < bLength; i++) {
blocks[i].name = String(blocks[i].name).replace(/\./g, '_');
id = blocks[i].name;
blockId = blocks[i].name;
titleObject = {
name: blocks[i].name,
id: id,
title: blocks[i].title,
type: 'dashboard-block',
blockType: blocks[i].type,
theme: pageInfo.theme,
collapsed: blocks[i].display === 'min',
hintCollapse: pageInfo.pageCollapse,
hintExpand: pageInfo.pageExpand,
hintReload: blocks[i].hintReload,
reload: false };
if (blocks[i].type === 'toolbar') {
contentBlock = templates.dashTaskbar({
toolbar: blocks[i].toolbar });
} else if (blocks[i].type === 'list') {
/* jslint camelcase:false */
param = {
func: blocks[i].func,
p_num: 1,
dashboard: blocks[i].name };
if (blocks[i].rows) {
param.p_cnt = blocks[i].rows;
}
/* jslint camelcase:true */
$.extend(param, blocks[i].params);
storage.dashboard[blocks[i].name] = param;
if (blocks[i].autoupdate) {
setTimeout(function (block) {
return function () {
EventMgr.trigger('refreshDashBlock', { block: block });
};
}(blocks[i]), blocks[i].autoupdate * 1000);
}
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: param,
invar: { blockId: 'block-' + blocks[i].name },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponseForDashboard',
failfunc: 'failedAjaxResponseForDashboard',
queue: 'noqueue' });
contentBlock = '<div id="block-' + blockId + '" class="block-table" data-block-name="' + blocks[i].name + '" data-block-cnt="' + blocks[i].rows + '" data-block-pnum="1' + '" data-block-func="' + blocks[i].func + '">' + '<div class="dashboard-nodata">' + pageInfo.loading + '</div></div>';
titleObject.reload = true;
} else if (blocks[i].type === 'report') {
param = { func: blocks[i].func, dashboard: blocks[i].name };
$.extend(param, blocks[i].params);
storage.dashboard[blocks[i].name] = param;
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: param,
invar: { blockId: 'block-' + blocks[i].name },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponseForDashboard',
failfunc: 'failedAjaxResponseForDashboard',
queue: 'noqueue' });
contentBlock = '<div id="block-' + blockId + '" class="block-table" data-block-name="' + blocks[i].name + '" data-block-func="' + blocks[i].func + '" data-block-param="' + App.Common.serializeForAttr(blocks[i].params) + '"><div class="dashboard-nodata">' + pageInfo.loading + '</div></div>';
titleObject.reload = true;
} else if (blocks[i].type === 'url') {
var ifId = 'f-' + blocks[i].name;
contentBlock = '<div><iframe id="' + ifId + '" width="100%" src="' + blocks[i].url + '"></iframe></div>';
} else if (blocks[i].type === 'infolist') {
param = { func: blocks[i].func, dashboard: blocks[i].name };
storage.dashboard[blocks[i].name] = param;
if (blocks[i].autoupdate) {
setTimeout(function (block) {
return function () {
EventMgr.trigger('refreshDashBlock', { block: block });
};
}(blocks[i]), blocks[i].autoupdate * 1000);
}
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: param,
invar: { blockId: 'block-' + blocks[i].name },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponseForDashboard',
failfunc: 'failedAjaxResponseForDashboard',
queue: 'noqueue' });
titleObject.reload = true;
contentBlock = '<div class="" id="block-' + blockId + '" data-block-name="' + blocks[i].name + '"></div>';
} else if (blocks[i].type === 'isplicense' || blocks[i].type === 'ispupdate') {
param = { func: blocks[i].func, dashboard: blocks[i].name };
storage.dashboard[blocks[i].name] = param;
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: param,
invar: { blockId: 'block-' + blocks[i].name },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponseForDashboard',
failfunc: 'failedAjaxResponseForDashboard',
queue: 'noqueue' });
titleObject.reload = true;
contentBlock = '<div class="" id="block-' + blockId + '" data-block-name="' + blocks[i].name + '"><div class="dashboard-nodata">' + pageInfo.loading + '</div></div>';
} else {
EventMgr.trigger('pullMsg', { msg: 'Dashboard type "' + blocks[i].type + '" do not support.' });
return;
}
//check for update
if (blocks[i].update) {
EventMgr.trigger('addBlockToUpdate', blocks[i]);
}
title = templates.formPageTitle(titleObject);
classes = blocks[i].display === 'min' ? ' b-form-page_st_collapsed ' : '';
display = blocks[i].display === 'min' ? 'none' : 'block';
contentObject = {
view: 'dblock',
title: title,
content: contentBlock,
classes: classes,
display: display,
tabId: blocks[i].name,
hide: [],
show: [] };
if (blocks[i].position === 'top' || blocks[i].position === 'undefined') {
top += templates.formPageWrapper(contentObject);
} else if (blocks[i].position === 'left') {
left += templates.formPageWrapper(contentObject);
} else if (blocks[i].position === 'right') {
right += templates.formPageWrapper(contentObject);
}
contentBlock = '';
title = '';
classes = '';
display = '';
}
obj = {
top: top,
left: left,
right: right,
id: 'tab0'
};
return obj;
},
renderDashboardTable = function renderDashboardTable(e, data) {
var resp = data,
startTime = resp.startTime || 0,
extraTime,
blockId = resp.blockId.replace(/\./g, '_'),
block,
bandHTML,
table,
pagerList,
blockHTML,
bName,
bCnt,
bFunc,
bPnum,
tblock;
resp.tabId = blockId;
block = App.Dom.byId(blockId);
//remove loading class
tblock = App.Dom.byId('t' + blockId);
//calc time end of animation
extraTime = 1000 - (new Date().getTime() - startTime) % 1000;
setTimeout(function () {
if (tblock) {
tblock.className = tblock.className.replace(/loading/g, '');
}
}, extraTime);
if (block === null) {
return;
}
if (resp.type === 'report') {
bandHTML = renderBandDash(resp.bands, blockId);
block.innerHTML = bandHTML;
setTimeout(function () {
EventMgr.trigger('loadGCharts', { bands: resp, tabId: blockId });
}, 10);
} else if (resp.type === 'infolist') {
blockHTML = renderInfoList({ rows: resp.rows, testMode: resp.testMode });
block.innerHTML = blockHTML;
} else if (resp.type === 'isplicense') {
blockHTML = renderLicenseBlock(resp.isplicense_data);
block.innerHTML = blockHTML;
} else if (resp.type === 'ispupdate') {
blockHTML = renderUpdateBlock(resp.ispupdate_data);
block.innerHTML = blockHTML;
} else {
table = '';
pagerList = '';
if (resp.error) {
table = resp.ermsg;
} else {
table = renderTable(resp);
if (resp.pager.pager === 'true') {
pagerList = buildPagerList(resp.pager.pageCount, resp.pager.pageNum);
}
}
blockHTML = '<div id="' + blockId + '-scrollwrapper">' + table + '</div><div class="pager_list pager-list_type_dashboard">' + pagerList + '</div>';
bName = block.getAttribute('data-block-name');
bCnt = block.getAttribute('data-block-cnt');
bFunc = block.getAttribute('data-block-func');
bPnum = block.getAttribute('data-block-pnum');
block = App.Common.replaceHtml(block, blockHTML);
block.setAttribute('data-block-pnum', resp.pager ? resp.pager.pageNum : 1);
block.setAttribute('data-block-name', bName);
block.setAttribute('data-block-cnt', bCnt);
block.setAttribute('data-block-func', bFunc);
block.setAttribute('data-block-pnum', bPnum);
if (!resp.error) {
EventMgr.trigger('appendDashList', { tabId: blockId });
}
}
setTimeout(function () {
EventMgr.trigger('updateScroll', { id: 'cont-tab0' });
}, 300);
setTimeout(function () {
EventMgr.trigger('updateScroll', { id: 'cont-tab0' });
}, 7000);
block = null;
},
//render bands for
renderBandDash = function renderBandDash(bands, id) {
var bandLen = bands.length - 1,
output = '',
i,
gid,
title,
titleClass,
fullwidth;
if (bandLen > 0) {
for (i = 0; i < bandLen; i++) {
gid = id + '-' + i + bands[i].id + '0';
title = '';
titleClass = '';
fullwidth = bands[i].fullwidth ? 'fullwidth-band' : '';
if (bands[i].bigTitle !== '') {
title = bands[i].bigTitle || '';
titleClass = 'big-title';
} else if (bands[i].smallTitle !== '') {
title = bands[i].smallTitle || '';
titleClass = 'small-title';
}
output += templates.reportBandDash({
empty: bands[i].empty,
emptymsg: pageInfo.emptyreport,
title: title,
titleClass: titleClass,
id: id,
gid: gid,
fullwidth: fullwidth });
}
} else {
output = '<div class="dashboard-nodata">' + pageInfo.nodata + '</div>';
}
return output;
},
// render license block on dashboard
renderLicenseBlock = function renderLicenseBlock(data) {
return templates.licenseDashBlock(data);
},
// render update to isp6 block on dashboard
renderUpdateBlock = function renderUpdateBlock(data) {
return templates.updateToIsp6(data);
},
//render tables in reports
renderBands = function renderBands(reports, tabId) {
//if no data return fake chart
if (reports.emptyBand) {
if (reports.hasDiagram) {
return templates.emptyBandOverlay({
emptymsg: pageInfo.emptyreport, tabId: tabId });
} else {
return '<div class="report-nodata">' + pageInfo.nodata + '</div>';
}
}
var bandsContent = '',
bands = reports.bands,
len = bands.length - 1,
id = null,
fullwidth,
i;
//go for bands
for (i = 0; i < len; i++) {
id = tabId + '-' + i;
if (bands[i].content.length === 0) {
if (bands[i - 1] && bands[i - 1].title) {
bandsContent += '<div class="b-report-nodata">' + pageInfo.nodata + '</div>';
}
continue;
}
//check for band like title
if (bands[i].title !== undefined) {
fullwidth = bands[i].fullwidth ? 'fullwidth-band' : '';
bandsContent += '<div class="band-content b-title ' + fullwidth + '"><div class="band-title big-title">' + bands[i].title + '</div></div>';
} else {
$.extend(bands[i], {
elKey: bands[i].headers[0].name,
pager: { pageElems: 0 },
tabId: id, oTabId: tabId });
bands[i].func = reports.func;
var table = '<div>' + renderTable(bands[i]),
gid = id + bands[i].id,
aid = tabId + '-' + bands[i].id,
title = '',
titleClass = '',
hidden = bands[i].hidden ? 'data-table-hidden' : '',
showMsg = bands[i].showMsg,
hideMsg = bands[i].hideMsg,
hiddenClass = bands[i].hidden ? 'hidden' : '',
diagrmCount = bands[i].diagram.length;
fullwidth = bands[i].fullwidth ? 'fullwidth-band' : '';
if (diagrmCount === 0) {
fullwidth += ' nodiagram';
}
if (bands[i].smallTitle !== '') {
title = bands[i].smallTitle;
titleClass = 'small-title';
}
bandsContent += templates.reportBand({
title: title || '',
titleClass: titleClass,
table: table,
id: id,
aid: aid,
gid: gid,
fullwidth: fullwidth,
hidden: hidden,
showMsg: showMsg,
hideMsg: hideMsg,
hiddenClass: hiddenClass,
dc: diagrmCount });
bandsContent += createTableRow(bands[i].headers, id);
} // EventMgr.trigger('loadChart', {diagram :
// bands[i].diagram, gid : gid});
}
return bandsContent;
},
//render table with one row for sum in table reports
createTableRow = function createTableRow(headers, id) {
var table = '<table id="table_sum-' + id + '"><tr>';
for (var i = 0; i < headers; i++) {
table += '<td>' + '<span class="data-sum" id="' + headers[i].name + '"></span>' + '</td>';
}
table += '</tr></table>';
return table;
},
//data for reload page
reloadTabData = function reloadTabData(e, data) {
var tabId = data.tabId,
resetFilterOn = data.resetFilterOn,
url = pageInfo.url,
iType = data.softUpdate ? 'softUpdate' : 'hardUpdate',
filter = data.filter || false,
param,
scrollTop = 0,
//stay help chain
help = data.help,
selid = data.selid || true;
if (data.reload) {
if (!checkReload(data)) {
return;
}
}
if (tabs[tabId] === undefined) {
return;
}
var defParams = tabs[tabId].paramObjAll,
parent = tabs[tabId].parent,
newUrl = data.newurl ? true : false;
if (data.param) {
param = data.param;
//check for pager
/* jslint camelcase:false */
if (param.p_num !== defParams.p_num) {
selid = false;
}
/* jslint camelcase:true */
/* jslint camelcase:false */
if (param.p_num) {
delete defParams.p_num;
}
/* jslint camelcase:true */
} else {
param = data.addedParam || {};
if (tabs[tabId].param.match('p_num')) {
param = App.Common.parseParams(tabs[tabId].param);
}
}
defParams = $.extend(defParams, param);
if (newUrl) {
url = pageInfo.url;
}
//if has selected elems remember it
if (selid) {
scrollTop = getScrollTop(tabId);
if (selid === true) {
selid = getSelectedElems(tabId);
}
}
//save filter value
if (filter) {
var filterBox = App.Dom.byId(tabId + '-search');
if (filterBox) {
filter = filterBox.value;
} else {
filter = false;
}
}
//reset filter on when update from menu
if (resetFilterOn) {
delete defParams.filter;
}
//if request from filter drop, remove filter=on param from list
if (data.__src === 'filterset' || data.__src === 'buildTabOk') {
delete defParams.filter;
}
EventMgr.trigger('ajaxRequest', {
url: url,
param: defParams,
invar: {
dataSaved: true,
parent: parent,
targetTabId: tabId,
selid: selid,
scrollTop: scrollTop,
iType: iType,
__src: 'reloadTab',
help: help ? tabs[tabId].help : false,
liveFilter: filter },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
queue: 'reloadTab' + tabId,
failfunc: 'failCommonAjaxResponse' });
if (iType !== 'softUpdate') {
EventMgr.trigger('tabLoading', { tabId: tabId });
}
},
//handler for submit form
formHandler = function formHandler(e, data) {
var tabId = data.tabId,
selid = data.elid ? [data.elid] : true,
parent = '',
granny = '';
//check for modal
if (!tabs[tabId] && tabId === 'modal1') {
EventMgr.trigger('formInspectorResponse', data);
}
//progressok for wizard form
if (data.ok || data.progressok) {
//check for notifyUp
if (data.notifyUp) {
EventMgr.trigger('forceCheckNotify');
}
//check for late update
if (data.progresstype === 'wait') {
EventMgr.trigger('progressBarSaveState', data);
return false;
}
//check for banners
if (data.message && data.message.length) {
App.Global.bannerHtml = data.message;
App.Global.warning = data.warning;
App.Global.targetId = '';
}
if (tabs[tabId] && tabs[tabId].parent) {
parent = tabs[tabId].parent;
}
if (!checkReload(data) || !checkNewWin(data) || !checkFeatures(data) || !checkDasboard(data)) {
closeTab(e, tabId);
return false;
}
if (!checkNewForm(data) || !checkNewList(data)) {
// closeTab(e, tabId);
return false;
}
App.Common.checkRefreshMenu(data);
if (data.bootTime) {
EventMgr.trigger('startCheckRestart', { bootTime: data.bootTime });
}
//if has parent close self and reload parent
if (tabs[tabId] && tabs[tabId].parent) {
parent = tabs[tabId].parent;
granny = tabs[tabs[tabId].parent].parent;
closeTab(e, tabId);
EventMgr.trigger('reloadTab', { tabId: parent, selid: selid, filter: true });
EventMgr.trigger('tabLoading', { parent: granny });
} else {
closeTab(e, tabId);
}
} else if (data.error && !data.form) {
showErrorOnForm(data);
} else {
EventMgr.trigger('ajaxResponse', data);
}
},
showErrorOnForm = function showErrorOnForm(data) {
if (data.error && data.targetTabId) {
var ermsg = templates.banner({ message: {
status: 'error',
classes: '',
id: data.targetTabId,
text: App.Common.wordWrap(data.ermsg, 100),
ref: false,
refText: pageInfo.moreinfo,
dismiss: data.msg.dismiss
} });
$('#cont-' + data.targetTabId).find('.error-message').html(ermsg);
EventMgr.trigger('tabLoadingHide', { tabId: data.targetTabId });
resetToDefaultFormButton(data.targetTabId);
EventMgr.trigger('updateScroll', { id: 'form-scroll-' + data.targetTabId });
}
},
//BuildPager
buildPager = function buildPager(pager, tabId) {
var slist = templates.formItemSelect({
name: 'pager-slist',
slist: pager.pageSlist,
value: pager.pageNum,
msg: pager.pageSlist[pager.pageNum - 1].value,
depend: pager.depend,
dependMaster: pager.dependMaster,
dependFields: '',
hide: '',
show: '',
readonly: '',
setvalue: '',
id: tabId,
attrInput: '' }),
pagerList = buildPagerList(pager.pageCount, pager.pageNum),
pageCnt = pager.pageCnt,
msgBegan = pager.msgPagershow,
msgEnd = pager.msgPagerline,
pagerHTML = templates.listPager({
slist: slist,
cnt: pageCnt,
pagerList: pagerList,
msgBegan: msgBegan,
msgEnd: msgEnd });
return pagerHTML;
},
//build list pager
buildPagerList = function buildPagerList(pages, current) {
var html = '',
maxLen = 9,
active = '',
// length environment
rl = Math.round((maxLen - 5) / 2);
if (!current) {
current = 1;
}
current = parseInt(current, 10);
var standartPager = function standartPager(pages, current) {
var html = '';
for (var i = 1; i <= pages; i++) {
if (i === current - 0) {
active = 'pager-list__item_active';
} else {
active = 'pager-list__item_act';
}
html += '<span class="page pager-list__item ' + active + '" data-n="' + i + '">' + i + '</span>';
}
return html;
},
firstPageActive = function firstPageActive(maxLen, pages, current) {
var html = '',
prevLast = maxLen - 1;
for (var i = 1; i <= maxLen; i++) {
if (i === current - 0) {
active = 'pager-list__item_active';
} else {
active = 'pager-list__item_act';
}
if (i === prevLast) {
html += '<span class="page ellipsis">...</span>';
} else if (i === maxLen) {
html += '<span class="page pager-list__item ' + active + '" data-n="' + pages + '">' + pages + '</span>';
} else {
html += '<span class="page pager-list__item ' + active + '" data-n="' + i + '">' + i + '</span>';
}
}
return html;
},
lastPageActive = function lastPageActive(maxLen, pages, current) {
var html = '',
first = pages - maxLen;
for (var i = 1; i <= maxLen; i++) {
if (i + first === current - 0) {
active = 'pager-list__item_active';
} else {
active = 'pager-list__item_act';
}
if (i === 2) {
html += '<span class="page ellipsis"> ... </span>';
} else if (i === 1) {
html += '<span class="page pager-list__item ' + active + '" data-n="1">1</span>';
} else {
html += '<span class="page pager-list__item ' + active + '" data-n="' + (i + first) + '">' + (i + first) + '</span>';
}
}
return html;
},
middlePageActive = function middlePageActive(maxLen, pages, current, rl) {
var html = '',
first = current - rl - 3,
prevLast = maxLen - 1;
for (var i = 1; i <= maxLen; i++) {
if (i + first === current) {
active = 'pager-list__item_active';
} else {
active = '';
}
if (i === 1) {
html += '<span class="page pager-list__item pager-list__item_act' + active + '" data-n="1">1</span>';
} else if (i === 2 || i === prevLast) {
html += '<span class="page ellipsis">...</span>';
} else if (i === maxLen) {
html += '<span class="page pager-list__item pager-list__item_act ' + active + '" data-n="' + pages + '">' + pages + '</span>';
} else {
html += '<span class="page pager-list__item pager-list__item_act ' + active + '" data-n="' + (i + first) + '">' + (i + first) + '</span>';
}
}
return html;
};
if (pages <= maxLen) {
// console.log("case: standart");
html = standartPager(pages, current);
} else if (pages >= maxLen && current - rl <= 1) {
// console.log("case: first");
html = firstPageActive(maxLen, pages, current);
} else if (pages >= maxLen && current + rl >= pages) {
// console.log("case: last");
html = lastPageActive(maxLen, pages, current);
} else if (pages >= maxLen && (current - rl >= 1 || current + rl <= pages)) {
// console.log("case: middle");
html = middlePageActive(maxLen, pages, current, rl);
}
return html;
},
addChartToTab = function addChartToTab(e, data) {
var tabId = data.tabId,
chart = data.chart;
if (tabs[tabId] !== undefined) {
tabs[tabId].chart = tabs[tabId].chart || [];
tabs[tabId].chart.push(chart);
}
},
getActiveHint = function getActiveHint(e, data) {
var tabId = data.tabId,
elid = data.elid,
pName = data.pName,
value = data.value,
url = pageInfo.url,
self = data.self,
params;
if (tabs[tabId] === undefined) {
return;
}
params = App.Common.clone(tabs[tabId].paramObjAll);
/* jslint camelcase:false */
params.hint_field = pName;
/* jslint camelcase:true */
params.plid = params.elid;
params.elid = elid;
if (value) {
params.value = value;
}
EventMgr.trigger('ajaxRequest', {
url: url,
param: params,
invar: {
hintTabId: tabId,
hintElid: elid,
hintValue: value,
hintPName: pName,
self: self },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponseHint',
queue: 'actHint' + tabId,
failfunc: 'failCommonAjaxResponse' });
},
//hook for change field callbacks
formFieldChangeHandler = function formFieldChangeHandler(e) {
var tabId = this.getAttribute('data-tabid');
//check for input contains in tab
if (tabs[tabId]) {
EventMgr.trigger('formFieldChanged', {
tabObj: tabs[tabId],
tabId: tabId,
field: this });
}
},
// add formModel to data for setvalues
addModelToSetvalues = function addModelToSetvalues(data) {
var tabId = data.tabId;
if (tabs[tabId]) {
data.__formModel = tabs[tabId].formModel;
}
},
addListModel = function addListModel(data) {
if (data.tabId) {
var tabId = data.tabId.replace('cont-', '');
if (tabs[tabId] && tabs[tabId].__content && tabs[tabId].__headers) {
data.__content = tabs[tabId].__content;
data.__headers = tabs[tabId].__headers;
}
}
},
updateModelBySetvalues = function updateModelBySetvalues(e, data) {
var tabId = data.tabId;
if (tabs[tabId]) {
tabs[tabId].formModel[data.name] = data.value;
}
},
addTabsModel = function addTabsModel(data) {
if (data) {
data.__tabs = tabs;
}
},
//check form changed
checkFormChange = function checkFormChange(tabId) {
if (tabs[tabId] && tabs[tabId].formModel) {
var formModel = tabs[tabId].formModel,
count = 0,
labels = '',
isChanged = false;
for (var keyVar in formModel) {
if (formModel[keyVar].isChanged && formModel[keyVar].label) {
count++;
labels += formModel[keyVar].label + '<br/>';
isChanged = true;
}
}
return {
isChanged: isChanged,
count: count,
labels: labels
};
} else {
return {
isChanged: false,
count: 0
};
}
},
//save form page collapsed state to server
saveFormPageState = function saveFormPageState(e, data) {
var tabId = data.tabId;
if (tabs[tabId]) {
var param = {
page: data.name,
action: tabs[tabId].func,
func: 'collapse',
collapse: data.collapsed ? 'off' : 'on'
};
EventMgr.trigger('ajaxRequest', {
param: param,
trfunc: 'DoNothing',
queue: 'noqueue'
});
}
},
favoriteToggle = function favoriteToggle(e) {
e.preventDefault();
var $self = $(this),
tabId = $self.closest('.tab-content').attr('data-tabid'),
favorite,
options = {
param: {},
trfunc: 'favoriteMenuUpdateDone',
outtype: 'json'
};
if (tabs[tabId]) {
favorite = tabs[tabId].favorite;
if (favorite) {
options.param.func = 'usermenu.suspend';
$self.addClass('b-elem_style_gracescale');
$self.attr('data-state', 'unfavorite');
} else {
options.param.func = 'usermenu.resume';
$self.removeClass('b-elem_style_gracescale');
$self.attr('data-state', 'favorite');
}
options.param.elid = tabs[tabId].func;
EventMgr.trigger('ajaxRequest', options);
tabs[tabId].favorite = !favorite;
}
},
pinToggle = function pinToggle(e) {
e.preventDefault();
var $self = $(this),
tabId = $self.closest('.tab-content').attr('data-tabid'),
pin,
$tabLi = $('#switch-' + tabId),
options = {
param: {},
trfunc: 'pinTabDone',
outtype: 'json'
};
if (tabs[tabId]) {
pin = tabs[tabId].pin;
if (pin) {
options.param.func = 'usermenu.unpin';
//options.param.func = 'usermenu.unpin';
$self.addClass('b-elem_style_gracescale');
$self.attr('data-state', 'unpin');
$tabLi.removeClass('subtab_is_pin');
} else {
options.param.func = 'usermenu.pin';
//options.param.func = 'usermenu.pin';
$self.removeClass('b-elem_style_gracescale');
$self.attr('data-state', 'pin');
$tabLi.addClass('subtab_is_pin');
}
options.param.elid = tabs[tabId].func;
EventMgr.trigger('ajaxRequest', options);
tabs[tabId].pin = !pin;
//update localstorage tabs
EventMgr.trigger('changedTabs', { tabs: tabs });
}
},
changeTabSortIndex = function changeTabSortIndex(e, data) {
if (data.s && data.t && tabs[data.s] && tabs[data.t]) {
var sIndex = tabs[data.s].sIndex;
tabs[data.s].sIndex = tabs[data.t].sIndex;
tabs[data.t].sIndex = sIndex;
EventMgr.trigger('changedTabs', { tabs: tabs });
}
},
/**
* close form & child list/report by ESC key
* e {object} event object
* data {object|undefined} event object data
*/
esckeyHandler = function esckeyHandler(e, data) {
var $actTab = $('.tab-content_st_active'),
type = $actTab.attr('data-tab-type'),
tabId = $actTab.attr('data-tabid');
if (type === 'list' || type === 'report') {
$actTab.find('.toolbar-button__item-img.back').trigger('click');
} else if (type === 'form') {
$('#switch-' + tabId).find('.i-tab-close').trigger('click');
}
};
return {
init: init,
//for dev
tabs: tabs,
closeTab: closeTab,
moneyFormat: moneyFormat
};
}(window, $, EventMgr, App, templates);
//# sourceMappingURL=App.Tabs.js.map
'use strict';
/**
* Form validators module
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
App.Validators = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
EventMgr.on('#main-wrapper', 'input[type="text"].test', 'change', validate);
EventMgr.on('#main-wrapper', 'input[type="text"].testzoom', 'change', multiValidate);
EventMgr.bind('errMsgValid', setErrorMessage);
EventMgr.bind('okMsgValid', setOkMessage);
},
pageInfo = window.pageInfo,
$activeTab = function $activeTab() {
return $('.tab-content_st_active');
},
//Callback for changed input value
validate = function validate(e, data) {
var nameValid = this.getAttribute('data-check'),
paramValid = this.getAttribute('data-check-args'),
errMsg = this.getAttribute('data-error-msg'),
fieldName = this.getAttribute('data-fieldname'),
funcName = this.getAttribute('data-funcname'),
prefix = $(this).siblings('.b-input__prefix').html(),
convert = this.getAttribute('data-convert');
if (this.value === '') {
EventMgr.trigger('okMsgValid', { self: this, number: 0, value: '' });
return;
}
//trigger checkvalue
EventMgr.trigger('checkValue', {
name: nameValid,
prefix: prefix,
param: paramValid,
err: errMsg,
fieldname: fieldName,
number: 0,
funcname: funcName,
convert: convert,
self: this,
value: this.value });
},
//function for checking duplicate
checkDuplicate = function checkDuplicate(values) {
var i, j, n;
n = values.length;
// to ensure the fewest possible comparisons
// outer loop uses each item i at 0 through n
for (i = 0; i < n; i++) {
// inner loop only compares items j at i+1 to n
for (j = i + 1; j < n; j++) {
if (values[i] === values[j]) {
return true;
}
}
}
return false;
},
multiValidate = function multiValidate(e, data) {
if (this.value === '') {
EventMgr.trigger('okMsgValid', { self: this, number: 0, value: '' });
return;
}
var number = 0,
value = this.value,
values = this.value.split(/\s+/),
len = values.length;
if (data) {
number = data.number;
var nextNumber = number + 1;
if (len === nextNumber) {
number = 0;
} else {
number = nextNumber;
}
value = values[nextNumber - 1];
} else {
if (len === 1) {
number = 0;
} else {
if (this.getAttribute('duplicate') !== 'yes') {
if (checkDuplicate(values)) {
EventMgr.trigger('errMsgValid', {
type: 'duplicate',
self: this,
err: pageInfo.duplicate,
number: 0 });
return;
}
}
number = 1;
}
value = this.value.split(/\s+/)[0];
}
var nameValid = this.getAttribute('data-check'),
paramValid = this.getAttribute('data-check-args'),
errMsg = this.getAttribute('data-error-msg'),
fieldName = this.getAttribute('data-fieldname'),
funcName = this.getAttribute('data-funcname'),
convert = this.getAttribute('data-convert');
EventMgr.trigger('checkValue', {
name: nameValid,
param: paramValid,
err: errMsg,
multi: true,
fieldname: fieldName,
funcname: funcName,
self: this,
number: number,
value: value,
convert: convert });
},
replaceValidValue = function replaceValidValue(where, what, than) {
var arr = String(where).split(/\s+|\n/),
l = arr.length,
obj = {
v: '',
changed: false
};
while (l--) {
if (String(arr[l]) === String(what)) {
if (String(what) !== String(than)) {
obj.changed = true;
}
arr[l] = than;
break;
}
}
obj.v = arr.join(' ');
return obj;
},
setOkMessage = function setOkMessage(e, data) {
var self = data.self,
number = data.number,
value = data.value,
ovalue = data.ovalue,
vvalue = data.vvalue,
multi = data.multi,
notOk = data.notOk,
tabId,
secondTdElem,
sData = data,
o;
data = {};
data.number = number;
//for multi value
if (number - 0 !== 0) {
o = replaceValidValue(self.value, vvalue, value);
self.value = o.v;
if (o.changed) {
setWarningError(e, sData);
}
multiValidate.apply(self, [null, data]);
} else {
secondTdElem = $(self).parents('.l-form__col_cont_control');
if (secondTdElem.attr('colspan') - 0 === 2 && !secondTdElem.hasClass('formwidth')) {
secondTdElem.attr('colspan', '');
}
if (value === '' && self.getAttribute('required') || notOk) {
secondTdElem.parents('.l-form__row').removeClass('row-error').removeClass('row-ok');
} else {
secondTdElem.parents('.l-form__row').removeClass('row-error').addClass('row-ok');
}
//replace value if this changed
if (value !== undefined && ovalue !== undefined && vvalue !== undefined) {
o = {};
if (multi) {
o = replaceValidValue(self.value, vvalue, value);
self.value = o.v;
if (o.changed) {
setWarningError(e, sData);
}
} else if (value !== '') {
if (self.value !== value || o.changed) {
setWarningError(e, sData);
}
self.value = value;
}
}
}
tabId = $(self).closest('.tab-content').attr('data-tabid');
EventMgr.trigger('syncInputToZoom', { tabId: tabId, self: self });
EventMgr.trigger('updFormHeight', { tabId: tabId });
},
setWarningError = function setWarningError(e, data) {
data.warning = true;
data.err = pageInfo.messages.validChangeVal;
setErrorMessage.apply(window, [e, data]);
},
// Write error
setErrorMessage = function setErrorMessage(e, data) {
var msg = data.err,
self = data.self,
name = self.getAttribute('name'),
id = self.getAttribute('id'),
number = data.number,
arrValues = self.value ? self.value.split(' ') : [],
tmp = '',
warning = data.warning,
i,
index,
tabId,
r,
secondTdElem;
//show error box if created
if (number - 0 === 0) {
number = arrValues.length;
}
for (i = 0; i < number - 1; i++) {
tmp += arrValues[i] + ' ';
}
index = tmp.length;
var errHTML = '<div class="b-error-box"><div class="b-error-box__top-triangle"></div>' + '<div class="b-error-box__inner">' + msg + '</div></div>';
$('.b-error-box__wrapper[data-id="' + id + '"]').html(errHTML);
secondTdElem = $(self).parents('.l-form__col_cont_control');
if (!secondTdElem.attr('colspan') && !warning) {
secondTdElem.attr('colspan', '2');
}
if (!warning) {
secondTdElem.parents('.l-form__row').addClass('row-error').removeClass('row-ok');
} else {
secondTdElem.parents('.l-form__row').addClass('row-warning');
setTimeout(function () {
secondTdElem.parents('.l-form__row').removeClass('row-warning');
}, 2000);
}
tabId = $(self).closest('.tab-content').attr('data-tabid');
EventMgr.trigger('updFormHeight', { tabId: tabId });
EventMgr.trigger('updateFixedField', { tabId: tabId });
if (!warning) {
//scroll to field
var $self = $(self),
offsetTop = $self.closest('.l-form__row')[0] ? $self.closest('.l-form__row')[0].offsetTop : 0,
$page = $self.closest('.b-form-page'),
$formSW = $('#form-scroll-' + tabId),
MAGICNUMBER = 62 + 12 + 2 + 2; //button block height + padding + margin
if ($page.hasClass('b-form-page_st_collapsed')) {
$page.find('.i-form-page__title').trigger('click');
}
//it can be extform
if ($formSW.length) {
var height = parseFloat($formSW[0].style.height),
scrollTop = $formSW[0].scrollTop;
if ($page[0]) {
offsetTop += $page[0].offsetTop;
}
//offsetTop -= MAGICNUMBER;
offsetTop += MAGICNUMBER;
//scrolltop when not in viewport
if (offsetTop < scrollTop || height + scrollTop < offsetTop) {
EventMgr.trigger('scrollTo', {
id: 'form-scroll-' + tabId,
offsetTop: offsetTop,
animate: false,
raw: false
});
}
}
//setfocus and cursor
//check for type=file
if (String(self.getAttribute('type')).toLowerCase() !== 'file') {
if (self.offsetWidth !== 0) {
self.focus();
window.scrollTo(0, 0);
if (self.setSelectionRange) {
self.setSelectionRange(index, index);
} else if (self.createTextRange) {
r = self.createTextRange();
r.collapse(true);
r.select(index, index);
}
} else if (self.nextSibling) {
//for passwd I think
self.nextSibling.focus();
window.scrollTo(0, 0);
if (self.setSelectionRange) {
self.nextSibling.setSelectionRange(index, index);
} else {
r = self.nextSibling.createTextRange();
r.collapse(true);
r.select(index, index);
}
}
}
}
};
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.Validators.js.map
'use strict';
/**
* Wizard Module
* Control wizard steps
* @param {object} window global object
* @param {object|function} $ jQuery
* @param {object} EventMgr Event manager
*/
/*global App:true*/
App.Wizards = function (window, $, EventMgr) {
'use strict';
/**
* Event in appendForm for check wizard steps
* @param {object} e
* @param {object} data
*/
function wizardLoad(e, data) {
var tabId = data.tabId;
setTimeout(function () {
EventMgr.trigger('bindHorizScrollControl', {
leftBtn: '#cont-' + tabId + ' .i-wizard__triangle_dir_left',
rightBtn: '#cont-' + tabId + ' .i-wizard__triangle_dir_right',
actElem: '#cont-' + tabId + ' .i-wizard__step-num_st_active',
innerBox: '#cont-' + tabId + ' .i-wizard__inner',
id: tabId
});
}, 50);
}
/**
* Init function
* Bind to needed events
*/
function init() {
EventMgr.bind('appendForm', wizardLoad);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr);
//# sourceMappingURL=App.Wizards.js.map
'use strict';
/**
* Calendar module
*
* show calendar
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} em EventMgr library
*/
App.Calendar = function (window, $, em) {
'use strict';
function init() {
loadMessages();
}
function addListeners() {
em.on($calCont(), toolsSelector, 'click', toolMouseupRep);
em.on($calCont(), calMonthSel, 'click', chooseMonthHandler);
em.on($calCont(), daysSelector, 'click', daysMousedownRep);
em.on($calCont(), calMonthSelector, 'mousedown', toolMousedownRep);
em.on($calCont(), calYearSelector, 'mousedown', toolMousedownRep);
em.on($calMonthCombo(), calComboboxSelector, 'mouseup', comboMouseupRep);
em.on($calYearCombo(), calComboboxSelector, 'mouseup', comboMouseupRep);
em.on($calYearCombo(), calComboboxSelector, 'mouseover', comboMouseover);
em.on($calYearCombo(), calComboboxSelector, 'mouseout', comboMouseout);
em.on($calMonthCombo(), calComboboxSelector, 'mouseover', comboMouseover);
em.on($calMonthCombo(), calComboboxSelector, 'mouseout', comboMouseout);
addedListener = true;
}
var addedListener = false,
isIe = /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent),
clActive = false,
clCalendar = null,
clCalendarCell = null,
clField = null,
clDate = null,
clTimeout = null,
clTtool = null,
clElYears = null,
clElMonths = null,
clElHead = null,
clElDays = null,
clElDaysTbody = null,
clSyncField = null,
clMsgMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
clMsgSmonths = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
clMsgWdays = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'],
calMonthSelector = '#calmonth',
calYearSelector = '#calyear',
toolsSelector = '.cl-tool-td',
daysSelector = 'td.cl-days',
calComboboxSelector = ' div',
calMonthSel = '.b-cal__month',
pageInfo = window.pageInfo;
function loadMessages() {
var i;
for (i = 0; i < 12; i++) {
clMsgMonths[i] = pageInfo.calendar['m' + i];
clMsgSmonths[i] = pageInfo.calendar['ms' + i];
}
for (i = 0; i < 7; i++) {
clMsgWdays[i] = pageInfo.calendar['w' + i];
}
}
function $calCont() {
return $('#calendar');
}
function $calMonthCombo() {
return $('#calendar-m');
}
function $calYearCombo() {
return $('#calendar-y');
}
function getHtmlNodes() {
if (!clCalendar) {
clCalendar = document.getElementById('calendar');
if (!clCalendar) {
clCalendar = document.createElement('div');
clCalendar.setAttribute('class', 'cl');
clCalendar.setAttribute('id', 'calendar');
clCalendarCell = document.createElement('div');
clCalendarCell.setAttribute('class', 'cl-cell');
clCalendarCell.setAttribute('id', 'calendar-cell');
clCalendar.appendChild(clCalendarCell);
document.body.appendChild(clCalendar);
}
}
if (!clCalendarCell) {
clCalendarCell = document.getElementById('calendar-cell');
}
if (!clElYears) {
clElYears = document.getElementById('calendar-y');
if (!clElYears) {
clElYears = document.createElement('div');
clElYears.setAttribute('id', 'calendar-y');
clElYears.setAttribute('class', 'cl-ym-y');
document.body.appendChild(clElYears);
}
}
if (!clElMonths) {
clElMonths = document.getElementById('calendar-m');
if (!clElMonths) {
clElMonths = document.createElement('div');
clElMonths.setAttribute('id', 'calendar-m');
clElMonths.setAttribute('class', 'cl-ym-m');
document.body.appendChild(clElMonths);
}
}
if (!addedListener) {
addListeners();
}
}
function setPosition(e) {
// Set position
// Get object which fire even
var obj = e.target ? e.target : e.srcElement,
ipos = $(obj).offset(),
windowWidth = window.innerWidth,
windowHeight = window.innerHeight,
cWidth = clCalendar.offsetWidth,
cHeight = clCalendar.offsetHeight,
x = ipos.left - cWidth + obj.offsetWidth,
y = ipos.top + obj.offsetHeight - 1,
diffY = windowHeight - (y + cHeight),
diffX = windowWidth - (x + cWidth);
if (diffX < 0) {
x = windowWidth - cWidth;
}
if (diffY < 0) {
y = ipos.top - cHeight;
}
if (isIe) {
x += 1;
}
clCalendar.style.left = x + 'px';
clCalendar.style.top = y + 'px';
clCalendar.style.visibility = 'visible';
clActive = true;
}
var calTempl = '<div class="b-cal">' + '<div class="b-cal__head cl-head">' + '<div class="cl-tool-td" id="prevY"><div class="t-inner"></div></div>' + '<div class="cl-tool-td" id="calyear">{{=it.cYear}}</div>' + '<div class="cl-tool-td" id="nextY"><div class="t-inner"></div></div>' + '<div class="cl-tool-td b-cal__today" id="curMonth"></div>' + '</div>' + '<div class="cl-days-wrapper b-cal__month-wrapper">' + '{{~it.months :value :index}}' + '<div class="b-cal__month ' + '{{?index === it.month}}b-cal__month_selected{{?}}"' + ' data-value="{{=index}}">' + '{{=value}}' + '</div>' + '{{~}}' + '</div>' + '</div>',
calTemplFunc = window.doT.template(calTempl);
/**
* show Month calendar
* @param {object} field current field HTML node
* @param {object} syncField HTML node
* @param {object} e event object
*/
function showMonthCal(field, syncField, e) {
getHtmlNodes();
buildComboBox();
document.onmousedown = checkOutclick;
clField = field;
clSyncField = syncField;
clDate = parseDate(field.value, true);
var html = calTemplFunc({
cYear: clDate.getFullYear(),
months: clMsgMonths,
month: clDate.getMonth()
});
clCalendar.setAttribute('data-type', 'month');
clCalendarCell.innerHTML = html;
setPosition(e);
}
function chooseMonthHandler(e) {
e.preventDefault();
if (!this) {
return;
}
var month = this.getAttribute('data-value'),
year = clDate.getFullYear();
month -= 0;
setMonth(year, month + 1);
hide();
}
function showRep(field, syncField, e) {
e = e || window.event;
getHtmlNodes();
// Register events
document.onmousedown = checkOutclick;
// Parse field date
clField = field;
clSyncField = syncField;
clDate = parseDate(clField.value);
// Draw calendar
drawCalendarRep();
drawDateRep(clDate);
setPosition(e);
}
function hideRep() {
if (!clCalendar) {
clCalendar = document.getElementById('calendar');
}
document.onmouseup = null;
document.onmousedown = null;
clCalendar.style.visibility = 'hidden';
clActive = false;
}
function buildComboBox() {
// COMBO BOXES
if (clElYears.innerHTML !== '') {
return;
}
var i;
for (i = 0; i < 12; i++) {
var elDiv = document.createElement('div');
elDiv.id = 'ycombo' + i;
elDiv.className = i % 2 === 0 ? 'cl-ym-div' : 'cl-ym-diveven';
elDiv.innerHTML = 'y ' + i;
clElYears.appendChild(elDiv);
elDiv = document.createElement('div');
elDiv.id = 'mcombo' + i;
elDiv.className = i % 2 === 0 ? 'cl-ym-div' : 'cl-ym-diveven';
elDiv.innerHTML = 'm ' + i;
clElMonths.appendChild(elDiv);
}
// COMBO BOXES
}
function drawCalendarRep() {
if (clElHead && clCalendar.getAttribute('data-type') === 'default') {
return;
}
var i;
clCalendarCell.innerHTML = '';
// HEAD
clElHead = document.createElement('div');
clElHead.className = 'cl-head';
clCalendarCell.appendChild(clElHead);
clCalendar.setAttribute('data-type', 'default');
clElHead.innerHTML = '';
//HEAD
buildComboBox();
// TOOLBAR and DAYS
var elWrDays = document.createElement('div');
elWrDays.className = 'cl-days-wrapper';
clCalendarCell.appendChild(elWrDays);
clElDays = document.createElement('table');
clElDays.className = 'cl-days';
elWrDays.appendChild(clElDays);
clElDaysTbody = document.createElement('tbody');
clElDays.appendChild(clElDaysTbody);
var toolcontent = {
prevM: '.',
calmonth: '',
nextM: '.',
prevY: '.',
calyear: '',
nextY: '.',
today: ''
};
/* jslint forin:true */
for (var keyVar in toolcontent) {
var elToolTd = document.createElement('div');
elToolTd.className = 'cl-tool-td';
elToolTd.id = keyVar;
elToolTd.setAttribute('unselectable', true);
if (toolcontent[keyVar] === '.') {
elToolTd.innerHTML = '<div class="t-inner"></div>';
} else {
elToolTd.innerHTML = toolcontent[keyVar];
}
clElHead.appendChild(elToolTd);
}
var emptyRow = document.createElement('tr');
clElDaysTbody.appendChild(emptyRow);
for (i = 0; i < 7; i++) {
var elDaysTr = document.createElement('tr');
if (i === 0) {
elDaysTr.className = 'cl-dayst-tr';
}
clElDaysTbody.appendChild(elDaysTr);
for (var j = 0; j < 7; j++) {
var elDaysTd = document.createElement('td');
if (j === 6) {
elDaysTd.style.borderRightWidth = 0;
}
elDaysTd.innerHTML = i === 0 ? clMsgWdays[j] : ' ';
if (j === 0) {
addClass(elDaysTd, 'cl-first');
} else if (j === 6) {
addClass(elDaysTd, 'cl-last');
}
elDaysTr.appendChild(elDaysTd);
}
}
// TOOLBAR and DAYS
}
/**
* Draw calendar dates
* @param {Date} cdate current Date object
*/
function drawDateRep(cdate) {
var cyear = cdate.getFullYear();
var cmon = cdate.getMonth();
var cday = cdate.getDate();
var cyearb, cmonb;
if (cmon === 0) {
cyearb = cyear - 1;
cmonb = 11;
} else {
cyearb = cyear;
cmonb = cmon - 1;
}
var elMonth = document.getElementById('calmonth');
var elYear = document.getElementById('calyear');
elYear.innerHTML = cyear;
if (!elMonth) {
return;
}
elMonth.innerHTML = clMsgMonths[cmon];
// 1th week day
var firstdayDate = new Date(cdate.getFullYear(), cdate.getMonth(), cdate.getDate());
firstdayDate.setDate(1);
var startWday = firstdayDate.getDay();
if (startWday === 0) {
startWday = 7;
}
// last day in month
var lastDay = getLastday(cyear, cmon);
var lastDayBehind = getLastday(cyearb, cmonb);
var cb = lastDayBehind - (startWday - 2);
var showRows = [1, 1, 1, 1, 1, 1, 1, 1];
var c = 1;
var nextm = 1;
var innerTd;
for (var i = 2; i < 8; i++) {
for (var j = 0; j < 7; j++) {
clElDays.rows[i].className = '';
if (i % 2 === 0) {
clElDays.rows[i].cells[j].className = 'cl-days';
} else {
clElDays.rows[i].cells[j].className = 'cl-even cl-days';
}
if (j >= 5) {
addClass(clElDays.rows[i].cells[j], 'cl-weekend');
}
clElDays.rows[i].cells[j].id = '';
//prev month
if (i === 2 && j + 1 < startWday) {
// ******
//even day
if (i % 2 === 0) {
clElDays.rows[i].cells[j].className = 'cl-behind cl-days';
} else {
clElDays.rows[i].cells[j].className = 'cl-even cl-behind cl-days';
}
//weekend
if (j >= 5) {
addClass(clElDays.rows[i].cells[j], 'cl-weekend');
}
innerTd = '<div class="inner-td">' + cb + '</div>';
clElDays.rows[i].cells[j].innerHTML = innerTd;
clElDays.rows[i].cells[j].id = cb;
//add event behind day
cb++;
//next month
} else if (c > lastDay) {
// ******
//even day
if (i % 2 === 0) {
clElDays.rows[i].cells[j].className = 'cl-days cl-future';
} else {
clElDays.rows[i].cells[j].className = 'cl-even cl-future cl-days';
}
//weekend
if (j >= 5) {
addClass(clElDays.rows[i].cells[j], 'cl-weekend');
}
innerTd = '<div class="inner-td">' + nextm + '</div>';
clElDays.rows[i].cells[j].innerHTML = innerTd;
clElDays.rows[i].cells[j].id = nextm;
nextm++;
if (j === 0) {
showRows[i] = 0;
}
//current month
} else {
innerTd = '<div class="inner-td">' + c + '</div>';
clElDays.rows[i].cells[j].innerHTML = innerTd;
if (c === cday) {
addClass(clElDays.rows[i].cells[j], 'cl-selected');
}
c++;
}
if (j === 0) {
addClass(clElDays.rows[i].cells[j], 'cl-first');
} else if (j === 6) {
addClass(clElDays.rows[i].cells[j], 'cl-last');
}
if (i === 2) {
clElDays.rows[i].className = 'first-row';
} else if (i === 7) {
if (showRows[i] !== 0) {
clElDays.rows[i].className = 'last-row';
} else {
clElDays.rows[i - 1].className = 'last-row';
}
}
}
}
for (var ii = 5; ii < showRows.length; ii++) {
if (showRows[ii] === 1) {
clElDays.rows[ii].style.display = 'table-row';
} else {
clElDays.rows[ii].style.display = 'none';
}
}
}
/////// Select clicked day
function daysMousedownRep(e) {
e = e || window.event;
// Get object which fire event
var obj = e.target ? e.target : e.srcElement,
inner = obj.innerHTML;
if (!String(inner).match(/\d+/)) {
return;
}
/* jslint validthis: true */
inner = inner.replace(/\D[^\.]/g, '');
var self = $(this),
cday = parseInt(inner, 10);
/* jslint validthis: false */
if (self.hasClass('cl-behind')) {
clDate.setMonth(clDate.getMonth() - 1, cday);
} else if (self.hasClass('cl-future')) {
clDate.setMonth(clDate.getMonth() + 1, cday);
} else {
if (isNaN(cday)) {
return;
}
}
setDate(clDate.getFullYear(), clDate.getMonth() + 1, cday);
hideRep();
stopEvent(e);
}
/**
* set month & year in input
* @param {Number} y year XXXX
* @param {Number|String} m month XX
*/
function setMonth(y, m) {
if (m < 10) {
m = '0' + String(m);
}
if (clField.getAttribute('readonly') === null) {
var value = y + '-' + m;
clField.value = value;
$(clField).trigger('change');
if (clSyncField && clSyncField.value === '') {
clSyncField.value = value;
$(clSyncField).trigger('change');
}
}
}
/**
* set full date in input
* @param {Number|String} y year XXXX
* @param {Number|String} m month XX
* @param {Number|String} d day XX
*/
function setDate(y, m, d) {
if (m < 10) {
m = '0' + String(m);
}
if (d < 10) {
d = '0' + String(d);
}
if (clField.getAttribute('readonly') === null) {
var value = y + '-' + m + '-' + d;
clField.value = value;
$(clField).trigger('change');
if (clSyncField && clSyncField.value === '') {
clSyncField.value = value;
$(clSyncField).trigger('change');
}
}
}
function getLastday(y, m) {
var months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
if (m === 1 && y % 4 === 0 && (y % 100 !== 0 || y % 400 === 0)) {
return 29;
} else {
return months[m];
}
}
function applyCurMonth() {
$('.b-cal__month_selected').removeClass('b-cal__month_selected');
$('.b-cal__month[data-value="' + clDate.getMonth() + '"]').addClass('b-cal__month_selected');
$('#calyear').html(clDate.getFullYear());
}
function toolMouseupRep(e) {
e = e || window.event;
// Get object which fire event
/* jslint validthis: true */
var obj = this;
/* jslint validthis: false */
var cday = clDate.getDate();
var cmonth = clDate.getMonth();
var cyear = clDate.getFullYear();
var lastDay, todayDate;
clDate.setDate(1);
if (obj.id === 'prevY') {
clDate.setFullYear(clDate.getFullYear() - 1);
lastDay = getLastday(clDate.getFullYear(), clDate.getMonth());
if (lastDay < cday) {
clDate.setDate(lastDay);
} else {
clDate.setDate(cday);
}
drawDateRep(clDate);
} else if (obj.id === 'prevM') {
clDate.setMonth(clDate.getMonth() - 1);
lastDay = getLastday(clDate.getFullYear(), clDate.getMonth());
if (lastDay < cday) {
clDate.setDate(lastDay);
} else {
clDate.setDate(cday);
}
drawDateRep(clDate);
} else if (obj.id === 'today') {
todayDate = new Date();
if (todayDate.getFullYear() === cyear && todayDate.getMonth() === cmonth && todayDate.getDate() === cday) {
setDate(cyear, cmonth + 1, cday);
hide();
} else {
clDate = todayDate;
drawDateRep(clDate);
}
} else if (obj.id === 'curMonth') {
todayDate = new Date();
if (todayDate.getFullYear() === cyear && todayDate.getMonth() === cmonth) {
setMonth(cyear, cmonth + 1);
hide();
} else {
clDate = todayDate;
applyCurMonth();
}
} else if (obj.id === 'nextM') {
clDate.setMonth(clDate.getMonth() + 1);
lastDay = getLastday(clDate.getFullYear(), clDate.getMonth());
if (lastDay < cday) {
clDate.setDate(lastDay);
} else {
clDate.setDate(cday);
}
drawDateRep(clDate);
} else if (obj.id === 'nextY') {
clDate.setFullYear(clDate.getFullYear() + 1);
lastDay = getLastday(clDate.getFullYear(), clDate.getMonth());
if (lastDay < cday) {
clDate.setDate(lastDay);
} else {
clDate.setDate(cday);
}
drawDateRep(clDate);
}
stopEvent(e);
}
/**
* Year & month click handler
* @param {object} e event object
*/
function toolMousedownRep(e) {
e = e || window.event;
// Get object which fire event
var obj = e.target ? e.target : e.srcElement;
clTtool = obj;
if (obj.id === 'calyear') {
if (clTimeout) {
clearTimeout(clTimeout);
}
clTimeout = setTimeout(function () {
showYear();
}, 250);
document.onmouseup = hideMyRep;
} else if (obj.id === 'calmonth') {
if (clTimeout) {
clearTimeout(clTimeout);
}
clTimeout = setTimeout(function () {
showMonths();
}, 250);
document.onmouseup = hideMyRep;
}
stopEvent(e);
}
function hideMyRep() {
if (clTimeout) {
clearTimeout(clTimeout);
}
document.onmouseup = null;
clElYears.style.visibility = 'hidden';
clElMonths.style.visibility = 'hidden';
if (clTtool) {
removeClass(clTtool, 'cl-tool-selected');
}
}
function showMonths() {
var cmonth = clDate.getMonth();
for (var i = 0; i < 12; i++) {
clElMonths.childNodes[i].innerHTML = clMsgSmonths[i];
if (cmonth === i) {
addClass(clElMonths.childNodes[i], 'cl-ym-selected');
} else {
removeClass(clElMonths.childNodes[i], 'cl-ym-selected');
}
}
var pos = $(clTtool).offset();
var x = clTtool.id === 'calmonth' ? pos.left : pos.left + clTtool.offsetWidth - clElMonths.offsetWidth;
if (isIe) {
x += 1;
}
clElMonths.style.left = x + 'px';
clElMonths.style.top = pos.top + clTtool.offsetHeight - 1 + 'px';
clElMonths.style.visibility = 'visible';
addClass(clTtool, 'cl-tool-selected');
}
/**
* Show years combo box
*/
function showYear() {
var cyear = clDate.getFullYear();
cyear += 12;
for (var i = 0; i < 12; i++) {
clElYears.childNodes[i].innerHTML = cyear - 1 - i * 2;
}
var pos = $(clTtool).offset();
//var pos = mn_get_obj_pos(clTtool);
var x = clTtool.id === 'calyear' ? pos.left - 1 : pos.left + clTtool.offsetWidth - clElYears.offsetWidth + 1;
if (isIe) {
x += 1;
}
clElYears.style.left = x + 'px';
clElYears.style.top = pos.top + clTtool.offsetHeight - 1 + 'px';
clElYears.style.visibility = 'visible';
addClass(clTtool, 'cl-tool-selected');
}
/**
* close calendar
*/
function hide() {
if (!clCalendar) {
clCalendar = document.getElementById('calendar');
}
document.onmousedown = null;
clCalendar.style.visibility = 'hidden';
clActive = false;
}
/**
* Out caledar click handler
* close calendar
* @param {object} e event object
*/
function checkOutclick(e) {
e = e || window.event;
// Get object which fire event
var obj = e.target ? e.target : e.srcElement;
while (obj.parentNode) {
if (obj.id === 'calendar') {
return;
}
obj = obj.parentNode;
}
hide();
}
/**
* Combo month & year click handler
* show chosen year or month
* @param {object} e event object
*/
function comboMouseupRep(e) {
e = e || window.event;
// Get object which fire event
var obj = e.target ? e.target : e.srcElement;
var cday = clDate.getDate();
var lastDay;
clDate.setDate(1);
if (String(obj.id).match(/ycombo/)) {
clDate.setFullYear(parseInt(obj.innerHTML, 10));
lastDay = getLastday(clDate.getFullYear(), clDate.getMonth());
if (lastDay < cday) {
clDate.setDate(lastDay);
} else {
clDate.setDate(cday);
}
drawDateRep(clDate);
} else if (String(obj.id).match(/mcombo(\d+)/)) {
clDate.setMonth(parseInt(RegExp.$1, 10));
lastDay = getLastday(clDate.getFullYear(), clDate.getMonth());
if (lastDay < cday) {
clDate.setDate(lastDay);
} else {
clDate.setDate(cday);
}
drawDateRep(clDate);
}
}
function parseDate(str, month) {
var isfieldok = false,
fy = null,
fm = null,
fd = null;
if (month) {
if (String(str).match(/^(\d\d\d\d)-(\d+)/)) {
fy = parseInt(RegExp.$1, 10);
fm = parseInt(RegExp.$2, 10);
fd = 1;
if (!isNaN(fy) && !isNaN(fm)) {
fm -= 1;
isfieldok = true;
}
}
} else {
if (String(str).match(/^(\d\d\d\d)-(\d+)-(\d+)/)) {
fy = parseInt(RegExp.$1, 10);
fm = parseInt(RegExp.$2, 10);
fd = parseInt(RegExp.$3, 10);
if (!isNaN(fy) && !isNaN(fm) && !isNaN(fd)) {
fm -= 1;
isfieldok = true;
}
}
}
var rdate = null;
if (isfieldok) {
rdate = new Date(fy, fm, fd);
} else {
rdate = new Date();
}
return rdate;
}
function comboMouseover(e) {
e = e || window.event;
// Get object which fire event
var obj = e.target ? e.target : e.srcElement;
addClass(obj, 'cl-ym-hover');
}
function comboMouseout(e) {
e = e || window.event;
// Get object which fire event
var obj = e.target ? e.target : e.srcElement;
removeClass(obj, 'cl-ym-hover');
}
// Remove class from element
function removeClass(el, name) {
if (!(el && el.className)) {
return;
}
var cls = el.className.split(' ');
var ar = [];
for (var i = cls.length; i > 0;) {
if (cls[--i] !== name) {
ar[ar.length] = cls[i];
}
}
el.className = ar.join(' ');
}
// Add class to element
function addClass(el, name) {
removeClass(el, name);
el.className += ' ' + name;
}
function stopEvent(e) {
e = e || window.event;
if (isIe) {
e.cancelBubble = true;e.returnValue = false;
} else {
e.preventDefault();e.stopPropagation();
}
return false;
}
return {
init: init,
show: showRep,
showMonth: showMonthCal
};
}(window, $, EventMgr);
/*
try {
if ( pageInfo.calendar['today'] ) clMsgToday = pageInfo.calendar['today'];
} catch (ex) {}
for ( var i=0; i<12; i++ ) {
clMsgMonths[i] = pageInfo.calendar['m' + i];
clMsgSmonths[i] = pageInfo.calendar['ms' + i]; }
for ( var i=0; i<7; i++ ) { clMsgWdays[i] = pageInfo.calendar['w' + i];; }
*/
//# sourceMappingURL=App.Calendar.js.map
'use strict';
/**
* Valid checker module
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
App.ValidChecker = function (window, $, EventMgr, App) {
var init = function init() {
EventMgr.bind('checkValue', checkValue);
EventMgr.bind('validatorResponse', managerValidator);
},
checkValue = function checkValue(e, data) {
var nameValid = data.name,
self = data.self,
paramValid = data.param,
number = data.number,
value = data.value,
prefix = data.prefix,
fieldName = data.fieldname,
funcName = data.funcname,
convert = data.convert;
//ajax request
var param = {
func: 'check.' + nameValid,
value: value,
name: fieldName,
funcname: funcName };
if (paramValid) {
param.args = paramValid;
}
if (prefix) {
param.prefix = prefix;
}
if (convert) {
param.tconvert = convert;
}
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: param,
invar: {
self: self,
namevalid: nameValid,
ovalue: self.value,
vvalue: value,
multi: data.multi,
number: number },
trfunc: 'validatorResponse',
outtype: 'json',
queue: 'multiload' });
},
managerValidator = function managerValidator(e, data) {
var self = data.self,
nameValid = data.namevalid,
ovalue = data.ovalue,
value = data.value,
number = data.number,
vvalue = data.vvalue;
if (data.ermsg) {
validatorErrors[nameValid] = data.ermsg;
if (ovalue === self.value && self.offsetWidth !== 0 || self.nextSibling !== null && self.nextSibling.nodeName.toLowerCase() === 'textarea' && self.nextSibling.offsetWidth !== 0 && ovalue === self.value) {
EventMgr.trigger('errMsgValid', {
type: nameValid,
self: self,
err: data.ermsg,
number: number });
} else {
EventMgr.trigger('okMsgValid', {
type: nameValid,
self: self,
number: number });
}
} else {
if (ovalue === self.value) {
//single valid
EventMgr.trigger('okMsgValid', {
type: nameValid,
self: self,
number: number,
multi: data.multi,
value: value,
ovalue: ovalue,
vvalue: vvalue });
} else {
//multivalid
EventMgr.trigger('okMsgValid', {
type: nameValid,
self: self,
multi: data.multi,
number: number,
value: value,
ovalue: ovalue,
vvalue: vvalue });
}
}
},
validatorErrors = {};
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.ValidChecker.js.map
'use strict';
/***
* Toolbar grouping buttons
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
App.Toolbar = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
EventMgr.bind('appendList', initToolbar);
EventMgr.bind('menuPositionChanged', windowResize);
EventMgr.obind($(window), 'resize', windowResize);
EventMgr.on('#main-wrapper', toolgrpSelector, 'mouseover', setPosition);
},
toolgrpSelector = '.toolgrp.collapsed',
timeId,
appDom = App.Dom,
/**
* set marginLeft for centring expanded toolbuttons
* @this {Node}
*/
setPosition = function setPosition() {
var width = this.offsetWidth,
id = this.getAttribute('data-id'),
bag = appDom.byId('tb-' + id),
bWidth = bag.offsetWidth,
diff;
diff = (width - bWidth) / 2;
bag.style.marginLeft = diff + 'px';
},
/**
* check for overflow
* @param {Node} elem
* @return {boolean}
*/
checkOverWidth = function checkOverWidth(elem) {
if (elem.offsetWidth + 3 < elem.scrollWidth) {
return true;
}
return false;
},
/**
* collapse toolbuttons
* @param {HTML array} tGroups
* @param {Node} toolbar
* @param {String} tabId
* @return {boolean}
*/
collapseToolBtn = function collapseToolBtn(tGroups, toolbar, tabId) {
var overwidth = true,
collapsed = false,
name,
tl,
toolbag,
bagElems,
l = tGroups.length;
while (overwidth && l--) {
name = tGroups[l].getAttribute('data-name');
toolbag = appDom.byId('tb-' + tabId + '-' + name);
bagElems = toolbag.childNodes;
tl = bagElems.length;
if (tl > 0) {
collapsed = true;
appDom.addClass(tGroups[l], 'collapsed');
}
collapsed = true;
overwidth = checkOverWidth(toolbar);
}
return collapsed;
},
/**
* Expand toolbuttons
* @param {HTML array} tGroups
* @param {Node} toolbar
* @param {string} tabId
* @return {boolean}
*/
expandToolBtn = function expandToolBtn(tGroups, toolbar, tabId) {
var l = tGroups.length,
collapsed = false,
overwidth,
i,
name,
tl,
toolbag,
bagElems;
for (i = 0; i < l; i++) {
name = tGroups[i].getAttribute('data-name');
toolbag = appDom.byId('tb-' + tabId + '-' + name);
toolbag.style.marginLeft = 0;
bagElems = toolbag.childNodes;
tl = bagElems.length;
appDom.removeClass(tGroups[i], 'collapsed');
overwidth = checkOverWidth(toolbar);
if (overwidth) {
if (tl > 0) {
appDom.addClass(tGroups[i], 'collapsed');
}
collapsed = true;
break;
}
}
return collapsed;
},
/**
* check size when append tab
* @param {object} e
* @param {object} data
*/
initToolbar = function initToolbar(e, data) {
var tabId = data.tabId,
toolbar = appDom.byId('toolbar-' + tabId),
tGroups = $('#toolbar-' + tabId + ' .toolgrp'),
overwidth,
collapsed = false;
if (!toolbar) {
return;
}
overwidth = checkOverWidth(toolbar);
if (overwidth) {
collapsed = collapseToolBtn(tGroups, toolbar, tabId);
}
if (collapsed) {
appDom.addClass(toolbar, 'collapsed');
}
},
/**
* check size when resize window
* @param {string} tabId
*/
checkToolbar = function checkToolbar(tabId) {
var toolbar = appDom.byId('toolbar-' + tabId),
collapsed = appDom.hasClass(toolbar, 'collapsed'),
tGroups = $('#toolbar-' + tabId + ' .toolgrp'),
overwidth;
if (!toolbar) {
return;
}
overwidth = checkOverWidth(toolbar);
if (collapsed && !overwidth) {
collapsed = expandToolBtn(tGroups, toolbar, tabId);
} else if (overwidth) {
collapsed = collapseToolBtn(tGroups, toolbar, tabId);
}
if (collapsed) {
appDom.addClass(toolbar, 'collapsed');
} else {
appDom.removeClass(toolbar, 'collapsed');
}
},
resizeHandler = function resizeHandler(e, data) {
var tabId, tabElem;
if (!data) {
tabElem = $('.tab-content_st_active');
tabId = tabElem.attr('data-tabid');
} else {
tabId = data.tabId;
tabElem = $('#cont-' + tabId);
}
if (tabElem.attr('data-tab-type') === 'list') {
checkToolbar(tabId);
}
},
windowResize = function windowResize() {
clearTimeout(timeId);
timeId = setTimeout(function () {
resizeHandler();
}, 100);
};
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.Toolbar.js.map
'use strict';
/**
* Map module
*
* SVG DCMap wrapper
*
*/
var App = App || {};
App.Map = function (window, $, EventMgr, App) {
"use strict";
var init = function init() {
EventMgr.bind('appendMap', loadMap);
EventMgr.bind('savedMapData', savedMapDataHandler);
EventMgr.obind($(window), 'resize', resizeMapHandler);
EventMgr.one('loadMapScript', loadScript);
EventMgr.bind('spaceKeyUp', spaceKeyUpHandler);
EventMgr.bind('upKeyUp, downKeyUp, leftKeyUp, rightKeyUp', arrowKeyUpHandler);
},
baseUrl = pageInfo.url,
racks = {},
selectHandler = function selectHandler(elems, self) {
var i = 0,
tabId = 'cont-' + self.tabId,
sElems = [],
curElem;
/* jslint forin:true */
for (var keyVar in elems) {
i++;
curElem = {};
curElem.elid = elems[keyVar].elid;
curElem.name = elems[keyVar].name;
sElems.push(curElem);
}
if (i === 1) {
EventMgr.trigger("mapSelect", { tabId: tabId });
} else if (i === 0) {
EventMgr.trigger("mapUnSelect", { tabId: tabId });
} else if (i > 1) {
EventMgr.trigger("mapMultiSelect", { tabId: tabId });
}
EventMgr.trigger('updateSelectedElems', { elems: sElems, tabId: self.tabId });
},
saveRackData = function saveRackData(elems, tabId) {
var elemsArray = [],
elemObject,
elem;
for (var key in elems) {
if (elems[key].state) {
elem = elems[key];
if (elem) {
elemObject = {
elid: elem.elid,
name: elem.type,
position: elem.position
};
if (elem.parent) {
elemObject.plid = elem.parent.elid;
}
elemsArray.push(elemObject);
}
}
}
var data = JSON.stringify(elemsArray);
var param = {
func: racks[tabId].saveAction,
data: data
};
EventMgr.trigger('ajaxRequest', {
url: baseUrl,
param: param,
invar: { tabId: tabId },
type: 'get',
outtype: 'json',
trfunc: 'savedMapData',
failfunc: 'failSavedMapData',
queue: 'noqueue' });
EventMgr.trigger('tabLoading', { tabId: tabId });
},
saveData = function saveData(elems, tabId) {
var elemsArray = [],
elemObject,
elem;
/* jslint forin:true */
for (var key in elems) {
elem = elems[key];
if (elems[key]) {
elemObject = {
elid: elem.elid,
direction: Math.round(elem.curDirect),
top: elem.curY,
left: elem.curX,
name: elem.name
};
elemsArray.push(elemObject);
}
}
var data = JSON.stringify(elemsArray);
var param = {
func: maps[tabId].saveAction,
data: data
};
EventMgr.trigger('ajaxRequest', {
url: baseUrl,
param: param,
invar: { tabId: tabId },
type: 'get',
outtype: 'json',
trfunc: 'savedMapData',
failfunc: 'failSavedMapData',
queue: 'noqueue' });
EventMgr.trigger('tabLoading', { tabId: tabId });
},
savedMapDataHandler = function savedMapDataHandler(e, data) {
EventMgr.trigger('tabLoadingHide', { tabId: data.tabId });
},
selectNodeHandler = function selectNodeHandler(elems, tabId) {
if (elems) {
var l = elems.length,
len = l,
ctabId = 'cont-' + tabId,
sElems = [],
curElem;
while (l--) {
curElem = {};
curElem.elid = elems[l].elid;
curElem.name = elems[l].type;
sElems.push(curElem);
}
if (len === 1) {
EventMgr.trigger("mapSelect", { tabId: ctabId });
} else if (len === 0) {
EventMgr.trigger("mapUnSelect", { tabId: ctabId });
} else if (len > 1) {
EventMgr.trigger("mapMultiSelect", { tabId: ctabId });
}
EventMgr.trigger('updateSelectedElems', { elems: sElems, tabId: tabId });
}
},
dblclickNodeHandler = function dblclickNodeHandler(elem, tabId) {
var sElems = [{
'elid': elem.elid,
'name': elem.type
}],
ctabId = 'cont-' + tabId;
EventMgr.trigger("mapSelect", { tabId: ctabId });
EventMgr.trigger('updateSelectedElems', { elems: sElems, tabId: tabId });
$('#toolbar-' + tabId + ' .action.default').trigger('click');
},
setHeightRack = function setHeightRack(tabId) {
var windowHeight = $(window).height(),
top = $('#menu-items-wr').offset().top,
rackHeight = windowHeight - top;
$('.tab-content').height(rackHeight);
var rackWrapper = $('#tcw-' + tabId + ' .topBar');
if (rackWrapper.length > 0) {
var topRack = rackWrapper[0].offsetHeight,
availableHeight = rackHeight - topRack;
$('#' + tabId + '-map').height(availableHeight);
EventMgr.trigger('updateScroll', { id: tabId + '-map' });
}
},
renderRack = function renderRack(data) {
var rack = new Rack('wrapper');
rack.setData(data);
rack.render();
rack.onSaveData(saveRackData);
rack.onSelect(selectNodeHandler);
rack.onDblclick(dblclickNodeHandler);
rack.saveAction = data.map.action;
racks[data.tabId] = rack;
setTimeout(function () {
setHeightRack(data.tabId);
}, 150);
EventMgr.trigger('appendMapDone', data);
},
renderMap = function renderMap(e, data) {
if (data.map.type === 'rack') {
renderRack(data);
return;
}
var tabId = data.tabId,
dataMap = data.map,
mapWrapper = AppDom.byId(tabId + '-map'),
svgWrapper = doc.createElement('div'),
id = 'svg-map-' + tabId,
scale = dataMap.scale || 1,
$mapWrapper,
width = dataMap.width,
height = dataMap.height;
if (!mapWrapper) {
return;
}
svgWrapper.setAttribute('class', 'svg-wrapper');
svgWrapper.setAttribute('id', id);
mapWrapper.appendChild(svgWrapper);
var map = new window.DCMap(id);
map.init({ width: width, height: height, scale: scale, edit: dataMap.edit, msg: dataMap.msg });
map.onDblClick(mapDblClickHandler);
map.renderWorkarea();
map.renderLayers(dataMap);
maps[tabId] = map;
map.saveAction = dataMap.action;
map.onSave(saveData);
map.onSelect(selectHandler);
map.tabId = tabId;
resizeTimeId = setTimeout(function () {
resizeMap();
}, 100);
},
mapDblClickHandler = function mapDblClickHandler(e, ee) {
e.preventDefault();
var curElem = {},
sElems = [],
tabId = this.papper.master.tabId;
curElem.elid = this.elid;
curElem.name = this.name;
sElems.push(curElem);
EventMgr.trigger('updateSelectedElems', { elems: sElems, tabId: tabId });
$('#toolbar-' + tabId + ' .action.default').trigger('click');
},
mapQueue = [],
loadMap = function loadMap(e, data) {
if (typeof window.DCMap !== 'undefined') {
renderMap.apply(window, [e, data]);
} else {
mapQueue.push(data);
EventMgr.trigger('loadMapScript');
}
},
loadScript = function loadScript() {
var file = '/manimg/orion/dcmap.min.js';
App.Common.required(file, runQueue);
},
runQueue = function runQueue() {
var l = mapQueue.length;
while (l--) {
renderMap.apply(window, [{}, mapQueue[l]]);
}
},
AppDom = App.Dom,
doc = document,
//@todo remove map when close tab
maps = {},
resizeTimeId,
//@todo resize when menu hide
resizeMapHandler = function resizeMapHandler() {
clearTimeout(resizeTimeId);
resizeTimeId = setTimeout(function () {
resizeMap();
}, 50);
},
resizeMap = function resizeMap() {
var actTab = $('.tab-content_st_active'),
tabType = actTab.attr('data-tab-type'),
tabId = actTab.attr('data-tabid'),
mapWrapper,
top,
width,
docHeight,
avHeight,
map;
if (tabType === 'map' && maps[tabId]) {
mapWrapper = $('#' + tabId + '-map');
width = mapWrapper[0].offsetWidth - 20;
top = mapWrapper.offset().top;
docHeight = document.body.offsetHeight;
avHeight = docHeight - top - 20;
map = maps[tabId];
map.resize({ width: width, height: avHeight });
} else if (tabType === 'map') {
setHeightRack(tabId);
}
},
spaceKeyUpHandler = function spaceKeyUpHandler() {
var actTab = $('.tab-content_st_active'),
tabId = actTab.attr('data-tabid');
if (maps[tabId]) {
maps[tabId].forceRotate();
}
},
direction = {
'38': 'up',
'40': 'down',
'37': 'left',
'39': 'right'
},
arrowKeyUpHandler = function arrowKeyUpHandler(e, data) {
var actTab = $('.tab-content_st_active'),
tabId = actTab.attr('data-tabid'),
dir = direction[data.codeKey];
if (maps[tabId]) {
maps[tabId].forceMove(dir);
}
};
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.Map.js.map
'use strict';
/**
* Builder state
* @param {object} window global object
* @param {object|function} $ jQuery
* @param {object} EventMgr Event manager
* @param {object} App Application
*/
/*global App:true*/
App.Builder = function (window, $, EventMgr, App) {
'use strict';
var init = function init() {
EventMgr.bind('ajaxResponseInspectorForm', inspectorFormResponseHandler);
EventMgr.bind('failResponseInspectorForm', inspectorFormResponseFailHandler);
EventMgr.bind('readyInspectorFormHtml', readyInspectorFormHtmlHandler);
EventMgr.on(inspectorWrapperSelector, inspectorCloseSelector, 'click', closeForm);
EventMgr.on(inspectorWrapperSelector, inspectorCancelSelector, 'click', closeForm);
EventMgr.on(inspectorWrapperSelector, inspectorCollapseSelector, 'click', inspectorCollapseHandler);
EventMgr.on(mainWrapperSelector, inspectorControlSelector, 'mousedown', inspectorDragHandler);
EventMgr.on(mainWrapperSelector, inspectorFieldLinkSelector, 'click', inspectorLinkFieldHandler);
EventMgr.on(mainWrapperSelector, inspectorToolBtnLinkSelector, 'click', inspectorLinkToolBtnHandler);
EventMgr.on(mainWrapperSelector, inspectorFormLinkSelector, 'click', inspectorLinkFormHandler);
EventMgr.on(mainWrapperSelector, inspectorListLinkSelector, 'click', inspectorLinkListHandler);
EventMgr.on(mainWrapperSelector, inspectorColLinkSelector, 'click', inspectorLinkColHandler);
EventMgr.on(mainWrapperSelector, inspectorToolBtnDelLinkSelector, 'click', inspectorLinkToolBtnDelHandler);
EventMgr.on(mainWrapperSelector, inspectorColDelLinkSelector, 'click', inspectorLinkColDelHandler);
EventMgr.on(mainWrapperSelector, inspectorFieldDelLinkSelector, 'click', inspectorLinkFieldDelHandler);
EventMgr.on('#wrapper', inspectorMenuLinkSelector, 'click', inspectorLinkMenuHandler);
EventMgr.bind('formInspectorResponse', formResponseHandler);
EventMgr.bind('closeModalForm', closeModalForm);
},
document = window.document,
baseUrl = pageInfo.url,
$formWrapper = function $formWrapper() {
return App.Dom.byId('inspector_form');
},
$inspectorContent = function $inspectorContent() {
return App.Dom.byId('inspector-content');
},
inspectorCancelSelector = '.i-button_type_cancel',
inspectorCloseSelector = '.inspector-close',
inspectorCollapseSelector = '.inspector-collapse',
inspectorControlSelector = '.inspector-control',
mainWrapperSelector = '#main-wrapper',
inspectorWrapperSelector = '#main-wrapper',
inspectorFieldLinkSelector = '.devel-link-settings--field,' + ' .devel-link-add--field',
inspectorToolBtnLinkSelector = '.devel-link-settings--toolbutton,' + ' .devel-link-add--toolbutton',
inspectorToolBtnDelLinkSelector = '.devel-link-delete--toolbutton',
inspectorListLinkSelector = '.devel-link-settings--list',
inspectorFormLinkSelector = '.devel-link-settings--form',
inspectorColLinkSelector = '.devel-link-settings--col,' + ' .devel-link-add--col',
inspectorColDelLinkSelector = '.devel-link-delete--col',
inspectorFieldDelLinkSelector = '.devel-link-delete--field',
inspectorMenuLinkSelector = '.devel-link-settings--menu,' + ' .devel-link-add--menu',
//trigger ajax request
inspectorRequest = function inspectorRequest(param, tabId) {
EventMgr.trigger('ajaxRequest', {
url: baseUrl,
param: param,
invar: { sourceTab: tabId },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponseInspectorForm',
queue: '',
failfunc: 'failResponseInspectorForm' });
},
//common function for list inspector
inspectorLinkListEdit = function inspectorLinkListEdit(self, func, plid) {
var param = {},
tabId = self.getAttribute('data-tabid'),
tabCont = App.Dom.byId('cont-' + tabId);
param.func = func;
if (plid) {
param.plid = tabCont.getAttribute('data-func');
}
param.elid = self.getAttribute('data-elid') || '';
inspectorRequest(param, tabId);
},
//common function for delete elem in list
inspectorDeleteListElem = function inspectorDeleteListElem(self, func) {
var param = {},
tabId = self.getAttribute('data-tabid'),
tabCont = App.Dom.byId('cont-' + tabId),
invar = {};
param.func = func;
param.plid = tabCont.getAttribute('data-func');
param.elid = self.getAttribute('data-elid');
invar.rows = self.getAttribute('data-name');
var l = 10;
invar.confirm = '';
//Special for Kuzmich
while (l--) {
invar.confirm += 'Я точно уверен, что хочу удалить элемент!<br/>';
}
invar.tabId = tabId;
invar.params = param;
EventMgr.trigger('listSelectedData', invar);
},
//inspector for field in form
inspectorLinkFieldHandler = function inspectorLinkFieldHandler(e) {
var self = this,
param = {},
tabId = self.getAttribute('data-tabid'),
form = App.Dom.byId('frm-' + tabId);
param.func = 'builder.field';
param.plid = form.func.value;
param.elid = self.getAttribute('data-elid') || '';
inspectorRequest(param, tabId);
e.preventDefault();
},
// inspector toolbtn in list
inspectorLinkToolBtnHandler = function inspectorLinkToolBtnHandler(e) {
inspectorLinkListEdit(this, 'builder.button', true);
e.preventDefault();
},
//delete toolbtn in list
inspectorLinkToolBtnDelHandler = function inspectorLinkToolBtnDelHandler(e) {
inspectorDeleteListElem(this, 'builder.button.delete');
e.preventDefault();
},
//inspector for form
inspectorLinkFormHandler = function inspectorLinkFormHandler(e) {
var self = this,
param = {},
tabId = self.getAttribute('data-tabid'),
tabCont = App.Dom.byId('cont-' + tabId);
param.func = 'builder.form';
param.elid = tabCont.getAttribute('data-func') || '';
inspectorRequest(param, tabId);
e.preventDefault();
},
//inspector for list
inspectorLinkListHandler = function inspectorLinkListHandler(e) {
inspectorLinkListEdit(this, 'builder.list');
e.preventDefault();
},
//response handler for inspector form
inspectorFormResponseHandler = function inspectorFormResponseHandler(e, data) {
var obj = data;
obj.type = 'inspectorForm';
EventMgr.trigger('ajaxResponse', obj);
},
inspectorFormResponseFailHandler = function inspectorFormResponseFailHandler() {},
//inspector for col in list
inspectorLinkColHandler = function inspectorLinkColHandler(e) {
inspectorLinkListEdit(this, 'builder.col', true);
e.preventDefault();
e.stopPropagation();
},
//delete col in list
inspectorLinkColDelHandler = function inspectorLinkColDelHandler(e) {
inspectorDeleteListElem(this, 'builder.col.delete');
e.preventDefault();
e.stopPropagation();
},
inspectorLinkFieldDelHandler = function inspectorLinkFieldDelHandler(e) {
var self = this,
param = {},
invar = {},
tabId = self.getAttribute('data-tabid'),
form = App.Dom.byId('frm-' + tabId);
param.func = 'builder.field.delete';
param.plid = form.func.value;
param.elid = self.getAttribute('data-elid');
invar.rows = self.getAttribute('data-name');
invar.confirm = 'Delete ';
invar.tabId = tabId;
invar.params = param;
EventMgr.trigger('listSelectedData', invar);
e.preventDefault();
},
//inspector menu
inspectorLinkMenuHandler = function inspectorLinkMenuHandler(e) {
var self = this,
param = {};
param.elid = self.getAttribute('data-elid') || '';
param.func = 'builder.menu';
inspectorRequest(param, '');
e.preventDefault();
},
//insert form to modal wrapper
readyInspectorFormHtmlHandler = function readyInspectorFormHtmlHandler(e, data) {
var html = data;
$inspectorContent().innerHTML = html;
$formWrapper().style.display = 'block';
EventMgr.trigger('appendForm', { tabId: 'modal1' });
setModalFormPosition();
},
setModalFormPosition = function setModalFormPosition() {
var $$formWrapper = $formWrapper(),
formWidth,
innerWidth;
if (!$$formWrapper.style.right) {
formWidth = $$formWrapper.offsetWidth;
innerWidth = window.innerWidth;
$$formWrapper.style.right = (innerWidth - formWidth) / 2 + 'px';
$$formWrapper.style.top = '90px';
}
},
//handler for form response
formResponseHandler = function formResponseHandler(e, data) {
var parent = '',
reload = data.reload,
newLocation = data.location,
newWin = data.newwin,
newFormParams = data.formParam,
newListParams = data.listParam,
vars = data.__vars,
param;
if (vars && vars.afterFunc && data.ok) {
EventMgr.trigger(vars.afterFunc, { d: vars });
}
if (data.ok) {
if (reload) {
window.location = baseUrl;
closeForm(e);
return;
} else if (newLocation && newWin) {
window.open(newLocation, '_blank');
} else if (newLocation) {
window.location = newLocation;
closeForm(e);
return;
} else if (newFormParams) {
param = App.Common.parseParams(newFormParams);
EventMgr.trigger('ajaxRequest', {
url: baseUrl,
noesc: true,
param: param,
invar: { parent: parent },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failCommonAjaxResponse',
queue: 'noqueue' });
return;
} else if (newListParams) {
param = App.Common.parseParams(newListParams);
EventMgr.trigger('ajaxRequest', {
url: baseUrl,
noesc: true,
param: param,
invar: { parent: parent },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failCommonAjaxResponse',
queue: 'noqueue' });
return;
} else {
//reload source tab
if (data.parent) {
EventMgr.trigger('reloadTab', { tabId: data.parent });
}
}
closeForm(e);
} else {
//if error render form again with error
var obj = data;
obj.type = 'inspectorForm';
obj.targetTabId = null;
obj.sourceTab = obj.parent;
if (obj.__vars) {
obj.__innervars = obj.__vars;
}
EventMgr.trigger('ajaxResponse', obj);
EventMgr.trigger('tabLoadingHide', { tabId: obj.tabId });
}
},
//inspector collapsed
inspectorCollapseHandler = function inspectorCollapseHandler(e) {
var formWrapper = $formWrapper();
if (App.Dom.hasClass(formWrapper, 'collapsed')) {
App.Dom.removeClass(formWrapper, 'collapsed');
App.Dom.addClass(formWrapper, 'uncollapsed');
} else {
App.Dom.addClass(formWrapper, 'collapsed');
App.Dom.removeClass(formWrapper, 'uncollapsed');
}
e.preventDefault();
},
//close inspector form
closeForm = function closeForm(e) {
$formWrapper().style.display = 'none';
if (e) {
e.preventDefault();
}
},
closeModalForm = function closeModalForm() {
closeForm();
},
formWrapper,
moveObj = {},
//inspector form drag & drop
inspectorDragHandler = function inspectorDragHandler(e) {
e.preventDefault();
document.onmousemove = inspectorMove;
document.onmouseup = inspectorDrop;
formWrapper = $formWrapper();
moveObj.defX = parseInt(formWrapper.style.right, 10) || 0;
moveObj.defY = parseInt(formWrapper.style.top, 10) || 0;
moveObj.shiftX = e.clientX;
moveObj.shiftY = e.clientY;
moveObj.width = formWrapper.offsetWidth;
moveObj.maxTop = window.innerHeight - 35;
moveObj.maxRight = window.innerWidth - moveObj.width;
moveObj.minRight = 50 - moveObj.width;
},
inspectorMove = function inspectorMove(e) {
var x = moveObj.shiftX - e.clientX + moveObj.defX,
y = -(moveObj.shiftY - e.clientY) + moveObj.defY;
if (y < 0) {
y = 0;
}
if (y > moveObj.maxTop) {
y = moveObj.maxTop;
}
if (x < moveObj.minRight) {
x = moveObj.minRight;
}
if (x > moveObj.maxRight) {
x = moveObj.maxRight;
}
formWrapper.style.right = x + 'px';
formWrapper.style.top = y + 'px';
},
inspectorDrop = function inspectorDrop(e) {
document.onmousemove = null;
document.onmouseup = null;
moveObj = {};
};
return {
init: init
};
}(window, $, EventMgr, App);
//# sourceMappingURL=App.Builder.js.map
'use strict';
/**
* check restart
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
**/
App.CheckRestart = function (window, $, EventMgr) {
'use strict';
var bootTime,
pageInfo = window.pageInfo;
function checkRestart(e, data) {
if (!data.bootTime || data.bootTime === bootTime) {
setTimeout(function () {
var param = { func: 'keepalive' };
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: param,
outtype: 'json',
trfunc: 'checkRestart',
failfunc: 'checkRestart',
queue: 'noqueue' });
}, 1500);
} else {
$('#b-overlay').fadeOut(300);
$('#b-progressbar').fadeOut(300);
}
}
function startCheckRestart(e, data) {
bootTime = data.bootTime;
var param = { func: 'keepalive' };
EventMgr.trigger('ajaxRequest', {
url: pageInfo.url,
param: param,
outtype: 'json',
trfunc: 'checkRestart',
failfunc: 'checkRestart',
queue: 'noqueue' });
$('#b-overlay').fadeIn(300);
$('#b-progressbar').fadeIn(300);
}
function init() {
EventMgr.bind('startCheckRestart', startCheckRestart);
EventMgr.bind('checkRestart', checkRestart);
}
return {
init: init
};
}(window, $, EventMgr);
//# sourceMappingURL=App.CheckRestart.js.map
'use strict';
/**
* TinyMCE connector
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
**/
App.TinyMCE = function (window, $, EventMgr, App) {
'use strict';
var CACHE = {},
mainWrapperSelector = '#main-wrapper';
function cleanCache(tabId) {
if (CACHE[tabId] && window.tinymce) {
var l = CACHE[tabId].length,
editors = window.tinymce.editors,
eLen = editors.length,
eLenTmp,
id;
while (l--) {
id = CACHE[tabId][l];
eLenTmp = eLen;
while (eLenTmp--) {
if (editors[eLenTmp].id === id) {
EventMgr.trigger('removeDatafromLocalStorage', { id: id });
editors[eLenTmp].remove();
}
}
}
delete CACHE[tabId];
}
}
/**
* Обновляем контент из вне, по сетвалуес например
* d = { id, content };
*/
function setContent(e, d) {
var editors = window.tinymce.editors,
l = editors.length;
while (l--) {
if (editors[l].id === d.id) {
editors[l].setContent(d.content);
}
}
}
function cleanCacheWrapper(e, data) {
var tabId = data.tabId;
cleanCache(tabId);
}
function initEditor(elems) {
appendEditor(elems);
}
function appendEditor(elems) {
if (!elems) {
return;
}
var l = elems.length,
id,
tabId,
height,
TOOLBAR_HEIGHT = 35 + 34 + 37,
myplugin;
while (l--) {
myplugin = '';
id = elems[l].getAttribute('id');
tabId = elems[l].getAttribute('data-tabid');
height = elems[l].offsetHeight - TOOLBAR_HEIGHT;
//check for needs plugin
if (window.localStorage && window.localStorage.getItem(id)) {
myplugin = 'isp_bill_macro';
}
/* jslint loopfunc:true */
window.tinymce.init({
selector: '#' + id,
language: pageInfo.lang,
resize: false,
height: height,
relative_urls: false,
convert_urls: false,
setup: function setup(ed) {
ed.on('blur', function (e) {
ed.save();
$('#' + ed.id).trigger('change');
});
},
plugins: ['advlist autolink lists link image charmap print preview anchor', 'searchreplace visualblocks code fullscreen', 'insertdatetime media table contextmenu paste ' + myplugin],
toolbar: 'insertfile undo redo pastetext | fontselect | fontsizeselect | styleselect | bold italic |' + ' alignleft aligncenter alignright alignjustify |' + ' bullist numlist outdent indent | link image | ' + myplugin
});
/* jslint loopfunc:false */
CACHE[tabId].push(id);
}
}
function loadEditorScript(elems) {
var file = '/manimg/common/tinymce/tinymce.min.js';
App.Common.required(file, initEditor, elems);
}
function loadEditor(e, data) {
var tabId = data.tabId,
editor,
textareas;
cleanCache(tabId);
CACHE[tabId] = [];
textareas = $('#cont-' + tabId + ' .b-text-editor');
if (textareas.length > 0) {
if (typeof window.tinymce !== 'undefined') {
appendEditor(textareas);
} else {
loadEditorScript(textareas);
}
}
}
function syncContent(e, data) {
var tabId = this.getAttribute('data-tabid');
if (CACHE[tabId] && window.tinymce) {
var l = CACHE[tabId].length,
editors = window.tinymce.editors,
eLen = editors.length,
eLenTmp,
id;
while (l--) {
id = CACHE[tabId][l];
eLenTmp = eLen;
while (eLenTmp--) {
if (editors[eLenTmp].id === id) {
editors[eLenTmp].save();
}
}
}
}
}
function saveVariablesForPlugin(e, data) {
var tabId = data.tabId,
id = data.name + '-' + tabId;
EventMgr.trigger('writeDatatoLocalStorage', { id: id, data: data.vars });
}
function init() {
EventMgr.bind('appendForm', loadEditor);
EventMgr.bind('closeTabEvent', cleanCacheWrapper);
EventMgr.on(mainWrapperSelector, '.i-button_type_ok, .i-button_type_setvalue', 'click', syncContent);
EventMgr.bind('preSetValues', syncContent);
EventMgr.bind('saveVarsTinyMCE', saveVariablesForPlugin);
EventMgr.bind('TinyMCE_setContent', setContent);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.TinyMCE.js.map
'use strict';
/**
* Form model watcher
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} API
*/
/*global App: true*/
App.FormWatcher = function (window, $, EventMgr, App) {
'use strict';
//change form model
function changeState(data) {
var value = data.field.value,
tabObj = data.tabObj,
name = data.field.getAttribute('name');
if (tabObj && tabObj.formModel && tabObj.formModel[name]) {
if (tabObj.formModel[name].defValue === value) {
tabObj.formModel[name].isChanged = false;
} else {
tabObj.formModel[name].isChanged = true;
}
tabObj.formModel[name].value = value;
}
}
function init() {
EventMgr.addHook('formFieldChanged', changeState);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.FormWatcher.js.map
'use strict';
/**
* ConfirmBox module
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
/*global App:true*/
/*global EventMgr:true*/
/*global $:true*/
App.ConfirmBox = function (window, $, EventMgr, App) {
'use strict';
var callbackOk,
callbackCancel,
args,
checkbox,
//show ConfirmBox Flag
modalActive = false,
ACTIVE_CLASS = 'active-modal';
//ConfirmBox selector
function $confirmBox() {
return App.u.selectorCache('#modal');
}
//ConfirmBox message selector
function $confirmBoxMessage() {
return App.u.selectorCache('#modal_message');
}
//ConfirmBok OK button selector
function $confirmBoxOk() {
return App.u.selectorCache('#modal_ok');
}
//ConfirmBox Cancel button selector
function $confirmBoxCancel() {
return App.u.selectorCache('#modal_cancel');
}
//ConfirmBox form area
function $confirmBoxForm() {
return App.u.selectorCache('#modal_form');
}
//BODY selector
function $body() {
return App.u.selectorCache('body');
}
//detect postion nearest trget elem
function detectPosition(self) {
var $self = $(self),
PADDING = 10,
CONFIRMBOXWIDTH = 420,
offset = $self.offset(),
selfHeight = $self.height(),
$confimBoxLocal = $confirmBox(),
confirmBoxHeight = $confimBoxLocal.height(),
windowWidth = window.innerWidth,
windowHeight = window.innerHeight,
top = offset.top + selfHeight + PADDING,
left = offset.left - 137,
defTop = windowHeight / 2 - selfHeight / 2,
defLeft = windowWidth / 2 - CONFIRMBOXWIDTH / 2;
//check for bottom border
if (top + confirmBoxHeight > windowHeight) {
top = windowHeight - confirmBoxHeight - selfHeight - 2 * PADDING;
} else if (top < 0) {
top = 0 + PADDING;
}
//check for right border
if (left + CONFIRMBOXWIDTH > windowWidth) {
left = windowWidth - CONFIRMBOXWIDTH;
} else if (left < 0) {
left = 0 + PADDING;
}
if (defTop - top > 320 || defLeft - left > 320) {
//set new position
$confimBoxLocal.css({
top: top,
left: left,
marginLeft: 0,
marginTop: 0
});
}
}
//Show ConfirmBox
function confirmBoxShow(e, data) {
var text = data.text,
self = data.self;
checkbox = data.checkbox || null;
callbackOk = data.callbackOk || null;
callbackCancel = data.callbackCancel || null;
args = data.args || [];
$body().addClass(ACTIVE_CLASS);
if (data.warning) {
$confirmBox().addClass('modal-with-warning');
text = pageInfo.messages.warning + "</br>" + text;
}
$confirmBoxMessage().html(window.filterXSS(text));
if (checkbox) {
$confirmBoxForm().html(templates.formItemCheckbox({
id: 'confirmbox',
name: 'confirmcheckbox',
desc: checkbox.msg,
value: 'off',
attrInput: 'id="confirmcheckbox"',
dependFields: 'b-checkbox__wrapper_for_confirmbox l-form__row_type_checkbox'
}));
} else {
$confirmBoxForm().html('');
}
if (self) {
detectPosition(self);
}
$confirmBox().show();
modalActive = true;
}
//Reset confirmBox settings
function resetSettings() {
callbackCancel = null;
callbackOk = null;
modalActive = false;
checkbox = null;
$confirmBox().css({
top: '',
left: '',
marginLeft: '',
marginTop: ''
});
$confirmBox().removeClass('modal-with-warning');
}
//OK Handler
function confirmOkHandler(e) {
if (modalActive === true) {
$body().removeClass(ACTIVE_CLASS);
$confirmBox().hide();
if (App.u.isFunction(callbackOk)) {
callbackOk.apply(window, args);
}
if (checkbox && App.u.isFunction(checkbox.cb)) {
checkbox.cb.apply(window, [$('#confirmcheckbox').val()]);
}
resetSettings();
}
}
//Cancel Handler
function confirmCancelHandler(e) {
if (modalActive === true) {
$body().removeClass(ACTIVE_CLASS);
$confirmBox().hide();
if (App.u.isFunction(callbackCancel)) {
callbackCancel.apply(window, args);
}
$confirmBoxForm().html('');
resetSettings();
return true;
}
}
function init() {
EventMgr.bind('confirmBoxShow', confirmBoxShow);
EventMgr.obind($confirmBoxOk(), 'click', confirmOkHandler);
EventMgr.obind($confirmBoxCancel(), 'click', confirmCancelHandler);
// EventMgr.bind('escKeyUp', confirmCancelHandler);
EventMgr.addToTriggerStack('escKeyUp', confirmCancelHandler, 0);
EventMgr.bind('enterKeyUp', confirmOkHandler);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.ConfirmBox.js.map
'use strict';
/**
* Модуль.
* ваш К.О.
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} API
*/
App.HorizScrollControl = function (window, $, EventMgr, App) {
'use strict';
var CACHE = {};
function bindHorizScrollControll(e, data) {
var $leftBtn = $(data.leftBtn),
$rightBtn = $(data.rightBtn),
$innerBox = $(data.innerBox),
$actElem = $(data.actElem),
id = data.id,
step = data.step;
var sc = new ScrollControl({
leftBtn: $leftBtn,
rightBtn: $rightBtn,
innerBox: $innerBox,
actElem: $actElem,
step: step
});
sc.init();
CACHE[id] = sc;
}
function updateHorizScrollControll(e, data) {
var id = data.id;
if (CACHE[id] && CACHE[id].update) {
CACHE[id].update();
}
}
var ScrollControl = function ScrollControl(options) {
this.leftBtn = options.leftBtn;
this.rightBtn = options.rightBtn;
this.innerBox = options.innerBox;
this.outterBox = this.innerBox.parent();
this.actElem = options.actElem;
this.step = options.step || 150;
};
ScrollControl.fn = ScrollControl.prototype;
ScrollControl.fn.init = function () {
this.leftBtn.addClass('b-hsc__btn-left');
this.rightBtn.addClass('b-hsc__btn-right');
this.leftBtn.bind('click', $.proxy(this.moveLeft, this));
this.rightBtn.bind('click', $.proxy(this.moveRight, this));
$(window).bind('resize', $.proxy(this.update, this));
this.getWidth();
this.moveToActElem();
this.checkPosition();
};
ScrollControl.fn.update = function () {
var self = this;
clearTimeout(this.updTimeout);
this.updTimeout = setTimeout(function () {
self.getWidth();
self.moveToActElem();
self.checkPosition();
}, 300);
};
ScrollControl.fn.moveRight = function (e) {
e.preventDefault();
var curLeft = parseFloat(this.innerBox.css('marginLeft'));
if (isNaN(curLeft)) {
curLeft = 0;
}
curLeft -= this.step;
if (curLeft < this.maxLeft) {
curLeft = this.maxLeft;
}
var self = this;
this.innerBox.animate({
marginLeft: curLeft + 'px'
}, 150, function () {
self.checkPosition();
});
};
ScrollControl.fn.moveLeft = function (e) {
e.preventDefault();
var curLeft = parseFloat(this.innerBox.css('marginLeft'));
if (isNaN(curLeft)) {
curLeft = 0;
}
curLeft += this.step;
if (curLeft > 0) {
curLeft = 0;
}
var self = this;
this.innerBox.animate({
marginLeft: curLeft + 'px'
}, 150, function () {
self.checkPosition();
});
};
ScrollControl.fn.getWidth = function () {
this.outterBoxWidth = this.outterBox.width();
this.innerBoxWidth = this.innerBox.width();
this.maxLeft = this.outterBoxWidth - this.innerBoxWidth;
this.overWidth = this.maxLeft < 0;
this.step = Math.ceil(this.innerBoxWidth / Math.floor(this.innerBoxWidth / this.step));
if (isNaN(this.step)) {
this.step = 150;
}
};
ScrollControl.fn.moveToActElem = function () {
if (this.actElem.length > 0 && this.overWidth) {
this.actElemWidth = this.actElem.width();
var offsetLeft = this.actElem.position().left,
rightPoint = this.actElemWidth + offsetLeft,
overLeft = this.outterBoxWidth - rightPoint;
if (overLeft < 0) {
var mLeft = parseInt(this.innerBox.css('marginLeft'), 10) + overLeft;
mLeft = Math.ceil(mLeft / this.step) * this.step - this.step;
if (mLeft < this.maxLeft) {
mLeft = this.maxLeft;
}
this.innerBox.css('margin-left', mLeft + 'px');
}
}
};
ScrollControl.fn.checkPosition = function () {
this.outterBox.removeClass('b-hsc_overwidth_right b-hsc_overwidth_left' + ' b-hsc_overwidth_full');
if (this.outterBoxWidth < this.innerBoxWidth) {
//need to buttons
var marginLeft = parseInt(this.innerBox.css('marginLeft'), 10);
if (marginLeft === 0) {
//show right btn
this.outterBox.addClass('b-hsc_overwidth_right');
} else if (marginLeft === this.maxLeft) {
//show left btn
this.outterBox.addClass('b-hsc_overwidth_left');
} else {
//show both btn
this.outterBox.addClass('b-hsc_overwidth_full');
}
}
};
function clearCache(e, data) {
var tabId = data.tabId;
if (CACHE && CACHE[tabId]) {
delete CACHE[tabId];
if (CACHE['filter-' + tabId]) {
delete CACHE['filter-' + tabId];
}
}
}
function init() {
EventMgr.bind('bindHorizScrollControl', bindHorizScrollControll);
EventMgr.bind('updateHorizScrollControl', updateHorizScrollControll);
EventMgr.bind('closeTabEvent', clearCache);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.HorizScrollControl.js.map
'use strict';
/**
* Dashboard List after insert update
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.DashboardList = function (window, $, EventMgr, App) {
'use strict';
var minimizeColSel = '.i-minimize-col';
function fitCol(e, data) {
var blockId = data.tabId,
$block = $('#' + blockId),
$table = $block.find('.list_table'),
$minimizedCol = $table.find(minimizeColSel),
tableWidth,
blockWidth,
dfWidth,
colWidth;
$table.removeClass('b-list_overflow_ellipsis');
$minimizedCol.css('width', '');
if ($minimizedCol.length) {
tableWidth = $table.width();
blockWidth = $block.width();
if (tableWidth > blockWidth) {
dfWidth = tableWidth - blockWidth;
colWidth = $minimizedCol.width();
$minimizedCol.css('width', colWidth - dfWidth + 'px');
$table.addClass('b-list_overflow_ellipsis');
EventMgr.trigger('updateScroll', { id: blockId + '-scrollwrapper' });
}
}
}
function init() {
EventMgr.bind('appendDashList', fitCol);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.DashboardList.js.map
'use strict';
/**
* Functions for desktop Application
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.Desktop = function (window, $, EventMgr, App) {
'use strict';
function scrollTopWindow() {
window.scrollToTopLeft();
}
function init() {
EventMgr.obind($(window), 'scroll', scrollTopWindow);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.Desktop.js.map
'use strict';
/**
* Message templates
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.MessageTempl = function (window, $, EventMgr, App) {
'use strict';
var msgTemplLink = '.b-msg-templ__link';
function $content() {
return $('#main-wrapper');
}
function $body() {
return $('body');
}
function showFullMsg() {
var ind = this.getAttribute('data-ind');
$('.b-msg-templ__title-content-item_ind_' + ind).show();
}
function hideFullMsg() {
var ind = this.getAttribute('data-ind');
$('.b-msg-templ__title-content-item_ind_' + ind).hide();
}
function frRevstring(str) {
var retStr = '';
for (var i = str.length - 1; i > -1; i--) {
retStr += str.substr(i, 1);
}
return retStr;
}
function getMsgTempl(e) {
e.preventDefault();
var id = this.getAttribute('data-id'),
msgTempl = $('#b-msg-templ-' + id).find('.b-msg-templ'),
tabId = this.getAttribute('data-tabid'),
textarea = App.Dom.byId(id);
var str = textarea.value,
pos = str.length === 0 ? 0 : App.u.getCaretPosition(textarea),
start = str.lastIndexOf('\n', pos - 1) + 1,
s = str.slice(start, pos),
len = s.length;
s = frRevstring(s);
var sm = s.match(/(.*?)[\.\?\!] */);
s = frRevstring(!sm ? s : sm[1]);
s = s.replace(/^ */, '');
if (msgTempl.length > 0) {
msgTempl.remove();
} else {
var param = $('#frm-' + tabId).serializeObject();
/* jslint camelcase: false */
param.source_func = param.func;
/* jslint camelcase: true */
param.func = 'anstempl.get';
/* jslint camelcase: false */
param.source_string = s;
/* jslint camelcase: true */
EventMgr.trigger('ajaxRequest', {
param: param,
invar: {
id: id
},
type: 'get',
outtype: 'json',
trfunc: 'msgTemplResp'
});
}
}
function closeMsgTemlList(e) {
var $msgTemlList = $('.tab-content_st_active .b-msg-templ');
$msgTemlList.remove();
$body().off('click.msgTempl', closeMsgTemlList);
}
function renderMsgTemplList(e, data) {
var templList = data.savedmessage,
id = data.id;
var html = templates.msgTemplList({ templList: templList, id: id });
$('#b-msg-templ-' + id).append(html);
setTimeout(function () {
$body().on('click.msgTempl', closeMsgTemlList);
}, 1);
}
function insertMessage(e) {
e.preventDefault();
var ind = this.getAttribute('data-ind'),
id = this.getAttribute('data-id'),
textMsg = $('.b-msg-templ__title-content-item_ind_' + ind).text(),
targetId = $(this).closest('.b-msg-templ').attr('data-target');
var elem = App.Dom.byId(targetId);
if (elem) {
elem.focus();
App.u.insertStringAfterCaret(elem, textMsg, true);
EventMgr.trigger('ajaxRequest', {
param: {
func: 'anstempl.stat',
id: id
},
type: 'get',
outtype: 'json',
trfunc: 'DoNothing'
});
}
var msgTempl = $('#b-msg-templ-' + targetId).find('.b-msg-templ');
msgTempl.remove();
$body().off('click.msgTempl', closeMsgTemlList);
}
function init() {
EventMgr.on($content(), msgTemplLink, 'click', getMsgTempl);
EventMgr.bind('msgTemplResp', renderMsgTemplList);
EventMgr.on($content(), '.b-msg-templ__title-list-item', 'mouseenter', showFullMsg);
EventMgr.on($content(), '.b-msg-templ__title-list-item', 'mouseleave', hideFullMsg);
EventMgr.on($content(), '.b-msg-templ__title-list-item', 'click', insertMessage);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.MessageTempl.js.map
'use strict';
/**
* Font setting module
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.FontSettings = function (window, $, EventMgr, App) {
'use strict';
function createLink(font) {
var link = document.createElement('link');
link.setAttribute('rel', 'stylesheet');
link.setAttribute('type', 'text/css');
link.setAttribute('href', 'http://fonts.googleapis.com/css?family=' + font);
document.head.appendChild(link);
}
function setFontSize(e) {
var targetview = this.getAttribute('data-targetview'),
val = this.value,
tabId = this.getAttribute('data-tabid'),
elem = App.Dom.byId(tabId + '-' + targetview);
if (elem) {
elem.style.fontSize = val + 'px';
elem.style.lineHeight = val + 'px';
}
}
function setFontFamily(e) {
var targetview = this.getAttribute('data-targetview'),
val = this.value,
tabId = this.getAttribute('data-tabid'),
elem = App.Dom.byId(tabId + '-' + targetview);
if (elem) {
elem.style.fontFamily = val;
if (elem.style.fontFamily === '') {
createLink(val);
setTimeout(function () {
elem.style.fontFamily = val;
}, 1000);
}
}
}
function checkFontSettings(e, data) {
var tabId = data.tabId,
$actTab = $('#cont-' + tabId);
$actTab.find('.i-font-family-control').trigger('change');
$actTab.find('.i-font-size-control').trigger('change');
}
function $c() {
return $('.i-list-wr');
}
function init() {
EventMgr.on($c(), '.i-font-family-control', 'change', setFontFamily);
EventMgr.on($c(), '.i-font-size-control', 'change', setFontSize);
EventMgr.bind('appendForm', checkFontSettings);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.FontSettings.js.map
'use strict';
/**
* Module for report about mistake in content
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.ContentMistake = function (window, $, EventMgr, App) {
'use strict';
var CTRLKEY = 17,
ENTERKEY = 13,
mistakeObject = {};
function showForm(mistakeObject) {
$('body').addClass('active_mistake_form');
$('#modal_mistake_textarea').val(mistakeObject.content);
$('#modal_mistake_input').val(mistakeObject.msgName + ', ' + mistakeObject.funcName);
}
function closeForm() {
$('body').removeClass('active_mistake_form');
$('#modal_mistake_textarea').val('');
$('#modal_mistake_input').val('');
$('#reportmistakebox').val('on');
}
function submitForm() {
var content = $('#modal_mistake_textarea').val(),
devReport = $('#reportmistakebox').val();
if (content !== mistakeObject.content) {
EventMgr.trigger('ajaxRequest', {
param: {
msg: mistakeObject.msgName,
module: mistakeObject.funcName,
content: content,
func: 'editmsg',
notify: devReport
},
type: 'get',
outtype: 'json',
trfunc: 'DoNothing',
queue: 'noqueue'
});
if (mistakeObject.node) {
mistakeObject.node.innerHTML = content;
}
}
closeForm();
}
function detectTextSelection() {
mistakeObject = {};
var content, node, msgName, selection, funcName, selectedContent, targetNode;
if (typeof window.getSelection !== 'undefined') {
selection = window.getSelection();
selectedContent = selection.toString();
if (selectedContent === '') {
return true;
}
//try to find
if (selection.rangeCount > 0) {
node = selection.getRangeAt(0).startContainer.parentNode;
if (node) {
msgName = node.getAttribute('data-mn');
funcName = node.getAttribute('data-fn');
content = node.innerHTML;
targetNode = node;
//try to find in children
if (!msgName) {
$(node).children().each(function () {
if (this.getAttribute('data-mn')) {
msgName = this.getAttribute('data-mn');
funcName = this.getAttribute('data-fn');
content = this.innerHTML;
targetNode = node;
return false;
}
});
}
//try to find in parents
if (!msgName) {
var $parentNode = $(node).closest('[data-mn]');
msgName = $parentNode.attr('data-mn');
if (msgName && $parentNode.length) {
content = $parentNode[0].innerHTML;
}
}
if (msgName && !funcName) {
funcName = $(node).closest('.tab-content').attr('data-func');
}
if (!funcName) {
funcName = $('.tab-content_st_active').attr('data-func');
}
}
}
}
mistakeObject.content = content;
mistakeObject.msgName = msgName;
mistakeObject.funcName = funcName;
mistakeObject.node = targetNode;
if (!msgName) {
EventMgr.trigger('showAlert', { 'msg': pageInfo.mistakeNosel });
} else {
showForm(mistakeObject);
}
}
function keyUpHandler(e) {
var codeKey = e.which || e.keyCode;
if (codeKey === ENTERKEY && (e.ctrlKey || e.metaKey)) {
detectTextSelection();
}
}
function init() {
if (pageInfo.userLevel - 0 >= 29) {
EventMgr.obind($(document), 'keyup', keyUpHandler);
EventMgr.obind('#modal_mistake_cancel', 'click', closeForm);
EventMgr.obind('#modal_mistake_ok', 'click', submitForm);
}
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.ContentMistake.js.map
'use strict';
/**
* Module provide coping link to buffer for current form
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.CopyToBuffer = function (window, $, EventMgr, App) {
'use strict';
function addLinkHandler(e, data) {
var tabId = data.tabId,
elem = App.Dom.byId('permalink-' + tabId),
client;
if (!elem) {
return;
}
client = new ZeroClipboard(elem);
client.on('aftercopy', function (e) {
EventMgr.trigger('showAlert', {
msg: window.pageInfo.linkCopied,
closeTimeout: 1500
});
});
}
function checkFlash() {
var hasFlash = false;
try {
var fo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash');
if (fo) {
hasFlash = true;
}
} catch (e) {
if (navigator.mimeTypes && navigator.mimeTypes['application/x-shockwave-flash'] !== undefined && navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin) {
hasFlash = true;
}
}
return hasFlash;
}
function preventClick(e) {
e.preventDefault();
if (!checkFlash()) {
EventMgr.trigger('showAlert', {
msg: '<div>' + window.pageInfo.linkToCopy + '</div>' + '<textarea class="b-textarea b-modal-mistake__textarea" readonly>' + this.getAttribute('data-clipboard-text') + '</textarea>'
});
}
}
function init() {
if (window.ZeroClipboard && checkFlash()) {
EventMgr.bind('appendForm,appendList,appendReport,appendMap', addLinkHandler);
}
EventMgr.on($('#main-wrapper'), '.b-permalink', 'click', preventClick);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.CopyToBuffer.js.map
'use strict';
/**
* TestCases
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.TestCases = function (window, $, EventMgr, App) {
'use strict';
var formLinkSel = '.testmode__form-link',
contentWrapperSel = '#main-wrapper',
testModeFieldSel = '.i-testmode-field',
inputTextareaSel = '.tab-content_st_testmode input, .tab-content_st_testmode textarea',
iconSelector = '#testmode__list-icon';
function $mainWrapper() {
return App.u.selectorCache('.i-list-wr');
}
function formLinkHandler(e) {
e.preventDefault();
var fieldName = this.getAttribute('data-elid'),
tabId = this.getAttribute('data-tabid'),
func = $('#cont-' + tabId).attr('data-func'),
$self = $(this),
value = $('#cont-' + tabId + ' input[type=hidden][name="' + fieldName + '"],' + '#cont-' + tabId + ' input[type=text][name="' + fieldName + '"],' + '#cont-' + tabId + ' textarea[name=' + fieldName + ']').val();
//if it html/textdata
if (value === undefined) {
//textdata
value = $('#' + tabId + '-' + fieldName + '-inner').html();
if (!value) {
value = $('#' + tabId + '-' + fieldName).html();
}
}
var param = {
func: 'test.check',
fieldname: fieldName,
ffunc: func,
value: value
};
if ($self.hasClass('b-elem_style_gracescale')) {
$self.removeClass('b-elem_style_gracescale');
} else {
$self.addClass('b-elem_style_gracescale');
param.cancel = 'yes';
}
EventMgr.trigger('ajaxRequest', {
param: param,
invar: { sourceTab: tabId },
type: 'get',
outtype: 'json',
trfunc: 'DoNothing',
queue: ''
});
}
var field, iconLeftPos;
function $icon() {
return App.Dom.byId('testmode__list-icon');
}
function showIcon() {
var self = $(this),
offset = self.offset(),
left = offset.left,
top = offset.top,
width = this.offsetWidth,
fastFilterIconElem = $icon(),
isEditable = self.hasClass('editable') || self.hasClass('i-filter-field') || self.parent().hasClass('i-filter-field'),
marginLeft = 22;
field = self;
if (isEditable) {
marginLeft += 22;
}
if (fastFilterIconElem.className.match('active')) {
return;
}
iconLeftPos = left + width - marginLeft;
fastFilterIconElem.style.left = iconLeftPos + 'px';
fastFilterIconElem.style.top = top + 'px';
fastFilterIconElem.style.display = 'block';
}
function hideIcon(e) {
var fastFilterIconElem = $icon();
if (!fastFilterIconElem.className.match('active')) {
fastFilterIconElem.style.display = 'none';
}
}
function selfShowIcon() {
var fastFilterIconElem = $icon();
fastFilterIconElem.style.display = 'block';
}
function addFieldFromFormList(e, data) {
var value = field.html(),
$tabCont = field.closest('.tab-content'),
func = $tabCont.attr('data-func'),
$list = field.closest('.b-form-list__table'),
$tr = field.closest('.b-form-list__col'),
keyName = $list.attr('data-key'),
fieldName = $list.attr('data-name'),
tabId = $tabCont.attr('data-tabid'),
elid = $('#' + tabId + '-elid').val(),
colName = $tr.attr('data-colname');
var param = {
func: 'test.check',
colname: colName,
ffunc: func,
elid: elid,
keyname: keyName,
value: value,
fieldname: fieldName
};
checkTestRequest(param, field);
}
function addFieldFromInfoList(e, data) {
var value = field.html(),
$list = field.closest('.block-table'),
func = $list.attr('data-block-func'),
fieldName = field.attr('data-name');
var param = {
func: 'test.check',
ffunc: func,
value: value,
fieldname: fieldName
};
checkTestRequest(param, field);
}
function addField(e, data) {
//check for formlist
if (field.hasClass('b-form-list__data')) {
addFieldFromFormList(e, data);
return;
} else if (field.hasClass('b-infolist__col_type_value')) {
addFieldFromInfoList(e, data);
return;
}
var value = field.find('.b-list__table-col-content').html(),
listRow = field.closest('.b-list__table-row'),
elid = listRow.attr('data-elid'),
keyName = listRow.attr('data-elkeyname'),
index = field.closest('td').index(),
fieldName = field.closest('table').find('th')[index].getAttribute('data-colname'),
$tabCont = field.closest('.tab-content'),
tabId = $tabCont.attr('data-tabid'),
func = $tabCont.attr('data-func'),
rowIndex = listRow.attr('data-index'),
props = field.find('.props'),
propsString = '';
props.each(function () {
if (propsString !== '') {
propsString += ',';
}
propsString += this.getAttribute('data-name');
propsString += '=';
var v = this.getAttribute('data-value');
if (v) {
propsString += this.getAttribute('data-value');
}
});
if (data.__tabs[tabId] && data.__tabs[tabId].__content) {
if (data.__tabs[tabId].__content[rowIndex] && data.__tabs[tabId].__content[rowIndex][fieldName] && data.__tabs[tabId].__content[rowIndex][fieldName].orig) {
value = data.__tabs[tabId].__content[rowIndex][fieldName].orig;
}
}
var param = {
func: 'test.check',
colname: fieldName,
ffunc: func,
elid: elid,
keyname: keyName,
value: value
};
if (propsString) {
/* jshint camelcase: false */
param.p_value = propsString;
}
checkTestRequest(param, field);
}
function checkTestRequest(param, field) {
if (field.hasClass('bg__green')) {
field.removeClass('bg__green');
param.cancel = 'yes';
} else {
field.addClass('bg__green');
}
//value @orig
//unselect cancel=yes
EventMgr.trigger('ajaxRequest', {
param: param,
invar: {},
type: 'get',
outtype: 'json',
trfunc: 'DoNothing',
queue: ''
});
}
function removeChecker() {
$(this).closest('.l-form__table-control').find('.testmode__form-link').remove();
}
function init() {
EventMgr.on($mainWrapper(), formLinkSel, 'click', formLinkHandler);
EventMgr.on($mainWrapper(), inputTextareaSel, 'change', removeChecker);
$mainWrapper().append('<div class="testmode__list-icon" id="testmode__list-icon" style="display:none;"></div>');
EventMgr.on($mainWrapper(), testModeFieldSel, 'mouseover', showIcon);
EventMgr.on($mainWrapper(), testModeFieldSel, 'mouseout', hideIcon);
EventMgr.obind(iconSelector, 'mouseout', hideIcon);
EventMgr.obind(iconSelector, 'mouseover', selfShowIcon);
//EventMgr.obind(iconSelector, 'click', addField);
EventMgr.onwithdata($mainWrapper(), iconSelector, 'click', 'testColCheck', addField);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.TestCases.js.map
'use strict';
/**
* Модуль.
* ваш К.О.
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.TabDrag = function (window, $, EventMgr, App) {
'use strict';
var tabDragSel = '.tab-group',
dragObj = {},
MINLEFT = 0,
MAXLEFT;
function $content() {
return $('#nav-tabs');
}
function makeShadow($target) {
var width = $target.width(),
height = $target.height(),
$shadow = $('<li class="tab-group__shadow" style="width: ' + width + 'px;"></li>');
dragObj.$shadow = $shadow;
dragObj.width = width;
dragObj.$obj.after(dragObj.$shadow);
}
function detectPosition($list) {
var elems = [];
$list.children().each(function () {
if (this.id !== dragObj.obj.id && this.className !== 'tab-group__shadow') {
var left = this.offsetLeft;
elems.push({
left: left,
right: this.offsetWidth + left,
self: this
});
}
});
dragObj.elems = elems;
}
function underElement(left, right) {
var elems = dragObj.elems,
l = elems.length,
elem;
while (l--) {
//check for left elem
if (left > elems[l].left && left < elems[l].right) {
if (left < elems[l].left + (elems[l].right - elems[l].left) / 2) {
elem = elems[l];
elem.pos = 'before';
break;
}
}
//check for right
if (right > elems[l].left && right < elems[l].right) {
if (right > elems[l].left + (elems[l].right - elems[l].left) / 2) {
elem = elems[l];
elem.pos = 'after';
}
break;
}
}
return elem;
}
function drag(e) {
if ('which' in e && e.which === 3) {
// Gecko (Firefox), WebKit (Safari/Chrome) & Opera
return false;
} else if ('button' in e && e.button === 2) {
// IE, Opera
return false;
}
document.onmouseup = drop;
document.onmousemove = move;
var $self = $(this),
$parent = $self.parent(),
obj = this,
left = obj.offsetLeft;
dragObj.$obj = $self;
dragObj.obj = this;
dragObj.$parent = $parent;
$self.addClass('tab-group_moving_yes');
makeShadow($self);
obj.style.left = left + 'px';
obj.style.position = 'absolute';
MAXLEFT = $parent.width() - dragObj.width;
dragObj.y = e.clientY;
dragObj.x = e.clientX;
detectPosition($parent);
e.preventDefault();
}
var timeId;
function move(e) {
var y = e.clientY,
x = e.clientX,
right,
left,
curX = x - dragObj.x,
curY = y - dragObj.y;
if (Math.abs(curX) < 10 && Math.abs(curY) < 10) {
return;
}
dragObj.x = x;
dragObj.y = y;
left = parseInt(dragObj.obj.style.left, 10) + curX;
left = left > MINLEFT ? left : MINLEFT;
left = left < MAXLEFT ? left : MAXLEFT;
right = left + dragObj.width;
var elem = underElement(left, right);
if (elem) {
$(elem.self)[elem.pos](dragObj.$shadow);
dragObj.cElem = elem;
clearTimeout(timeId);
timeId = setTimeout(function () {
detectPosition(dragObj.$parent);
}, 5);
}
dragObj.obj.style.left = left + 'px';
e.preventDefault();
}
function drop(e) {
//check moving elem
if (dragObj.cElem) {
$(dragObj.cElem.self)[dragObj.cElem.pos](dragObj.$obj);
EventMgr.trigger('changeTabSortIndex', {
s: dragObj.cElem.self.id, t: dragObj.obj.id });
}
dragObj.$shadow.remove();
dragObj.$obj.removeClass('tab-group_moving_yes');
dragObj.obj.style.position = "";
//clear dragObj
dragObj = {};
document.onmouseup = null;
document.onmousemove = null;
}
function init() {
EventMgr.on($content(), tabDragSel, 'mousedown', drag);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.TabDrag.js.map
'use strict';
/**
* UsefulLinks Module
* It shows hint box with links form msg
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.UsefulLinks = function (window, $, EventMgr, App) {
'use strict';
var usefulLinksCrossSelector = '.i-userful-links-collapse',
usefulLinksIcon = '.b-usefulLinks__icon';
function $body() {
return App.u.selectorCache('#main-wrapper');
}
function checkForLinks(e, data) {
if (data && data.srcData && data.srcData.usefulLinks) {
var content = data.srcData.usefulLinks,
title = pageInfo.messages.usefulLinksTitle,
tabId = data.tabId,
type = data.srcData.type,
html = templates.usefulLinks({
content: window.htmlDecode(content),
title: title }),
targetWrapper,
elem = window.document.createElement('div');
$('#cont-' + tabId).addClass('tab-content_has_usefullinks');
if (type === 'list') {
targetWrapper = App.Dom.byId('ltwr-' + tabId);
} else if (type === 'form') {
targetWrapper = App.Dom.byId('form-scroll-in-' + tabId);
}
if (targetWrapper) {
elem.innerHTML = html;
targetWrapper.appendChild(elem);
}
}
}
function closeUsefulLinksByCross(e) {
if (e) {
e.preventDefault();
}
//set cookie, remove :
$('#content').addClass('b-useful-links-flag_is_collapsed');
if (window.localStorage) {
window.localStorage.setItem('useful-links-flag-collapsed', true);
}
}
function expandUsefulLinks(e) {
if (e) {
e.preventDefault();
}
$('#content').removeClass('b-useful-links-flag_is_collapsed');
if (window.localStorage) {
window.localStorage.setItem('useful-links-flag-collapsed', false);
}
}
function init() {
if (window.localStorage) {
if (window.localStorage.getItem('useful-links-flag-collapsed') === 'true') {
closeUsefulLinksByCross();
}
}
EventMgr.bind('appendForm,appendList', checkForLinks);
EventMgr.on($body(), usefulLinksCrossSelector, 'click', closeUsefulLinksByCross);
EventMgr.on($body(), usefulLinksIcon, 'click', expandUsefulLinks);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.UsefulLinks.js.map
'use strict';
/**
* App.InputMask wrapper for http://jasny.github.io/bootstrap/javascript/#inputmask
*
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
App.InputMask = function (window, $, EventMgr, App) {
'use strict';
function bindInputMask(e, data) {
var tabId = data.tabId;
$('#frm-' + tabId).find('.i-input-mask').each(function () {
var mask = this.getAttribute('data-mask');
if (mask) {
$(this).inputmask({
mask: mask,
showMaskOnHover: false
});
}
});
}
function changeMask(e, data) {
var value;
if (data.elem && data.mask !== undefined) {
if (data.mask === '') {
//save value
value = data.elem.value;
$(data.elem).inputmask('remove');
data.elem.value = value;
} else {
value = data.value;
data.elem.setAttribute('data-mask', data.mask);
$(data.elem).inputmask({
mask: data.mask,
showMaskOnHover: false
});
data.elem.value = value;
}
}
}
function init() {
EventMgr.bind('appendForm', bindInputMask);
EventMgr.bind('inputMaskChangeBySetvalues', changeMask);
}
return {
init: init
};
}(window, $, EventMgr, App, doT);
//# sourceMappingURL=App.InputMask.js.map
'use strict';
/**
* Module provide filter with checkboxes for formlist`
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.FormListFilter = function (window, $, EventMgr, App) {
'use strict';
function $mainWrapper() {
return $('#main-wrapper');
}
function filterListCallback(e, data) {
var $filterWrapper = $(this).closest('.i-form-list__filter'),
srcName = $filterWrapper.attr('data-srcname'),
tabId = this.getAttribute('data-tabid'),
$formList = $('#' + tabId + '-' + srcName);
EventMgr.trigger('formListFilterHandler', {
tabId: tabId,
name: srcName,
$formList: $formList,
$filterWrapper: $filterWrapper });
//filterListHandler($formList, $filterWrapper);
}
function filterListHandler(e, data) {
var $formList = data.$formList,
tabId = data.tabId,
$filterWrapper = data.$filterWrapper,
listName = data.name,
$formRows = $formList.find('.row__has__tags');
var $filterItems = $filterWrapper.find('input[type="hidden"]'),
actFilter = [],
actFilterLen = 0,
hasCheckedFilters = false;
//show elems
$filterItems.each(function () {
var name = this.getAttribute('name');
if (this.value === 'on') {
actFilter.push({ name: name, isChecked: true });
actFilterLen++;
} else {
//actFilter.push({ name: name, isChecked: false });
}
});
var hasTag,
countFound = 0;
for (var i = 0, l = $formRows.length; i < l; i++) {
hasTag = false;
if (actFilterLen !== 0) {
$formList.addClass('b-form-list__table_filter_yes');
$filterWrapper.addClass('b-form-list__filter_filter_yes');
for (var j = 0; j < actFilterLen; j++) {
if ($formRows[i] && $formRows[i].className.match(actFilter[j].name)) {
hasTag = true;
//break;
} else {
hasTag = false;
break;
}
}
if (!hasTag) {
$formRows[i].style.display = 'none';
} else {
$formRows[i].style.display = '';
countFound++;
}
} else {
$formRows[i].style.display = '';
$formList.removeClass('b-form-list__table_filter_yes');
$filterWrapper.removeClass('b-form-list__filter_filter_yes');
}
}
if (countFound === 0 && actFilterLen !== 0) {
$filterWrapper.find('.b-form-list__filter-notfound').css('display', 'block');
} else {
$filterWrapper.find('.b-form-list__filter-notfound').css('display', '');
}
EventMgr.trigger('updateScroll', { id: 'form-scroll-' + tabId });
}
function updateFilter(e, data) {
var tabId = data.tabId,
$filterLists = $('#cont-' + tabId + ' .i-form-list__filter'),
$formList,
srcName;
$filterLists.each(function () {
srcName = this.getAttribute('data-srcname');
$formList = $('#' + tabId + '-' + srcName);
EventMgr.trigger('formListFilterHandler', {
tabId: tabId,
name: srcName,
$formList: $formList,
$filterWrapper: $(this) });
//filterListHandler($filterList, $(this));
});
}
function resetFilter() {
var $filterWrapper = $(this).closest('.i-form-list__filter'),
tabId = $filterWrapper.attr('data-tabid'),
$filterItems = $filterWrapper.find('input[type="hidden"]');
$filterItems.each(function () {
if (this.value === 'on') {
$(this).closest('.b-checkbox__wrapper').find('.b-checkbox__control').trigger('click');
}
});
EventMgr.trigger('updateScroll', { id: 'form-scroll-' + tabId });
}
function init() {
EventMgr.on($mainWrapper(), '.b-form-list__filter input[type="hidden"]', 'change', filterListCallback);
EventMgr.on($mainWrapper(), '.i-form-list__filter-clear', 'click', resetFilter);
EventMgr.bind('setValuesDone', updateFilter);
EventMgr.bind('formListFilterHandler', filterListHandler);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.FormListFilter.js.map
'use strict';
/**
* Module provide image view
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.LightBoxProvider = function (window, $, EventMgr, App) {
'use strict';
var $mainWrapper = $('#main-wrapper'),
loaded = false;
function appendFakeItem(e, data) {
$('body').append('<a id="b-lightbox-fake-link" data-lightbox="1" style="visibility: hidden;"></a>');
}
function checkForImage(e, data) {
var tabId = data.tabId,
imageForView = $('#cont-' + tabId + ' .b-image-for-view');
if (imageForView.length > 0) {
loadLib();
imageForView.attr('data-lightbox', tabId + 'img');
}
}
function checkForPreviewBtn(e, data) {
var tabId = data.tabId;
if (!loaded && $('.action-preview').length) {
loadLib();
}
}
function loadLib() {
if (!loaded) {
App.u.injectCss('/manimg/orion/lib/lightbox/css/lightbox.css');
App.u.required('/manimg/orion/lib/lightbox/js/lightbox.min.js');
loaded = true;
}
}
function init() {
EventMgr.bind('appendForm', checkForImage);
EventMgr.bind('formSetValues', checkForImage);
EventMgr.bind('appendList', checkForPreviewBtn);
EventMgr.bind('loadPage', appendFakeItem);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.LightBoxProvider.js.map
'use strict';
/**
* Module provide fixed field in form
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.FormFixedField = function (window, $, EventMgr, App) {
'use strict';
function fixedField(e, data) {
var tabId = data.tabId;
$('#cont-' + tabId).find('.i-form__row_fixed_yes').each(function (index) {
var $self = $(this),
$clone = $self.clone(),
height = $self.height(),
id = 'i' + new Date().getTime();
$clone.addClass('b-form__row_visible_hidden');
$clone.html('<td><div class="b-form__row-inner" id="' + id + '" style="height: ' + height + 'px;"></div></td>');
$self.css('position', 'fixed').css('z-index', 10 - index).css('width', '100%');
$self.attr('data-id', id);
$self.after($clone);
});
}
function updateFixedField(e, data) {
var tabId = data.tabId;
$('#cont-' + tabId).find('.i-form__row_fixed_yes').each(function () {
var $self = $(this),
height = $self.height(),
id = this.getAttribute('data-id');
$('#' + id).css('height', height + 'px');
});
}
function init() {
EventMgr.bind('appendForm', fixedField);
EventMgr.bind('updateFixedField', updateFixedField);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.FormFixedField.js.map
'use strict';
/**
* App.GroupEdit
*
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
*/
App.GroupEdit = function (window, $, EventMgr, App) {
'use strict';
function $content() {
return $('.i-form-wr');
}
function inputHandler(e) {
var $this = $(this);
if (this.value === '') {
//$this.addClass('b-input-mixed');
} else if ($this.hasClass('b-input-mixed')) {
$this.removeClass('b-input-mixed').removeClass('i-control-mixed');
$this.attr('placeholder', '');
}
}
function checkboxHandler(e) {
var $this = $(this),
$wrapper = $this.closest('.b-checkbox__wrapper');
$this.removeClass('i-control-mixed');
if ($wrapper.hasClass('b-checkbox_mixed_yes')) {
$wrapper.removeClass('b-checkbox_mixed_yes');
// $('#' + $this.attr('data-id')).removeClass('i-control-mixed');
}
}
function selectHandler(e) {
var $this = $(this),
$wrapper = $this.closest('.b-myselect');
$this.removeClass('i-control-mixed');
if ($wrapper.hasClass('b-select_mixed_yes')) {
$wrapper.removeClass('b-select_mixed_yes');
}
}
function mSelectHandler(e) {
var $this = $(this),
$wrapper = $this.closest('.b-mselect');
$this.removeClass('i-mselect_mixed_yes'), $unselectMsgNode = $wrapper.find('.b-mselect__item_msg_unselected');
$unselectMsgNode.html($unselectMsgNode.attr('data-default-msg'));
if ($wrapper.hasClass('b-mselect_mixed_yes')) {
$wrapper.removeClass('b-mselect_mixed_yes');
}
}
function textareaHandler() {
var $this = $(this);
if (this.value === '') {
//$this.addClass('b-input-mixed');
} else if ($this.hasClass('b-textarea-mixed')) {
$this.removeClass('b-textarea-mixed').removeClass('i-control-mixed');
$this.attr('placeholder', '');
}
}
function radioHandler() {
var $this = $(this),
$wrapper = $this.closest('.b-radio');
$this.removeClass('i-control-mixed');
if ($wrapper.hasClass('b-radio_mixed_yes')) {
$wrapper.removeClass('b-radio_mixed_yes');
}
}
function init() {
EventMgr.on($content(), '.i-textarea-mixed', 'change', textareaHandler);
EventMgr.on($content(), '.i-input-mixed', 'change', inputHandler);
EventMgr.on($content(), '.i-checkbox_mixed_yes input', 'change', checkboxHandler);
EventMgr.on($content(), '.i-select_mixed_yes input', 'change', selectHandler);
EventMgr.on($content(), '.i-mselect_mixed_yes input', 'change', mSelectHandler);
EventMgr.on($content(), '.i-radio_mixed_yes input', 'change', radioHandler);
}
return {
init: init
};
}(window, $, EventMgr, App, doT);
//# sourceMappingURL=App.GroupEdit.js.map
'use strict';
/**
* Module provide global search
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.GlobalSearch = function (window, $, EventMgr, App) {
'use strict';
var timeoutId,
loaderTimeid,
elem = [],
emptyElem = [{ description: { $: pageInfo.notfound }, __empty__: true }],
keys = {
'38': 'UPKEY',
'40': 'DOWNKEY',
'37': 'LEFTKEY',
'39': 'RIGHTKEY',
'13': 'ENTERKEY',
'9': 'TABKEY'
};
function $mountNode() {
return App.u.selectorCache('.i-gsearch');
}
function $body() {
return App.u.selectorCache('body');
}
function keyUpHandler(e) {
var key = e.which || e.keyCode,
searchString = this.value,
$selected = $('.b-gsearch__list-item_selected_yes');
if (keys[key] === 'UPKEY') {
var prev = $selected[0] ? $selected.prev() : $('.b-gsearch__list-item:first');
if (prev.length !== 0) {
$selected.removeClass('b-gsearch__list-item_selected_yes');
prev.addClass('b-gsearch__list-item_selected_yes');
}
e.preventDefault();
} else if (keys[key] === 'DOWNKEY') {
var next = $selected[0] ? $selected.next() : $('.b-gsearch__list-item:first');
if (next.length !== 0) {
$selected.removeClass('b-gsearch__list-item_selected_yes');
next.addClass('b-gsearch__list-item_selected_yes');
}
e.preventDefault();
} else if (keys[key] === 'ENTERKEY') {
if ($selected[0]) {
clickListHandler.apply($selected[0], [e]);
} else {
searchHandler(searchString);
}
e.preventDefault();
} else {
clearTimeout(timeoutId);
timeoutId = setTimeout(function () {
searchHandler(searchString);
}, 250);
}
if (searchString !== '') {
showSearchReset();
} else {
hideSearchReset();
}
}
function showSearchReset() {
var $crossBtn = $('.b-gsearch__close');
if (!$crossBtn.hasClass('b-gsearch__close_is_show')) {
$crossBtn.addClass('b-gsearch__close_is_show');
}
}
function hideSearchReset() {
$('.b-gsearch__close').removeClass('b-gsearch__close_is_show');
}
function searchFailHandler(e, data) {
unsetLoader();
}
function searchRespHandler(e, data) {
var doc = data.doc || {},
html = '';
if (doc.elem) {
elem = doc.elem;
if (elem.length > 20) {
elem.splice(20, elem.length - 1);
}
html = tempFunc({ elem: elem });
} else {
html = tempFunc({ elem: emptyElem });
}
$mountNode().html(html);
$body().on('click.globalSearch', closeList);
unsetLoader();
}
var template = '<div class="b-gsearch__list-wrapper b-select-ac__list-scroll-wrapper">' + '<div class="b-select-ac__list-wrapper b-gsearch__list " style="display:block;">' + '<ul class="b-select-ac__list">' + '{{~it.elem :v :i}}' + '<li class="b-gsearch__list-item i-gsearch__list-item b-select-ac__list-item" data-index="{{=i}}">{{=window.filterXSS(v.description.$)}}</li>' + '{{~}}' + '</ul>' + '</div>' + '</div>';
var tempFunc = window.doT.template(template);
function searchHandler(searchString) {
if (searchString !== '') {
var param = {
func: 'globalindex',
elid: searchString,
out: 'json'
};
EventMgr.trigger('ajaxRequest', {
param: param,
trfunc: 'globalSearchResponse',
failfunc: 'globalSearchFail',
outtype: 'json',
queue: 'noqueue'
});
setLoader();
}
}
function clickListHandler() {
var index = this.getAttribute('data-index');
if (elem && elem[index] && !elem[index].__empty__) {
var param = App.u.parseParams(elem[index].filter.$);
param.func = elem[index].func.$;
param.filter = 'on';
//var param = App.u.parseParams('func=paymethod&filter=on&name=rub');
EventMgr.trigger('ajaxRequest', {
param: param,
invar: {
newtab: true, __src: 'menuAction'
},
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponse',
failfunc: 'failMenuAjaxResponse',
queue: 'noqueue' });
}
closeList();
}
function closeList() {
$mountNode().html('');
elem = [];
$body().off('click.globalSearch');
}
function setLoader() {
//clearTimeout(loaderTimeid);
loaderTimeid = setTimeout(function () {
$('.i-gsearch__input').addClass('b-gsearch__input_loading_yes');
}, 100);
}
function unsetLoader() {
clearTimeout(loaderTimeid);
$('.i-gsearch__input').removeClass('b-gsearch__input_loading_yes');
}
function resetHandler(e) {
e.preventDefault();
$('.i-gsearch__input').val('');
hideSearchReset();
}
function init() {
EventMgr.on($mainWrapper(), '.i-gsearch__input', 'keyup', keyUpHandler);
EventMgr.on($mainWrapper(), '.i-gsearch__input', 'focus', keyUpHandler);
EventMgr.on($mainWrapper(), '.i-gsearch__list-item', 'click', clickListHandler);
EventMgr.on($mainWrapper(), '.i-gsearch__close', 'click', resetHandler);
EventMgr.bind('globalSearchResponse', searchRespHandler);
EventMgr.bind('globalSearchFail', searchFailHandler);
}
function $mainWrapper() {
return App.u.selectorCache('#main-wrapper');
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.GlobalSearch.js.map
'use strict';
/**
* 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);
//# sourceMappingURL=App.PrefixSelect.js.map
'use strict';
/**
* Module resize form page by lagest
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.ResizeFormPage = function (window, $, EventMgr, App) {
'use strict';
function checkPageWidth(e, data) {
if (data && data.tabObj && data.tabObj.func === 'settings' && data.tabObj.type === 'form') {
var tabId = data.tabId,
$formPages = $('#form-wrapper-' + tabId + ' .b-form-page'),
$formPage,
$labels,
$labelsArr = [],
maxWidth = 0,
tmpWidth;
//go for pages
for (var i = 0, l = $formPages.length; i < l; i++) {
$fields = $($formPages[i]).find('.l-label__wrapper');
//go for 1st label
for (var j = 0, lf = $fields.length; j < lf; j++) {
tmpWidth = $fields[j].offsetWidth;
if (tmpWidth !== 0) {
if (tmpWidth > maxWidth) {
maxWidth = tmpWidth;
}
$labelsArr.push($fields[j]);
break;
}
}
}
if (maxWidth > 0) {
for (var i = 0, l = $labelsArr.length; i < l; i++) {
$labelsArr[i].style.minWidth = maxWidth + 'px';
}
}
}
}
function init() {
EventMgr.bind('appendForm', checkPageWidth);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.ResizeFormPage.js.map
'use strict';
/**
* Module provide confirm form
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
App.ConfirmForm = function (window, $, EventMgr, App) {
'use strict';
var confirmElems = {};
function checkWarningForConfirm(e, d) {
if (d && d.w) {
var warning,
index = 0,
confirmKey,
plid = d.d.plid,
listaction = d.d.func,
tabId = d.d.tabId,
hasConfirmWarning = false;
confirmElems[tabId] = {};
for (var key in d.w) {
warning = d.w[key];
if (warning.type === 'extraconfirm') {
confirmKey = warning.func + warning.value;
hasConfirmWarning = true;
if (!confirmElems[tabId][confirmKey]) {
confirmElems[tabId][confirmKey] = {
'elid': [],
//'func': 'groupedit',
'func': warning.func,
'plid': plid,
'listaction': listaction,
'action': warning.src_func
//'faction': warning.func
};
}
confirmElems[tabId][confirmKey].elid.push(String(warning.elid).replace(/,\s/g, ', , '));
}
}
if (hasConfirmWarning) {
openConfirmForm(confirmElems[tabId], tabId);
}
}
}
function openConfirmForm(elems, tabId) {
var hasNext = false;
for (var key in elems) {
var w = elems[key],
param = w;
param.elid = w.elid.join(', ');
EventMgr.trigger('ajaxRequest', {
param: param,
invar: { sourceTab: tabId, __innervars: { confirmKey: key, sourceTab: tabId, afterFunc: 'checkNextConfirmForm' } },
type: 'get',
outtype: 'json',
trfunc: 'ajaxResponseInspectorForm',
queue: '',
failfunc: 'failResponseInspectorForm' });
hasNext = true;
break;
}
if (!hasNext) {
if (confirmElems[tabId]) {
delete confirmElems[tabId];
}
EventMgr.trigger('reloadTab', { tabId: tabId });
}
}
function checkNextConfirmForm(e, d) {
if (d && d.d && d.d.confirmKey && d.d.sourceTab) {
if (confirmElems[d.d.sourceTab] && confirmElems[d.d.sourceTab][d.d.confirmKey]) {
delete confirmElems[d.d.sourceTab][d.d.confirmKey];
}
}
openConfirmForm(confirmElems[d.d.sourceTab], d.d.sourceTab);
}
function checkForCloseSourceTab(e, d) {
if (d && d.tabId) {
if (confirmElems[d.tabId]) {
delete confirmElems[d.tabId];
EventMgr.trigger('closeModalForm');
}
}
}
function init() {
EventMgr.bind('checkWarningForConfirm', checkWarningForConfirm);
EventMgr.bind('checkNextConfirmForm', checkNextConfirmForm);
EventMgr.bind('closeTabEvent', checkForCloseSourceTab);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App);
//# sourceMappingURL=App.ConfirmForm.js.map
'use strict';
/**
* FieldHeight module
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @param {object} ScrollHandler Scrollbar library
*/
App.FieldHeight = function (window, $, EventMgr, App, ScrollHandler) {
'use strict';
function init() {
EventMgr.bind('appendForm', checkFieldForClass);
}
function checkFieldForClass(e, data) {
var tabId = data.tabId;
setTimeout(function () {
$('#form-wrapper-' + tabId).find('.i-control__fullwidth').each(function () {
var availableHeight = $('#form-scroll-' + tabId).height(),
hasButtons = $('#' + tabId + '-buttons').length;
setHeight(this, availableHeight, hasButtons);
});
});
}
function setHeight(elem, height, hasButtons) {
//buttons height(52) + margin bottom(20) + padding row (5) + tbody(2) + td padding (2) + resizer (5) + control border (2)
var MAGICNUMBER = 37,
BUTTONHEIGHT = 52,
height = height - MAGICNUMBER;
if (hasButtons) {
height -= BUTTONHEIGHT;
}
if (elem) {
elem.setAttribute('height', height + 'px');
}
}
var api = {
init: init
};
return api;
}(window, $, EventMgr, App, ScrollHandler);
//# sourceMappingURL=App.FieldHeight.js.map
'use strict';
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
App.Jscript = function (window, $, EventMgr) {
'use strict';
var init = function init() {
EventMgr.bind('appendForm,appendList,appendReport', checkJscript);
EventMgr.on('#wr-content', 'input.i-onchange-event, textarea.i-onchange-event', 'change', changeEventHandler);
},
checkJscript = function checkJscript(e, d) {
if (d && d.srcData && d.srcData.jscript && d.srcData.jscript.length) {
var jscript = d.srcData.jscript;
for (var i = 0, l = jscript.length; i < l; i++) {
eval(jscript[i]);
}
}
},
changeEventHandler = function changeEventHandler(e) {
var name = this.getAttribute('name');
if (window[name + '_event'] && _typeof(window[name + '_event'])) {
window[name + '_event'].apply(this, [e]);
}
};
return {
init: init
};
}(window, $, EventMgr);
//# sourceMappingURL=App.Jscript.js.map
'use strict';
/**
* Notify module
*
* provide notification block on the top page
*
*/
App.Notify = function (window, $, EventMgr) {
'use strict';
var pageInfo = window.pageInfo,
timeoutId;
var template = '<div class="b-notif">' + '{{~it.items :value:index}}' + '<div class="b-notif__elem hint {{?value.type !== "bannerlist"}} b-menu-item newtab i-menu-link {{??}} i-bannerlist-open{{?}}" data-url="?func={{=value.action}}" data-hint="{{=value.hint}}">' + '<div class="b-notif__img s-icon s16x16 props {{=value.img}}"></div>' + '{{ var nums = String(value.value).split(""); }}' + '<div class="b-notif__text">' + '{{~nums :v:i}}' + '<span class="b-number b-number_value_{{=v}}"></span>' + '{{~}}' + '</div>' + '</div>' + '{{~}}' + '</div>';
var templBanner = '<div class="b-notify-banner b-notify-banner_status_{{=it.status}} {{?it.isNew}} b-notify-banner_is_new {{?}}" data-elid="{{=it.elid}}" id="{{=it.id}}"><div class="b-notify-banner__close i-notify-banner__close b-tab-close"></div>{{=it.msg}}</div>';
var templCloseAll = '<div class="b-notify-banner__close-all {{?it.hasNew}}b-notify-banner_is_new{{?}}" data-elid="{{=it.elids}}"><div class="b-notify-banner__close-all-inner i-notify-banner__close-all">' + pageInfo.messages.closeall + '<div class="b-notify-banner__close b-tab-close"></div></div></div>';
var tempFunc = window.doT.template(template);
var templBannerFunc = window.doT.template(templBanner);
var templCloseAll = window.doT.template(templCloseAll);
function notificationGet() {
var url = pageInfo.url,
param = { func: 'notify' };
EventMgr.trigger('ajaxRequest', {
url: url,
param: param,
type: 'get',
outtype: 'json',
ignore503: true,
failFunc: notifyFail,
trfunc: 'notificationResponse',
queue: 'notification' });
}
function notifyBannerDeleteRequest(id) {
var url = pageInfo.url,
param = { func: 'notificationbar.delete', elid: id };
EventMgr.trigger('ajaxRequest', {
url: url,
param: param,
type: 'get',
outtype: 'json',
ignore503: true,
trfunc: 'notifyBannerDeleteResponse',
queue: 'notification'
});
}
function notifyBannnerDeleteAllRequest() {
var url = pageInfo.url,
param = { func: 'notificationbar.deleteall' };
EventMgr.trigger('ajaxRequest', {
url: url,
param: param,
type: 'get',
outtype: 'json',
ignore503: true,
trfunc: 'notifyBannerDeleteResponse',
queue: 'notification'
});
}
function notifyBannerDeleteResponse(resp) {
notificationGet();
}
function notifyFail(e, dataSource) {
var dataSource = dataSource;
setTimeout(function () {
EventMgr.trigger('ajaxRequest', dataSource);
}, 5000);
}
function notificationRender(notifElems) {
var html = tempFunc(notifElems);
var elem = window.document.getElementById('notify');
elem.innerHTML = html;
if (elem.style.display === 'none') {
$(elem).slideDown(1000);
}
}
function notificationHide() {
var elem = window.document.getElementById('notify');
$(elem).slideUp(1000);
}
function notifyBannerRender(notifElems) {
var html = '',
htmlList = '',
items = notifElems.items,
hasNew = false,
elids;
if (items && items.length) {
for (var i = 0, l = items.length; i < l; i++) {
if (items[i].type === 'bannerlist' && items[i].bitems && items[i].bitems.length) {
var bannerlist = items[i].bitems;
for (var j = 0, ll = bannerlist.length; j < ll; j++) {
if (!elids) {
elids = bannerlist[j].id;
} else {
elids += ',' + bannerlist[j].id;
}
if (bannerlist[j].isNew) {
hasNew = true;
}
htmlList += templBannerFunc({
id: '__' + bannerlist[j].id,
elid: bannerlist[j].id,
isNew: bannerlist[j].isNew,
status: bannerlist[j].status,
msg: bannerlist[j].msg });
}
}
}
setTimeout(function () {
removeNotifyBanner(bannerlist);
}, 7000);
if (htmlList) {
htmlList = templCloseAll({ elids: elids, hasNew: hasNew }) + htmlList;
}
addNotifyBannerList(htmlList);
setTimeout(function () {
setPositionToList();
}, 50);
}
}
function setPositionToList() {
var $notifyList = $(bannerOpenSel),
offsetLeft = $notifyList[0] ? $notifyList[0].offsetLeft : 0,
$bannerList = $('#notify-banner-list');
$bannerList.css('left', offsetLeft + 'px');
}
function removeNotifyBanner(items) {
items = items || [];
for (var i = 0, l = items.length; i < l; i++) {
var $notifyBanner = $('#__' + items[i].id);
if ($notifyBanner.length && $notifyBanner.hasClass('b-notify-banner_is_new')) {
$notifyBanner.slideUp(function () {
$(this).removeClass('b-notify-banner_is_new').css('display', '');
});
}
}
$('.b-notify-banner__close-all').removeClass('b-notify-banner_is_new');
}
function closeNotifyBanner(e) {
e.preventDefault();
var $parent = $(this.parentNode),
id = $parent.attr('id'),
elid = $parent.attr('data-elid');
//@todo make banner as closed
//@todo remove banner from bannerlist
if (id) {
notifyBannerDeleteRequest(elid);
$parent.fadeOut('fast', function () {
$(this).remove();
});
//remove from banner list
$('#__' + id).remove();
//check for noone banner
checkAndRemoveCloseAllBtn();
//close all banners
} else {
notifyBannnerDeleteAllRequest();
$('.b-notify-banner').fadeOut('fast', function () {
$parent.remove();
$('.b-notify-banner').remove();
});
}
}
function closeNotifyFromListBanner(e) {
e.preventDefault();
var $parent = $(this.parentNode),
id = $parent.attr('id'),
elid = $parent.attr('data-elid');
id = String(id).slice(0, 2);
notifyBannerDeleteRequest(elid);
//@todo make banner as closed
//@todo remove banner from bannerlist
$parent.fadeOut('fast', function () {
$(this).remove();
});
//remove from banner list
$('#' + id).remove();
checkAndRemoveCloseAllBtn();
}
function checkAndRemoveCloseAllBtn() {
if ($('.b-notify-banner').length === 0) {
$('.b-notify-banner__close-all').remove();
} else if ($('.b-notify-banner__list_is_open').length === 0 && $('.b-notify-banner_is_new').length === 1) {
$('.b-notify-banner_is_new').removeClass('b-notify-banner_is_new');
}
}
function addNotifyBanner(html) {
var $targetElem = $('#notify-banner-wrapper'),
$html = $(html);
if ($targetElem) {
$html.hide();
$html.appendTo($targetElem).slideDown('slow');
}
}
function addNotifyBannerList(html) {
var $targetElem = $('#notify-banner-list');
if ($targetElem) {
$targetElem.html(html);
}
}
function bannerListToggle() {
var $bannerList = $('#notify-banner-list'),
offsetLeft = this.offsetLeft;
if ($bannerList.hasClass('b-notify-banner__list_is_open')) {
$bannerList.removeClass('b-notify-banner__list_is_open');
} else {
$('.b-notify-banner_is_new').removeClass('b-notify-banner_is_new');
$bannerList.addClass('b-notify-banner__list_is_open');
$bannerList.css('left', offsetLeft + 'px');
}
}
//change title
function notifyTitle(data) {
if (data && data.title) {
window.document.title = data.title;
} else {
window.document.title = pageInfo.title;
}
}
function notifySound(data) {
if (data && data.sound) {
var audio = window.document.getElementById('audio-beep');
if (!audio) {
audio = window.document.createElement('audio');
audio.style.display = 'none';
audio.setAttribute('id', 'audio-beep');
document.body.appendChild(audio);
}
audio.setAttribute('src', data.sound);
audio.play();
}
}
function notifyBalance(data) {
if (data && data.balance) {
var balance_box = $('#balance-show-box');
if (balance_box) {
balance_box.text(data.balance);
}
}
}
function notificationCheck(e, data) {
if (!data.items) {
return;
}
if (data.items.length > 0) {
notificationRender(data);
notifyBannerRender(data);
notifyTitle(data);
notifySound(data);
notifyBalance(data);
} else {
notificationHide();
if (data && data.balance) {
notifyBalance(data);
}
}
if (data.timeout) {
clearTimeout(timeoutId);
timeoutId = setTimeout(function () {
notificationGet();
}, parseInt(data.timeout * 1000, 10));
}
}
function notificationLoad() {
notificationGet();
}
function checkForNotify(e, data) {
if (pageInfo.notify && data.notify && pageInfo.notify !== data.notify) {
pageInfo.notify = data.notify;
notificationGet();
}
}
var closeBtnSel = '.i-notify-banner__close',
bannerOpenSel = '.i-bannerlist-open',
closeBtnAllSel = '.i-notify-banner__close-all';
function init() {
EventMgr.bind('loadPage', notificationLoad);
EventMgr.bind('notificationResponse', notificationCheck);
EventMgr.bind('forceCheckNotify', notificationGet);
EventMgr.bind('ajaxResponse,ajaxFormResponse', checkForNotify);
EventMgr.bind('notifyBannerDeleteResponse', notifyBannerDeleteResponse);
EventMgr.on('#notify-banner-wrapper', closeBtnSel, 'click', closeNotifyBanner);
EventMgr.on('#notify-banner-list', closeBtnSel, 'click', closeNotifyFromListBanner);
EventMgr.on('#notify', bannerOpenSel, 'click', bannerListToggle);
EventMgr.on('#notify-banner-list', closeBtnAllSel, 'click', closeNotifyBanner);
}
var api = {
init: init
};
return api;
}(window, $, EventMgr);
//# sourceMappingURL=App.Notify.js.map
//module loaders
App.mgr = function () {
'use strict';
var modules = [
App.Common.init
,App.Dom.init
,App.Menu.init
,App.UpSize.init
,App.ScrollController.init
,App.AceEditor.init
,App.ActionHandler.init
,App.ActionHandlerList.init
,App.ActionHandlerDashboard.init
,App.AjaxHelper.init
,App.Alert.init
,App.FormUtils.init
,App.FormDependFields.init
,App.Forms.init
,App.MultiSelect.init
,App.Select.init
,App.Bands.init
,App.ChangeBrandColors.init
,App.Cookie.init
,App.DashboardDragAndDrop.init
,App.Deview.init
,App.EditInList.init
,App.FilterList.init
,App.GoogleCharts.init
,App.Captcha.init
,App.Help.init
,App.Hint.init
,App.HorizontScroll.init
,App.HotKeys.init
,App.KeepAlive.init
,App.List.init
,App.ListSorting.init
,App.LiveListFilter.init
,App.LoadScripts.init
,App.LocalStorage.init
,App.MultiLoadTabs.init
,App.ProgressBar.init
,App.SendFormWithFiles.init
,App.Slider.init
,App.SelectAutoComplete.init
,App.TableRowResize.init
,App.Tabs.init
,App.Validators.init
,App.Wizards.init
,App.Calendar.init
,App.ValidChecker.init
,App.Toolbar.init
,App.Map.init
,App.Builder.init
,App.CheckRestart.init
,App.TinyMCE.init
,App.FormWatcher.init
,App.ConfirmBox.init
,App.HorizScrollControl.init
,App.DashboardList.init
,App.Desktop.init
,App.MessageTempl.init
,App.FontSettings.init
,App.ContentMistake.init
,App.CopyToBuffer.init
,App.TestCases.init
,App.TabDrag.init
,App.UsefulLinks.init
,App.InputMask.init
,App.FormListFilter.init
,App.LightBoxProvider.init
,App.FormFixedField.init
,App.GroupEdit.init
,App.GlobalSearch.init
,App.PrefixSelect.init
,App.ResizeFormPage.init
,App.ConfirmForm.init
,App.FieldHeight.init
,App.Jscript.init
,App.Notify.init
],
len = modules.length,
i, data = 'data';
for (i = 0; i < len; i++) {
if (typeof modules[i] === 'function') {
modules[i]();
} else {
console.log('undefined init function of module number: ', i);
}
}
EventMgr.trigger('loadPage', data);
};
/**
* ErrorReport module
* @param {object} window global object
* @param {function} $ jQuery library
* @param {object} EventMgr EventMgr library
* @param {object} App Application
* @return {object} api
*/
/*global App:true*/
/*global EventMgr:true*/
/*global $:true*/
App.ErrorReport = function(window, $, EventMgr, App) {
'use strict';
function errorReport(errorMsg, url, lineNumber, colNumber, error) {
var param = {};
param.error_url = url + '______' + window.location.href;
param.error_message = errorMsg;
param.stack_trace = lineNumber;
param.error = error;
param.col_number = colNumber;
param.user_level = pageInfo.userLevel;
param.product = pageInfo._product;
param.is_branding = pageInfo.isBranding;
param.theme = 'orion';
param.module = $('.tab-content_st_active').attr('data-func');
param.version = pageInfo.version;
EventMgr.trigger('ajaxRequest', {
url: 'https://themereport.ispsystem.net:3001/api/errorreport/',
param: param,
type: 'jsonp'
});
}
window.onerror = errorReport;
} (window, $, EventMgr, App);
//Constructor for tabs
(function(window, $, templates) {
'use strict';
function TabObj(id, status, type, selfUrl) {
this.id = id;
this.cid = 'cont-' + this.id;
//this.title = title;
this.status = status || 0;
this.type = type;
this.selfUrl = selfUrl;
this.body = '';
this.header = '';
this.param = '';
this.sIndex = String(id).replace('tab', '') - 0;
}
TabObj.fn = TabObj.prototype;
TabObj.fn.deactive = function() {
$('#' + this.id).removeClass('active');
$('#switch-' + this.id).removeClass('active');
//$('#s-' + this.id).removeClass('active');
if (this.hType === 'child') {
$('#' + this.gParent).removeClass('active');
$('#switch-' + this.gParent).removeClass('active');
}
$('#' + this.cid).removeClass('tab-content_st_active').addClass('hidden');
this.status = 0;
};
TabObj.fn.activate = function() {
$('#' + this.id).addClass('active');
$('#switch-' + this.id).addClass('active');
//$('#s-' + this.id).addClass('active');
if (this.hType === 'child') {
$('#' + this.gParent).addClass('active');
}
$('#' + this.cid).addClass('tab-content_st_active').removeClass('hidden');
this.status = 1;
};
//render HTML for tabHead and tabBody
TabObj.fn.render = function() {
switch (this.type) {
case 'empty':
this.htmlBody = templates.tabContEmpty(this.body);
if (this.hType === 'parent') {
this.htmlHeader = templates.tabLi(this.header);
} else {
this.htmlHeader = templates.tabChld(this.header);
}
break;
case 'list':
this.htmlBody = templates.tabCont(this.body);
if (this.hType === 'parent') {
this.htmlHeader = templates.tabLi(this.header);
} else {
this.htmlHeader = templates.tabChld(this.header);
}
break;
case 'form':
this.htmlBody = templates.tabContForm(this.body); //going replace
if (this.hType === 'parent') {
this.htmlHeader = templates.tabLi(this.header);
} else {
this.htmlHeader = templates.tabChld(this.header);
}
break;
case 'report':
this.htmlBody = templates.tabContForm(this.body); //going replace
if (this.hType === 'parent') {
this.htmlHeader = templates.tabLi(this.header);
} else {
this.htmlHeader = templates.tabChld(this.header);
}
break;
case 'dashboard':
this.htmlBody = templates.tabContDashBoard(this.body);
break;
case 'map':
case 'rack':
this.htmlBody = templates.tabContMap(this.body); //going replace
if (this.hType === 'parent') {
this.htmlHeader = templates.tabLi(this.header);
} else {
this.htmlHeader = templates.tabChld(this.header);
}
break;
}
return this;
};
//append tabBody and tabHead
TabObj.fn.append = function(tabId) {
if (this.htmlHeader && this.htmlBody) {
if (this.hType === 'parent') {
tabId = tabId || 'add-tab';
$('#nav-tabs #' + tabId).before(this.htmlHeader);
} else {
$('#' + this.gParent).append(this.htmlHeader);
}
$('#wr-content').append(this.htmlBody);
} else if (this.htmlBody) {
$('#wr-content').append(this.htmlBody);
}
return this;
};
//replace tabBody
TabObj.fn.update = function() {
var body = document.getElementById(this.cid);
if (body !== null) {
body.parentNode.removeChild(body);
}
$('#wr-content').append(this.htmlBody);
return this;
};
//replace only table
TabObj.fn.softUpdate = function() {
var table = document.getElementById('ltwr-' + this.id),
newTable = '';
if (table !== null) {
newTable = '<div class="content" id="ltwr-' + this.id +
'" data-tabid=' + this.id + '>' + this.body.table + '</div>';
$(table).replaceWith(newTable);
}
return this;
};
//replace tabBody and tabHeader
TabObj.fn.replace = function() {
var tabHeader = document.getElementById(this.id),
tabBody = document.getElementById(this.cid);
if (tabBody !== null) {
tabBody.parentNode.removeChild(tabBody);
}
$('#wr-content').append(this.htmlBody);
if (tabHeader !== null) {
$(tabHeader).replaceWith(this.htmlHeader);
}
return this;
};
//remove temprorary properties
TabObj.fn.clean = function() {
this.htmlBody = null;
this.htmlHeader = null;
this.header = null;
this.body = null;
};
//close tab
TabObj.fn.close = function() {
if (this.chart !== undefined) {
var myArray = this.chart,
i = this.chart.length;
while (i--) {
if (typeof myArray[i].clearChart === 'function') {
myArray[i].clearChart();
myArray[i] = null;
}
}
}
var header = document.getElementById(this.id),
body = document.getElementById(this.cid);
if (header !== null) {
header.parentNode.removeChild(header);
}
if (body !== null) {
body.parentNode.removeChild(body);
}
header = null;
body = null;
};
window.TabObj = TabObj;
//Constructor for menuGroup
function MenuGroup(level, id, status, self) {
this.level = level;
this.id = id;
this.status = (status !== null) ? status : '0';
this.self = self;
}
MenuGroup.fn = MenuGroup.prototype;
//methods
MenuGroup.fn.statusUp = function(status) {
this.status = status;
};
MenuGroup.fn.activate = function() {
this.status = '1';
this.self.removeClass('collapsed');
};
MenuGroup.fn.disactivate = function() {
this.status = '0';
this.self.addClass('collapsed');
};
MenuGroup.fn.toggle = function() {
if (this.status === '1') {
this.status = '0';
} else {
this.status = '1';
}
this.self.toggleClass('collapsed');
};
window.MenuGroup = MenuGroup;
//utilits
//setCookie
function setCookie(cName, value, exdays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + exdays);
var cValue = encodeURIComponent(value) + ((exdays === null) ? '' :
'; expires=' + exdate.toUTCString());
document.cookie = cName + '=' + cValue;
}
window.setCookie = setCookie;
//getCookie
function getCookie(cName) {
var i, x, y, ARRcookies = document.cookie.split(';');
for (i = 0; i < ARRcookies.length; i++) {
x = ARRcookies[i].substr(0, ARRcookies[i].indexOf('='));
y = ARRcookies[i].substr(ARRcookies[i].indexOf('=') + 1);
x = x.replace(/^\s+|\s+$/g, '');
if (x === cName) {
return decodeURIComponent(y);
}
}
return '';
}
window.getCookie = getCookie;
//jquery !plugins
$.fn.switchClass = function(added, removed) {
return this.removeClass(removed).addClass(added);
};
$.fn.serializeObject = function() {
var formArray = this.serializeArray(),
formObject = {},
length = formArray.length,
i;
for (i = 0; i < length; i++) {
formObject[formArray[i].name] = formArray[i].value;
}
return formObject;
};
//get flags from attr data-flag="default|reload"
$.fn.getFlags = function() {
var flags = {},
flagString = this.attr('data-flags'),
flagStringArr;
if (flagString) {
flagStringArr = flagString.split('|');
for (var i = 0, l = flagStringArr.length; i < l; i++) {
flags[$.trim(flagStringArr[i])] = true;
}
}
return flags;
};
//get vars from attribute data-vars="t:1|r:25"
$.fn.getVars = function() {
var vars = {},
varsString = this.attr('data-vars'),
varsStringAttr,
varsStringValue;
if (varsString) {
varsStringAttr = String(varsString).split('|');
for (var i = 0, l = varsStringAttr.length; i < l; i++) {
varsStringValue = varsStringAttr[i].split(':');
if (varsStringValue && varsStringValue[0] && varsStringValue[1]) {
vars[varsStringValue[0]] = varsStringValue[1];
}
}
}
return vars;
};
//@todo remove from all
function blockEvent(e) {
e = e || window.event;
if (e.stopPropagation) {
e.stopPropagation();
}
else {
e.cancelBubble = true;
}
if (e.preventDefault) {
e.preventDefault();
}
else {
e.returnValue = false;
}
}
window.blockEvent = blockEvent;
//from here https://github.com/janl/mustache.js/blob/master/mustache.js#L47
var entityMap = {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": ''',
'/': '/',
'&': '&',
'<': '<',
'>': '>' ,
'"': '"',
''': "'" ,
'/': '/'
};
function scrollToTopLeft() {
if (!window.pageInfo.mobile && !window.pageInfo.store && !window.pageInfo.extform) {
window.scrollTo(0, 0);
}
}
window.scrollToTopLeft = scrollToTopLeft;
function htmlEscape(string) {
return String(string).replace(/[&<>"'\/]/g, function(s) {
return entityMap[s];
});
}
window.htmlEscape = htmlEscape;
function htmlDecode(value) {
return $('<div/>').html(value).text();
}
window.htmlDecode = htmlDecode;
function htmlEncode(s) {
s = String(s).replace(/</g, '<').replace(/>/g, '>');
return s;
}
window.htmlEncode = htmlEncode;
function blockSelection() {
if (window.getSelection) { window.getSelection().removeAllRanges(); }
//else if (document.selection && document.selection.clear) {
// document.selection.clear();
// }
else if (document.selection && document.selection.empty) {
document.selection.empty();
}
}
window.blockSelection = blockSelection;
function hash(input) {
var hashI = 0, charI, i;
if (input.length === 0) {
return hashI;
}
for (i = 0; i < input.length; i++) {
charI = input.charCodeAt(i);
hashI = ((hashI << 5) - hashI) + charI;
hashI = hashI & hashI; // Convert to 32bit integer
}
return 'id' + hashI;
}
window.hash = hash;
var split;
// Avoid running twice; that would break the `nativeSplit` reference
split = window.split || function(undef) {
var nativeSplit = String.prototype.split,
// NPCG: nonparticipating capturing group
compliantExecNpcg = /()??/.exec('')[1] === undef,
self;
self = function(str, separator, limit) {
// If `separator` is not a regex, use `nativeSplit`
if (Object.prototype.toString.call(separator) !== '[object RegExp]') {
return nativeSplit.call(str, separator, limit);
}
var output = [],
flags = (separator.ignoreCase ? 'i' : '') +
(separator.multiline ? 'm' : '') +
(separator.extended ? 'x' : '') + // Proposed for ES6
(separator.sticky ? 'y' : ''), // Firefox 3+
lastLastIndex = 0,
// Make `global` and avoid `lastIndex` issues by working with a copy
separator2, match, lastIndex, lastLength;
separator = new RegExp(separator.source, flags + 'g');
str += ''; // Type-convert
if (!compliantExecNpcg) {
// Doesn't need flags gy, but they don't hurt
separator2 = new RegExp('^' + separator.source + '$(?!\\s)', flags);
}
limit = limit === undef ?
-1 >>> 0 : // Math.pow(2, 32) - 1
limit >>> 0; // ToUint32(limit)
/* jslint boss:true*/
while (match = separator.exec(str)) {
// `separator.lastIndex` is not reliable cross-browser
lastIndex = match.index + match[0].length;
if (lastIndex > lastLastIndex) {
output.push(str.slice(lastLastIndex, match.index));
// Fix browsers whose `exec` methods don't consistently
// return `undefined` for
// nonparticipating capturing groups
/* jslint loopfunc:true*/
if (!compliantExecNpcg && match.length > 1) {
match[0].replace(separator2, function() {
for (var i = 1; i < arguments.length - 2; i++) {
if (arguments[i] === undef) {
match[i] = undef;
}
}
});
}
if (match.length > 1 && match.index < str.length) {
Array.prototype.push.apply(output, match.slice(1));
}
lastLength = match[0].length;
lastLastIndex = lastIndex;
if (output.length >= limit) {
break;
}
}
if (separator.lastIndex === match.index) {
separator.lastIndex++; // Avoid an infinite loop
}
}
if (lastLastIndex === str.length) {
if (lastLength || !separator.test('')) {
output.push('');
}
} else {
output.push(str.slice(lastLastIndex));
}
return output.length > limit ? output.slice(0, limit) : output;
};
// For convenience
String.prototype.split = function(separator, limit) {
return self(this, separator, limit);
};
return self;
}();
}(window, $, templates));