Your IP : 3.144.157.48
'use strict';
/**
* jQuery.ajaxq
* queue ajax requests
* @param {string} queue Name of queue
* @param {object} options
*/
jQuery.ajaxq = function (queue, options) {
'use strict';
// Initialize storage for request queues if it's not initialized yet
if (typeof document.ajaxq === 'undefined') {
document.ajaxq = { q: {}, r: null };
}
// Initialize current queue if it's not initialized yet
if (typeof document.ajaxq.q[queue] === 'undefined') {
document.ajaxq.q[queue] = [];
}
// Request settings are given, enqueue the new request
if (typeof options !== 'undefined') {
// Copy the original options, because options.complete is going to be overridden
var optionsCopy = {};
/* jslint forin:true */
for (var o in options) {
optionsCopy[o] = options[o];
}
options = optionsCopy;
// Override the original callback
var originalCompleteCallback = options.complete;
options.complete = function (request, status) {
// Dequeue the current request
document.ajaxq.q[queue].shift();
document.ajaxq.r = null;
// Run the original callback
if (originalCompleteCallback) {
originalCompleteCallback(request, status);
}
// Run the next request from the queue
if (document.ajaxq.q[queue].length > 0) {
document.ajaxq.r = jQuery.ajax(document.ajaxq.q[queue][0]);
}
if (document.ajaxq.q[queue].length === 0) {
delete document.ajaxq.q[queue];
}
};
if (queue !== 'multiload') {
var len = document.ajaxq.q[queue].length;
if (len <= 1) {
document.ajaxq.q[queue].push(options);
} else {
document.ajaxq.q[queue][1] = options;
}
//ставим в очередь
} else {
// Enqueue the request
document.ajaxq.q[queue].push(options);
}
// Also, if no request is currently running, start it
if (document.ajaxq.q[queue].length === 1) {
document.ajaxq.r = jQuery.ajax(options);
}
// No request settings are given, stop current request and clear the queue
} else {
if (document.ajaxq.r) {
document.ajaxq.r.abort();
document.ajaxq.r = null;
}
delete document.ajaxq.q[queue];
}
};
//# sourceMappingURL=jquery.ajaxq.js.map
'use strict';
var templates = function () {
'use strict';
// List Template
var messages = '{{~it.message :value :index }}' + '<div class="b-message i-message">' + '<div class="b-message__inner b-message__inner_status_{{=value.status}}" id="{{=value.id}}">' + '<div class="b-message__text {{?value.warning}}b-message__text_warning{{?}}">{{=value.text}}</div>' + '{{?value.ref}}' + '<div class="l-message__link">' + '<a href="{{=value.ref}}" data-href="{{=value.ref}}" target="_blank" class="i-message__more-link {{=value.classes}}">{{=value.refText}}</a>' + '</div>' + '{{?}}' + '<div class="l-message__link">' + '<a href="#" data-href="{{=value.dismissRef}}" class="i-message__dismiss-link" data-mn="dismiss">{{=value.dismiss}}</a>' + '</div>' + '</div>' + '<div class="b-message__triangle b-message__triangle_status_{{=value.status}}"></div>' + '</div>' + '{{~}}';
//Banner template
var banner = '<div class="b-message i-message">' + '<div class="b-message__inner b-message__inner_status_{{=it.message.status}}" id="{{=it.message.id}}">' + '<div class="b-message__text">{{=it.message.text}}</div>' + '{{?it.message.ref}}' + '<div class="l-message__link">' + '<a href="{{=it.message.ref}}" data-href="{{=it.message.ref}}" target="_blank" class="i-message__more-link {{=it.message.classes}}">{{=it.message.refText}}</a>' + '</div>' + '{{?}}' + '<div class="l-message__link">' + '<a href="#" data-href="{{=it.message.dismissRef}}" class="i-message__dismiss-link" data-mn="dismiss">{{=it.message.dismiss}}</a>' + '</div>' + '</div>' + '<div class="b-message__triangle b-message__triangle_status_{{=it.message.status}}"></div>' + '</div>';
var toolbar = '{{?it.btng && it.btng.length > 0}}' + '<div class="toolbar" {{=it.plidAttr}} {{=it.convertAttr}} id="toolbar-{{=it.id}}">' + '<div class="toolbar__btn-move-wr">' + '<div class="toolbar__btn-move toolbar__btn-move_dir_left"></div>' + '<div class="toolbar__btn-move toolbar__btn-move_dir_right"></div>' + '</div>' + '<div class="toolbar__inner">' +
//add toolbar icon
'{{?it.devMode}}' + '<div class="toolbutton-add"><a href="#" class="devel-link-add devel-link-add--toolbutton" data-tabid="{{=it.id}}"></a></div>' + '{{?}}' +
//foreach
'{{ var j, l = it.btng.length; for (j = 0; j < l; j++) { }}' + '{{ var i = 0, btn = it.btng[j].btn, lb = btn.length; }}' + '{{?btn[i] && btn[i].type}}' + '<div class="toolgrp ind{{=j}}" {{=lb}} data-name="{{=it.btng[j].name}}" data-id="{{=it.id}}-{{=it.btng[j].name}}" >' + '{{ if (btn[i] && btn[i].type) { }}' + '<div class="toolbar-button hint {{=btn[i].tClass}} i-tip-target_st_btn_{{=btn[i].type}}" id="tbw-{{=it.id}}-{{=btn[i].tname}}" ' + '{{ var hint = ""; if (btn[i].hint) { hint = "data-hint = \'" + App.u.escapeQuote(btn[i].hint) + "\'"; hint += "data-hint-mn=\'hint_" + btn[i].tname + "\'"; } }} {{=hint}}' + ' {{ var confirm = ""; if (btn[i].confirm) { confirm = "data-confirm = \'" + btn[i].confirm + "\'"; confirm += "data-confirm-d = \'" + btn[i].confirm_delimiter + "\'"; } }} {{=confirm}} {{=btn[i].attrs}}>' + '<span href="#main-wrapper" data-url="func={{=btn[i].func}}" ' + '{{?btn[i].cgi}} data-cgi="{{=btn[i].cgi}}" {{?}}' + ' {{=btn[i].progressbar}}' + ' {{=it.tabIdAttr}}' + ' data-name="{{=btn[i].tname}}" ' + ' rel="{{=it.id}}"' + ' class="img-link toolbar-button__item-img {{=btn[i].bClass}} " ' + '{{=btn[i].dataType}}' + ' id="{{=btn[i].id}}" data-itemid="{{=it.itemId}}">' + '<div class="s-icon s24x24 {{=btn[i].img}}" {{=btn[i].style}}></div>' + '<div id="{{=btn[i].progressId}}{{=it.itemId}}"></div>' + '</span>' + '<span href="#main-wrapper" data-url="func={{=btn[i].func}}" {{?btn[i].cgi}} data-cgi="{{=btn[i].cgi}}" {{?}} {{=btn[i].progressbar}} {{=it.tabIdAttr}} rel="{{=it.id}}" class="toolbar-button__item-text {{=btn[i].bClass}} btntext" {{=btn[i].dataType}} data-mn="short_{{=btn[i].tname}}" data-name="{{=btn[i].tname}}">{{=btn[i].name}}</span>' + '{{?it.devMode}}' + '<div class="toolbutton-settings">' + '<a href="#main-wrapper" class="devel-link-settings devel-link-settings--toolbutton" data-elid="{{=btn[i].tname}}" data-tabid="{{=it.id}}"></a>' + '<a href="#main-wrapper" class="devel-link-delete devel-link-delete--toolbutton" data-elid="{{=btn[i].tname}}" data-name="{{=btn[i].name}}" data-tabid="{{=it.id}}"></a>' + '</div>' + '{{?}}' + '<div class="toolgrp-control" id="tc-{{=it.id}}-{{=it.btng[j].name}}"><div class="triangledown"></div></div>' + '</div>' + '{{ } }}' +
//toolgrp-bag
'<div class="toolgrp-bag" id="tb-{{=it.id}}-{{=it.btng[j].name}}">' + '{{ for (i = 1; i < lb; i++) { }}' + '{{ if (btn[i].type) { }}' + '<div class="toolbar-button hint {{=btn[i].tClass}} ind{{=i}}" id="tbw-{{=it.id}}-{{=btn[i].tname}}" ' + '{{ var hint = ""; if (btn[i].hint) { hint = "data-hint = \'" + App.u.escapeQuote(btn[i].hint) + "\'"; hint += "data-hint-mn=\'hint_" + btn[i].tname + "\'";} }} {{=hint}}' + ' {{ var confirm = ""; if (btn[i].confirm) { confirm = "data-confirm = \'" + btn[i].confirm + "\'"; confirm += "data-confirm-d = \'" + btn[i].confirm_delimiter + "\'"; } }} {{=confirm}} {{=btn[i].attrs}}>' + '<span href="#main-wrapper"' + ' data-url="func={{=btn[i].func}}"' + ' {{?btn[i].cgi}} data-cgi="{{=btn[i].cgi}}" {{?}}' + ' {{=btn[i].progressbar}}' + ' {{=it.tabIdAttr}}' + ' data-name="{{=btn[i].tname}}"' + ' rel="{{=it.id}}" ' + ' class="img-link toolbar-button__item-img {{=btn[i].bClass}} "' + ' {{=btn[i].dataType}}' + ' id="{{=btn[i].id}}" data-itemid="{{=it.itemId}}">' + '<div class="s-icon s24x24 {{=btn[i].img}}" {{=btn[i].style}}></div>' + '<div id="{{=btn[i].progressId}}{{=it.itemId}}"></div>' + '</span>' + '<span href="#main-wrapper"' + ' data-url="func={{=btn[i].func}}"' + ' {{?btn[i].cgi}} data-cgi="{{=btn[i].cgi}}" {{?}}' + ' {{=btn[i].progressbar}}' + ' {{=it.tabIdAttr}}' + ' data-name="{{=btn[i].tname}}" ' + ' rel="{{=it.id}}"' + ' class="{{=btn[i].bClass}} btntext"' + ' {{=btn[i].dataType}} data-mn="short_{{=btn[i].tname}}">{{=btn[i].name}}</span>' +
//devmode
'{{?it.devMode}}' + '<div class="toolbutton-settings">' + '<a href="#" class="devel-link-settings devel-link-settings--toolbutton" data-elid="{{=btn[i].tname}}" data-tabid="{{=it.id}}"></a>' + '<a href="#" class="devel-link-delete devel-link-delete--toolbutton" data-elid="{{=btn[i].tname}}" data-name="{{=btn[i].name}}" data-tabid="{{=it.id}}"></a>' + '</div>' + '{{?}}' +
//devmode end
'</div>' +
//if end
'{{ } }}' +
//for end
'{{ } }}' + '</div>' +
//toolgrp end
'</div>' + '{{?}}' + '{{ } }}' + '</div>' + '</div>' +
//toolbar end
'{{?}}';
var tabCont = ' ' + '<div id="cont-{{=it.id}}" class="tab-content {{=it.btnview}} {{=it.filter}} init" data-func={{=it.func}} ' + ' data-pnum="{{=it.pNum}}" data-pcnt="{{=it.pcnt}}" data-tabid="{{=it.id}}" ' + ' data-tab-type="list" data-itemid="{{=it.itemId}}">' + '<div id="{{=it.progressid}}"></div>' + '<div id="{{=it.id}}-progressbar-overlay" class="b-tab-overlay" data-tabid="{{=it.id}}"></div>' + '<div id="cont-{{=it.id}}-progressbar" class="b-progressbar"></div>' +
//default progressbar
'<div id="cont-{{=it.id}}-progressbar-default" class="b-progressbar">' + '<div id="{{=it.id}}-progressbar" class="b-progressbar__outer">' + '<div class="b-progressbar__inner">' + '<div class="b-progressbar__comment">{{=it.comment}}</div>' + '<div class="b-progressbar__loader-wr"><div class="b-progressbar__loader b-progressbar__loader_type_animate"></div></div>' + '</div>' + '</div>' + '</div>' +
//end default progressbar
//default progressbar end
'<div class="tab-content-wrapper list-content" id="tcw-{{=it.id}}">' +
//top bar
'<div class="topBar">' + '<div class="rightBar">' + '{{?it.devMode}}' + '<a href="{{=it.selfurl}}&out=devel" data-hint="{{=it.hDevel}}" target="_blank" class="hint">' + '<div class="s-icon s16x16 l-devel"></div>' + '</a>' + '{{?}}' + '<a href="#" class="reload hint" data-tabid="{{=it.id}}" data-hint="{{=it.hReload}}" data-hint-mn="hint_reloadlist"><img src="{{=it.theme}}img/blue-reload.png" width="16" height="16"/></a>' + '{{?it.inmenu}}' + '<a href="#" class="i-take-favorite hint {{?!it.favorite}}b-elem_style_gracescale{{?}}" data-hint-unfavorite="{{=it.hFavorite}}" data-hint-favorite="{{=it.hUnfavorite}}" data-state="{{?it.favorite}}favorite{{??}}unfavorite{{?}}">' + '<div class="s-icon s16x16 mbar-favorite"></div>' + '</a>' + '<div class="b-pin i-pin hint {{?!it.pin}}b-elem_style_gracescale{{?}}" data-state="{{?it.pin}}pin{{??}}unpin{{?}}" data-hint-pin="{{=it.hintPin}}" data-hint-unpin="{{=it.hintUnpin}}"></div>' + '{{?}}' + '<a href="{{=it.permaLink}}" data-clipboard-text="{{=it.permaLink}}" data-hint="{{=it.hCopy}}" target="_blank" data-hint-mn="hint_copylink" class="hint b-permalink" id="permalink-{{=it.id}}"><div class="p-permalink s16x16 s-icons"></div></a>' + '{{?it.autoupdate}}' + '<a href="#" data-hint="{{=it.hAutoupdate}}" data-tabid="{{=it.id}}" data-hint-mn="hint_autoupdate_stop" class="i-list-icon__stop hint"><div class="s-icon s16x16 p-stop"></div></a>' + '{{?}}' + '<a href="#" data-hint="{{=it.hSelectAll}}" data-tabid="{{=it.id}}" data-hint-mn="hint_selectall" class="select-all hint"><div class="s-icon s16x16 sb-selectall"></div></a>' + '<a href="{{=it.selfurl}}&out=csv" data-hint="{{=it.hExport}}" data-hint-mn="hint_export" target="_blank" class="exel hint"><div class="s-icon s16x16 p-excel"></div></a>' + '<a href="{{=it.selfurl}}&out=print" data-hint="{{=it.hPrint}}" data-hint-mn="hint_print" target="_blank" class="print hint"><div class="s-icon s16x16 p-print"></div></a>' + '<a href="?{{=it.tsettingsParam}}" data-hint-mn="msg_tsetting" data-url="{{=it.tsettingsParam}}" data-hint="{{=it.tsettings}}" {{=it.tabIdAttr}} rel="{{=it.id}}" class="tsetting hint">' + '<div class="s-icon s16x16 l-table"></div>' + '</a>' +
//'<a href="#" class="help hint" data-hint="{{=it.hHelp}}" data-help-type="default" data-help="{{=it.help}}"><div class="s-icon s16x16 sb-help"></div></a>' +
'<a href="#" class="b-usefulLinks__icon hint i-tip-target_st_help_links" data-hint="{{=it.hHelp}}"><div class="s-icon s16x16 sb-help"></div></a>' + '</div>' +
//top bar end
//left bar
'<div class="leftBar b-leftbar b-leftbar_for_list">' +
//title
'<div class="reload hint fleft s48x48 s-icon {{=it.tImg}} i-tip-target_st_title_reload" {{=it.tStyle}} data-tabid="{{=it.id}}" data-hint-mn="hint_reloadlist" data-hint="{{=it.hReload}}"></div>' + '<span>' + '<h2>' + '<span class="reload hint b-title i-tip-target_st_typo" data-fn="{{=it.func}}" data-mn="title" data-tabid="{{=it.id}}" data-hint-mn="hint_reloadlist" data-hint="{{=it.hReload}}">{{=it.tabTitle}}</span>' + '{{=it.breadcrumb}}' +
//devmode icons
'{{ if (it.devMode) { }}' + '<div class="list-settings">' + '<a href="#" class="devel-link-settings devel-link-settings--list" data-tabid="{{=it.id}}" data-elid="{{=it.func}}"></a>' + '<a href="#" class="devel-link-settings devel-link-settings--list" data-tabid="{{=it.id}}" data-elid="{{=it.func}}"></a>' + '</div>' + '{{ } }}' + '</h2>' + '</span>' + '<div class="clearBoth"></div>' + '</div>' +
//left bar end
//messages
messages +
//messages end
'<div class="toolbar-wrapper">' +
//livefilter
'<div class="tsearch">' + '<div class="dib search">' + '<input type="text" id="{{=it.id}}-search" data-tabid="{{=it.id}}" class="itsearch b-input" placeholder="Ctrl + Shift + F" value="{{=it.livefilter}}"/>' + '<div class="close_tsearch"><a href="javascript:void(0)" data-tabid="{{=it.id}}"><img src="{{=it.theme}}img/search_close.png"/></a></div>' + '</div>' + '{{?it.filter}}<div class="i-tip-target_st_filter filter-btn b-filter__toggle b-filter__toggle_is_disabled hint" data-hint-mn="hint_filter" data-hint="{{=it.fHelp}}"></div>{{?}}' + '</div>' +
//livefilter end
//toolbar
toolbar + '</div>' +
//toolbar end
//active filter
'{{?it.filter}}' + '<div class="b-filter__save-bar">' + '<div class="b-filter__btn-move b-filter__btn-move_dir_left"></div>' + '<div class="b-filter__btn-move b-filter__btn-move_dir_right"></div>' + '<div class="b-filter__save-bar-inner">' + '</div>' + '</div>' + '{{?}}' + '{{?it.afilter.status}}' + '<div class="filter-active i-filter-applied">' + '<div class="filter-btns">' + '<div class="b-button b-button__filter-reset b-button_st_disabled">{{=it.afilter.resetMsg}}</div>' + '<div class="b-button b-button__filter-change b-button_st_disabled" class="b-filter__change-btn">{{=it.afilter.editMsg}}</div>' + '</div>' + '<div class="filter-msg">' + '<span class="head-filter-msg">{{=it.afilter.fname || it.afilter.fmsg}}</span> {{=it.afilter.msg}}</div>' + '<div class="clearBoth"></div>' + '</div>' + '{{?}}' +
//active filter end
//filter form wrapper
'<div class="filter-wrapper" id="filter-{{=it.id}}"></div>' +
//diagram wrappper
'<div class="diagram-cont" id="diagram-{{=it.id}}"></div>' +
//page wrapper
'<div class="pager-wrapper">{{=it.pager}}</div>' + '</div>' +
//content table
'<div class="content" id="ltwr-{{=it.id}}" data-tabid={{=it.id}}>{{=it.table}}</div>' +
//content table end
'</div>';
var tabContMap = '<div id="cont-{{=it.id}}" class="tab-content" data-tabid="{{=it.id}}" data-tab-type="map" data-func={{=it.func}} data-itemid="{{=it.itemId}}">' + '<div id="{{=it.id}}-progressbar-overlay" class="b-tab-overlay" data-tabid="{{=it.id}}"></div>' + '<div id="cont-{{=it.id}}-progressbar" class="b-progressbar"></div>' +
//default progressbar
'<div id="cont-{{=it.id}}-progressbar-default" class="b-progressbar">' + '<div id="{{=it.id}}-progressbar" class="b-progressbar__outer">' + '<div class="b-progressbar__inner">' + '<div class="b-progressbar__comment">{{=it.comment}}</div>' + '<div class="b-progressbar__loader-wr">' + '<div class="b-progressbar__loader b-progressbar__loader_type_animate"></div>' + '</div>' + '</div>' + '</div>' + '</div>' + '<div class="tab-content-wrapper list-content" id="tcw-{{=it.id}}">' + '<div class="topBar">' + '<div class="rightBar">' + '{{?it.devMode}}' + '<a href="{{=it.selfurl}}&out=devel" data-hint="{{=it.hDevel}}" target="_blank" class="hint"><div class="s-icon s16x16 l-devel"></div></a>' + '{{?}}' + '<a href="#" class="reload hint" data-tabid="{{=it.id}}" data-hint="{{=it.hReload}}" data-hint-mn="hint_reload"><img src="{{=it.theme}}img/blue-reload.png" width="16" height="16" /></a>' + '{{?it.inmenu}}' + '<a href="#" class="i-take-favorite hint {{?!it.favorite}}b-elem_style_gracescale{{?}}" data-hint-unfavorite="{{=it.hFavorite}}" data-hint-favorite="{{=it.hUnfavorite}}" data-state="{{?it.favorite}}favorite{{??}}unfavorite{{?}}">' + '<div class="s-icon s16x16 mbar-favorite"></div>' + '</a>' + '<div class="b-pin i-pin hint {{?!it.pin}}b-elem_style_gracescale{{?}}" data-state="{{?it.pin}}pin{{??}}unpin{{?}}" data-hint-pin="{{=it.hintPin}}" data-hint-unpin="{{=it.hintUnpin}}"></div>' +
// '<a href="#" class="help hint" data-hint="{{=it.hHelp}}" data-help-type="{{=it.helpType}}" data-help="{{=it.help}}" data-help-func="{{=it.helpurl}}"><div class="s-icon s16x16 sb-help"></div></a>' +
'{{?}}' + '</div>' + '<div class="leftBar b-leftbar b-leftbar_for_map">' + '<div class="reload hint fleft s48x48 s-icon i-tip-target_st_title_reload {{=it.tImg}}" {{=it.tStyle}} data-tabid="{{=it.id}}" data-hint-mn="hint_reload" data-hint="{{=it.hReload}}"></div>' + '<span><h2><span class="reload hint b-title i-tip-target_st_typo " data-fn="{{=it.func}}" data-mn="title" data-hint-mn="hint_reload" data-tabid="{{=it.id}}" data-hint="{{=it.hReload}}">{{=it.tabTitle}}</span></h2></span>' + '<div class="clearBoth">' + '</div>' + '</div>' + messages +
//toolbar
toolbar +
//close topbar
'</div>' +
//end toolbar
'<div class="map" id="{{=it.id}}-map"></div>' + '</div>' + '</div>';
//List pager
var listPager = '<div class="slist">{{=it.slist}}</div>' + '<div class="pager_list pager-list_type_list">{{=it.pagerList}}</div>' + '<div class="page_cnt">' + '<span class="page_cnt_lb_began" data-mn="pagershow">{{=it.msgBegan}}</span>' + '<input type="text" value="{{=it.cnt}}" maxlength="4" class="cnt pager-list__input b-input b-input_for_pager" name="pcnt"/>' + '<span class="page_cnt_lb_end" data-mn="pagerline"> {{=it.msgEnd}}</span>' + '<div class="pager-list__input-submit b-button b-button_style_small">OK</div>' + '</div>';
//Empty tab Template
var tabContEmpty = '<div id="cont-{{=it.id}}" class="tab-content hidden" data-itemid="{{=it.itemId}}">' + '<div id="{{=it.id}}-progressbar-overlay" class="b-tab-overlay" data-tabid="{{=it.id}}"></div>' +
//default progressbar
'<div id="cont-{{=it.id}}-progressbar-default" class="b-progressbar">' + '<div id="{{=it.id}}-progressbar" class="b-progressbar__outer">' + '<div class="b-progressbar__inner">' + '<div class="b-progressbar__comment">{{=it.comment}}</div>' + '<div class="b-progressbar__loader-wr"><div class="b-progressbar__loader b-progressbar__loader_type_animate"></div></div>' + '</div>' + '</div>' + '</div>' + '<div class="inner-content-empty">{{=it.text}}</div>' + '</div>';
//Dashboard Template
var tabContDashBoard = '<div id="cont-{{=it.id}}" class="tab-content" data-tabid="{{=it.id}}" data-func="dashboard" data-tab-type="dashboard">' + '<div id="incont-{{=it.id}}" >' + '<div>' + '<table class="dash-table">' + '<tbody class="b-table__tbody">' + '<tr>' + '<td colspan="2">' + '<div id="dash-top" class="b-dashboard_cell" data-pos="top">{{=it.top}}</div>' + '</td>' + '<tr>' + '<tr>' + '<td class="left-row">' + '<div id="dash-left" class="b-dashboard_cell" data-pos="left" >{{=it.left}}</div>' + '</td>' + '<td class="right-row">' + '<div id="dash-right" class="b-dashboard_cell" data-pos="right">{{=it.right}}</div>' + '</td>' + '<tr>' + '</tbody>' + '</table>' + '</div>' + '</div>' + '</div>';
//Dashboard block Taskbar Template
var dashTaskbar = '<div class="toolbar">' + '{{~it.toolbar :v :i}}' + '{{?v.window || v.link}}' + '<div class="toolbar-button">' + '<a href="{{=v.window || v.link}}" {{=v.target}} class="toolbar-button__item-img">' + '<div class="s-icon s48x48 {{=v.img}}" {{=v.style}}></div>' + '</a>' + '<a href="{{=v.window || v.link}}" {{=v.target}} data-fn="dashboard" data-mn="taskbar_{{=v.name}}">{{=v.msg}}</a>' + '</div>' + '{{??}}' + '<div data-hint="{{=v.hint}}" class="toolbar-button hint {{?!v.disabled}} multi-item {{?}} {{?v.disabled}} notActive {{?}} {{?v.top}}i-tip-target_st_dashboard_top{{?}}">' + '<span href="?func={{=v.func}}" {{?v.list}}data-list="{{=v.list}}"{{?}} {{?v.top}}data-top="{{=v.top}}"{{?}} {{?v.form}}data-form="{{=v.form}}"{{?}} data-type="{{=v.type}}" class="toolbar-button__item-img">' + '<div class="s-icon s48x48 {{=v.img}}" {{=v.style}}></div>' + '</span>' + '<span href="?func={{=v.func}}" {{?v.list}}data-list="{{=v.list}}"{{?}} {{?v.top}}data-top="{{=v.top}}"{{?}} {{?v.form}}data-form="{{=v.form}}"{{?}} data-type="{{=v.type}}" data-fn="dashboard" data-mn="taskbar_{{=v.name}}">{{=v.msg}}</span>' + '</div>' + '{{?}}' + '{{~}}' + '</div>';
var button = '<div class="b-button i-button b-button_color_{{=val.color}} b-button_type_{{=val.type}} i-button_type_{{=val.type}} ' + 'b-button_style_{{=val.type}} b-button_act_{{=val.act}} {{?val.focus}}b-form__focus-field{{?}} {{?val.default}}i-button_default_yes{{?}} {{?val.disabled}}b-button_st_disabled{{?}} hint" ' + 'data-tabid="{{=it.id}}" ' + 'data-name="{{=val.name}}" ' + 'data-hint="{{=val.hint}}" ' + '{{=it.parentAttr}} ' + 'data-type="{{=it.type}}" ' + 'data-disabled="{{=val.disabledText}}" ' + 'data-act="{{=val.act}}" ' + 'data-id="{{=val.id}}" ' + 'data-flags="{{=val.flags}}" ' + '{{?val.func}}data-func="{{=val.func}}"{{?}} ' + 'tabindex="0" ' + 'data-elemid="{{=ind}}" ' + 'data-enabled="{{=val.msg}}">{{=val.msg}}' + '</div>';
var buttons = '{{~it.buttons :val :ind}}' + button + '{{~}}';
//Form & Report Template
var tabContForm = '<div id="cont-{{=it.id}}" class="tab-content tab-content_st_active {{=it.tabClass}}" data-tabid="{{=it.id}}" data-tab-type="form" data-report="{{=it.type}}" data-func={{=it.func}} data-itemid="{{=it.itemId}}">' + '<div id="{{=it.id}}-progressbar-overlay" class="b-tab-overlay"></div>' +
//default progressbar
'<div id="cont-{{=it.id}}-progressbar-default" class="b-progressbar">' + '<div id="{{=it.id}}-progressbar" class="b-progressbar__outer">' + '<div class="b-progressbar__inner">' + '<div class="b-progressbar__comment">{{=it.comment}}</div>' + '<div class="b-progressbar__loader-wr">' + '<div class="b-progressbar__loader b-progressbar__loader_type_animate"></div>' + '</div>' + '</div>' + '</div>' + '</div>' +
//default progressbar end
'<div id="cont-{{=it.id}}-progressbar" class="b-progressbar"></div>' + '<div id="incont-{{=it.id}}" class="form-content">' +
// '{{?(it.showcase)}}' +
// '<div class="b-title">' +
// '<h2 class="b-title__text">{{=it.tabTitle}}</h2>' +
// '</div>' +
// '{{??}}' +
'{{?(!it.showcase)}}' + '<div class="topWrapper">' +
//right buttons
'<div class="rightBar">' + '{{?it.devMode}}' + '<a href="{{=it.selfurl}}&out=devel" data-hint="{{=it.hDevel}}" target="_blank" class="hint"><div class="s-icon s16x16 l-devel"></div></a>' + '{{?}}' + '{{?it.bands}}' + '{{?it.pdfOn}}<a href="{{=it.selfurl}}&out=pdf" data-hint="{{=it.hPdf}}" data-hint-mn="hint_pdf" target="_blank" class="pdf hint"><div class="s-icon s16x16 p-pdf"></div></a>{{?}}' + '<a href="{{=it.selfurl}}&out=print&sok=ok" data-hint="{{=it.hPrint}}" target="_blank" data-hint-mn="hint_print" class="print hint"><div class="s-icon s16x16 p-print"></div></a>' + '{{?}}' + '<a href="#" class="reload hint" data-hint="{{=it.hReload}}" data-hint-mn="hint_reload" data-tabid="{{=it.id}}"><img src="{{=it.theme}}img/blue-reload.png" width="16" height="16" /></a>' + '{{?it.inmenu}}' + '<a href="#" class="i-take-favorite hint {{?!it.favorite}}b-elem_style_gracescale{{?}}" data-hint-unfavorite="{{=it.hFavorite}}" data-hint-favorite="{{=it.hUnfavorite}}" data-state="{{?it.favorite}}favorite{{??}}unfavorite{{?}}">' + '<div class="s-icon s16x16 mbar-favorite"></div>' + '</a>' + '<div class="b-pin i-pin hint {{?!it.pin}}b-elem_style_gracescale{{?}}" data-state="{{?it.pin}}pin{{??}}unpin{{?}}" data-hint-pin="{{=it.hintPin}}" data-hint-unpin="{{=it.hintUnpin}}"></div>' + '{{?}}' + '<a href="{{=it.permaLink}}" data-clipboard-text="{{=it.permaLink}}" data-hint="{{=it.hCopy}}" target="_blank" data-hint-mn="hint_copylink" class="hint b-permalink" id="permalink-{{=it.id}}"><div class="p-permalink s16x16 s-icons"></div></a>' +
//'<a href="#" class="help hint" data-hint="{{=it.hHelp}}" data-help-type="{{=it.helpType}}" data-help="{{=it.help}}" data-help-func="{{=it.helpurl}}"><div class="s-icon s16x16 sb-help"></div></a>' +
'<a href="#" class="b-usefulLinks__icon hint i-tip-target_st_help_links" data-hint="{{=it.hHelp}}"><div class="s-icon s16x16 sb-help"></div></a>' + '</div>' + '<div class="leftBar b-leftbar b-leftbar_for_form">' + '<div class="reload hint fleft s48x48 s-icon i-tip-target_st_title_reload i-tip-target_st_typo {{=it.tImg}}" data-hint-mn="hint_reload" {{=it.tStyle}} data-tabid="{{=it.id}}" data-hint="{{=it.hReload}}"></div>' +
//showcase if end
'{{?}}' + '{{?!it.notitle}}' + '<span class="tab_title">' + '<h2 class="reload hint b-title_type-form" data-fn="{{=it.func}}" data-mn="title" data-hint-mn="hint_reload" data-tabid="{{=it.id}}" data-hint="{{=it.hReload}}">' + '{{=it.tabTitle}}' +
//devmode icons
'{{?it.devMode}}' + '<div class="form-settings">' + '<a href="#" class="devel-link-settings devel-link-settings--form" data-tabid="{{=it.id}}"></a>' + '<a href="#" class="devel-link-add devel-link-add--field" data-tabid="{{=it.id}}"></a>' + '</div>' + '{{?}}' + '</h2>' + '{{=it.breadcrumb}}' + '{{?!it.showcase}}' + '{{?}}' + '</span>' +
//notitle if end
'{{?}}' + '{{?!it.showcase}}' + '<div class="clearBoth"></div>' + '</div>' +
//showcase if end
'{{?}}' + '{{?(!it.nostep)}}' + '{{?it.formflags.steps}}' + '<div class="b-wizard i-wizard">' + '<div class="b-wizard__inner i-wizard__inner">' + '<div class="l-wizard__triangle l-wizard__triangle_dir_left i-wizard__triangle_dir_left">' + '<div class="b-wizard__triangle b-wizard__triangle_dir_left"></div>' + '</div>' + '{{ var sNum = 0, active, actStep; for (var keyVar in it.formflags.steps) { sNum++ ; actStep = it.formflags.steps[keyVar]; if (keyVar == it.formflags.step ) { active = true; } else { active = false; } }}' + '{{?(sNum !== 1)}}' + '<div class="b-wizard__arrow"></div>' + '{{?}}' + '{{?active}}' + '<div class="b-wizard__step i-wizard__step-num_st_active b-wizard__step-num_st_active">' + '<div class="b-wizard__step-num b-wizard__step-num_st_active" data-mn="msg_wizard_step">{{=it.step}} {{=sNum}}</div>' + '<div class="b-wizard__step-desc b-wizard__step-desc_st_active">{{=actStep.name}}</div>' + '</div>' + '{{??(actStep.unavailable)}}' + '<div class="b-wizard__step">' + '<div class="b-wizard__step-num" data-mn="msg_wizard_step">{{=it.step}} {{=sNum}}</div>' + '<div class="b-wizard__step-desc">{{=actStep.name}}</div>' + '</div>' + '{{??}}' + '<div class="b-wizard__step action">' + '<div class="b-wizard__step-num">' + '<a href="#" data-href="func={{=keyVar}}" class="i-wizard__step-link b-wizard__step-link" data-mn="msg_wizard_step">{{=it.step}} {{=sNum}}</a>' + '</div>' + '<div class="b-wizard__step-desc">{{=actStep.name}}</div>' + '</div>' + '{{?}}' + '{{ } }}' + '<div class="l-wizard__triangle l-wizard__triangle_dir_right i-wizard__triangle_dir_right">' + '<div class="b-wizard__triangle b-wizard__triangle_dir_right"></div>' + '</div>' + '</div>' + '</div><div class="b-wizard__bottom-padding"></div>' + '{{?}}' +
//showcase if
'{{?}}' + '{{?it.message.status}}' + banner + '{{??it.message.length}}' + messages + '{{?}}' +
//toolbar
toolbar +
//toolbar end
'{{?it.reportInfo}}' + '<div class="report_info">{{=window.filterXSS(window.htmlEncode(it.reportInfo))}}</div>' + '{{?}}' + '<div class="error-message">{{=it.ermsg}}</div>' +
//topWrapper end
'{{?(!it.showcase)}}' + '</div>' + '{{?}}' + '<div class="l-form l-form__wrapper {{=it.formflags.maxwidth}}" id="form-scroll-{{=it.id}}">' + '<div class="l-form__overlay"><div class="l-form__loader"></div></div>' + '<div class="l-form__inner" id="form-scroll-in-{{=it.id}}">' + '<form action="{{=it.formflags.action}}" name="frm-{{=it.id}}" method="post" id="frm-{{=it.id}}" class="{{=it.files}} {{?it.showcase}}b-form_showcase_yes{{?}}" data-vars="{{=it.__innervars}}" {{=it.formflags.autocomplete}}>' + '<div id="form-wrapper-{{=it.id}}">' + '<input type="hidden" name="func" value="{{=it.func}}"/>' +
//chrome password autofilling prevent from http://benjaminjshore.info/2014/05/chrome-auto-fill-honey-pot-hack.html
'<input type="password" style="display:none;"/>' + '<input type="hidden" id="{{=it.id}}-progresstype" value="{{=it.progress}}"/>' + '<div id="{{=it.progress}}"></div>' + '<input type="hidden" name="elid" value="{{=it.elid}}" id="{{=it.id}}-elid"/>' + '{{?(it.plid != "")}}<input type="hidden" name="plid" value="{{=it.plid}}" id="{{=it.id}}-plid"/>{{?}}' + '{{?it.isUserexp}}' + '<div class="userexperience {{=it.arePages}}" data-level="{{=it.userexp}}" data-mn="msg_userexperience"> {{=it.userexpMsg}}</div>' + '{{?}}' +
// check for form exist
'{{?it.formstatus}}' + '{{=it.pages}}' +
//submit buttons
'{{?it.buttons.length}}' + '<div class="l-buttons i-buttons_form-type_{{=it.type}} l-buttons_for_form" data-type="buttons" id="{{=it.id}}-buttons">' + '{{~it.buttons :val :ind}}' + button + '{{~}}' + '</div>' + '{{?}}' + '{{?}}' +
// check for form exist END
'</div>' + '<div class="bands">{{=it.bands}}</div>' + '</form>' + '</div>' + '</div>' + '</div>' + '</div>';
//captcha
var formItemCaptcha = '<div class="b-captcha"><div class="b-captcha__inner"><div class="g-recaptcha" id="{{=it.id}}-{{=it.name}}" data-sitekey="{{=it.value}}"></div></div></div>';
//Input template
var formItemInput = '<div class="l-form__input-wr {{=val.dependFields}} {{=val.setvalue}} {{=val.classes}}" >\n <input value="{{=val.value}}" {{=val.attr}} class="{{=val.classes}} force-hint b-input b-input_type_{{=val.type}} i-input-control" id="{{=val.name}}-{{=val.id}}" data-tabid="{{=val.id}}"/>\n {{?val.prefix}}<div class="b-input__prefix i-input__prefix">{{=val.prefix}}</div>{{?}}\n </div>';
//Input File Template
var formItemFile = '<div class="{{=it.dependFields}} {{=it.setvalue}} b-input-file__wr" id="b-input-file__wr-{{=it.id}}">' + '<input value="{{=it.value}}" {{=it.attr}} id="{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}" class="b-input b-input_type_file {{=it.classes}}" />' + '<div class="b-input-file-fake" data-source="{{=it.name}}-{{=it.id}}">' + '<div class="b-input-file-fake__input hint" id="f-{{=it.name}}-{{=it.id}}" data-hint=""></div>' + '<div class="b-input-file-fake__btn">{{=it.msg}}</div>' + '</div>' + '</div>';
//Password check template
var passwdCheck = '<div class="checkpass-indicator-wrapper">' + '<div id="checkpass-indicator-wrapper-{{=it.name}}-{{=it.id}}">' + '<span class="strength-pass-indicator">' + '<span class="ci-square si-one"></span>' + '<span class="ci-square si-two"></span>' + '<span class="ci-square si-three"></span>' + '<span class="ci-square si-four"></span>' + '</span>' + '<span class="strength-pass-text">' + '<span class="st-text st-one">{{=it.short}}</span>' + '<span class="st-text st-two">{{=it.weak}}</span>' + '<span class="st-text st-three">{{=it.good}}</span>' + '<span class="st-text st-four">{{=it.strong}}</span>' + '</span>' + '</div>' + '</div>';
var confirmCheck = '<div class="b-form-confirm-message" id="check-confirm-{{=it.name}}-{{=it.id}}">{{=it.doNotMatch}}</div>';
//Password
var formItemPassword = '<div class="l-form__input-wr {{=it.dependFields}} {{=it.setvalue}}" >' + '<input {{=it.attr}} class="{{=it.classes}} b-input b-input_type_password force-hint i-input-control" id="{{=it.name}}-{{=it.id}}" data-parent="{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}" value="{{=it.value}}" data-confirm-field="{{=it.confirmField}}" autocomplete="off"/>' + '<input type="text" id="{{=it.name}}-{{=it.id}}-fake" data-parent="{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}" style="display:none;" data-confirm-field="{{=it.confirmField}}" class="fakePasswd {{=it.classes}} force-hint b-input i-input-control" autocomplete="off"/>' + '</div>';
//Input with zoom
var formItemInputWithZoom = '<div class="l-form__input-wr {{=it.dependFields}} {{=it.setvalue}}" >' + '<input value="{{=it.value}}" {{=it.inputAttr}} class="{{=it.inputClasses}} {{=it.classes}} force-hint b-input b-input_type_text i-input-control" id="{{=it.inputName}}-{{=it.id}}" data-tabid="{{=it.id}}"/>' + '<textarea class="{{=it.textareaClasses}} force-hint b-textarea" {{=it.textareaAttr}} data-tabid="{{=it.id}}"></textarea>' + '</div>';
//Input with zoom
var formItemInputWithZoom1 = '<div class="{{=it.dependFields}}" >' + '<input {{=it.attr}} class="{{=it.classes}} force-hint b-input b-input_type_text i-input-control" id="{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}"/>' + '<textarea class="{{=it.textareaClasses}} force-hint b-textarea" {{=it.textareaAttr}} data-tabid="{{=it.id}}"></textarea>' + '</div>';
var formItemTextarea = '<div id="b-msg-templ-{{=it.name}}-{{=it.id}}" class="b-msg-templ__options"></div>' + '<div class="{{=it.setvalue}} {{=it.dependFields}} b-textarea__wrapper">' + '{{?it.quote}}' + '<div class="b-ticket-tools-link">' + '<a href="#" class="b-quote hint" data-target="{{=it.name}}-{{=it.id}}" data-hint-mn="hint_quote" data-hint="{{=App.u.escapeQuote(it.hint_quote)}}">{{=it.msg_quote}}</a>' + '</div>' + '{{?}}' + '{{?it.savedmessage}}' + '<div class="b-msg-templ__cont b-ticket-tools-link" data-target="{{=it.name}}-{{=it.id}}">' + '<a href="#" class="b-msg-templ__link hint" data-hint-mn="hint_savedmessage" data-hint="{{=App.u.escapeQuote(it.hint_savedmessage)}}" data-id="{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}">{{=it.msg_savedmessage}}</a>' + '</div>' + '{{?}}' + '<textarea class="{{=it.classes}} force-hint b-textarea b-textarea_responsive_yes" id="{{=it.name}}-{{=it.id}}" {{=it.attr}} data-tabid="{{=it.id}}" data-codelang="{{=it.codelang}}">{{=it.value}}</textarea>' + '{{?it.editor}}<div id="{{=it.name}}-{{=it.id}}-editor" data-id="{{=it.name}}-{{=it.id}}"></div>{{?}}' + '<div class="b-resizer i-tip-target_st_textarea_resize {{?it.editor}}b-resizer_for_editor {{??}}b-resizer_for_textarea{{?}}" id="resizer_editor-{{=it.name}}-{{=it.id}}" data-id="{{=it.name}}-{{=it.id}}{{?it.editor}}-editor{{?}}" {{?it.editor}}data-move-trigger="resizeEditor"{{?}} data-tabid="{{=it.id}}"></div>' + '</div>';
var formItemCheckbox = '<div class="b-checkbox__wrapper {{=val.dependFields}} {{=val.setvalue}} {{?val.img}}l-checkbox-img{{?}}">' + '{{?val.img}}' + '<div class="s-icon s16x16 {{=val.img}} b-checkbox__img"></div>' + '{{?}}' + '<div class="b-checkbox checkboxel">' + '<div class="b-checkbox__control {{=val.cbclass}} {{=val.readonly}} force-hint" tabindex="0" id="{{=val.id}}-{{=val.name}}" data-tabid="{{=val.id}}" data-id="{{=val.name}}"></div>' + '</div>' + '<div class="l-label__wrapper l-label__wrapper_for_checkbox">' + '<div class="b-label__visible b-label__visible_for_checkbox" data-tabid="{{=val.id}}" data-id="{{=val.name}}">{{=val.desc}}</div>' + '<div class="b-label__invisible b-label__invisible_for_checkbox">{{=val.desc}}</div>' + '<div class="b-label__line-dotted b-label__line-dotted_for_checkbox"></div>' + '</div>' + '<input type="hidden" value="{{=val.value}}" class="{{=val.classes}}" data-handler-val="{{=hash(val.value)}}" name="{{=val.name}}" data-type="checkbox" data-tabid="{{=val.id}}" {{=val.attrInput}}/>' + '</div>';
var formItemHtmldata = '<div class="b-htmldata__inner b-htmldata">' + '{{?it.img}}' + '<div class="b-htmldata__img">' + '{{?it.img.src}}<img data-type="img" src="{{=it.img.src}}" id="{{=it.id}}-{{=it.img.name}}" width="{{=it.img.width}}" height="{{=it.img.height}}"/>{{??it.img.img}}<div class="{{=it.img.img}}"></div>{{?}}' + '</div>' + '{{?}}' + '<div id="{{=it.id}}-{{=it.name}}">{{=window.filterXSS(window.htmlEncode(it.value))}}</div>' + '<div class="b-htmldata__clear"></div>' + '</div>';
var formItemSelectList = '{{~val.slist :value:index}}\n {{ var selected = ""; if (val.value == value.key) { selected="selected"; } }}\n {{ var dependelem = ""; if (value.depend != "" && value.depend != undefined) { dependelem="dependelem"; } else { dependelem="b-myselect__select-li_show_yes"; } }}\n <li data-val="{{=String(value.key).replace(/"/g, \'"\')}}" data-code="{{=value.code}}" data-mask="{{=value.mask}}" data-handler-val="{{=hash(value.key)}}" data-dependkey="{{=value.depend}}" \n class="{{=selected}} {{=dependelem}} {{?value.src||value.img}}b-myselect__item-image{{?}} b-myselect__select-li">\n {{?value.src}} <span class="b-myselect__img" style="background-image: url({{=value.src}}); \n {{?value.width}}width:{{=value.width}}px;{{?}}\n {{?value.height}}height:{{=value.height}}px;{{?}}"></span>{{?}}\n {{?value.img}} <span class="b-myselect__img {{=value.img}}"></span>{{?}}\n <span class="{{=value.classes}} b-myselect__option-value">{{=value.value}}</span>\n </li>\n {{~}}';
var formItemSelect = '<div class="b-myselect b-myselect_st_close {{=val.search}} {{=val.depend}} {{=val.dependFields}} {{=val.readonly}} {{=val.setvalue}}" data-depend="{{=val.dependMaster}}" id="_{{=val.name}}-{{=val.id}}">\n <div class="b-myselect__select-selected" data-id="_{{=val.name}}-{{=val.id}}">\n <div class="b-myselect__select-value force-hint" tabindex="0" data-tabid="{{=val.id}}">{{=val.msg}}</div>\n <div class="b-myselect__arrow-down"><div class="b-myselect__triangle-down"></div></div>\n </div>\n {{?val.search}}<div class="b-myselect__search-box">\n <input type="text" class="scrlbr b-input b-input_for_search sb-input force-hint" data-id="{{=val.id}}-{{=val.name}}" data-tabId="{{=val.id}}" id="sb-cont-{{=val.id}}-{{=val.name}}"/>\n <div class="sb-info" id="sb-info-{{=val.id}}-{{=val.name}}"></div>\n </div>{{?}}\n\n <div class="b-myselect__option-wr" id="opt_{{=val.name}}-{{=val.id}}" data-tabid="{{=val.id}}">\n <div class="b-myselect__select-list" id="cont-{{=val.id}}-{{=val.name}}">\n <ul data-id="_{{=val.name}}-{{=val.id}}" id="{{=val.id}}-{{=val.name}}" class="b-myselect__select-ul">\n ' + formItemSelectList + '\n </ul>\n </div>\n </div>\n <input type="hidden" value="{{=val.value}}" class="{{=val.classes}}" {{?val.targetfontfamilyview}}data-targetview="{{=val.targetfontfamilyview}}"{{?}} data-handler-val="{{=hash(val.value)}}" name="{{=val.name}}" id="_{{=val.name}}-{{=val.id}}-val" data-type="select" data-tabid="{{=val.id}}" {{=val.attrInput}}/>\n </div>';
var formItemMSelect = '{{ var l, selectedClass = ""; if (it.hasValue) { selectedClass = "selected"; } }}' + '<div class="b-mselect {{=selectedClass}} {{=it.readonly}} {{=it.setvalue}}" data-depend="{{=it.dependMaster}}" id="{{=it.id}}-{{=it.name}}-ms">' + '<div class="b-mselect__view-value force-hint" data-id="{{=it.id}}-{{=it.name}}" tabindex="0" id="{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}">' + '<div class="b-myselect__arrow-down b-myselect__arrow-down_for_mselect"><div class="b-myselect__triangle-down"></div></div>' + '<ul class="b-mselect__ul-view" id="{{=it.id}}-{{=it.name}}-ms-view" data-tabid="{{=it.id}}" data-maxselect="{{=it.maxselect}}">' + '<li class="b-mselect__item b-mselect__item_msg_unselected" data-default-msg="{{=it.msg}}">{{?it.mixed}}{{=it.msg_mixed}} {{??}} {{=it.msg}}{{?}}</li>' + '{{ var v = "", ind = 0; for (var i in it.values) { }}' + '{{ var selected = ""; if (it.values[i]) { selected="chosen"; } }}' + '{{ if (it.slist[i]) { if (v !== "") { v += ","; } v += it.slist[i].key; ind++; }}' + '{{ var dependelem = ""; if (it.slist[i].depend != "" && it.slist[i].depend != undefined) { dependelem="dependelem"; } else { dependelem="b-myselect__select-li_show_yes"; } }}' + '<li class="b-mselect__item {{=selected}} {{=dependelem}} " data-val="{{=it.slist[i].key}}" data-dependkey="{{=it.slist[i].depend}}" unselectable="on" data-s-id="{{=it.id}}-{{=it.name}}-{{=i}}">' + '{{=it.slist[i].value}}' + '<span class="b-mselect__unselect"></span>' + '</li>' + '{{ } } }}' + '</ul>' + '</div>' + '<div class="b-mselect__options closed" id="{{=it.id}}-{{=it.name}}-ms-list-wrapper" data-id="{{=it.id}}-{{=it.name}}" data-tabid="{{=it.id}}">' + '<div class="b-mselect__list-value" id="{{=it.id}}-{{=it.name}}-ms-list">' + '<ul class="b-mselect__ul-choose" id="{{=it.id}}-{{=it.name}}-ms-list-ul" data-id="{{=it.id}}-{{=it.name}}">' + '<li class="b-mselect__item b-mselect__item_select-all">{{=it.msg_select_all}}</li>' + '{{ var l = it.slist.length; for (var i = 0; i < l; i++) { }}' + '{{ var selected = ""; if (it.values[i]) { selected="chosen"; } }}' + '{{ var dependelem = ""; if (it.slist[i].depend != "" && it.slist[i].depend != undefined) { dependelem="dependelem"; } else { dependelem="b-myselect__select-li_show_yes"; } }}' + '<li class="b-mselect__item {{=selected}} {{=dependelem}}" data-handler-val="{{=hash(it.slist[i].key)}}" data-dependkey="{{=it.slist[i].depend}}" data-val="{{=it.slist[i].key}}" unselectable="on" id="{{=it.id}}-{{=it.name}}-{{=i}}">' + '{{=it.slist[i].value}}' + '<span class="b-mselect__unselect"></span>' + ' </li>' + '{{ } }}' + '</ul>' + '</div>' + '</div>' +
//'<div class="b-input-btn b-input-btn_type_plus hint" data-hint-mn="msg_plus" data-hint="{{=App.u.escapeQuote(it.hintBtnPlus)}}" data-id="{{=it.id}}-{{=it.name}}"></div>' +
//'<div class="b-input-btn b-input-btn_type_minus hint" data-hint-mn="msg_minus" data-hint="{{=App.u.escapeQuote(it.hintBtnMinus)}}" data-id="{{=it.id}}-{{=it.name}}"></div>' +
'<input type="hidden" name="{{=it.name}}" class="{{=it.classes}}" value="{{=v}}" data-type="multiple" {{=it.requiredAttr}} id="{{=it.id}}-{{=it.name}}-ms-value" data-id="{{=it.id}}-{{=it.name}}" data-tabid="{{=it.id}}"/>' + '</div>';
var formItemRadio = '<div class="b-radio {{=it.depend}} {{=it.dependFields}} {{=it.readonly}} {{=it.setvalue}}" id="{{=it.id}}-{{=it.name}}-radio" data-depend="{{=it.dependMaster}}">' +
//foreach
'{{~it.slist :value :index}}' + '{{ var rbclass = "", tabindex = ""; if (it.value == value.key) { rbclass="checked"; tabindex = "tabindex=0"; } }}' + '{{ var dependelem = ""; if (value.depend != "" && value.depend != undefined ) { dependelem="dependelem"; } else { dependelem="b-myselect__select-li_show_yes"; } }}' + '<div data-dependkey="{{=value.depend}}" class="{{=dependelem}} l-radio__item">' + '<div class="b-radio__control-wr">' + '<div {{=tabindex}} class="b-radio__control {{=it.name}}-{{=it.id}} {{=it.name}}-{{=it.id}}-{{=hash(value.key)}} {{=rbclass}} force-hint" data-id="{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}" data-val="{{=value.key}}" data-handler-val="{{=hash(value.key)}}">' + '</div>' + '</div>' + '<div class="l-label__wrapper l-label__wrapper_for_radio">' + '<div class="b-label__visible b-label__visible_for_radio" data-r-class="{{=it.name}}-{{=it.id}}-{{=hash(value.key)}}">{{=value.value}}</div>' + '<div class="b-label__invisible b-label__invisible_for_radio">{{=value.value}}</div>' + '<span class="b-label__line-dotted b-label__line-dotted_for_radio"></span>' + '</div>' + '</div>' +
//end foreach
'{{~}}' + '<input type="hidden" name="{{=it.name}}" data-handler-val="{{=hash(it.value)}}" id="{{=it.name}}-{{=it.id}}" value="{{=it.value}}" class="{{=it.classes}}" data-type="radio" data-tabid="{{=it.id}}" {{=it.attrInput}}/>' + '</div>';
var formItemRadioImg = '<div class="b-radio {{=it.setvalue}} {{=it.readonly}}">' + '<table class="b-radio-img">' + '<tbody class="b-table__tbody">' + '{{~it.slist :value :index}}' + '{{ var rbclass = "", tabindex = ""; if (it.value == value.key) { rbclass="checked"; tabindex = "tabindex=0"; } }}' + '<tr class="b-radio-img__row" data-r-class="{{=it.name}}-{{=it.id}}-{{=hash(value.key)}}">' + '<td class="b-radio-img__col b-radio-img__col_radio">' + '<div class="b-radio__control {{=it.name}}-{{=it.id}} {{=rbclass}} {{=it.name}}-{{=it.id}}-{{=hash(value.key)}}" {{=tabindex}} data-id="{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}" data-val="{{=value.key}}" data-handler-val="{{=hash(value.key)}}"></div>' + '</td>' + '<td class="b-radio-img__col b-radio-img__col_img">' + '<div class="b-radio-img__img-wrapper">' + '{{?value.src}} <span class="b-radio-img__img" style="background-image: url({{=value.src}}); ' + '{{?value.width}}width:{{=value.width}}px;{{?}}' + '{{?value.height}}height:{{=value.height}}px;{{?}}"></span>{{?}}' + '{{?value.img}} <span class="b-radio-img__img {{=value.img}}"></span>{{?}}' + '</div>' + '</td>' + '<td class="b-radio-img__col b-radio-img__col_desc"><div class="b-radio-img__desc">{{=window.htmlDecode(value.value)}}</div></td>' + '</tr>' + '{{~}}' + '</tbody>' + '</table>' + '<input type="hidden" name="{{=it.name}}" id="{{=it.name}}-{{=it.id}}" data-handler-val="{{=hash(it.value)}}" class="{{=it.classes}}" value="{{=it.value}}" data-type="radio" data-tabid="{{=it.id}}" />' + '</div>';
var formItemLink = '<div class="b-form-link{{?it.internal}} m-item{{?}}"><a href="{{=it.href}}" data-url="{{=it.href}}" {{?!it.newtab}}data-parent="{{=it.id}}"{{?}} data-type="link" id="{{=it.id}}-{{=it.name}}" {{?it.target}}target="{{=it.target}}"{{?}} class="i-menu-link {{?it.newtab}}newtab{{?}}">{{=it.text}}</a></div>';
var formItemExtrBtn = '<{{=it.extrabtn}} data-tname="{{=it.name}}-{{=it.id}}"/>';
var formItemDesk = '<span class="desc">{{=it.value}}</span>';
var formItemDeskRadio = '<div class="desk">' + '<div class="desk-visible">{{=it.value}}</div>' + '<div class="desk-invisible">{{=it.value}}</div>' + '<span class="b-label__line-dotted"></span>' + '</div>';
var formItemTextData = '{{?it.img}}<div class="b-textdata__img">{{?it.img.src}}<img data-type="img" src="{{=it.img.src}}" id="{{=it.id}}-{{=it.img.name}}" width="{{=it.img.width}}" height="{{=it.img.height}}"/>{{??it.img.img}}<div class="{{=it.img.img}}"></div>{{?}}</div>{{?}}' + '<div class="b-textdata {{=it.classes}}" id="{{=it.id}}-{{=it.name}}" data-type="textdata"><div class="b-textdata__inner" {{?it.mtype === "msg" || it.mtype === "msgdata"}} data-mn="{{=it.msgname}}"{{?}} id="{{=it.id}}-{{=it.name}}-inner">{{=window.filterXSS(it.value)}}</div></div>' + '<div class="b-textdata__clear l-clear-both"></div>';
var formItemLabel = '<div class="l-label__wrapper">' + '<div class="l-label__inner">' + '<label class="b-label__visible" data-tabid="{{=it.tabId}}" data-id="{{=it.id}}" data-fn="{{=it.func}}" data-mn="{{=it.id}}">{{=it.img}}{{=it.label}}</label>' + '<label class="b-label__invisible">{{=it.img}}{{=it.label}}</label>' + '<span class="b-label__line-dotted"></span>' + '{{?it.required}}<span class="b-required-star">*</span>{{?}}' + '{{?it.devMode}}' + '<div class="field-settings">' + '<a href="#" class="devel-link-settings devel-link-settings--field" data-elid="{{=it.id}}" data-tabid="{{=it.tabId}}"></a>' + '<a href="#" class="devel-link-delete devel-link-delete--field" data-elid="{{=it.id}}" data-name="{{=it.label}}" data-tabid="{{=it.tabId}}"></a>' + '</div>' + '{{?}}' + '</div>' + '</div>';
var filterItemLabel = '<label data-mn="{{=it.name}}" data-fn="{{=it.func}}">{{=it.label}}</label>';
var formItemSlider = '<table class="b-slider">' + '<tbody class="b-table__tbody">' + '<tr>' + '<td class="l-slider__col l-slider__col_cont_slider">' + '<div class="l-slider__wr {{=it.readonly}}">' + '<div class="b-slider__line"></div>' + '<div class="b-slider__border b-slider__border_pos_left"></div>' + '<div class="b-slider__c-border b-slider__c-border_pos_top"></div>' + '<div class="b-slider__c-border b-slider__c-border_pos_bottom b-slider__c-bottom-border"></div>' + '<a id="{{=it.id}}-{{=it.name}}-slider" class="b-slider__el force-hint" tabindex="0" data-min="{{=it.min}}" data-tabid="{{=it.id}}" data-max="{{=it.max}}" data-step="{{=it.step}}" data-id="{{=it.id}}-{{=it.name}}" data-value="{{=it.value}}">' + '<div class="b-slider__core"></div>' + '</a>' + '<div class="b-slider__border b-slider__border_pos_right"></div>' + '</div>' + '</td>' + '<td class="l-slider__col l-slider__col_cont_input {{=it.setvalue}}">' + '<div class="l-slider__input-wr {{=it.setvalue}}">' + '<input type="text" len="32" {{?it.targetfontsizeview}}data-targetview="{{=it.targetfontsizeview}}"{{?}} class="b-input b-input_for_slider {{?it.targetfontsizeview}}i-font-size-control{{?}} {{=it.readonly}} force-hint i-input-control {{=it.inputClass}}" id="{{=it.id}}-{{=it.name}}" data-tabid="{{=it.id}}" name="{{=it.name}}" value="{{=it.value}}" {{=it.readonly}} {{=it.attrInput}}/>' + '</div>' + '</td>' + '</tr>' + '</tbody>' + '</table>';
var formItemSliderEditInList = '<div class="l-form__row_type_slider">' + '<div class="l-form__control-wr">' + formItemSlider + '</div>' + '</div>';
var formItemTicketMsg = '{{~it.mlist :value:index}}' + '<tr class="b-ticket__table-row {{?value.isCollapsed}} b-ticket__table-row_is_collapsible b-ticket__table-row_is_collapsed {{?}}">' + '<td class="b-ticket__table-col b-ticket__table-col_type_msg">' + '<div class="b-ticket__item b-ticket__item_{{=value.type}} ">' + '<div class="b-ticket__item-inner b-ticket__item-inner_{{=value.type}} {{?value.rate.is}}b-ticket__item-inner_has_rate{{?}}">' + '{{?value.type === "info"}}' + '<table class="b-ticket__table-info">' + '<tbody class="b-table__tbody">' + '{{~value.rows :v :i}}' + '<tr class="b-ticket__row-info {{?v.header}}b-ticket__row-info_type_header{{?}}">' + '{{?v.header}}' + '<td class="b-ticket__col-info b-ticket__col-info_type_header" colspan="2">{{=v.label}}</td>' + '{{??}}' + '<td class="b-ticket__col-info b-ticket__col-info_type_label">{{=v.label}}</td>' + '<td class="b-ticket__col-info b-ticket__col-info_type_value">{{=String(v.v).replace(/(\\r\\n|\\n|\\r)/g," ").replace(/\\s+/g," ")}}</td>' + '{{?}}' + '</tr>' + '{{~}}' + '</tbody>' + '</table>' + '{{??}}' + '<div class="b-ticket__btn-collapse i-ticket__btn-collapse s16x16 s-icon mbar-showall"></div>' + '{{?value.title}}<div class="b-ticket__title">{{=value.title}}</div>{{?}}' + '<div class="b-ticket__body b-ticket__body_same_prop">{{var b = String(value.body).replace(/\\s\\r\\n|\\r\\n|\\s\\n|\\n/g, "<br/>");}}{{=b}}</div>' +
//file
'{{?value.file.is}}' + '{{~value.file.elems :vv :ii}}' + '<div class="b-ticket__file">' + '<a href="?func={{=vv.action}}{{~vv.params :v:i}}&{{=v.name}}={{=v.value}}{{~}}" target="_blank" class="b-ticket__file-link {{?vv.preview}}b-image-for-view{{?}}">{{=vv.name}}</a>' + '</div>' + '{{~}}' + '{{?}}' +
//rate
'{{?value.rate.is}}' + '<div class="b-ticket__rate">' + '{{~value.rate.items :vv :ii}}' + '<div class="b-ticket__rate-item" data-id="{{=vv.id}}" data-elid="{{=vv.elid}}">' + '<span class="b-ticket__rate-msg">{{=vv.msg}}</span>' + '{{~vv.items :v:i}}' + '<div class="b-ticket__rate-{{=v.name}} {{=v.classes}}" data-name="{{=v.name}}" data-func="{{=v.func}}" data-type="{{=v.type}}"><img src="{{=v.img}}" data-hint="{{=App.u.escapeQuote(window.filterXSS(v.hint))}}" class="b-ticket__rate-img hint"/><span class="b-ticket__rate-text">{{=v.msg}}</span></div>' + '{{~}}' + '</div>' + '{{~}}' + '</div>' + '{{?}}' + '<div class="b-ticket__clear"></div>' + '{{?}}' + '</div>' + '</div>' + '</td>' + '<td class="b-ticket__table-col b-ticket__table-col_type_avatar">' + '{{?value.avatar.is && (value.type === "incoming" || value.type === "outcoming")}}' + '<div class="b-ticket__avatar b-ticket__avatar_{{=value.type}}">' + '<img src="{{=value.avatar.src}}" width="{{=value.avatar.width}}" height="{{=value.avatar.height}}" class="b-ticket__avatar-img"/>' + '</div>' + '{{?}}' + '</td>' + '</tr>' + '{{~}}';
var formItemTicket = '<div class="b-ticket" {{?it.fontsize||it.fontfamily}} style="{{?it.fontsize}}font-size: {{=it.fontsize}}px;{{?}} {{?it.fontfamily}}font-family: {{=String(it.fontfamily).replace(/"/g, \'"\')}}{{?}}{{?}}">' + '<div class="b-ticket__btn-move-wrapper"><div class="b-ticket__btn-move_up b-ticket__btn-move i-ticket__btn-move_up" data-tabid="{{=it.id}}"></div><div class="b-ticket__btn-move_down b-ticket__btn-move i-ticket__btn-move_down" data-tabid="{{=it.id}}"></div></div>' + '<table class="b-ticket__table {{?it.fmsgtype === "outcoming"}}b-ticket__table_my_outcoming{{?}}" id="{{=it.id}}-{{=it.name}}" data-type="ticket">' + '<tbody class="b-table__tbody">' + formItemTicketMsg + '</tbody>' + '</table>' + '</div>';
var formItemSelectAutocomplete = '<div class="{{=it.depend}} b-select-ac">' + '<input type="text" autocomplete="off" data-name="{{=it.name}}" {{=it.attr}} class="{{=it.classes}} b-input b-select-ac__input force-hint" id="{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}" />' + '</div>' + '<div class="b-select-ac__list-scroll-wrapper" id="opt-{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}">' + '<div class="b-select-ac__list-wrapper {{=it.dependFields}}" id="cont-b-select-ac-list__{{=it.name}}-{{=it.id}}">' + '<ul class="b-select-ac__list" data-id="{{=it.name}}-{{=it.id}}" id="b-select-ac-list__{{=it.name}}-{{=it.id}}"></ul>' + '<input value="{{=it.value}}" type="hidden" name="{{=it.name}}" class="{{=it.classes}}" id="key-{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}"/>' + '<div>' + '</div>';
var formItemFrame = '<div class="b-form-frame">' + '<iframe frameborder="0" id="{{=it.name}}-{{=it.id}}" name="{{=it.name}}" class="{{?it.fullheight}}i-control__fullwidth{{?}}" data-type="frame" src="{{=it.value}}" width="100%" height="{{=it.height}}"></iframe>' + '<div class="b-resizer" id="resizer_editor-{{=it.id}}" data-id="{{=it.name}}-{{=it.id}}" data-tabid="{{=it.id}}"></div>' + '</div>';
var formItemDateTime = '<div class="b-form-datetime" id="{{=it.id}}-{{=it.name}}" data-type="datetime" data-difftime="{{=it.difftime}}">{{=it.value}}</div>';
var formPageTitle = '<h3 class="l-form-page__title-wr" data-name="{{=it.name}}" id="tblock-{{=it.id}}" data-type="{{=it.type}}" data-block-type="{{=it.blockType}}">' + '<div tabindex="0" class="b-form-page__title i-form-page__title">' + '<span class="b-form-page__title-content" data-mn="{{=it.name}}">{{=it.title}}</span>' + '{{?it.reload}}<span class="dashblock-reload hint" data-hint-mn="hint_reload" data-hint="{{=App.u.escapeQuote(it.hintReload)}}"></span>{{?}}' + '<span class="b-triangle hint" data-hint-expanded="{{=App.u.escapeQuote(it.hintCollapse)}}" data-hint-collapsed="{{=App.u.escapeQuote(it.hintExpand)}}" data-state="{{?it.collapsed}}collapsed{{??}}expanded{{?}}"></span>' + '</div>' + '<div class="b-form-page__vline"></div>' + '</h3>';
var formItemMgrview = '<div class="mgrview" id="mgrview-{{=it.tabId}}"><!--<img src="{{=it.theme}}/img/hue.png" width="251" height="168"/>--><div id="{{=it.tabId}}-color1" class="color1 color"></div><div class="color2 color" id="{{=it.tabId}}-color2" ></div><div class="color3 color" id="{{=it.tabId}}-color3" ></div><div class="color4 color" id="{{=it.tabId}}-color4" ></div><div class="color5 color" id="{{=it.tabId}}-color5" ></div><div class="color6 color" id="{{=it.tabId}}-color6" ></div><div class="color7 color" id="{{=it.tabId}}-color7" ></div></div>';
var formPageWrapper = '<div class="b-form-page b-form-page_view_{{=it.view}} {{=it.classes}} {{?it.withList}}b-form-page_withlist_yes{{?}} {{?it.collapsed}}b-form-page_st_collapsed{{?}}" id="page-{{=it.name}}-{{=it.tabId}}" data-tabid="{{=it.tabId}}" {{ if (it.hide) { for(var i =0; i< it.hide.length; i++) { }} {{=it.hide[i].name + "-" + hash(it.hide[i].value)}}="yes" {{ } } }} {{ if (it.show) { for (var i =0; i< it.show.length; i++) { }} {{=it.show[i].name + "-" + it.hash(it.show[i].value)}}="yes" {{ } } }}>' + '{{=it.title}}' + '<div class="b-form-page__inner" style="display:{{=it.display}};" >' + '<table class="l-form__table">' + '<tbody class="b-table__tbody">' + '{{=it.content}}' + '</tbody>' + '</table>' + '</div>' + '</div>';
var filterWrapper = '<div class="filter-inner">' + '<form name="frm-{{=it.tabId}}" id="frm-{{=it.tabId}}">' + '<input type="hidden" value="{{=it.func}}" name="func"/>' + '<div class="filter-inner-inner">' + '<div class="filter-cont"><table><tr>{{=it.form}}</tr></table></div>' + '<div class="filter-btn-wrapper">' + '<div class="filter-btns">' + '<div class="b-button b-button__filter-set b-button_style_ok" data-tabid="{{=it.tabId}}" data-disabled="{{=it.disabled}}" tabindex="0">{{=it.filterMsg.findMsg}}</div>' + '<div class="b-button b-button__filter-save" data-id="{{=it.tabId}}" tabindex="0">{{=it.filterMsg.saveMsg}}<div class="b-button__filter-save-name">{{=it.sfname||""}}</div></div>' + '<div class="b-button b-button__filter-clear" data-tabid="{{=it.tabId}}" tabindex="0">{{=it.filterMsg.clearMsg}}</div>' + '</div>' + '</div>' + '<div class="clearBoth"></div>' + '</div>' + '</form>' + '</div>';
var filterItem = '<tr class="filter-item {{=it.classes}} l-form__row" {{ if (it.hide) { for (var i = 0; i < it.hide.length; i++) { }} {{=it.hide[i].name + "-" + hash(it.hide[i].value)}}="yes" {{ } } }} {{ if (it.show) { for (var i = 0; i < it.show.length; i++) { }} {{=it.show[i].name + "-" + hash(it.show[i].value)}}="yes" {{ } } }}>' + '<td class="filter-first">{{=it.first}}</td>' + '<td class="filter-second"><div class="filter-input">{{=it.second}}</div></td>' + '</tr>';
var filterRow = '<td class="filter-col">' + '<table class="filter-item__table filter-table_n_{{=it.index}}">{{=it.content}}</table>' + '</td>';
var filterSavedItem = '<div class="b-filter__saved-item {{?it.active}}b-filter__saved-item_st_active{{?}}">' + '<div class="b-filter__saved-item-inner">' + '<input type="text" class="b-filter__saved-name-edit" ' + 'id="b-filter__saved-name-edit_tid_{{=it.id}}" value="{{=it.name}}" ' + 'data-id="{{=it.id}}" data-func="{{=it.func}}" data-tabid="{{=it.tabId}}" data-name="{{=it.name}}" />' + '<span class="b-filter__saved-name">{{=it.name}}</span>' + '</div>' + '<span class="b-filter__saved-edit" data-id="{{=it.id}}"></span>' + '<span class="b-filter__saved-remove" data-id="{{=it.id}}"></span>' + '</div>';
var formItemRowDesc = '<tr class="{{=it.classes}} l-form__row" {{ if (it.hide) { for (var i = 0; i < it.hide.length; i++) { }} {{=it.hide[i].name + "-" + hash(it.hide[i].value)}}="yes" {{ } } }} {{ if (it.show) { for (var i =0; i < it.show.length; i++) { }} {{=it.show[i].name + "-" + hash(it.show[i].value)}}="yes" {{ } } }}>' + '<td class="l-form__col l-form__col_cont_label" colspan="4">{{=it.second}}</td>' + '</tr>';
var formItemRow = '<tr class="{{=it.classes}} l-form__row i-form__item" {{ if (it.hide) { for (var i =0; i < it.hide.length; i++) { }} {{=it.hide[i].name + "-" + hash(it.hide[i].value)}}="yes" {{ } } }} {{ if (it.show) { for (var i =0; i < it.show.length; i++) { }} {{=it.show[i].name + "-" + hash(it.show[i].value)}}="yes" {{ } } }}>' + '<td class="l-form__col l-form__col_cont_label">{{=it.first}}</td>' + '<td class="l-form__col l-form__col_cont_control" {{=it.colspan}}>' + '<div class="l-form__table-control-wrapper">' + '<table class="l-form__table-control">' + '<tbody class="b-table__tbody">' + '<tr>' + '<td class="l-form__col-control">' + '<div class="l-form__control-wr">{{=it.second}}</div>' + '</td>' + '<td class="l-form__col l-form__col_cont_hint">' + '<div class="field-help {{=it.hint}} hint" data-hint-mn="{{=it.fname}}" data-hint="{{=it.third}}"></div>' + '</td>' + '<td class="l-form__col l-form__col_cont_status">' + '<div class="field-desc" data-mn="{{=it.descName}}">{{=it.desc}}</div>' + '<div class="field-status"></div>' + '{{?it.devMode || it.testMode}}' + '<div class="field-settings">' + '{{?it.devMode}}' + '<a href="#" class="devel-link-settings devel-link-settings--field " data-elid="{{=it.fname}}" data-tabid="{{=it.tabId}}"></a>' + '<a href="#" class="devel-link-delete devel-link-delete--field" data-elid="{{=it.fname}}" data-name="{{=it.label}}" data-tabid="{{=it.tabId}}"></a>' + '{{??}}' + '<a href="#" class="testmode__form-link b-elem_style_gracescale" data-elid="{{=it.fname}}" data-tabid="{{=it.tabId}}"></a>' + '{{?}}' + '</div>' + '{{?}}' + '</td>' + '</tr>' + '<tr class="l-form__col-error">' + '<td colspan="3" class="">' + '<div class="b-error-box__wrapper" data-id="{{=it.id}}">' + '<div class="b-error-box">' + '<div class="b-error-box__top-triangle"></div>' + '<div class="b-error-box__inner">{{=it.error}}</div>' + '</div>' + '</div>' + '</td>' + '</tr>' + '</tbody>' + '</table>' + '</div>' + '</td>' + '<td class="l-form__col l-form__col_cont_row-end"></td>' + '</tr>';
var formItemFullWidthRow = '<tr class="{{=it.classes}} l-form__row i-form__item" {{ if (it.hide) { for (var i =0; i < it. hide.length; i++) { }} {{=it.hide[i].name + "-" + hash(it.hide[i].value)}}="yes" {{ } } }} {{ if (it.show) { for (var i =0; i < it.show.length; i++) { }} {{=it.show[i].name + "-" + hash(it.show[i].value)}}="yes" {{ } } }}>' + '<td colspan="3" class="l-form__col_type_fullwidth l-form__col l-form__col_cont_control">' + '{{=it.first}}' + '<table class="l-table-fullwidth">' + '<tbody class="b-table__tbody">' + '<tr>' + '<td class="l-form__col-control">' + '<div class="l-form__control-wr">{{=it.second}}</div>' + '</td>' + '<td class="l-form__col l-form__col_cont_hint">' + '<div class="field-help {{=it.hint}} hint" data-hint-mn="{{=it.fname}}" data-hint="{{=it.third}}"></div>' + '</td>' + '<td class="l-form__col l-form__col_cont_status">' + '<div class="field-status" ></div>' + '{{?it.devMode || it.testMode}}' + '<div class="field-settings">' + '{{?it.devMode}}' + '<a href="#" class="devel-link-settings devel-link-settings--field " data-elid="{{=it.fname}}" data-tabid="{{=it.tabId}}"></a>' + '<a href="#" class="devel-link-delete devel-link-delete--field" data-elid="{{=it.fname}}" data-name="{{=it.label}}" data-tabid="{{=it.tabId}}"></a>' + '{{??}}' + '<a href="#" class="testmode__form-link b-elem_style_gracescale" data-elid="{{=it.fname}}" data-tabid="{{=it.tabId}}"></a>' + '{{?}}' + '</div>' + '{{?}}' + '</td>' + '</tr>' + '<tr class="l-form__col-error">' + '<td colspan="3" class="error">' + '<div class="b-error-box__wrapper" data-id="{{=it.id}}">' + '<div class="b-error-box">' + '<div class="b-error-box__top-triangle"></div>' + '<div class="b-error-box__inner">{{=it.error}}</div>' + '</div>' + '</div>' + '</td>' + '</tr>' + '</tbody>' + '</table>' + '</td>' + '</tr>';
var formItemFormWidthRow = '<tr class="{{=it.classes}} l-form__row i-form__item" {{ if (it.hide) { for (var i =0; i < it. hide.length; i++) { }} {{=it.hide[i].name + "-" + hash(it.hide[i].value)}}="yes" {{ } } }} {{ if (it.show) { for (var i =0; i < it.show.length; i++) { }} {{=it.show[i].name + "-" + hash(it.show[i].value)}}="yes" {{ } } }}>' + '<td colspan="2" class="formwidth l-form__col l-form__col_cont_control">' + '{{=it.first}}' + '<table class="l-form__table-formwidth l-table-clean">' + '<tbody class="b-table__tbody">' + '<tr>' + '<td class="l-form__col-control">' + '<div class="l-form__control-wr">{{=it.second}}</div>' + '</td>' + '<td class="l-form__col l-form__col_cont_hint">' + '<div class="field-help {{=it.hint}} hint" data-hint-mn="{{=it.fname}}" data-hint="{{=it.third}}"></div>' + '</td>' + '<td class="l-form__col l-form__col_cont_status">' + '<div class="field-desc"></div>' + '<div class="field-status" ></div>' + '</td>' + '</tr>' + '<tr class="l-form__col-error">' + '<td colspan="3" class="error">' + '<div class="b-error-box__wrapper" data-id="{{=it.id}}">' + '<div class="b-error-box">' + '<div class="b-error-box__top-triangle"></div>' + '<div class="b-error-box__inner">{{=it.error}}</div>' + '</div>' + '</div>' + '</td>' + '</tr>' + '</tbody>' + '</table>' + '</td>' + '<td class="l-form__col l-form__col_cont_row-end"></td>' + '</tr>';
var formItemRowWithoutLabel = '<tr class="{{=it.classes}} l-form__row i-form__item without-label" {{ if (it.hide) { for (var i =0; i < it.hide.length; i++) { }} {{=it.hide[i].name + "-" + hash(it.hide[i].value)}}="yes" {{ } } }} {{ if (it.show) { for (var i = 0; i< it.show.length; i++) { }} {{=it.show[i].name + "-" + hash(it.show[i].value)}}="yes" {{ } } }}>' + '<td class="l-form__col l-form__col_cont_control" colspan="2">' + '<table class="l-table-clean">' + '<tbody class="b-table__tbody">' + '<tr>' + '<td class="l-form__col-control">' + '<div class="l-form__control-wr">{{=it.second}}</div>' + '</td>' + '<td class="l-form__col l-form__col_cont_hint">' + '<div class="field-help {{=it.hint}} hint" data-hint-mn="{{=it.fname}}" data-hint="{{=it.third}}"></div>' + '</td>' + '<td class="l-form__col l-form__col_cont_status">' + '<div class="field-desc">{{=it.desc}}</div>' + '<div class="field-status"></div>' + '{{?it.devMode}}' + '<div class="field-settings">' + '<a href="#" class="devel-link-settings devel-link-settings--field" data-elid="{{=it.fname}}" data-tabid="{{=it.tabId}}"></a>' + '<a href="#" class="devel-link-delete devel-link-delete--field" data-elid="{{=it.fname}}" data-name="{{=it.label}}" data-tabid="{{=it.tabId}}"></a>' + '</div>' + '{{?}}' + '</td>' + '</tr>' + '<tr class="l-form__col-error">' + '<td colspan="3" class="error">' + '<div class="b-error-box__wrapper" data-id="{{=it.id}}">' + '<div class="b-error-box">' + '<div class="b-error-box__top-triangle"></div>' + '<div class="b-error-box__inner">{{=it.error}}</div>' + '</div>' + '</div>' + '</td>' + '</tr>' + '</tbody>' + '</table>' + '<td class="l-form__col l-form__col_cont_row-end"></td>' +
// '</td>' +
'</tr>';
var formItemRowHidden = '<tr class="hidden l-form__row_type_hidden">' + '<td class="l-form__col l-form__col_cont_control" colspan="4">{{=it.second}}</td>' + '</tr>';
var formItemRowTextdata = '<tr class="{{=it.classes}} l-form__row i-form__item" {{ if (it.hide) { for (var i = 0; i < it.hide.length; i++) { }} {{=it.hide[i].name + "-" + hash(it.hide[i].value)}}="yes" {{ } } }} {{ if (it.show) { for (var i =0; i < it.show.length; i++) { }} {{=it.show[i].name + "-" + hash(it.show[i].value)}}="yes" {{ } } }}>' + '<td colspan="3">{{=it.second}}</td>' + '</tr>';
var formPlainHint = '<tr data-show-{{=it.name}}-{{=window.hash(it.key)}}="yes" class="depended-hidden-s l-form__row l-form__row_type_plainhint">' + '<td class="l-form__col-control" colspan="2">{{=window.htmlEncode(it.content)}}</td>' + '<td class="l-form__col l-form__col_cont_row-end"></td>' + '</tr>';
var tabLi = '<li class="tab-group" id="{{=it.tabId}}">' + '<span class="subtab switch first hint {{?it.isPin}}subtab_is_pin{{?}}" id="switch-{{=it.tabId}}" data-hint="{{=it.hint}}" data-tabid="{{=it.tabId}}">' + '<a href="#" data-tabid="{{=it.tabId}}"><div {{=it.pinIcon}}></div><span class="short">{{=it.shortTitle}}</span><span class="full">{{=it.title}}</span></a>' + '<a href="#" class="close" rel="{{=it.tabId}}"><div class="b-tab-close"></div></a>' + '</span>' + '</li>';
var tabChld = '<span id="{{=it.tabId}}"><span class="sepr"></span>' + '<span class="subtab switch hint" id="switch-{{=it.tabId}}" data-hint="{{=it.hint}}" data-tabid="{{=it.tabId}}">' + '<a href="#" data-tabid="{{=it.tabId}}"><span class="short">{{=it.shortTitle}}</span><span class="full">{{=it.title}}</span></a>' + '<a href="#" class="close" rel="{{=it.tabId}}"><div class="i-tab-close b-tab-close"></div></a>' + '</span>' + '</span>';
var progressBar = '<div id="{{=it.tabId}}-progressbar" class="b-progressbar__outer">' + '<div class="b-progressbar__inner">' + '<div class="b-progressbar__comment">{{=it.comment}}</div>' + '<div class="b-progressbar__loader-wr">' + '<div class="b-progressbar__loader {{=it.colorClass}}" style="width: {{=it.width}}%;">{{=it.per}}</div>' + '</div>' + '</div>' + '<div/>';
var reportBand = '<div class="band-content {{=it.fullwidth}}" id="{{=it.aid}}">' + '<div class="band-title {{=it.titleClass}}">{{=it.title}}</div>' + '<div class="band-graphic" ><div class="anychart" id="{{=it.gid}}">' +
//wrappers for graphics
'{{ for (var i = 0; i < it.dc; i++) { }}' + '<div id="{{=it.gid}}{{=i}}"></div>' + '{{ } }}' +
//wrappers for graphics
'</div></div>' + '<div class="band_show">' + '<div class="band_show_button {{=it.hidden}}" data-id="{{=it.id}}">' + '<span class="show_msg">{{=it.showMsg}}</span>' + '<span class="hide_msg">{{=it.hideMsg}}</span>' + '<span class="triangle-band"></span></div>' + '</div>' + '<div class="band-table block-table {{=it.hiddenClass}}" id="{{=it.id}}">{{=it.table}}</div>' + '</div>';
var emptyBandOverlay = '<div class="b-band__empty-overlay"></div>' + '<div class="b-band__empty-msg">{{=it.emptymsg}}</div>' + '<div class="b-band__empty-wrapper" id="{{=it.tabId}}-band-empty"></div>';
var reportBandDash = '<div class="band-content {{=it.fullwidth}}">' + '{{?it.empty}}' + emptyBandOverlay + '{{?}}' + '<div class="band-title {{=it.titleClass}}">{{=it.title}}</div>' + '<div id="{{=it.gid}}" class="band-chart-cont"></div></div>' + '</div>';
var fatalError = '<div id="fatal-error-{{=it.id}}" class="b-fatal-error b-err__{{=it.type}}">' + '<div class="b-fatal-error__round">' + '<div class="b-fatal-error__inner">' + '<div class="b-fatal-error__sign">' + '<div class="b-fatal-error__sign-top"></div>' + '<div class="b-fatal-error__sign-body"></div>' + '<div class="b-fatal-error__sign-empty"></div>' + '<div class="b-fatal-error__sign-dot"></div>' + '</div>' + '<div class="b-fatal-error__message">' + '{{=it.message}}' + '{{?it.ref}}' + '<div class="more b-fatal-error__more-link"><a href="{{=it.ref}}&newwindow=yes" target="_blank">{{=it.moreMsg}}</a></div>' + '{{?}}' + '{{?it.refreshLink}}' + '<div class="m-item b-fatal-error__refresh-link"><a href="#" data-url="{{=it.refreshLink}}" >{{=it.refreshLinkMsg}}</a></div>' + '{{?}}' + '</div>' + '{{?it.id}}' + '<div class="l-buttons l-buttons_for_fatalerror">' + '<div class="b-button b-button_type_cancel b-button_for_fatalerror i-button_type_cancel" data-flags="refresh" tabindex="0" data-tabid="{{=it.id}}">{{=it.msgClose}}</div>' + '</div>' + '{{?}}' + '</div>' + '</div>' + '<div class="b-fatal-error__triangle">' + '</div>' + '</div>';
var editinListForm = '<div>' + '<form id="editinlist-form-{{=it.id}}" class="l-form__row">' + '{{=it.field}}' + '<input type="hidden" name="elid" value="{{=it.elid}}" />' + '<input type="hidden" name="sok" value="ok" />' + '<input type="hidden" name="func" value="{{=it.func}}" />' + '</form>' + '<div class="l-buttons l-buttons_for_editinlist">' + '<div class="b-button b-button_style_small b-button_style_green i-btn-editlis-ok" data-id="{{=it.id}}">✔</div>' + '<div class="b-button b-button_style_small b-button_style_red i-btn-editlis-cancel" data-id="{{=it.id}}">✘</div>' + '</div>' + '<div id="err-cont-{{=it.id}}" class="editlist-err-cont"></div>' + '</div>';
var hintList = '{{?val.hintByName}}<div class="field-help field-help_available_yes hint b-form-list__hint" data-hint="{{=App.u.escapeQuote(val.hintByName)}}"></div>{{?}}';
var formListFilterWrapper = '<div id="{{=it.id}}-{{=it.name}}" data-type="listfilter">{{=it.content}}</div>';
var formListFilter = '<div class="checkbox i-form__item i-form-list__filter" data-srcname="{{=it.srcName}}" data-tabid="{{=it.id}}">' + '<div class="b-form-list__filter">' + '{{~it.list :val :ind}}' + '{{val.id = it.id;}}' + formItemCheckbox + '{{~}}' + '</div>' + '<div class="b-form-list__filter-clear i-form-list__filter-clear">{{=it.resetMsg}}</div>' + '<div class="b-form-list__filter-notfound">{{=it.notFoundMsg}}</div>' + '</div>';
var formListContent = '<div class="b-form-list b-form-list_view_{{=it.view}} i-form-list" id="form-list-{{=it.id}}-{{=it.name}}">\n <table class="b-form-list__table" data-name="{{=it.name}}" data-key="{{=it.key}}" id="inner-form-list-{{=it.id}}-{{=it.name}}">\n <tbody class="b-table__tbody">\n {{~it.rows :v :i}}\n <tr class="b-form-list__row b-form-list__row_t_{{?(i % 2) === 0}}even{{??}}odd{{?}}\n {{?it.filterfield && v[it.filterfield]}} row__has__tags\n {{~v[it.filterfield].v :val :ind}} filter__{{=val}} {{~}}{{??}} row__nohas__tags{{?}}">\n {{ for (var key in it.coldata) { }}\n <td class="b-form-list__col b-form-list__col_align_{{=it.coldata[key].align}} b-form-list__col_type_{{=it.coldata[key].type}} {{?v[key] && v[key].header}}b-form-list__col_header_yes{{?}} b-form-list__col_name_{{=key}}" data-colname="{{=key}}" style="width: {{=it.coldata[key].width}}; min-width: {{=it.coldata[key].width}}">\n <div class="b-form-list__col-inner b-form-list__col-inner_type_{{=it.coldata[key].type}} {{?it.coldata[key].hint && v[key + "_hint"]}}hint{{?}}" {{?it.coldata[key].hint && v[key + "_hint"]}}data-hint="{{=App.u.escapeQuote(v[key + "_hint"].v)}}" {{?}}>\n {{?v[key]}}\n {{?it.coldata[key].type === "data" || it.coldata[key].type === "msg" || v[key].header}}\n <div class="b-form-list__data {{?v[key].color}}status-{{=v[key].color}}{{?}} {{?it.testMode}}i-testmode-field{{?}}">\n {{~v[key].props :prop :index }}\n {{?index !== 0}}\n <div class="s-icon s16x16 props hint" style="background-image: url({{=prop.img}})" data-hint="{{=App.u.escapeQuote(prop.hint)}}"></div>\n {{?}}\n {{~}}\n {{=window.filterXSS(window.htmlDecode(v[key].v))}}</div>\n {{??it.coldata[key].type === "img"}}\n {{?v[key].src}}\n {{?v[key].preview}}\n <a href="{{=v[key].src}}" class="b-image-for-view" data-lightbox="formlist" target="_blank">\n {{?}}\n <img src="{{=v[key].src}}" class="b-form-list__img" width="{{=v[key].width}}" height="{{=v[key].height}}"/>\n {{?v[key].preview}}\n </a>\n {{?}}\n {{??v[key].img}}\n <div class="{{=v[key].img}}"></div>\n {{?}}\n {{??it.coldata[key].type === "button"}}\n {{~v[key] :val :ind}}\n ' + button + '\n {{~}}\n {{??it.coldata[key].type === "control"}}\n {{~v[key] :val :ind}}\n {{?val.type === "checkbox"}}\n {{val.id = it.id;}}\n <div class="i-form__item b-form-list__form-item"><div class="b-form-list__control-wrapper">' + formItemCheckbox + '</div>' + hintList + '</div>\n {{??val.type === "select"}}\n {{val.id = it.id;}}\n <div class="i-form__item b-form-list__form-item"><div class="b-form-list__control-wrapper">' + formItemSelect + '</div>' + hintList + '</div>\n {{??val.type === "text"}}\n {{val.id = it.id;}}\n <div class="i-form__item b-form-list__form-item"><div class="b-form-list__control-wrapper">' + formItemInput + '</div>' + hintList + '</div>\n {{?}}\n {{~}}\n {{?}}\n {{?}}\n </div>\n </td>\n {{ } }}\n </tr>\n {{~}}\n </tbody>\n </table>\n </div>';
var formListBlocksContent = '{{?it.label}}<h3 class="b-form-blocks__label">{{=it.label}}</h3>{{?}}' + '<div class="b-form-blocks">' + '{{~it.rows :v :i}}' + '<div class="b-form-blocks__block {{?it.filterfield && v[it.filterfield]}} row__has__tags' + '{{~v[it.filterfield].v :val :ind}} filter__{{=val}} {{~}}{{??}} row__nohas__tags{{?}}">' + '{{ for (var key in it.coldata) { }}' +
// '<td class="b-form-list__col align-{{=it.coldata[key].align}}" style="width: {{=it.coldata[key].width}};">' +
'<div class="b-form-list__col-inner b-form-blocks__col-inner_type_{{=it.coldata[key].type}}">' + '{{?v[key]}}' + '{{?it.coldata[key].type === "data" || it.coldata[key].type === "msg"}}' + '<div class="b-form-list__data {{?v[key].color}}status-{{=v[key].color}}{{?}}">{{=window.filterXSS(window.htmlDecode(v[key].v))}}</div>' + '{{??it.coldata[key].type === "img"}}' + '{{?v[key].src}}' + '<img src="{{=v[key].src}}" class="b-form-list__img" width="{{=v[key].width}}" height="{{=v[key].height}}"/>' + '{{??v[key].img}}' + '<div class="{{=v[key].img}}"></div>' + '{{?}}' + '{{??it.coldata[key].type === "button"}}' + '<div class="b-form-list__button-wrapper">' + '{{~v[key] :val :ind}}' + button + '{{~}}' + '</div>' + '{{?}}' + '{{?}}' + '</div>' +
// '</td>' +
'{{ } }}' + '</div>' + '{{~}}' + '</div>';
var formListItemRow = '<tr class="{{=it.classes}} l-form__row" {{ if (it.hide) { for (var i =0; i < it.hide.length; i++) { }} {{=it.hide[i].name + "-" + hash(it.hide[i].value)}}="yes" {{ } } }} {{ if (it.show) { for (var i =0; i < it.show.length; i++) { }} {{=it.show[i].name + "-" + hash(it.show[i].value)}}="yes" {{ } } }}>' + '<td class="l-form__col l-form__col_cont_control" colspan="3">' + '<div id="{{=it.id}}-{{=it.name}}" class="{{=it.id}}-list" data-type="list" data-name="{{=it.name}}">' + '{{?it.view == "block"}}' + formListBlocksContent + '{{??}}' + formListContent + '{{?}}' + '</div>' + '</td>' + '</tr>';
var tip = '<div class="b-tip b-tip_name_{{=it.name}}">' + '<div class="b-tip__inner">' + '{{=it.content}}' + '</div>' + '<div class="b-tip__close" data-name="{{=it.name}}"></div>' + '</div>';
var usefulLinks = '<div class="b-useful-links {{?it.isCollapsed}}b-useful-links_is_collapsed{{?}}">' + '<div class="b-tip__close i-userful-links-collapse"></div>' + '<div class="b-tip__inner">' + '<div class="b-useful-links__title">{{=it.title}}</div>' + '<div class="b-useful-links__content">{{=it.content}}</div>' + '</div>' + '</div>';
var infoList = '<div class="b-infolist">' + '<table class="b-infolist__table">' + '<tbody class="b-table__tbody">' + '{{~it.rows :v :i}}' + '<tr class="b-infolist__row {{?v.type === "header"}}b-infolist__row_type_header{{?}}">' + '{{?v.type === "header"}}' + '<td class="b-infolist__col b-infolist__col_type_header" colspan="2">{{=v.label}}</td>' + '{{??v.type === "data"}}' + '<td class="b-infolist__col b-infolist__col_type_label">{{=v.label}}</td>' + '<td class="b-infolist__col b-infolist__col_type_value status-{{=v.color}} {{?it.testMode}}i-testmode-field{{?}} hint" data-hint="{{=v.hint}}" data-name="{{=v.name}}">{{=v.value}}</td>' + '{{??v.type === "link"}}' + '<td class="b-infolist__col b-infolist__col_type_label">{{=v.label}}</td>' + '{{?v.link}}' + '<td class="b-infolist__col b-infolist__col_type_value m-item"><a href="#" data-url="{{=v.link}}" data-name="{{=v.name}}" data-hint="{{=v.hint}}" class="i-menu-link b-infolist__col_type_value {{?it.testMode}}i-testmode-field{{?}} hint">{{=v.value}}</a></td>' + '{{??v.url}}' + '<td class="b-infolist__col b-infolist__col_type_value"><a href="{{=v.url}}" target="_blank" class="b-infolist__col_type_value {{?it.testMode}}i-testmode-field{{?}} hint" data-hint="{{=v.hint}}">{{=v.value}}</a></td>' + '{{?}}' + '{{??v.type === "indicator"}}' + '<td class="b-infolist__col b-infolist__col_type_label">{{=v.label}}</td>' + '<td class="b-infolist__col b-infolist__col_type_value m-item {{?it.testMode}}i-testmode-field{{?}}" data-name="{{=v.name}}">{{=v.value}} (<span class="status-{{=v.color}}">{{=v.suffix}}</span>)</td>' + '{{?}}' + '</tr>' + '{{~}}' + '</tbody>' + '</table>' + '</div>';
var licenseDashBlock = '<div class="b-license-block">\n <div class="b-license-block__line">{{=it.msg_limit}}:\n {{?it.limit_webdomain === \'infinit\'}} {{=it.msg_infinit}} {{??}}\n {{=it.msg_before}} {{=it.limit_webdomain}} {{=it.msg_domains}} <span class="{{?it.left_webdomain_warn}}b-license-block__warning{{?}}">({{=it.msg_left}} {{=it.left_webdomain}})</span>\n {{?}}\n </div>\n <div class="b-license-block__line">{{=it.msg_version}}: {{=it.version}} \n {{?it.has_update}}<a class="b-menu-item b-license-block__update" data-url="?func={{=it.update_func}}">{{=it.msg_update_panel}}</a>{{?}}\n </div>\n {{?it.limit_webdomain !== \'infinit\'}} \n <div class="b-button b-menu-item" data-url="?func={{=it.change_limit_func}}">{{=it.msg_change_limit}}</div>\n {{?}}\n <div class="b-button b-button_type_cancel b-menu-item" data-url="?func={{=it.details_func}}">{{=it.msg_details}}</div>\n </div>';
var updateToIsp6 = '\n <div class="b-update-block">\n <p class="b-update-block__text">{{=it.msg_created}} {{=it.used_webdomain}}{{=it.msg_webdomains}} {{=it.msg_recommended}} <strong>{{=it.recommended_pricelist}}</strong>{{?it.recommended_unlimit === \'on\'}}{{=it.msg_unlimit_allows_use}}{{??}}{{=it.msg_limit_allows_use}} {{=it.recommended_count}} {{?}} {{=it.msg_sites}}</p>\n <div class="b-button b-menu-item" data-url="?func={{=it.pricelist_func}}">{{=it.msg_change_pricelist}}</div>\n <div class="b-button b-button_type_cancel b-menu-item" data-url="?func={{=it.changes_func}}">{{=it.msg_changelog}}</div>\n </div>\n ';
var fatalAlert = '<div class="b-alert__inner {{?it.refreshLink}} b-alert__inner_t_refresh-link{{?}}">' + '<div class="b-alert__icon">' + '<div class="b-alert__sign">' + '<div class="b-alert__sign-top"></div>' + '<div class="b-alert__sign-body"></div>' + '<div class="b-alert__sign-empty"></div>' + '<div class="b-alert__sign-dot"></div>' + '</div>' + '</div>' + '<div class="b-alert__msg-outter"><div class="b-alert__msg">{{=it.msg}}</div></div>' + '{{?it.ref}}' + '<div class="more b-fatal-error__more-link">' + '<a href="{{=it.ref}}" target="_blank">{{=it.moreMsg}}</a>' + '</div>' + '{{?}}' + '{{?it.refreshLink}}' + '<div class="m-item b-fatal-error__refresh-link">' + '<a href="#" data-url="{{=it.refreshLink}}" >{{=it.refreshLinkMsg}}</a>' + '</div>' + '{{?}}' + '</div>' + '<div class="b-alert__clear"></div>';
var msgTemplList = '<div class="b-msg-templ" data-target="{{=it.id}}">' + '<div class="b-msg-templ__table">' + '<div class="b-msg-templ__table-col b-msg-templ__table-col_content_yes">' + '<ul class="b-msg-templ__title-content">' + '{{~it.templList :v :i}}' + '<li class="b-msg-templ__title-content-item b-msg-templ__title-content-item_ind_{{=i}}">{{=v.msg}}</li>' + '{{~}}' + '</ul>' + '</div>' + '<div class="b-msg-templ__table-col b-msg-templ__table-col_title_yes">' + '<ul class="b-msg-templ__title-list">' + '{{~it.templList :v :i}}' + '{{?i !== 0}}<li class="b-msg-templ__title-list-item b-msg-templ__title-list-item_is_comma">, </li>{{?}}<li class="b-msg-templ__title-list-item" data-ind="{{=i}}" data-id="{{=v.id}}">{{=v.name}}</li>' + '{{~}}' + '</ul>' + '</div>' + '</div>' + '</div>';
var t = doT.template,
vSettings = {};
$.extend(vSettings, doT.templateSettings, { varname: 'val' });
return {
tabCont: t(tabCont),
tabContEmpty: t(tabContEmpty),
tabContForm: t(tabContForm),
tabContMap: t(tabContMap),
listPager: t(listPager),
tabContDashBoard: t(tabContDashBoard),
tabLi: t(tabLi),
tabChld: t(tabChld),
formPageTitle: t(formPageTitle),
formItemInput: t(formItemInput, vSettings),
formItemCaptcha: t(formItemCaptcha),
formItemFile: t(formItemFile),
formItemPassword: t(formItemPassword),
formItemInputWithZoom: t(formItemInputWithZoom),
formItemInputWithZoom1: t(formItemInputWithZoom1),
formItemTextarea: t(formItemTextarea),
formItemCheckbox: t(formItemCheckbox, vSettings),
formItemLabel: t(formItemLabel),
formItemExtrBtn: t(formItemExtrBtn),
formItemDesk: t(formItemDesk),
formItemDeskRadio: t(formItemDeskRadio),
formItemSelect: t(formItemSelect, vSettings),
formItemSelectList: t(formItemSelectList, vSettings),
formItemMSelect: t(formItemMSelect),
formItemHtmldata: t(formItemHtmldata),
formItemTicket: t(formItemTicket),
formItemLink: t(formItemLink),
formItemSelectAutocomplete: t(formItemSelectAutocomplete),
formItemTicketMsg: t(formItemTicketMsg),
formPageWrapper: t(formPageWrapper),
formItemRow: t(formItemRow),
formItemFullWidthRow: t(formItemFullWidthRow),
formItemFormWidthRow: t(formItemFormWidthRow),
formItemRowWithoutLabel: t(formItemRowWithoutLabel),
formItemRowTextdata: t(formItemRowTextdata),
formItemRowHidden: t(formItemRowHidden),
formItemFrame: t(formItemFrame),
formListContent: t(formListContent),
formListBlocksContent: t(formListBlocksContent),
filterWrapper: t(filterWrapper),
filterSavedItem: t(filterSavedItem),
filterRow: t(filterRow),
filterItemLabel: t(filterItemLabel),
filterItem: t(filterItem),
formItemRowDesc: t(formItemRowDesc),
formListItemRow: t(formListItemRow),
formPlainHintRow: t(formPlainHint),
formItemSlider: t(formItemSlider),
formItemMgrview: t(formItemMgrview),
formItemRadio: t(formItemRadio),
formItemRadioImg: t(formItemRadioImg),
formItemTextData: t(formItemTextData),
dashTaskbar: t(dashTaskbar),
progressBar: t(progressBar),
reportBand: t(reportBand),
reportBandDash: t(reportBandDash),
banner: t(banner),
buttons: t(buttons),
fatalError: t(fatalError),
passwdCheck: t(passwdCheck),
editinListForm: t(editinListForm),
confirmCheck: t(confirmCheck),
formItemSliderEditInList: t(formItemSliderEditInList),
tip: t(tip),
infoList: t(infoList),
fatalAlert: t(fatalAlert),
msgTemplList: t(msgTemplList),
emptyBandOverlay: t(emptyBandOverlay),
usefulLinks: t(usefulLinks),
formListFilter: t(formListFilter),
formListFilterWrapper: t(formListFilterWrapper),
formItemDateTime: t(formItemDateTime),
licenseDashBlock: t(licenseDashBlock),
updateToIsp6: t(updateToIsp6)
};
}();
//# sourceMappingURL=templates.js.map
'use strict';
// Event manager
//@todo unit test
var EventMgr = {
o: function o() {
'use strict';
return $('body');
},
hooks: {},
isTouch: function isTouch() {
return navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/webOS/i) || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPod/i) || navigator.userAgent.match(/BlackBerry/i) || navigator.userAgent.match(/Windows Phone/i);
},
touchEvents: {},
touchData: {},
/**
* bind custom event
* @this {EventMgr} EventMgr object
*/
bind: function bind(event, callback) {
'use strict';
var events = event.split(','),
l = event.length;
while (l--) {
this.o().on(events[l], callback);
}
},
/**
* bind custom event for one time
* @this {EventMgr} EventMgr object
*/
one: function one(event, callback, data) {
'use strict';
var events = event.split(','),
l = event.length;
while (l--) {
this.o().one(events[l], data, callback);
}
},
/**
* wrapper for jQuery.one
*/
oone: function oone(object, event, callback) {
'use strict';
if (typeof object === 'string') {
$(object).one(event, callback);
} else {
object.one(event, callback);
}
},
/**
* wrapper for jQuery.obind
*/
obind: function obind(object, event, callback) {
'use strict';
var touch;
if (event === 'click' && this.isTouch() && typeof object === 'string') {
event = 'touchstart';
touch = true;
}
if (!touch) {
if (typeof object === 'string') {
$(object).on(event, callback);
} else {
object.on(event, callback);
}
} else {
var data = {
eventMgr: this,
cb: callback
};
if (typeof object === 'string') {
data.innerSelect = object;
$(object).on(event, data, this.touchStart);
// $(object).on('touchmove', data, this.touchMove);
$(object).on('touchend', data, this.touchEnd);
}
}
},
/**
* wrapper for jQuery.on
* */
on: function on(outObject, innerSelect, event, callback) {
'use strict';
var touch = false;
if (event === 'click' && this.isTouch()) {
event = 'touchstart';
touch = true;
}
if (!touch) {
if (typeof outObject === 'string') {
$(outObject).on(event, innerSelect, callback);
} else {
outObject.on(event, innerSelect, callback);
}
} else {
var data = {
innerSelect: innerSelect,
eventMgr: this,
cb: callback
};
if (typeof outObject === 'string') {
$(outObject).on(event, innerSelect, data, this.touchStart);
//$(outObject).on('touchmove', innerSelect, data, this.touchMove);
$(outObject).on('touchend', innerSelect, data, this.touchEnd);
} else {
outObject.on(event, innerSelect, data, this.touchStart);
//outObject.on('touchmove', innerSelect, data, this.touchMove);
outObject.on('touchend', innerSelect, data, this.touchEnd);
}
}
},
/**
* allow hooks for original events
* @this {EventMgr} EventMgr object
*/
onwithdata: function onwithdata(outObject, innerSelect, event, customEvent, callback) {
'use strict';
var data = {
targetEvent: customEvent,
targetCallback: callback,
eventMgr: this,
innerSelect: innerSelect,
withData: true
},
touch = false;
if (event === 'click' && this.isTouch()) {
event = 'touchstart';
touch = true;
}
if (!touch) {
if (typeof outObject === 'string') {
$(outObject).on(event, innerSelect, data, this.onwithdataHandler);
} else {
outObject.on(event, innerSelect, data, this.onwithdataHandler);
}
} else {
if (typeof outObject === 'string') {
$(outObject).on(event, innerSelect, data, this.touchStart);
//$(outObject).on('touchmove', innerSelect, data, this.touchMove);
$(outObject).on('touchend', innerSelect, data, this.touchEnd);
} else {
outObject.on(event, innerSelect, data, this.touchStart);
//outObject.on('touchmove', innerSelect, data, this.touchMove);
outObject.on('touchend', innerSelect, data, this.touchEnd);
}
}
},
touchStart: function touchStart(e) {
e.preventDefault();
var selector = e.data.innerSelect,
em = e.data.eventMgr;
em.touchEvents[selector] = true;
},
touchMove: function touchMove(e) {
var selector = e.data.innerSelect,
em = e.data.eventMgr;
em.touchEvents[selector] = false;
},
touchEnd: function touchEnd(e) {
var selector = e.data.innerSelect,
em = e.data.eventMgr;
if (em.touchEvents[selector]) {
if (e.data.withData) {
em.onwithdataHandler.apply(this, [e]);
em.touchEvents[selector] = false;
} else {
e.data.cb.apply(this, [e]);
em.touchEvents[selector] = false;
}
}
},
/**
* handler for onwithdata
* @this {HTMLNode} HTMLNode
*/
onwithdataHandler: function onwithdataHandler(e) {
'use strict';
var eventData = e.data,
targetEvent = eventData.targetEvent,
targetCallback = eventData.targetCallback,
data = {},
self = eventData.eventMgr;
if (this) {
data.tabId = this.getAttribute('data-tabid');
data.elemId = this.getAttribute('data-elemid');
}
if (targetEvent) {
if (self.hooks[targetEvent] && self.hooks[targetEvent].length > 0) {
var l = self.hooks[targetEvent].length;
while (l--) {
if (typeof self.hooks[targetEvent][l] === 'function') {
self.hooks[targetEvent][l].apply(window, [data]);
}
}
}
}
if (typeof targetCallback === 'function') {
targetCallback.apply(this, [e, data]);
}
},
/**
* wrapper for jQuery.off
*/
off: function off(outObject, event) {
'use strict';
if (typeof outObject === 'string') {
$(outObject).off(event);
} else {
outObject.off(event);
}
},
/**
* unbind event
* @this {EventMgr} EventMgr object
*/
unbind: function unbind(event, callback) {
'use strict';
var events = event.split(','),
l = event.length;
while (l--) {
this.o().off(events[l], callback);
}
},
/**
* wrapper for jQuery.trigger
* @this {EventMgr} EventMgr object
*/
trigger: function trigger(event, data, delay) {
'use strict';
if (delay) {
setTimeout(function (self) {
return function () {
if (typeof event !== 'string') {
console.log('event !== string in trigger', event, data);
event = String(event);
}
self.o().trigger(event, data);
};
}(this), delay);
} else {
if (this.hooks[event] && this.hooks[event].length > 0) {
var l = this.hooks[event].length;
while (l--) {
if (typeof this.hooks[event][l] === 'function') {
this.hooks[event][l].apply(window, [data]);
}
}
}
if (typeof event !== 'string') {
console.log('event !== string in trigger', event, data);
event = String(event);
}
this.o().trigger(event, data);
}
if (this.triggerStack[event]) {
this.triggerStackHandler(event, data);
}
},
triggerStack: {},
/**
* add to trigger stack
* @param {String} event event name
* @param {function} func function for call
* @param {number} priority stack call order
* @this {EventMgr} EventMgr object
*/
addToTriggerStack: function addToTriggerStack(event, func, priority) {
if (!this.triggerStack[event]) {
this.triggerStack[event] = [];
}
this.triggerStack[event].push({
func: func,
priority: priority
});
this.triggerStack[event].sort(this.prioritySort);
},
triggerStackHandler: function triggerStackHandler(event, data) {
if (this.triggerStack[event]) {
var l = this.triggerStack[event].length;
for (var i = 0; i < l; i++) {
if (typeof this.triggerStack[event][i].func === 'function') {
//break if return true
if (this.triggerStack[event][i].func.apply(window, [{}, data])) {
break;
}
}
}
}
},
prioritySort: function prioritySort(a, b) {
return a.priority - b.priority;
},
/**
* add hook for custom event
* @this {EventMgr} EventMgr object
*/
addHook: function addHook(event, callback) {
'use strict';
var events = event.split(','),
l = event.length;
while (l--) {
if (this.hooks[events[l]]) {
this.hooks[events[l]].push(callback);
} else {
this.hooks[events[l]] = [];
this.hooks[events[l]].push(callback);
}
}
},
/**
* remove hook
* @this {EventMgr} EventMgr object
*/
deleteHook: function deleteHook(event, callback) {
'use strict';
if (this.hooks[event]) {
var len = this.hooks[event].length - 1,
ar = this.hooks[event];
for (var i = len; i <= 0; i--) {
if (ar(i) === callback) {
ar.slice(i, i);
}
}
}
}
};
//# sourceMappingURL=eventmgr.js.map
'use strict';
/**
* ScrollHandler
* @class
*/
var ScrollHandler = function () {
'use strict';
var shiftY = 0,
shiftX = 0,
SCROLLBAR_INIT_CLASS = 'scrollbar-init',
VERTICAL_SCROLL_CLASS = 'vertical-scroll',
bigObj = {},
/**
* Current Scroll object
*/
curObj = {
/**
* Object id
*/
objId: null,
/**
* Wrapper id
*/
contId: null,
/**
* Wrapper id
*/
obj: null,
/**
* HTML Object of Object
*/
cont: null,
/**
* HTML Object of ScrollHandler
*/
sh: null,
/**
* Visible height (wrapper's height)
*/
vh: null,
/**
* Scroll handler height
*/
sch: null
},
moveObj = {},
//temp object moved elems
down = false,
//go down
/* jslint evil:true */
isIe = !!window.execScript,
/* jslint evil:false */
up = false,
// go up
left = false,
//go left
right = false,
//go right
intId = null,
/**
* Block not needed events when scrolling
*/
blockEvent = 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;
}
},
/**
* Handler for mouseup
* unbind mouseup/touchend handlers
*/
mouseUp = function mouseUp() {
down = false;
up = false;
left = false;
right = false;
document.onmouseup = null;
document.ontouchend = null;
},
/**
* Set Position for object and scrollhandler
*/
lastValues = {},
setPosition = function setPosition(newPosition) {
var sTop,
scrollTop,
middle = false,
top = false,
bottom = false;
if (newPosition <= moveObj.vh - moveObj.sch && newPosition >= 0) {
sTop = newPosition;
middle = true;
} else if (newPosition > moveObj.vh - moveObj.sch) {
sTop = moveObj.vh - moveObj.sch;
bottom = true;
} else {
sTop = 0;
top = true;
}
moveObj.sh.style.top = sTop + 'px';
scrollTop = Math.round(sTop * moveObj.delta);
if (isIe) {
moveObj.cont.scrollTop = 0;
moveObj.obj.style.marginTop = scrollTop * -1 + 'px';
} else {
moveObj.cont.scrollTop = scrollTop;
moveObj.sw.style.top = scrollTop + 'px';
}
if (lastValues[moveObj.contId] !== sTop) {
var body = document.querySelector('body') || document.body,
event;
try {
event = new CustomEvent('verticalScroll', { 'detail': {
top: top,
middle: middle,
bottom: bottom,
id: moveObj.contId } });
body.dispatchEvent(event);
} catch (e) {}
}
lastValues[moveObj.contId] = sTop;
return false;
},
/**
* Set Position for horizontal object and scrollhandler
*/
setPositionHor = function setPositionHor(newPosition) {
var sLeft, scrollLeft;
if (newPosition <= moveObj.vw - moveObj.schH && newPosition >= 0) {
sLeft = newPosition;
} else if (newPosition > moveObj.vw - moveObj.schH) {
sLeft = moveObj.vw - moveObj.schH;
} else {
sLeft = 0;
}
moveObj.hSh.style.left = sLeft + 'px';
scrollLeft = Math.round(sLeft * moveObj.deltaH);
if (isIe) {
moveObj.cont.scrollLeft = 0;
moveObj.obj.style.marginLeft = scrollLeft * -1 + 'px';
} else {
moveObj.cont.scrollLeft = scrollLeft;
moveObj.hSw.style.left = scrollLeft + 'px';
}
return false;
},
/**
* Mouse wheel handler
*/
wheel = function wheel(e) {
e = e || window.event;
var wheelDelta = 0,
id = this.getAttribute('id'),
currentPosition,
newPosition,
direction,
delta,
STEP = 64;
moveObj = bigObj[id];
//check for exist scroll
if (!moveObj) {
return;
}
delta = moveObj.delta;
//detect direction
if (e.wheelDelta) {
direction = e.wheelDelta > 0 ? -1 : 1;
} else if (e.detail) {
direction = e.detail < 0 ? -1 : 1;
}
//check for native scroll
if (e.target) {
var target = e.target;
//check for scroll
//target.clientHeight > 0 ==> for opera
if (target.clientHeight < target.scrollHeight && target.clientHeight > 0 && target.nodeName === 'TEXTAREA') {
//scroll down
if (
//(target.clientHeight + 1) ==> for safari
direction === 1 && target.scrollTop < target.scrollHeight - (target.clientHeight + 1) || direction === -1 && target.scrollTop !== 0) {
return true;
}
}
}
if (e.wheelDelta) {
wheelDelta = -e.wheelDelta / 2.5;
} else if (e.detail) {
//for FF
wheelDelta = e.detail * 16;
}
if (wheelDelta) {
currentPosition = parseFloat(moveObj.sh.style.top);
newPosition = wheelDelta / delta + currentPosition;
setPosition(newPosition);
}
blockEvent(e);
},
/**
* Scroll mover by UP/DOWN scroll btn
*/
scrollMove = function scrollMove(stopPos) {
var currentPosition,
mDelta,
newPosition,
magicNumber = 5;
if (!moveObj) {
clearInterval(intId);
}
currentPosition = parseFloat(moveObj.sh.style.top);
mDelta = magicNumber / moveObj.delta;
if (up) {
newPosition = currentPosition - mDelta;
setPosition(newPosition);
if (stopPos && newPosition < stopPos) {
clearInterval(intId);
}
} else if (down) {
newPosition = mDelta + currentPosition;
setPosition(newPosition);
if (stopPos && newPosition > stopPos) {
clearInterval(intId);
}
} else {
clearInterval(intId);
}
},
/**
* Scroll mover horizontal by UP/DOWN scroll btn
*/
scrollMoveHoriz = function scrollMoveHoriz(stopPos) {
var currentPosition,
mDelta,
newPosition,
magicNumber = 5;
if (!moveObj) {
clearInterval(intId);
}
currentPosition = parseFloat(moveObj.hSh.style.left);
mDelta = magicNumber / moveObj.deltaH;
if (left) {
newPosition = currentPosition - mDelta;
setPositionHor(newPosition);
if (stopPos && newPosition < stopPos) {
clearInterval(intId);
}
} else if (right) {
newPosition = mDelta + currentPosition;
setPositionHor(newPosition);
if (stopPos && newPosition > stopPos) {
clearInterval(intId);
}
} else {
clearInterval(intId);
}
},
/**
* Handler for button move up
*/
moveUp = function moveUp(id, stopPos) {
var doc = document,
timeOut = stopPos !== undefined ? 1 : 10;
moveObj = bigObj[id];
up = true;
//some issues about
if (!('ontouchstart' in doc.documentElement)) {
doc.onmouseup = mouseUp;
}
//for touchpads
doc.ontouchend = mouseUp;
doc.ontouchcancel = mouseUp;
scrollMove(stopPos);
intId = setInterval(function () {
scrollMove(stopPos);
}, timeOut);
},
moveUpHandler = function moveUpHandler(e) {
e = e || window.event;
var id = this.getAttribute('id').replace('-top-button', '');
moveUp(id);
blockEvent(e);
return false;
},
moveLeftHandler = function moveLeftHandler(e) {
e = e || window.event;
var id = this.getAttribute('id').replace('-left-button', '');
moveLeft(id);
blockEvent(e);
return false;
},
moveLeft = function moveLeft(id, stopPos) {
var doc = document,
timeOut = stopPos !== undefined ? 1 : 10;
moveObj = bigObj[id];
left = true;
//some issues about
if (!('ontouchstart' in doc.documentElement)) {
doc.onmouseup = mouseUp;
}
//for touchpads
doc.ontouchend = mouseUp;
doc.ontouchcancel = mouseUp;
scrollMoveHoriz(stopPos);
intId = setInterval(function () {
scrollMoveHoriz(stopPos);
}, timeOut);
},
/**
* Handler for button move down
*/
moveDown = function moveDown(id, stopPos) {
var doc = document,
timeOut = stopPos !== undefined ? 1 : 10;
moveObj = bigObj[id];
down = true;
if (!('ontouchstart' in doc.documentElement)) {
doc.onmouseup = mouseUp;
}
//for touchpads
doc.ontouchend = mouseUp;
doc.ontouchcancel = mouseUp;
scrollMove(stopPos);
intId = setInterval(function () {
scrollMove(stopPos);
}, timeOut);
},
moveDownHandler = function moveDownHandler(e) {
e = e || window.event;
var id = this.getAttribute('id').replace('-bottom-button', '');
moveDown(id);
blockEvent(e);
return false;
},
moveRightHandler = function moveRightHandler(e) {
e = e || window.event;
var id = this.getAttribute('id').replace('-right-button', '');
moveRight(id);
blockEvent(e);
return false;
},
moveRight = function moveRight(id, stopPos) {
var doc = document,
timeOut = stopPos !== undefined ? 1 : 10;
moveObj = bigObj[id];
right = true;
if (!('ontouchstart' in doc.documentElement)) {
doc.onmouseup = mouseUp;
}
//for touchpads
doc.ontouchend = mouseUp;
doc.ontouchcancel = mouseUp;
scrollMoveHoriz(stopPos);
intId = setInterval(function () {
scrollMoveHoriz(stopPos);
}, timeOut);
},
/**
* Cancel scroll, hide scroll handler
* @param {curObj} obj Current object
*/
cancelScroll = function cancelScroll(obj) {
if (!obj) {
return;
}
//need to fix
obj.sh.style.display = 'none';
obj.vstatus = true;
obj.cont.style.overflowY = '';
//hide horiz scroll
if (obj.hs) {
obj.vstatus = false;
obj.sw.style.display = 'none';
obj.cont.style.paddingRight = '0px';
// $(obj.cont).removeClass('vertical-scroll');
}
$(obj.cont).removeClass(VERTICAL_SCROLL_CLASS);
$(obj.cont.parentNode).removeClass('vertical-scroll-child');
//this._curObj.sh = null;
obj.cont.onmousewheel = null;
obj.bb.onmousedown = null;
obj.tb.onmousedown = null;
obj.cont.onkeydown = null;
if (isIe) {
obj.obj.style.marginTop = 0;
}
obj.cont.scrollTop = 0;
obj.sh.style.top = 0 + 'px';
obj.sw.style.top = 0 + 'px';
if (obj.contWheelEvent) {
obj.cont.removeEventListener('DOMMouseScroll', wheel, false);
obj.contWheelEvent = false;
}
},
/**
* Cancel horiz scroll, hide scroll handler
* @param {curObj} obj Current object
*/
cancelScrollHoriz = function cancelScrollHoriz(obj) {
if (!obj) {
return;
}
//need to fix
obj.hSh.style.display = 'none';
obj.cont.style.overflowX = '';
obj.hstatus = true;
if (!obj.hss) {
obj.hstatus = false;
obj.hSw.style.display = 'none';
$(obj.cont).removeClass('horizontal-scroll');
obj.cont.paddingBottom = '0px';
}
//this._curObj.sh = null;
obj.hBb.onmousedown = null;
obj.hTb.onmousedown = null;
if (isIe) {
obj.obj.style.marginLeft = 0;
}
obj.cont.scrollLeft = 0 + 'px';
obj.hSh.style.top = 0 + 'px';
},
/**
* Update scroll method
*/
updateFunc = function updateFunc(key) {
if (bigObj[key] === undefined) {
return;
}
var scrollCorrect = 36,
swStyle,
tmpHeight,
scrollTop,
curObjUp;
curObjUp = bigObj[key];
curObjUp.cont.className += ' ' + SCROLLBAR_INIT_CLASS;
if (curObjUp.hstatus) {
scrollCorrect += 18;
}
//trackHeight
var visibleHeight = curObjUp.cont.clientHeight,
scrollTrackHeight = visibleHeight - scrollCorrect,
deltaTop = curObjUp.obj.offsetTop > 0 ? curObjUp.obj.offsetTop : 0,
allHeight = curObjUp.obj.offsetHeight + deltaTop,
deltaAV = allHeight / visibleHeight,
scrollHandlerHeight = scrollTrackHeight / deltaAV,
delta = allHeight / scrollTrackHeight;
//if hide element exit
if (visibleHeight === 0) {
return;
}
curObjUp.vh = scrollTrackHeight;
//all height, object height
//var sch = (visibleHeight) / (allHeight /
// (visibleHeight + scrollCorrect));
if (scrollHandlerHeight < 25) {
scrollHandlerHeight = 25;
delta = (allHeight - (scrollTrackHeight + scrollCorrect)) / (scrollTrackHeight - 25);
}
//size of step
curObjUp.delta = delta;
curObjUp.sch = scrollHandlerHeight;
//check for nothing scroll
tmpHeight = scrollTrackHeight + scrollCorrect;
if (scrollTrackHeight < scrollCorrect || scrollHandlerHeight > scrollTrackHeight || tmpHeight === allHeight) {
cancelScroll(curObjUp);
//scrollHandlerHeight = scrollTrackHeight;
} else {
//set scroll handler size
swStyle = curObjUp.sw.style;
//keep state
curObjUp.cont.scrollTop = parseFloat(swStyle.top);
//swStyle.top = curObjUp.cont.scrollTop;
curObjUp.sh.style.height = scrollHandlerHeight + 'px';
curObjUp.sh.style.display = 'block';
swStyle.display = 'block';
curObjUp.cont.style.paddingRight = '18px';
curObjUp.cont.style.overflowY = 'hidden';
if (curObjUp.cont.className.indexOf(VERTICAL_SCROLL_CLASS) === -1) {
curObjUp.cont.className += ' ' + VERTICAL_SCROLL_CLASS;
curObjUp.cont.parentNode.className += ' vertical-scroll-child';
}
if (!curObjUp.contWheelEvent) {
curObjUp.cont.addEventListener('DOMMouseScroll', wheel, false);
curObjUp.contWheelEvent = true;
}
curObjUp.cont.onmousewheel = wheel;
curObjUp.bb.onmousedown = moveDownHandler;
curObjUp.tb.onmousedown = moveUpHandler;
//check real behavior
if (parseInt(curObjUp.sh.style.top, 10) + curObjUp.sch > curObjUp.vh) {
curObjUp.sh.style.top = curObjUp.vh - curObjUp.sch + 'px';
scrollTop = (curObjUp.vh - curObjUp.sch) * curObjUp.delta;
swStyle.top = scrollTop + 'px';
curObjUp.cont.scrollTop = scrollTop;
}
}
bigObj[key] = curObjUp;
curObjUp.cont.className = curObjUp.cont.className.replace(SCROLLBAR_INIT_CLASS, ' ');
curObjUp = null;
},
/**
* Update horiz scroll method
*/
updateFuncHoriz = function updateFuncHoriz(key) {
if (bigObj[key] === undefined) {
return;
}
var scrollCorrect = 36,
curObjUp = bigObj[key],
vw,
aw,
delta,
sch;
if (curObjUp.vstatus) {
scrollCorrect += 18;
}
vw = curObjUp.cont.offsetWidth - scrollCorrect;
curObjUp.vw = vw;
//ll height, object height
aw = curObjUp.obj.offsetWidth;
delta = aw / vw;
//scroll height
sch = vw / (aw / (vw + scrollCorrect));
if (sch < 25) {
//var dp = 25 - sch;
sch = 25;
delta = (aw - (vw + scrollCorrect)) / (vw - 25);
}
//size of step
curObjUp.deltaH = delta;
curObjUp.schH = sch;
//check for nothing scroll
if (vw < scrollCorrect || sch > vw || vw + scrollCorrect === aw) {
cancelScrollHoriz(curObjUp);
//sch = vw;
} else {
//set scroll handler size
curObjUp.hSh.style.width = sch + 'px';
curObjUp.hSw.style.display = 'block';
curObjUp.hSh.style.display = 'block';
curObjUp.cont.style.overflowX = 'hidden';
curObjUp.cont.style.paddingBottom = '18px';
curObjUp.hBb.onmousedown = moveRightHandler;
curObjUp.hTb.onmousedown = moveLeftHandler;
//check real behavior
if (parseInt(curObjUp.hSh.style.top, 10) + curObjUp.schH > curObjUp.vw) {
curObjUp.hSh.style.left = curObjUp.vw - curObjUp.schH + 'px';
curObjUp.obj.scrollLeft = (curObjUp.vw - curObjUp.schH) * curObjUp.deltaH;
}
}
bigObj[key] = curObjUp;
curObjUp = null;
},
/**
* void method, update sizes
*/
update = function update(id) {
if (id) {
updateFunc(id);
updateFuncHoriz(id);
} else {
var key;
/* jslint forin:true */
for (key in bigObj) {
updateFunc(key);
updateFuncHoriz(key);
}
}
},
/**
* get sizes of objects and calculate delta
*/
getSize = function getSize() {
//visible height
var scrollCorrect = 36,
visibleHeight = curObj.cont.clientHeight,
scrollTrackHeight = visibleHeight - scrollCorrect,
deltaTop = curObj.obj.offsetTop > 0 ? curObj.obj.offsetTop : 0,
allHeight = curObj.obj.offsetHeight + deltaTop,
deltaAV = allHeight / visibleHeight,
scrollHandlerHeight = scrollTrackHeight / deltaAV,
delta = allHeight / scrollTrackHeight;
//-18px for top/bottom buttons
curObj.vh = scrollTrackHeight;
curObj.delta = delta;
//scroll height
curObj.sch = scrollHandlerHeight;
//check for nothing scroll
if (scrollTrackHeight < 36 || scrollHandlerHeight > scrollTrackHeight || scrollTrackHeight + 36 === allHeight) {
cancelScroll(curObj);
} else {
curObj.vstatus = true;
curObj.cont.className += ' ' + VERTICAL_SCROLL_CLASS;
curObj.cont.parentNode.className += ' vertical-scroll-child';
if (scrollHandlerHeight < 25) {
scrollHandlerHeight = 25;
}
//set scroll handler size
curObj.sh.style.height = scrollHandlerHeight + 'px';
curObj.sh.style.left = 0;
curObj.cont.scrollTop = 0;
curObj.cont.style.paddingRight = '18px';
curObj.cont.style.overflowY = 'hidden';
}
curObj.cont.className = curObj.cont.className.replace(SCROLLBAR_INIT_CLASS, ' ');
},
getSizeHor = function getSizeHor() {
//visible height
var visibleWidth = curObj.cont.offsetWidth - 36,
//all height, object height
aw = curObj.obj.offsetWidth,
//size of step
delta = aw / visibleWidth,
sch;
//-20px for top/bottom buttons
curObj.vw = visibleWidth;
curObj.deltaH = delta;
//scroll height
sch = visibleWidth / (aw / (visibleWidth + 36));
curObj.schH = sch;
//check for nothing scroll
if (visibleWidth < 36 || sch > visibleWidth || visibleWidth + 36 === aw) {
cancelScrollHoriz(curObj);
sch = visibleWidth;
} else {
curObj.hstatus = true;
curObj.cont.className += ' horizontal-scroll';
if (sch < 25) {
sch = 25;
}
//set scroll handler size
curObj.hSh.style.width = sch + 'px';
curObj.hSh.style.left = 0;
curObj.hSw.style.display = 'block';
curObj.cont.scrollLeft = 0;
curObj.cont.style.paddingBottom = '18px';
curObj.cont.style.overflowX = 'hidden';
}
curObj.cont.className = curObj.cont.className.replace(SCROLLBAR_INIT_CLASS, ' ');
},
forceMoveSelectItem = function forceMoveSelectItem(id, offsetTop, boxHeight, elemHeight) {
moveObj = bigObj[id];
if (!moveObj) {
return;
}
var boxHeight = boxHeight || 223,
elemHeight = elemHeight || 16,
newPosition = null,
mTRaw = moveObj.cont.scrollTop,
mT = 0,
df;
if (mTRaw !== '') {
mT = parseFloat(mTRaw);
}
df = offsetTop - mT;
if (boxHeight < df) {
//movedown
if (boxHeight < df - 17) {
newPosition = offsetTop / moveObj.delta;
} else {
newPosition = (mT + elemHeight) / moveObj.delta;
}
} else if (df < 0) {
//moveup
newPosition = (mT - elemHeight) / moveObj.delta;
}
if (newPosition !== null) {
setPosition(newPosition);
}
},
TABKEY = 9,
/**
* force mov
*/
forceMove = function forceMove(id) {
if (!id) {
return;
}
moveObj = bigObj[id];
var scrollTop = moveObj.cont.scrollTop,
newPosition = scrollTop / moveObj.delta;
setPosition(newPosition);
},
checkTabKeyUp = function checkTabKeyUp(e) {
e = e || window.event;
var codeKey, contId;
codeKey = e.which || e.keyCode;
if (codeKey === TABKEY) {
contId = $(e.target || e.srcElement).parents('div.' + VERTICAL_SCROLL_CLASS).attr('id');
forceMove(contId);
}
},
animate = function animate(opts) {
var start = new Date(),
timer = setInterval(function () {
var progress = (new Date() - start) / opts.duration;
if (progress > 1) {
progress = 1;
}
opts.step(progress);
if (progress === 1) {
clearInterval(timer);
}
}, opts.delay || 10);
},
animateMove = function animateMove(to, from) {
from = from || 0;
animate({
duration: 350,
step: function step(progress) {
//var newPos = (1 - Math.sin(Math.acos(progress))) * to;
var newPos = from + Math.pow(progress, 2) * to;
setPosition(newPos);
}
});
},
/**
* set scrollTop
* @param {string} id scroll contId
* @param {number} offset Offset to move
* @param {number} raw Raw value to Move in offset param
* @param {boolean|undefined} animate Scrolling with animate
*/
scrollTo = function scrollTo(id, offset, raw, animate) {
if (!id) {
return;
}
moveObj = bigObj[id];
if (!moveObj) {
return;
}
var newPosition = 0,
from = parseFloat(moveObj.sh.style.top) || 0;
if (!raw) {
newPosition = offset / moveObj.delta;
} else {
newPosition = offset;
}
if (!animate) {
setPosition(newPosition);
} else {
newPosition -= from;
animateMove(newPosition, from);
}
},
/**
* Handler for mouseup
* unbind mousemove and mouseup
*/
drop = function drop() {
moveObj = null;
document.onmousemove = null;
document.onmouseup = null;
},
/**
* Handler for touchend
* unbind ontouchmove and touchend
*/
tDrop = function tDrop() {
moveObj = null;
document.ontouchmove = null;
document.ontouchend = null;
document.ontouchcancel = null;
},
/**
* Handler for move
*/
move = function move(e) {
e = e || window.event;
setPosition(e.clientY - shiftY);
blockEvent(e);
return false;
},
/**
* Handler for move horizontal
*/
moveHor = function moveHor(e) {
e = e || window.event;
setPositionHor(e.clientX - shiftX);
blockEvent(e);
return false;
},
/**
* Handler for touchmove
*/
tMove = function tMove(e) {
e = e || window.event;
setPosition(e.touches[0].pageY - shiftY);
blockEvent(e);
return false;
},
/**
* Handler for touchmove horizontal
*/
tMoveHor = function tMoveHor(e) {
e = e || window.event;
setPositionHor(e.touches[0].pageX - shiftX);
blockEvent(e);
return false;
},
/**
* Handler for mousedown for scrollhandler
* bind handlers for touchmove, touchend
*/
drag = function drag(e) {
e = e || window.event;
var id, doc, top;
id = this.getAttribute('id').replace('-scrollbar-handler', '');
top = this.style.top === '' ? 0 : parseFloat(this.style.top);
shiftY = e.clientY - top;
doc = document;
moveObj = bigObj[id];
doc.onmousemove = move;
doc.onmouseup = drop;
blockEvent(e);
return false;
},
/**
* Handler for mousedown for scrollhandler horizontal
* bind handlers for touchmove, touchend
*/
dragHor = function dragHor(e) {
e = e || window.event;
var id, doc, left;
id = this.getAttribute('id').replace('-scrollbar-handler-horiz', '');
left = this.style.left === '' ? 0 : parseFloat(this.style.left);
shiftX = e.clientX - left;
moveObj = bigObj[id];
doc = document;
doc.onmousemove = moveHor;
doc.onmouseup = drop;
blockEvent(e);
return false;
},
/**
* Handler for touchstart for scrollhandler
* bind handlers for touchmove, touchend
*/
tDrag = function tDrag(e) {
e = e || window.event;
var id, doc, top;
id = this.getAttribute('id').replace('-scrollbar-handler', '');
top = this.style.top === '' ? 0 : parseFloat(this.style.top);
shiftY = e.touches[0].pageY - top;
moveObj = bigObj[id];
doc = document;
doc.ontouchmove = tMove;
doc.ontouchend = tDrop;
doc.ontouchcancel = tDrop;
blockEvent(e);
return false;
},
/**
* Handler for touchstart for scrollhandler horizontal
* bind handlers for touchmove, touchend
*/
tDragHor = function tDragHor(e) {
e = e || window.event;
var id, doc, left;
id = this.getAttribute('id').replace('-scrollbar-handler-horiz', '');
left = this.style.left === '' ? 0 : parseFloat(this.style.left);
shiftX = e.touches[0].pageX - left;
moveObj = bigObj[id];
doc = document;
doc.ontouchmove = tMoveHor;
doc.ontouchend = tDrop;
doc.ontouchcancel = tDrop;
blockEvent(e);
return false;
},
/**
* Scroll by scroll track click
*/
scrollTrackMDHandler = function scrollTrackMDHandler(e) {
var id = String(this.getAttribute('id')).replace('-scrollbar-track', ''),
sbh = document.getElementById(id + '-scrollbar-handler'),
offsetY,
offsetX,
offsetST,
horizScroll = false;
if (!sbh) {
id = String(this.getAttribute('id')).replace('-scrollbar-track-horiz', '');
sbh = document.getElementById(id + '-scrollbar-handler-horiz');
if (!sbh) {
return;
}
horizScroll = true;
}
if (!horizScroll) {
var borderTop = parseInt(sbh.style.top, 10),
borderBottom = parseInt(sbh.style.height, 10);
if (e.offsetX && e.offsetY) {
offsetY = e.offsetY;
} else {
offsetST = $(this).offset();
offsetY = e.clientY - offsetST.top;
}
if (offsetY < borderTop) {
//direction up
moveUp(id, offsetY);
} else if (offsetY > borderBottom) {
//direction down
moveDown(id, offsetY - borderBottom);
}
} else {
var borderLeft = parseInt(sbh.style.left, 10),
borderRight = parseInt(sbh.style.width, 10);
if (e.offsetX && e.offsetY) {
offsetX = e.offsetX;
} else {
offsetST = $(this).offset();
offsetX = e.clientX - offsetST.left;
}
if (offsetX < borderLeft) {
//direction up
moveLeft(id, offsetX);
} else if (offsetX > borderRight) {
//direction down
moveRight(id, offsetX - borderRight);
}
}
},
/**
* Bind handler for scrollhandler on mousedown and touchstart events
*/
bindEvent = function bindEvent() {
if (curObj.sh) {
curObj.sh.onmousedown = drag;
curObj.sh.ontouchstart = tDrag;
var contElem = curObj.cont;
contElem.onkeyup = function (e) {
checkTabKeyUp(e);
};
contElem = null;
}
if (curObj.hSh) {
curObj.hSh.onmousedown = dragHor;
curObj.hSh.ontouchstart = tDragHor;
}
},
/**
* void method for build scroll
*/
buildScroll = function buildScroll() {
//@TODO might be add class?
curObj.cont.style.overflowY = 'hidden';
curObj.cont.style.position = 'relative';
curObj.cont.className += ' ' + SCROLLBAR_INIT_CLASS;
var sw, divId, tb, trt, st, sh, ln, lns, bb, trb;
//create scroll wrapper
sw = document.createElement('div');
divId = curObj.contId + '-scrollbar-wrapper';
sw.setAttribute('id', divId);
sw.setAttribute('class', 'scrollbar-wrapper scrlbr');
curObj.cont.appendChild(sw);
//create scroll button top
tb = document.createElement('div');
tb.setAttribute('id', curObj.contId + '-top-button');
tb.setAttribute('class', 'top-button scrlbr');
sw.appendChild(tb);
trt = document.createElement('div');
trt.setAttribute('class', 'triangl-top scrlbr');
tb.appendChild(trt);
//create scroll button scrollbar-track
st = document.createElement('div');
st.setAttribute('id', curObj.contId + '-scrollbar-track');
st.setAttribute('class', 'scrollbar-track scrlbr');
sw.appendChild(st);
//create scroll button scrollbar-handler
sh = document.createElement('div');
sh.setAttribute('id', curObj.contId + '-scrollbar-handler');
sh.setAttribute('class', 'scrollbar-handler scrlbr');
curObj.st = st;
curObj.sh = sh;
st.appendChild(sh);
//create scroll button scrollbar-handler
ln = document.createElement('div');
ln.setAttribute('class', 'scrollbar-lines scrlbr');
lns = document.createElement('div');
lns.setAttribute('class', 'scrollbar-line scrlbr');
ln.appendChild(lns);
sh.appendChild(ln);
//create scroll button bottom
bb = document.createElement('div');
bb.setAttribute('id', curObj.contId + '-bottom-button');
bb.setAttribute('class', 'bottom-button scrlbr');
sw.appendChild(bb);
trb = document.createElement('div');
trb.setAttribute('class', 'triangl-bot scrlbr');
bb.appendChild(trb);
curObj.sw = sw;
curObj.bb = bb;
curObj.tb = tb;
if (curObj.sh !== null) {
//for mouse wheel
if (curObj.cont.addEventListener) {
curObj.cont.addEventListener('DOMMouseScroll', wheel, false);
curObj.contWheelEvent = true;
curObj.st.addEventListener('mousedown', scrollTrackMDHandler, false);
}
curObj.cont.onmousewheel = wheel;
//for button up/down scroll!!!
if (!('ontouchstart' in document.documentElement)) {
bb.onmousedown = moveDownHandler;
tb.onmousedown = moveUpHandler;
}
//for touchpads
bb.ontouchstart = moveDownHandler;
tb.ontouchstart = moveUpHandler;
}
getSize();
},
buildHorizScroll = function buildHorizScroll() {
curObj.cont.style.overflowX = 'hidden';
curObj.cont.style.position = 'relative';
//create scroll wrapper
var sw, divId, tb, trt, st, sh, ln, lns, bb, trb;
divId = curObj.contId + '-scrollbar-wrapper-horiz';
sw = document.createElement('div');
sw.setAttribute('id', divId);
sw.setAttribute('class', 'scrollbar-wrapper-horiz scrlbr');
curObj.cont.appendChild(sw);
//create scroll button top
tb = document.createElement('div');
tb.setAttribute('id', curObj.contId + '-left-button');
tb.setAttribute('class', 'left-button scrlbr');
sw.appendChild(tb);
trt = document.createElement('div');
trt.setAttribute('class', 'triangl-left scrlbr');
tb.appendChild(trt);
//create scroll button scrollbar-track
st = document.createElement('div');
st.setAttribute('id', curObj.contId + '-scrollbar-track-horiz');
st.setAttribute('class', 'scrollbar-track-horiz scrlbr');
sw.appendChild(st);
curObj.st = st;
//create scroll button scrollbar-handler
sh = document.createElement('div');
sh.setAttribute('id', curObj.contId + '-scrollbar-handler-horiz');
sh.setAttribute('class', 'scrollbar-handler-horiz scrlbr');
curObj.hSh = sh;
st.appendChild(sh);
//create scroll button scrollbar-handler
ln = document.createElement('div');
ln.setAttribute('class', 'scrollbar-lines scrlbr');
lns = document.createElement('div');
lns.setAttribute('class', 'scrollbar-line scrlbr');
ln.appendChild(lns);
sh.appendChild(ln);
//create scroll button bottom
bb = document.createElement('div');
bb.setAttribute('id', curObj.contId + '-right-button');
bb.setAttribute('class', 'right-button scrlbr');
sw.appendChild(bb);
trb = document.createElement('div');
trb.setAttribute('class', 'triangl-right scrlbr');
bb.appendChild(trb);
curObj.hSw = sw;
curObj.hBb = bb;
curObj.hTb = tb;
if (curObj.hSh !== null) {
//for button up/down scroll!!!!
if (!('ontouchstart' in document.documentElement)) {
bb.onmousedown = moveRightHandler;
tb.onmousedown = moveLeftHandler;
}
//for touchpads
bb.ontouchstart = moveRightHandler;
tb.ontouchstart = moveLeftHandler;
}
if (curObj.st.addEventListener) {
curObj.st.addEventListener('mousedown', scrollTrackMDHandler, false);
}
getSizeHor();
},
/**
* Attach object for scrolling
* @param {String} contId Id of wrapper object
* @param {String} objId Id of object
* @param {Boolean} hs HideScroll if nothing scrolling
* @param {Boolean} hss hideHoriz scroll
*/
attach = function attach(contId, objId, tabId, hs, hss) {
var obj = document.getElementById(objId),
cont = document.getElementById(contId);
if (!obj || !cont) {
return false;
}
//bind resize
curObj = {
'objId': objId,
'contId': contId,
'obj': obj,
'cont': cont,
'tabId': tabId,
'hs': hs || false,
'hhs': hss || false
};
buildScroll();
buildHorizScroll();
bigObj[contId] = curObj;
bindEvent();
curObj = null;
obj = null;
cont = null;
//return _curObj;
},
detach = function detach(tabId) {
var keyVar, keyVar1;
//rbin = document.getElementById('rbin');
for (keyVar in bigObj) {
if (bigObj[keyVar].tabId === tabId) {
if (bigObj[keyVar].cont.removeEventListener) {
if (bigObj[keyVar].contWheelEvent) {
bigObj[keyVar].cont.removeEventListener('DOMMouseScroll', wheel, false);
bigObj[keyVar].contWheelEvent = false;
}
}
for (keyVar1 in bigObj[keyVar]) {
if (bigObj[keyVar].hasOwnProperty(keyVar1)) {
bigObj[keyVar][keyVar1] = null;
}
}
delete lastValues[bigObj[keyVar].contId];
delete bigObj[keyVar];
}
}
};
return {
attach: attach,
update: update,
bigObj: bigObj,
scrollMove: scrollMove,
scrollMoveHoriz: scrollMoveHoriz,
scrollTo: scrollTo,
forceMove: forceMove,
forceMoveSelectItem: forceMoveSelectItem,
detach: detach
};
}();
//# sourceMappingURL=scroll.js.map