{"version":3,"file":"webix.js","sources":["../sources/thirdparty/promiz.js","../sources/services.js","../sources/webix/debug.js","../sources/webix/helpers.js","../sources/webix/i18n.js","../sources/webix/stringify.js","../sources/core/eventsystem.js","../sources/webix/customevents.js","../sources/load/drivers/xml.js","../sources/load/drivers/json.js","../sources/load/ajax.js","../sources/load/proxy/binary.js","../sources/load/proxy/debug.js","../sources/load/proxy/rest.js","../sources/load/proxy/json.js","../sources/load/proxy/post.js","../sources/load/proxy/graphql.js","../sources/load/proxy.js","../sources/load/drivers/jsarray.js","../sources/load/drivers/html.js","../sources/webix/env.js","../sources/webix/html.js","../sources/load/drivers/htmltable.js","../sources/load/require.js","../sources/load/drivers/excel.js","../sources/load/drivers/index.js","../sources/load/drivers/csv.js","../sources/core/atomdataloader.js","../sources/core/codeparser.js","../sources/webix/template.js","../sources/core/atomrender.js","../sources/core/autoscroll.js","../sources/webix/htmlevents.js","../sources/webix/type.js","../sources/core/state.js","../sources/ui/core.js","../sources/core/tooltipcontrol.js","../sources/ui/helpers.js","../sources/webix/ready.js","../sources/core/uimanager.js","../sources/core/settings.js","../sources/core/destruction.js","../sources/core/collectionbind.js","../sources/core/valuebind.js","../sources/core/recordbind.js","../sources/core/bindsource.js","../sources/core/basebind.js","../sources/views/baseview.js","../sources/views/view.js","../sources/core/singlerender.js","../sources/views/tooltip.js","../sources/core/autotooltip.js","../sources/core/canvas.js","../sources/webix/animate.js","../sources/css/skins/material/config.js","../sources/webix/skin.js","../sources/css/skins/mini/config.js","../sources/css/skins/flat/config.js","../sources/css/skins/compact/config.js","../sources/css/skins/contrast/config.js","../sources/core/touch.js","../sources/core/dragcontrol.js","../sources/core/movable.js","../sources/core/modality.js","../sources/core/resizearea.js","../sources/views/window.js","../sources/core/contexthelper.js","../sources/webix/clipbuffer.js","../sources/core/copypaste.js","../sources/core/customprint.js","../sources/core/customscroll.js","../sources/core/datamarks.js","../sources/core/datamove.js","../sources/webix/rules.js","../sources/core/validatedata.js","../sources/load/dataprocessor.js","../sources/core/datastore.js","../sources/core/dataloader.js","../sources/core/datastate.js","../sources/core/dragitem.js","../sources/core/dragorder.js","../sources/core/undo.js","../sources/webix/editors.js","../sources/core/editability.js","../sources/core/flexlayout.js","../sources/core/groupmethods.js","../sources/core/groupstore.js","../sources/core/group.js","../sources/core/htmloptions.js","../sources/core/htmlmap.js","../sources/core/idspace.js","../sources/core/keysnavigation.js","../sources/core/mapcollection.js","../sources/core/mouseevents.js","../sources/core/navigationbuttons.js","../sources/core/overlaybox.js","../sources/core/pagingability.js","../sources/core/progressbar.js","../sources/core/renderstack.js","../sources/core/scrollable.js","../sources/core/selectionmodel.js","../sources/webix/color.js","../sources/core/sparklines/svg.js","../sources/core/sparklines/line.js","../sources/core/sparklines/area.js","../sources/core/sparklines/bar.js","../sources/core/sparklines/pie.js","../sources/core/sparklines/spline.js","../sources/core/sparklines/splinearea.js","../sources/core/sparklines.js","../sources/webix/csv.js","../sources/core/tablepaste.js","../sources/core/treeapi.js","../sources/core/treeclick.js","../sources/core/treedataloader.js","../sources/core/treedatamove.js","../sources/core/treerenderstack.js","../sources/core/treestatecheckbox.js","../sources/core/treestore.js","../sources/core/treetablepaste.js","../sources/core/treetype.js","../sources/core/uploaddriver.js","../sources/core/validatecollection.js","../sources/core/values.js","../sources/core/virtualrenderstack.js","../sources/core/vrenderstack.js","../sources/webix/export/common.js","../sources/webix/export/topdf.js","../sources/webix/export/toexcel.js","../sources/webix/message.js","../sources/webix/init.js","../sources/webix/ie8.js","../sources/i18n/en.js","../sources/core/date.js","../sources/core/number.js","../sources/webix/locale.js","../sources/webix/storage.js","../sources/webix/print.js","../sources/webix/patterns.js","../sources/webix/fullscreen.js","../sources/webix/index.js","../sources/load/remote.js","../sources/ui/fullscreen.js","../sources/ui/datafilter.js","../sources/views/baselayout.js","../sources/views/layout.js","../sources/views/daterange.js","../sources/ui/datafilter_pro.js","../sources/ui/detect.js","../sources/ui/index.js","../sources/ui/animate.js","../sources/i18n/index.js","../sources/i18n/de.js","../sources/i18n/es.js","../sources/i18n/fr.js","../sources/i18n/it.js","../sources/i18n/ja.js","../sources/i18n/pt.js","../sources/i18n/zh.js","../sources/i18n/ru.js","../sources/i18n/be.js","../sources/views/spacer.js","../sources/views/template.js","../sources/views/scrollview.js","../sources/views/accordion.js","../sources/views/iframe.js","../sources/views/accordionitem.js","../sources/views/headerlayout.js","../sources/views/resizearea.js","../sources/views/resizer.js","../sources/views/align.js","../sources/views/multiview.js","../sources/views/tabview.js","../sources/views/carousel.js","../sources/views/proxy.js","../sources/views/portlet.js","../sources/views/abslayout.js","../sources/views/gridlayout.js","../sources/views/dashboard.js","../sources/views/panel.js","../sources/views/flexlayout.js","../sources/views/datalayout.js","../sources/views/flexdatalayout.js","../sources/views/popup.js","../sources/views/toolbar.js","../sources/views/form.js","../sources/views/fieldset.js","../sources/views/forminput.js","../sources/views/htmlform.js","../sources/views/property.js","../sources/views/calendar.js","../sources/views/colorboard.js","../sources/views/button.js","../sources/views/label.js","../sources/core/textpattern.js","../sources/views/text.js","../sources/core/datacollection.js","../sources/views/select.js","../sources/views/checkbox.js","../sources/views/radio.js","../sources/views/datepicker.js","../sources/views/colorpicker.js","../sources/views/richselect.js","../sources/views/combo.js","../sources/views/counter.js","../sources/views/icon.js","../sources/views/search.js","../sources/views/segmented.js","../sources/views/textarea.js","../sources/views/toggle.js","../sources/views/multitext.js","../sources/views/proto.js","../sources/views/list.js","../sources/views/multiselect.js","../sources/views/multicombo.js","../sources/views/slider.js","../sources/views/rangeslider.js","../sources/views/switch.js","../sources/views/tabbar.js","../sources/views/richtext.js","../sources/views/uploader.js","../sources/views/suggest.js","../sources/views/multisuggest.js","../sources/views/checksuggest.js","../sources/views/gridsuggest.js","../sources/views/datasuggest.js","../sources/views/mentionsuggest.js","../sources/views/daterangesuggest.js","../sources/views/daterangepicker.js","../sources/views/vscroll.js","../sources/views/excelbar.js","../sources/views/datatable/areaselect.js","../sources/views/datatable/filter.js","../sources/views/datatable/selection.js","../sources/webix/consts.js","../sources/webix/export/topng.js","../sources/webix/export/tocsv.js","../sources/webix/api.js","../sources/load/send.js"],"sourcesContent":["var global = window;\n\nvar queueId = 1;\nvar queue = {};\nvar isRunningTask = false;\n\nif (!global.setImmediate && global.addEventListener)\n\tglobal.addEventListener(\"message\", function (e) {\n\t\tif (e.source == global){\n\t\t\tif (isRunningTask)\n\t\t\t\tnextTick(queue[e.data]);\n\t\t\telse {\n\t\t\t\tisRunningTask = true;\n\t\t\t\ttry {\n\t\t\t\t\tqueue[e.data]();\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// eslint-disable-line\n\t\t\t\t}\n\n\t\t\t\tdelete queue[e.data];\n\t\t\t\tisRunningTask = false;\n\t\t\t}\n\t\t}\n\t});\n\nfunction nextTick(fn) {\n\tif (global.setImmediate) global.setImmediate(fn);\n\t// if inside of web worker\n\telse if (global.importScripts || !global.addEventListener) setTimeout(fn);\n\telse {\n\t\tqueueId++;\n\t\tqueue[queueId] = fn;\n\t\tglobal.postMessage(queueId, \"*\");\n\t}\n}\n\nDeferred.resolve = function (value) {\n\tif (!(this._d == 1))\n\t\tthrow TypeError();\n\n\tif (value instanceof Deferred)\n\t\treturn value;\n\n\treturn new Deferred(function (resolve) {\n\t\tresolve(value);\n\t});\n};\n\nDeferred.reject = function (value) {\n\tif (!(this._d == 1))\n\t\tthrow TypeError();\n\n\treturn new Deferred(function (resolve, reject) {\n\t\treject(value);\n\t});\n};\n\nDeferred.all = function (arr) {\n\tif (!(this._d == 1))\n\t\tthrow TypeError();\n\n\tif (!(arr instanceof Array))\n\t\treturn Deferred.reject(TypeError());\n\n\tvar d = new Deferred();\n\n\tfunction done(e, v) {\n\t\tif (v)\n\t\t\treturn d.resolve(v);\n\n\t\tif (e)\n\t\t\treturn d.reject(e);\n\n\t\tvar unresolved = arr.reduce(function (cnt, v) {\n\t\t\tif (v && v.then)\n\t\t\t\treturn cnt + 1;\n\t\t\treturn cnt;\n\t\t}, 0);\n\n\t\tif(unresolved == 0)\n\t\t\td.resolve(arr);\n\n\n\t\tarr.map(function (v, i) {\n\t\t\tif (v && v.then)\n\t\t\t\tv.then(function (r) {\n\t\t\t\t\tarr[i] = r;\n\t\t\t\t\tdone();\n\t\t\t\t\treturn r;\n\t\t\t\t}, done);\n\t\t});\n\t}\n\n\tdone();\n\n\treturn d;\n};\n\nDeferred.race = function (arr) {\n\tif (!(this._d == 1))\n\t\tthrow TypeError();\n\n\tif (!(arr instanceof Array))\n\t\treturn Deferred.reject(TypeError());\n\n\tif (arr.length == 0)\n\t\treturn new Deferred();\n\n\tvar d = new Deferred();\n\n\tfunction done(e, v) {\n\t\tif (v)\n\t\t\treturn d.resolve(v);\n\n\t\tif (e)\n\t\t\treturn d.reject(e);\n\n\t\tvar unresolved = arr.reduce(function (cnt, v) {\n\t\t\tif (v && v.then)\n\t\t\t\treturn cnt + 1;\n\t\t\treturn cnt;\n\t\t}, 0);\n\n\t\tif(unresolved == 0)\n\t\t\td.resolve(arr);\n\n\t\tarr.map(function (v) {\n\t\t\tif (v && v.then)\n\t\t\t\tv.then(function (r) {\n\t\t\t\t\tdone(null, r);\n\t\t\t\t}, done);\n\t\t});\n\t}\n\n\tdone();\n\n\treturn d;\n};\n\nDeferred._d = 1;\n\n\n/**\n * @constructor\n */\nfunction Deferred(resolver) {\n\t\"use strict\";\n\tif (typeof resolver != \"function\" && resolver != undefined)\n\t\tthrow TypeError();\n\t\t\n\tif (typeof this != \"object\" || (this && this.then))\n\t\tthrow TypeError();\n\n\t// states\n\t// 0: pending\n\t// 1: resolving\n\t// 2: rejecting\n\t// 3: resolved\n\t// 4: rejected\n\tvar self = this,\n\t\tstate = 0,\n\t\tval = 0,\n\t\tnext = [],\n\t\tfn, er;\n\n\tself[\"promise\"] = self;\n\n\tself[\"resolve\"] = function (v) {\n\t\tfn = self.fn;\n\t\ter = self.er;\n\t\tif (!state) {\n\t\t\tval = v;\n\t\t\tstate = 1;\n\n\t\t\tnextTick(fire);\n\t\t}\n\t\treturn self;\n\t};\n\n\tself[\"reject\"] = function (v) {\n\t\tfn = self.fn;\n\t\ter = self.er;\n\t\tif (!state) {\n\t\t\tval = v;\n\t\t\tstate = 2;\n\n\t\t\tnextTick(fire);\n\n\t\t}\n\t\treturn self;\n\t};\n\n\tself[\"_d\"] = 1;\n\n\tself[\"then\"] = function (_fn, _er) {\n\t\tif (!(this._d == 1))\n\t\t\tthrow TypeError();\n\n\t\tvar d = new Deferred();\n\n\t\td.fn = _fn;\n\t\td.er = _er;\n\t\tif (state == 3) {\n\t\t\td.resolve(val);\n\t\t}\n\t\telse if (state == 4) {\n\t\t\td.reject(val);\n\t\t}\n\t\telse {\n\t\t\tnext.push(d);\n\t\t}\n\n\t\treturn d;\n\t};\n\n\tself[\"finally\"] = function(_handler){\n\t\tvar _value;\n\t\tconst handler = function(value){\n\t\t\t_value = value;\n\t\t\treturn _handler();\n\t\t};\n\t\t\n\t\tconst value = function(){\n\t\t\tconst d = new Deferred();\n\t\t\tif(state == 4)\n\t\t\t\treturn d.reject(_value);\n\t\t\telse\n\t\t\t\treturn d.resolve(_value);\n\t\t};\n\n\t\treturn self.then(handler, handler).then(value, value);\n\t};\n\n\tself[\"catch\"] = function (_er) {\n\t\treturn self[\"then\"](null, _er);\n\t};\n\n\t//compatibility with old version of promiz lib\n\tself[\"fail\"] = function (_er) {\n\t\treturn self[\"then\"](null, _er);\n\t};\n\n\tvar finish = function (type) {\n\t\tstate = type || 4;\n\t\tfor (var i=0; i<next.length; i++){\n\t\t\tvar p = next[i];\n\t\t\tstate == 3 && p.resolve(val) || p.reject(val);\n\t\t}\n\t};\n\n\ttry {\n\t\tif (typeof resolver == \"function\")\n\t\t\tresolver(self[\"resolve\"], self[\"reject\"]);\n\t} catch (e) {\n\t\tself[\"reject\"](e);\n\t}\n\n\treturn self;\n\n\t// ref : reference to 'then' function\n\t// cb, ec, cn : successCallback, failureCallback, notThennableCallback\n\tfunction thennable (ref, cb, ec, cn) {\n\t\t// Promises can be rejected with other promises, which should pass through\n\t\tif (state == 2) {\n\t\t\treturn cn();\n\t\t}\n\t\tif ((typeof val == \"object\" || typeof val == \"function\") && typeof ref == \"function\") {\n\t\t\ttry {\n\n\t\t\t\t// cnt protects against abuse calls from spec checker\n\t\t\t\tvar cnt = 0;\n\t\t\t\tref.call(val, function (v) {\n\t\t\t\t\tif (cnt++) return;\n\t\t\t\t\tval = v;\n\t\t\t\t\tcb();\n\t\t\t\t}, function (v) {\n\t\t\t\t\tif (cnt++) return;\n\t\t\t\t\tval = v;\n\t\t\t\t\tec();\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tval = e;\n\t\t\t\tec();\n\t\t\t}\n\t\t} else {\n\t\t\tcn();\n\t\t}\n\t}\n\n\tfunction fire() {\n\t\t// check if it's a thenable\n\t\tvar ref;\n\t\ttry {\n\t\t\tref = val && val.then;\n\t\t} catch (e) {\n\t\t\tval = e;\n\t\t\tstate = 2;\n\t\t\treturn fire();\n\t\t}\n\n\t\tthennable(ref, function () {\n\t\t\tstate = 1;\n\t\t\tfire();\n\t\t}, function () {\n\t\t\tstate = 2;\n\t\t\tfire();\n\t\t}, function () {\n\t\t\ttry {\n\t\t\t\tif (state == 1 && typeof fn == \"function\") {\n\t\t\t\t\tval = fn(val);\n\t\t\t\t}\n\n\t\t\t\telse if (state == 2 && typeof er == \"function\") {\n\t\t\t\t\tval = er(val);\n\t\t\t\t\tstate = 1;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tval = e;\n\t\t\t\treturn finish();\n\t\t\t}\n\n\t\t\tif (val == self) {\n\t\t\t\tval = TypeError();\n\t\t\t\tfinish();\n\t\t\t} else thennable(ref, function () {\n\t\t\t\tfinish(3);\n\t\t\t}, finish, function () {\n\t\t\t\tfinish(state == 1 && 3);\n\t\t\t});\n\n\t\t});\n\t}\n\n\n}\n\n// promise factory\nDeferred.defer = function () {\n\treturn new Deferred(null);\n};\n\nexport default Deferred;","// resolves circular dependencies\n// quick solution, must be removed in the next versions\n\nconst services = {};\nexport function define(name, value){\n\tservices[name] = value;\n}\n\nexport function use(name){\n\treturn services[name];\n}","// debugger helpers\n// assert and log calls are removed in min versions\n\nimport { use } from \"../services\";\n\n//check some rule, show message as error if rule is not correct\nexport function assert(test, msg){\n\tif (!test){\n\t\tlog(\"error\",msg);\n\t\tlet message = use(\"message\");\n\t\tif (message && typeof msg == \"string\")\n\t\t\tmessage({ type:\"debug\", text:msg, expire:-1 });\n\t\t\tdebugger; // eslint-disable-line\n\t}\n}\n\n//show log message\nexport function log(type,message,details){\n\tif (arguments.length == 1){\n\t\tmessage = type;\n\t\ttype = \"log\";\n\t}\n\tif (window.console && window.console.log){\n\t\ttype=type.toLowerCase();\n\t\tif (window.console[type])\n\t\t\twindow.console[type](message||\"unknown error\");\n\t\telse\n\t\t\twindow.console.log(type +\": \"+message);\n\n\t\tif (details) \n\t\t\twindow.console.log(details);\n\t}\n}\n\nexport var debug_mode = {};\n\nexport function debug(mode){\n\tif (!mode)\n\t\tdebug_mode = {};\n\telse if (typeof mode !== \"object\")\n\t\tdebug_mode = { events: true };\n\telse \n\t\tfor (var key in mode) debug_mode[key] = mode[key];\n}\n\nlet debug_size_indent = 0;\nfunction debug_size_step(){\n\tvar str = \"\";\n\tfor (let i=0; i<debug_size_indent; i++)\n\t\tstr+=\"|  \";\n\treturn str;\n}\nexport function debug_size_box_start(comp, get){\n\tif (!debug_mode.size) return;\n\tif (!debug_size_indent)\n\t\tlog(get?\"--- get sizes ---\":\"--- set sizes ---\");\n\tlog(debug_size_step()+comp.name+\"@\"+comp.config.id);\n\tdebug_size_indent++;\n}\nexport function debug_size_box_end(comp, sizes){\n\tif (!debug_mode.size) return;\n\tdebug_size_indent--;\n\tlog(debug_size_step()+sizes.join(\",\"));\n}\n\nexport function debug_size_box(comp, sizes, get){\n\tif (!debug_mode.size) return;\n\tif (!debug_size_indent)\n\t\tlog(get?\"--- get sizes ---\":\"--- set sizes ---\");\n\tlog(debug_size_step()+comp.name+\"@\"+comp.config.id+\" \"+sizes.join(\",\"));\n}","import {assert} from \"./debug\";\n\nlet level = 0;\nexport function level_in(){\n\tlevel++;\n\tassert(level !== 100, \"Attempt to copy object with self reference\");\n}\nexport function level_out(){\n\tlevel--;\n}\n\n//coding helpers\nexport function clone(source){\n\tvar f = clone._function;\n\tf.prototype = source;\n\treturn new f();\n}\nclone._function = function(){};\n\n//copies methods and properties from source to the target\nlet extend = function(base, source, force){\n\tassert(base,\"Invalid mixing target\");\n\tassert(source,\"Invalid mixing source\");\n\n\tif (base.$protoWait){\n\t\t_power_array.insertAt.call(base.$protoWait, source,1);\n\t\treturn base;\n\t}\n\n\t//copy methods, overwrite existing ones in case of conflict\n\tfor (var method in source)\n\t\tif ((!(method in base)) || force)\n\t\t\tbase[method] = source[method];\n\n\t//in case of defaults - preffer top one\n\tif (source.defaults)\n\t\textend(base.defaults, source.defaults);\n\t\n\t//if source object has init code - call init against target\n\tif (source.$init)\t\n\t\tsource.$init.call(base);\n\n\treturn base;\t\n};\n\n//copies methods and properties from source to the target from all levels\nexport function copy(source){\n\tassert(source,\"Invalid mixing target\");\n\tif (DEBUG) level_in();\n\n\tvar esModern = !!window.Map && !!window.Set && !!window.WeakMap && !!window.WeakSet;\n\tvar target;\n\tif(arguments.length>1){\n\t\ttarget = arguments[0];\n\t\tsource = arguments[1];\n\t} else \n\t\ttarget = (isArray(source)?[]:{});\n\n\tfor (var method in source){\n\t\tvar from = source[method];\n\t\tif(from && typeof from == \"object\" && !(from instanceof RegExp)){\n\t\t\tif (isDate(from))\n\t\t\t\ttarget[method] = new Date(from);\n\t\t\t/* jshint ignore:start */\n\t\t\telse if (esModern && (from instanceof Map || from instanceof Set || from instanceof WeakMap || from instanceof WeakSet))\n\t\t\t\ttarget[method] = from;\n\t\t\t/* jshint ignore:end */\n\t\t\telse {\n\t\t\t\ttarget[method] = (isArray(from)?[]:{});\n\t\t\t\tcopy(target[method],from);\n\t\t\t}\n\t\t} else {\n\t\t\ttarget[method] = from;\n\t\t}\n\t}\n\n\tif (DEBUG) level_out();\n\treturn target;\t\n}\n\nexport function single(source){ \n\tvar instance = null;\n\tvar t = function(){\n\t\tif (!instance)\n\t\t\tinstance = new source({});\n\t\t\t\n\t\tif (instance._reinit)\n\t\t\tinstance._reinit.apply(instance, arguments);\n\t\treturn instance;\n\t};\n\treturn t;\n}\n\n\n//creates function with specified \"this\" pointer\nexport function bind(functor, object){ \n\treturn function(){ return functor.apply(object,arguments); };  \n}\n\n\n//evaluate javascript code in the global scoope\nexport function exec(code){\n\tif (window.execScript)\t//special handling for IE\n\t\twindow.execScript(code);\n\telse window.eval(code);\n}\n\nexport function wrap(code, wrap){\n\tif (!code) return wrap;\n\treturn function(){\n\t\tvar result = code.apply(this, arguments);\n\t\twrap.apply(this,arguments);\n\t\treturn result;\n\t};\n}\n\n//check === undefined\nexport function isUndefined(a){\n\treturn typeof a == \"undefined\";\n}\n//delay call to after-render time\nexport function delay(method, obj, params, delay){\n\treturn window.setTimeout(function(){\n\t\tif(!(obj&&obj.$destructed)){\n\t\t\tvar ret = method.apply(obj,(params||[]));\n\t\t\tmethod = obj = params = null;\n\t\t\treturn ret;\n\t\t}\n\t},delay||1);\n}\n\nexport function once(method){\n\tvar flag = true;\n\treturn function(){\n\t\tif (flag){\n\t\t\tflag = false;\n\t\t\tmethod.apply(this, arguments);\n\t\t}\n\t};\n}\n\n//common helpers\n\n//generates unique ID (unique per window, nog GUID)\nlet _seed = (new Date()).valueOf();\nexport function uid(){\n\t_seed++;\n\treturn _seed;\n}\n//resolve ID as html object\nexport function toNode(node){\n\tif (typeof node == \"string\") return document.getElementById(node);\n\treturn node;\n}\n//resolve function name\nexport function toFunctor(str, scope){ \n\tif (typeof(str)==\"string\"){\n\t\tvar method = str.replace(\"()\",\"\");\n\t\tif (scope && scope[method]) return scope[method];\n\t\treturn window[method] || window.eval(str);\n\t}\n\treturn str;\n}\n/*checks where an object is instance of Array*/\nexport function isArray(obj) {\n\treturn Array.isArray?Array.isArray(obj):(Object.prototype.toString.call(obj) === \"[object Array]\");\n}\nexport function isDate(obj){\n\treturn obj instanceof Date;\n}\n\n//adds extra methods for the array\nexport function _to_array(array){ \n\treturn extend((array||[]),_power_array, true);\n}\n//can be used by _to_array()\nexport const _power_array={\n\t//remove element at specified position\n\tremoveAt:function(pos,len){\n\t\tif (pos>=0) this.splice(pos,(len||1));\n\t},\n\t//find element in collection and remove it \n\tremove:function(value){\n\t\tthis.removeAt(this.find(value));\n\t},\t\n\t//add element to collection at specific position\n\tinsertAt:function(data,pos){\n\t\tif (!pos && pos!==0)\t//add to the end by default\n\t\t\tthis.push(data);\n\t\telse {\n\t\t\tthis.splice(pos, 0, data); \n\t\t}\n\t},\n\t//return index of element, -1 if it doesn't exists\n\tfind:function(data){ \n\t\tfor (var i=0; i<this.length; i++) \n\t\t\tif (data==this[i]) return i;\n\t\treturn -1; \n\t},\n\t//execute some method for each element of array\n\teach:function(functor,master){\n\t\tfor (var i=0; i < this.length; i++)\n\t\t\tfunctor.call((master||this),this[i]);\n\t},\n\t//create new array from source, by using results of functor \n\tmap:function(functor,master){\n\t\tfor (var i=0; i < this.length; i++)\n\t\t\tthis[i]=functor.call((master||this),this[i]);\n\t\treturn this;\n\t}, \n\tfilter:function(functor, master){\n\t\tfor (var i=0; i < this.length; i++)\n\t\t\tif (!functor.call((master||this),this[i])){\n\t\t\t\tthis.splice(i,1);\n\t\t\t\ti--;\n\t\t\t}\n\t\treturn this;\n\t}\n};\n\n//hook for documentation generator\nif (DEBUG){\n\tif (window.webix_on_core_ready){\n\t\textend = window.webix_on_core_ready({ extend }).extend;\n\t}\n}\n\nexport { extend };","const i18n = {\n\tparseFormat:\"%Y-%m-%d %H:%i:%s\",\n\tparseTimeFormat:\"%H:%i:%s\",\n};\n\n\nexport default i18n;","import i18n from \"./i18n.js\";\n\n// converts an object into a string with respect to dates\nexport function stringify(obj){\n\tvar origin = Date.prototype.toJSON;\n\tDate.prototype.toJSON = function(){\n\t\treturn i18n.parseFormatStr(this);\n\t};\n\n\tvar result;\n\tif (obj instanceof Date)\n\t\tresult = obj.toJSON();\n\telse\n\t\tresult = JSON.stringify(obj);\n\n\tDate.prototype.toJSON = origin;\n\treturn result;\n}","import {extend, toFunctor, bind, uid, _to_array} from \"../webix/helpers.js\";\nimport {assert, log, debug_mode} from \"../webix/debug.js\";\n\n//event system\nconst EventSystem={\n\t$init:function(){\n\t\tif (!this._evs_events){\n\t\t\tthis._evs_events = {};\t\t//hash of event handlers, name => handler\n\t\t\tthis._evs_handlers = {};\t//hash of event handlers, ID => handler\n\t\t\tthis._evs_map = {};\n\t\t}\n\t},\n\t//temporary block event triggering\n\tblockEvent : function(){\n\t\tthis._evs_events._block = true;\n\t},\n\t//re-enable event triggering\n\tunblockEvent : function(){\n\t\tthis._evs_events._block = false;\n\t},\n\tmapEvent:function(map){\n\t\textend(this._evs_map, map, true);\n\t},\n\ton_setter:function(config){\n\t\tif(config){\n\t\t\tfor(var i in config){\n\t\t\t\tvar method = toFunctor(config[i], this.$scope);\n\t\t\t\tvar sub = i.indexOf(\"->\");\n\t\t\t\tif (sub !== -1){\n\t\t\t\t\tthis[i.substr(0,sub)].attachEvent(i.substr(sub+2), bind(method, this));\n\t\t\t\t} else\n\t\t\t\t\tthis.attachEvent(i, method);\n\t\t\t}\n\t\t}\n\t},\n\t//trigger event\n\tcallEvent:function(type,params){\n\t\tconst master = this._event_master || this;\n\t\tif (this._evs_events._block) return true;\n\t\t\n\t\ttype = type.toLowerCase();\n\t\tvar event_stack =this._evs_events[type.toLowerCase()];\t//all events for provided name\n\t\tvar return_value = true;\n\n\t\tif (DEBUG)\n\t\t\tif ((debug_mode.events || this.debug) && type !== \"onmousemoving\" )\t//can slowdown a lot\n\t\t\t\tlog(\"info\",\"[\"+this.name+\"@\"+((this._settings||{}).id)+\"] event:\"+type,params);\n\t\t\n\t\tif (event_stack)\n\t\t\tfor(var i=0; i<event_stack.length; i++){\n\t\t\t\t/*\n\t\t\t\t\tCall events one by one\n\t\t\t\t\tIf any event return false - result of whole event will be false\n\t\t\t\t\tHandlers which are not returning anything - counted as positive\n\t\t\t\t*/\n\t\t\t\tif (event_stack[i].apply(master, (params||[]))===false) return_value=false;\n\t\t\t}\n\t\tif (this._evs_map[type]){\n\t\t\tvar target = this._evs_map[type];\n\t\t\ttarget.$eventSource = this;\n\t\t\tif (!target.callEvent(type,params))\n\t\t\t\treturn_value =\tfalse;\n\t\t\ttarget.$eventSource = null;\n\t\t}\n\n\t\treturn return_value;\n\t},\n\t//assign handler for some named event\n\tattachEvent:function(type,functor,id){\n\t\tassert(functor, \"Invalid event handler for \"+type);\n\n\t\ttype=type.toLowerCase();\n\t\t\n\t\tid=id||uid(); //ID can be used for detachEvent\n\t\tfunctor = toFunctor(functor, this.$scope);\t//functor can be a name of method\n\n\t\tvar event_stack=this._evs_events[type]||_to_array();\n\t\t//save new event handler\n\t\tif (arguments[3])\n\t\t\tevent_stack.unshift(functor);\n\t\telse\n\t\t\tevent_stack.push(functor);\n\t\tthis._evs_events[type]=event_stack;\n\t\tthis._evs_handlers[id]={ f:functor,t:type };\n\t\t\n\t\treturn id;\n\t},\n\t//remove event handler\n\tdetachEvent:function(id){\n\t\tif(!this._evs_handlers[id]){\n\t\t\tvar name = (id+\"\").toLowerCase();\n\t\t\tif (this._evs_events[name]){\n\t\t\t\tthis._evs_events[name] = _to_array();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tvar type=this._evs_handlers[id].t;\n\t\tvar functor=this._evs_handlers[id].f;\n\t\t\n\t\t//remove from all collections\n\t\tvar event_stack=this._evs_events[type];\n\t\tevent_stack.remove(functor);\n\t\tdelete this._evs_handlers[id];\n\t},\n\thasEvent:function(type){\n\t\ttype=type.toLowerCase();\n\t\tvar stack = this._evs_events[type];\n\t\tif (stack && stack.length) return true;\n\n\t\tvar parent = this._evs_map[type];\n\t\tif (parent)\n\t\t\treturn parent.hasEvent(type);\n\t\treturn false;\n\t}\n};\n\nexport default EventSystem;","import {extend} from \"./helpers\";\nimport EventSystem from \"../core/eventsystem\";\n\nvar evs = {};\nextend(evs, EventSystem, true);\n\nexport const callEvent = (a,b) => evs.callEvent(a, b);\nexport const attachEvent = (a,b,c,d) => evs.attachEvent(a, b, c, d);\nexport const detachEvent = (a) => evs.detachEvent(a);\nexport const blockEvent = () => evs.blockEvent();\nexport const unblockEvent = () => evs.unblockEvent();\nexport const mapEvent = map => evs.mapEvent(map);\nexport const hasEvent = type => evs.hasEvent(type);\n","import { assert } from \"../../webix/debug\";\n\nconst xml={\n\t_isValidXML:function(data){\n\t\tif (!data || !data.documentElement)\n\t\t\treturn null;\n\t\tif (data.getElementsByTagName(\"parsererror\").length)\n\t\t\treturn null;\n\t\treturn data;\n\t},\n\t//convert xml string to xml object if necessary\n\ttoObject:function(text, response){\n\t\tvar data = response ? (response.rawxml ? response.rawxml() : response) :null;\n\t\tif (this._isValidXML(data))\n\t\t\treturn data;\n\t\tif (typeof text == \"string\")\n\t\t\tdata = this.fromString(text.replace(/^[\\s]+/,\"\"));\n\t\telse\n\t\t\tdata = text;\n\n\t\tif (this._isValidXML(data))\n\t\t\treturn data;\n\t\treturn null;\n\t},\n\t//get array of records\n\tgetRecords:function(data){\n\t\treturn this.xpath(data,this.records);\n\t},\n\trecords:\"/*/item\",\n\tchild:\"item\",\n\tconfig:\"/*/config\",\n\t//get hash of properties for single record\n\tgetDetails:function(data){\n\t\treturn this.tagToObject(data,{});\n\t},\n\tgetOptions:function(){ \n\t\treturn false;\n\t},\n\t//get count of data and position at which new data_loading need to be inserted\n\tgetInfo:function(data){\n\t\t\n\t\tvar config = this.xpath(data, this.config);\n\t\tif (config.length)\n\t\t\tconfig = this.assignTypes(this.tagToObject(config[0],{}));\n\t\telse \n\t\t\tconfig = null;\n\n\t\treturn {\n\t\t\tsize:(data.documentElement.getAttribute(\"total_count\")||0),\n\t\t\tfrom:data.documentElement.getAttribute(\"pos\"),\n\t\t\tparent:(data.documentElement.getAttribute(\"parent\")||0),\n\t\t\tconfig:config\n\t\t};\n\t},\n\t//xpath helper\n\txpath:function(xml,path){\n\t\tif (window.XPathResult){\t//FF, KHTML, Opera\n\t\t\tvar node=xml;\n\t\t\tif(xml.nodeName.indexOf(\"document\")==-1)\n\t\t\t\txml=xml.ownerDocument;\n\n\t\t\tvar res = [];\n\t\t\tvar col = xml.evaluate(path, node, null, XPathResult.ANY_TYPE, null);\n\t\t\tvar temp = col.iterateNext();\n\t\t\twhile (temp){ \n\t\t\t\tres.push(temp);\n\t\t\t\ttemp = col.iterateNext();\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\t\telse {\n\t\t\tvar test = true;\n\t\t\ttry {\n\t\t\t\tif (typeof(xml.selectNodes)==\"undefined\")\n\t\t\t\t\ttest = false;\n\t\t\t} catch(e){ /*IE7 and below can't operate with xml object*/ }\n\t\t\t//IE\n\t\t\tif (test)\n\t\t\t\treturn xml.selectNodes(path);\n\t\t\telse {\n\t\t\t\t//there is no interface to do XPath\n\t\t\t\t//use naive approach\n\t\t\t\tvar name = path.split(\"/\").pop();\n\n\t\t\t\treturn xml.getElementsByTagName(name);\n\t\t\t}\n\t\t}\n\t},\n\tassignTypes:function(obj){\n\t\tfor (var k in obj){\n\t\t\tvar test = obj[k];\n\t\t\tif (typeof test == \"object\")\n\t\t\t\tthis.assignTypes(test);\n\t\t\telse if (typeof test == \"string\"){\n\t\t\t\tif (test === \"\") \n\t\t\t\t\tcontinue;\n\t\t\t\tif (test == \"true\")\n\t\t\t\t\tobj[k] = true;\n\t\t\t\telse if (test == \"false\")\n\t\t\t\t\tobj[k] = false;\n\t\t\t\telse if (test == test*1)\n\t\t\t\t\tobj[k] = obj[k]*1;\n\t\t\t}\n\t\t}\n\t\treturn obj;\n\t},\n\t//convert xml tag to js object, all subtags and attributes are mapped to the properties of result object\n\ttagToObject:function(tag,z){\n\t\tvar isArray = tag.nodeType == 1 && tag.getAttribute(\"stack\");\n\t\tvar hasSubTags = 0;\n\n\t\tif (!isArray){\n\t\t\tz=z||{};\n\t\t\t\n\n\t\t\t//map attributes\n\t\t\tlet a=tag.attributes;\n\t\t\tif(a && a.length)\n\t\t\t\tfor (let i=0; i<a.length; i++){\n\t\t\t\t\tz[a[i].name]=a[i].value;\n\t\t\t\t\thasSubTags = 1;\n\t\t\t\t}\n\n\t\t\t//map subtags\n\t\t\tlet b=tag.childNodes;\n\t\t\tfor (let i=0; i<b.length; i++)\n\t\t\t\tif (b[i].nodeType==1){\n\t\t\t\t\tconst name = b[i].tagName;\n\t\t\t\t\tif (z[name]){\n\t\t\t\t\t\tif (typeof z[name].push != \"function\")\n\t\t\t\t\t\t\tz[name] = [z[name]];\n\t\t\t\t\t\tz[name].push(this.tagToObject(b[i],{}));\n\t\t\t\t\t} else\n\t\t\t\t\t\tz[name]=this.tagToObject(b[i],{});\t//sub-object for complex subtags\n\t\t\t\t\thasSubTags = 2;\n\t\t\t\t}\n\n\t\t\tif (!hasSubTags)\n\t\t\t\treturn this.nodeValue(tag);\n\t\t\t//each object will have its text content as \"value\" property\n\t\t\t//only if has not sub tags\n\t\t\tif (hasSubTags < 2)\n\t\t\t\tz.value = z.value||this.nodeValue(tag);\n\n\t\t} else {\n\t\t\tz = [];\n\t\t\tlet b=tag.childNodes;\n\t\t\tfor (let i=0; i<b.length; i++)\n\t\t\t\tif (b[i].nodeType==1)\n\t\t\t\t\tz.push(this.tagToObject(b[i],{}));\n\t\t}\n\n\t\treturn z;\n\t},\n\t//get value of xml node \n\tnodeValue:function(node){\n\t\tif (node.firstChild){\n\t\t\treturn node.firstChild.wholeText || node.firstChild.data;\n\t\t}\n\t\treturn \"\";\n\t},\n\t//convert XML string to XML object\n\tfromString:function(xmlString){\n\t\ttry{\n\t\t\tif (window.DOMParser)\t\t// FF, KHTML, Opera\n\t\t\t\treturn (new DOMParser()).parseFromString(xmlString,\"text/xml\");\n\t\t\t/* global ActiveXObject */\n\t\t\tif (window.ActiveXObject){\t// IE, utf-8 only \n\t\t\t\tvar temp=new ActiveXObject(\"Microsoft.xmlDOM\");\n\t\t\t\ttemp.loadXML(xmlString);\n\t\t\t\treturn temp;\n\t\t\t}\n\t\t} catch(e){\n\t\t\tassert(0, e);\n\t\t\treturn null;\n\t\t}\n\t\tassert(0, \"Load from xml string is not supported\");\n\t}\n};\n\nexport default xml;","import { log, assert } from \"../../webix/debug\";\nimport {isArray, uid} from \"../../webix/helpers\";\n\nconst json = {\n\t//convert json string to json object if necessary\n\ttoObject:function(data){\n\t\tif (!data) return null;\n\t\tif (typeof data == \"string\"){\n\t\t\ttry{\n\t\t\t\tif (this.parseDates){\n\t\t\t\t\tvar isodate = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(.\\d{1-3})?Z/;\n\t\t\t\t\tdata = JSON.parse(data, function(key, value){\n\t\t\t\t\t\tif (typeof value == \"string\"){\n\t\t\t\t\t\t\tif (isodate.test(value))\n\t\t\t\t\t\t\t\treturn new Date(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tdata =JSON.parse(data);\n\t\t\t\t}\n\t\t\t} catch(e){\n\t\t\t\tlog(e);\n\t\t\t\tlog(data);\n\t\t\t\tassert(0, \"Invalid JSON data for parsing\");\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\treturn data;\n\t},\n\t//get array of records\n\tgetRecords:function(data){\n\t\tif (data && data.data)\n\t\t\tdata = data.data;\n\n\t\tif (data && !isArray(data))\n\t\t\treturn [data];\n\t\treturn data;\n\t},\n\t//get hash of properties for single record\n\tgetDetails:function(data){\n\t\tif (typeof data == \"string\")\n\t\t\treturn { id:(data||uid()), value:data };\n\t\treturn data;\n\t},\n\tgetOptions:function(data){\n\t\treturn data.collections;\n\t},\n\t//get count of data and position at which new data need to be inserted\n\tgetInfo:function(data){\n\t\treturn {\n\t\t\tsize:(data.total_count||0),\n\t\t\tfrom:data.pos,\n\t\t\tparent:(data.parent||0),\n\t\t\tconfig:(data.config)\n\t\t};\n\t},\n\tchild:\"data\",\n\tparseDates:false\n};\n\nexport default json;","import { log, assert } from \"../webix/debug\";\nimport { isArray, extend } from \"../webix/helpers\";\nimport { stringify } from \"../webix/stringify\";\nimport { callEvent } from \"../webix/customevents\";\nimport promise from \"../thirdparty/promiz\";\n\nimport xml from \"./drivers/xml\";\nimport json from \"./drivers/json\";\n\nexport function ajax(url,params,call){\n\t//if parameters was provided - made fast call\n\tif (arguments.length!==0){\n\t\treturn (new ajax()).get(url,params,call);\n\t}\n\n\tif (!this || !this.getXHR) return new ajax(); //allow to create new instance without direct new declaration\n\n\treturn this;\n}\n\najax.count = 0;\najax.prototype={\n\tmaster:null,\n\t//creates xmlHTTP object\n\tgetXHR:function(){\n\t\treturn new XMLHttpRequest();\n\t},\n\tstringify:function(obj){\n\t\treturn stringify(obj);\n\t},\n\t/*\n\t\tsend data to the server\n\t\tparams - hash of properties which will be added to the url\n\t\tcall - callback, can be an object with success and error functions\n\t*/\n\t_send:function(url, params, call, mode){\n\t\tvar master;\n\t\t//webix.ajax(url, callback) - can be called only by user\n\t\tif (params && (isArray(params) || (typeof (params.success || params.error || params) == \"function\"))){\n\t\t\tmaster = call;\n\t\t\tcall = params;\n\t\t\tparams = null;\n\t\t}\n\n\t\tvar defer = promise.defer();\n\t\tvar x=this.getXHR();\n\t\tvar headers = this._header || {};\n\n\t\tif (!callEvent(\"onBeforeAjax\", [mode, url, params, x, headers, null, defer])){\n\t\t\treturn defer.reject(x);\n\t\t}\n\n\t\t//add content-type to POST|PUT|DELETE\n\t\tvar json_mode = false;\n\t\tif (mode !== \"GET\"){\n\t\t\tvar found = false;\n\t\t\tfor (let key in headers)\n\t\t\t\tif (key.toString().toLowerCase() == \"content-type\"){\n\t\t\t\t\tfound = true;\n\t\t\t\t\tif (headers[key] == \"application/json\")\n\t\t\t\t\t\tjson_mode = true;\n\t\t\t\t}\n\t\t\tif (!found && !(window.FormData && (params instanceof window.FormData)))\n\t\t\t\theaders[\"Content-Type\"] = \"application/x-www-form-urlencoded\";\n\t\t}\n\n\t\t//add extra params to the url\n\t\tif (typeof params == \"object\" && !(window.FormData && (params instanceof window.FormData))){\n\t\t\tif (json_mode)\n\t\t\t\tparams = this.stringify(params);\n\t\t\telse {\n\t\t\t\tvar t=[];\n\t\t\t\tfor (var a in params){\n\t\t\t\t\tvar value = params[a];\n\t\t\t\t\tif (value === null || value === undefined)\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\tif(typeof value===\"object\")\n\t\t\t\t\t\tvalue = this.stringify(value);\n\t\t\t\t\tt.push(a+\"=\"+encodeURIComponent(value)); // utf-8 escaping\n\t\t\t\t}\n\t\t\t\tparams=t.join(\"&\");\n\t\t\t}\n\t\t}\n\n\t\tif (params && mode===\"GET\"){\n\t\t\turl=url+(url.indexOf(\"?\")!=-1 ? \"&\" : \"?\")+params;\n\t\t\tparams = null;\n\t\t}\n\n\t\tx.open(mode, url, !this._sync);\n\n\t\tvar type = this._response;\n\t\tif (type) x.responseType = type;\n\n\t\t//if header was provided - use it\n\t\tfor (let key in headers)\n\t\t\tx.setRequestHeader(key, headers[key]);\n\t\t\n\t\t//async mode, define loading callback\n\t\tvar self=this;\n\t\tthis.master = this.master || master;\n\t\tx.onreadystatechange = function(){\n\t\t\tif (!x.readyState || x.readyState == 4){\n\t\t\t\tajax.count++;\n\n\t\t\t\tvar is_error = x.status >= 400 || x.status === 0;\n\t\t\t\tvar text, data;\n\t\t\t\tif (x.responseType == \"blob\" || x.responseType == \"arraybuffer\"){\n\t\t\t\t\ttext = \"\";\n\t\t\t\t\tdata = x.response;\n\t\t\t\t} else {\n\t\t\t\t\ttext = x.responseText||\"\";\n\t\t\t\t\tdata = self._data(x);\n\t\t\t\t}\n\t\t\t\tif (is_error){\n\t\t\t\t\tcallEvent(\"onAjaxError\", [x]);\n\t\t\t\t\tdefer.reject(x);\n\t\t\t\t\tif(call)\n\t\t\t\t\t\tajax.$callback((self.master || window), call, text, data, x, is_error);\n\t\t\t\t} else {\n\t\t\t\t\tdefer.resolve(data);\n\t\t\t\t\tif(call)\n\t\t\t\t\t\tajax.$callback((self.master || window), call, text, data, x, is_error);\n\t\t\t\t}\t\n\t\t\t}\n\t\t};\n\n\t\tif (this._timeout)\n\t\t\tx.timeout = this._timeout;\n\n\t\t//IE can use sync mode sometimes, fix it\n\t\tif (!this._sync)\n\t\t\tsetTimeout(function(){\n\t\t\t\tx.send(params||null);\n\t\t\t}, 1);\n\t\telse\n\t\t\tx.send(params||null);\n\t\t\n\t\tif (this.master && !this._sync){\n\t\t\tdefer.then(function(data){\n\t\t\t\t//anti-leak\n\t\t\t\tself.master=null;\n\t\t\t\tcall=self=master=null;\t\n\t\t\t\treturn data;\n\t\t\t});\n\t\t}\n\n\t\treturn this._sync?x:defer; //return XHR, which can be used in case of sync. mode\n\t},\n\t_data:function(x){\n\t\treturn {\n\t\t\txml:function(){ \n\t\t\t\ttry{\n\t\t\t\t\treturn xml.tagToObject(xml.toObject(x.responseText, this));\n\t\t\t\t}\n\t\t\t\tcatch(e){\n\t\t\t\t\tlog(x.responseText);\n\t\t\t\t\tlog(e.toString()); assert(0, \"Invalid xml data for parsing\"); \n\t\t\t\t}\n\t\t\t},\n\t\t\trawxml:function(){ \n\t\t\t\tif (!window.XPathResult)\n\t\t\t\t\treturn xml.fromString(x.responseText);\n\t\t\t\treturn x.responseXML;\n\t\t\t},\n\t\t\ttext:function(){ return x.responseText; },\n\t\t\tjson:function(){\n\t\t\t\treturn json.toObject(x.responseText, false);\n\t\t\t}\n\t\t};\n\t},\n\t//GET request\n\tget:function(url,params,call){\n\t\treturn this._send(url,params,call,\"GET\");\n\t},\n\t//POST request\n\tpost:function(url,params,call){\n\t\treturn this._send(url,params,call,\"POST\");\n\t},\n\t//PUT request\n\tput:function(url,params,call){\n\t\treturn this._send(url,params,call,\"PUT\");\n\t},\n\t//DELETE request\n\tdel:function(url,params,call){\n\t\treturn this._send(url,params,call,\"DELETE\");\n\t},\n\t//PATCH request\n\tpatch:function(url,params,call){\n\t\treturn this._send(url,params,call,\"PATCH\");\n\t},\n\n\tsync:function(){\n\t\tthis._sync = true;\n\t\treturn this;\n\t},\n\ttimeout:function(num){\n\t\tthis._timeout = num;\n\t\treturn this;\n\t},\n\tresponse:function(value){\n\t\tthis._response = value;\n\t\treturn this;\n\t},\n\theaders:function(header){\n\t\tthis._header = extend(this._header||{},header);\n\t\treturn this;\n\t},\n\tbind:function(master){\n\t\tthis.master = master;\n\t\treturn this;\n\t}\n};\najax.$callback = function(owner, call, text, data, x, is_error){\n\tif (owner.$destructed) return;\n\n\tif (is_error)\n\t\tcallEvent(\"onAjaxError\", [x]);\n\t\n\tif (call){\n\t\tvar method = call.success || call;\n\t\tif (is_error)\n\t\t\tmethod = call.error;\n\t\tif (method && method.call)\n\t\t\tmethod.call(owner,text,data,x);\n\t}\n};","import {ajax} from \"../ajax\";\n\nconst proxy = {\n\t$proxy:true,\n\tload:function(){\n\t\tvar parts = this.source.split(\"@\");\n\t\tvar ext = parts[0].split(\".\").pop();\n\t\treturn ajax().response(\"arraybuffer\").get(parts[0]).then(function(res){\n\t\t\tvar options = { ext:ext, dataurl : parts[1] };\n\t\t\treturn { data:res, options:options };\n\t\t});\n\t}\n};\n\nexport default proxy;","import {delay} from \"../../webix/helpers\";\n\n\n\nconst proxy = {\n\t$proxy:true,\n\tload:function(){},\n\tsave:function(v,u,d){\n\t\tdelay(function(){\n\t\t\twindow.console.log(\"[DP] \"+u.id+\" -> \"+u.operation, u.data);\n\t\t\tvar data = {\n\t\t\t\tid:u.data.id,\n\t\t\t\tnewid:u.data.id,\n\t\t\t\tstatus:u.data.operation\n\t\t\t};\n\t\t\td.processResult(data, data);\n\t\t});\n\t}\n};\n\nexport default proxy;","import {ajax} from \"../ajax\";\n\nconst proxy = {\n\t$proxy:true,\n\tload:function(){\n\t\treturn ajax(this.source);\n\t},\n\tsave:function(view, update){\n\t\treturn proxy._save_logic.call(this, update, ajax());\n\t},\n\t_save_logic:function(update, ajax){\n\t\tvar url = this.source;\n\t\tvar query = \"\";\n\t\tvar mark = url.indexOf(\"?\");\n\n\t\tif (mark !== -1){\n\t\t\tquery = url.substr(mark);\n\t\t\turl = url.substr(0, mark);\n\t\t}\n\n\t\turl += url.charAt(url.length-1) == \"/\" ? \"\" : \"/\";\n\t\tvar mode = update.operation;\n\n\n\t\tvar data = update.data;\n\t\tif (mode == \"insert\") delete data.id;\n\n\t\t//call rest URI\n\t\tif (mode == \"update\"){\n\t\t\treturn ajax.put(url + data.id + query, data);\n\t\t} else if (mode == \"delete\") {\n\t\t\treturn ajax.del(url + data.id + query, data);\n\t\t} else {\n\t\t\treturn ajax.post(url + query, data);\n\t\t}\n\t}\n};\n\nexport default proxy;\n","import {ajax} from \"../ajax\";\nimport rest from \"./rest\";\n\nconst proxy = {\n\t$proxy:true,\n\tload:function(){\n\t\treturn ajax(this.source);\n\t},\n\tsave:function(view, update){\n\t\tvar xhr = ajax().headers({ \"Content-Type\":\"application/json\" });\n\t\treturn rest._save_logic.call(this, update, xhr);\n\t}\n};\n\nexport default proxy;","import {extend} from \"../../webix/helpers\";\n\nimport {ajax} from \"../ajax\";\n\nconst proxy = {\n\t$proxy:true,\n\tload:function(view, params){\n\t\tparams = extend(params||{}, this.params || {}, true);\n\t\treturn ajax().post(this.source, params);\n\t}\n};\n\nexport default proxy;","import {ajax} from \"../ajax\";\n\nfunction unbox(data){\n\tif (!data || !typeof data === \"object\" || Array.isArray(data))\n\t\treturn data;\n\n\tvar lkey =\"\";\n\tvar count = 0;\n\tfor (var key in data){\n\t\tcount++;\n\t\tif (count == 2) return data;\n\t\tlkey = key;\n\t}\n\n\treturn data[lkey];\n}\n\nconst GraphQL = {\n\t$proxy:true,\n\tsave:function(data){\n\t\treturn this.load(data);\n\t},\n\tload:function(view){\n\t\tvar params = {\n\t\t\tquery: this.source\n\t\t};\n\t\tif (arguments.length === 1){\n\t\t\tparams.variables = view;\n\t\t}\n\n\t\treturn ajax()\n\t\t\t.headers({ \"Content-type\": \"application/json\" })\n\t\t\t.post(this.url, params)\n\t\t\t.then(function(data){\n\t\t\t\treturn unbox(data.json().data);\n\t\t\t});\n\t}\n};\n\nexport default GraphQL;","import {assert} from \"../webix/debug\";\nimport {extend, copy as makeCopy} from \"../webix/helpers\";\n\nimport binary from \"./proxy/binary\";\nimport debug from \"./proxy/debug\";\nimport json from \"./proxy/json\";\nimport post from \"./proxy/post\";\nimport rest from \"./proxy/rest\";\nimport graphql from \"./proxy/graphql\";\n\nfunction proxy(name, source, extra){\n\tassert(proxy[name], \"Invalid proxy name: \"+name);\n\n\tvar copy = makeCopy(proxy[name]);\n\tcopy.source = source;\n\n\tif (extra)\n\t\textend(copy, extra, true);\n\n\tif (copy.init) copy.init();\n\treturn copy;\n}\n\nproxy.$parse = function(value){\n\tif (typeof value == \"string\" && value.indexOf(\"->\") != -1){\n\t\tvar parts = value.split(\"->\");\n\t\treturn proxy(parts[0], parts[1]);\n\t}\n\treturn value;\n};\n\nproxy.binary = binary;\nproxy.debug = debug;\nproxy.json = json;\nproxy.post = post;\nproxy.rest = rest;\nproxy.GraphQL = graphql;\n\nexport default proxy;","const jsarray={\n\t//parse jsarray string to jsarray object if necessary\n\ttoObject:function(data){\n\t\tif (typeof data == \"string\")\n\t\t\treturn JSON.parse(data);\n\t\treturn data;\n\t},\n\t//get array of records\n\tgetRecords:function(data){\n\t\tif (data && data.data)\n\t\t\tdata = data.data;\n\t\treturn data;\n\t},\n\t//get hash of properties for single record, in case of array they will have names as \"data{index}\"\n\tgetDetails:function(data){\n\t\tvar result = {};\n\t\tfor (var i=0; i < data.length; i++)\n\t\t\tresult[\"data\"+i]=data[i];\n\t\tif (this.idColumn !== null)\n\t\t\tresult.id = data[this.idColumn];\n\n\t\treturn result;\n\t},\n\tgetOptions:function(){ return false; },\n\t//dyn loading is not supported by js-array data source\n\tgetInfo:function(){\n\t\treturn {\n\t\t\tsize:0\n\t\t};\n\t},\n\tidColumn:null\n};\n\nexport default jsarray;","import { toNode } from \"../../webix/helpers.js\";\nimport xml from \"./xml.js\";\n\nconst html = {\n\t/*\n\t\tincoming data can be\n\t\t - ID of parent container\n\t\t - HTML text\n\t*/\n\ttoObject:function(data){\n\t\tif (typeof data == \"string\"){\n\t\t\tvar t=null;\n\t\t\tif (data.indexOf(\"<\")==-1)\t//if no tags inside - probably its an ID\n\t\t\t\tt = toNode(data);\n\t\t\tif (!t){\n\t\t\t\tt=document.createElement(\"DIV\");\n\t\t\t\tt.innerHTML = data;\n\t\t\t}\n\t\t\n\t\t\treturn t.firstChild;\n\t\t}\n\t\treturn data;\n\t},\n\t//get array of records\n\tgetRecords:function(node){\n\t\treturn node.getElementsByTagName(this.tag);\n\t},\n\t//get hash of properties for single record\n\tgetDetails:function(data){\n\t\treturn xml.tagToObject(data);\n\t},\n\tgetOptions:function(){ \n\t\treturn false;\n\t},\n\t//dyn loading is not supported by HTML data source\n\tgetInfo:function(){\n\t\treturn {\n\t\t\tsize:0\n\t\t};\n\t},\n\ttag: \"LI\"\n};\n\nexport default html;","const env = {};\n\nenv.cdn = \"//cdn.webix.com/\";\nenv.codebase = \"\";\nenv.zIndexBase = 100;\nenv.scrollSize = 17;\nenv.strict = !!window.webix_strict;\nenv.https = document.location.protocol === \"https:\";\n\nvar agent = navigator.userAgent;\nenv.isMac = agent.indexOf(\"Mac\")!=-1;\n\nif (agent.indexOf(\"Mobile\")!=-1 || agent.indexOf(\"Windows Phone\")!=-1)\n\tenv.mobile = true;\nif (env.mobile || agent.indexOf(\"iPad\")!=-1 || agent.indexOf(\"Android\")!=-1)\n\tenv.touch = true;\nif (agent.indexOf(\"Opera\")!=-1)\n\tenv.isOpera=true;\nelse{\n\t//very rough detection, but it is enough for current goals\n\tenv.isIE=!!document.all || (agent.indexOf(\"Trident\") !== -1);\n\tif (env.isIE){\n\t\tvar version = parseFloat(navigator.appVersion.split(\"MSIE\")[1]);\n\t\tif (version == 8)\n\t\t\tenv.isIE8 = true;\n\t}\n\tenv.isEdge=(agent.indexOf(\"Edge\")!=-1);\n\tenv.isFF=(agent.indexOf(\"Firefox\")!=-1);\n\tenv.isWebKit=(agent.indexOf(\"KHTML\")!=-1);\n\tenv.isSafari=env.isWebKit && env.isMac && (agent.indexOf(\"Chrome\")==-1);\n\n\t//maximum height/width for HTML elements in pixels (rough), bigger values will be ignored by browser\n\tif(env.isIE || env.isEdge || env.isFF)\n\t\tenv.maxHTMLElementSize = 10000000;\n\tif(env.isSafari)\n\t\tenv.maxHTMLElementSize = 100000000;\n}\n\nif(agent.toLowerCase().indexOf(\"android\")!=-1){\n\tenv.isAndroid = true;\n\tif(agent.toLowerCase().indexOf(\"trident\")!=-1){\n\t\tenv.isAndroid = false;\n\t\tenv.isIEMobile = true;\n\t}\n}\n\nenv.transform = false;\nenv.transition = false;\n\nvar found_index = -1;\nvar js_list =  [\"\", \"webkit\", \"Moz\", \"O\", \"ms\"];\nvar css_list = [\"\", \"-webkit-\", \"-Moz-\", \"-o-\", \"-ms-\"];\n\n\nvar d = document.createElement(\"DIV\");\nfor (var j=0; j < js_list.length; j++) {\n\tvar name = js_list[j] ? (js_list[j]+\"Transform\") : \"transform\";\n\tif(typeof d.style[name] != \"undefined\"){\n\t\tfound_index = j;\n\t\tbreak;\n\t}\n}\n\n\nif (found_index > -1){\n\tenv.cssPrefix = css_list[found_index];\n\tvar jp = env.jsPrefix = js_list[found_index];\n\n\tenv.transform = jp ? jp+\"Transform\" : \"transform\";\n\tenv.transition = jp ? jp+\"Transition\" : \"transition\";\n\tenv.transitionDuration = jp ? jp+\"TransitionDuration\" : \"transitionDuration\";\n\n\td.style[env.transform] = \"translate3d(0,0,0)\";\n\tenv.translate = (d.style[env.transform])?\"translate3d\":\"translate\";\n\tenv.transitionEnd = ((env.cssPrefix == \"-Moz-\")?\"transitionend\":(jp ? jp+\"TransitionEnd\" : \"transitionend\"));\n}\n\nenv.pointerevents = (!env.isIE ||(new RegExp(\"Trident/.*rv:11\")).exec(agent) !== null);\n\n//touch events that can be prevented\nenv.passiveEventListeners = false;\ntry {\n\tvar opts = Object.defineProperty({}, \"passive\", {\n\t\tget: function() { // eslint-disable-line\n\t\t\tenv.passiveEventListeners = true;\n\t\t}\n\t});\n\twindow.addEventListener(\"testPassive\", null, opts);\n\twindow.removeEventListener(\"testPassive\", null, opts);\n} catch (e) {} // eslint-disable-line\n\nenv.svg = (function(){\n\treturn document.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\");\n})();\n\nenv.svganimation = (function(){\n\treturn document.implementation.hasFeature(\"https://www.w3.org/TR/SVG11/feature#SVG-animation\", \"1.1\");\n})();\n\nexport default env;","import {delay, uid, toNode, isUndefined} from \"./helpers.js\";\nimport env from \"./env.js\";\n\nlet _native_on_selectstart = 0;\nconst _style_element = {};\nconst _style_cache = {};\n\nexport function denySelect(){\n\tif (!_native_on_selectstart)\n\t\t_native_on_selectstart = document.onselectstart;\n\tdocument.onselectstart = stopEvent;\n}\n\nexport function allowSelect(){\n\tif (_native_on_selectstart !== 0){\n\t\tdocument.onselectstart = _native_on_selectstart||null;\n\t}\n\t_native_on_selectstart = 0;\n\n}\n\nexport function index(node){\n\tvar k=0;\n\t//must be =, it is not a comparation!\n\twhile ((node = node.previousSibling)) k++;\n\treturn k;\n}\n\nexport function createCss(rule, sufix){\n\tvar text = \"\";\n\tsufix = sufix || \"\";\n\n\tfor (var key in rule)\n\t\ttext+= key+\":\"+rule[key]+\";\";\n    \n\tvar name = _style_cache[text+sufix];\n\tif (!name){\n\t\tname = \"s\"+uid();\n\t\taddStyle(\".\"+name+(sufix||\"\")+\"{\"+text+\"}\");\n\t\t_style_cache[text+sufix] = name;\n\t}\n\treturn name;\n}\n\nexport function addStyle(rule, group){\n\tvar style = group ? _style_element[group] :_style_element[\"default\"];\n\tif(!style){\n\t\tstyle = document.createElement(\"style\");\n\t\tstyle.setAttribute(\"type\", \"text/css\");\n\t\tstyle.setAttribute(\"media\", \"screen,print\");\n\t\tdocument.getElementsByTagName(\"head\")[0].appendChild(style);\n\n\t\tif (group)\n\t\t\t_style_element[group] = style;\n\t\telse\n\t\t\t_style_element[\"default\"] = style;\n\t}\n\t/*IE8*/\n\tif (style.styleSheet)\n\t\tstyle.styleSheet.cssText += rule;\n\telse\n\t\tstyle.appendChild(document.createTextNode(rule));\n}\n\nexport function removeStyle(group){\n\tvar box = _style_element[group||\"default\"];\n\tif (box)\n\t\tbox.innerHTML = \"\";\n}\n\nexport function create(name,attrs,html){\n\tattrs = attrs || {};\n\tvar node = document.createElement(name);\n\tfor (var attr_name in attrs)\n\t\tnode.setAttribute(attr_name, attrs[attr_name]);\n\tif (attrs.style)\n\t\tnode.style.cssText = attrs.style;\n\tif (attrs[\"class\"])\n\t\tnode.className = attrs[\"class\"];\n\tif (html)\n\t\tnode.innerHTML=html;\n\treturn node;\n}\n\n//return node value, different logic for different html elements\nexport function getValue(node){\n\tnode = toNode(node);\n\tif (!node) return \"\";\n\treturn isUndefined(node.value)?node.innerHTML:node.value;\n}\n\n//remove html node, can process an array of nodes at once\nexport function remove(node){\n\tif (node instanceof Array)\n\t\tfor (var i=0; i < node.length; i++)\n\t\t\tremove(node[i]);\n\telse if (node && node.parentNode)\n\t\tnode.parentNode.removeChild(node);\n}\n\n//insert new node before sibling, or at the end if sibling doesn't exist\nexport function insertBefore(node,before,rescue){\n\tif (!node) return;\n\tif (before && before.parentNode)\n\t\tbefore.parentNode.insertBefore(node, before);\n\telse\n\t\trescue.appendChild(node);\n}\n\n//return custom ID from html element \n//will check all parents starting from event's target\nexport function locate(e,id){\n\tvar trg;\n\tif (e.tagName)\n\t\ttrg = e;\n\telse {\n\t\te=e||event;\n\t\ttrg=e.target||e.srcElement;\n\t}\n    \n\twhile (trg){\n\t\tif (trg.getAttribute){\t//text nodes has not getAttribute\n\t\t\tvar test = trg.getAttribute(id);\n\t\t\tif (test) return test;\n\t\t}\n\t\ttrg=trg.parentNode;\n\t}\t\n\treturn null;\n}\n\n//returns position of html element on the page\nexport function offset(elem) {\n\tif (elem.getBoundingClientRect) { //HTML5 method\n\t\tconst box = elem.getBoundingClientRect();\n\t\tconst body = document.body;\n\t\tconst docElem = document.documentElement;\n\t\tconst scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;\n\t\tconst scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;\n\t\tconst clientTop = docElem.clientTop || body.clientTop || 0;\n\t\tconst clientLeft = docElem.clientLeft || body.clientLeft || 0;\n\t\tconst top  = box.top +  scrollTop - clientTop;\n\t\tconst left = box.left + scrollLeft - clientLeft;\n\t\treturn { y: Math.round(top), x: Math.round(left), width:elem.offsetWidth, height:elem.offsetHeight };\n\t} else { //fallback to naive approach\n\t\tlet top=0, left=0;\n\t\twhile(elem) {\n\t\t\ttop = top + parseInt(elem.offsetTop,10);\n\t\t\tleft = left + parseInt(elem.offsetLeft,10);\n\t\t\telem = elem.offsetParent;\n\t\t}\n\t\treturn { y: top, x: left, width:elem.offsetHeight, height:elem.offsetWidth };\n\t}\n}\n\n//returns relative position of event\nexport function posRelative(ev){\n\tev = ev || event;\n\tif (!isUndefined(ev.offsetX))\n\t\treturn { x:ev.offsetX, y:ev.offsetY };\t//ie, webkit\n\telse\n\t\treturn { x:ev.layerX, y:ev.layerY };\t//firefox\n}\n\n//returns position of event\nexport function pos(ev){\n\tev = ev || event;\n\tif (ev.touches && ev.touches[0])\n\t\tev = ev.touches[0];\n\n\tif(ev.pageX || ev.pageY)\t//FF, KHTML\n\t\treturn {x:ev.pageX, y:ev.pageY};\n\t//IE\n\tvar d  =  ((env.isIE)&&(document.compatMode != \"BackCompat\"))?document.documentElement:document.body;\n\treturn {\n\t\tx:ev.clientX + d.scrollLeft - d.clientLeft,\n\t\ty:ev.clientY + d.scrollTop  - d.clientTop\n\t};\n}\n\n//prevent event action\nexport function preventEvent(e){\n\tif(e && e.preventDefault) e.preventDefault();\n\tif(e) e.returnValue = false;\n\treturn stopEvent(e);\n}\n\n//stop event bubbling\nexport function stopEvent(e){\n\te = (e||event);\n\tif(e.stopPropagation) e.stopPropagation();\n\te.cancelBubble=true;\n\treturn false;\n}\n\nexport function triggerEvent(node, type, name){\n\tif(document.createEventObject){\n\t\tconst ev = document.createEventObject();\n\t\tif (node.fireEvent)\n\t\t\tnode.fireEvent(\"on\"+name, ev);\n\t} else{\n\t\tconst ev = document.createEvent(type);\n\t\tev.initEvent(name, true, true);\n\t\tif (node.dispatchEvent)\n\t\t\tnode.dispatchEvent(ev);\n\t}\n}\n\n//add css class to the node\nexport function addCss(node,name,check){\n\tif (!check || node.className.indexOf(name) === -1)\n\t\tnode.className+=\" \"+name;\n}\n\n//remove css class from the node\nexport function removeCss(node,name){\n\tnode.className=node.className.replace(RegExp(\" \"+name,\"g\"),\"\");\n}\n\nexport function getTextSize(text, css, basewidth){\n\tvar d = create(\"DIV\",{\"class\":\"webix_view webix_measure_size \"+(css||\"\")},\"\");\n\td.style.cssText = \"height:auto;visibility:hidden; position:absolute; top:0px; left:0px; overflow:hidden;\"+(basewidth?(\"width:\"+basewidth+\"px;\"):\"width:auto;white-space:nowrap;\");\n\tdocument.body.appendChild(d);\n\n\tvar all = (typeof text !==  \"object\") ? [text] : text;\n\tvar width = 0;\n\tvar height = 0;\n\n\tfor (var i = 0; i < all.length; i++) {\n\t\td.innerHTML = all[i];\n\t\t//we need to add 1 to offsetWidth/Height because these methods return value as an integer\n\t\t//we can use ie9+ d.getBoundingClientRect().width\n\t\twidth = Math.max(width, d.offsetWidth+1);\n\t\theight = Math.max(height, d.offsetHeight+1);\n\t}\n    \n\tremove(d);\n\treturn { width:width, height:height };\n}\n\nexport function download(data, filename){\n\tvar objUrl = false;\n\n\tif(typeof data ==\"object\"){//blob\n\t\tif(window.navigator.msSaveBlob)\n\t\t\treturn window.navigator.msSaveBlob(data, filename);\n\t\telse {\n\t\t\tdata = window.URL.createObjectURL(data);\n\t\t\tobjUrl = true;\n\t\t}\n\t}\n\t//data url or blob url\n\tvar link = document.createElement(\"a\");\n\tlink.href = data;\n\tlink.download = filename;\n\tdocument.body.appendChild(link);\n\tlink.click(); \n\n\tdelay(function(){\n\t\tif(objUrl) window.URL.revokeObjectURL(data);\n\t\tdocument.body.removeChild(link);\n\t\tlink.remove();\n\t});\n}\n\nexport function _getClassName(node){\n\tif(!node) return \"\";\n\n\tvar className = node.className || \"\";\n\tif(className.baseVal)//'className' exist but not a string - IE svg element in DOM\n\t\tclassName = className.baseVal;\n\n\tif(!className.indexOf)\n\t\tclassName = \"\";\n\n\treturn className;\n}\n\nexport function setSelectionRange(node, start, end){\n\tstart = start || 0;\n\tend  = end || start;\n\n\tnode.focus();\n\tif(node.setSelectionRange)\n\t\tnode.setSelectionRange(start, end);\n\telse{\n\t\t//ie8\n\t\tvar textRange = node.createTextRange();\n\t\ttextRange.collapse(true);\n\t\ttextRange.moveEnd(\"character\", end);\n\t\ttextRange.moveStart(\"character\", start);\n\t\ttextRange.select();\n\t}\n}\n\nexport function getSelectionRange(node){\n\tif(\"selectionStart\" in node)\n\t\treturn {start:node.selectionStart || 0, end:node.selectionEnd || 0};\n\telse{\n\t\t//ie8\n\t\tnode.focus();\n\t\tvar selection = document.selection.createRange();\n\t\tvar bookmark = selection.getBookmark();\n\t\tvar textRange = node.createTextRange();\n\n\t\ttextRange.moveToBookmark(bookmark);\n\t\tvar length = textRange.text.length;\n        \n\t\ttextRange.collapse(true);\n\t\ttextRange.moveStart(\"character\", -node.value.length);\n\n\t\tvar start = textRange.text.length;\n\t\treturn {start:start, end: start + length};\n\t}\n}\n\nexport function addMeta(name, value){\n\tdocument.getElementsByTagName(\"head\").item(0).appendChild(create(\"meta\",{\n\t\tname:name,\n\t\tcontent:value\n\t}));\t\n}\n\n","import {assert} from \"../../webix/debug\";\nimport {toNode, extend} from \"../../webix/helpers\";\nimport {remove} from \"../../webix/html\";\n\nconst htmltable={\n\n\t//convert json string to json object if necessary\n\ttoObject:function(data){\n\t\tdata = toNode(data);\n\t\tassert(data, \"table is not found\");\n\t\tassert(data.tagName.toLowerCase() === \"table\", \"Incorrect table object\");\n\n\t\tvar tr = data.rows;\n\t\tremove(data);\n\t\treturn tr;\n\t},\n\t//get array of records\n\tgetRecords:function(data){\n\t\tvar new_data = [];\n\t\t//skip header rows if necessary\n\t\tvar i = (data[0] && data[0]._webix_skip)?1:0;\n\n\t\tfor (; i < data.length; i++)\n\t\t\tnew_data.push(data[i]);\n\t\treturn new_data;\n\t},\n\t//get hash of properties for single record\n\tgetDetails:function(data){\n\t\tvar td = data.getElementsByTagName(\"td\");\n\t\tdata = {};\n\t\t//get hash of properties for single record, data named as \"data{index}\"\n\t\tfor (var i=0; i < td.length; i++) {\n\t\t\tdata[\"data\" + i] = td[i].innerHTML;\n\t\t}\n\t\treturn data;\n\t},\n\t//get count of data and position at which new data need to be inserted\n\tgetInfo:function(){\n\t\t// dyn loading is not supported for htmltable\n\t\treturn { \n\t\t\tsize:0\n\t\t};\n\t},\n\tgetOptions:function(){},\n\n\t/*! gets header from first table row\n\t **/\n\tgetConfig: function(data) {\n\t\tvar columns = [];\n\t\tvar td = data[0].getElementsByTagName(\"th\");\n\t\tif (td.length) data[0]._webix_skip = true;\n\t\tfor (var i = 0; i < td.length; i++) {\n\t\t\tvar col = {\n\t\t\t\tid: \"data\" + i,\n\t\t\t\theader: this._de_json(td[i].innerHTML)\n\t\t\t};\n\t\t\tvar attrs = this._get_attrs(td[i]);\n\t\t\tcol = extend(col, attrs);\n\t\t\tcolumns.push(col);\n\t\t}\n\t\treturn columns;\n\t},\n\n\t_de_json:function(str){\n\t\tvar pos = str.indexOf(\"json://\");\n\t\t\n\t\tif (pos != -1)\n\t\t\tstr = JSON.parse(str.substr(pos+7));\n\t\treturn str;\n\t},\n\t\n\t/*! gets hash of html-element attributes\n\t **/\n\t_get_attrs: function(el) {\n\t\tvar attr = el.attributes;\n\t\tvar hash = {};\n\t\tfor (var i = 0; i < attr.length; i++) {\n\t\t\thash[attr[i].nodeName] = this._de_json(attr[i].nodeValue);\n\t\t}\n\t\thash.width = parseInt(hash.width, 10);\n\t\treturn hash;\n\t}\n};\n\nexport default htmltable;","import {create} from \"../webix/html.js\";\nimport {exec} from \"../webix/helpers.js\";\nimport {ajax} from \"./ajax.js\";\n\nimport Promise from \"../thirdparty/promiz\";\n\nconst _modules = {};\t//hash of already loaded modules\n\n//loads module from external js file\nexport default function require(module, callback, master){\n\tvar promise = Promise.defer();\n\n\tif (callback && callback !== true)\n\t\tpromise = promise.then(function(){ callback.call(master || this); });\n\n\tif (require.disabled){\n\t\tpromise.resolve();\n\t\treturn promise;\n\t}\n\n\t//multiple files required at once\n\tif (typeof module != \"string\"){\n\t\tvar count = module.length||0;\n\t\t\n\t\tif (!count){\n\t\t\t// { file: true, other: true }\n\t\t\tfor (let file in module) count++; // eslint-disable-line\n\t\t\tlet callback2 = function(){\n\t\t\t\tcount--;\n\t\t\t\tif (count === 0)\n\t\t\t\t\tpromise.resolve();\n\t\t\t};\n\t\t\tfor (let file in module)\n\t\t\t\trequire(file).then(callback2, () => promise.reject());\n\t\t} else {\n\t\t\t// [ file, other ]\n\t\t\tlet callback2 = function(){\n\t\t\t\tif (count){\n\t\t\t\t\tcount--;\n\t\t\t\t\trequire(module[module.length - count - 1])\n\t\t\t\t\t\t.then(callback2, () => promise.reject());\n\n\t\t\t\t} else {\n\t\t\t\t\tpromise.resolve();\n\t\t\t\t}\n\t\t\t};\n\t\t\tcallback2();\n\t\t}\n\t\treturn promise;\n\t}\n\n\tif (_modules[module] !== true){\n\t\tconst fullpath = module;\n\n\t\tif (callback === true){\n\t\t\t//sync mode\n\t\t\texec( ajax().sync().get(fullpath).responseText );\n\t\t\t_modules[module]=true;\n\t\t\treturn promise.resolve();\n\t\t}\n\n\t\tif (!_modules[module])\t//first call\n\t\t\t_modules[module] = [promise];\n\t\telse {\n\t\t\t_modules[module].push(promise);\n\t\t\treturn promise;\n\t\t}\n\n\t\tconst onerror = function(){\n\t\t\tconst calls = _modules[module];\n\t\t\t_modules[module] = false;\n\t\t\tfor (var i=0; i<calls.length; i++)\n\t\t\t\tcalls[i].reject();\n\t\t};\n\n\t\tconst onload = function(){\n\t\t\tconst calls = _modules[module];\n\t\t\t_modules[module] = true;\n\t\t\tfor (var i=0; i<calls.length; i++)\n\t\t\t\tcalls[i].resolve();\n\t\t};\n\n\t\t//css, async, no waiting\n\t\tvar parts = module.split(\"?\");\n\t\tif (parts[0].substr(parts[0].length-4) == \".css\") {\n\t\t\tvar link = create(\"LINK\",{  type:\"text/css\", rel:\"stylesheet\", href:fullpath});\n\t\t\tlink.onload = onload;\n\t\t\tlink.onerror = onerror;\n\n\t\t\tdocument.getElementsByTagName(\"head\")[0].appendChild(link);\n\t\t} else {\n\t\t\tvar newScript = document.createElement(\"script\");\n\t\t\tnewScript.onload = onload;\n\t\t\tnewScript.onerror = onerror;\n\n\t\t\tdocument.getElementsByTagName(\"head\")[0].appendChild(newScript);\n\t\t\tnewScript.src = fullpath;\n\t\t}\n\t} else \n\t\tpromise.resolve();\n\n\treturn promise;\n}","import {extend, bind, isDate} from \"../../webix/helpers\";\nimport env from \"../../webix/env\";\n\nimport Promise from \"../../thirdparty/promiz\";\nimport i18n from \"../../webix/i18n\";\n\nimport require from \"../require\";\nimport jsarray from \"./jsarray\";\n\n\nconst excel = extend({\n\ttoObject:function(data){\n\t\tif(!data.excel){\n\t\t\tvar opts = data.options || {};\n\t\t\tif (opts.dataurl) \n\t\t\t\textend(opts, this._urlToOptions(opts.dataurl));\n\n\t\t\tdata = data.data || data;\n\t\t\tvar promise = Promise.defer();\n\t\t\t\n\t\t\tif(data.name){ //file\n\t\t\t\topts.ext = data.name.split(\".\").pop();\n\t\t\t\tvar reader = new FileReader();\n\t\t\t\t\n\t\t\t\treader.onload = bind(function (e) {\n\t\t\t\t\tpromise.resolve(this.parseData(e.target.result, opts));\n\t\t\t\t}, this);\n\t\t\t\treader.readAsArrayBuffer(data);\n\t\t\t}\n\t\t\telse //arraybuffer\n\t\t\t\tpromise.resolve(this.parseData(data, opts));\n\t\t\t\t\n\t\t\treturn promise;\n\t\t}\n\t\t//plain jsarray or hash\n\t\treturn data;\n\t},\n\tparseData:function(data, options){\n\t\tdata = new Uint8Array(data);\n\t\tvar arr = [];\n\t\tfor(let i = 0; i != data.length; ++i)\n\t\t\tarr[i] = String.fromCharCode(data[i]);\n\n\t\tvar ext = (options.ext || options).toLowerCase();\n\t\tif (ext != \"xls\") ext = \"xlsx\";\n\t\treturn require(env.cdn + \"/extras/xlsx.core.styles.min.js\").then(bind(function(){\n\t\t\t/* global XLS, XLSX */\n\t\t\tvar wb = (ext == \"xls\") ?\n\t\t\t\tXLS.read(arr.join(\"\"), {type: \"binary\", cellStyles:true, cellDates:true}) :\n\t\t\t\tXLSX.read(arr.join(\"\"), {type: \"binary\", cellStyles:true, cellDates:true});\n\n\t\t\tvar res = {\n\t\t\t\tsheets: wb.Sheets,\n\t\t\t\tnames: wb.SheetNames,\n\t\t\t\toptions:options,\n\t\t\t\tranges:wb.Workbook?(wb.Workbook.Names ||[]):[]\n\t\t\t};\n\t\t\treturn extend(this.getSheet(res, options), res);\n\t\t}, this));\n\t},\n\tgetSheet:function(data, options){\n\t\tvar name = options.name || data.names[0];\n\t\tdata = this.sheetToArray(data.sheets[name], options);\n\t\tif(options.rows && options.rows.length)\n\t\t\tdata.data = data.data.splice(options.rows[0], Math.min(options.rows[1], data.data.length)-options.rows[0]);\n\t\treturn data;\n\t},\n\tsheetToArray:function(sheet, options){\n\t\tvar all = [];\n\t\tvar spans = [];\n\t\tvar styles = [];\n\t\tvar sizes = [];\n\n\t\tif(sheet && sheet[\"!ref\"]){\n\t\t\tvar range = XLS.utils.decode_range(sheet[\"!ref\"]), \n\t\t\t\trow, col, cellCoord, cell,\n\t\t\t\txCorrection = range.s.c,\n\t\t\t\tyCorrection = range.s.r+(options.rows?options.rows[0]:0);\n\n\t\t\tfor (row = range.s.r; row <= range.e.r; row++) {\n\t\t\t\tvar nrow = [];\n\t\t\t\tfor (col = range.s.c; col <= range.e.c; col++) {\n\t\t\t\t\tcellCoord = XLS.utils.encode_cell({ r: row, c: col });\n\t\t\t\t\tcell = sheet[cellCoord];\n\t\t\t\t\tif(!cell)\n\t\t\t\t\t\tnrow.push(\"\");\n\t\t\t\t\telse{\n\t\t\t\t\t\tvar ncell = \"\";\n\t\t\t\t\t\tif(options.math&&cell.f) // get formula\n\t\t\t\t\t\t\tncell = cell.f.charAt(0)==\"=\" ? cell.f : \"=\"+cell.f;\n\t\t\t\t\t\telse if (cell.t ==\"d\" && isDate(cell.v))\n\t\t\t\t\t\t\tncell  = i18n.dateFormatStr(cell.v);\n\t\t\t\t\t\telse \n\t\t\t\t\t\t\tncell = cell.v;\n\t\t\t\t\t\tnrow.push(ncell);\n\n\t\t\t\t\t\tif (cell.s)\n\t\t\t\t\t\t\tstyles.push([row-yCorrection, col-xCorrection, cell.s]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tall.push(nrow);\n\t\t\t}\n\n\t\t\tif(sheet[\"!merges\"]){\n\t\t\t\tvar merges = sheet[\"!merges\"];\n\t\t\t\tfor(let i = 0; i<merges.length; i++){\n\t\t\t\t\tvar s = merges[i].s;\n\t\t\t\t\tvar e = merges[i].e;\n\t\t\t\t\tif(!options.rows || (s.r-yCorrection>=0 && e.r-yCorrection<=options.rows[1]))\n\t\t\t\t\t\tspans.push([s.r-yCorrection, s.c-xCorrection, e.c-s.c+1, e.r-s.r+1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(sheet[\"!cols\"]){\n\t\t\t\tvar widths = sheet[\"!cols\"];\n\t\t\t\tfor(let i = 0; i<widths.length; i++)\n\t\t\t\t\tif(widths[i]) sizes.push([\"column\", i-xCorrection, Math.round(widths[i].wch/(8.43/70))]); //mode, colind, value\n\t\t\t}\n\t\t\tif(sheet[\"!rows\"]){\n\t\t\t\tvar heights = sheet[\"!rows\"];\n\t\t\t\tfor(let i = 0; i<heights.length; i++)\n\t\t\t\t\tif(heights[i]) sizes.push([\"row\", i-yCorrection, heights[i].hpx]); //mode (\"row\", \"column\"), rowind, value\n\t\t\t}\n\t\t}\n\t\treturn { data:all, spans: spans, styles:styles, sizes:sizes, excel: true };\n\t},\n\t_urlToOptions:function(details){\n\t\tvar parts = details.split(\"[\");\n\t\tvar options = {};\n\t\toptions.name = parts[0];\n\t\tif(parts[1]){\n\t\t\tvar rows = parts[1].split(/[^0-9]+/g);\n\t\t\trows[0] = rows[0]*1 || 0;\n\t\t\trows[1] = rows[1]*1 || 9999999;\n\t\t\toptions.rows = rows;\n\t\t}\n\t\treturn options;\n\t}\n}, jsarray);\n\nexport default excel;","import json from \"./json.js\";\nimport jsarray from \"./jsarray.js\";\nimport xml from \"./xml.js\";\nimport csv from \"./csv.js\";\nimport html from \"./html.js\";\nimport htmltable from \"./htmltable\";\nimport excel from \"./excel\";\n\nconst DataDriver={ json, jsarray, xml, csv, html, htmltable, excel };\n\nexport default DataDriver;","const csv = {\n\t//incoming data always a string\n\ttoObject:function(data){\n\t\treturn data;\n\t},\n\t//get array of records\n\tgetRecords:function(data){\n\t\treturn data.split(this.row);\n\t},\n\t//get hash of properties for single record, data named as \"data{index}\"\n\tgetDetails:function(data){\n\t\tdata = this.stringToArray(data);\n\t\tvar result = {};\n\t\tfor (var i=0; i < data.length; i++) \n\t\t\tresult[\"data\"+i]=data[i];\n\n\t\tif (this.idColumn !== null)\n\t\t\tresult.id = data[this.idColumn];\n\n\t\treturn result;\n\t},\n\tgetOptions:function(){ return false; },\n\t//dyn loading is not supported by csv data source\n\tgetInfo:function(){\n\t\treturn {\n\t\t\tsize:0\n\t\t};\n\t},\n\t//split string in array, takes string surrounding quotes in account\n\tstringToArray:function(data){\n\t\tdata = data.split(this.cell);\n\t\tfor (var i=0; i < data.length; i++)\n\t\t\tdata[i] = data[i].replace(/^[ \\t\\n\\r]*(\"|)/g,\"\").replace(/(\"|)[ \\t\\n\\r]*$/g,\"\");\n\t\treturn data;\n\t},\n\tidColumn:null,\n\trow:\"\\n\",\t//default row separator\n\tcell:\",\"\t//default cell separator\n};\n\nexport default csv;","import promise from \"../thirdparty/promiz\";\nimport proxy from \"../load/proxy\";\nimport DataDriver from \"../load/drivers/index\";\n\n\nimport {ajax} from \"../load/ajax\";\n\nimport {bind} from \"../webix/helpers\";\nimport {callEvent} from \"../webix/customevents\";\n\nconst silentErrorMarker = {};\n\nconst AtomDataLoader={\n\t$init:function(config){\n\t\t//prepare data store\n\t\tthis.data = {};\n\t\tthis.waitData = promise.defer();\n\n\t\tif (config)\n\t\t\tthis._settings.datatype = config.datatype||\"json\";\n\t\tthis.$ready.push(this._load_when_ready);\n\t},\n\t_load_when_ready:function(){\n\t\tthis._ready_for_data = true;\n\t\t\n\t\tif (this._settings.url)\n\t\t\tthis.url_setter(this._settings.url);\n\t\tif (this._settings.data)\n\t\t\tthis.data_setter(this._settings.data);\n\t},\n\turl_setter:function(value){\n\t\tvalue = proxy.$parse(value);\n\n\t\tif (!this._ready_for_data) return value;\n\t\tthis.load(value, this._settings.datatype);\t\n\t\treturn value;\n\t},\n\tdata_setter:function(value){\n\t\tif (!this._ready_for_data) return value;\n\t\tthis.parse(value, this._settings.datatype);\n\t\treturn true;\n\t},\n\t//loads data from external URL\n\tload:function(url,call){\n\t\tvar type, details = (arguments[2] || null);\n\n\t\tif (typeof call == \"string\"){\t//second parameter can be a loading type or callback\n\t\t\t//we are not using setDriver as data may be a non-datastore here\n\t\t\ttype = call;\n\t\t\tcall = arguments[2];\n\t\t}\n\n\t\tconst d = this._fetch(url, type, details);\n\t\tif (d && d.then)\n\t\t\treturn d.then(data => {\n\t\t\t\tthis._onLoad(data);\n\t\t\t\tif (call)\n\t\t\t\t\tajax.$callback(this, call, \"\", data, -1);\n\t\t\t\treturn data;\n\t\t\t}, x => this._onLoadError(x));\n\t},\n\t_fetch:function(url, type, details){\n\t\tvar result;\n\n\t\tif (type || !this.data.driver)\n\t\t\tthis.data.driver = DataDriver[type||\"json\"];\n\n\t\tif(!this.callEvent(\"onBeforeLoad\",[]))\n\t\t\treturn promise.reject();\t\t\n\n\t\t//proxy\t\n\t\turl = proxy.$parse(url);\n\t\tif (url.$proxy && url.load){\n\t\t\tresult = url.load(this, details);\n\t\t}\n\t\t//promize\n\t\telse if (typeof url === \"function\"){\n\t\t\tresult = url.call(this, details);\n\t\t}\n\t\t//normal url\n\t\telse {\n\t\t\tresult = ajax().bind(this).get(url);\n\t\t}\n\n\t\t//we wrap plain data in promise to keep the same processing for it\n\t\tif(result && !result.then){\n\t\t\tresult = promise.resolve(result);\n\t\t}\n\n\t\tconst gen = this._data_generation;\n\t\tif(result && result.then){\n\t\t\tresult.then((data) => {\n\t\t\t\t// component destroyed, or clearAll was issued\n\t\t\t\tif (this.$destructed || (gen && this._data_generation !== gen))\n\t\t\t\t\t// by returning rejection we are preventing the further executing chain\n\t\t\t\t\t// if user have used list.load(data).then(do_something)\n\t\t\t\t\t// the do_something will not be executed\n\t\t\t\t\t// the error handler may be triggered though\n\t\t\t\t\treturn promise.reject(silentErrorMarker);\n\n\t\t\t\treturn data;\n\t\t\t});\n\t\t}\n\t\treturn result;\n\t},\n\t//loads data from object\n\tparse:function(data,type){\n\t\tif (data && typeof data.then == \"function\"){\n\t\t\tconst generation = this._data_generation;\n\t\t\t// component destroyed, or clearAll was issued\n\t\t\treturn data.then(bind(function(data){ \n\t\t\t\tif (this.$destructed || (generation && this._data_generation !== generation))\n\t\t\t\t\treturn promise.reject();\n\t\t\t\tthis.parse(data, type); \n\t\t\t}, this));\n\t\t}\n\n\t\t//loading data from other component\n\t\tif (data && data.sync && this.sync)\n\t\t\tthis._syncData(data);\n\t\telse if(!this.callEvent(\"onBeforeLoad\",[]))\n\t\t\treturn promise.reject();\n\t\telse {\n\t\t\tif(type || !this.data.driver)\n\t\t\t\tthis.data.driver = DataDriver[type||\"json\"];\n\t\t\tthis._onLoad(data);\n\t\t}\n\n\t\treturn promise.resolve();\n\t},\n\t_syncData: function(data){\n\t\tif(this.data)\n\t\t\tthis.data.attachEvent(\"onSyncApply\",bind(function(){\n\t\t\t\tif(this._call_onready)\n\t\t\t\t\tthis._call_onready();\n\t\t\t},this));\n\n\t\tthis.sync(data);\n\t},\n\t_parse:function(data){\n\t\tvar parsed, record,\n\t\t\tdriver = this.data.driver;\n\n\t\trecord = driver.getRecords(data)[0];\n\t\tparsed = record?driver.getDetails(record):{};\n\n\t\tif (this.setValues)\n\t\t\tthis.setValues(parsed);\n\t\telse\n\t\t\tthis.data = parsed;\n\t},\n\t_onLoadContinue:function(data){\n\t\tif (data){\n\t\t\tif(!this.$onLoad || !this.$onLoad(data, this.data.driver)){\n\t\t\t\tif(this.data && this.data._parse)\n\t\t\t\t\tthis.data._parse(data); //datastore\n\t\t\t\telse\n\t\t\t\t\tthis._parse(data);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tthis._onLoadError(data);\n\n\t\t//data loaded, view rendered, call onready handler\n\t\tif(this._call_onready)\n\t\t\tthis._call_onready();\n\n\t\tthis.callEvent(\"onAfterLoad\",[]);\n\t\tthis.waitData.resolve();\n\t},\n\t//default after loading callback\n\t_onLoad:function(data){\n\t\t// webix loading object or uploaded file structure\n\t\tif (data && typeof data.text === \"function\" && !data.name){\n\t\t\tdata = data.text();\n\t\t}\n\n\t\tdata = this.data.driver.toObject(data);\n\t\tif(data && data.then)\n\t\t\tdata.then(data => this._onLoadContinue(data));\n\t\telse\n\t\t\tthis._onLoadContinue(data);\n\t},\n\t_onLoadError:function(xhttp){\n\t\tif (xhttp !== silentErrorMarker){\n\t\t\t//ignore error for dead components\n\t\t\tif (!this.$destructed){\n\t\t\t\tthis.callEvent(\"onAfterLoad\",[]);\n\t\t\t\tthis.callEvent(\"onLoadError\",arguments);\n\t\t\t}\n\n\t\t\tcallEvent(\"onLoadError\", [xhttp, this]);\n\t\t}\n\t\treturn promise.reject(xhttp);\n\t},\n\t_check_data_feed:function(data){\n\t\tif (!this._settings.dataFeed || this._ignore_feed || !data)\n\t\t\treturn true;\n\n\t\tvar url = this._settings.dataFeed;\n\t\tif (typeof url == \"function\")\n\t\t\treturn url.call(this, (data.id||data), data);\n\n\t\turl = url+(url.indexOf(\"?\")==-1?\"?\":\"&\")+\"action=get&id=\"+encodeURIComponent(data.id||data);\n\t\tif(!this.callEvent(\"onBeforeLoad\",[]))\n\t\t\treturn false;\n\n\t\tajax(url, function(text,xml,loader){\n\t\t\tthis._ignore_feed = true;\n\t\t\tvar driver = DataDriver.json;\n\t\t\tvar data = driver.toObject(text, xml);\n\t\t\tif (data)\n\t\t\t\tthis.setValues(driver.getDetails(driver.getRecords(data)[0]));\n\t\t\telse\n\t\t\t\tthis._onLoadError(loader);\n\t\t\tthis._ignore_feed = false;\n\t\t\tthis.callEvent(\"onAfterLoad\",[]);\n\t\t}, this);\n\t\treturn false;\n\t}\n};\n\nexport default AtomDataLoader;","import {isDate, isArray} from \"../webix/helpers\";\n\nconst CodeParser = {\n\t//converts a complex object into an object with primitives properties\n\tcollapseNames:function(base, prefix, data, filter){\n\t\tdata = data || {};\n\t\tprefix = prefix || \"\";\n\t\tfilter  = filter || function(){ return true; };\n\n\t\tif(!base || typeof base != \"object\")\n\t\t\treturn null;\n\n\t\tfor(var prop in base){\n\t\t\tlet value = base[prop];\n\t\t\tlet name = prefix+prop;\n\t\t\tif(value && typeof value == \"object\" && !isDate(value) && !isArray(value) && filter(name)){\n\t\t\t\tCodeParser.collapseNames(value, name+\".\", data, filter);\n\t\t\t} else {\n\t\t\t\tdata[name] = value;\n\t\t\t}\n\t\t}\n\t\treturn data;\n\t},\n\n\t//converts an object with primitive properties into an object with complex properties\n\texpandNames:function(base){\n\t\tvar data = {},\n\t\t\ti, lastIndex, name, obj, prop;\n\n\t\tfor(prop in base){\n\t\t\tname = prop.split(\".\");\n\t\t\tlastIndex = name.length-1;\n\t\t\tobj = data;\n\t\t\tfor( i =0; i < lastIndex; i++ ){\n\t\t\t\tif(!obj[name[i]])\n\t\t\t\t\tobj[name[i]]  = {};\n\t\t\t\tobj = obj[name[i]];\n\t\t\t}\n\t\t\tobj[name[lastIndex]] = base[prop];\n\t\t}\n\n\t\treturn data;\n\t}\n};\n\nexport default CodeParser;","/*\n\tTemplate - handles html templates\n*/\n\nimport {uid} from \"./helpers\";\nimport {getValue} from \"./html\";\nimport env from \"./env\";\nimport {ajax} from \"../load/ajax\";\nimport {assert} from \"./debug\";\n\nimport CodeParser from \"../core/codeparser\";\n\nvar _cache = {};\nvar _csp_cache = {};\nvar newlines = new RegExp(\"(\\\\r\\\\n|\\\\n)\",\"g\");\nvar quotes   = new RegExp(\"(\\\\\\\")\",\"g\");\nvar slashes  = new RegExp(\"(\\\\\\\\)\",\"g\");\nvar escape = {\n\t\"&\": \"&amp;\",\n\t\"<\": \"&lt;\",\n\t\">\": \"&gt;\",\n\t\"\\\"\": \"&quot;\",\n\t\"'\": \"&#x27;\",\n\t\"`\": \"&#x60;\"\n};\nvar badChars = /[&<>\"'`]/g;\nvar escapeChar = function(chr) {\n\treturn escape[chr] || \"&amp;\";\n};\n\n\nfunction template(str){\n\tif (typeof str == \"function\") return str;\n\tif (_cache[str])\n\t\treturn _cache[str];\n\t\t\n\tstr=(str||\"\").toString();\t\t\t\n\tif (str.indexOf(\"->\")!=-1){\n\t\tvar teststr = str.split(\"->\");\n\t\tswitch(teststr[0]){\n\t\t\tcase \"html\": \t//load from some container on the page\n\t\t\t\tstr = getValue(teststr[1]);\n\t\t\t\tbreak;\n\t\t\tcase \"http\": \t//load from external file\n\t\t\t\tstr = new ajax().sync().get(teststr[1],{uid:uid()}).responseText;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t//do nothing, will use template as is\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\t\n\t//supported idioms\n\t// {obj.attr} => named attribute or value of sub-tag in case of xml\n\tstr=(str||\"\").toString();\t\t\n\n\t// Content Security Policy enabled\n\tif(env.strict){\n\t\tif (!_csp_cache[str]){\n\t\t\t_csp_cache[str] = [];\n\n\t\t\t// get an array of objects (not sorted by position)\n\t\t\tvar temp_res = [];\n\t\t\tstr.replace(/\\{obj\\.([^}?]+)\\?([^:]*):([^}]*)\\}/g,function(search,s1,s2,s3,pos){\n\t\t\t\ttemp_res.push({pos: pos, str: search, fn: function(obj){\n\t\t\t\t\treturn obj[s1]?s2:s3;\n\t\t\t\t}});\n\t\t\t});\n\t\t\tstr.replace(/\\{common\\.([^}(]*)\\}/g,function(search,s,pos){\n\t\t\t\ttemp_res.push({pos: pos, str: search, fn: function(_,common){\n\t\t\t\t\treturn common[s]||\"\";\n\t\t\t\t}});\n\t\t\t});\n\t\t\tstr.replace(/\\{common\\.([^}(]*)\\(\\)\\}/g,function(search,s,pos){\n\t\t\t\ttemp_res.push({pos: pos, str: search, fn: function(obj,common){\n\t\t\t\t\treturn (common[s]?common[s].apply(this, arguments):\"\");\n\t\t\t\t}});\n\t\t\t});\n\t\t\tstr.replace(/\\{obj\\.([^:}]*)\\}/g,function(search,s,pos){\n\t\t\t\ttemp_res.push({pos: pos, str: search, fn: function(obj){\n\t\t\t\t\treturn obj[s];\n\t\t\t\t}});\n\t\t\t});\n\t\t\tstr.replace(\"{obj}\",function(search,pos){\n\t\t\t\ttemp_res.push({pos: pos, str: search, fn: function(obj){\n\t\t\t\t\treturn obj;\n\t\t\t\t}});\n\t\t\t});\n\t\t\tstr.replace(/#([^#'\";, ]+)#/gi,function(search,s,pos){\n\t\t\t\tif(s.charAt(0)==\"!\"){\n\t\t\t\t\ts = s.substr(1);\n\t\t\t\t\ttemp_res.push({pos: pos, str: search, fn: function(obj){\n\t\t\t\t\t\tif(s.indexOf(\".\")!= -1)\n\t\t\t\t\t\t\tobj = CodeParser.collapseNames(obj); // apply complex properties\n\t\t\t\t\t\treturn template.escape(obj[s]);\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\ttemp_res.push({pos: pos, str: search, fn: function(obj){\n\t\t\t\t\t\tif(s.indexOf(\".\")!= -1)\n\t\t\t\t\t\t\tobj = CodeParser.collapseNames(obj); // apply complex properties\n\t\t\t\t\t\treturn obj[s];\n\t\t\t\t\t}});\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\t// sort template parts by position\n\t\t\ttemp_res.sort(function(a,b){\n\t\t\t\treturn (a.pos > b.pos)?1:-1;\n\t\t\t});\n\n\t\t\t// create an array of functions that return parts of html string\n\t\t\tif(temp_res.length){\n\t\t\t\tvar lastPos = 0;\n\t\t\t\tvar addStr = function(str,n0,n1){\n\t\t\t\t\t_csp_cache[str].push(function(){\n\t\t\t\t\t\treturn str.slice(n0,n1);\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tfor(var i = 0; i< temp_res.length; i++){\n\t\t\t\t\tvar pos = temp_res[i].pos;\n\t\t\t\t\taddStr(str,lastPos,pos);\n\t\t\t\t\t_csp_cache[str].push(temp_res[i].fn);\n\t\t\t\t\tlastPos = pos + temp_res[i].str.length;\n\t\t\t\t}\n\t\t\t\taddStr(str,lastPos,str.length);\n\t\t\t}\n\t\t\telse\n\t\t\t\t_csp_cache[str].push(function(){return str;});\n\t\t}\n\t\treturn function(){\n\t\t\tvar s = \"\";\n\t\t\tfor(var i=0; i < _csp_cache[str].length;i++){\n\t\t\t\ts += _csp_cache[str][i].apply(this,arguments);\n\t\t\t}\n\t\t\treturn s;\n\t\t};\n\t}\n\n\tlet helpers = false;\n\tstr=str.replace(slashes,\"\\\\\\\\\");\n\tstr=str.replace(newlines,\"\\\\n\");\n\tstr=str.replace(quotes,\"\\\\\\\"\");\n\n\tstr=str.replace(/\\{obj\\.([^}?]+)\\?([^:]*):([^}]*)\\}/g,\"\\\"+(obj.$1?\\\"$2\\\":\\\"$3\\\")+\\\"\");\n\tstr=str.replace(/\\{common\\.([^}(]*)\\}/g,\"\\\"+(common.$1||'')+\\\"\");\n\tstr=str.replace(/\\{common\\.([^}(]*)\\(\\)\\}/g,\"\\\"+(common.$1?common.$1.apply(this, arguments):\\\"\\\")+\\\"\");\n\tstr=str.replace(/\\{obj\\.([^}]*)\\}/g,\"\\\"+(obj.$1)+\\\"\");\n\tstr=str.replace(\"{obj}\",\"\\\"+obj+\\\"\");\n\tstr=str.replace(/#([^#'\";, ]+)#/gi,function(str, key){\n\t\tif (key.charAt(0)==\"!\"){\n\t\t\thelpers = true;\n\t\t\treturn \"\\\"+template.escape(obj.\"+key.substr(1)+\")+\\\"\";\n\t\t} else\n\t\t\treturn \"\\\"+(obj.\"+key+\")+\\\"\";\n\t});\n\n\ttry {\n\t\tif (helpers){\n\t\t\tconst temp = Function(\"obj\",\"common\",\"marks\", \"value\", \"template\", \"return \\\"\"+str+\"\\\";\");\n\t\t\t_cache[str] = function(a,b,c,d){ \n\t\t\t\treturn temp(a,b,c,d,template);\n\t\t\t};\n\t\t} else {\n\t\t\t_cache[str] = Function(\"obj\",\"common\",\"return \\\"\"+str+\"\\\";\");\n\t\t}\n\t} catch(e){\n\t\tassert(0, \"Invalid template:\"+str);\n\t}\n\n\treturn _cache[str];\n}\n\n\n\ntemplate.escape  = function(str){\n\tif (str === undefined || str === null) return \"\";\n\treturn (str.toString() || \"\" ).replace(badChars, escapeChar);\n};\ntemplate.empty=function(){\treturn \"\";\t};\n\nexport default template;","import {bind} from \"../webix/helpers\";\nimport template from \"../webix/template\";\n\n\nconst AtomRender={\n\t//convert item to the HTML text\n\t_toHTML:function(obj){\n\t\tif (obj.$empty )\n\t\t\treturn \"\";\n\t\treturn this._settings.template(obj, this);\n\t},\n\t//render self, by templating data object\n\trender:function(){\n\t\tvar cfg = this._settings;\n\t\tif (this.isVisible(cfg.id)){\n\t\t\tif (!this.callEvent || this.callEvent(\"onBeforeRender\",[this.data])){\n\t\t\t\tif (this.data && !cfg.content){\n\t\t\t\t\t//it is critical to have this as two commands\n\t\t\t\t\t//its prevent destruction race in Chrome\n\t\t\t\t\tthis._dataobj.innerHTML = \"\";\n\t\t\t\t\tthis._dataobj.innerHTML = this._toHTML(this.data);\n\t\t\t\t}\n\t\t\t\tif (this.callEvent) this.callEvent(\"onAfterRender\",[]);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\tsync:function(source){\n\t\tthis._backbone_sync = false;\n\t\tif (source.name != \"DataStore\"){\n\t\t\tif (source.data && source.name == \"DataStore\"){\n\t\t\t\tsource = source.data;\n\t\t\t} else {\n\t\t\t\tthis._backbone_sync = true;\n\t\t\t}\n\t\t}\n\t\t\t\n\n\t\tif (this._backbone_sync)\n\t\t\tsource.bind(\"change\", bind(function(data){\n\t\t\t\tif (data.id == this.data.id){\n\t\t\t\t\tthis.data = data.attributes;\n\t\t\t\t\tthis.refresh();\n\t\t\t\t}\n\t\t\t}, this));\n\t\telse\n\t\t\tsource.attachEvent(\"onStoreUpdated\", bind(function(id){\n\t\t\t\tif (!id || id == this.data.id){\n\t\t\t\t\tthis.data = source.pull[id];\n\t\t\t\t\tthis.refresh();\n\t\t\t\t}\n\t\t\t}, this));\n\t},\n\ttemplate_setter:template\n};\n\nexport default AtomRender;","import {offset} from \"../webix/html\";\nimport {delay} from \"../webix/helpers\";\n\n\nconst AutoScroll = {\n\t_auto_scroll:function(pos){\n\t\tlet yScroll, xScroll;\n\t\tlet mode = this._settings.dragscroll;\n\n\t\tif (typeof mode !== \"string\")\n\t\t\tmode = this._settings.layout||\"xy\";\n\t\txScroll = mode.indexOf(\"x\") !== -1;\n\t\tyScroll = mode.indexOf(\"y\") !== -1;\n\n\t\tconst data = this._body || this.$view;\n\t\tconst box = offset(data);\n\n\t\tconst sense = Math.max((this._settings.rowHeight||(this.type&&!isNaN(parseFloat(this.type.height))?this.type.height:0))+5, 40); //dnd auto-scroll sensivity\n\t\tlet reset = false;\n\n\t\tif (yScroll && this._auto_y_scroll(pos, box, sense) ) reset = true;\n\t\tif (xScroll && this._auto_x_scroll(pos, box, sense) ) reset = true;\n\n\t\tif (reset)\n\t\t\tthis._auto_scroll_delay = delay(this._auto_scroll, this, [pos], 100);\n\t},\n\t_auto_scroll_column:function(pos){\n\t\tconst mode = this._settings.dragscroll;\n\t\tif (typeof mode === \"string\" && mode.indexOf(\"x\") === -1)\n\t\t\treturn;\n\n\t\tconst data = this._header || this.$view;\n\t\tconst box = offset(data);\n\n\t\tconst sense = Math.max(this._settings.headerRowHeight||0, 40);\n\t\tif ( this._auto_x_scroll(pos, box, sense) )\n\t\t\tthis._auto_scroll_delay = delay(this._auto_scroll_column, this, [pos], 100);\n\t},\n\t_auto_y_scroll:function(pos, box, sense){\n\t\tlet top = box.y;\n\t\tlet bottom = top + box.height;\n\t\tconst scroll = this.getScrollState();\n\n\t\tconst config = this._settings;\n\t\tif(config.topSplit){\n\t\t\tconst topSplitPos = this._cellPosition(this.getIdByIndex(config.topSplit-1), this.columnId(0));\n\t\t\ttop += topSplitPos.top + topSplitPos.height;\n\t\t}\n\n\t\tif (pos.y < (top + sense)){\n\t\t\tthis._auto_scrollTo(scroll.x, scroll.y-sense*2, pos);\n\t\t\treturn true;\n\t\t} else if (pos.y > bottom - sense){\n\t\t\tthis._auto_scrollTo(scroll.x, scroll.y+sense*2, pos);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\t_auto_x_scroll:function(pos, box, sense){\n\t\tlet left = box.x;\n\t\tlet right = left + box.width;\n\t\tconst scroll = this.getScrollState();\n\n\t\tif (pos.x < (left + sense)){\n\t\t\tthis._auto_scrollTo(scroll.x-sense*2, scroll.y, pos);\n\t\t\treturn true;\n\t\t} else if (pos.x > right - sense){\n\t\t\tthis._auto_scrollTo(scroll.x+sense*2, scroll.y, pos);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\t_auto_scrollTo:function(x,y,pos){\n\t\tif(this.callEvent(\"onBeforeAutoScroll\",[pos]))\n\t\t\tthis.scrollTo(x,y);\n\t}\n};\n\nexport default AutoScroll;","import { assert } from \"./debug\";\nimport { toNode, uid, bind, isUndefined } from \"./helpers\";\nimport env from \"./env\";\n\n//hash of attached events\nconst _events = {};\n\nexport function _events_final_destructor(){\n\t//detach all known DOM events\n\tfor (var a in _events)\n\t\teventRemove(a);\n}\n\n//private version of API, do not register ID for event detaching\nexport function _event(a,b,c,d){\n\td = d || {};\n\td.inner = true;\n\tevent(a,b,c,d);\n}\n\n//attach event to the DOM element\nexport function event(node,event,handler,context){\n\tcontext = context || {};\n\tnode = toNode(node);\n\tassert(node, \"Invalid node as target for webix.event\");\n\t\n\tvar id = context.id || uid();\n\n\tif(context.bind)\n\t\thandler=bind(handler,context.bind);\n\n\tvar info = [node,event,handler,context.capture];\n\tif (!context.inner)\n\t\t_events[id]=info;\t//store event info, for detaching\n\n\tvar capture = !!context.capture;\n\tif(!isUndefined(context.passive) && env.passiveEventListeners)//blockable touch events\n\t\tcapture = { passive:context.passive, capture:capture };\n\t\t\n\t//use IE's of FF's way of event's attaching\n\tif (node.addEventListener)\n\t\tnode.addEventListener(event, handler, capture);\n\telse if (node.attachEvent)\n\t\tnode.attachEvent(\"on\"+event, info[2] = function(){\n\t\t\treturn handler.apply(node, arguments);\t//IE8 fix\n\t\t});\n\n\treturn id;\t//return id of newly created event, can be used in eventRemove\n}\n\n//remove previously attached event\nexport function eventRemove(id){\n\t\n\tif (!id) return;\n\tassert(_events[id],\"Removing non-existing event\");\n\t\t\n\tvar ev = _events[id];\n\t//browser specific event removing\n\tif (ev[0].removeEventListener)\n\t\tev[0].removeEventListener(ev[1],ev[2],!!ev[3]);\n\telse if (ev[0].detachEvent)\n\t\tev[0].detachEvent(\"on\"+ev[1],ev[2]);\n\n\t\t\n\tdelete _events[id];\t//delete all traces\n}\n","import template from \"./template\";\nimport {clone} from \"./helpers\";\n\n/*\n\tadds new template-type\n\tobj - object to which template will be added\n\tdata - properties of template\n*/\nexport default function type(obj, data){ \n\tif (obj.$protoWait){\n\t\tif (!obj._webix_type_wait)\n\t\t\tobj._webix_type_wait = [];\n\t\tobj._webix_type_wait.push(data);\n\t\treturn;\n\t}\n\t\t\n\t//auto switch to prototype, if name of class was provided\n\tif (typeof obj == \"function\")\n\t\tobj = obj.prototype;\n\tif (!obj.types){\n\t\tobj.types = { \"default\" : obj.type };\n\t\tobj.type.name = \"default\";\n\t}\n\t\n\tvar name = data.name;\n\tvar type = obj.type;\n\tif (name)\n\t\ttype = obj.types[name] = clone(data.baseType?obj.types[data.baseType]:obj.type);\n\t\n\tfor(var key in data){\n\t\tif (key.indexOf(\"template\")===0)\n\t\t\ttype[key] = template(data[key]);\n\t\telse\n\t\t\ttype[key]=data[key];\n\t}\n\n\treturn name;\n}","const state = {\n\tcodebase:\"./\",\n\tcdn:\"//cdn.webix.com\",\n\ttop_views:[],\n\n\t_global_scope:null,\n\t_global_collection:null,\n\t_child_sizing_active:null,\n\t_responsive_exception:null,\n\t_responsive_tinkery:null,\n\t_freeze_resize:null,\n\t_parent_cell:null,\n\t_focus_time:null,\n\t_ui_creation:0,\n\t_edit_open_time:null,\n\n\t_final_destruction:null,\n\t_events:[],\n\n\tdestructors:[],\n\n\t_noselect_element:null,\n\n\t_modality:0,\n\n\t_wait_animate:null\n};\n\nexport default state;","import {assert} from \"../webix/debug\";\n\nimport {uid, isArray, toNode, isUndefined, toFunctor} from \"../webix/helpers\";\nimport {attachEvent} from \"../webix/customevents\";\nimport {locate} from \"../webix/html\";\nimport {use} from \"../services\";\n\nimport type from \"../webix/type\";\nimport state from \"../core/state\";\n\n//global click events for UI\nimport \"./click\";\n\nconst views = {};\n\nfunction ui(config, parent, id){\n\tvar res;\n\tstate._ui_creation++;\n\t// save old value of global scope\n\tconst temp = state._global_scope;\n\t// set global scope to the scope of new UI or to previous value\n\t// as result inner webix.ui calls will have access the scope of master view\n\t// mainly necessary for suggests\n\tstate._global_scope = config.$scope || temp;\n\ttry {\n\t\tres = _ui_creator(config, parent, id);\n\t} finally {\n\t\tstate._ui_creation--;\n\t\t// restore global scope\n\t\tstate._global_scope = temp;\n\t}\n\treturn res;\n}\nui.views = views;\n\n\nfunction _ui_creator(config, parent, id){\n\tvar multiset = isArray(config);\n\tvar node = toNode((config.container||parent)||document.body);\n\n\t// solve problem with non-unique ids\n\tif(node._settings)\n\t\tid = _correctId(node, multiset, id);\n\n\tvar top_node;\n\tvar moving = false;\n\tvar body_child = (node == document.body);\n\tif (config._settings || (node && multiset)){\n\t\ttop_node = config;\n\t\tmoving = true;\n\t} else {\n\t\tif (node && body_child)\n\t\t\tconfig.$topView = true;\n\t\tif (!config._inner)\n\t\t\tconfig._inner = {};\n\n\t\tif (parent && parent.getParentView){\n\t\t\tstate._parent_cell = (!id && id!==0) ? parent.getParentView() : parent;\n\t\t}\n\n\t\ttop_node = _view(config);\n\t}\n\n\tif (body_child && !top_node.setPosition && !top_node.$apiOnly)\n\t\tuse(\"_fixHeight\")();\n\n\tif (top_node._settings && top_node._settings._hidden && !node.$view){\n\t\ttop_node._settings._container = node;\n\t} else if (!top_node.$apiOnly){\n\t\tif (node.appendChild)\n\t\t\t_appendDom(node, top_node, config);\n\t\telse if (node.destructor){\n\t\t\tvar target = node;\n\n\t\t\t//addView or view moving with target id\n\t\t\tif (!id && id!==0 && !isArray(top_node)){\n\t\t\t\tid = node;\n\t\t\t\tnode = node.getParentView();\n\t\t\t}\n\n\t\t\t//if target supports view adding\n\t\t\tif (node && node._replace){\n\t\t\t\tif (moving && top_node.getParentView){\n\t\t\t\t\t//if source supports view removing\n\t\t\t\t\tlet parent = top_node.getParentView();\n\t\t\t\t\tif (parent  && parent._remove){\n\t\t\t\t\t\tparent._remove(top_node);\n\t\t\t\t\t}\n\t\t\t\t\t//adjust parent link and scope\n\t\t\t\t\ttop_node._parent_cell = node;\n\t\t\t\t\ttop_node.$scope = node.$scope;\n\t\t\t\t}\n\n\t\t\t\tnode._replace(top_node, id);\n\t\t\t} else {\n\t\t\t\tlet parent = target.$view.parentNode;\n\t\t\t\ttarget.destructor();\n\t\t\t\t_appendDom(parent, top_node, config);\n\t\t\t}\n\t\t} else\n\t\t\tassert(0, \"Not existing parent:\"+config.container);\n\t}\n\n\treturn top_node;\n}\n\nfunction _appendDom(node, top_node, config){\n\tnode.appendChild(top_node._viewobj);\n\tif (top_node.getParentView()) return;\n\n\t//resize window with position center or top\n\t//do not resize other windows and elements\n\t// which are attached to custom html containers\n\tif (((!top_node.setPosition || top_node._settings.fullscreen) && node == document.body) || top_node._settings.position )\n\t\tstate.top_views.push(top_node._destructor_handler);\n\tif (!config.skipResize)\n\t\ttop_node.adjust();\n}\n\nfunction _correctId(target, multiset, id){\n\t//replace view\n\tvar views = [target];\n\t//replace content of layout\n\tif (multiset)\n\t\tviews = target.getChildViews();\n\t//replace content of window\n\telse if (target._body_cell)\n\t\tviews = [target._body_cell];\n\t//add cell in layout by number\n\telse if (typeof id == \"number\"){\n\t\treturn id;\n\t//replace cell in layout by id\n\t} else if (id){\n\t\tviews = [$$(id)];\n\t\t_deleteIds(views);\n\t\treturn views[0].config.id;\n\t}\n\n\t_deleteIds(views);\n\treturn id;\n}\n\nfunction _deleteIds(uis){\n\tfor (var i = uis.length - 1; i >= 0; i--){\n\t\tlet current = uis[i];\n\t\t//remove original id\n\t\tdelete views[current.config.id];\n\t\t//create temp id\n\t\tcurrent.config.id = \"x\"+uid();\n\t\tviews[current.config.id] = current;\n\t\t//process childs\n\t\tif (current.getChildViews)\n\t\t\t_deleteIds(current.getChildViews());\n\t\t//process related UI\n\t\tif (current._destroy_with_me)\n\t\t\t_deleteIds(current._destroy_with_me);\n\t}\n}\n\n\nfunction _view(config){\n\n\tif (DEBUG){\n\t\t// check for trailing comma\n\t\tvar coll = config.cells || config.rows || config.elements || config.cols;\n\t\tif (coll)\n\t\t\tfor (let i=0; i<coll.length; i++)\n\t\t\t\tif (coll[i] === null || typeof coll[i] === \"undefined\")\n\t\t\t\t\tassert(0, \"You have trailing comma or Null element in collection's configuration\");\n\t}\n\n\tif (config.view){\n\t\tvar view = config.view;\n\t\tassert(ui[view], \"unknown view:\"+view);\n\t\treturn new ui[view](config);\n\t} else if (config.rows || config.cols){\n\t\tvar cells = config.rows||config.cols;\n\t\tvar accordion = false;\n\t\tfor (let i=0; i<cells.length; i++){\n\t\t\tif (cells[i].body && !cells[i].view && !cells[i].align)\n\t\t\t\taccordion = true;\n\t\t}\n\t\tif (accordion){\n\t\t\treturn new ui.headerlayout(config);\n\t\t} else\n\t\t\treturn new ui.layout(config);\n\t}\n\telse if (config.cells)\n\t\treturn new ui.multiview(config);\n\telse if (config.template || config.content)\n\t\treturn new ui.template(config);\t\n\telse if (config.align && config.body){\n\t\treturn new ui.align(config);\n\t} else return new ui.spacer(config);\n}\n//FIXME\nui._view = _view;\n\nfunction $$(id){\n\tif (!id) return null;\n\t\n\tif (views[id]) return views[id];\n\n\tvar name = id;\n\tif (typeof id == \"object\"){\n\t\tif (id._settings)\n\t\t\treturn id;\n\t\tname = (id.target||id.srcElement)||id;\n\t}\n\treturn views[locate({ target:toNode(name)},/*@attr*/\"view_id\")];\n}\nif (typeof window.$$ === \"undefined\") window.$$ = $$;\n\t\n\t\n\nlet protoUI = function(){\n\tvar origins = arguments;\n\tvar selfname = origins[0].name;\n\t\n\tvar t = function(data){\n\t\tif (!t)\n\t\t\treturn ui[selfname].prototype;\n\n\t\tvar origins = t.$protoWait;\n\t\tif (origins){\n\t\t\tvar params = [origins[0]];\n\t\t\t\n\t\t\tfor (let i=1; i < origins.length; i++){\n\t\t\t\tparams[i] = origins[i];\n\n\t\t\t\tif (params[i].$protoWait)\n\t\t\t\t\tparams[i] = params[i].call(-1, params[i].name);\n\n\t\t\t\tif (params[i].prototype && params[i].prototype.name)\n\t\t\t\t\tui[params[i].prototype.name] = params[i];\n\t\t\t}\n\t\t\tui[selfname] = proto.apply(-1, params);\n\n\t\t\tif (t._webix_type_wait)\t\n\t\t\t\tfor (let i=0; i < t._webix_type_wait.length; i++)\n\t\t\t\t\ttype(ui[selfname], t._webix_type_wait[i]);\n\t\t\t\t\n\t\t\tt = origins = null;\t\n\t\t}\n\t\t\t\n\t\tif (this != -1)\n\t\t\treturn new ui[selfname](data);\n\t\telse \n\t\t\treturn ui[selfname];\n\t};\n\tt.$protoWait = Array.prototype.slice.call(arguments, 0);\n\treturn (ui[selfname]=t);\n};\n\nlet proto = function(){\n\tvar origins = arguments;\n\tvar compilation = origins[0];\n\tvar has_constructor = !!compilation.$init;\n\tvar construct = [];\n\t\n\tassert(compilation,\"Invalid mixing target\");\n\t\t\n\tfor (var i=origins.length-1; i>0; i--) {\n\t\tassert(origins[i],\"Invalid mixing source\");\n\t\tif (typeof origins[i]== \"function\")\n\t\t\torigins[i]=origins[i].prototype;\n\t\tif (origins[i].$init) \n\t\t\tconstruct.push(origins[i].$init);\n\t\tif (origins[i].defaults){ \n\t\t\tvar defaults = origins[i].defaults;\n\t\t\tif (!compilation.defaults)\n\t\t\t\tcompilation.defaults = {};\n\t\t\tfor (let def in defaults)\n\t\t\t\tif (isUndefined(compilation.defaults[def]))\n\t\t\t\t\tcompilation.defaults[def] = defaults[def];\n\t\t}\n\t\tif (origins[i].type && compilation.type){\n\t\t\tfor (let def in origins[i].type)\n\t\t\t\tif (!compilation.type[def])\n\t\t\t\t\tcompilation.type[def] = origins[i].type[def];\n\t\t}\n\t\t\t\n\t\tfor (var key in origins[i]){\n\t\t\tif (!compilation[key] && compilation[key] !== false)\n\t\t\t\tcompilation[key] = origins[i][key];\n\t\t}\n\t}\n\t\n\tif (has_constructor)\n\t\tconstruct.push(compilation.$init);\n\t\n\t\n\tcompilation.$init = function(){\n\t\tfor (var i=0; i<construct.length; i++)\n\t\t\tconstruct[i].apply(this, arguments);\n\t};\n\tif (compilation.$skin)\n\t\tcompilation.$skin();\n\n\tvar result = function(config){\n\t\tthis.$ready=[];\n\t\tassert(this.$init,\"object without init method\");\n\t\tthis.$init(config);\n\t\tif (this._parseSettings)\n\t\t\tthis._parseSettings(config, this.defaults);\n\t\tfor (var i=0; i < this.$ready.length; i++)\n\t\t\tthis.$ready[i].call(this);\n\t};\n\tresult.prototype = compilation;\n\t\n\tcompilation = origins = null;\n\treturn result;\n};\n\nattachEvent(\"onClick\", function(e){\n\tvar element = $$(e);\n\tif (element && element.touchable){\n\t\tuse(\"UIManager\").applyChanges(element);\n\n\t\t//for inline elements - restore pointer to the master element\n\t\telement.getNode(e);\n\t\t//reaction on custom css elements in buttons\n\t\tvar trg=e.target||e.srcElement;\n\t\tif (element.config.disabled)\n\t\t\treturn;\n\n\t\tvar css = \"\";\n\t\tif (trg.className && trg.className.toString().indexOf(\"webix_view\")===0) return;\n\n\t\tif (element)\n\t\t\tuse(\"UIManager\")._focus_action(element);\n\n\t\t//loop through all parents\n\t\twhile (trg && trg.parentNode){\n\t\t\tif (trg.getAttribute){\n\t\t\t\tif (trg.getAttribute(/*@attr*/\"view_id\"))\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\tcss=trg.className;\n\t\t\t\tif (css){\n\t\t\t\t\tcss = css.toString().split(\" \");\n\t\t\t\t\tfor (var i =0; i<css.length; i++){\n\t\t\t\t\t\tif (element.on_click[css[i]]){\n\t\t\t\t\t\t\tvar res =  element.on_click[css[i]].call(element,e,element._settings.id,trg);\n\t\t\t\t\t\t\tif (res===false)\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttrg=trg.parentNode;\n\t\t}\n\n\n\t\tif (element._settings.click){\n\t\t\tvar code = toFunctor(element._settings.click, element.$scope);\n\t\t\tif (code && code.call) code.call(element, element._settings.id, e);\n\t\t}\n\n\n\n\t\tvar popup = element._settings.popup;\n\t\tif (element._settings.popup && !element._settings.readonly){\n\t\t\tif (typeof popup == \"object\" && !popup.name)\n\t\t\t\tpopup = element._settings.popup = ui(popup)._settings.id;\n\n\t\t\tpopup = $$(popup);\n\t\t\tassert(popup, \"Unknown popup\");\n\n\t\t\tif (!popup.isVisible()){\n\t\t\t\tpopup._settings.master = element._settings.id;\n\t\t\t\tpopup.show((element.getInputNode()||element.getNode()),null,true);\n\t\t\t}\n\t\t}\n\n\t\telement.callEvent(\"onItemClick\", [element._settings.id, e]);\n\t}\n});\n\n\n//hook for documentation generator\nif (DEBUG){\n\tif (window.webix_on_core_ready){\n\t\tvar mod = window.webix_on_core_ready({ proto, protoUI});\n\t\tproto = mod.proto;\n\t\tprotoUI = mod.protoUI;\n\t}\n}\n\nexport { ui, proto, protoUI, $$ };","import {pos as getPos} from \"../webix/html\";\nimport {toNode, _to_array, delay} from \"../webix/helpers\";\nimport {event, eventRemove} from \"../webix/htmlevents\";\nimport {attachEvent, detachEvent} from \"../webix/customevents\";\nimport {assert} from \"../webix/debug\";\nimport {ui} from \"../ui/core\";\n\n\nconst TooltipControl ={\n\t_tooltip_masters: _to_array([\"dummy\"]),\n\t_tooltip_exist: 0,\n\tdelay:400,\n\taddTooltip:function(target,config){\n\t\tlet node, ctrl;\n\t\ttarget = toNode(target);\n\t\tassert(target, \"Target isn't defined\");\n\n\t\tif (target instanceof Element){\n\t\t\tnode = target;\n\t\t\tif (typeof config === \"string\")\n\t\t\t\tnode.setAttribute(\"webix_tooltip\",config);\n\t\t\telse ctrl = config;\n\t\t} else {\n\t\t\tnode = target.$view;\n\t\t\tctrl = target;\n\t\t}\n\t\tctrl = ctrl || this;\n\n\t\tlet index = this._tooltip_masters.find(ctrl);\n\t\tif (index === -1){\n\t\t\tindex = this._tooltip_masters.length;\n\t\t\tthis._tooltip_masters.push(ctrl);\n\t\t}\n\t\tnode.webix_tooltip = index;\n\t\tthis._tooltip_exist++;\n\n\t\tif(!this._tooltip){\n\t\t\tthis._tooltip = new ui.tooltip({});\n\n\t\t\tthis._webix_tooltip_mm = event(document,\"mousemove\",this._move_tooltip,{ bind:this });\n\t\t\tthis._webix_tooltip_ml = event(document,\"mouseleave\",this._hide_tooltip, { bind:this });\n\t\t\tthis._drag_event = attachEvent(\"onDragMode\", () => { this._hide_tooltip(); });\n\t\t\tthis._click_event = attachEvent(\"onClick\", () => { this._hide_tooltip(); });\n\t\t}\n\t},\n\tgetTooltip:function(){\n\t\treturn this._tooltip;\n\t},\n\t_move_tooltip:function(e){\n\t\tlet node = e.target || e.srcElement;\n\t\tlet text;\n\t\twhile (node instanceof Element && node.tagName != \"HTML\"){\n\t\t\tif ( this._tooltip_masters[node.webix_tooltip] ){\n\t\t\t\tif(this._last && this._last != node){\n\t\t\t\t\tthis.$tooltipOut(this._last,node,e);\n\t\t\t\t\tthis._last = null;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif(!this._last)\n\t\t\t\t\tthis._last = this.$tooltipIn(node,e);\n\t\t\t\tthis.$tooltipMove(node,e,text);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttext = text || node.getAttribute(\"webix_tooltip\");\n\t\t\tnode = node.parentElement;\n\t\t}\n\t\tif (this._last)\n\t\t\tthis._last = this.$tooltipOut(this._last,null,e);\n\t},\n\t_hide_tooltip:function(){\n\t\tclearTimeout(this._before_show_delay);\n\t\tthis._tooltip.hide();\n\t},\n\tgetMaster:function(t){\n\t\treturn this._tooltip_masters[t.webix_tooltip];\n\t},\n\tremoveTooltip:function(target){\n\t\tlet node;\n\t\tassert(target, \"Target isn't defined\");\n\n\t\ttarget = toNode(target);\n\t\tif (target instanceof Element)\n\t\t\tnode = target;\n\t\telse node = target.$view;\n\n\t\tconst tip = node.webix_tooltip;\n\t\tif (tip){\n\t\t\tif (this._last == node){\n\t\t\t\tthis._hide_tooltip();\n\t\t\t\tthis._last = null;\n\t\t\t}\n\t\t\tdelete node.webix_tooltip;\n\t\t\tthis._tooltip_exist--;\n\n\t\t\tthis._tooltip_masters[tip] = null;\n\t\t}\n\n\t\tif (!this._tooltip_exist && this._tooltip){\n\t\t\t// detach events first\n\t\t\tthis._webix_tooltip_mm = eventRemove(this._webix_tooltip_mm);\n\t\t\tthis._webix_tooltip_ml = eventRemove(this._webix_tooltip_ml);\n\t\t\tthis._drag_event = detachEvent(this._drag_event);\n\t\t\tthis._click_event = detachEvent(this._click_event);\n\n\t\t\t// then destroy the tooltip\n\t\t\tthis._tooltip.destructor();\n\t\t\tthis._tooltip = this._last = null;\n\t\t\tthis._tooltip_masters = _to_array([\"dummy\"]);\n\t\t}\n\t},\n\n\t$tooltipIn:function(t,e){\n\t\tlet m = this._tooltip_masters[t.webix_tooltip];\n\t\tif (m.$tooltipIn && m!=this) return m.$tooltipIn(t,e);\n\t\tthis._tooltip.define( { dx:20, dy:0, template:t.getAttribute(\"webix_tooltip\")||\"\", css:\"\"} );\n\t\treturn t;\n\t},\n\t$tooltipOut:function(t,n,e){\n\t\tlet m = this._tooltip_masters[t.webix_tooltip];\n\t\tif (m.$tooltipOut && m!=this) return m.$tooltipOut(t,n,e);\n\t\tthis._hide_tooltip();\n\t\treturn null;\n\t},\n\t$tooltipMove:function(t,e,text){\n\t\tlet m = this._tooltip_masters[t.webix_tooltip];\n\t\tif (m.$tooltipMove && m!=this) return m.$tooltipMove(t,e,text);\n\t\tthis._tooltip.hide();\n\t\tclearTimeout(this._before_show_delay);\n\t\tthis._before_show_delay = delay(this._tooltip.show,this._tooltip,[text||{},getPos(e)],this.delay);\n\t}\n\n};\n\nexport default TooltipControl;","import env  from \"../webix/env\";\nimport state from \"../core/state\";\n\nimport {event} from \"../webix/htmlevents\";\nimport {callEvent} from \"../webix/customevents\";\n\nimport {use} from \"../services\";\n\nexport function _uid(name){\n\treturn \"$\"+name+(_namecount[name] = (_namecount[name]||0)+1);\n}\nconst _namecount = {};\n\nvar _freeze_resize = false;\nexport function freeze(handler, trigger){\n\t_freeze_resize = true;\n\tvar res = handler();\n\tif (res && res.then){\n\t\tres = res.then(function(any){\n\t\t\t_freeze_resize = false;\n\t\t\tif (trigger !== false)\n\t\t\t\tresize();\n\t\t\treturn any;\n\t\t});\n\t} else {\n\t\t_freeze_resize = false;\n\t\tif (trigger !== false)\n\t\t\tresize();\n\t}\n\treturn res;\n}\n\nexport function resize(){\n\tuse(\"UIManager\").applyChanges();\n\tcallEvent(\"onClick\",[]);\n\tstate._force_resize = true;\n\tif (!_freeze_resize)\n\t\tfor (var i=state.top_views.length - 1; i>=0; i--){\n\t\t\tif (state.top_views[i].obj)\n\t\t\t\tstate.top_views[i].obj.resize();\n\t\t}\n\tstate._force_resize = false;\n}\n\nexport function _each(parent, logic, master, include){\n\tif (parent){\n\t\tvar children = include ? [parent] : parent.getChildViews();\n\t\tfor (var i = 0; i < children.length; i++){\n\t\t\tif (logic.call((master), children[i]) !== false)\n\t\t\t\t_each(children[i], logic, master);\n\t\t}\n\t}\n}\n\nexport function zIndex(){\n\treturn env.zIndexBase++;\n}\n\nevent(window, \"resize\", function() {\n\t// check for virtual keyboard\n\tif(env.touch && ( state._edit_open_time && (new Date())-state._edit_open_time < 1000 || state._focus_time && (new Date())-state._focus_time < 1000)){\n\t\treturn;\n\t} else {\n\t\tresize();\n\t}\n});","import {assert} from \"./debug\";\nimport {event} from \"./htmlevents\";\nimport env from \"./env.js\";\nimport {isArray, delay} from \"./helpers.js\";\n\nimport {callEvent, attachEvent} from \"./customevents.js\";\n\nfunction ready(code){\n\tif (_ready) code.call();\n\telse _ready_code.push(code);\n}\nlet _ready = false;\nlet _ready_code = [];\n\n//autodetect codebase folder\nvar temp = document.getElementsByTagName(\"SCRIPT\");\t//current script, most probably\nassert(temp.length,\"Can't locate codebase\");\nif (temp.length){\n\t//full path to script\n\ttemp = (temp[temp.length-1].getAttribute(\"src\")||\"\").split(\"/\");\n\t//get folder name\n\ttemp.splice(temp.length-1, 1);\n\tenv.codebase = temp.slice(0, temp.length).join(\"/\")+\"/\";\n}\n\nvar handler = function(){\n\tif(env.isIE)\n\t\tdocument.body.className += \" webix_ie\";\n\tcallEvent(\"onReady\",[]);\n};\n\nvar doit = function(){\n\t_ready = true;\n\n\t/* global webix_ready */ \n\tif (window.webix_ready && isArray(webix_ready))\n\t\t_ready_code = webix_ready.concat(_ready_code);\n\n\tfor (var i=0; i < _ready_code.length; i++)\n\t\t_ready_code[i].call();\n\t_ready_code=[];\n};\n\nattachEvent(\"onReady\", function(force){\n\tif (force) \n\t\tdoit();\n\telse \n\t\tdelay(doit);\n});\n\nif (document.readyState == \"complete\") handler();\nelse event(window, \"load\", handler);\n\nready(function(){\n\tevent(document.body,\"click\", function(e){\n\t\tcallEvent(\"onClick\",[e||window.event]);\n\t});\n});\n\n\nexport default ready;","import ready from \"../webix/ready\";\n\nimport {assert} from \"../webix/debug\";\nimport {event, _event} from \"../webix/htmlevents\";\nimport {bind,delay,uid,_power_array,isUndefined,isArray} from \"../webix/helpers\";\nimport {callEvent} from \"../webix/customevents\";\nimport {locate,preventEvent} from \"../webix/html\";\n\nimport {$$} from \"../ui/core\";\nimport state from \"../core/state\";\n\nimport {define} from \"../services\";\n\n\nconst UIManager = {\n\t_view: null,\n\t_hotkeys: {},\n\t_focus_time:0,\n\t_tab_time:0,\n\t_mouse_time:0,\n\t_controls: {\n\t\t\"enter\": 13,\n\t\t\"tab\": 9,\n\t\t\"esc\": 27,\n\t\t\"escape\": 27,\n\t\t\"up\": 38,\n\t\t\"down\": 40,\n\t\t\"left\": 37,\n\t\t\"right\": 39,\n\t\t\"pgdown\": 34,\n\t\t\"pagedown\": 34,\n\t\t\"pgup\": 33,\n\t\t\"pageup\": 33,\n\t\t\"end\": 35,\n\t\t\"home\": 36,\n\t\t\"insert\": 45,\n\t\t\"delete\": 46,\n\t\t\"backspace\": 8,\n\t\t\"space\": 32,\n\t\t\"meta\": 91,\n\t\t\"win\": 91,\n\t\t\"mac\": 91,\n\t\t\"multiply\": 106,\n\t\t\"add\": 107,\n\t\t\"subtract\": 109,\n\t\t\"decimal\": 110,\n\t\t\"divide\": 111,\n\t\t\"scrollock\":145,\n\t\t\"pausebreak\":19,\n\t\t\"numlock\":144,\n\t\t\"5numlocked\":12,\n\t\t\"shift\":16,\n\t\t\"capslock\":20\n\t},\n\t_inputs:{\n\t\t\"input\": 1,\n\t\t\"button\":1,\n\t\t\"textarea\":1,\n\t\t\"select\":1\n\t},\n\t_enable: function() {\n\t\t// attaching events here\n\t\tevent(document.body, \"click\", bind(this._focus_click, this));\n\t\tevent(document, \"keydown\", bind(this._keypress, this));\n\t\t_event(document.body, \"mousedown\", bind(function(){ this._mouse_time = new Date();}, this));\n\n\t\tif (document.body.addEventListener)\n\t\t\tevent(document.body, \"focus\", this._focus_tab, { capture:true, bind: this });\n\n\t\tstate.destructors.push({obj:this});\n\t},\n\tdestructor:function(){\n\t\tUIManager._view = null;\n\t},\n\tgetFocus: function() {\n\t\treturn this._view;\n\t},\n\t_focus_action:function(view){\n\t\tthis._focus_was_there = this._focus_was_there || view._settings.id;\n\t},\n\tsetFocus: function(view, only_api, tab){\n\t\t//view can be empty\n\t\tview = $$(view);\n\t\t//unfocus if view is hidden\n\t\tif (view && !view.$view) view = null;\n\n\t\t//store last click time, it is necessary to prevent refocusing\n\t\t//for example when user moves focus from onclick handler somewher\n\t\t//and we want to prevent autofocusing, when event will reach document.body\n\t\tthis._focus_time = state._focus_time = new Date();\n\n\t\tif (this._view === view) return true;\n\t\tif (this._view && this._view.callEvent)\n\t\t\tthis._view.callEvent(\"onBlur\", [this._view]);\n\n\t\tif (view && view.callEvent){\n\t\t\tview.callEvent(\"onFocus\", [view, this._view]);\n\t\t\tif(tab) view.callEvent(\"onTabFocus\", [view, this._view]);\n\t\t}\n\t\tcallEvent(\"onFocusChange\", [view, this._view]);\n\n\t\tif (this._view && this._view.blur && !only_api) this._view.blur();\n\t\tthis._view = view;\n\t\tif (view && view.focus && !only_api) view.focus();\n\t\treturn true;\n\t},\n\tapplyChanges: function(element){\n\t\tvar view = this.getFocus();\n\t\tif (view && view != element && view._applyChanges)\n\t\t\tview._applyChanges(element);\n\t},\n\thasFocus: function(view) {\n\t\treturn (view === this._view) ? true : false;\n\t},\n\t_focus: function(e, dont_clear) {\n\t\tvar view = locate(e, /*@attr*/\"view_id\") || this._focus_was_there;\n\n\t\t//if html was repainted we can miss the view, so checking last processed one\n\t\tview = $$(view);\n\t\tthis._focus_was_there = null;\n\n\t\t//set timer, to fix issue with Android input focusin\n\t\tstate._focus_time = new Date();\n\n\t\tif (view == this._view) return;\n\n\t\tif (!dont_clear)\n\t\t\tthis._focus_was_there = null;\n\t\t\n\t\tif (view){\n\t\t\tview = $$(view);\n\t\t\tif (this.canFocus(view)){\n\t\t\t\tthis.setFocus(view);\n\t\t\t}\n\t\t} else if (!dont_clear)\n\t\t\tthis.setFocus(null);\n\n\t\treturn true;\n\t},\n\t_focus_click:function(e){\n\t\t// if it was onfocus/onclick less then 100ms behore then we ignore it\n\t\tif ((new Date())-this._focus_time < 100) {\n\t\t\tthis._focus_was_there = null;\n\t\t\treturn false;\n\t\t}\n\t\treturn this._focus(e);\n\t},\n\t_focus_tab: function(e) {\n\t\tif(!this._inputs[e.target.nodeName.toLowerCase()])\n\t\t\treturn false;\n\t\treturn this._focus(e, true);\n\t},\n\t_top_modal: function(view){\n\t\tif(!document.querySelector(\".webix_modal\"))\n\t\t\treturn true;\n\n\t\tconst win =  view.queryView(a => a.config.modal, \"parent\");\n\t\treturn (win && win.$view.style.zIndex >= state._modality);\n\t},\n\tcanFocus:function(view){\n\t\treturn view.isVisible() && view.isEnabled() && !view.config.disabled && this._top_modal(view) && !view.queryView({disabled:true}, \"parent\");\n\t},\n\n\t_moveChildFocus: function(check_view){\n\t\tvar focus = this.getFocus();\n\t\t//we have not focus inside of closing item\n\t\tif (check_view && !this._is_child_of(check_view, focus))\n\t\t\treturn false;\n\n\t\tif (!this._focus_logic(\"getPrev\", check_view))\n\t\t\tthis._view = null;\n\t},\n\t_translation_table:{\n\t},\n\t_is_child_of: function(parent, child) {\n\t\tif (!parent) return false;\n\t\tif (!child) return false;\n\t\twhile (child) {\n\t\t\tif (child === parent) return true;\n\t\t\tchild = child.getParentView();\n\t\t}\n\t\treturn false;\n\t},\n\t_keypress_timed:function(){\n\t\tif (this && this.callEvent)\n\t\t\tthis.callEvent(\"onTimedKeyPress\",[]);\n\t},\n\t_isNumPad: function(code){\n\t\treturn code < 112 &&  code>105;\n\t},\n\t_keypress: function(e) {\n\t\tvar code = e.which || e.keyCode;\n\t\tif(code>95 && code< 106)\n\t\t\tcode -= 48; //numpad support (numbers)\n\t\tcode = this._translation_table[code] || code;\n\t\t\n\t\tvar ctrl = e.ctrlKey;\n\t\tvar shift = e.shiftKey;\n\t\tvar alt = e.altKey;\n\t\tvar meta = e.metaKey;\n\t\tvar codeid = this._keycode(code, ctrl, shift, alt, meta);\n\t\tvar view = this.getFocus();\n\t\tif (view && view.callEvent) {\n\t\t\tif (view.callEvent(\"onKeyPress\", [code,e]) === false)\n\t\t\t\tpreventEvent(e);\n\t\t\tif (view.hasEvent(\"onTimedKeyPress\")){\n\t\t\t\tclearTimeout(view._key_press_timeout);\n\t\t\t\tview._key_press_timeout = delay(this._keypress_timed, view, [], (view._settings.keyPressTimeout||250));\n\t\t\t}\n\t\t}\n\n\t\tif(!this._isNumPad(code))\n\t\t\tcodeid = this._keycode(String.fromCharCode(code), ctrl, shift, alt, meta);\n\t\t//flag, that some non-special key was pressed\n\t\tvar is_any = !ctrl && !alt && !meta && (code!=9)&&(code!=27)&&(code!=13);\n\n\t\tif (this._check_keycode(codeid, is_any, e) === false) {\n\t\t\tpreventEvent(e);\n\t\t\treturn false;\n\t\t}\n\t},\n\n\t// dir - getNext or getPrev\n\t_focus_logic: function(dir, focus) {\n\t\tvar next = focus||this.getFocus();\n\t\tif(next){\n\t\t\tdir = dir || \"getNext\";\n\t\t\tvar start = next;\n\t\t\tvar marker = uid();\n\n\t\t\twhile (true) { // eslint-disable-line\n\t\t\t\tnext = this[dir](next);\n\t\t\t\t// view with focus ability\n\t\t\t\tif (next && this.canFocus(next))\n\t\t\t\t\treturn this.setFocus(next);\n\n\t\t\t\t// elements with focus ability not found\n\t\t\t\tif (next === start || next.$fmarker == marker){\n\t\t\t\t\tif(focus)\n\t\t\t\t\t\tdocument.activeElement.blur();\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\t//prevents infinity loop\n\t\t\t\tnext.$fmarker = marker;\n\t\t\t}\n\t\t}\n\t},\n\t_tab_logic:function(view, e){\n\t\tvar mode = !e.shiftKey;\n\t\tUIManager._tab_time = new Date();\n\t\tif (view && view._custom_tab_handler && !view._custom_tab_handler(mode, e))\n\t\t\treturn false;\n\n\t\tif (view && view._in_edit_mode){\n\t\t\tif (view.editNext)\n\t\t\t\treturn view.editNext(mode);\n\t\t\telse if (view.editStop){\n\t\t\t\tview.editStop();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else\n\t\t\tdelay(function(){\n\t\t\t\tview = $$(document.activeElement);\n\t\t\t\tif(view && !UIManager.canFocus(view))\n\t\t\t\t\treturn UIManager._focus_logic(mode ? \"getNext\" : \"getPrev\", view);\n\t\t\t\tUIManager.setFocus(view, true, true);\n\t\t\t});\n\t},\n\tgetTop: function(id) {\n\t\tvar next, view = $$(id);\n\n\t\twhile (view && (next = view.getParentView()))\n\t\t\tview = next;\n\t\treturn view;\n\t},\n\n\tgetNext: function(view, _inner_call) {\n\t\tvar cells = view.getChildViews();\n\t\t//tab to first children\n\t\tif (cells.length && !_inner_call)\n\t\t\tfor (var i = 0; i < cells.length; i++)\n\t\t\t\tif(this.canFocus(cells[i]))\n\t\t\t\t\treturn cells[i];\n\n\t\t//unique case - single view without child and parent\n\t\tvar parent = view.getParentView();\n\t\tif (!parent)\n\t\t\treturn view;\n\n\t\tvar p_cells = parent.getChildViews();\n\t\tif (p_cells.length){\n\t\t\tvar index = _power_array.find.call(p_cells, view)+1;\n\t\t\twhile (index < p_cells.length) {\n\t\t\t\t//next visible child\n\t\t\t\tif (this.canFocus(p_cells[index])) \n\t\t\t\t\treturn p_cells[index];\n\n\t\t\t\tindex++;\n\t\t\t}\n\t\t} \n\n\t\t//sibling of parent\n\t\treturn this.getNext(parent, true);\n\t},\n\n\tgetPrev: function(view, _inner_call) {\n\t\tvar cells = view.getChildViews();\n\t\t//last child of last child\n\t\tif (cells.length && _inner_call)\n\t\t\tfor (var i = cells.length - 1; i >= 0; i--)\n\t\t\t\tif(this.canFocus(cells[i]))\n\t\t\t\t\treturn this.getPrev(cells[i], true);\n\n\t\tif (_inner_call && this.canFocus(view)) return view;\n\n\t\t//fallback from top to bottom\n\t\tvar parent = view.getParentView();\n\t\tif (!parent)\n\t\t\treturn this.canFocus(view) ? this.getPrev(view, true) : view;\n\n\t\tvar p_cells = parent.getChildViews();\n\t\tif (p_cells) {\n\t\t\tvar index = _power_array.find.call(p_cells, view)-1;\n\t\t\twhile (index >= 0) {\n\t\t\t\tif (this.canFocus(p_cells[index]))\n\t\t\t\t\treturn this.getPrev(p_cells[index], true);\n\t\t\t\tindex--;\n\t\t\t}\n\t\t}\n\n\t\treturn this.getPrev(parent, true);\n\t},\n\taddHotKey: function(keys, handler, view) {\n\t\tassert(handler, \"Hot key handler is not defined\");\n\t\tvar pack = this._parse_keys(keys);\n\t\tassert(pack.letter, \"Unknown key code\");\n\t\tif (!view) view = null;\n\t\tpack.handler = handler;\n\t\tpack.view = view;\n\t\t\n\n\t\tvar code = this._keycode(pack.letter, pack.ctrl, pack.shift, pack.alt, pack.meta);\n\t\tif (!this._hotkeys[code]) this._hotkeys[code] = [];\n\t\tthis._hotkeys[code].push(pack);\n\n\t\treturn keys;\n\t},\n\tremoveHotKey: function(keys, func, view){\n\t\tvar pack = this._parse_keys(keys);\n\t\tvar code = this._keycode(pack.letter, pack.ctrl, pack.shift, pack.alt, pack.meta);\n\t\tif (!func && !view)\n\t\t\tdelete this._hotkeys[code];\n\t\telse {\n\t\t\tvar t = this._hotkeys[code];\n\t\t\tif (t){\n\t\t\t\tfor (var i = t.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (view && t[i].view !== view) continue;\n\t\t\t\t\tif (func && t[i].handler !== func) continue;\n\t\t\t\t\tt.splice(i,1);\n\t\t\t\t}\n\t\t\t\tif (!t.length)\n\t\t\t\t\tdelete this._hotkeys[code];\n\t\t\t}\n\n\t\t}\n\t},\n\t_keycode: function(code, ctrl, shift, alt, meta) {\n\t\treturn code+\"_\"+[\"\", (ctrl ? \"1\" : \"0\"), (shift ? \"1\" : \"0\"), (alt ? \"1\" : \"0\"), (meta ? \"1\" : \"0\")].join(\"\");\n\t},\n\n\t_check_keycode: function(code, is_any, e){\n\t\tvar focus = this.getFocus();\n\t\tif (this._hotkeys[code])\n\t\t\treturn  this._process_calls(this._hotkeys[code], focus, e);\n\t\telse if (is_any && this._hotkeys[\"ANY_0000\"])\n\t\t\treturn  this._process_calls(this._hotkeys[\"ANY_0000\"], focus, e);\n\n\t\treturn true;\n\t},\n\t_process_calls:function(calls, focus, e){\n\t\tfor (var i = 0; i < calls.length; i++) {\n\t\t\tvar key = calls[i];\n\t\t\tif ((key.view !== null) &&\t\t//common hot-key\n\t\t\t\t(focus !== key.view) &&\t\t//hot-key for current view\n\t\t\t\t//hotkey for current type of view\n\t\t\t\t(typeof(key.view) !== \"string\" || !focus || focus.name !== key.view)) continue;\n\n\t\t\tvar temp_result = key.handler(focus, e);\n\t\t\tif (!!temp_result === temp_result) return temp_result;\n\t\t}\n\t\treturn true;\n\t},\n\t_parse_keys: function(keys) {\n\t\tvar controls = this._controls;\n\t\tvar parts = keys.toLowerCase().split(/[+\\-_]/);\n\t\tvar ctrl, shift, alt, meta;\n\t\tctrl = shift = alt = meta = 0;\n\t\tvar letter = \"\";\n\t\tfor (var i = 0; i < parts.length; i++) {\n\t\t\tif (parts[i] === \"ctrl\") ctrl = 1;\n\t\t\telse if (parts[i] === \"shift\") shift = 1;\n\t\t\telse if (parts[i] === \"alt\") alt = 1;\n\t\t\telse if (parts[i] === \"command\") meta = 1;\n\t\t\telse {\n\t\t\t\tif (controls[parts[i]]) {\n\t\t\t\t\tvar code = controls[parts[i]];\n\t\t\t\t\tif(this._isNumPad(code))\n\t\t\t\t\t\tletter = code.toString();\n\t\t\t\t\telse\n\t\t\t\t\t\tletter = String.fromCharCode(code);\n\t\t\t\t} else {\n\t\t\t\t\tletter = parts[i];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tletter: letter.toUpperCase(),\n\t\t\tctrl: ctrl,\n\t\t\tshift: shift,\n\t\t\talt: alt,\n\t\t\tmeta: meta,\n\t\t\tdebug:keys\n\t\t};\n\t},\n\tgetState:function(node, children) {\n\t\tchildren = (children||false);\n\t\tnode = $$(node);\n\t\tvar state = {\n\t\t\tid: node.config.id,\n\t\t\twidth: node.config.width,\n\t\t\theight: node.config.height,\n\t\t\tgravity: node.config.gravity\n\t\t};\n\t\tif (!isUndefined(node.config.collapsed)) state.collapsed = node.config.collapsed;\n\t\tif (node.name === \"tabs\" || node.name === \"tabbar\") state.activeCell = node.getValue();\n\t\t\n\t\tif (children) {\n\t\t\tstate = [state];\n\t\t\tif (node._cells) {\n\t\t\t\tfor (var i = 0; i < node._cells.length; i++)\n\t\t\t\t\tstate = state.concat(this.getState(node._cells[i], children));\n\t\t\t}\n\t\t}\n\t\treturn state;\n\t},\n\tsetState:function(states) {\n\t\tif (!isArray(states)) states = [states];\n\t\n\t\tfor (var i = 0; i < states.length; i++) {\n\t\t\tvar state = states[i];\n\t\t\tvar node = $$(state.id);\n\t\t\tif (!node) continue;\n\t\n\t\t\tif (!isUndefined(state.collapsed)) node.define(\"collapsed\", state.collapsed);\n\t\t\tif (!isUndefined(state.activeCell)) node.setValue(state.activeCell);\n\t\n\t\t\tnode.define(\"width\", state.width);\n\t\t\tnode.define(\"height\", state.height);\n\t\t\tnode.define(\"gravity\", state.gravity);\n\t\t}\n\t\tvar top = $$(states[0].id);\n\t\tif (top) top.resize();\n\t}\n};\n\nready(function() {\n\tUIManager._enable();\n\n\tUIManager.addHotKey(\"enter\", function(view, ev){\n\t\tif (view && view.callEvent)\n\t\t\tview.callEvent(\"onEnter\", [ev]);\n\t\tif (view && view.editStop && view._in_edit_mode){\n\t\t\tview.editStop();\n\t\t\treturn true;\n\t\t} else if (view && view.touchable){\n\t\t\tvar form = view.getFormView();\n\t\t\tif (form && !view._skipSubmit)\n\t\t\t\tform.callEvent(\"onSubmit\",[view,ev]);\n\t\t}\n\t});\n\tUIManager.addHotKey(\"esc\", function(view){\n\t\tif (view){\n\t\t\tif (view.editCancel && view._in_edit_mode){\n\t\t\t\tview.editCancel();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tvar top = view.getTopParentView();\n\t\t\tif (top && top.setPosition)\n\t\t\t\ttop._hide();\n\t\t}\n\t});\n\tUIManager.addHotKey(\"shift+tab\", UIManager._tab_logic);\n\tUIManager.addHotKey(\"tab\", UIManager._tab_logic);\n});\n\ndefine(\"UIManager\", UIManager);\n\nexport default UIManager;","import {extend} from \"../webix/helpers\";\n\nconst Settings={\n\t$init:function(){\n\t\t/* \n\t\t\tproperty can be accessed as this.config.some\n\t\t\tin same time for inner call it have sense to use _settings\n\t\t\tbecause it will be minified in final version\n\t\t*/\n\t\tthis._settings = this.config= {}; \n\t},\n\tdefine:function(property, value){\n\t\tif (typeof property == \"object\")\n\t\t\treturn this._parseSeetingColl(property);\n\t\treturn this._define(property, value);\n\t},\n\t_define:function(property,value){\n\t\t//method with name {prop}_setter will be used as property setter\n\t\t//setter is optional\n\t\tvar setter = this[property+\"_setter\"];\n\t\treturn (this._settings[property]=setter?setter.call(this,value,property):value);\n\t},\n\t//process configuration object\n\t_parseSeetingColl:function(coll){\n\t\tif (coll){\n\t\t\tfor (var a in coll)\t\t\t\t//for each setting\n\t\t\t\tthis._define(a,coll[a]);\t\t//set value through config\n\t\t}\n\t},\n\t//helper for object initialization\n\t_parseSettings:function(obj,initial){\n\t\t//initial - set of default values\n\t\tvar settings = {}; \n\t\tif (initial)\n\t\t\tsettings = extend(settings,initial);\n\t\t\t\t\t\n\t\t//code below will copy all properties over default one\n\t\tif (typeof obj == \"object\" && !obj.tagName)\n\t\t\textend(settings,obj, true);\t\n\t\t//call config for each setting\n\t\tthis._parseSeetingColl(settings);\n\t},\n\t_mergeSettings:function(config, defaults){\n\t\tfor (var key in defaults)\n\t\t\tswitch(typeof config[key]){\n\t\t\t\tcase \"object\": \n\t\t\t\t\tconfig[key] = this._mergeSettings((config[key]||{}), defaults[key]);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"undefined\":\n\t\t\t\t\tconfig[key] = defaults[key];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\t//do nothing\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\treturn config;\n\t}\n};\n\nexport default Settings;","import state from \"./state\";\n\nimport {_to_array} from \"../webix/helpers\";\nimport {event, _events_final_destructor} from \"../webix/htmlevents\";\nimport {callEvent} from \"../webix/customevents\";\n\nimport {ui} from \"../ui/core\";\nimport UIManager from \"../core/uimanager\";\n\n\nconst Destruction = {\n\t$init:function(){\n\t\t//wrap in object to simplify removing self-reference\n\t\tvar t  = this._destructor_handler = { obj: this};\n\n\t\t//register self in global list of destructors\n\t\tstate.destructors.push(t);\n\t},\n\t//will be called automatically on unload, can be called manually\n\t//simplifies job of GC\n\tdestructor:function(){\n\t\tvar config = this._settings;\n\n\t\tif (this._last_editor)\n\t\t\tthis.editCancel();\n\n\t\tif(this.callEvent)\n\t\t\tthis.callEvent(\"onDestruct\",[]);\n\n\t\t//destructor can be called only once\n\t\tthis.destructor=function(){};\n\t\t//remove self reference from global destructions collection\n\t\tthis._destructor_handler.obj = null;\n\n\t\t//destroy child and related cells\n\t\tif (this.getChildViews){\n\t\t\tvar cells = this.getChildViews();\n\t\t\tif (cells)\n\t\t\t\tfor (let i=0; i < cells.length; i++)\n\t\t\t\t\tcells[i].destructor();\n\n\t\t\tif (this._destroy_with_me)\n\t\t\t\tfor (let i=0; i < this._destroy_with_me.length; i++)\n\t\t\t\t\tthis._destroy_with_me[i].destructor();\n\t\t}\n\n\t\tdelete ui.views[config.id];\n\n\t\tif (config.$id){\n\t\t\tvar top = this.getTopParentView();\n\t\t\tif (top && top._destroy_child)\n\t\t\t\ttop._destroy_child(config.$id);\n\t\t}\n\n\t\t//html collection\n\t\tthis._htmlmap  = null;\n\t\tthis._htmlrows = null;\n\t\tthis._html = null;\n\n\n\t\tif (this._contentobj) {\n\t\t\tthis._contentobj.innerHTML=\"\";\n\t\t\tthis._contentobj._htmlmap = null;\n\t\t}\n\n\t\t//removes view container\n\t\tif (this._viewobj&&this._viewobj.parentNode){\n\t\t\tthis._viewobj.parentNode.removeChild(this._viewobj);\n\t\t}\n\n\t\tif (this.data && this.data.destructor)\n\t\t\tthis.data.destructor();\n\n\t\tif (this.unbind)\n\t\t\tthis.unbind();\n\n\t\tthis.data = null;\n\t\tthis._viewobj = this.$view = this._contentobj = this._dataobj = null;\n\t\tthis._evs_events = this._evs_handlers = {};\n\n\t\t//remove focus from destructed view\n\t\tif (UIManager._view == this)\n\t\t\tUIManager._view = null;\n\n\t\tvar url = config.url;\n\t\tif (url && url.$proxy && url.release)\n\t\t\turl.release();\n\n\t\tthis.$scope = null;\n\t\t// this flag is checked in delay method\n\t\tthis.$destructed = true;\n\t}\n};\n//global list of destructors\nevent(window,\"unload\",function(){\n\tcallEvent(\"unload\", []);\n\tstate._final_destruction = true;\n\t\n\t//call all registered destructors\n\tfor (var i=0; i<state.destructors.length; i++){\n\t\tvar obj = state.destructors[i].obj;\n\t\tif (obj)\n\t\t\tobj.destructor();\n\t}\n\tstate.destructors = [];\n\tstate._popups = _to_array();\n\n\t_events_final_destructor();\n});\n\nexport default Destruction;","import {bind} from \"../webix/helpers\";\n\nconst CollectionBind={\n\t$init:function(){\n\t\tthis._cursor = null;\n\t\tthis.attachEvent(\"onSelectChange\", function(){\n\t\t\tvar sel = this.getSelectedId();\n\t\t\tthis.setCursor(sel?(sel.id||sel):null);\n\t\t});\n\t\tthis.attachEvent(\"onAfterCursorChange\", this._update_binds);\t\t\n\t\tthis.attachEvent(\"onAfterDelete\", function(id){\n\t\t\tif (id == this.getCursor())\n\t\t\t\tthis.setCursor(null);\n\t\t});\n\t\tthis.data.attachEvent(\"onStoreUpdated\", bind(function(id, data, mode){\n\t\t\t//paint - ignored\n\t\t\t//delete - handled by onAfterDelete above\n\t\t\tif (id && id == this.getCursor() && mode != \"paint\" && mode != \"delete\")\n\t\t\t\tthis._update_binds();\n\t\t\t\n\t\t},this));\n\t\tthis.data.attachEvent(\"onClearAll\", bind(function(){\n\t\t\tthis._cursor = null;\n\t\t},this));\n\t\tthis.data.attachEvent(\"onIdChange\", bind(function(oldid, newid){\n\t\t\tif (this._cursor == oldid){\n\t\t\t\tthis._cursor = newid;\n\t\t\t\tthis._update_binds();\n\t\t\t}\n\t\t},this));\n\t},\n\trefreshCursor:function(){\n\t\tif (this._cursor)\n\t\t\tthis.callEvent(\"onAfterCursorChange\",[this._cursor]);\n\t},\n\tsetCursor:function(id){\n\t\tif (id == this._cursor || (id !== null && !this.getItem(id))) return;\n\t\t\n\t\tthis.callEvent(\"onBeforeCursorChange\", [this._cursor]);\n\t\tthis._cursor = id;\n\t\tthis.callEvent(\"onAfterCursorChange\",[id]);\n\t},\n\tgetCursor:function(){\n\t\treturn this._cursor;\n\t},\n\t_bind_update:function(target, rule, format){\n\t\tif (rule == \"$level\" && this.data.getBranch)\n\t\t\treturn (target.data || target).importData(this.data.getBranch(this.getCursor()));\n\n\t\tvar data = this.getItem(this.getCursor())|| this._settings.defaultData || null;\n\t\tif (rule == \"$data\"){\n\t\t\tif (typeof format === \"function\")\n\t\t\t\tformat.call(target, data, this);\n\t\t\telse\n\t\t\t\ttarget.data.importData(data?data[format]:[]);\n\t\t\ttarget.callEvent(\"onBindApply\", [data,rule,this]);\n\t\t} else {\n\t\t\tif (format)\n\t\t\t\tdata = format(data);\n\t\t\tthis._bind_update_common(target, rule, data);\n\t\t}\n\t}\n};\n\nexport default CollectionBind;","const ValueBind={\n\t$init:function(){\n\t\tthis.attachEvent(\"onChange\", this._update_binds);\n\t},\n\t_bind_update:function(target, rule, format){\n\t\trule = rule || \"value\";\n\t\tvar data = this.getValue()||\"\";\n\t\tif (format) data = format(data);\n\t\t\n\t\tif (target.setValue)\n\t\t\ttarget.setValue(data);\n\t\telse if (!target.filter){\n\t\t\tvar pod = {}; pod[rule] = data;\n\t\t\tif (target._check_data_feed(data))\n\t\t\t\ttarget.setValues(pod);\n\t\t} else{\n\t\t\ttarget.data.silent(function(){\n\t\t\t\tthis.filter(rule,data);\n\t\t\t});\n\t\t}\n\t\ttarget.callEvent(\"onBindApply\", [data,rule,this]);\n\t}\n};\n\nexport default ValueBind;","const RecordBind={\n\t$init:function(){\n\t\tthis.attachEvent(\"onChange\", this._update_binds);\t\t\n\t},\n\t_bind_update:function(target, rule, format){\n\t\tvar data = this.getValues()||null;\n\t\tif (format)\n\t\t\tdata = format(data);\n\t\tthis._bind_update_common(target, rule, data);\n\t}\n};\n\n\nexport default RecordBind;","import {extend, clone} from \"../webix/helpers\";\n\nimport {$$} from \"../ui/core\";\n\nimport CollectionBind from \"./collectionbind\";\nimport ValueBind from \"./valuebind\";\nimport RecordBind from \"./recordbind\";\n\nconst BindSource = {\n\t$init:function(){\n\t\tthis._bind_hash = {};\t\t//rules per target\n\t\tthis._bind_updated = {};\t//update flags\n\t\tthis._ignore_binds = {};\n\t\t\n\t\t//apply specific bind extension\n\t\tthis._bind_specific_rules(this);\n\t},\n\tsaveBatch:function(code){\n\t\tthis._do_not_update_binds = true;\n\t\tcode.call(this);\n\t\tthis._do_not_update_binds = false;\n\t\tthis._update_binds();\n\t},\n\tsetBindData:function(data, key){\n\t\t//save called, updating master data\n\t\tif (key)\n\t\t\tthis._ignore_binds[key] = true;\n\n\t\tif (this.setValue)\n\t\t\tthis.setValue(data);\n\t\telse if (this.setValues)\n\t\t\tthis.setValues(data);\n\t\telse {\n\t\t\tvar id = this.getCursor();\n\t\t\tif (id)\n\t\t\t\tthis.updateItem(id, data);\n\t\t\telse\n\t\t\t\tthis.add(data);\n\t\t}\n\t\tthis.callEvent(\"onBindUpdate\", [data, key]);\t\t\n\t\tif (this.save)\n\t\t\tthis.save();\n\t\t\n\t\tif (key)\n\t\t\tthis._ignore_binds[key] = false;\n\t},\n\t//fill target with data\n\tgetBindData:function(key, update){\n\t\t//fire only if we have data updates from the last time\n\t\tif (this._bind_updated[key]) return false;\n\t\tvar target = $$(key);\n\t\t//fill target only when it visible\n\t\tif (target.isVisible(target._settings.id)){\n\t\t\tthis._bind_updated[key] = true;\n\t\t\tthis._bind_update(target, this._bind_hash[key][0], this._bind_hash[key][1]); //trigger component specific updating logic\n\t\t\tif (update && target.filter)\n\t\t\t\ttarget.refresh();\n\t\t}\n\t},\n\t//add one more bind target\n\taddBind:function(source, rule, format){\n\t\tthis._bind_hash[source] = [rule, format];\n\t},\n\tremoveBind:function(source){\n\t\tdelete this._bind_hash[source];\n\t\tdelete this._bind_updated[source];\n\t\tdelete this._ignore_binds[source];\n\t},\n\t//returns true if object belong to \"collection\" type\n\t_bind_specific_rules:function(obj){\n\t\tif (obj.filter)\n\t\t\textend(this, CollectionBind);\n\t\telse if (obj.setValue)\n\t\t\textend(this, ValueBind);\n\t\telse\n\t\t\textend(this, RecordBind);\n\t},\n\t//inform all binded objects, that source data was updated\n\t_update_binds:function(){\n\t\tif (!this._do_not_update_binds)\n\t\t\tfor (var key in this._bind_hash){\n\t\t\t\tif (this._ignore_binds[key]) continue;\n\t\t\t\tthis._bind_updated[key] = false;\n\t\t\t\tthis.getBindData(key, true);\n\t\t\t}\n\t},\n\t//copy data from source to the target\n\t_bind_update_common:function(target, rule, data){\n\t\tif (target.setValue)\n\t\t\ttarget.setValue((data&&rule)?data[rule]:data);\n\t\telse if (!target.filter){\n\t\t\tif (!data && target.clear)\n\t\t\t\ttarget.clear();\n\t\t\telse {\n\t\t\t\tif (target._check_data_feed(data))\n\t\t\t\t\ttarget.setValues(clone(data));\n\t\t\t}\n\t\t} else {\n\t\t\ttarget.data.silent(function(){\n\t\t\t\tthis.filter(rule,data);\n\t\t\t});\n\t\t}\n\t\ttarget.callEvent(\"onBindApply\", [data,rule,this]);\n\t}\n};\n\nexport default BindSource;","import {extend, bind} from \"../webix/helpers\";\n\nimport {$$} from \"../ui/core\";\n\nimport BindSource from \"./bindsource\";\nimport EventSystem from \"./eventsystem\";\n\nconst BaseBind = {\n\tbind:function(target, rule, format){\n\t\tif (!this.attachEvent)\n\t\t\textend(this, EventSystem);\n\n\t\tif (typeof target == \"string\")\n\t\t\ttarget = $$(target);\n\t\t\t\n\t\tif (target._initBindSource) target._initBindSource();\n\t\tif (this._initBindSource) this._initBindSource();\n\t\t\t\n\t\tif (!target.getBindData)\n\t\t\textend(target, BindSource);\n\n\t\tthis._bind_ready();\n\n\t\ttarget.addBind(this._settings.id, rule, format);\n\t\tthis._bind_source = target._settings.id;\n\t\tthis._bind_id = this._settings.id;\n\n\t\t//FIXME - check for touchable is not the best solution, to detect necessary event\n\t\tthis._bind_refresh_handler = this.attachEvent(this.touchable?\"onAfterRender\":\"onBindRequest\", function(){\n\t\t\treturn target.getBindData(this._bind_id);\n\t\t});\n\n\t\tif (this.refresh && this.isVisible(this._bind_id))\n\t\t\tthis.refresh();\n\t},\n\tunbind:function(){\n\t\tif (this._bind_source){\n\t\t\tvar target = $$(this._bind_source);\n\t\t\tif (target)\n\t\t\t\ttarget.removeBind(this._bind_id);\n\t\t\tthis.detachEvent(this._bind_refresh_handler);\n\t\t\tthis._bind_source = this._bind_refresh_handler = null;\n\t\t}\n\t},\n\t_bind_ready:function(){\n\t\tvar config = this._settings;\n\t\tif (this.filter){\n\t\t\tvar key = config.id;\n\t\t\tthis.data._on_sync = bind(function(){\n\t\t\t\t$$(this._bind_source)._bind_updated[key] = false;\n\t\t\t}, this);\n\t\t}\n\n\t\tvar old_render = this.render;\n\t\tthis.render = function(){\n\t\t\tif (this._in_bind_processing) return;\n\t\t\t\n\t\t\tthis._in_bind_processing = true;\n\t\t\tvar result = this.callEvent(\"onBindRequest\");\n\t\t\tthis._in_bind_processing = false;\n\t\t\t\n\t\t\treturn old_render.apply(this, ((result === false)?arguments:[]));\n\t\t};\n\n\t\tif (this.getValue||this.getValues)\n\t\t\tthis.save = function(data){\n\t\t\t\tvar source = $$(this._bind_source);\n\t\t\t\tif (data)\n\t\t\t\t\tsource.setBindData(data);\n\t\t\t\telse {\n\t\t\t\t\tif (this.validate && !this.validate()) return false;\n\t\t\t\t\tvar values = this.getValue?this.getValue:this.getValues();\n\t\t\t\t\tsource.setBindData(values,this._settings.id);\n\t\t\t\t\t//reset form, so it will be counted as saved\n\t\t\t\t\tif (this.setDirty)\n\t\t\t\t\t\tthis.setDirty(false);\n\t\t\t\t}\n\t\t\t};\n\n\t\tthis._bind_ready = function(){};\n\t}\n};\n\nexport default BaseBind;","import {assert} from \"../webix/debug\";\nimport {debug_size_box} from \"../webix/debug\";\n\nimport {callEvent} from \"../webix/customevents\";\nimport {create, createCss, remove, addCss, removeCss, triggerEvent, preventEvent} from \"../webix/html\";\nimport {toNode, extend} from \"../webix/helpers\";\nimport env from \"../webix/env\";\n\nimport {$$,ui,protoUI} from \"../ui/core\";\nimport {_uid} from \"../ui/helpers\";\n\nimport state from \"../core/state\";\nimport UIManager from \"../core/uimanager\";\n\nimport Settings from \"../core/settings\";\nimport Destruction from \"../core/destruction\";\nimport BaseBind from \"../core/basebind\";\n\nconst UIExtension = window.webix_view||{};\n\nconst api = {\n\tname:\"baseview\",\n\t//attribute , which will be used for ID storing\n\t$init:function(config){\n\t\tif (!config.id) \n\t\t\tconfig.id = _uid(this.name);\n\t\t\n\t\tthis._parent_cell = state._parent_cell;\n\t\tstate._parent_cell = null;\n\n\t\t// if scope not provided directly, and there is no parent view\n\t\t// check if we have a global scope\n\t\tthis.$scope = config.$scope || (this._parent_cell ? this._parent_cell.$scope : state._global_scope);\n\t\t\n\t\tif (!this._viewobj){\n\t\t\tthis._contentobj = this._viewobj = create(\"DIV\",{\n\t\t\t\t\"class\":\"webix_view\"\n\t\t\t});\n\t\t\tthis.$view = this._viewobj;\n\t\t}\n\t},\n\t$skin:false,\n\tdefaults:{\n\t\twidth:0,\n\t\theight:0,\n\t\tgravity:1\n\t},\n\tgetNode:function(){\n\t\treturn this._viewobj;\n\t},\n\t// needed only to maintain the deprecated ActiveContent module\n\t// do not use it anywhere else\n\t$setNode:function(node){\n\t\tthis._viewobj = this._dataobj = this.$view = node;\n\t},\n\tgetParentView:function(){\n\t\treturn this._parent_cell||null;\t\n\t},\n\tgetTopParentView:function(){\n\t\tvar parent = this.getParentView();\n\t\treturn parent ? parent.getTopParentView() :  this;\n\t},\n\tgetFormView:function(){\n\t\tvar parent = this.getParentView();\n\t\treturn (!parent || parent._recollect_elements) ? parent : parent.getFormView();\n\t},\n\tgetChildViews:function(){ return []; },\n\tqueryView:function(search, all){\n\t\tvar confirm;\n\t\tif (typeof search === \"string\")\n\t\t\tsearch = { view:search };\n\t\tif (typeof search === \"object\"){\n\t\t\t//IE8 compatibility\n\t\t\tconfirm = function(test){\n\t\t\t\tvar config = test.config;\n\t\t\t\tfor (var key in search){\n\t\t\t\t\tif (config[key] != search[key])\n\t\t\t\t\t\treturn false; \n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t};\n\t\t} else\n\t\t\tconfirm = search;\n\n\t\tif (all === \"self\" && confirm(this)) return this;\n\t\tvar results = all === \"all\" ? [] : false;\n\t\tvar direction = all === \"parent\" ? this._queryGoUp : this._queryGoDown;\n\n\t\tvar found = this._queryView(confirm, direction, results);\n\t\treturn all === \"all\" ? results : found;\n\t},\n\t_queryGoDown:function(node){\n\t\treturn node.getChildViews();\n\t},\n\t_queryGoUp:function(node){\n\t\tvar parent = node.getParentView();\n\t\treturn parent ? [parent] : [];\n\t},\n\t_queryView:function(confirm, next, all){\n\t\tvar kids = next(this);\n\t\tfor (var i =0; i<kids.length; i++){\n\t\t\tif (confirm(kids[i])){\n\t\t\t\tif (all)\n\t\t\t\t\tall.push(kids[i]);\n\t\t\t\telse\n\t\t\t\t\treturn kids[i];\n\t\t\t}\n\n\t\t\tvar sub = kids[i]._queryView(confirm, next, all);\n\t\t\tif (sub && !all){\n\t\t\t\treturn sub;\n\t\t\t} \n\t\t}\n\t\treturn null;\n\t},\n\tisVisible:function(base_id){\n\t\tif (this._settings.hidden){\n\t\t\tif(base_id){\n\t\t\t\tif (!this._hidden_render) {\n\t\t\t\t\tthis._hidden_render = [];\n\t\t\t\t\tthis._hidden_hash = {};\n\t\t\t\t}\n\t\t\t\tif (!this._hidden_hash[base_id]){\n\t\t\t\t\tthis._hidden_hash[base_id] =  true;\n\t\t\t\t\tthis._hidden_render.push(base_id);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\t\n\t\tvar parent = this.getParentView();\n\t\tif (parent) return parent.isVisible(base_id, this._settings.id);\n\t\t\n\t\treturn true;\n\t},\n\tisEnabled:function(){\n\t\tif(this._disable_cover)\n\t\t\treturn false;\n\n\t\tvar parent= this.getParentView();\n\t\tif(parent)\n\t\t\treturn parent.isEnabled();\n\n\t\treturn true;\n\t},\n\tdisable:function(){\n\t\tremove(this._disable_cover);\n\t\tthis._settings.disabled = true;\n\n\t\tthis._disable_cover = create(\"div\",{\n\t\t\t\"class\":\"webix_disabled\"\n\t\t});\n\n\t\tthis._viewobj.appendChild(this._disable_cover);\n\t\tthis._viewobj.setAttribute(\"aria-disabled\", \"true\");\n\t\taddCss(this._viewobj,\"webix_disabled_view\",true);\n\t\tUIManager._moveChildFocus(this);\n\t},\n\tenable:function(){\n\t\tthis._settings.disabled = false;\n\n\t\tif (this._disable_cover){\n\t\t\tremove(this._disable_cover);\n\t\t\tremoveCss(this._viewobj,\"webix_disabled_view\");\n\t\t\tthis._viewobj.removeAttribute(\"aria-disabled\");\n\t\t\tthis._disable_cover = null;\n\t\t}\n\t},\n\tdisabled_setter:function(value){\n\t\tif (value)\n\t\t\tthis.disable();\n\t\telse\n\t\t\tthis.enable();\n\t\treturn value;\n\t},\n\tcontainer_setter:function(value){\n\t\tassert(toNode(value),\"Invalid container\");\n\t\treturn true;\n\t},\n\tcss_setter:function(value){\n\t\tif (typeof value == \"object\")\n\t\t\tvalue = createCss(value);\n\n\t\tthis._viewobj.className += \" \"+value;\n\t\treturn value;\n\t},\n\tid_setter:function(value){\n\t\tif (state._global_collection && (state._global_collection != this || this._prev_global_col)){\n\t\t\tvar oldvalue = this.config.$id = value;\n\t\t\t(this._prev_global_col || state._global_collection)._elements[value] = this;\n\t\t\tvalue = _uid(this.name);\n\t\t\t(this._prev_global_col || state._global_collection)._translate_ids[value]=oldvalue;\n\t\t}\n\t\tassert(!ui.views[value], \"Non unique view id: \"+value);\n\t\tui.views[value] = this;\n\t\tthis._viewobj.setAttribute(/*@attr*/\"view_id\", value);\n\t\treturn value;\n\t},\n\t$setSize:function(x,y){\n\t\tvar last = this._last_size;\n\t\tif (last && last[0]==x && last[1]==y) {\n\t\t\tif (DEBUG) debug_size_box(this, [x,y,\"not changed\"]);\n\t\t\treturn false;\n\t\t}\n\n\t\tif (DEBUG) debug_size_box(this, [x,y]);\n\t\t\n\t\tthis._last_size = [x,y];\n\t\tthis.$width  = this._content_width = x-(this._scroll_y?env.scrollSize:0);\n\t\tthis.$height = this._content_height = y-(this._scroll_x?env.scrollSize:0);\n\n\t\tvar config = this._settings;\n\t\tif (!config.flex){\n\t\t\tthis._viewobj.style.width = x+\"px\";\n\t\t\tthis._viewobj.style.height = y+\"px\";\n\t\t}\n\n\t\treturn true;\n\t},\n\t$getSize:function(dx, dy){\n\t\tvar s = this._settings;\n\n\t\tvar size = [\n\t\t\t(s.width || s.minWidth || 0)*1,\n\t\t\t(s.width || s.maxWidth || 100000)*1,\n\t\t\t(s.height || s.minHeight || 0)*1,\n\t\t\t(s.height || s.maxHeight || 100000)*1,\n\t\t\ts.gravity\n\t\t];\n\n\t\tif (assert){\n\t\t\tvar check = (isNaN(size[0]) || isNaN(size[1]) || isNaN(size[2]) || isNaN(size[3]));\n\t\t\tif (check){\n\t\t\t\tassert(false, \"Size is not a number \"+this._settings.id);\n\t\t\t\ts.width = s.height = s.maxWidth = s.maxHeight = s.minWidth = s.minHeight = 0;\n\t\t\t\tsize = [0,0,100000,100000,1];\n\t\t\t}\n\t\t}\n\n\t\tsize[0]+=dx; size[1]+=dx;\n\t\tsize[2]+=dy; size[3]+=dy;\n\t\treturn size;\n\t},\n\tshow:function(force, animate_settings){\n\t\tvar parent = this.getParentView();\n\t\tvar show = !arguments[2];\n\t\tif (parent) {\n\t\t\tif(!animate_settings && animate_settings !== false && this._settings.animate)\n\t\t\t\tif (parent._settings.animate)\n\t\t\t\t\tanimate_settings = extend((parent._settings.animate?extend({},parent._settings.animate):{}), this._settings.animate, true);\n\n\t\t\tif (show?parent._show:parent._hide)\n\t\t\t\t(show?parent._show:parent._hide).call(parent, this, animate_settings);\n\t\t\tif (show)\n\t\t\t\tthis._render_hidden_views();\n\n\t\t\t//force show of parent view\n\t\t\t//stop further processing is view is a part of isolated scope\n\t\t\tif (force && show)  \n\t\t\t\tparent.show(parent.$$?false:force);\n\t\t}\n\t\telse{\n\t\t\tif (this._settings.hidden){\n\t\t\t\tif (show){\n\t\t\t\t\tvar node = toNode(this._settings._container||document.body);\n\t\t\t\t\tnode.appendChild(this._viewobj);\n\t\t\t\t\tthis._settings.hidden = false;\n\n\t\t\t\t\tthis.adjust();\n\t\t\t\t\tthis._render_hidden_views();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!show){\n\t\t\t\t\tthis._settings.hidden = this._settings._hidden = true;\n\t\t\t\t\tif (this._viewobj){\n\t\t\t\t\t\tthis._settings._container = this._viewobj.parentNode;\n\t\t\t\t\t\tremove(this._viewobj);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t_render_hidden_views:function(){\n\t\tif (this._hidden_render){\n\t\t\tfor (var i=0; i < this._hidden_render.length; i++){\n\t\t\t\tvar ui_to_render = $$(this._hidden_render[i]);\n\t\t\t\tif (ui_to_render)\n\t\t\t\t\tui_to_render.render();\n\t\t\t}\n\t\t\tthis._hidden_render = [];\n\t\t\tthis._hidden_hash = {};\n\t\t}\n\t},\n\t_onKeyPress:function(code, e){\n\t\tvar target = e.srcElement || e.target, role = target.getAttribute(\"role\");\n\n\t\tif((code === 13 || code === 32) && (role == \"button\" || role == \"tab\") && !this._settings.disabled){\n\t\t\ttriggerEvent(target, \"MouseEvents\", \"click\");\n\t\t\tpreventEvent(e);\n\t\t}\n\t},\n\thidden_setter:function(value){\n\t\tif (value) this.hide();\n\t\treturn this._settings.hidden;\n\t},\n\thide:function(){\n\t\tthis.show(null, null, true);\n\t\tUIManager._moveChildFocus(this);\n\t},\n\tadjust:function(){\n\t\tif(!this._viewobj.parentNode)\n\t\t\treturn false;\n\n\t\tvar x = this._viewobj.parentNode.clientWidth||0;\n\t\tvar y = this._viewobj.parentNode.clientHeight||0;\n\n\t\tvar sizes=this.$getSize(0,0);\n\t\tvar fullscreen = (this._viewobj.parentNode == document.body) && !this.setPosition;\n\n\t\t//minWidth\n\t\tif (sizes[0]>x) x = sizes[0];\n\t\t//minHeight\n\t\tif (sizes[2]>y) y = sizes[2];\n\n\t\t//maxWidth rule\n\t\tif ((!fullscreen || this._settings.width)  && x>sizes[1]) x = sizes[1];\n\t\t//maxHeight rule\n\t\tif ((!fullscreen || this._settings.height) && y>sizes[3]) y = sizes[3];\n\n\t\tthis.$setSize(x,y);\n\t\tif (state._responsive_exception){\n\t\t\tstate._responsive_exception = false;\n\t\t\tthis.adjust();\n\t\t}\n\t},\n\tresize:function(){\n\t\tif (state._child_sizing_active || state._freeze_resize || state._responsive_tinkery ) return;\n\n\t\tvar parent = this.getParentView();\n\t\tif (parent){\n\t\t\tif (parent.resizeChildren)\n\t\t\t\tparent.resizeChildren();\n\t\t\telse\n\t\t\t\tparent.resize();\n\t\t} else {\n\t\t\tthis.adjust();\n\t\t\tcallEvent(\"onResize\",[]);\n\t\t}\n\t}\n};\n\nconst view = protoUI(api, Settings, Destruction, BaseBind, UIExtension);\nexport default { api, view };","import {isUndefined} from \"../webix/helpers\";\nimport {debug_size_box} from \"../webix/debug\";\nimport {protoUI} from \"../ui/core\";\n\nimport base from \"./baseview\";\n\nconst api = {\n\tname:\"view\",\n\t$init:function(config){\n\t\tthis._set_inner(config);\n\t},\n\n\t//deside, will component use borders or not\n\t_set_inner:function(config){\n\t\tvar border_not_set = isUndefined(config.borderless);\n\t\tif (border_not_set && !this.setPosition && config.$topView){\n\t\t\tconfig.borderless = true;\n\t\t\tborder_not_set = false;\n\t\t}\n\n\t\tif ((border_not_set && this.defaults.borderless) || config.borderless){\n\t\t\t//button and custom borderless\n\t\t\tconfig._inner = { top:true, left:true, bottom:true, right:true };\n\t\t} else {\n\t\t\t//default borders\n\t\t\tif (!config._inner)\n\t\t\t\tconfig._inner = {};\n\t\t\tthis._contentobj.style.borderWidth=\"1px\";\n\t\t}\n\t},\n\n\t$getSize:function(dx, dy){\n\n\t\tvar _borders = this._settings._inner;\n\t\tif (_borders){\n\t\t\tdx += (_borders.left?0:1)+(_borders.right?0:1);\n\t\t\tdy += (_borders.top?0:1)+(_borders.bottom?0:1);\n\t\t}\n\t\t\n\t\tvar size = base.api.$getSize.call(this, dx, dy);\n\t\t\n\t\tif (DEBUG) debug_size_box(this, size, true);\n\t\treturn size;\n\t},\n\t$setSize:function(x,y){\n\t\tif (DEBUG) debug_size_box(this, [x,y]);\n\t\t\t\n\t\tvar _borders = this._settings._inner;\n\t\tif (_borders){\n\t\t\tx -= (_borders.left?0:1)+(_borders.right?0:1);\n\t\t\ty -= (_borders.top?0:1)+(_borders.bottom?0:1);\n\t\t}\n\t\t\t\n\t\treturn base.api.$setSize.call(this,x,y);\n\t}\n};\n\nconst view = protoUI(api, base.view);\nexport default { api, view };\n\n//not necessary anymore\n//preserving for backward compatibility\nview.call(-1);\n","import AtomRender from \"../core/atomrender\";\nimport {proto} from \"../ui/core\";\nimport template from \"../webix/template\";\n\nimport type from \"../webix/type\";\n/*\n\tREnders single item. \n\tCan be used for elements without datastore, or with complex custom rendering logic\n\t\n\t@export\n\t\trender\n*/\n\nconst SingleRender = proto({\n\ttemplate_setter:function(value){\n\t\tthis.type.template=template(value);\n\t},\n\t//convert item to the HTML text\n\t_toHTML:function(obj){\n\t\tvar type = this.type;\n\t\treturn (type.templateStart?type.templateStart(obj,type):\"\") + type.template(obj,type) + (type.templateEnd?type.templateEnd(obj,type):\"\");\n\t},\n\tcustomize:function(obj){\n\t\ttype(this,obj);\n\t}\n}, AtomRender);\n\n\nexport default SingleRender;","import base from \"../views/view\";\nimport SingleRender from \"../core/singlerender\";\nimport Settings from \"../core/settings\";\nimport EventSystem from \"../core/eventsystem\";\nimport {create, createCss, insertBefore} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport {extend} from \"../webix/helpers\";\nimport template from \"../webix/template\";\n\n\n/*\n\tUI: Tooltip\n\t\n\t@export\n\t\tshow\n\t\thide\n*/\n\n// #include core/template.js\n// #include core/single_render.js\n\nconst api = {\n\tname:\"tooltip\",\n\tdefaults:{\n\t\tdy:0,\n\t\tdx:20\n\t},\n\t$init:function(config){\n\t\tif (typeof config == \"string\"){\n\t\t\tconfig = { template:config };\n\t\t}\n\n\t\t//create  container for future tooltip\n\t\tthis.$view = this._viewobj = this._contentobj = this._dataobj = create(\"DIV\", {role:\"alert\", \"aria-atomic\":\"true\"});\n\t\tthis._contentobj.className = \"webix_tooltip\";\n\t\tinsertBefore(this._contentobj,document.body.firstChild,document.body);\n\t},\n\tadjust:function(){  },\n\tisVisible:function(){\n\t\treturn this._visible;\n\t},\n\t_alt_render:function(text){\n\t\tif (this.callEvent(\"onBeforeRender\",[text])){\n\t\t\t//it is critical to have this as two commands\n\t\t\t//its prevent destruction race in Chrome\n\t\t\tthis._dataobj.innerHTML = \"\";\n\t\t\tthis._dataobj.innerHTML = text;\n\t\t\tthis.callEvent(\"onAfterRender\",[]);\n\t\t}\n\t},\n\tcss_setter:function(value){\n\t\tif (typeof value === \"object\")\n\t\t\tvalue = createCss(value);\n\n\t\tthis._viewobj.className = \"webix_tooltip \"+value;\n\t\treturn value;\n\t},\n\t//show tooltip\n\t//pos - object, pos.x - left, pox.y - top\n\tshow:function(data,pos){\n\t\tif (this._disabled) return;\n\n\t\tthis._visible = true;\n\t\tif (typeof data === \"string\")\n\t\t\tthis._alt_render(data);\n\t\telse {\n\t\t\tthis.data = extend({}, data);\n\t\t\tthis.render();\n\t\t}\n\n\t\tif (this._dataobj.firstChild){\n\t\t\t//show at specified position\n\t\t\tvar w = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n\t\t\tvar h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n\t\t\tvar positionX = w - pos.x;\n\t\t\tvar positionY = h - pos.y;\n\n\t\t\tthis._contentobj.style.display = \"block\";\n\t\t\t\n\t\t\tif (positionX - this._settings.dx > this._contentobj.offsetWidth)\n\t\t\t\tpositionX = pos.x;\n\t\t\telse {\n\t\t\t\tpositionX = (pos.x - (this._settings.dx * 2)) - this._contentobj.offsetWidth;\n\t\t\t\tif (positionX < 0) positionX = 0;\n\t\t\t}\n\n\t\t\tif (positionY - this._settings.dy > this._contentobj.offsetHeight)\n\t\t\t\tpositionY = pos.y;\n\t\t\telse {\n\t\t\t\tpositionY = (pos.y - (this._settings.dy * 2)) - this._contentobj.offsetHeight;\n\t\t\t\tif (positionY < 0) positionY = 0;\n\t\t\t}\n\t\t\tthis._contentobj.style.left = positionX+this._settings.dx+\"px\";\n\t\t\tthis._contentobj.style.top = positionY+this._settings.dy+\"px\";\n\t\t} else this.hide();\n\t},\n\t//hide tooltip\n\thide:function(){\n\t\tif (this._visible){\n\t\t\tthis.data = null; //nulify, to be sure that on next show it will be fresh-rendered\n\t\t\tthis._contentobj.style.display = \"none\";\n\t\t\tthis._visible = false;\n\t\t}\n\t},\n\tdisable:function(){\n\t\tthis._disabled = true;\n\t},\n\tenable:function(){\n\t\tthis._disabled = false;\n\t},\n\ttype:{\n\t\ttemplate:template(\"{obj.value}\"),\n\t\ttemplateStart:template.empty,\n\t\ttemplateEnd:template.empty\n\t}\n\n};\n\n\nconst view = protoUI(api,  SingleRender, Settings, EventSystem, base.view);\nexport default {api, view};","import {pos as getPos} from \"../webix/html\";\nimport {delay, extend} from \"../webix/helpers\";\nimport TooltipControl from \"../core/tooltipcontrol\";\n\n//indirect UI import\nimport \"../views/tooltip\";\n\n/*\n\tBehavior: AutoTooltip - links tooltip to data driven item\n*/\n\nconst AutoTooltip = {\n\ttooltip_setter:function(value){\n\t\tif (value){\n\t\t\tif (typeof value === \"function\" || typeof value === \"string\")\n\t\t\t\tvalue = { template:value };\n\t\t\tif (typeof value !== \"object\")\n\t\t\t\tvalue = {};\n\n\t\t\tthis._init_tooltip_once();\n\t\t\treturn value;\n\t\t}\n\t},\n\t_init_tooltip_once:function(){\n\t\tTooltipControl.addTooltip(this);\n\t\tthis.attachEvent(\"onDestruct\",function(){\n\t\t\tTooltipControl.removeTooltip(this);\n\t\t});\n\t\tthis.attachEvent(\"onAfterScroll\", function(){\n\t\t\tif (TooltipControl._tooltip_exist)\n\t\t\t\tTooltipControl._hide_tooltip();\n\t\t});\n\n\t\tthis._init_tooltip_once = function(){};\n\t},\n\t$tooltipIn:function(t){\n\t\tlet tooltip = TooltipControl._tooltip;\n\t\tlet def = extend({dx:20, dy:0, template:\"{obj.value}\", css:\"\"}, this._settings.tooltip, true);\n\n\t\ttooltip.define( def );\n\t\treturn t;\n\t},\n\t$tooltipOut:function(){\n\t\tTooltipControl._hide_tooltip();\n\t\treturn null;\n\t},\n\t$tooltipMove:function(t,e,text){\n\t\tTooltipControl._tooltip.hide();\n\n\t\tclearTimeout(TooltipControl._before_show_delay);\n\t\tTooltipControl._before_show_delay = delay(this._show_tooltip,this,[t,e,text],TooltipControl.delay);\n\t},\n\t_show_tooltip:function(t,e,text){\n\t\tlet data = text || this._get_tooltip_data(t,e);\n\t\tif (!data || !this.isVisible())\n\t\t\treturn;\n\n\t\tTooltipControl._tooltip.show(data,getPos(e));\n\t},\n\t_get_tooltip_data:function(t,e){\n\t\tif (this.locate && this.getItem){\n\t\t\tlet id = this.locate(e);\n\t\t\tif (!id) return null;\n\n\t\t\treturn this.getItem(id);\n\t\t}\n\t\treturn this._settings;\n\t}\n};\n\nexport default AutoTooltip;","import {create, remove} from \"../webix/html\";\nimport {isUndefined, toNode} from \"../webix/helpers\";\nimport {proto} from \"../ui/core\";\n\nconst Canvas = proto({\n\t$init:function(container){\n\t\tthis._canvas_labels = [];\n\t\tthis._canvas_series =  (!isUndefined(container.series)?container.series:container.name);\n\t\tthis._obj = toNode(container.container||container);\n\t\tvar width = container.width*(window.devicePixelRatio||1);\n\t\tvar height = container.height*(window.devicePixelRatio||1);\n\t\tvar style = container.style||\"\";\n\t\tstyle += \";width:\"+container.width+\"px;height:\"+container.height+\"px;\";\n\t\tthis._prepareCanvas(container.name, style ,width, height, container.title);\n\t},\n\t_prepareCanvas:function(name,style,x,y, title){\n\t\t//canvas has the same size as master object\n\t\tthis._canvas = create(\"canvas\",{ title:title, width:x, height:y, canvas_id:name, style:(style||\"\")});\n\t\tthis._obj.appendChild(this._canvas);\n\t\treturn this._canvas;\n\t}, \n\tgetCanvas:function(context){\n\t\tvar ctx = (this._canvas||this._prepareCanvas(this._contentobj)).getContext(context||\"2d\");\n\t\tif(!this._webixDevicePixelRatio){\n\t\t\tthis._webixDevicePixelRatio = true;\n\t\t\tctx.scale(window.devicePixelRatio||1, window.devicePixelRatio||1);\n\t\t}\n\t\treturn ctx;\n\t},\n\t_resizeCanvas:function(x, y){\n\t\tif (this._canvas){\n\t\t\tthis._canvas.setAttribute(\"width\", x*(window.devicePixelRatio||1));\n\t\t\tthis._canvas.setAttribute(\"height\", y*(window.devicePixelRatio||1));\n\t\t\tthis._canvas.style.width = x+\"px\";\n\t\t\tthis._canvas.style.height = y+\"px\";\n\t\t\tthis._webixDevicePixelRatio = false;\n\t\t}\n\t},\n\trenderText:function(x,y,text,css,w){\n\t\tif (!text) return; //ignore empty text\n\t\tif (w) w = Math.max(w,0);\n\t\tif (y) y = Math.max(y,0);\n\t\tvar t = create(\"DIV\",{\n\t\t\t\"class\":\"webix_canvas_text\"+(css?(\" \"+css):\"\"),\n\t\t\t\"style\":\"left:\"+x+\"px; top:\"+y+\"px;\",\n\t\t\t\"aria-hidden\":\"true\"\n\t\t},text);\n\t\tthis._obj.appendChild(t);\n\t\tthis._canvas_labels.push(t); //destructor?\n\t\tif (w)\n\t\t\tt.style.width = w+\"px\";\n\t\treturn t;\n\t},\n\trenderTextAt:function(valign,align, x,y,t,c,w){\n\t\tvar text=this.renderText.call(this,x,y,t,c,w);\n\t\tif (text){\n\t\t\tif (valign){\n\t\t\t\tif(valign == \"middle\")\n\t\t\t\t\ttext.style.top = parseInt(y-text.offsetHeight/2,10) + \"px\";\n\t\t\t\telse\n\t\t\t\t\ttext.style.top = y-text.offsetHeight + \"px\";\n\t\t\t}\n\t\t\tif (align){\n\t\t\t\tif(align == \"left\")\n\t\t\t\t\ttext.style.left = x-text.offsetWidth + \"px\";\n\t\t\t\telse\n\t\t\t\t\ttext.style.left = parseInt(x-text.offsetWidth/2,10) + \"px\";\n\t\t\t}\n\t\t}\n\t\treturn text;\n\t},\n\tclearCanvas:function(skipMap){\n\t\tvar areas=[];\n\n\t\tremove(this._canvas_labels);\n\t\tthis._canvas_labels = [];\n\n\t\tif (!skipMap&&this._obj._htmlmap){\n\n\t\t\t//areas that correspond this canvas layer\n\t\t\tareas = this._getMapAreas();\n\t\t\t//removes areas of this canvas\n\t\t\twhile(areas.length){\n\t\t\t\tareas[0].parentNode.removeChild(areas[0]);\n\t\t\t\tareas.splice(0,1);\n\t\t\t}\n\t\t\tareas = null;\n\n\t\t\t//removes _htmlmap object if all its child nodes are removed\n\t\t\tif(!this._obj._htmlmap.getElementsByTagName(\"AREA\").length){\n\t\t\t\tthis._obj._htmlmap.parentNode.removeChild(this._obj._htmlmap);\n\t\t\t\tthis._obj._htmlmap = null;\n\t\t\t}\n\t\t}\n\t\t//FF breaks, when we are using clear canvas and call clearRect without parameters\n\t\t//width|height are used insead of offsetWidth|offsetHeight for hidden canvas (series)\n\t\tthis.getCanvas().clearRect(0,0,\n\t\t\tthis._canvas.offsetWidth||Math.floor(this._canvas.width/(window.devicePixelRatio||1)), \n\t\t\tthis._canvas.offsetHeight||Math.floor(this._canvas.height/(window.devicePixelRatio||1))\n\t\t);\n\t},\n\ttoggleCanvas:function(){\n\t\tthis._toggleCanvas(this._canvas.style.display==\"none\");\n\t},\n\tshowCanvas:function(){\n\t\tthis._toggleCanvas(true);\n\t},\n\thideCanvas:function(){\n\t\tthis._toggleCanvas(false);\n\t},\n\t_toggleCanvas:function(show){\n\t\tvar areas, i;\n\n\t\tfor(i=0; i < this._canvas_labels.length;i++)\n\t\t\tthis._canvas_labels[i].style.display = (show?\"\":\"none\");\n\n\t\tif (this._obj._htmlmap){\n\t\t\tareas = this._getMapAreas();\n\t\t\tfor( i = 0; i < areas.length; i++){\n\t\t\t\tif(show)\n\t\t\t\t\tareas[i].removeAttribute(\"disabled\");\n\t\t\t\telse\n\t\t\t\t\tareas[i].setAttribute(\"disabled\",\"true\");\n\t\t\t}\n\t\t}\n\t\t//FF breaks, when we are using clear canvas and call clearRect without parameters\n\t\tthis._canvas.style.display = (show?\"\":\"none\");\n\t},\n\t_getMapAreas:function(){\n\t\tvar res = [], areas, i;\n\t\tareas = this._obj._htmlmap.getElementsByTagName(\"AREA\");\n\t\tfor(i = 0; i < areas.length; i++){\n\t\t\tif(areas[i].getAttribute(\"userdata\") == this._canvas_series){\n\t\t\t\tres.push(areas[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn res;\n\t}\n});\n\nexport default Canvas;","import {insertBefore, remove} from \"../webix/html\";\nimport state from \"../core/state\";\nimport env from \"../webix/env\";\nimport {isArray, clone, toNode, delay} from \"../webix/helpers\";\nimport {event, eventRemove} from \"../webix/htmlevents\";\nimport Settings from \"../core/settings\";\n\n\nconst animate = function(html_element, config){\n\tvar animation = config;\n\tif (isArray(html_element)){\n\t\tfor (var i=0; i < html_element.length; i++) {\n\t\t\tif(isArray(config))\n\t\t\t\tanimation = config[i];\n\n\t\t\tif(animation.type == \"slide\"){\n\t\t\t\tif(animation.subtype == \"out\" && i===0) { // next\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif(animation.subtype == \"in\" && i==1) { // current\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(animation.type == \"flip\"){\n\t\t\t\tvar animation_copy = clone(animation);\n\t\t\t\tif(i===0) { // next\n\t\t\t\t\tanimation_copy.type = \"flipback\";\n\t\t\t\t}\n\t\t\t\tif(i==1) { // current\n\t\t\t\t\tanimation_copy.callback = null;\n\t\t\t\t}\n\t\t\t\tanimate(html_element[i], animation_copy);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tanimate(html_element[i], animation);\n\t\t}\n\t\treturn;\n\t}\n\tvar node = toNode(html_element);\n\tif (node._has_animation)\n\t\tanimate.end(node, animation);\n\telse\n\t\tanimate.start(node, animation);\n};\nanimate.end = function(node, animation){\n\t//stop animation\n\tnode.style[env.transitionDuration] = \"1ms\";\n\tnode._has_animation = null;\n\t//clear animation wait order, if any\n\tif (state._wait_animate)\n\t\twindow.clearTimeout(state._wait_animate);\n\n\t//plan next animation, if any\n\tstate._wait_animate = delay(animate, this, [node,animation],10);\n};\nanimate.isSupported=function(){\n\treturn !state.$testmode && env.transform && env.transition && !env.isOpera;\n};\nanimate.formLine=function(next, current, animation){\n\tvar direction = animation.direction;\n\n\t//sometimes user can initiate animation multiple times ( fast clicking )\n\t//as result animation may be called against already removed from the dom node\n\tif(current.parentNode)\n\t\tcurrent.parentNode.style.position = \"relative\";\n\t\n\tcurrent.style.position = \"absolute\";\n\tnext.style.position = \"absolute\";\n\n\t//this is initial shift of second view in animation\n\t//normally we need to have this value as 0\n\t//but FF has bug with animation initially invisible elements\n\t//so we are adjusting this value, to make 1px of second view visible\n\tvar defAniPos = env.isFF ? ( direction == \"top\" || direction == \"left\" ? -1 : 1) : 0;\n\n\tif(direction==\"top\"||direction==\"bottom\"){\n\t\tnext.style.left=\"0px\";\n\t\tnext.style.top = (animation.top || defAniPos) + (direction==\"top\"?1:-1)*current.offsetHeight+\"px\";\n\t}\n\telse{\n\t\tnext.style.top = (animation.top || 0) + \"px\";\n\t\tnext.style.left = defAniPos + (direction==\"left\"?1:-1)*current.offsetWidth+\"px\";\n\t}\n\n\t// apply 'keepViews' mode, iframe, datatable with x scroll solution\n\t//( keepViews won't work in case of \"in\" and \"out\" subtypes )\n\tif(current.parentNode == next.parentNode && animation.keepViews)\n\t\tnext.style.display = \"\";\n\telse\n\t\tinsertBefore(next, current.nextSibling, current.parentNode);\n\n\tif(animation.type == \"slide\" && animation.subtype == \"out\") {\n\t\tnext.style.left = \"0px\";\n\t\tnext.style.top = (animation.top || 0)+\"px\";\n\t\tcurrent.parentNode.removeChild(current);\n\t\tinsertBefore(current, next.nextSibling, next.parentNode);\n\t}\n\treturn [next, current];\n};\nanimate.breakLine=function(line){\n\tif(arguments[1])\n\t\tline[1].style.display = \"none\"; // 'keepViews' multiview mode\n\telse\n\t\tremove(line[1]); // 1 = current\n\tanimate.clear(line[0]);\n\tanimate.clear(line[1]);\n\tline[0].style.position=\"\";\n};\nanimate.clear=function(node){\n\tnode.style[env.transform] = \"none\";\n\tnode.style[env.transition] = \"none\";\n\tnode.style.top = node.style.left = \"\";\n};\nanimate.defaults = {\n\ttype: \"slide\",\n\tdelay: \"0\",\n\tduration: \"500\",\n\ttiming: \"ease-in-out\",\n\tx: 0,\n\ty: 0\n};\nanimate.start = function(node, animation){\n\t//getting config object by merging specified and default options\n\tif (typeof animation == \"string\")\n\t\tanimation = {type: animation};\n\n\tanimation = Settings._mergeSettings(animation,animate.defaults);\n\n\tvar prefix = env.cssPrefix;\n\tvar settings = node._has_animation = animation;\n\tvar skew_options, scale_type;\n\n\t//jshint -W086:true\n\tswitch(settings.type == \"slide\" && settings.direction) { // getting new x, y in case it is slide with direction\n\t\tcase \"right\":\n\t\t\tsettings.x = node.offsetWidth;\n\t\t\tbreak;\n\t\tcase \"left\":\n\t\t\tsettings.x = -node.offsetWidth;\n\t\t\tbreak;\n\t\tcase \"top\":\n\t\t\tsettings.y = -node.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"bottom\":\n\t\tdefault:\n\t\t\tsettings.y = settings.y||node.offsetHeight;\n\t\t\tbreak;\n\t}\n\n\tif(settings.type == \"flip\" || settings.type == \"flipback\") {\n\t\tskew_options = [0, 0];\n\t\tscale_type = \"scaleX\";\n\t\tif(settings.subtype == \"vertical\") {\n\t\t\tskew_options[0] = 20;\n\t\t\tscale_type = \"scaleY\";\n\t\t}\n\t\telse\n\t\t\tskew_options[1] = 20;\n\t\tif(settings.direction == \"right\" || settings.direction == \"bottom\") {\n\t\t\tskew_options[0] *= -1; skew_options[1] *= -1;\n\t\t}\n\t}\n\n\tvar duration = settings.duration + \"ms \" + settings.timing + \" \" + settings.delay+\"ms\";\n\tvar css_general = prefix+\"TransformStyle: preserve-3d;\"; // general css rules\n\tvar css_transition = \"\";\n\tvar css_transform = \"\";\n\n\tswitch(settings.type) {\n\t\tcase \"fade\": // changes opacity to 0\n\t\t\tcss_transition = \"opacity \" + duration;\n\t\t\tcss_general = \"opacity: 0;\";\n\t\t\tbreak;\n\t\tcase \"show\": // changes opacity to 1\n\t\t\tcss_transition = \"opacity \" + duration;\n\t\t\tcss_general = \"opacity: 1;\";\n\t\t\tbreak;\n\t\tcase \"flip\":\n\t\t\tduration = (settings.duration/2) + \"ms \" + settings.timing + \" \" + settings.delay+\"ms\";\n\t\t\tcss_transform = \"skew(\"+skew_options[0]+\"deg, \"+skew_options[1]+\"deg) \"+scale_type+\"(0.00001)\";\n\t\t\tcss_transition = \"all \"+(duration);\n\t\t\tbreak;\n\t\tcase \"flipback\":\n\t\t\tsettings.delay += settings.duration/2;\n\t\t\tduration = (settings.duration/2) + \"ms \" + settings.timing + \" \" + settings.delay+\"ms\";\n\t\t\tnode.style[env.transform] = \"skew(\"+(-1*skew_options[0])+\"deg, \"+(-1*skew_options[1])+\"deg) \"+scale_type+\"(0.00001)\";\n\t\t\tnode.style.left = \"0\";\n\n\t\t\tcss_transform = \"skew(0deg, 0deg) \"+scale_type+\"(1)\";\n\t\t\tcss_transition = \"all \"+(duration);\n\t\t\tbreak;\n\t\tcase \"slide\": // moves object to specified location\n\t\t\tvar x = settings.x +\"px\";\n\t\t\tvar y = settings.y +\"px\";\n\t\t\t// translate(x, y) OR translate3d(x, y, 0)\n\t\t\tcss_transform = env.translate+\"(\"+x+\", \"+y+((env.translate==\"translate3d\")?\", 0\":\"\")+\")\";\n\t\t\tcss_transition = prefix+\"transform \" + duration;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\t//set styles only after applying transition settings\n\tdelay(function(){\n\t\tnode.style[env.transition] = css_transition;\n\t\tdelay(function(){\n\t\t\tif (css_general)\n\t\t\t\tnode.style.cssText += css_general;\n\t\t\tif (css_transform)\n\t\t\t\tnode.style[env.transform] = css_transform;\n\t\t\tvar transitionEnded = false;\n\t\t\tvar tid = event(node, env.transitionEnd, function(ev){\n\t\t\t\tnode._has_animation = null;\n\t\t\t\tif (settings.callback) settings.callback.call((settings.master||window), node,settings,ev);\n\t\t\t\ttransitionEnded = true;\n\t\t\t\teventRemove(tid);\n\t\t\t});\n\t\t\twindow.setTimeout(function(){\n\t\t\t\tif(!transitionEnded){\n\t\t\t\t\tlet master = settings.master||window;\n\t\t\t\t\tnode._has_animation = null;\n\t\t\t\t\tif (!master.$destructed && settings.callback) settings.callback.call(master, node,settings);\n\t\t\t\t\ttransitionEnded = true;\n\t\t\t\t\teventRemove(tid);\n\t\t\t\t}\n\t\t\t}, (settings.duration*1+settings.delay*1)*1.3);\n\t\t});\n\t});\n};\n\nexport default animate;","const skin = {\n\ttopLayout:\"space\",\n\t//bar in accordion\n\tbarHeight:44,\t\t\t//!!!Set the same in skin.less!!!\n\ttabbarHeight: 42,\n\tsidebarTitleHeight: 44,\n\trowHeight:36,\n\ttoolbarHeight:44,\n\tlistItemHeight:36,\t\t//list, grouplist, dataview, etc.\n\tinputHeight: 38,\n\tbuttonHeight: 38,\n\tinputPadding: 3,\n\tmenuHeight: 36,\n\tlabelTopHeight: 22,\n\tpropertyItemHeight: 28,\n\ttimelineItemHeight:70,\n\tunitHeaderHeight:36,\n\n\tinputSpacing: 4,\n\tborderWidth: 1,\n\n\tsliderHandleWidth: 14,\n\tsliderPadding: 10,\n\tsliderBorder: 1,\n\tvSliderPadding:15,\n\tvSliderHeight:100,\n\tswitchHeight:22,\n\tswitchWidth:50,\n\n\t//margin - distance between cells\n\tlayoutMargin:{ space:10, wide:10, clean:0, head:4, line:-1, toolbar:4, form:8, accordion: 2  },\n\t//padding - distance inside cell between cell border and cell content\n\tlayoutPadding:{ space:10, wide:0, clean:0, head:0, line:0, toolbar:2, form:17, accordion: 0  },\n\t//space between tabs in tabbar\n\ttabMargin: 0,\n\ttabOffset: 0,\n\ttabBottomOffset: 0,\n\ttabTopOffset:0,\n\ttabBorder: true,\n\n\tcustomCheckbox: true,\n\tcustomRadio: true,\n\tsidebarMarkAll: true,\n\tpopupNoPoint: true,\n\tborderlessPopup: true,\n\n\tpopupPadding: 0,\n\n\tdataPadding: 12,\n\n\tcalendarWeekHeaderHeight: 18,\n\tpadding:0,\n\taccordionType: \"accordion\",\n\n\toptionHeight: 32,\n\torganogramLineColor: \"#CCD7E6\",\n\ttimelineColor:\"#1CA1C1\"\n};\n\nexport default skin;\n","import {assert} from \"../webix/debug\";\nimport {ui} from \"../ui/core\";\n\nimport material from \"../css/skins/material/config\";\nimport mini from \"../css/skins/mini/config\";\nimport flat from \"../css/skins/flat/config\";\nimport compact from \"../css/skins/compact/config\";\nimport contrast from \"../css/skins/contrast/config\";\n\nexport var $active, $name;\n\nexport function set(name){\n\tassert(skin[name], \"Incorrect skin name: \"+name);\n\tif ($name === name) return;\n\n\tskin.$active = $active = skin[name];\n\tskin.$name = $name = name;\n\n\tif (ui){\n\t\tfor (var key in ui){\n\t\t\tvar view = ui[key];\n\t\t\tif (view && view.prototype && view.prototype.$skin)\n\t\t\t\tview.prototype.$skin(view.prototype);\n\t\t}\n\t}\t\t\n}\n\nconst skin = { set, material, mini, flat, compact, contrast };\n\nset(window.webix_skin || \"material\");\n\n//necessary for skin builder\nexport { skin };","const skin = {\n\ttopLayout:\"space\",\n\t//bar in accordion\n\tbarHeight:36,\t\t\t//!!!Set the same in skin.less!!!\n\ttabbarHeight: 34,\n\tsidebarTitleHeight: 36,\n\trowHeight:28,\n\ttoolbarHeight:36,\n\tlistItemHeight:28,\t//list, grouplist, dataview, etc.\n\tinputHeight: 30,\n\tbuttonHeight: 30,\n\tinputPadding: 3,\n\tmenuHeight: 28,\n\tlabelTopHeight: 16,\n\tpropertyItemHeight: 24,\n\tunitHeaderHeight:28,\n\ttimelineItemHeight:50,\n\n\tinputSpacing: 4,\n\tborderWidth: 1,\n\n\tsliderHandleWidth: 12,\n\tsliderPadding: 10,\n\tsliderBorder: 1,\n\tvSliderPadding:13,\n\tvSliderHeight:100,\n\tswitchHeight:20,\n\tswitchWidth:40,\n\n\t//margin - distance between cells\n\tlayoutMargin:{ space:5, wide:5, clean:0, head:4, line:-1, toolbar:4, form:8, accordion: 2  },\n\t//padding - distance inside cell between cell border and cell content\n\tlayoutPadding:{ space:5, wide:0, clean:0, head:0, line:0, toolbar:2, form:12, accordion: 0  },\n\t//space between tabs in tabbar\n\ttabMargin: 0,\n\ttabOffset: 0,\n\ttabBottomOffset: 0,\n\ttabTopOffset:0,\n\ttabBorder: true,\n\n\tcustomCheckbox: true,\n\tcustomRadio: true,\n\tsidebarMarkAll: true,\n\tpopupNoPoint: true,\n\tborderlessPopup: true,\n\n\tpopupPadding: 0,\n\n\tdataPadding: 12,\n\n\tcalendarWeekHeaderHeight: 18,\n\tpadding:0,\n\taccordionType: \"accordion\",\n\n\toptionHeight: 24,\n\torganogramLineColor: \"#CCD7E6\",\n\ttimelineColor:\"#1CA1C1\"\n};\n\nexport default skin;\n","const skin = {\n\ttopLayout:\"space\",\n\t//bar in accordion\n\tbarHeight:46,\t\t\t//!!!Set the same in skin.less!!!\n\ttabbarHeight: 46,\n\trowHeight:34,\n\ttoolbarHeight:46,\n\tsidebarTitleHeight:45,\n\tlistItemHeight:34,\t\t//list, grouplist, dataview, etc.\n\tinputHeight: 38,\n\tbuttonHeight: 38,\n\tinputPadding: 3,\n\tmenuHeight: 34,\n\tlabelTopHeight: 22,\n\tunitHeaderHeight:20,\n\tpropertyItemHeight: 28,\n\ttimelineItemHeight:70,\n\n\tinputSpacing: 4,\n\tborderWidth: 1,\n\n\tsliderHandleWidth: 14,\n\tsliderPadding: 10,\n\tsliderBorder: 1,\n\tvSliderPadding:15,\n\tvSliderHeight:100,\n\tswitchHeight:22,\n\tswitchWidth:50,\n\n\t//margin - distance between cells\n\tlayoutMargin:{ space:10, wide:10, clean:0, head:4, line:-1, toolbar:4, form:8, accordion: 10  },\n\t//padding - distance insede cell between cell border and cell content\n\tlayoutPadding:{ space:10, wide:0, clean:0, head:0, line:0, toolbar:3, form:17, accordion: 0  },\n\t//space between tabs in tabbar\n\ttabMargin:4,\n\ttabOffset: 0,\n\ttabBottomOffset: 6,\n\ttabTopOffset:1,\n\n\tcustomCheckbox: true,\n\tcustomRadio: true,\n\n\tpopupPadding: 8,\n\n\tdataPadding: 10,\n\n\tcalendarWeekHeaderHeight: 24,\n\tpadding:0,\n\taccordionType: \"accordion\",\n\n\toptionHeight: 32,\n\ttimelineColor:\"#3498db\"\n};\n\nexport default skin;","const skin = {\n\ttopLayout:\"space\",\n\t//bar in accordion\n\tbarHeight:34,\t\t\t//!!!Set the same in skin.less!!!\n\ttabbarHeight: 34,\n\tsidebarTitleHeight: 34,\n\trowHeight:24,\n\ttoolbarHeight:34,\n\tlistItemHeight:28,\t\t//list, grouplist, dataview, etc.\n\tunitHeaderHeight:20,\n\tpropertyItemHeight:24,\n\ttimelineItemHeight:50,\n\tinputHeight: 30,\n\tbuttonHeight: 30,\n\tinputPadding: 3,\n\tmenuHeight: 28,\n\tlabelTopHeight: 16,\n\n\tinputSpacing: 4,\n\tborderWidth: 1,\n\n\tsliderHandleWidth: 12,\n\tsliderPadding: 10,\n\tsliderBorder: 1,\n\tvSliderPadding:13,\n\tvSliderHeight:100,\n\tswitchHeight:20,\n\tswitchWidth:40,\n\n\t//margin - distance between cells\n\tlayoutMargin:{ space:5, wide:5, clean:0, head:4, line:-1, toolbar:4, form:4, accordion: 5  },\n\t//padding - distance inside cell between cell border and cell content\n\tlayoutPadding:{ space:5, wide:0, clean:0, head:0, line:0, toolbar:1, form:12, accordion: 0  },\n\t//space between tabs in tabbar\n\ttabMargin:3,\n\ttabOffset: 0,\n\ttabBottomOffset: 3,\n\ttabTopOffset:1,\n\n\tcustomCheckbox: true,\n\tcustomRadio: true,\n\n\tpopupPadding: 8,\n\n\tdataPadding: 10,\n\n\tcalendarWeekHeaderHeight: 24,\n\tpadding:0,\n\taccordionType: \"accordion\",\n\n\toptionHeight: 23,\n\ttimelineColor:\"#3498db\"\n};\n\nexport default skin;","const skin = {\n\ttopLayout:\"space\",\n\t//bar in accordion\n\tbarHeight:46,\t\t\t// !!!Set the same in skin.less!!!\n\ttabbarHeight: 46,\n\trowHeight:34,\n\ttoolbarHeight:46,\n\tsidebarTitleHeight:45,\n\tlistItemHeight:34,\t\t// list, grouplist, dataview, etc.\n\tunitHeaderHeight:20,\n\tinputHeight: 38,\n\tbuttonHeight: 38,\n\tinputPadding: 3,\n\tmenuHeight: 34,\n\tlabelTopHeight: 22,\n\tpropertyItemHeight: 28,\n\ttimelineItemHeight:70,\n\n\tinputSpacing: 4,\n\tborderWidth: 1,\n\n\tsliderHandleWidth: 14,\n\tsliderPadding: 10,\n\tsliderBorder: 1,\n\tvSliderPadding:15,\n\tvSliderHeight:100,\n\tswitchHeight:22,\n\tswitchWidth:50,\n\n\t//margin - distance between cells\n\tlayoutMargin:{ space:10, wide:10, clean:0, head:4, line:-1, toolbar:8, form:8, accordion: 10  },\n\t//padding - distance inside cell between cell border and cell content\n\tlayoutPadding:{ space:10, wide:0, clean:0, head:0, line:0, toolbar:3, form:17, accordion: 0  },\n\t//space between tabs in tabbar\n\ttabMargin:4,\n\ttabOffset: 0,\n\ttabBottomOffset: 6,\n\ttabTopOffset:1,\n\n\tcustomCheckbox: true,\n\tcustomRadio: true,\n\n\tpopupPadding: 8,\n\tdataPadding: 10,\n\n\tcalendarWeekHeaderHeight: 24,\n\tpadding:0,\n\taccordionType: \"accordion\",\n\n\toptionHeight: 32,\n\ttimelineColor:\"#b300b3\"\n};\n\nexport default skin;","import env from \"../webix/env\";\nimport ready from \"../webix/ready\";\n\nimport {event, eventRemove} from \"../webix/htmlevents\";\nimport {delay} from \"../webix/helpers\";\nimport {callEvent} from \"../webix/customevents\";\nimport {preventEvent, removeCss, create, remove, addCss, addStyle} from \"../webix/html\";\n\n//late binding\nimport {ui, $$} from \"../ui/core\";\n\nconst Touch = {\n\tconfig:{\n\t\tlongTouchDelay:1000,\n\t\tscrollDelay:150,\n\t\tgravity:500,\n\t\tdeltaStep:30,\n\t\tspeed:\"0ms\",\n\t\tfinish:1500,\n\t\tellastic:true,\n\t\tfastClick:true\n\t},\n\tlimit:function(value){\n\t\tTouch._limited = value !== false;\t\n\t},\n\tdisable:function(){\n\t\tTouch._disabled = true;\n\t},\n\tenable:function(){\n\t\tTouch._disabled = false;\n\t},\n\t$init:function(){\n\t\tTouch.$init = function(){};\n\n\t\tevent(document.body, mouse.down,\tTouch._touchstart, {passive:false});\n\t\tevent(document.body, mouse.move, \tTouch._touchmove, {passive:false});\n\t\tevent(document.body, mouse.up, \tTouch._touchend);\n\n\t\tevent(document.body,\"dragstart\",function(e){\n\t\t\tif(Touch._disabled || Touch._limited) return;\n\t\t\treturn preventEvent(e);\n\t\t});\n\t\tevent(document.body,\"touchstart\",function(e){\n\t\t\tif (Touch._disabled || Touch._limited || (!Touch.config.fastClick) ) return;\n\t\t\t//fast click mode for iOS\n\t\t\t//To have working form elements Android must not block event - so there are no fast clicks for Android\n\t\t\t//Selects still don't work with fast clicks\n\t\t\tif (env.isSafari) {\n\t\t\t\tvar tag = e.srcElement.tagName.toLowerCase();\n\t\t\t\tif (tag == \"input\" || tag == \"textarea\" || tag == \"select\" || tag==\"label\")\n\t\t\t\t\treturn true;\n\n\t\t\t\tTouch._fire_fast_event = true;\n\t\t\t\treturn preventEvent(e);\n\t\t\t}\n\t\t}, {passive:false});\n\n\t\tTouch._clear_artefacts();\n\t\tTouch._scroll = [null, null];\n\t\tTouch.$active = true;\n\t},\n\t_clear_artefacts:function(){\n\t\tTouch._start_context = Touch._current_context = Touch._prev_context = Touch._scroll_context = null;\n\t\tTouch._scroll_mode = Touch._scroll_node = Touch._scroll_stat = this._long_touched = null;\n\t\t//remove(Touch._scroll);\n\t\t//Touch._scroll = [null, null];\n\t\tTouch._delta = \t{ _x_moment:0, _y_moment:0, _time:0 };\n\n\t\tif (Touch._css_button_remove){\n\t\t\tremoveCss(Touch._css_button_remove,\"webix_touch\");\n\t\t\tTouch._css_button_remove = null;\n\t\t}\n\t\t\n\t\twindow.clearTimeout(Touch._long_touch_timer);\n\t\tTouch._was_not_moved = true;\n\t\tTouch._axis_x = true;\n\t\tTouch._axis_y = true;\n\t\tif (!Touch._active_transion)\n\t\t\tTouch._scroll_end();\n\t},\n\t_touchend:function(e){\n\t\tif (Touch._start_context) {\n\t\t\tif (!Touch._scroll_mode) {\n\t\t\t\tif (!this._long_touched) {\n\t\t\t\t\tif (Touch._axis_y && !Touch._axis_x) {\n\t\t\t\t\t\tTouch._translate_event(\"onSwipeX\");\n\t\t\t\t\t} else if (Touch._axis_x && !Touch._axis_y) {\n\t\t\t\t\t\tTouch._translate_event(\"onSwipeY\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (env.isSafari && Touch._fire_fast_event) { //need to test for mobile ff and blackbery\n\t\t\t\t\t\t\tTouch._fire_fast_event = false;\n\t\t\t\t\t\t\tvar target = Touch._start_context.target;\n\n\t\t\t\t\t\t\t//dark iOS magic, without delay it can skip repainting\n\t\t\t\t\t\t\tdelay(function () {\n\t\t\t\t\t\t\t\tvar click_event = document.createEvent(\"MouseEvents\");\n\t\t\t\t\t\t\t\tclick_event.initEvent(\"click\", true, true);\n\t\t\t\t\t\t\t\ttarget.dispatchEvent(click_event);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\n\n\t\t\t\tvar temp = Touch._get_matrix(Touch._scroll_node);\n\t\t\t\tvar x = temp.e;\n\t\t\t\tvar y = temp.f;\n\t\t\t\tvar finish = Touch.config.finish;\n\n\t\t\t\tvar delta = Touch._get_delta(e, true);\n\t\t\t\tvar view = $$(Touch._scroll_node);\n\n\t\t\t\tvar gravity = (view && view.$scroll ? view.$scroll.gravity : Touch.config.gravity);\n\t\t\t\tif (delta._time) {\n\t\t\t\t\tvar nx = x + gravity * delta._x_moment / delta._time;\n\t\t\t\t\tvar ny = y + gravity * delta._y_moment / delta._time;\n\n\t\t\t\t\tvar cnx = Touch._scroll[0] ? Touch._correct_minmax(nx, false, false, Touch._scroll_stat.dx, Touch._scroll_stat.px) : x;\n\t\t\t\t\tvar cny = Touch._scroll[1] ? Touch._correct_minmax(ny, false, false, Touch._scroll_stat.dy, Touch._scroll_stat.py) : y;\n\n\n\t\t\t\t\tvar size = Math.max(Math.abs(cnx - x), Math.abs(cny - y));\n\t\t\t\t\tif (size < 150)\n\t\t\t\t\t\tfinish = finish * size / 150;\n\n\t\t\t\t\tif (cnx != x || cny != y)\n\t\t\t\t\t\tfinish = Math.round(finish * Math.max((cnx - x) / (nx - x), (cny - y) / (ny - y)));\n\n\t\t\t\t\tvar result = {e: cnx, f: cny};\n\n\n\t\t\t\t\tview = $$(Touch._scroll_node);\n\t\t\t\t\tif (view && view.adjustScroll)\n\t\t\t\t\t\tview.adjustScroll(result);\n\n\n\t\t\t\t\t//finish = Math.max(100,(Touch._fast_correction?100:finish));\n\t\t\t\t\tfinish = Math.max(100, finish);\n\n\n\t\t\t\t\tif (x != result.e || y != result.f) {\n\t\t\t\t\t\tTouch._set_matrix(Touch._scroll_node, result.e, result.f, finish + \"ms\");\n\t\t\t\t\t\tif (Touch._scroll_master)\n\t\t\t\t\t\t\tTouch._scroll_master._sync_scroll(result.e, result.f, finish + \"ms\");\n\t\t\t\t\t\tTouch._set_scroll(result.e, result.f, finish + \"ms\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tTouch._scroll_end();\n\t\t\t\t\t}\n\t\t\t\t} else\n\t\t\t\t\tTouch._scroll_end();\n\t\t\t}\n\t\t\tTouch._translate_event(\"onTouchEnd\");\n\t\t\tTouch._clear_artefacts();\n\t\t}\n\t},\n\t_touchmove:function(e){\n\t\tif (!Touch._scroll_context || !Touch._start_context) return;\n\n\t\tvar\tdelta = Touch._get_delta(e);\n\t\tTouch._translate_event(\"onTouchMove\");\n\n\t\tif (Touch._scroll_mode){\n\t\t\tTouch._set_scroll_pos(delta);\n\t\t} else {\n\t\t\tTouch._axis_x = Touch._axis_check(delta._x, \"x\", Touch._axis_x);\n\t\t\tTouch._axis_y = Touch._axis_check(delta._y, \"y\", Touch._axis_y);\n\t\t\tif (Touch._scroll_mode){\n\t\t\t\tvar view = Touch._get_event_view(\"onBeforeScroll\", true);\n\t\t\t\tif (view){\n\t\t\t\t\tvar data = {};\n\t\t\t\t\tview.callEvent(\"onBeforeScroll\",[data]);\n\t\t\t\t\tif (data.update){\n\t\t\t\t\t\tTouch.config.speed = data.speed;\n\t\t\t\t\t\tTouch.config.scale = data.scale;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tTouch._init_scroller(delta); //apply scrolling\n\t\t\t}\n\t\t}\n\n\t\treturn preventEvent(e);\n\t},\n\t_set_scroll_pos:function(){\n\t\tif (!Touch._scroll_node) return;\n\t\tvar temp = Touch._get_matrix(Touch._scroll_node);\n\t\tvar prev = Touch._prev_context || Touch._start_context;\n\n\t\tvar view = $$(Touch._scroll_node);\n\t\tvar ellastic = (view&&view.$scroll)?view.$scroll.ellastic: Touch.config.ellastic;\n\t\tif (Touch._scroll[0])\n\t\t\ttemp.e = Touch._correct_minmax( temp.e - prev.x + Touch._current_context.x , ellastic, temp.e, Touch._scroll_stat.dx, Touch._scroll_stat.px);\n\t\tif (Touch._scroll[1])\n\t\t\ttemp.f = Touch._correct_minmax( temp.f - prev.y + Touch._current_context.y , ellastic, temp.f, Touch._scroll_stat.dy, Touch._scroll_stat.py);\n\n\t\tTouch._set_matrix(Touch._scroll_node, temp.e, temp.f, \"0ms\");\n\t\tif (Touch._scroll_master)\n\t\t\tTouch._scroll_master._sync_scroll(temp.e, temp.f, \"0ms\");\n\t\tTouch._set_scroll(temp.e, temp.f, \"0ms\");\n\t},\n\t_set_scroll:function(dx, dy, speed){\n\t\t\n\t\tvar edx = Touch._scroll_stat.px/Touch._scroll_stat.dx * -dx;\n\t\tvar edy = Touch._scroll_stat.py/Touch._scroll_stat.dy * -dy;\n\t\tif (Touch._scroll[0])\n\t\t\tTouch._set_matrix(Touch._scroll[0], edx, 0 ,speed);\n\t\tif (Touch._scroll[1])\n\t\t\tTouch._set_matrix(Touch._scroll[1], 0, edy ,speed);\n\t},\n\tscrollTo:function(node, x, y, speed){\n\t\tTouch._set_matrix(node,x,y,speed);\n\t},\n\t_set_matrix:function(node, xv, yv, speed){\n\t\tif (!speed){\n\t\t\tnode.style[env.transform] = \"\";\n\t\t\treturn;\n\t\t}\n\n\t\tTouch._active_transion = true;\n\t\tif (node){\n\t\t\tvar trans = Touch.config.translate || env.translate;\n\t\t\tnode.style[env.transform] = trans+\"(\"+Math.round(xv)+\"px, \"+Math.round(yv)+\"px\"+((trans==\"translate3d\")?\", 0\":\"\")+\")\";\n\t\t\tnode.style[env.transitionDuration] = speed;\n\t\t}\n\t},\n\t_get_matrix:function(node){\n\t\tvar matrix = window.getComputedStyle(node)[env.transform];\n\t\tvar tmatrix;\n\n\t\tif (matrix == \"none\")\n\t\t\ttmatrix = {e:0, f:0};\n\t\telse {\n\t\t\tif(window.WebKitCSSMatrix)\n\t\t\t\t/* global WebKitCSSMatrix */\n\t\t\t\ttmatrix = new WebKitCSSMatrix(matrix);\n\t\t\telse if (window.MSCSSMatrix)\n\t\t\t\t/* global MSCSSMatrix */\n\t\t\t\ttmatrix = new MSCSSMatrix(matrix);\n\t\t\telse {\n\t\t\t\t// matrix(1, 0, 0, 1, 0, 0) --> 1, 0, 0, 1, 0, 0\n\t\t\t\tvar _tmatrix = matrix.replace(/(matrix\\()(.*)(\\))/gi, \"$2\");\n\t\t\t\t// 1, 0, 0, 1, 0, 0 --> 1,0,0,1,0,0\n\t\t\t\t_tmatrix = _tmatrix.replace(/\\s/gi, \"\");\n\t\t\t\t_tmatrix = _tmatrix.split(\",\");\n\n\t\t\t\ttmatrix = {};\n\t\t\t\tvar tkey = [\"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\n\t\t\t\tfor(var i=0; i<tkey.length; i++){\n\t\t\t\t\ttmatrix[tkey[i]] = parseInt(_tmatrix[i], 10);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Touch._scroll_master)\n\t\t\tTouch._scroll_master._sync_pos(tmatrix);\n\n\t\treturn tmatrix;\n\t},\t\n\t_correct_minmax:function(value, allow, current, dx, px){\n\t\tif (value === current) return value;\n\t\t\n\t\tvar delta = Math.abs(value-current);\n\t\tvar sign = delta/(value-current);\n\t\t//\tTouch._fast_correction = true;\n\t\t\n\t\t\n\t\tif (value>0) return allow?(current + sign*Math.sqrt(delta)):0;\n\t\t\n\t\tvar max = dx - px;\n\t\tif (max + value < 0)\t\n\t\t\treturn allow?(current - Math.sqrt(-(value-current))):-max;\n\t\t\t\n\t\t//\tTouch._fast_correction = false;\n\t\treturn value;\n\t},\t\n\t_init_scroll_node:function(node){\n\t\tif (!node.scroll_enabled){ \n\t\t\tnode.scroll_enabled = true;\t\n\t\t\tnode.parentNode.style.position=\"relative\";\n\t\t\tvar prefix = env.cssPrefix;\n\t\t\tnode.style.cssText += prefix+\"transition: \"+prefix+\"transform; \"+prefix+\"user-select:none; \"+prefix+\"transform-style:flat;\";\n\t\t\tnode.addEventListener(env.transitionEnd,Touch._scroll_end,false);\n\t\t}\n\t},\n\t_init_scroller:function(){\n\t\tif (Touch._scroll_mode.indexOf(\"x\") != -1)\n\t\t\tTouch._scroll[0] = Touch._create_scroll(\"x\", Touch._scroll_stat.dx, Touch._scroll_stat.px, \"width\");\n\t\tif (Touch._scroll_mode.indexOf(\"y\") != -1)\n\t\t\tTouch._scroll[1] = Touch._create_scroll(\"y\", Touch._scroll_stat.dy, Touch._scroll_stat.py, \"height\");\n\t\t\t\n\t\tTouch._init_scroll_node(Touch._scroll_node);\n\t\twindow.setTimeout(Touch._set_scroll_pos,1);\n\t},\n\t_create_scroll:function(mode, dy, py, dim){\n\t\tif (dy - py <2){\n\t\t\tvar matrix = Touch._get_matrix(Touch._scroll_node);\n\t\t\tvar e = (mode==\"y\"?matrix.e:0);\n\t\t\tvar f = (mode==\"y\"?0:matrix.f);\n\t\t\tif (!Touch._scroll_master)\n\t\t\t\tTouch._set_matrix(Touch._scroll_node, e, f, \"0ms\");\n\t\t\tTouch._scroll_mode = Touch._scroll_mode.replace(mode,\"\");\n\t\t\treturn \"\";\n\t\t}\n\n\t\tvar scroll = create(\"DIV\", {\n\t\t\t\"class\":\"webix_scroll_\"+mode\n\t\t},\"\");\n\n\t\tscroll.style[dim] = Math.max((py*py/dy-7),10) +\"px\";\n\t\tif (Touch._scroll_stat.left) \n\t\t\tif (mode === \"x\")\n\t\t\t\tscroll.style.left = Touch._scroll_stat.left+\"px\";\n\t\t\telse\n\t\t\t\tscroll.style.right = (-Touch._scroll_stat.left)+\"px\";\n\t\tif (Touch._scroll_stat.hidden)\n\t\t\tscroll.style.visibility = \"hidden\";\n\n\t\tTouch._scroll_node.parentNode.appendChild(scroll);\n\t\t\n\t\treturn scroll;\n\t},\n\t_axis_check:function(value, mode, old){\n\t\tif (value > Touch.config.deltaStep){\n\t\t\tif (Touch._was_not_moved){\n\t\t\t\tTouch._long_move(mode);\n\t\t\t\tTouch._locate(mode);\n\t\t\t\tif ((Touch._scroll_mode||\"\").indexOf(mode) == -1) Touch._scroll_mode = \"\";\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn old;\n\t},\n\t_scroll_end:function(){\n\t\t//sending event to the owner of the scroll only\n\t\tvar result,state,view;\n\t\tview = $$(Touch._scroll_node||this);\n\t\tif (view){\n\t\t\tif (Touch._scroll_node)\n\t\t\t\tresult = Touch._get_matrix(Touch._scroll_node);\n\t\t\telse if(view.getScrollState){\n\t\t\t\tstate = view.getScrollState();\n\t\t\t\tresult = {e:state.x, f:state.y};\n\t\t\t}\n\t\t\tcallEvent(\"onAfterScroll\", [result]);\n\t\t\tif (view.callEvent)\n\t\t\t\tview.callEvent(\"onAfterScroll\",[result]);\n\t\t}\n\t\tif (!Touch._scroll_mode){\n\t\t\tremove(Touch._scroll);\n\t\t\tTouch._scroll = [null, null];\n\t\t}\n\t\tTouch._active_transion = false;\n\t},\n\t_long_move:function(){\n\t\twindow.clearTimeout(Touch._long_touch_timer);\n\t\tTouch._was_not_moved = false;\t\n\t},\t\n\t_stop_old_scroll:function(e){\n\t\tif (Touch._scroll[0] || Touch._scroll[1]){\n\t\t\tTouch._stop_scroll(e, Touch._scroll[0]?\"x\":\"y\");\n\t\t}else\n\t\t\treturn true;\n\t},\n\t_touchstart :function(e){\n\t\tvar target = e.target || window.event.srcElement;\n\n\t\tif (Touch._disabled || (target.tagName&&target.tagName.toLowerCase() == \"textarea\" && target.offsetHeight<target.scrollHeight)) return;\n\t\tTouch._long_touched = null;\n\t\tTouch._scroll_context = Touch._start_context = mouse.context(e);\n\n\t\t// in \"limited\" mode we should have possibility to use slider\n\t\tvar element = $$(e);\n\n\t\tif (Touch._limited && !Touch._is_scroll() && !(element && element.$touchCapture)){\n\t\t\tTouch._scroll_context = null;\n\t\t}\n\n\n\n\t\tTouch._translate_event(\"onTouchStart\");\n\n\t\tif (Touch._stop_old_scroll(e))\n\t\t\tTouch._long_touch_timer = window.setTimeout(Touch._long_touch, Touch.config.longTouchDelay);\n\t\t\n\t\tif (element && element.touchable && (!target.className || target.className.indexOf(\"webix_view\")!==0)){\n\t\t\tTouch._css_button_remove = element.getNode(e);\n\t\t\taddCss(Touch._css_button_remove,\"webix_touch\");\n\t\t}\t\n\t\t\t\n\t},\n\t_long_touch:function(){\n\t\tif(Touch._start_context){\n\t\t\tTouch._translate_event(\"onLongTouch\");\n\t\t\tcallEvent(\"onClick\", [Touch._start_context]);\n\t\t\tTouch._long_touched = true;\n\t\t\t//Touch._clear_artefacts();\n\t\t}\n\t},\n\t_stop_scroll:function(e, stop_mode){ \n\t\tTouch._locate(stop_mode);\n\t\tvar scroll = Touch._scroll[0]||Touch._scroll[1];\n\t\tif (scroll){\n\t\t\tvar view = Touch._get_event_view(\"onBeforeScroll\", true);\n\t\t\tif (view)\n\t\t\t\tview.callEvent(\"onBeforeScroll\", [Touch._start_context,Touch._current_context]);\n\t\t}\n\t\tif (scroll && (!Touch._scroll_node || scroll.parentNode != Touch._scroll_node.parentNode)){\n\t\t\tTouch._clear_artefacts();\n\t\t\tTouch._scroll_end();\n\t\t\tTouch._start_context = mouse.context(e);\n\t\t}\n\t\tTouch._touchmove(e);\n\t},\t\n\t_get_delta:function(e){\n\t\tTouch._prev_context = Touch._current_context;\n\t\tTouch._current_context = mouse.context(e);\n\t\t\t\n\t\tTouch._delta._x = Math.abs(Touch._start_context.x - Touch._current_context.x);\n\t\tTouch._delta._y = Math.abs(Touch._start_context.y - Touch._current_context.y);\n\t\t\n\t\tif (Touch._prev_context){\n\t\t\tif (Touch._current_context.time - Touch._prev_context.time < Touch.config.scrollDelay){\n\t\t\t\tTouch._delta._x_moment = Touch._delta._x_moment/1.3+Touch._current_context.x - Touch._prev_context.x;\n\t\t\t\tTouch._delta._y_moment = Touch._delta._y_moment/1.3+Touch._current_context.y - Touch._prev_context.y;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tTouch._delta._y_moment = Touch._delta._x_moment = 0;\n\t\t\t}\n\t\t\tTouch._delta._time = Touch._delta._time/1.3+(Touch._current_context.time - Touch._prev_context.time);\n\t\t}\n\t\t\n\t\treturn Touch._delta;\n\t},\n\t_get_sizes:function(node){\n\t\tTouch._scroll_stat = {\n\t\t\tdx:node.offsetWidth,\n\t\t\tdy:node.offsetHeight,\n\t\t\tpx:node.parentNode.offsetWidth,\n\t\t\tpy:node.parentNode.offsetHeight\n\t\t};\n\t},\n\t_is_scroll:function(locate_mode){\n\t\tvar node = Touch._start_context.target;\n\t\tif (!env.touch && !env.transition && !env.transform) return null;\n\t\twhile(node && node.tagName!=\"BODY\"){\n\t\t\tif(node.getAttribute){\n\t\t\t\tvar mode = node.getAttribute(\"touch_scroll\");\n\t\t\t\tif (mode && (!locate_mode || mode.indexOf(locate_mode)!=-1))\n\t\t\t\t\treturn [node, mode];\n\t\t\t}\n\t\t\tnode = node.parentNode;\n\t\t}\n\t\treturn null;\n\t},\n\t_locate:function(locate_mode){\n\t\tvar state = this._is_scroll(locate_mode);\n\t\tif (state){\n\t\t\tTouch._scroll_mode = state[1];\n\t\t\tTouch._scroll_node = state[0];\n\t\t\tTouch._get_sizes(state[0]);\n\t\t}\n\t\treturn state;\n\t},\n\t_translate_event:function(name){\n\t\tcallEvent(name, [Touch._start_context,Touch._current_context]);\n\t\tvar view = Touch._get_event_view(name);\n\t\tif (view)\n\t\t\tview.callEvent(name, [Touch._start_context,Touch._current_context]);\n\t},\n\t_get_event_view:function(name, active){\n\t\tvar view = $$(active ? Touch._scroll_node : Touch._start_context);\n\t\tif(!view) return null;\n\t\t\n\t\twhile (view){\n\t\t\tif (view.hasEvent&&view.hasEvent(name))\t\n\t\t\t\treturn view;\n\t\t\tview = view.getParentView();\n\t\t}\n\t\t\n\t\treturn null;\n\t},\t\n\t_get_context:function(e){\n\t\tif (!e.touches[0]) {\n\t\t\tvar temp = Touch._current_context;\n\t\t\ttemp.time = new Date();\n\t\t\treturn temp;\n\t\t}\n\t\t\t\n\t\treturn {\n\t\t\ttarget:e.target,\n\t\t\tx:e.touches[0].pageX,\n\t\t\ty:e.touches[0].pageY,\n\t\t\ttime:new Date()\n\t\t};\n\t},\n\t_get_context_m:function(e){\n\t\treturn {\n\t\t\ttarget:e.target || e.srcElement,\n\t\t\tx:e.pageX,\n\t\t\ty:e.pageY,\n\t\t\ttime:new Date()\n\t\t};\n\t}\n};\n\nfunction touchInit(){\n\tif (env.touch){\n\t\tTouch.$init();\n\t\t//not full screen mode\n\t\tif (document.body.className.indexOf(\"webix_full_screen\") == -1)\n\t\t\tTouch.limit(true);\n\n\t\tif (window.MSCSSMatrix)\n\t\t\taddStyle(\".webix_view{ -ms-touch-action: none; }\");\n\t} else {\n\t\tvar id = event(document.body, \"touchstart\", function(ev){\n\t\t\tif (ev.touches.length && ev.touches[0].radiusX > 4){\n\t\t\t\tenv.touch = true;\n\t\t\t\tsetMouse(mouse);\n\t\t\t\ttouchInit();\n\t\t\t\tfor (var key in ui.views){\n\t\t\t\t\tvar view = ui.views[key];\n\t\t\t\t\tif (view && view.$touch)\n\t\t\t\t\t\tview.$touch();\n\t\t\t\t}\n\t\t\t}\n\t\t\teventRemove(id);\n\t\t}, { capture: true });\n\t}\n}\n\nfunction setMouse(mouse){\n\tmouse.down = \"touchstart\";\n\tmouse.move = \"touchmove\";\n\tmouse.up   = \"touchend\";\n\tmouse.context = Touch._get_context;\n}\n\nready(touchInit);\n\n\nvar mouse = env.mouse = { down:\"mousedown\", up:\"mouseup\", \n\tmove:\"mousemove\", context:Touch._get_context_m };\n\nif (window.navigator.pointerEnabled){\n\tmouse.down = \"pointerdown\";\n\tmouse.move = \"pointermove\";\n\tmouse.up   = \"pointerup\";\n} else if (window.navigator.msPointerEnabled){\n\tmouse.down = \"MSPointerDown\";\n\tmouse.move = \"MSPointerMove\";\n\tmouse.up   = \"MSPointerUp\";\n} else if (env.touch)\n\tsetMouse(mouse);\n\t\n\nexport default Touch;","import {preventEvent, addCss, removeCss, pos as getPos, remove} from \"../webix/html\";\nimport env from \"../webix/env\";\nimport Touch from \"../core/touch\";\nimport {zIndex} from \"../ui/helpers\";\nimport {_to_array, toNode} from \"../webix/helpers\";\nimport {_event, event, eventRemove} from \"../webix/htmlevents\";\nimport {attachEvent, callEvent} from \"../webix/customevents\";\n\n\n/*\n\tBehavior:DND - low-level dnd handling\n\t@export\n\t\tgetContext\n\t\taddDrop\n\t\taddDrag\n\t\t\n\tDND master can define next handlers\n\t\tonCreateDrag\n\t\tonDragIng\n\t\tonDragOut\n\t\tonDrag\n\t\tonDrop\n\tall are optional\n*/\n\nconst DragControl ={\n\t//has of known dnd masters\n\t_drag_masters : _to_array([\"dummy\"]),\n\t/*\n\t\tregister drop area\n\t\t@param node \t\t\thtml node or ID\n\t\t@param ctrl \t\t\toptions dnd master\n\t\t@param master_mode \t\ttrue if you have complex drag-area rules\n\t*/\n\taddDrop:function(node,ctrl,master_mode){\n\t\tnode = toNode(node);\n\t\tnode.webix_drop=this._getCtrl(ctrl);\n\t\tif (master_mode) node.webix_master=true;\n\t},\n\t//return index of master in collection\n\t//it done in such way to prevent dnd master duplication\n\t//probably useless, used only by addDrop and addDrag methods\n\t_getCtrl:function(ctrl){\n\t\tctrl = ctrl||DragControl;\n\t\tvar index = this._drag_masters.find(ctrl);\n\t\tif (index<0){\n\t\t\tindex = this._drag_masters.length;\n\t\t\tthis._drag_masters.push(ctrl);\n\t\t\tif (ctrl.attachEvent)\n\t\t\t\tctrl.attachEvent(\"onDestruct\", () => DragControl.unlink(ctrl));\n\t\t}\n\t\treturn index;\n\t},\n\tunlink(ctrl){\n\t\tvar index = this._drag_masters.find(ctrl);\n\t\tif (index > -1)\n\t\t\tthis._drag_masters[index] = null;\n\t},\n\t_createTouchDrag: function(e){\n\t\tvar dragCtrl = DragControl;\n\t\tvar master = this._getActiveDragMaster();\n\t\t// for data items only\n\t\tif(master && master._getDragItemPos){\n\n\t\t\tif(!dragCtrl._html)\n\t\t\t\tdragCtrl.createDrag(e);\n\t\t\tvar ctx = dragCtrl._drag_context;\n\t\t\tdragCtrl._html.style.left= e.x+dragCtrl.left+ (ctx.x_offset||0)+\"px\";\n\t\t\tdragCtrl._html.style.top= e.y+dragCtrl.top+ (ctx.y_offset||0) +\"px\";\n\t\t}\n\t},\n\t/*\n\t\tregister drag area\n\t\t@param node \thtml node or ID\n\t\t@param ctrl \toptions dnd master\n\t*/\n\taddDrag:function(node,ctrl){\n\t\tnode = toNode(node);\n\t\tnode.webix_drag=this._getCtrl(ctrl);\n\t\t_event(node,env.mouse.down,this._preStart,{ bind:node });\n\t\t_event(node,\"dragstart\",preventEvent);\n\t},\n\t//logic of drag - start, we are not creating drag immediately, instead of that we hears mouse moving\n\t_preStart:function(e){\n\t\tif (DragControl._active){\n\t\t\t//if we have nested drag areas, use the top one and ignore the inner one\n\t\t\tif (DragControl._saved_event == e) return;\n\t\t\tDragControl._preStartFalse();\n\t\t\tDragControl.destroyDrag(e);\n\t\t}\n\t\tDragControl._active=this;\n\n\t\tvar evobj = env.mouse.context(e);\n\t\tDragControl._start_pos=evobj;\n\t\tDragControl._saved_event = e;\n\n\t\tDragControl._webix_drag_mm = event(document.body,env.mouse.move,DragControl._startDrag);\n\t\tDragControl._webix_drag_mu = event(document,env.mouse.up,DragControl._preStartFalse);\n\n\t\t//need to run here, or will not work in IE\n\t\taddCss(document.body,\"webix_noselect\", 1);\n\t},\n\t//if mouse was released before moving - this is not a dnd, remove event handlers\n\t_preStartFalse:function(){\n\t\tDragControl._clean_dom_after_drag();\n\t},\n\t//mouse was moved without button released - dnd started, update event handlers\n\t_startDrag:function(e){\n\t\t//prevent unwanted dnd\n\t\tvar pos = env.mouse.context(e);\n\t\tvar master = DragControl._getActiveDragMaster();\n\t\t// only long-touched elements can be dragged\n\n\t\tvar longTouchLimit = (master && env.touch && master._getDragItemPos && !Touch._long_touched);\n\t\tif (longTouchLimit || Math.abs(pos.x-DragControl._start_pos.x)<5 && Math.abs(pos.y-DragControl._start_pos.y)<5)\n\t\t\treturn;\n\n\t\tDragControl._clean_dom_after_drag(true);\n\t\tif(!DragControl._html)\n\t\t\tif (!DragControl.createDrag(DragControl._saved_event)) return;\n\n\t\tDragControl.sendSignal(\"start\"); //useless for now\n\t\tDragControl._webix_drag_mm = event(document.body,env.mouse.move,DragControl._moveDrag);\n\t\tDragControl._webix_drag_mu = event(document,env.mouse.up,DragControl._stopDrag);\n\t\tDragControl._moveDrag(e);\n\n\t\tif (env.touch)\n\t\t\treturn preventEvent(e);\n\t},\n\t//mouse was released while dnd is active - process target\n\t_stopDrag:function(e){\n\t\tDragControl._clean_dom_after_drag();\n\t\tDragControl._saved_event = null;\n\n\t\tif (DragControl._last){\t//if some drop target was confirmed\n\t\t\tDragControl.$drop(DragControl._active, DragControl._last, e);\n\t\t\tDragControl.$dragOut(DragControl._active,DragControl._last,null,e);\n\t\t}\n\t\tDragControl.destroyDrag(e);\n\t\tDragControl.sendSignal(\"stop\");\t//useless for now\n\t},\n\t_clean_dom_after_drag:function(still_drag){\n\t\tthis._webix_drag_mm = eventRemove(this._webix_drag_mm);\n\t\tthis._webix_drag_mu = eventRemove(this._webix_drag_mu);\n\t\tif (!still_drag)\n\t\t\tremoveCss(document.body,\"webix_noselect\");\n\t},\n\t//dnd is active and mouse position was changed\n\t_moveDrag:function(e){\n\t\tvar dragCtrl = DragControl;\n\t\tvar pos = getPos(e);\n\n\t\t//give possibility to customize drag position\n\t\tvar customPos = dragCtrl.$dragPos(pos, e);\n\t\t//adjust drag marker position\n\t\tvar ctx = dragCtrl._drag_context;\n\t\tdragCtrl._html.style.top=pos.y+dragCtrl.top+(customPos||!ctx.y_offset?0:ctx.y_offset) +\"px\";\n\t\tdragCtrl._html.style.left=pos.x+dragCtrl.left+(customPos||!ctx.x_offset?0:ctx.x_offset)+\"px\";\n\n\t\tvar evobj = e;\n\t\tif (dragCtrl._skip)\n\t\t\tdragCtrl._skip=false;\n\t\telse {\n\t\t\tif (env.touch){\n\t\t\t\tvar context = env.mouse.context(e);\n\t\t\t\tvar target = document.elementFromPoint(context.x, context.y);\n\t\t\t\tevobj = new Proxy(e, {\n\t\t\t\t\tget: function(obj, prop){\n\t\t\t\t\t\tif (prop === \"target\"){\n\t\t\t\t\t\t\treturn target;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar res = obj[prop];\n\t\t\t\t\t\tif (typeof res === \"function\"){\n\t\t\t\t\t\t\treturn res.bind(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn res;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tdragCtrl._checkLand((evobj.target || evobj.srcElement), evobj);\n\t\t}\n\t\t\n\t\treturn preventEvent(e);\n\t},\n\t//check if item under mouse can be used as drop landing\n\t_checkLand:function(node,e){\n\t\twhile (node && node.tagName!=\"BODY\"){\n\t\t\tif (node.webix_drop){\t//if drop area registered\n\t\t\t\tif (this._last && (this._last!=node || node.webix_master))\t//if this area with complex dnd master\n\t\t\t\t\tthis.$dragOut(this._active,this._last,node,e);\t\t\t//inform master about possible mouse-out\n\t\t\t\tif (!this._last || this._last!=node || node.webix_master){\t//if this is new are or area with complex dnd master\n\t\t\t\t\tthis._last=null;\t\t\t\t\t\t\t\t\t\t//inform master about possible mouse-in\n\t\t\t\t\tthis._landing=this.$dragIn(DragControl._active,node,e);\n\t\t\t\t\tif (this._landing)\t//landing was rejected\n\t\t\t\t\t\tthis._last=node;\n\t\t\t\t\treturn;\t\t\t\t\n\t\t\t\t} \n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnode=node.parentNode;\n\t\t}\n\t\tif (this._last)\t//mouse was moved out of previous landing, and without finding new one \n\t\t\tthis._last = this._landing = this.$dragOut(this._active,this._last,null,e);\n\t},\n\t//mostly useless for now, can be used to add cross-frame dnd\n\tsendSignal:function(signal){\n\t\tDragControl.active=(signal==\"start\");\n\t\tcallEvent(\"onDragMode\", [signal]);\n\t},\n\t\n\t//return master for html area\n\tgetMaster:function(t){\n\t\treturn this._drag_masters[t.webix_drag||t.webix_drop];\n\t},\n\t//return dhd-context object\n\tgetContext:function(){\n\t\treturn this._drag_context;\n\t},\n\tgetNode:function(){\n\t\treturn this._html;\n\t},\n\t//called when dnd is initiated, must create drag representation\n\tcreateDrag:function(e){ \n\t\tvar dragCtl = DragControl;\n\t\tvar a=dragCtl._active;\n\n\t\tdragCtl._drag_context = {};\n\t\tvar master = this._drag_masters[a.webix_drag];\n\t\tvar drag_container;\n\n\t\t//if custom method is defined - use it\n\t\tif (master.$dragCreate){\n\t\t\tdrag_container=master.$dragCreate(a,e);\n\t\t\tif (!drag_container) return false;\n\t\t\tthis._setDragOffset(e);\n\t\t\tdrag_container.style.position = \"absolute\";\n\t\t} else {\n\t\t//overvise use default one\n\t\t\tvar text = dragCtl.$drag(a,e);\n\t\t\tdragCtl._setDragOffset(e);\n\n\t\t\tif (!text) return false;\n\t\t\tdrag_container = document.createElement(\"DIV\");\n\t\t\tdrag_container.innerHTML=text;\n\t\t\tdrag_container.className=\"webix_drag_zone\";\n\t\t\tdocument.body.appendChild(drag_container);\n\n\t\t\tvar context = dragCtl._drag_context;\n\t\t\tif (context.html && env.pointerevents){\n\t\t\t\tcontext.x_offset = -Math.round(drag_container.offsetWidth  * 0.5);\n\t\t\t\tcontext.y_offset = -Math.round(drag_container.offsetHeight * 0.75);\n\t\t\t}\n\t\t}\n\t\t/*\n\t\t\tdragged item must have topmost z-index\n\t\t\tin some cases item already have z-index\n\t\t\tso we will preserve it if possible\n\t\t*/\n\t\tdrag_container.style.zIndex = Math.max(drag_container.style.zIndex,zIndex());\n\n\t\tDragControl._skipDropH = event(drag_container,env.mouse.move,DragControl._skip_mark);\n\n\t\tif (!DragControl._drag_context.from)\n\t\t\tDragControl._drag_context = {source:a, from:a};\n\t\t\n\t\tDragControl._html=drag_container;\n\t\treturn true;\n\t},\n\t//helper, prevents unwanted mouse-out events\n\t_skip_mark:function(){\n\t\tDragControl._skip=true;\n\t},\n\t//after dnd end, remove all traces and used html elements\n\tdestroyDrag:function(e){\n\t\tvar a=DragControl._active;\n\t\tvar master = this._drag_masters[a.webix_drag];\n\n\t\tif (master && master.$dragDestroy){\n\t\t\tDragControl._skipDropH = eventRemove(DragControl._skipDropH);\n\t\t\tif(DragControl._html)\n\t\t\t\tmaster.$dragDestroy(a,DragControl._html,e);\n\t\t} else\n\t\t\tremove(DragControl._html);\n\n\t\tif (master && master._auto_scroll_delay)\n\t\t\tmaster._auto_scroll_delay = window.clearTimeout(master._auto_scroll_delay);\n\n\t\tif (DragControl._dropHTML)\n\t\t\tremove(DragControl._dropHTML);\n\n\t\tDragControl._landing=DragControl._active=DragControl._last=DragControl._html=DragControl._dropHTML=null;\n\t\tDragControl._drag_context = null;\n\t},\n\t_getActiveDragMaster: function(){\n\t\treturn DragControl._drag_masters[DragControl._active.webix_drag];\n\t},\n\ttop:0,\t //relative position of drag marker to mouse cursor\n\tleft:0,\n\t_setDragOffset:function(e){\n\t\tvar dragCtl = DragControl;\n\t\tvar pos = dragCtl._start_pos;\n\t\tvar ctx = dragCtl._drag_context;\n\n\t\tif(typeof ctx.x_offset != \"undefined\" && typeof ctx.y_offset != \"undefined\")\n\t\t\treturn null;\n\n\t\tctx.x_offset = ctx.y_offset = 0;\n\t\tif(env.pointerevents){\n\t\t\tvar m=DragControl._getActiveDragMaster();\n\n\t\t\tif (m._getDragItemPos && m!==this){\n\t\t\t\tvar itemPos = m._getDragItemPos(pos,e);\n\n\t\t\t\tif(itemPos){\n\t\t\t\t\tctx.x_offset = itemPos.x - pos.x;\n\t\t\t\t\tctx.y_offset = itemPos.y - pos.y;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\t},\n\t$dragPos:function(pos, e){\n\t\tvar m=this._drag_masters[DragControl._active.webix_drag];\n\t\tif (m.$dragPos && m!=this){\n\t\t\tm.$dragPos(pos, e, DragControl._html);\n\t\t\treturn true;\n\t\t}\n\t},\n\t//called when mouse was moved in drop area\n\t$dragIn:function(s,t,e){\n\t\tvar m=this._drag_masters[t.webix_drop];\n\t\tif (m.$dragIn && m!=this) return m.$dragIn(s,t,e);\n\t\tt.className=t.className+\" webix_drop_zone\";\n\t\treturn t;\n\t},\n\t//called when mouse was moved out drop area\n\t$dragOut:function(s,t,n,e){\n\t\tvar m=this._drag_masters[t.webix_drop];\n\t\tif (m.$dragOut && m!=this) return m.$dragOut(s,t,n,e);\n\t\tt.className=t.className.replace(\"webix_drop_zone\",\"\");\n\t\treturn null;\n\t},\n\t//called when mouse was released over drop area\n\t$drop:function(s,t,e){\n\t\tvar m=this._drag_masters[t.webix_drop];\n\t\tDragControl._drag_context.from = DragControl.getMaster(s);\n\t\tif (m.$drop && m!=this) return m.$drop(s,t,e);\n\t\tt.appendChild(s);\n\t},\n\t//called when dnd just started\n\t$drag:function(s,e){\n\t\tvar m=this._drag_masters[s.webix_drag];\n\t\tif (m.$drag && m!=this) return m.$drag(s,e);\n\t\treturn \"<div style='\"+s.style.cssText+\"'>\"+s.innerHTML+\"</div>\";\n\t}\t\n};\n\n//global touch-drag handler\nattachEvent(\"onLongTouch\", function(ev){\n\tif(DragControl._active)\n\t\tDragControl._createTouchDrag(ev);\n});\n\n\nexport default DragControl;","import {offset, pos as getPos} from \"../webix/html\";\nimport {toNode} from \"../webix/helpers\";\nimport DragControl from \"../core/dragcontrol\";\n\nconst Movable = {\n\tmove_setter: function (value) {\n\t\tif (value){\n\t\t\tDragControl.addDrag(this._headobj?this._headobj:this.$view, this);\n\t\t}\n\t\treturn value;\n\t},\n\t$dragCreate:function(object, e){\n\t\tif(this.config.move){\n\t\t\tvar elOffset = offset(object);\n\t\t\tvar elPos = getPos(e);\n\t\t\tDragControl.top = elOffset.y - elPos.y;\n\t\t\tDragControl.left = elOffset.x - elPos.x;\n\n\t\t\treturn toNode(this._viewobj);\n\t\t}\n\t},\n\t$dragDestroy:function(node, drag){\n\t\tvar view = this;\n\t\tif (view._settings){\n\t\t\tview._settings.top = parseInt(drag.style.top,10);\n\t\t\tview._settings.left = parseInt(drag.style.left,10);\n\t\t}\n\n\t\tDragControl.top = DragControl.left = 0;\n\t\tthis.callEvent(\"onViewMoveEnd\", []);\n\t\treturn;\n\t},\n\t$dragPos:function(pos, e){\n\t\tthis.callEvent(\"onViewMove\", [pos, e]);\n\t}\n};\n\nexport default Movable;","import {create, remove} from \"../webix/html\";\nimport {zIndex} from \"../ui/helpers\";\nimport {bind} from \"../webix/helpers\";\nimport {_event} from \"../webix/htmlevents\";\n\nimport state from \"./state\";\n\nconst Modality = {\n\t_modal_set:function(value){\n\t\tif (value){\n\t\t\tif (!this._modal_cover){\n\t\t\t\tthis._modal_cover = create(\"div\",{\n\t\t\t\t\t\"class\":\"webix_modal\"\n\t\t\t\t});\n\t\t\t\t/*\twith below code we will have the same zIndex for modal layer as for the previous \n\t\t\t\t\tabs positioned element, but because of attaching order modal layer will be on top anyway\n\t\t\t\t*/\n\t\t\t\tvar index = this._settings.zIndex||zIndex();\n\n\t\t\t\t//set topmost modal layer\n\t\t\t\tthis._previous_modality = state._modality;\n\t\t\t\tstate._modality = index;\n\n\n\t\t\t\tthis._modal_cover.style.zIndex = index-1;\n\t\t\t\tthis._viewobj.style.zIndex = index;\n\t\t\t\tdocument.body.appendChild(this._modal_cover);\n\t\t\t\tdocument.body.style.overflow = \"hidden\";\n\t\t\t\t_event( this._modal_cover, \"click\", bind(this._ignore_clicks, this));\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (this._modal_cover){\n\t\t\t\tremove(this._modal_cover);\n\t\t\t\tdocument.body.style.overflow = \"\";\n\n\t\t\t\t//restore topmost modal layer\n\t\t\t\t//set delay, as current window closing may have not finished click event\n\t\t\t\t//need to wait while it is not fully processed\n\t\t\t\tvar topmost = this._previous_modality;\n\t\t\t\tsetTimeout(function(){ state._modality = topmost; }, 1);\n\n\t\t\t\tthis._modal_cover = null;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}\n};\n\n\nexport default Modality;","import {create, offset, addCss, pos as getPos, remove, removeCss} from \"../webix/html\";\nimport env from \"../webix/env\";\nimport {zIndex} from \"../ui/helpers\";\nimport {_event, event, eventRemove} from \"../webix/htmlevents\";\n\n\nconst ResizeArea = {\n\tresize_setter:function(value){\n\t\tif (value && !this._resizeHandlers)\n\t\t\tthis._renderResizeHandler();\n\n\t\treturn value;\n\t},\n\t_renderResizeHandler: function(){\n\t\tif(!this._rwHandle){\n\t\t\tvar rp = this._viewobj;\n\t\t\tif (rp.firstChild){\n\t\t\t\trp = rp.firstChild;\n\t\t\t\trp.style.position = \"relative\";\n\t\t\t}\n\n\t\t\tthis._rwHandle = create(\"DIV\",{\n\t\t\t\t\"class\"\t: \"webix_resize_handle\",\n\t\t\t\t/*@attr*/\"webix_disable_drag\" : \"true\"\n\t\t\t});\n\t\t\trp.appendChild(this._rwHandle);\n\t\t\t_event(this._rwHandle, env.mouse.down, this._wrDown, {bind:this});\n\t\t}\n\t},\n\t_showResizeFrame: function(width,height){\n\t\tif(!this._resizeFrame){\n\t\t\tthis._resizeFrame = create(\"div\", {\"class\":\"webix_resize_frame\"},\"\");\n\t\t\tdocument.body.appendChild(this._resizeFrame);\n\t\t\tvar elPos = offset(this._viewobj);\n\t\t\tthis._resizeFrame.style.left = elPos.x+\"px\";\n\t\t\tthis._resizeFrame.style.top = elPos.y+\"px\";\n\t\t\tthis._resizeFrame.style.zIndex = zIndex();\n\t\t}\n\n\t\tthis._resizeFrame.style.width = width + \"px\";\n\t\tthis._resizeFrame.style.height = height + \"px\";\n\t},\n\t_wrDown:function(){\n\t\tif (this.config.resize){\n\t\t\taddCss(document.body,\"webix_noselect webix_resize_cursor\");\n\t\t\tthis._wsReady = offset(this._viewobj);\n\n\t\t\tthis._resizeHandlersMove = event(document.body, env.mouse.move, this._wrMove, {bind:this});\n\t\t\tthis._resizeHandlersUp   = event(document.body, env.mouse.up, this._wrUp, {bind:this});\n\t\t}\n\t},\n\t_wrMove:function(e){\n\t\tif (this._wsReady !== false){\n\t\t\tvar elPos = getPos(e);\n\t\t\tvar progress = {x:elPos.x - this._wsReady.x, y: elPos.y - this._wsReady.y};\n\n\t\t\tif (this.$resizeMove)\n\t\t\t\tthis.$resizeMove(progress);\n\t\t\telse {\n\t\t\t\tvar config = this.config;\n\t\t\t\tvar minWidth = config.minWidth||100;\n\t\t\t\tvar minHeight = config.minHeight||100;\n\n\t\t\t\tif (progress.x < minWidth)\n\t\t\t\t\tprogress.x = minWidth;\n\t\t\t\telse if(progress.x > config.maxWidth)\n\t\t\t\t\tprogress.x = config.maxWidth;\n\n\t\t\t\tif (progress.y < minHeight)\n\t\t\t\t\tprogress.y = minHeight;\n\t\t\t\telse if(progress.y > config.maxHeight)\n\t\t\t\t\tprogress.y = config.maxHeight;\n\t\t\t}\n\n\t\t\tthis._wsProgress = progress;\n\t\t\tthis._showResizeFrame(progress.x,progress.y);\n\t\t}\n\t},\n\t_wrUp:function(){\n\t\t// remove resize frame and css styles\n\t\tif (this._resizeFrame)\n\t\t\tthis._resizeFrame = remove(this._resizeFrame);\n\t\t\n\t\tremoveCss(document.body,\"webix_resize_cursor\");\n\t\tremoveCss(document.body,\"webix_noselect\");\n\t\teventRemove(this._resizeHandlersMove);\n\t\teventRemove(this._resizeHandlersUp);\n\n\t\t// set Window sizes\n\t\tif (this._wsProgress){\n\t\t\tif (this.$resizeEnd)\n\t\t\t\tthis.$resizeEnd(this._wsProgress);\n\t\t\telse {\n\t\t\t\tthis.config.width = this._wsProgress.x;\n\t\t\t\tthis.config.height = this._wsProgress.y;\n\t\t\t\tthis.resize();\n\t\t\t}\n\t\t}\n\n\t\tthis._wsReady = this._wsProgress = false;\n\t\tthis.callEvent(\"onViewResize\",[]);\n\t}\n};\n\nexport default ResizeArea;","import {pos as getPos, offset} from \"../webix/html\";\nimport {protoUI, ui, $$} from \"../ui/core\";\nimport animate from \"../webix/animate\";\nimport {$active} from \"../webix/skin\";\n\nimport state from \"../core/state\";\nimport env from \"../webix/env\";\nimport UIManager from \"../core/uimanager\";\nimport Destruction from \"../core/destruction\";\n\nimport {zIndex} from \"../ui/helpers\";\nimport {bind, toNode, delay, clone, uid, _to_array, extend} from \"../webix/helpers\";\nimport {_event} from \"../webix/htmlevents\";\nimport {assert} from \"../webix/debug\";\nimport {callEvent} from \"../webix/customevents\";\n\nimport EventSystem from \"../core/eventsystem\";\nimport Movable from \"../core/movable\";\nimport Modality from \"../core/modality\";\nimport ResizeArea from \"../core/resizearea\";\n\nimport baseview from \"./baseview\";\nimport base from \"./view\";\n\nstate._popups = _to_array();\n\nconst api = {\n\tname:\"window\",\n\n\t$init:function(config){\n\t\tthis._viewobj.innerHTML = \"<div class='webix_win_content'><div class='webix_win_head'></div><div class='webix_win_body'></div></div>\";\n\t\t\n\t\tthis._contentobj = this._viewobj.firstChild;\n\t\tthis._headobj = this._contentobj.childNodes[0];\n\t\tthis._dataobj = this._bodyobj = this._contentobj.childNodes[1];\n\t\tthis._viewobj.className +=\" webix_window\";\n\n\t\tthis._viewobj.setAttribute(\"role\", \"dialog\");\n\t\tthis._viewobj.setAttribute(\"tabindex\", \"0\");\n\t\t\n\t\tthis._head_cell = this._body_cell = null;\n\t\tconfig._inner = {top:false, left:false, right:false, bottom:false }; //set border flags\n\t\tif (!config.id) config.id = uid();\n\n\t\t_event(this._contentobj, \"click\", bind(this._ignore_clicks, this));\n\n\t\t// IE8 does not allow to define event capturing\n\t\tif(this._contentobj.addEventListener)\n\t\t\t_event(this._contentobj, \"click\", function(){\n\t\t\t\t// brings a window to the front of other windows\n\t\t\t\tif(!this._settings.zIndex && this._settings.toFront){\n\t\t\t\t\tthis._viewobj.style.zIndex = zIndex();\n\t\t\t\t}\n\t\t\t}, {bind:this, capture: true});\n\n\t\t// hidden_setter handling\n\t\tif(config.modal)\n\t\t\tthis._modal = true;\n\t\t// head_setter handling\n\t\tif(config.close)\n\t\t\tthis._settings.close = config.close;\n\n\t\tthis.attachEvent(\"onViewMoveEnd\", function(){\n\t\t\tif(this._settings.position)\n\t\t\t\tdelete this._settings.position;\n\t\t});\n\t},\n\t_ignore_clicks:function(e){\n\t\tvar popups = state._popups;\n\t\tvar index = popups.find(this);\n\t\tif (index == -1)\n\t\t\tindex = popups.length - 1;\n\n\t\te.click_view = index;\n\t\tif (env.isIE8)\n\t\t\te.srcElement.click_view = index;\n\t},\n\tgetChildViews:function(){\n\t\tif (this._head_cell)\n\t\t\treturn [this._head_cell, this._body_cell];\n\t\telse\n\t\t\treturn [this._body_cell];\n\t},\n\tzIndex_setter:function(value){\n\t\tthis._viewobj.style.zIndex = value;\n\t\treturn value;\n\t},\n\t_remove:function(){ \n\t\tthis.body_setter();\n\t},\n\t_replace:function(new_view, old_view){\n\t\told_view = old_view || this._body_cell;\n\t\tconst isBody = old_view == this._body_cell;\n\n\t\told_view.destructor();\n\n\t\tif(isBody)\n\t\t\tthis._body_cell = new_view;\n\t\telse \n\t\t\tthis._head_cell = new_view;\n\n\t\t(isBody ? this._bodyobj : this._headobj).appendChild(new_view._viewobj);\n\n\t\tconst cell = new_view._viewobj.style;\n\n\t\tlet settings = { top:true, left:true, right:true, bottom:true };\n\t\tlet size = \"0px\";\n\n\t\tif(new_view.config.borderless === false){\n\t\t\tsettings = clone(this._settings._inner);\n\t\t\tsize = \"1px\";\n\t\t}\n\t\tnew_view._settings._inner = settings;\n\t\tcell.borderTopWidth = cell.borderBottomWidth = cell.borderLeftWidth = cell.borderRightWidth = size;\n\n\t\tthis.resize(true);\n\t},\n\tshow:function(node, mode, point){\n\t\tif (node === true){\n\t\t\t//recursive call from some child item\n\t\t\tif (!this._settings.hidden)\n\t\t\t\treturn;\n\t\t\tnode = null;\n\t\t}\n\n\t\tif(!this.callEvent(\"onBeforeShow\",arguments))\n\t\t\treturn false;\n\n\t\tthis._settings.hidden = false;\n\t\tthis._viewobj.style.zIndex = (this._settings.zIndex||zIndex());\n\t\tif (this._settings.modal || this._modal){\n\t\t\tthis._modal_set(true);\n\t\t\tthis._modal = null; // hidden_setter handling\n\t\t}\n\n\t\tvar elPos, dx, dy;\n\t\tmode = mode || {};\n\t\tif (!mode.pos)\n\t\t\tmode.pos = this._settings.relative;\n\n\t\t//get position of source html node\n\t\t//we need to show popup which pointing to that node\n\t\tif (node){\n\t\t\t//if event was provided - get node info from it\n\t\t\tif (typeof node == \"object\" && !node.tagName){\n\t\t\t\t/*below logic is far from ideal*/\n\t\t\t\tif (node.target || node.srcElement){\n\t\t\t\t\telPos = getPos(node);\n\t\t\t\t\tdx = 20;\n\t\t\t\t\tdy = 5;\n\t\t\t\t} else\n\t\t\t\t\telPos = node;\n\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\tnode = toNode(node);\n\t\t\t\tassert(node,\"Not existing target for window:show\");\n\t\t\t\telPos = offset(node);\n\t\t\t}\t\n\n\t\t\t//size of body, we need to fit popup inside\n\t\t\tvar x = Math.max(window.innerWidth || 0, document.body.offsetWidth);\n\t\t\tvar y = Math.max(window.innerHeight || 0, document.body.offsetHeight);\n\n\t\t\t//size of node, near which popup will be rendered\n\t\t\tdx = dx || node.offsetWidth  || 0;\n\t\t\tdy = dy || node.offsetHeight || 0;\n\t\t\t//size of popup element\n\t\t\tvar size = this._last_size;\n\n\t\t\tvar fin_x = elPos.x;\n\t\t\tvar fin_y = elPos.y;\n\t\t\tvar point_y=0;\n\t\t\tvar point_x = 0;\n\t\t\tvar scrollLeft = 0, scrollTop = 0;\n\t\t\tvar fit = this._settings.autofit;\n\t\t\tif (fit){\n\t\t\t\tvar nochange = (fit === \"node\");\n\t\t\t\tvar delta_x = 6; var delta_y=6; var delta_point = 6;\n\t\t\t\tif (!this._settings.point)\n\t\t\t\t\tdelta_x = delta_y = delta_point = 0;\n\n\t\t\t\t//default pointer position - top \n\t\t\t\tpoint = \"top\";\n\t\t\t\tfin_y=0; fin_x = 0;\n\n\t\t\t\tscrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft;\n\t\t\t\t//if we want to place menu at righ, but there is no place move it to left instead\n\t\t\t\tif (x - elPos.x - dx < size[0] && mode.pos == \"right\" && !nochange)\n\t\t\t\t\tmode.pos = \"left\";\n\n\t\t\t\tif (mode.pos == \"right\"){\n\t\t\t\t\tfin_x = elPos.x+delta_x+dx; \n\t\t\t\t\tdelta_y = -dy;\n\t\t\t\t\tpoint = \"left\";\n\t\t\t\t\tpoint_y = Math.round(elPos.y+dy/2);\n\t\t\t\t\tpoint_x = fin_x - delta_point;\n\t\t\t\t} else if (mode.pos == \"left\"){\n\t\t\t\t\tfin_x = elPos.x-delta_x-size[0]-1;\n\t\t\t\t\tdelta_y = -dy;\n\t\t\t\t\tpoint = \"right\";\n\t\t\t\t\tpoint_y = Math.round(elPos.y+dy/2);\n\t\t\t\t\tpoint_x = fin_x + size[0]+1;\n\t\t\t\t} else  {\n\t\t\t\t\t//left border of screen\n\t\t\t\t\tif (elPos.x < scrollLeft){\n\t\t\t\t\t\tfin_x = scrollLeft;\n\t\t\t\t\t//popup exceed the right border of screen\n\t\t\t\t\t} else if (x+scrollLeft-elPos.x > size[0]){\n\t\t\t\t\t\tfin_x = elPos.x; //aligned\n\t\t\t\t\t} else{\n\t\t\t\t\t\tfin_x = x+scrollLeft-delta_x-size[0]; //not aligned\n\t\t\t\t\t}\n\n\t\t\t\t\tpoint_x = Math.round(elPos.x+dx/2);\n\t\t\t\t\t//when we have a small popup, point need to be rendered at center of popup\n\t\t\t\t\tpoint_x = Math.min(point_x, fin_x + size[0] - delta_point*3);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t//if height is not fixed - use default position\n\t\t\t\tscrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;\n\t\t\t\tif (((!size[1] || (y+scrollTop-dy-elPos.y-delta_y > size[1])) || nochange) && mode.pos != \"top\"){\n\t\t\t\t\t//bottom\t\n\t\t\t\t\tfin_y = dy+elPos.y+delta_y - (!this._settings.point ? 0: 4);\n\t\t\t\t\tif (!point_y){\n\t\t\t\t\t\tpoint = \"top\";\n\t\t\t\t\t\tpoint_y = fin_y-delta_point;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t//top\n\t\t\t\t\tfin_y = elPos.y-delta_y - size[1];\n\t\t\t\t\tif (fin_y < 0){\n\t\t\t\t\t\tfin_y = 0; \n\t\t\t\t\t\t//left|right point can be used, but there is no place for top point\n\t\t\t\t\t\tif (point == \"top\") point = false;\n\t\t\t\t\t} else if (!point_y){\n\t\t\t\t\t\tpoint = \"bottom\";\n\t\t\t\t\t\tfin_y --;\n\t\t\t\t\t\tpoint_y = fin_y+size[1]+1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar deltax = (mode.x || 0);\n\t\t\tvar deltay = (mode.y || 0);\n\n\t\t\tvar fixed = this._checkFixedPosition();\n\t\t\tif (fixed){\n\t\t\t\tfin_y = fin_y - scrollTop;\n\t\t\t\tpoint_y = point_y - scrollTop;\n\t\t\t}\n\n\t\t\tthis.setPosition(fin_x+deltax, fin_y+deltay);\n\t\t\tif (this._set_point){\n\t\t\t\tif (point && this._settings.point)\n\t\t\t\t\tthis._set_point(point,point_x+deltax, point_y+deltay, fixed);\n\t\t\t\telse\n\t\t\t\t\tthis._hide_point();\n\t\t\t}\n\t\t} else\n\t\t\tthis._setPosition(this._settings.left, this._settings.top);\n\n\t\tthis._viewobj.style.display = \"block\";\n\t\tthis._hide_timer = 1;\n\t\tdelay(function(){ this._hide_timer = 0; }, this, [], (env.touch ? 400 : 100 ));\n\t\t\n\t\tthis._render_hidden_views();\n\t\t\n\t\t\n\t\tif (this.config.autofocus){\n\t\t\tthis._prev_focus = UIManager.getFocus();\n\t\t\tUIManager.setFocus(this);\n\t\t}\n\n\t\tif (-1 == state._popups.find(this))\n\t\t\tstate._popups.push(this);\n\n\t\tthis.callEvent(\"onShow\",[]);\n\t}, \n\t_hide:function(e){\n\t\t//do not hide modal windows\n\t\tif (this._settings.hidden || this._settings.modal || this._hide_timer || (e && e.showpopup)) return;\n\t\t//do not hide popup, when we have modal layer above the popup\n\t\tif (state._modality && this._settings.zIndex <= state._modality) return;\n\n\t\t//ignore inside clicks and clicks in child-popups\n\n\t\tif (e){\n\t\t\tvar index = env.isIE8 ? e.srcElement.click_view : e.click_view;\n\t\t\tif (!index && index !== 0) index = -1;\n\n\t\t\tvar myindex = state._popups.find(this);\n\n\t\t\tif (myindex <= index) return;\n\t\t}\n\n\t\tthis._hide_single();\n\t},\n\thidden_setter:function(value){\n\t\tif(value) \n\t\t\tthis.hide();\n\t\telse\n\t\t\tthis.show();\n\t\treturn !!value;\n\t},\n\thide:function(){\n\t\tconst index = this._hide_single();\n\t\tthis._hide_sub_popups(index);\n\t},\n\t_hide_single:function(){\n\t\tif (this.$destructed || this._settings.hidden) return;\n\n\t\tif (this._settings.modal)\n\t\t\tthis._modal_set(false);\n\t\t\t\n\t\tthis._hiding_process();\n\n\t\tif (this._settings.autofocus){\n\t\t\tvar el = document.activeElement;\n\t\t\t//as result of hotkey, we can have a activeElement set to document.body\n\t\t\tif (el && this._viewobj && (this._viewobj.contains(el) || el === document.body)){\n\t\t\t\tUIManager.setFocus(this._prev_focus);\n\t\t\t\tthis._prev_focus = null;\n\t\t\t}\n\t\t}\n\n\t\t//clean state\n\t\tconst index = state._popups.find(this);\n\t\tif (index > -1)\n\t\t\tstate._popups.removeAt(index);\n\n\t\treturn index;\n\t},\n\t_hiding_process:function(){\n\t\tif (this._settings.position == \"top\"){\n\t\t\tanimate(this._viewobj, {type: \"slide\", x:0, y:-(this._content_height+20), duration: 300,\n\t\t\t\tcallback:this._hide_callback, master:this});\n\t\t} else \n\t\t\tthis._hide_callback();\n\t},\n\t//hide all child-popups\n\t_hide_sub_popups:function(index){\n\t\tif (index > -1){\n\t\t\tconst order = state._popups;\n\t\t\tfor (let i=order.length-1; i>=index; i--)\n\t\t\t\tif (order[i]._hide_point)\t//hide only popups, skip windows\n\t\t\t\t\torder[i]._hide_single();\n\t\t}\n\t},\n\tdestructor: function() {\n\t\tthis.hide();\n\t\tDestruction.destructor.apply(this, []);\n\t},\n\t_hide_callback:function(){\n\t\tif (!this.$destructed){\n\t\t\tthis._viewobj.style.display = \"none\";\n\t\t\tthis._settings.hidden = true;\n\t\t\tthis.callEvent(\"onHide\",[]);\n\t\t}\n\t},\n\tclose:function(){\n\t\tthis.destructor(); \n\t},\n\t_inner_body_set:function(value){\n\t\tif (typeof value.borderless == \"undefined\")\n\t\t\tvalue.borderless = true;\n\t},\n\tbody_setter:function(value){\n\t\tif (typeof value != \"object\")\n\t\t\tvalue = {template:value };\n\t\tthis._inner_body_set(value);\n\n\t\tstate._parent_cell = this;\n\t\tthis._body_cell = ui._view(value);\n\n\t\tthis._bodyobj.appendChild(this._body_cell._viewobj);\n\t\treturn value;\n\t},\n\thead_setter:function(value){\n\t\tif (value === false) return value;\n\n\t\tconst text = typeof value == \"string\";\n\t\tconst config = { padding:0, css: \"webix_win_title\", type:\"header\", borderless:true };\n\t\tif(text){\n\t\t\tthis._viewobj.setAttribute(\"aria-label\", value);\n\t\t\tvalue = { template:value };\n\t\t}\n\t\tif(value.view == \"template\" || (!value.view && value.template)){\n\t\t\textend(value, config);\n\t\t}\n\t\tif(text && this.config.close){\n\t\t\tvalue = { padding:{ left: $active.inputHeight+2, right:2 }, cols:[\n\t\t\t\tvalue,\n\t\t\t\t{ view:\"icon\", icon:\"wxi-close\", click:()=>{\n\t\t\t\t\tthis.hide();\n\t\t\t\t}}\n\t\t\t]};\n\t\t}\n\t\telse\n\t\t\textend(value, {borderless:true});\n\n\t\tstate._parent_cell = this;\n\t\tthis._head_cell = ui._view(value);\n\n\t\tthis._headobj.appendChild(this._head_cell._viewobj);\n\t\treturn value;\n\t},\n\tgetBody:function(){\n\t\treturn this._body_cell;\n\t},\n\tgetHead:function(){\n\t\treturn this._head_cell;\n\t},\n\tadjust:function(){ return this.resize(); },\n\tresizeChildren:function(){\n\t\tif (this._body_cell)\n\t\t\tthis.resize();\n\t},\n\tresize:function(){\n\t\tbaseview.api.adjust.call(this);\n\t\tcallEvent(\"onResize\", []);\n\t\tif (this.isVisible()){\n\t\t\tthis._setPosition(this._settings.left, this._settings.top);\n\t\t}\n\t},\n\t_checkFixedPosition: function() {\n\t\tif(this._settings.master) {\n\t\t\tvar top = $$(this._settings.master).getTopParentView().$view;\n\t\t\treturn top && top.style.position === \"fixed\";\n\t\t}\n\t\treturn false;\n\t},\n\t_setPosition:function(x,y){\n\t\tif ((this._settings.position || this._checkFixedPosition())){\n\t\t\tthis.$view.style.position = \"fixed\";\n\n\t\t\tvar width = this._content_width;\n\t\t\tvar height = this._content_height;\n\t\t\tif (width <= 0 || height <= 0) return;\n\n\t\t\tvar maxWidth = (window.innerWidth||document.documentElement.offsetWidth);\n\t\t\tvar maxHeight = (window.innerHeight||document.documentElement.offsetHeight);\n\t\t\tvar left = Math.round((maxWidth-width)/2);\n\t\t\tvar top = Math.round((maxHeight-height)/2);\n\n\t\t\tif (typeof this._settings.position == \"function\"){\n\t\t\t\tvar state = { \tleft:left, top:top, \n\t\t\t\t\twidth:width, height:height, \n\t\t\t\t\tmaxWidth:maxWidth, maxHeight:maxHeight };\n\t\t\t\tthis._settings.position.call(this, state);\n\n\t\t\t\tif (state.width != width || state.height != height)\n\t\t\t\t\tthis.$setSize(state.width, state.height);\n\n\t\t\t\tthis.setPosition(state.left, state.top);\n\t\t\t} else {\n\t\t\t\tif (this._settings.position == \"top\"){\n\t\t\t\t\tif (animate.isSupported())\n\t\t\t\t\t\ttop = -1*height;\n\t\t\t\t\telse\n\t\t\t\t\t\ttop = 10;\n\t\t\t\t}\n\t\t\t\t//popup inside a fixed win\n\t\t\t\tif(!this._settings.position){\n\t\t\t\t\tleft = this._settings.left || left;\n\t\t\t\t\ttop = this._settings.top || top;\n\t\t\t\t}\n\t\t\t\tthis.setPosition(left, top);\n\t\t\t}\n\t\t\t\n\t\t\tif (this._settings.position == \"top\")\n\t\t\t\tanimate(this._viewobj, {type: \"slide\", x:0, y:height-((this._settings.padding||0)*2), duration: 300 ,callback:this._topPositionCallback, master:this});\n\t\t} else \n\t\t\tthis.setPosition(x,y);\n\t},\n\t_topPositionCallback:function(node){\n\t\tanimate.clear(node);\n\t\tthis._settings.top=-((this._settings.padding||0)*2);\n\t\tthis.setPosition(this._settings.left, this._settings.top);\n\t},\n\tsetPosition:function(x,y){\n\t\tthis._viewobj.style.top = y+\"px\";\n\t\tthis._viewobj.style.left = x+\"px\";\n\t\tthis._settings.left = x; this._settings.top=y;\n\t},\n\t$getSize:function(dx, dy){\n\t\tvar _borders = this._settings._inner;\n\t\tif (_borders){\n\t\t\tdx += (_borders.left?0:1)+(_borders.right?0:1);\n\t\t\tdy += (_borders.top?0:1)+(_borders.bottom?0:1);\n\t\t}\n\t\t//line between head and body\n\t\tif (this._settings.head)\n\t\t\tdy += 1;\n\n\t\tvar size =  this._body_cell.$getSize(0,0);\n\t\tvar headMinWidth = 0;\n\t\tif (this._head_cell){\n\t\t\tvar head_size = this._head_cell.$getSize(0,0);\n\t\t\tif (head_size[3]==head_size[2])\n\t\t\t\tthis._settings.headHeight = head_size[3];\n\t\t\tdy += this._settings.headHeight;\n\t\t\theadMinWidth = head_size[0];\n\t\t}\n\n\t\tif (this._settings.fullscreen){\n\t\t\tvar width = window.innerWidth || document.body.clientWidth;\n\t\t\tvar height = window.innerHeight || document.body.clientHeight;\n\t\t\treturn [width, width, height, height];\n\t\t}\n\n\t\t//get layout sizes\n\t\tvar self_size = base.api.$getSize.call(this, 0, 0);\n\n\t\t//use child settings if layout's one was not defined\n\t\tif (headMinWidth && size[1] > 100000)\n\t\t\tsize[0] = Math.max(headMinWidth, size[0]);\n\n\t\tself_size[1] = Math.min(self_size[1],(size[1]>=100000&&self_size[1]>=100000?Math.max(size[0], self_size[0]):size[1])+dx);\n\t\tself_size[3] = Math.min(self_size[3],(size[3]>=100000&&self_size[3]>=100000?Math.max(size[2], self_size[2]):size[3])+dy);\n\n\t\tself_size[0] = Math.min(Math.max(self_size[0],size[0] + dx), self_size[1]);\n\t\tself_size[2] = Math.min(Math.max(self_size[2],size[2] + dy), self_size[3]);\n\n\t\treturn self_size;\n\t},\n\t$setSize:function(x,y){\n\t\tbase.api.$setSize.call(this,x,y);\n\t\tx = this._content_width;\n\t\ty = this._content_height;\n\t\tif (this._settings.head === false) {\n\t\t\tthis._headobj.style.display=\"none\";\n\t\t\tthis._body_cell.$setSize(x,y);\n\t\t} else { \n\t\t\tthis._head_cell.$setSize(x,this._settings.headHeight);\n\t\t\tthis._body_cell.$setSize(x,y-this._settings.headHeight);\n\t\t}\n\t},\n\t$skin:function(){\n\t\tthis.defaults.headHeight = $active.barHeight;\n\t},\n\tdefaults:{\n\t\ttop:0,\n\t\tleft:0,\n\t\tautofit:true,\n\t\trelative:\"bottom\",\n\t\tbody:\"\",\n\t\thead:\"\",\n\t\thidden: true,\n\t\tautofocus:true,\n\t\tminWidth:300,\n\t\tminHeight:200\n\t}\n};\n\nconst view = protoUI(api, base.view, Movable, Modality, EventSystem, ResizeArea);\nexport default {api, view};","import {preventEvent} from \"../webix/html\";\nimport {bind, toNode} from \"../webix/helpers\";\nimport window from \"../views/window\";\nimport {$$} from \"../ui/core\";\nimport {event, eventRemove} from \"../webix/htmlevents\";\nimport {assert} from \"../webix/debug\";\nimport {callEvent} from \"../webix/customevents\";\n\n\nconst ContextHelper = {\n\tdefaults:{\n\t\tpadding:\"4\",\n\t\thidden:true\n\t},\n\tbody_setter:function(value){\n\t\tvalue = window.api.body_setter.call(this, value);\n\t\tthis._body_cell._viewobj.style.borderWidth = \"0px\";\n\t\treturn value;\n\t},\n\tattachTo:function(obj){\n\t\tassert(obj, \"Invalid target for Context::attach\");\n\t\tvar id;\n\t\tif (obj.on_context)\n\t\t\tid = obj.attachEvent(\"onAfterContextMenu\", bind(this._show_at_ui, this));\n\t\telse \n\t\t\tid = event(obj, \"contextmenu\", this._show_at_node, {bind:this});\n\n\t\tthis.attachEvent(\"onDestruct\", function(){\n\t\t\tif (obj.callEvent)\n\t\t\t\tobj.detachEvent(id);\n\t\t\telse\n\t\t\t\teventRemove(id);\n\t\t\tobj = null;\t\t\t\n\t\t});\n\t},\n\tgetContext:function(){\n\t\treturn this._area;\n\t},\n\tsetContext:function(area){\n\t\tthis._area = area;\n\t},\n\t_show_at_node:function(e){\n\t\tthis._area = toNode(e||window.event);\n\t\treturn this._show_at(e);\n\t},\n\t_show_at_ui:function(id, e){\n\t\tthis._area = { obj:$$(e), id:id };\n\t\treturn this._show_at(e);\n\t},\n\t_show_at:function(e){\n\t\tvar result = this.show(e, null, true);\n\t\tif (result === false) return result;\n\n\t\t//event forced to close other popups|context menus\n\t\tcallEvent(\"onClick\", []);\t\t\n\t\treturn preventEvent(e);\n\t},\n\t_show_on_mouse_out:true,\n\tmaster_setter:function(value){\n\t\tthis.attachTo(value);\n\t\treturn null;\n\t}\n};\n\nexport default ContextHelper;","import state from \"../core/state\";\nimport UIManager from \"../core/uimanager\";\nimport {bind, delay} from \"../webix/helpers\";\nimport {event} from \"../webix/htmlevents\";\n\n\nconst clipbuffer = {\n\n\t_area: null,\n\t_blur_id: null,\n\t_ctrl: 0,\n\n\t/*! create textarea or returns existing\n\t **/\n\tinit: function() {\n\t\t// returns existing textarea\n\t\tif (this._area !== null)\n\t\t\treturn this._area;\n\n\t\tstate.destructors.push({ obj: this });\n\t\t// creates new textarea\n\t\tthis._area = document.createElement(\"textarea\");\n\t\tthis._area.className = \"webix_clipbuffer\";\n\t\tthis._area.setAttribute(/*@attr*/\"webixignore\", 1);\n\t\tthis._area.setAttribute(\"spellcheck\", \"false\");\n\t\tthis._area.setAttribute(\"autocapitalize\", \"off\");\n\t\tthis._area.setAttribute(\"autocorrect\", \"off\");\n\t\tthis._area.setAttribute(\"autocomplete\", \"off\");\n\t\tdocument.body.appendChild(this._area);\n\n\t\tevent(document.body, \"keydown\", bind(function(e){\n\t\t\tvar key = e.keyCode;\n\t\t\tvar ctrl = !!(e.ctrlKey || e.metaKey);\n\t\t\tif (key === 86 && ctrl){\n\t\t\t\tthis._area.value = \"\";\n\t\t\t\tdelay(this._paste, this, [e], 100);\n\t\t\t}\n\t\t}, this));\n\n\t\treturn this._area;\n\t},\n\tdestructor: function(){\n\t\tthis._area = null;\n\t},\n\t/*! set text into buffer\n\t **/\n\tset: function(text) {\n\t\tthis.init();\n\t\ttext = text === \"\" ? \"\\n\" : text;\n\t\tthis._area.value = text;\n\t\tthis.focus();\n\t},\n\t/*! select text in textarea\n\t **/\n\tfocus: function() {\n\t\t// if there is native browser selection, skip focus\n\t\tif(!this._isSelectRange()){\n\t\t\tthis.init();\n\t\t\tthis._area.focus();\n\t\t\tthis._area.select();\n\t\t}\n\n\t},\n\t/*! checks document selection\n\t **/\n\t_isSelectRange: function() {\n\t\tvar text = \"\";\n\t\tif (typeof window.getSelection != \"undefined\") {\n\t\t\ttext = window.getSelection().toString();\n\t\t} else if (typeof document.selection != \"undefined\" && document.selection.type == \"Text\") {\n\t\t\ttext = document.selection.createRange().text;\n\t\t}\n\t\treturn !!text;\n\t},\n\t/*! process ctrl+V pressing\n\t **/\n\t_paste: function(e) {\n\t\tvar trg = e.target || e.srcElement;\n\t\tif (trg === this._area) {\n\t\t\tvar text = this._area.value;\n\t\t\tvar last_active = UIManager.getFocus();\n\t\t\tif (last_active && (!last_active.getEditor || !last_active.getEditor())){\n\t\t\t\tlast_active.callEvent(\"onPaste\", [text]);\n\t\t\t\tthis._area.select();\n\t\t\t}\n\t\t}\n\t}\n};\n\nexport default clipbuffer;","import UIManager from \"../core/uimanager\";\nimport {isUndefined} from \"../webix/helpers\";\nimport template from \"../webix/template\";\n\nimport clipbuffer from \"../webix/clipbuffer\";\n\nconst CopyPaste = {\n\tclipboard_setter: function(value) {\n\t\tif (value === true || value === 1) value = \"modify\";\n\t\tthis.attachEvent(\"onAfterSelect\", function(id) {\n\t\t\tvar item = this.getItem(id);\n\t\t\tvar text = this.type.templateCopy(item);\n\t\t\tclipbuffer.set(text, this);\n\t\t\tclipbuffer.focus();\n\t\t\tUIManager.setFocus(this);\n\t\t});\n\t\tthis.attachEvent(\"onPaste\", function(text) {\n\t\t\tif (!isUndefined(this._paste[this._settings.clipboard]))\n\t\t\t\tthis._paste[this._settings.clipboard].call(this, text);\n\t\t});\n\t\tthis.attachEvent(\"onFocus\", function() {\n\t\t\tclipbuffer.focus();\n\t\t});\n\t\t// solution for clicks on selected items\n\t\tthis.attachEvent(\"onItemClick\",function(id){\n\t\t\tif(!this._selected || this._selected.find(id)!==-1){\n\t\t\t\tclipbuffer.focus();\n\t\t\t\tUIManager.setFocus(this);\n\t\t\t}\n\t\t});\n\t\treturn value;\n\t},\n\t_paste: {\n\t\t// insert new item with pasted value\n\t\tinsert: function(text) {\n\t\t\tthis.add({ value: text });\n\t\t},\n\t\t// change value of each selected item\n\t\tmodify: function(text) {\n\t\t\tvar sel = this.getSelectedId(true);\n\t\t\tfor (var i = 0; i < sel.length; i++) {\n\t\t\t\tthis.getItem(sel[i]).value = text;\n\t\t\t\tthis.refresh(sel[i]);\n\t\t\t}\n\t\t},\n\t\t// do nothing\n\t\tcustom: function() {}\n\t},\n\ttemplateCopy_setter: function(value) {\n\t\tthis.type.templateCopy = template(value);\n\t},\n\ttype:{\n\t\ttemplateCopy: function(item) {\n\t\t\treturn this.template(item);\n\t\t}\n\t}\n};\n\nexport default CopyPaste;","import {create, insertBefore, remove} from \"../webix/html\";\nimport env from \"../webix/env\";\nimport {extend, bind} from \"../webix/helpers\";\n\n\nconst CustomPrint = {\n\t$customPrint:function(options, htmlOnly){\n\t\tif(this._prePrint(options, htmlOnly))\n\t\t\treturn true;\n\n\t\tvar tableData = this._getTableArray(options);\n\t\tvar table = this._getTableHTML(tableData, options);\n\n\t\tif(htmlOnly)\n\t\t\treturn table;\n\n\t\tvar doc = create(\"div\", { \"class\":\"webix_ui_print\"});\n\t\tdoc.appendChild(table);\n\n\t\tinsertBefore(doc, options.docFooter, document.body);\n\t\twindow.print();\n\t\t\n\t\tremove(doc);\n\t},\n\t_prePrint:function(options, htmlOnly){\n\t\tif(!htmlOnly && (this.config.layout ==\"y\" || options.scroll || this.config.prerender || this.config.autoheight)) return true;\n\t\t\n\t\tif(this.config.layout ==\"x\")\n\t\t\textend(options || {}, {xCount:this.count(), nobreaks:true}, true);\n\t},\n\t_getPageWidth:function(options){\n\t\tif(options.fit ==\"page\") return Infinity;\n\n\t\tvar size = options.size;\n\t\tvar width = size[options.mode == \"portrait\"?\"width\":\"height\"];\n\t\t\n\t\treturn Math.min(width*env.printPPI-2*env.printMargin);\n\t},\n\t_getTableArray:function(options, base, start){\n\t\tvar maxWidth = this._getPageWidth(options);\n\t\tvar xCount = options.xCount || this._getVisibleRange()._dx;\n\n\t\tvar tableArray = [];\n\t\tvar colrow = [];\n\t\tvar width = 0;\n\t\t\n\t\tvar newTableStart, rownum, colnum;\n\n\t\tstart = start || 0;\n\t\tbase = base || [];\n\n\t\tfor(var i = 0; i<this.data.order.length;){\n\t\t\tvar obj = this.data.pull[this.data.order[i]];\n\t\t\trownum = parseInt(i/xCount);\n\t\t\tcolnum = i-(rownum*xCount);\n\n\t\t\tif(obj && colnum>=start){\n\t\t\t\twidth += this.type.width;\n\t\t\t\t\n\t\t\t\t//start a new table, if cells do not fit page width\n\t\t\t\tif(width > maxWidth && colnum>start){ // 'colnum>start' ensures that a single long cell will have to fit the page\n\t\t\t\t\tnewTableStart = colrow.length+start;\n\t\t\t\t\ttableArray.push(colrow);\n\t\t\t\t\ti = i+(xCount-colrow.length);\n\t\t\t\t\tcolrow = [];\n\t\t\t\t\twidth = 0;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvar cellValue = this.type.template(obj, this.type);\n\t\t\t\tvar className = this._itemClassName;\n\t\t\t\t\n\t\t\t\tvar style  = {\n\t\t\t\t\tdisplay:\"table-cell\",\n\t\t\t\t\theight:this.type.height + \"px\",\n\t\t\t\t\twidth:this.type.width + \"px\"\n\t\t\t\t};\n\t\t\t\t//push a cell to a row\n\t\t\t\tcolrow.push({\n\t\t\t\t\ttxt: cellValue,\n\t\t\t\t\tclassName: className+\" \"+(obj.$css || \"\"),\n\t\t\t\t\tstyle: style\n\t\t\t\t});\n\t\t\t\t//push a row to a table and start a new row\n\t\t\t\tif((i+1)%xCount === 0){\n\t\t\t\t\ttableArray.push(colrow);\n\t\t\t\t\tcolrow = [];\n\t\t\t\t\twidth = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\n\t\tbase.push(tableArray);\n\n\t\tif(newTableStart)\n\t\t\tthis._getTableArray(options, base, newTableStart);\t\n\n\t\treturn base;\n\t},\n\t_getTableHTML:function(tableData, options){\n\t\t\n\t\tvar container = create(\"div\");\n\n\t\ttableData.forEach(bind(function(table, i){\n\n\t\t\tvar tableHTML = create(\"table\", {\n\t\t\t\t\"class\":\"webix_table_print \"+this.$view.className,\n\t\t\t\t\"style\":\"border-collapse:collapse\"\n\t\t\t});\n\n\t\t\ttable.forEach(function(row){\n\t\t\t\tvar tr = create(\"tr\");\n\n\t\t\t\trow.forEach(function(column){\n\t\t\t\t\tvar td = create(\"td\");\n\n\n\t\t\t\t\tif (column.txt) td.innerHTML = column.txt;\n\t\t\t\t\tif (column.className) td.className = column.className;\n\t\t\t\t\tif (column.style) {\n\t\t\t\t\t\tvar keys = Object.keys(column.style);\n\t\t\t\t\t\tkeys.forEach(function(key){\n\t\t\t\t\t\t\tif (column.style[key])\n\t\t\t\t\t\t\t\ttd.style[key] = column.style[key];\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif(column.span){\n\t\t\t\t\t\tif(column.span.colspan > 1)\n\t\t\t\t\t\t\ttd.colSpan = column.span.colspan;\n\t\t\t\t\t\tif(column.span.rowspan > 1)\n\t\t\t\t\t\t\ttd.rowSpan = column.span.rowspan;\n\t\t\t\t\t}\n\t\t\t\t\ttr.appendChild(td);\n\t\t\t\t});\n\t\t\t\ttableHTML.appendChild(tr);\n\t\t\t});\n\t\t\tcontainer.appendChild(tableHTML);\n\n\t\t\tif(!options.nobreaks && i+1 < tableData.length){\n\t\t\t\tvar br = create(\"DIV\", {\"class\":\"webix_print_pagebreak\"});\n\t\t\t\tcontainer.appendChild(br);\n\t\t\t}\n\t\t\t\n\t\t}, this));\n\n\t\treturn container;\n\t}\n};\n\nexport default CustomPrint;","import {pos as getPos, create, remove, removeCss, preventEvent, addCss} from \"../webix/html\";\nimport state from \"../core/state\";\nimport {$$} from \"../ui/core\";\nimport {delay, isUndefined, bind} from \"../webix/helpers\";\n\nimport env from \"../webix/env\";\nimport {_event, event, eventRemove} from \"../webix/htmlevents\";\nimport {attachEvent} from \"../webix/customevents\";\n\n\nconst CustomScroll= {\n\tscrollStep:40,\n\tinit:function(){\n\t\tthis._init_once();\n\t\tenv.$customScroll = true;\n\t\tenv.scrollSize = 0;\n\t\tstate.destructors.push({\n\t\t\tobj:{\n\t\t\t\tdestructor:function(){\n\t\t\t\t\tthis._last_active_node = null;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tattachEvent(\"onReconstruct\", CustomScroll._on_reconstruct);\n\t\tattachEvent(\"onResize\", CustomScroll._on_reconstruct);\n\n\t\t//adjusts scroll after view repainting\n\t\t//for example, opening a branch in the tree\n\t\t//it will be better to handle onAfterRender of the related view\n\t\tattachEvent(\"onClick\", CustomScroll._on_reconstruct);\n\t},\n\tresize:function(){\n\t\tthis._on_reconstruct();\n\t},\n\t_enable_datatable:function(view){\n\t\tview._body._custom_scroll_view = view._settings.id;\n\t\tview.attachEvent(\"onAfterRender\", function(){\n\t\t\tvar scroll = CustomScroll._get_datatable_sizes(this);\n\t\t\tvar y = Math.max(scroll.dy - scroll.py, 0);\n\t\t\tvar x = Math.max(scroll.dx - scroll.px, 0);\n\n\t\t\tif (this._y_scroll && this._scrollTop > y){\n\t\t\t\tthis._y_scroll.scrollTo(y);\n\t\t\t}\n\t\t\telse if (this._x_scroll && this._scrollLeft > x){\n\t\t\t\tthis._x_scroll.scrollTo(x);\n\t\t\t}\n\n\t\t\tif ( CustomScroll._last_active_node == this._body)\n\t\t\t\tCustomScroll._on_reconstruct();\n\t\t});\n\t\t_event(view._body, \"mouseover\", \tCustomScroll._mouse_in \t\t);\n\t\t_event(view._body, \"mouseout\", \tCustomScroll._mouse_out\t\t);\n\t},\n\tenable:function(view, mode){ \n\t\tCustomScroll._init_once();\n\t\tif (view.mapCells)\n\t\t\treturn this._enable_datatable(view);\n\n\t\tvar node = view;\n\t\tif (view._dataobj)\n\t\t\tnode = view._dataobj.parentNode;\n\t\t\n\t\tnode._custom_scroll_mode = mode||\"xy\";\n\t\t_event(node, \"mouseover\", \tCustomScroll._mouse_in \t\t);\n\t\t_event(node, \"mouseout\", \tCustomScroll._mouse_out\t\t);\n\t\t_event(node, \"mousewheel\", \tCustomScroll._mouse_wheel, {passive:false});\n\t\t_event(node, \"DOMMouseScroll\", \tCustomScroll._mouse_wheel, {passive:false});\n\n\t\tthis._set_additional_handlers(view);\n\t},\n\t_on_reconstruct:function(){\n\t\tvar last = CustomScroll._last_active_node;\n\t\tif (last && last._custom_scroll_size){\n\t\t\tCustomScroll._mouse_out_timed.call(last);\n\t\t\tCustomScroll._mouse_in.call(last);\n\t\t}\t\t\t\n\t},\n\t_init_once:function(){\n\t\tevent(document.body, \"mousemove\", \tfunction(e){\n\t\t\tif (CustomScroll._active_drag_area)\n\t\t\t\tCustomScroll._adjust_scroll(CustomScroll._active_drag_area, CustomScroll._active_drag_area._scroll_drag_pos, getPos(e));\n\t\t});\n\t\tCustomScroll._init_once = function(){};\n\t},\n\t_mouse_in:function(){\n\t\tCustomScroll._last_active_node  = this;\n\n\t\tclearTimeout(this._mouse_out_timer);\n\n\t\tif (this._custom_scroll_size || CustomScroll._active_drag_area) return;\n\t\tvar view = $$(this);\n\t\tif (view && !view.isEnabled()) return;\n\t\t\n\t\tvar sizes;\n\t\tif (this._custom_scroll_view){\n\t\t\t//ger related view\n\t\t\tview = $$(this._custom_scroll_view);\n\t\t\t//if view was removed, we need not scroll anymore\n\t\t\tif (!view) return;\n\t\t\tsizes = CustomScroll._get_datatable_sizes(view);\n\t\t} else{\n\t\t\tsizes = {\n\t\t\t\tdx:this.scrollWidth,\n\t\t\t\tdy:this.scrollHeight,\n\t\t\t\tpx:this.clientWidth,\n\t\t\t\tpy:this.clientHeight\n\t\t\t};\n\t\t\tsizes._scroll_x = sizes.dx > sizes.px && this._custom_scroll_mode.indexOf(\"x\") != -1;\n\t\t\tsizes._scroll_y = sizes.dy > sizes.py && this._custom_scroll_mode.indexOf(\"y\") != -1;\n\t\t}\n\n\t\tthis._custom_scroll_size = sizes;\n\t\tif (sizes._scroll_x){\n\t\t\tsizes._scroll_x_node = CustomScroll._create_scroll(this, \"x\", sizes.dx, sizes.px, \"width\", \"height\");\n\t\t\tsizes._sx = (sizes.px - sizes._scroll_x_node.offsetWidth - 4);\n\t\t\tsizes._vx = sizes.dx - sizes.px;\n\t\t\tif(CustomScroll.trackBar)\n\t\t\t\tsizes._bar_x = CustomScroll._create_bar(this,\"x\");\n\t\t}\n\t\tif (sizes._scroll_y){\n\t\t\tsizes._scroll_y_node = CustomScroll._create_scroll(this, \"y\", sizes.dy, sizes.py, \"height\", \"width\");\n\t\t\tsizes._sy = (sizes.py - sizes._scroll_y_node.offsetHeight - 4);\n\t\t\tsizes._vy = sizes.dy - sizes.py;\n\n\t\t\tif(CustomScroll.trackBar)\n\t\t\t\tsizes._bar_y = CustomScroll._create_bar(this,\"y\");\n\t\t}\n\n\t\tCustomScroll._update_scroll(this);\n\t},\n\t_create_bar: function(node, mode){\n\t\tvar bar = create(\"DIV\", {\n\t\t\t/*@attr*/\"webixignore\":\"1\",\n\t\t\t\"class\":\"webix_c_scroll_bar_\"+mode\n\t\t},\"\");\n\n\t\tnode.appendChild(bar);\n\t\treturn bar;\n\t},\n\t_adjust_scroll:function(node, old, pos){\n\t\tvar config = node._custom_scroll_size;\n\t\tvar view = node._custom_scroll_view;\n\t\tif (view) view = $$(view);\n\n\t\tif (config._scroll_x_node == node._scroll_drag_enabled){\n\t\t\tlet next = (pos.x - old.x)*config._vx/config._sx;\n\t\t\tif (view)\n\t\t\t\tview._x_scroll.scrollTo(view._scrollLeft+next);\n\t\t\telse\n\t\t\t\tCustomScroll._set_scroll_value(node, \"scrollLeft\", next);\n\t\t}\n\t\tif (config._scroll_y_node == node._scroll_drag_enabled){\n\t\t\tlet next = (pos.y - old.y)*config._vy/config._sy;\n\t\t\tif (view)\n\t\t\t\tview._y_scroll.scrollTo(view._scrollTop+next);\n\t\t\telse\n\t\t\t\tCustomScroll._set_scroll_value(node, \"scrollTop\", next);\n\t\t}\n\n\t\tnode._scroll_drag_pos = pos;\n\t\tCustomScroll._update_scroll(node);\n\t},\n\t_get_datatable_sizes:function(view){\n\t\tvar sizes = {};\n\t\tif (view._x_scroll && view._settings.scrollX){\n\t\t\tsizes.dx = view._x_scroll.getSize();\n\t\t\tsizes.px = view._x_scroll._last_set_size || 1;\n\t\t\tsizes._scroll_x = sizes.dx - sizes.px > 1;\n\t\t}\n\t\tif (view._y_scroll && view._settings.scrollY){\n\t\t\tsizes.dy = view._y_scroll.getSize();\n\t\t\tsizes.py = view._y_scroll._last_set_size || 1;\n\t\t\tsizes._scroll_y = sizes.dy - sizes.py > 1;\n\t\t}\n\t\treturn sizes;\n\t},\n\t_mouse_out:function(){\n\t\tclearTimeout(this._mouse_out_timer);\n\t\tthis._mouse_out_timer = delay(CustomScroll._mouse_out_timed, this, [], 200);\n\t},\n\t_removeScroll:function(scroll){\n\t\tif (scroll){\n\t\t\tremove(scroll);\n\t\t\tif (scroll._webix_event_sc1){\n\t\t\t\teventRemove(scroll._webix_event_sc1);\n\t\t\t\teventRemove(scroll._webix_event_sc2);\n\t\t\t\teventRemove(scroll._webix_event_sc3);\n\t\t\t}\n\t\t}\n\t},\n\t_mouse_out_timed:function(){\n\t\tif (this._custom_scroll_size){\n\t\t\tif (this._scroll_drag_enabled){\n\t\t\t\tthis._scroll_drag_released = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar sizes = this._custom_scroll_size;\n\t\t\tCustomScroll._removeScroll(sizes._scroll_x_node);\n\t\t\tCustomScroll._removeScroll(sizes._scroll_y_node);\n\t\t\tremoveCss(document.body,\"webix_noselect\");\n\t\t\tif(sizes._bar_x){\n\t\t\t\tremove(sizes._bar_x);\n\t\t\t}\n\t\t\tif(sizes._bar_y){\n\t\t\t\tremove(sizes._bar_y);\n\t\t\t}\n\t\t\tthis._custom_scroll_size = null;\n\t\t}\n\t},\n\t_mouse_wheel:function(e){\n\t\tvar sizes = this._custom_scroll_size;\n\t\tvar delta = e.wheelDelta/-40;\n\t\tvar toblock = false;\n\t\tif (!delta && e.detail && isUndefined(e.wheelDelta))\n\t\t\tdelta = e.detail;\n\t\tif (sizes){\n\t\t\tif(!e.scrolledBy)\n\t\t\t\te.scrolledBy = sizes._scroll_y ? \"y\" : \"x\";\n\n\t\t\tconst touchpadMoveX = e.wheelDeltaX && Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY);\n\t\t\tif (sizes._scroll_x_node && ((e.scrolledBy !== \"y\" && (e.wheelDeltaX || delta)) || touchpadMoveX)){\n\t\t\t\tvar x_dir = (e.wheelDeltaX/-40)||delta;\n\t\t\t\t//see below\n\t\t\t\ttoblock = CustomScroll._set_scroll_value(this, \"scrollLeft\", x_dir*CustomScroll.scrollStep);\n\t\t\t} else if (!touchpadMoveX && delta && sizes._scroll_y_node){\n\t\t\t\t//lesser flickering of scroll in IE\n\t\t\t\t//also prevent scrolling outside of borders because of scroll-html-elements\n\t\t\t\ttoblock = CustomScroll._set_scroll_value(this, \"scrollTop\", delta*CustomScroll.scrollStep);\n\t\t\t}\n\t\t}\n\n\t\tCustomScroll._update_scroll(this);\n\t\tif (toblock !== false){\n\t\t\treturn preventEvent(e);\n\t\t}\n\t},\n\t_set_scroll_value:function(node, pose, value){\n\t\tvar sizes = node._custom_scroll_size;\n\t\tvar max_scroll = (pose == \"scrollLeft\") ? (sizes.dx - sizes.px) : (sizes.dy - sizes.py);\n\t\tvar now = node[pose];\n\n\t\tif (now+value > max_scroll)\n\t\t\tvalue = max_scroll - now;\n\t\tif (!value || (now+value < 0 && now === 0))\n\t\t\treturn false;\n\t\t\n\t\t\n\t\tif (env.isIE){\n\t\t\tCustomScroll._update_scroll(node, pose, value + now);\n\t\t\tnode[pose] += value;\n\t\t} else\n\t\t\tnode[pose] += value;\n\n\t\treturn true;\n\t},\n\t_create_scroll:function(node, mode, dy, py, dim){\n\t\tvar scroll = create(\"DIV\", {\n\t\t\t/*@attr*/\"webixignore\":\"1\",\n\t\t\t\"class\":\"webix_c_scroll_\"+mode\n\t\t},\"<div></div>\");\n\n\t\tscroll.style[dim] = Math.max((py*py/dy-7),40)+\"px\";\n\t\tscroll.style[dim == \"height\"?\"top\":\"left\"] = \"0px\";\n\t\tnode.style.position = \"relative\";\n\t\tnode.appendChild(scroll);\n\t\tnode._webix_event_sc1 = event(scroll, \"mousedown\", CustomScroll._scroll_drag(node));\n\t\tnode._webix_event_sc2 = event(document.body, \"mouseup\", bind(CustomScroll._scroll_drop, node));\n\t\tnode._webix_event_sc3 = event(document.body, \"mouseleave\", bind(CustomScroll._scroll_drop, node));\n\t\treturn scroll;\n\t},\n\t_scroll_drag:function(node){\n\t\treturn function(e){\n\t\t\taddCss(document.body,\"webix_noselect\",1);\n\t\t\tthis.className += \" webix_scroll_active\";\n\t\t\tCustomScroll._active_drag_area = node;\n\t\t\tnode._scroll_drag_enabled = this;\n\t\t\tnode._scroll_drag_pos = getPos(e);\n\t\t};\n\t},\n\t_scroll_drop:function(){\n\t\tif (this._scroll_drag_enabled){\n\t\t\tremoveCss(document.body,\"webix_noselect\");\n\t\t\tthis._scroll_drag_enabled.className = this._scroll_drag_enabled.className.toString().replace(\" webix_scroll_active\",\"\");\n\t\t\tthis._scroll_drag_enabled = false;\n\t\t\tCustomScroll._active_drag_area = 0;\n\t\t\tif (this._scroll_drag_released){\n\t\t\t\tCustomScroll._mouse_out_timed.call(this);\n\t\t\t\tthis._scroll_drag_released = false;\n\t\t\t}\n\t\t}\n\t},\n\t_update_scroll:function(node, pose, value){\n\t\tvar sizes = node._custom_scroll_size;\n\t\tif (sizes && (sizes._scroll_x_node||sizes._scroll_y_node)){\n\t\t\tvar view = node._custom_scroll_view;\n\n\t\t\tvar left_scroll = pose == \"scrollLeft\" ? value : node.scrollLeft;\n\t\t\tvar left = view?$$(view)._scrollLeft:left_scroll;\n\t\t\tvar shift_left = view?0:left;\n\n\t\t\tvar top_scroll = pose == \"scrollTop\" ? value : node.scrollTop;\n\t\t\tvar top = view?($$(view)._scrollTop):top_scroll;\n\t\t\tvar shift_top = view?0:top;\n\n\t\t\tif (sizes._scroll_x_node){\n\t\t\t\tsizes._scroll_x_node.style.bottom = 1 - shift_top + \"px\";\n\t\t\t\tsizes._scroll_x_node.style.left = Math.round(sizes._sx*left/(sizes.dx-sizes.px)) + shift_left + 1 +\"px\";\n\t\t\t\tif(sizes._bar_x){\n\t\t\t\t\tsizes._bar_x.style.bottom = 1 - shift_top + \"px\";\n\t\t\t\t\tsizes._bar_x.style.left = shift_left + \"px\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (sizes._scroll_y_node){\n\t\t\t\tsizes._scroll_y_node.style.right = 0 - shift_left + \"px\";\n\t\t\t\tsizes._scroll_y_node.style.top = Math.round(sizes._sy*top/(sizes.dy-sizes.py)) + shift_top + 1 + \"px\";\n\t\t\t\tif(sizes._bar_y){\n\t\t\t\t\tsizes._bar_y.style.right = 0 - shift_left + \"px\";\n\t\t\t\t\tsizes._bar_y.style.top = shift_top + \"px\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t_set_additional_handlers:function(view){\n\t\t// update scroll when showing view\n\t\tif (view.attachEvent)\n\t\t\tview.attachEvent(\"onViewShow\", () => this._resize_scroll(view));\n\n\t\t// update scroll on data change\n\t\tif (view.data && view.data.attachEvent)\n\t\t\tview.data.attachEvent(\"onStoreUpdated\", () => this._resize_scroll(view));\n\t},\n\t_resize_scroll:function(view){\n\t\tconst node = CustomScroll._last_active_node;\n\t\tif (node && view.$view.contains(node))\n\t\t\tCustomScroll._on_reconstruct();\n\t\telse\n\t\t\tCustomScroll._mouse_out_timed.call(view.$view);\n\t}\n};\n\nexport default CustomScroll;","const DataMarks = {\n\taddCss:function(id, css, silent){\n\t\tif (!this.addRowCss && !silent){\n\t\t\tif (!this.hasCss(id, css)){\n\t\t\t\tvar node = this.getItemNode(id);\n\t\t\t\tif (node){\n\t\t\t\t\tnode.className += \" \"+css;\n\t\t\t\t\tsilent = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this.data.addMark(id, css, 1, 1, silent);\n\t},\n\tremoveCss:function(id, css, silent){\n\t\tif (!this.addRowCss && !silent){\n\t\t\tif (this.hasCss(id, css)){\n\t\t\t\tvar node = this.getItemNode(id);\n\t\t\t\tif (node){\n\t\t\t\t\tnode.className = node.className.replace(css,\"\").replace(\"  \",\" \");\n\t\t\t\t\tsilent = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this.data.removeMark(id, css, 1, silent);\n\t},\n\thasCss:function(id, mark){\n\t\treturn this.data.getMark(id, mark);\n\t},\n\tclearCss:function(css, silent){\n\t\treturn this.data.clearMark(css, 1, silent);\n\t}\n};\n\nexport default DataMarks;","import {isArray, extend, uid} from \"../webix/helpers\";\nimport {assert} from \"../webix/debug\";\n\n\n/*\n\tBehavior:DataMove - allows to move and copy elements, heavily relays on DataStore.move\n\t@export\n\t\tcopy\n\t\tmove\n*/\nconst DataMove ={\n\t//creates a copy of the item\n\tcopy:function(sid,tindex,tobj, details){\n\t\tdetails = details || {};\n\t\tvar new_id = details.newId || sid;\n\t\ttobj = tobj||this;\n\n\t\tvar data = this.getItem(sid);\n\t\tassert(data,\"Incorrect ID in DataMove::copy\");\n\t\t\n\t\t//make data conversion between objects\n\t\tif (tobj)\n\t\t\tdata = tobj._externalData(data);\n\t\t\n\t\t//adds new element same as original\n\t\treturn tobj.data.add(tobj._externalData(data,new_id),tindex,(details.parent || 0));\n\t},\n\t_next_move_index:function(nid, next, source){\n\t\tif (next && nid){\n\t\t\tvar new_index = this.getIndexById(nid);\n\t\t\treturn new_index + ((source == this && source.getIndexById(next) < new_index) ? 0 : 1);\n\t\t}\n\t},\n\t//move item to the new position\n\tmove:function(sid,tindex,tobj, details){\n\t\tdetails = details || {};\n\t\tvar new_id = details.newId || sid;\n\n\t\ttobj = tobj||this;\n\t\tassert(tobj.data, \"moving attempt to component without datastore\");\n\t\tif (!tobj.data) return;\n\n\t\t//can process an arrya - it allows to use it from onDrag \n\t\tif (isArray(sid)){\n\t\t\t//block separate repaint operations\n\t\t\tif (sid.length > 3) //heuristic value, duplicated below\n\t\t\t\tthis.$blockRender = tobj.$blockRender = true;\n\n\t\t\tfor (var i=0; i < sid.length; i++) {\n\t\t\t\t//increase index for each next item in the set, so order of insertion will be equal to order in the array\n\t\t\t\tconst nid = this.move(sid[i], tindex, tobj, details);\n\t\t\t\ttindex = tobj._next_move_index(nid, sid[i+1], this);\n\t\t\t}\n\n\t\t\tthis.$blockRender = tobj.$blockRender = false;\n\t\t\tif (sid.length > 3){\n\t\t\t\t//repaint whole component\n\t\t\t\tthis.refresh();\n\t\t\t\tif (tobj != this)\n\t\t\t\t\ttobj.refresh();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tlet nid = sid; //id after moving\n\n\t\tvar data = this.getItem(sid);\n\t\tassert(data,\"Incorrect ID in DataMove::move\");\n\t\t\n\t\tif (!tobj || tobj == this){\n\t\t\tif (tindex < 0) tindex = this.data.order.length - 1;\n\t\t\tthis.data.move(this.getIndexById(sid),tindex);\t//move inside the same object\n\t\t\tthis.data.callEvent(\"onDataMove\", [sid, tindex, null, this.data.order[tindex+1]]);\n\t\t} else {\n\t\t\t//copy to the new object\n\t\t\tnid = tobj.data.add(tobj._externalData(data,new_id),tindex, (details.parent || 0));\n\t\t\tthis.data.remove(sid);//delete in old object\n\t\t}\n\t\treturn nid;\t//return ID of item after moving\n\t},\n\t//move item on one position up\n\tmoveUp:function(id,step){\n\t\tconst index = this.getIndexById(id)-(step||1);\n\t\treturn this.move(id,(index<0)?0:index);\n\t},\n\t//move item on one position down\n\tmoveDown:function(id,step){\n\t\treturn this.moveUp(id, (step||1)*-1);\n\t},\n\t//move item to the first position\n\tmoveTop:function(id){\n\t\treturn this.move(id,0);\n\t},\n\t//move item to the last position\n\tmoveBottom:function(id){\n\t\treturn this.move(id,this.data.count()-1);\n\t},\n\t/*\n\t\tthis is a stub for future functionality\n\t\tcurrently it just makes a copy of data object, which is enough for current situation\n\t*/\n\t_externalData:function(data,id){\n\t\tvar newdata = extend({},data);\n\t\tnewdata.id = (!id || this.data.pull[id])?uid():id;\n\t\t\n\n\t\tnewdata.$template=null;\n\n\t\tif (this._settings.externalData)\n\t\t\tnewdata = this._settings.externalData.call(this, newdata, id, data);\n\t\treturn newdata;\n\t}\n};\n\nexport default DataMove;","const rules = {\n\tisEmail: function(value){\n\t\treturn (/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/).test((value || \"\").toString());\n\t},\n\tisNumber: function(value){\n\t\treturn (parseFloat(value) == value);\n\t},\n\tisChecked: function(value){\n\t\treturn (!!value) || value === \"0\";\n\t},\n\tisNotEmpty: function(value){\n\t\treturn (value === 0 || value);\n\t}\n};\n\nexport default rules;","import {assert} from \"../webix/debug\";\nimport CodeParser from \"../core/codeparser\";\nimport rules from \"../webix/rules\";\n\n\n\nconst ValidateData = {\n\t$init:function(){\n\t\tif(this._events)\n\t\t\tthis.attachEvent(\"onChange\",this.clearValidation);\n\t},\n\tclearValidation:function(){\n\t\tif(this.elements){\n\t\t\tfor(var id in this.elements){\n\t\t\t\tthis._clear_invalid(id);\n\t\t\t}\n\t\t}\n\t},\n\tvalidate:function(mode, obj) {\n\t\tassert(this.callEvent, \"using validate for eventless object\");\n\t\t\n\t\tthis.callEvent(\"onBeforeValidate\", []);\n\n\t\tvar failed = this._validate_details = {};\n\n\t\t//optimistic by default :) \n\t\tvar result =true;\n\t\tvar rules = this._settings.rules;\n\t\t\n\t\tvar isHidden = this.isVisible && !this.isVisible();\n\t\tvar validateHidden = mode && mode.hidden;\n\t\tvar validateDisabled = mode && mode.disabled;\n\n\t\t//prevent validation of hidden elements\n\t\tvar elements = {}, hidden = {};\n\t\tfor(var i in this.elements){\n\t\t\tvar name = this.elements[i].config.name;\n\t\t\t//we are ignoring hidden and disabled fields during validation\n\t\t\t//if mode doesn not instruct us otherwise\n\t\t\t//if form itself is hidden, we can't separate hidden fiels,\n\t\t\t//so we will vaidate all fields\n\t\t\tif((isHidden || this.elements[i].isVisible() || validateHidden) && (this.elements[i].isEnabled() || validateDisabled))\n\t\t\t\telements[name] = this.elements[i];\n\t\t\telse{\n\t\t\t\thidden[name]=true;\n\t\t\t}\n\t\t}\n\t\tif (rules || elements)\n\t\t\tif(!obj && this.getValues)\n\t\t\t\tobj = this.getValues();\n\n\t\tif (rules){\n\t\t\t//complex rule, which may chcek all properties of object\n\t\t\tif (rules.$obj)\n\t\t\t\tresult = this._validate(rules.$obj, obj, obj, \"\") && result;\n\t\t\t\n\t\t\t//all - applied to all fields\n\t\t\tvar all = rules.$all;\n\t\t\tvar data = obj;\n\n\t\t\tif (this._settings.complexData)\n\t\t\t\tdata = CodeParser.collapseNames(obj, \"\", {}, (v) => !rules[v]);\n\n\t\t\tif (all)\n\t\t\t\tfor (let key in obj){\n\t\t\t\t\tif(hidden[key]) continue;\n\t\t\t\t\tlet subresult = this._validate(all, data[key], obj, key);\n\t\t\t\t\tif (!subresult)\n\t\t\t\t\t\tfailed[key] = true;\n\t\t\t\t\tresult =  subresult && result;\n\t\t\t\t}\n\n\n\t\t\t//per-field rules\n\t\t\tfor (let key in rules){\n\t\t\t\tif(hidden[key]) continue;\n\t\t\t\tif (key.indexOf(\"$\")!==0 && !failed[key]){\n\t\t\t\t\tassert(rules[key], \"Invalid rule for:\"+key);\n\t\t\t\t\tlet subresult = this._validate(rules[key], data[key], obj, key);\n\t\t\t\t\tif (!subresult)\n\t\t\t\t\t\tfailed[key] = true;\n\t\t\t\t\tresult = subresult && result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t//check personal validation rules\n\t\tif (elements){\n\t\t\tfor (var key in elements){\n\t\t\t\tif (failed[key]) continue;\n\n\t\t\t\tvar subview = elements[key];\n\t\t\t\tif (subview.validate){\n\t\t\t\t\tlet subresult = subview.validate();\n\t\t\t\t\tresult = subresult && result;\n\t\t\t\t\tif (!subresult)\n\t\t\t\t\t\tfailed[key] = true;\n\t\t\t\t} else {\n\t\t\t\t\tvar input = subview._settings;\n\t\t\t\t\tif (input){\t//ignore non webix inputs\n\t\t\t\t\t\tvar validator = input.validate;\n\t\t\t\t\t\tif (!validator && input.required)\n\t\t\t\t\t\t\tvalidator = rules.isNotEmpty;\n\n\t\t\t\t\t\tif (validator){\n\t\t\t\t\t\t\tlet subresult = this._validate(validator, obj[key], obj, key);\n\t\t\t\t\t\t\tif (!subresult)\n\t\t\t\t\t\t\t\tfailed[key] = true;\n\t\t\t\t\t\t\tresult = subresult && result;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\n\t\tthis.callEvent(\"onAfterValidation\", [result, this._validate_details]);\n\t\treturn result;\n\t},\n\t_validate:function(rule, data, obj, key){\n\t\tif (typeof rule == \"string\")\n\t\t\trule = rules[rule];\n\t\tif (rule.call(this, data, obj, key)){\n\t\t\tif(this.callEvent(\"onValidationSuccess\",[key, obj]) && this._clear_invalid)\n\t\t\t\tthis._clear_invalid(key);\n\t\t\treturn true;\n\t\t}\n\t\telse {\n\t\t\tif(this.callEvent(\"onValidationError\",[key, obj]) && this._mark_invalid)\n\t\t\t\tthis._mark_invalid(key);\n\t\t}\n\t\treturn false;\n\t}\n};\n\nexport default ValidateData;","import {assert} from \"../webix/debug\";\nimport {copy, isUndefined, bind, isArray} from \"../webix/helpers\";\nimport {callEvent} from \"../webix/customevents\";\nimport {define} from \"../services\";\n\nimport {$$, proto} from \"../ui/core\";\n\nimport {ajax} from \"../load/ajax\";\nimport proxy from \"../load/proxy\";\nimport promise from \"../thirdparty/promiz\";\n\nimport Settings from \"../core/settings\";\nimport EventSystem from \"../core/eventsystem\";\nimport ValidateData from \"../core/validatedata\";\n\nconst _pull = {};\n\nexport function dp(name,getOnly){\n\tif (typeof name == \"object\" && name._settings)\n\t\tname = name._settings.id;\n\tif (_pull[name] || getOnly)\n\t\treturn _pull[name];\n\n\tif (typeof name == \"string\"||typeof name == \"number\")\n\t\tname = { master:$$(name) };\n\n\tvar dp = new DataProcessor(name);\n\tvar masterId = dp._settings.master._settings.id;\n\t_pull[masterId]=dp;\n\n\t$$(masterId).attachEvent(\"onDestruct\",function(){\n\t\t_pull[this._settings.id] = null;\n\t\tdelete _pull[this._settings.id];\n\t});\n\n\treturn dp;\n}\n\ndefine(\"dp\", dp);\n\ndp.$$ = function(id){\n\treturn _pull[id];\n};\n\n\nexport const DataProcessor = proto({\n\tdefaults: {\n\t\tautoupdate:true,\n\t\tupdateFromResponse:false,\n\t\tmode:\"post\",\n\t\toperationName:\"webix_operation\",\n\t\ttrackMove:false\n\t},\n\n\n\t/*! constructor\n\t **/\n\t$init: function() {\n\t\tthis.reset();\n\t\tthis._ignore = false;\n\t\tthis.name = \"DataProcessor\";\n\t\tthis.$ready.push(this._after_init_call);\n\t},\n\treset:function(){\n\t\tthis._updates = [];\n\t},\n\turl_setter:function(value){\n\t\t/*\n\t\t\twe can use simple url or mode->url\n\t\t*/\n\t\tvar mode = \"\";\n\t\tif (typeof value == \"string\"){\n\t\t\tvar parts = value.split(\"->\");\n\t\t\tif (parts.length > 1){\n\t\t\t\tvalue = parts[1];\n\t\t\t\tmode = parts[0];\n\t\t\t}\n\t\t} else if (value && value.mode){\n\t\t\tmode = value.mode;\n\t\t\tvalue = value.url;\n\t\t}\n\n\t\tif (mode)\n\t\t\treturn proxy(mode, value);\n\n\t\treturn value;\n\t},\n\tmaster_setter:function(value){\n\t\tvar store = value;\n\t\tif (value.name != \"DataStore\")\n\t\t\tstore = value.data;\n\n\t\tthis._settings.store = store;\n\t\treturn value;\n\t},\n\t_promise:function(handler){\n\t\tconst prev = this._waitSave;\n\t\tthis._waitSave = [];\n\t\t\n\t\thandler();\n\t\tconst result = Promise.all(this._waitSave);\n\n\t\tthis._waitSave = prev;\n\t\tif (prev)\n\t\t\tprev.push(result);\n\n\t\treturn result;\n\t},\n\t/*! attaching onStoreUpdated event\n\t **/\n\t_after_init_call: function(){\n\t\tconst store = this._settings.store;\n\t\tif (store){\n\t\t\tstore.attachEvent(\"onStoreUpdated\", bind(this._onStoreUpdated, this));\n\t\t\tstore.attachEvent(\"onDataMove\", bind(this._onDataMove, this));\n\t\t}\n\t},\n\tignore:function(code,master){\n\t\tvar temp = this._ignore;\n\t\tthis._ignore = true;\n\t\tcode.call((master||this));\n\t\tthis._ignore = temp;\n\t},\n\toff:function(){\n\t\tthis._ignore = true;\n\t},\n\ton:function(){\n\t\tthis._ignore = false;\n\t},\n\n\t_copy_data:function(source){\n\t\tvar obj = {};\n\t\tfor (var key in source)\t\n\t\t\tif (key.indexOf(\"$\")!==0)\n\t\t\t\tobj[key]=source[key];\n\t\treturn obj;\n\t},\n\tsave:function(id, operation, obj){\n\t\toperation = operation || \"update\";\n\t\treturn this._save_inner(id, obj, operation, true);\n\t},\n\t_save_inner:function(id, obj, operation, now){\n\t\tif (typeof id == \"object\") id = id.toString();\n\t\tif (!id || this._ignore === true || !operation || operation == \"paint\") return;\n\n\t\tvar store = this._settings.store;\n\t\tif (store){\n\t\t\tobj = obj || this._settings.store.getItem(id);\n\t\t\tif (store._scheme_serialize)\n\t\t\t\tobj = store._scheme_serialize(obj);\n\t\t}\n\n\t\tvar update = { id: id, data:this._copy_data(obj), operation:operation };\n\t\t//save parent id\n\t\tif (!isUndefined(obj.$parent)) update.data.parent = obj.$parent;\n\n\t\tif (update.operation != \"delete\"){\n\t\t\t//prevent saving of not-validated records\n\t\t\tvar master = this._settings.master;\n\t\t\tif (master && master.data && master.data.getMark && master.data.getMark(id, \"webix_invalid\"))\n\t\t\t\tupdate._invalid = true;\n\n\t\t\tif (!this.validate(null, update.data))\n\t\t\t\tupdate._invalid = true;\n\t\t}\n\n\t\tif (this._check_unique(update))\n\t\t\tthis._updates.push(update);\n\n\t\tif (this._settings.autoupdate || now)\n\t\t\treturn this._sendData(id);\n\t\t\t\n\t\treturn;\n\t},\n\t_onDataMove:function(sid, tindex, parent, targetid){\n\t\tif (this._settings.trackMove){\n\t\t\tvar obj = copy(this._settings.store.getItem(sid));\n\n\t\t\tobj.webix_move_index = tindex;\n\t\t\tobj.webix_move_id = targetid;\n\t\t\tobj.webix_move_parent = parent;\n\t\t\tthis._save_inner(sid, obj, \"order\");\n\t\t}\n\t},\n\t_onStoreUpdated: function(id, obj, operation){\n\t\tswitch (operation) {\n\t\t\tcase \"save\":\n\t\t\t\toperation = \"update\";\n\t\t\t\tbreak;\n\t\t\tcase \"update\":\n\t\t\t\toperation = \"update\";\n\t\t\t\tbreak;\n\t\t\tcase \"add\":\n\t\t\t\toperation = \"insert\";\n\t\t\t\tbreak;\n\t\t\tcase \"delete\":\n\t\t\t\toperation = \"delete\";\t\t\t\t\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn this._save_inner(id, obj, operation);\n\t},\n\t_check_unique:function(check){\n\t\tfor (var i = 0; i < this._updates.length; i++){\n\t\t\tvar one = this._updates[i];\n\t\t\tif (one.id == check.id && !one._in_progress){\n\t\t\t\tif (check.operation == \"delete\"){\n\t\t\t\t\tif (one.operation == \"insert\")\n\t\t\t\t\t\tthis._updates.splice(i,1);\n\t\t\t\t\telse \n\t\t\t\t\t\tone.operation = \"delete\";\n\t\t\t\t}\n\t\t\t\tone.data = check.data;\n\t\t\t\tone._invalid = check._invalid;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\tsend:function(){\n\t\treturn this._sendData();\n\t},\n\t_sendData: function(triggerId){\n\t\tif (!this._settings.url)\n\t\t\treturn;\n\n\t\tvar wait;\n\t\tvar marked = this._updates;\n\t\tvar to_send = [];\n\t\tvar url = this._settings.url;\n\n\t\tfor (let i = 0; i < marked.length; i++) {\n\t\t\tvar tosave = marked[i];\n\n\t\t\tif (tosave._in_progress) continue;\n\t\t\tif (tosave._invalid) continue;\n\n\t\t\tvar id = tosave.id;\n\t\t\t// call to .save(id) without autoupdate mode will send the specific object only\n\t\t\tif (!this._settings.autoupdate && triggerId && triggerId != id)\n\t\t\t\tcontinue;\n\n\t\t\tvar operation = tosave.operation;\n\t\t\tvar precise_url = proxy.$parse((typeof url == \"object\" && !url.$proxy) ? url[operation] : url);\n\t\t\tvar custom = precise_url && (precise_url.$proxy || typeof precise_url === \"function\");\n\n\t\t\tif (!precise_url) continue;\n\n\t\t\tconst store = this._settings.store;\n\t\t\tif (store && store._scheme_save)\n\t\t\t\tstore._scheme_save(tosave.data);\n\n\t\t\tif (!this.callEvent(\"onBefore\"+operation, [id, tosave]))\n\t\t\t\tcontinue;\n\t\t\ttosave._in_progress = true;\n\n\t\t\tif (!this.callEvent(\"onBeforeDataSend\", [tosave])) return;\n\n\t\t\ttosave.data = this._updatesData(tosave.data);\n\n\t\t\tlet result;\n\t\t\tif (precise_url.$proxy){\n\t\t\t\tif (precise_url.save){\n\t\t\t\t\t//proxy\n\t\t\t\t\tresult = precise_url.save(this.config.master, tosave, this);\n\t\t\t\t}\n\t\t\t\tto_send.push(tosave);\n\t\t\t} else {\n\t\t\t\tif (operation == \"insert\")\n\t\t\t\t\tdelete tosave.data.id;\n\t\t\t\t\n\t\t\t\tif (custom){\n\t\t\t\t\t//save function\n\t\t\t\t\tresult = precise_url.call(this.config.master, tosave.id, tosave.operation, tosave.data);\n\t\t\t\t} else {\n\t\t\t\t\t//normal url\n\t\t\t\t\ttosave.data[this._settings.operationName] = operation;\n\n\t\t\t\t\tresult = this._send(precise_url, tosave.data, this._settings.mode);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (result){\n\t\t\t\tresult = this._proxy_on_save(result, { id: tosave.id, status: tosave.operation });\n\t\t\t\tif (triggerId && id === triggerId){\n\t\t\t\t\twait = result;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.callEvent(\"onAfterDataSend\", [tosave]);\n\t\t}\n\n\t\tif (url.$proxy && url.saveAll && to_send.length){\n\t\t\tlet result = url.saveAll(this.config.master, to_send, this);\n\t\t\tif (result){\n\t\t\t\tresult = this._proxy_on_save(result, null);\n\t\t\t\tif (!wait)\n\t\t\t\t\twait = result;\n\t\t\t}\n\t\t}\n\n\t\treturn wait;\n\t},\n\t_proxy_on_save:function(result, state){\n\t\tif(result){\n\t\t\tif(!result.then)\n\t\t\t\tresult = promise.resolve(result);\n\n\t\t\tresult = result.then((data) => {\n\t\t\t\tif (data && typeof data.json == \"function\")\n\t\t\t\t\tdata = data.json();\n\n\t\t\t\tvar processed;\n\t\t\t\tif (state === null){\n\t\t\t\t\tprocessed = this._processResult(data); //array of responses\n\t\t\t\t} else {\n\t\t\t\t\tprocessed = this._processResult(state, \"\", data, -1); //text, data, loader\n\t\t\t\t}\n\n\t\t\t\tif (!processed)\n\t\t\t\t\tthrow processed; // trigger rejection\n\n\t\t\t\treturn processed;\n\t\t\t}, (x) => {\n\t\t\t\tthis._processError(state, \"\", null, x);\n\t\t\t\tthrow x;\n\t\t\t});\n\n\t\t\tif (this._waitSave)\n\t\t\t\tthis._waitSave.push(result);\n\n\t\t\treturn result;\n\t\t}\n\t},\n\n\t/*! process updates list to POST and GET params according dataprocessor protocol\n\t *\t@param updates\n\t *\t\tlist of objects { id: \"item id\", data: \"data hash\", operation: \"type of operation\"}\n\t *\t@return\n\t *\t\tobject { post: { hash of post params as name: value }, get: { hash of get params as name: value } }\n\t **/\n\n\n\n\t_updatesData:function(source){\n\t\tvar target = {};\n\t\tfor (var j in source){\n\t\t\tif (j.indexOf(\"$\")!==0)\n\t\t\t\ttarget[j] = source[j];\n\t\t}\n\t\treturn target;\n\t},\n\n\n\n\t/*! send dataprocessor query to server\n\t *\tand attach event to process result\n\t *\t@param url\n\t *\t\tserver url\n\t *\t@param get\n\t *\t\thash of get params\n\t *\t@param post\n\t *\t\thash of post params\n\t *\t@mode\n\t *\t\t'post' or 'get'\n\t **/\n\t_send: function(url, post, mode) {\n\t\tassert(url, \"url was not set for DataProcessor\");\n\t\treturn ajax()[mode](url, post);\n\t},\n\tattachProgress:function(start, end, error){\n\t\tthis.attachEvent(\"onBeforeDataSend\", start);\n\t\tthis.attachEvent(\"onAfterSync\", end);\n\t\tthis.attachEvent(\"onAfterSaveError\", error);\n\t\tthis.attachEvent(\"onLoadError\", error);\n\t},\n\t_processError:function(id, text, data, loader){\n\t\tif (id)\n\t\t\tthis._innerProcessResult(true, id.id, false, id.status, false, {text:text, data:data, loader:loader});\n\t\telse {\n\t\t\tthis.callEvent(\"onLoadError\", arguments);\n\t\t\tcallEvent(\"onLoadError\", [text, data, loader, this]);\n\t\t}\n\t},\n\t_innerProcessResult:function(error, id, newid, status, obj, details){\n\t\tvar master = this._settings.master;\n\t\tvar update = this.getItemState(id);\n\t\tupdate._in_progress = false;\n\n\n\n\t\tif (error){\n\t\t\tif (this.callEvent(\"onBeforeSaveError\", [id, status, obj, details])){\n\t\t\t\tupdate._invalid = true;\n\t\t\t\tif(this._settings.undoOnError && master._settings.undo){\n\t\t\t\t\tthis.ignore(function(){\n\t\t\t\t\t\tmaster.undo(id);\n\t\t\t\t\t});\n\t\t\t\t\tthis.setItemState(id, false);\n\t\t\t\t}\n\t\t\t\tthis.callEvent(\"onAfterSaveError\", [id, status, obj, details]);\n\t\t\t}\n\t\t\treturn;\n\t\t} else\n\t\t\tthis.setItemState(id, false);\n\n\t\tconst store = this._settings.store;\n\t\tif (store && store.exists(id)){\n\t\t\t//update from response\n\t\t\tif (newid && id != newid)\n\t\t\t\tstore.changeId(id, newid);\n\n\t\t\tif (obj && status != \"delete\" && this._settings.updateFromResponse)\n\t\t\t\tthis.ignore(function(){\t\t\t\t\n\t\t\t\t\tstore.updateItem(newid || id, obj);\n\t\t\t\t});\n\t\t}\n\t\t\t\n\n\t\t//clean undo history, for the saved record\n\t\tif(this._settings.undoOnError && master._settings.undo)\n\t\t\tmaster.removeUndo(newid||id);\n\n\t\tthis.callEvent(\"onAfterSave\",[obj, id, details]);\n\t\tthis.callEvent(\"onAfter\"+status, [obj, id, details]);\n\n\t\treturn obj || {};\n\t},\n\tprocessResult: function(state, hash, details){\n\t\t//compatibility with custom json response\n\t\tvar error = (hash && (hash.status == \"error\" || hash.status == \"invalid\"));\n\t\tvar newid = (hash ? ( hash.newid || hash.id ) : false);\n\n\t\treturn this._innerProcessResult(error, state.id, newid, state.status, hash, details);\n\t},\n\t// process saving from result\n\t_processResult: function(state, text, data, loader){\n\t\tvar finalResult;\n\t\tthis.callEvent(\"onBeforeSync\", [state, text, data, loader]);\n\n\t\tif(isArray(state)){ //saveAll results\n\t\t\tfinalResult = [];\n\t\t\tstate.forEach((one) => {\n\t\t\t\tfinalResult.push(this.processResult(one, one, {}));\n\t\t\t});\n\t\t}\n\t\telse{\n\t\t\tif (loader === -1){\n\t\t\t\t//callback from promise\n\t\t\t\tfinalResult = this.processResult(state, data, {});\n\t\t\t} else {\n\t\t\t\tvar proxy = this._settings.url;\n\t\t\t\tif (proxy.$proxy && proxy.result){\n\t\t\t\t\tfinalResult = proxy.result(state, this._settings.master, this, text,  data, loader) || {};\n\t\t\t\t} else {\n\t\t\t\t\tvar hash;\n\t\t\t\t\tif (text){\n\t\t\t\t\t\thash = data.json();\n\t\t\t\t\t\t//invalid response\n\t\t\t\t\t\tif (text && (hash === null || typeof hash == \"undefined\"))\n\t\t\t\t\t\t\thash = { status:\"error\" };\n\t\t\t\t\t}\n\t\t\t\t\tfinalResult = this.processResult(state, hash,  {text:text, data:data, loader:loader});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.callEvent(\"onAfterSync\", [state, text, data, loader]);\n\t\treturn finalResult;\n\t},\n\n\n\t/*! if it's defined escape function - call it\n\t *\t@param value\n\t *\t\tvalue to escape\n\t *\t@return\n\t *\t\tescaped value\n\t **/\n\tescape: function(value) {\n\t\tif (this._settings.escape)\n\t\t\treturn this._settings.escape(value);\n\t\telse\n\t\t\treturn encodeURIComponent(value);\n\t},\n\tgetState:function(){\n\t\tif (!this._updates.length) return false;\n\t\tfor (var i = this._updates.length - 1; i >= 0; i--)\n\t\t\tif (this._updates[i]._in_progress)\n\t\t\t\treturn \"saving\";\n\n\t\treturn true;\n\t},\n\tgetItemState:function(id){\n\t\tvar index = this._get_stack_index(id);\n\t\treturn this._updates[index] || null;\n\t},\n\tsetItemState:function(id, state){\n\t\tif (state){\n\t\t\tthis._save_inner(id, null, \"update\");\n\t\t} else{\n\t\t\tvar index = this._get_stack_index(id);\n\t\t\tif (index > -1)\n\t\t\t\tthis._updates.splice(index, 1);\n\t\t}\n\t},\n\t_get_stack_index: function(id) {\n\t\tvar index = -1;\n\t\tfor (var i=0; i < this._updates.length; i++)\n\t\t\tif (this._updates[i].id == id) {\n\t\t\t\tindex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\treturn index;\n\t}\n\n}, Settings, EventSystem, ValidateData);","import {extend, _to_array, uid, isUndefined, copy, isArray, bind} from \"../webix/helpers\";\nimport {$$} from \"../ui/core\";\nimport {assert} from \"../webix/debug\";\nimport {callEvent} from \"../webix/customevents\";\n\nimport EventSystem from \"./eventsystem\";\nimport DataDriver from \"../load/drivers/index\";\n\n\n\n\n/*\n\tDataStore is not a behavior, it standalone object, which represents collection of data.\n\tCall provideAPI to map data API\n\n\t@export\n\t\texists\n\t\tgetIdByIndex\n\t\tgetIndexById\n\t\tget\n\t\tset\n\t\trefresh\n\t\tcount\n\t\tsort\n\t\tfilter\n\t\tnext\n\t\tprevious\n\t\tclearAll\n\t\tfirst\n\t\tlast\n*/\n\nfunction DataStore(){\n\tthis.name = \"DataStore\";\n\t\n\textend(this, EventSystem);\n\n\tthis.setDriver(\"json\");\t//default data source is an\n\tthis.pull = {};\t\t\t\t\t\t//hash of IDs\n\tthis.order = _to_array();\t\t//order of IDs\n\tthis._marks = {};\n}\n\nDataStore.prototype={\n\t//defines type of used data driver\n\t//data driver is an abstraction other different data formats - xml, json, csv, etc.\n\tsetDriver:function(type){\n\t\tassert(DataDriver[type],\"incorrect DataDriver\");\n\t\tthis.driver = DataDriver[type];\n\t},\n\t//process incoming raw data\n\t_parse:function(data){\n\t\tthis.callEvent(\"onParse\", [this.driver, data]);\n\n\t\tif (this._filter_order)\n\t\t\tthis.filter();\n\t\n\t\t//get size and position of data\n\t\tvar info = this.driver.getInfo(data);\n\n\t\tif (info.config)\n\t\t\tthis.callEvent(\"onServerConfig\",[info.config]);\n\n\t\tvar options = this.driver.getOptions(data);\n\t\tif (options)\n\t\t\tthis.callEvent(\"onServerOptions\", [options]);\n\n\t\t//get array of records\n\t\tvar recs = this.driver.getRecords(data);\n\n\t\tthis._inner_parse(info, recs);\n\n\t\t//in case of tree store we may want to group data\n\t\tif (this._scheme_group && this._group_processing && !this._not_grouped_order)\n\t\t\tthis._group_processing(this._scheme_group);\n\n\t\t//optional data sorting\n\t\tif (this._scheme_sort){\n\t\t\tthis.blockEvent();\n\t\t\tthis.sort(this._scheme_sort);\n\t\t\tthis.unblockEvent();\n\t\t}\n\n\t\tthis.callEvent(\"onStoreLoad\",[this.driver, data]);\n\t\t//repaint self after data loading\n\t\tthis.refresh();\n\t},\n\t_inner_parse:function(info, recs){\n\t\tvar from = info.from;\n\t\tvar subload = true;\n\t\tvar marks = false;\n\n\t\t//some data is loaded and new data doesn't have \"pos\" - assuming update\n\t\tif (!from && from !== 0 && this.order[0]){\n\t\t\tif (this._removeMissed){\n\t\t\t\t//update mode, create kill list\n\t\t\t\tmarks = {};\n\t\t\t\tfor (let i=0; i<this.order.length; i++)\n\t\t\t\t\tmarks[this.order[i]]=true;\n\t\t\t}\n\t\t\t\n\t\t\tsubload = false;\n\t\t\tfrom = this.order.length;\n\t\t} else \n\t\t\tfrom = (from || 0)*1;\n\n\t\tvar j=0;\n\t\tfor (let i=0; i<recs.length; i++){\n\t\t\t//get hash of details for each record\n\t\t\tvar temp = this.driver.getDetails(recs[i]);\n\t\t\tvar id = this.id(temp); \t//generate ID for the record\n\t\t\tif (!this.pull[id]){\t\t//if such ID already exists - update instead of insert\n\t\t\t\tthis.order[j+from]=id;\t\n\t\t\t\tj++;\n\t\t\t} else if (subload && this.order[j+from])\n\t\t\t\tj++;\n\n\t\t\tif(this.pull[id]){\n\t\t\t\textend(this.pull[id],temp,true);//add only new properties\n\t\t\t\tif (this._scheme_update)\n\t\t\t\t\tthis._scheme_update(this.pull[id]);\n\t\t\t\t//update mode, remove item from kill list\n\t\t\t\tif (marks)\n\t\t\t\t\tdelete marks[id];\n\t\t\t} else{\n\t\t\t\tthis.pull[id] = temp;\n\t\t\t\tif (this._scheme_init)\n\t\t\t\t\tthis._scheme_init(temp);\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t//update mode, delete items which are not existing in the new xml\n\t\tif (marks){\n\t\t\tthis.blockEvent();\n\t\t\tfor (var delid in marks)\n\t\t\t\tthis.remove(delid);\n\t\t\tthis.unblockEvent();\n\t\t}\n\n\t\tvar endpos = info.size * 1;\n\t\tif (endpos) {\n\t\t\tif (!this.order[endpos-1])\n\t\t\t\tthis.order[endpos-1] = undefined;\n\t\t\tif (endpos < this.order.length)\n\t\t\t\tthis.order = this.order.slice(0, endpos);\n\t\t}\n\t},\n\t//generate id for data object\n\tid:function(data){\n\t\treturn data.id||(data.id=uid());\n\t},\n\tchangeId:function(old, newid){\n\t\t//assert(this.pull[old],\"Can't change id, for non existing item: \"+old);\n\t\tif(old == newid) return;\n\t\t\n\t\tif(this.pull[old])\n\t\t\tthis.pull[newid] = this.pull[old];\n\t\t\n\t\tthis.pull[newid].id = newid;\n\t\tthis.order[this.order.find(old)]=newid;\n\t\tif (this._filter_order)\n\t\t\tthis._filter_order[this._filter_order.find(old)]=newid;\n\t\tif (this._marks[old]){\n\t\t\tthis._marks[newid] = this._marks[old];\n\t\t\tdelete this._marks[old];\n\t\t}\n\n\n\t\tthis.callEvent(\"onIdChange\", [old, newid]);\n\t\tif (this._render_change_id)\n\t\t\tthis._render_change_id(old, newid);\n\t\tdelete this.pull[old];\n\t},\n\t//get data from hash by id\n\tgetItem:function(id){\n\t\treturn this.pull[id];\n\t},\n\t//assigns data by id\n\tupdateItem:function(id, update, mode){\n\t\tif (typeof id === \"object\")\n\t\t\tid = id.toString();\n\n\t\tvar data = this.getItem(id);\n\t\tvar old = null;\n\n\t\t//check is change tracking active\n\t\tvar changeTrack = this.hasEvent(\"onDataUpdate\");\n\t\n\t\tassert(data, \"Invalid ID for updateItem\");\n\t\tassert(!update || !update.id || update.id == id, \"Attempt to change ID in updateItem\");\n\t\tif (!isUndefined(update) && data !== update){\n\t\t\t//preserve original object\n\t\t\tif (changeTrack)\n\t\t\t\told = copy(data);\n\n\t\t\tid = data.id;\t//preserve id\n\t\t\textend(data, update, true);\n\t\t\tdata.id = id;\n\t\t}\n\n\t\tif (this._scheme_update)\n\t\t\tthis._scheme_update(data);\n\n\t\tthis.callEvent(\"onStoreUpdated\",[id, data, (mode||\"update\")]);\n\n\t\tif (changeTrack)\n\t\t\tthis.callEvent(\"onDataUpdate\", [id, data, old]);\n\t},\n\t//sends repainting signal\n\trefresh:function(id){\n\t\tif (this._skip_refresh) return; \n\t\t\n\t\tif (id){\n\t\t\tif (this.exists(id))\n\t\t\t\tthis.callEvent(\"onStoreUpdated\",[id, this.pull[id], \"paint\"]);\n\t\t}else\n\t\t\tthis.callEvent(\"onStoreUpdated\",[null,null,null]);\n\t},\n\tsilent:function(code, master){\n\t\tthis._skip_refresh = true;\n\t\tcode.call(master||this);\n\t\tthis._skip_refresh = false;\n\t},\n\t//converts range IDs to array of all IDs between them\n\tgetRange:function(from,to){\t\t\n\t\t//if some point is not defined - use first or last id\n\t\t//BEWARE - do not use empty or null ID\n\t\tif (from)\n\t\t\tfrom = this.getIndexById(from);\n\t\telse \n\t\t\tfrom = (this.$min||this.startOffset)||0;\n\t\tif (to)\n\t\t\tto = this.getIndexById(to);\n\t\telse {\n\t\t\tto = this.$max === 0 ? 0 : Math.min((this.$max?this.$max-1:(this.endOffset||Infinity)),(this.count()-1));\n\t\t\tif (to<0) to = 0; //we have not data in the store\n\t\t}\n\n\t\tif (from>to){ //can be in case of backward shift-selection\n\t\t\tvar a=to; to=from; from=a;\n\t\t}\n\n\t\treturn this.getIndexRange(from,to);\n\t},\n\t//converts range of indexes to array of all IDs between them\n\tgetIndexRange:function(from,to){\n\t\tto=Math.min((to === 0 ? 0 :(to||Infinity)),this.count()-1);\n\t\t\n\t\tvar ret=_to_array(); //result of method is rich-array\n\t\tfor (var i=(from||0); i <= to; i++)\n\t\t\tret.push(this.getItem(this.order[i]));\n\t\treturn ret;\n\t},\n\t//returns total count of elements\n\tcount:function(){\n\t\treturn this.order.length;\n\t},\n\t//returns truy if item with such ID exists\n\texists:function(id){\n\t\treturn !!(this.pull[id]);\n\t},\n\t//nextmethod is not visible on component level, check DataMove.move\n\t//moves item from source index to the target index\n\tmove:function(sindex,tindex){\n\t\tassert(sindex>=0 && tindex>=0, \"DataStore::move\",\"Incorrect indexes\");\n\t\tif (sindex == tindex) return;\n\n\t\tvar id = this.getIdByIndex(sindex);\n\t\tvar obj = this.getItem(id);\n\n\t\tif (this._filter_order)\n\t\t\tthis._move_inner(this._filter_order, 0, 0, this.getIdByIndex(sindex), this.getIdByIndex(tindex));\n\n\t\tthis._move_inner(this.order, sindex, tindex);\n\t\t\n\t\t\n\t\t//repaint signal\n\t\tthis.callEvent(\"onStoreUpdated\",[id,obj,\"move\"]);\n\t},\n\t_move_inner:function(col, sindex, tindex, sid, tid){\n\t\tif (sid||tid){\n\t\t\tsindex = tindex = -1;\n\t\t\tfor (var i=0; i<col.length; i++){\n\t\t\t\tif (col[i] == sid && sindex<0)\n\t\t\t\t\tsindex = i;\n\t\t\t\tif (col[i] == tid && tindex<0)\n\t\t\t\t\ttindex = i;\n\t\t\t}\n\t\t}\n\t\tvar id = col[sindex];\n\t\tcol.removeAt(sindex);\t//remove at old position\n\t\tcol.insertAt(id,Math.min(col.length, tindex));\t//insert at new position\n\t},\n\tscheme:function(config){\n\t\tthis._scheme = {};\n\t\tthis._scheme_save = config.$save;\n\t\tthis._scheme_init = config.$init||config.$change;\n\t\tthis._scheme_update = config.$update||config.$change;\n\t\tthis._scheme_serialize = config.$serialize;\n\t\tthis._scheme_group = config.$group;\n\t\tthis._scheme_sort = config.$sort;\n\t\tthis._scheme_export = config.$export;\n\n\t\t//ignore $-starting properties, as they have special meaning\n\t\tfor (var key in config)\n\t\t\tif (key.substr(0,1) != \"$\")\n\t\t\t\tthis._scheme[key] = config[key];\n\t},\n\timportData:function(target, silent){\n\t\tvar data = target ? (target.data || target) : [];\n\t\tthis._filter_order = null;\n\n\t\tif (typeof data.serialize == \"function\"){\n\t\t\tthis.order = _to_array([].concat(data.order));\n\n\t\t\t//make full copy, to preserve object properties\n\t\t\t//[WE-CAN-DO-BETTER]\n\t\t\tif (this._make_full_copy){\n\t\t\t\tthis._make_full_copy = false;\n\t\t\t\tvar oldpull = this.pull;\n\t\t\t\tthis.pull = {};\n\t\t\t\tfor (let key in data.pull){\n\t\t\t\t\tvar old = oldpull[key];\n\t\t\t\t\tthis.pull[key] = copy(data.pull[key]);\n\t\t\t\t\tif (old && old.open) this.pull[key].open = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.pull = {};\n\t\t\t\tfor (let key in data.pull)\n\t\t\t\t\tthis.pull[key] = data.pull[key];\n\t\t\t}\n\n\t\t\tif (data.branch && this.branch){\n\t\t\t\tthis.branch = copy(data.branch);\n\t\t\t\tthis._filter_branch = null;\n\t\t\t}\n\n\t\t} else {\n\t\t\tthis.order = _to_array();\n\t\t\tthis.pull = {};\n\t\t\tvar id, obj;\n\n\t\t\tif (isArray(target))\n\t\t\t\tfor (let key=0; key<target.length; key++){\n\t\t\t\t\tobj = id = target[key];\n\t\t\t\t\tif (typeof obj == \"object\")\n\t\t\t\t\t\tobj.id  = obj.id || uid();\n\t\t\t\t\telse\n\t\t\t\t\t\tobj = { id:id, value:id };\n\n\t\t\t\t\tthis.order.push(obj.id);\n\t\t\t\t\tif (this._scheme_init)\n\t\t\t\t\t\tthis._scheme_init(obj);\n\t\t\t\t\tthis.pull[obj.id] = obj;\n\t\t\t\t}\n\t\t\telse\n\t\t\t\tfor (let key in data){\n\t\t\t\t\tthis.order.push(key);\n\t\t\t\t\tthis.pull[key] = { id:key, value: data[key] };\n\t\t\t\t}\n\t\t}\n\t\tif (this._extraParser && !data.branch){\n\t\t\tthis.branch = { 0:[]};\n\t\t\tif (!this._datadriver_child)\n\t\t\t\tthis._set_child_scheme(\"data\");\n\n\t\t\tfor (var i = 0; i<this.order.length; i++){\n\t\t\t\tvar key = this.order[i];\n\t\t\t\tthis._extraParser(this.pull[key], 0, 0, false);\n\t\t\t}\n\t\t}\n\n\t\tthis.callEvent(\"onStoreLoad\",[]);\n\t\tif (!silent)\n\t\t\tthis.callEvent(\"onStoreUpdated\",[]);\n\t},\n\tsync:function(source, filter, silent){\n\t\tthis.unsync();\n\n\t\tvar type = typeof source;\n\t\tif (type == \"string\")\n\t\t\tsource = $$(source);\n\n\t\tif (type != \"function\" && type != \"object\"){\n\t\t\tsilent = filter;\n\t\t\tfilter = null;\n\t\t}\n\t\t\n\t\tif (source.name != \"DataStore\" && source.name != \"TreeStore\"){\n\t\t\tif (source.data && (source.data.name === \"DataStore\" || source.data.name === \"TreeStore\"))\n\t\t\t\tsource = source.data;\n\t\t\telse {\n\t\t\t\tthis._sync_source = source;\n\t\t\t\treturn callEvent(\"onSyncUnknown\", [this, source, filter]);\n\t\t\t}\n\t\t}\n\n\t\tvar\tsync_logic = bind(function(id, data, mode){\n\t\t\tif (this._skip_next_sync) return;\n\n\t\t\t//sync of tree-structure with after-filtering\n\t\t\t//we need to make a full copy, to preserve $count\n\t\t\t//[WE-CAN-DO-BETTER]\n\t\t\tif (filter && this.branch) this._make_full_copy = true;\n\t\t\tthis.importData(source, true);\n\t\t\t\n\t\t\tif (filter)\n\t\t\t\tthis.silent(filter);\n\t\t\tif (this._on_sync)\n\t\t\t\tthis._on_sync();\n\n\t\t\tif(!(id && data && mode))//clearall\n\t\t\t\tthis._marks = {};\n\t\t\tif(mode ==\"delete\" && this._marks[id])\n\t\t\t\tdelete this._marks[id];\n\n\t\t\tthis.callEvent(\"onSyncApply\",[]);\n\n\t\t\tif (!silent) \n\t\t\t\tthis.refresh();\n\t\t\telse\n\t\t\t\tsilent = false;\n\t\t}, this);\n\n\n\n\t\tthis._sync_events = [\n\t\t\tsource.attachEvent(\"onStoreUpdated\", sync_logic),\n\t\t\tsource.attachEvent(\"onIdChange\", bind(function(old, nid){ this.changeId(old, nid); this.refresh(nid); }, this))\n\t\t];\n\t\tthis._sync_source = source;\n\n\t\t//backward data saving\n\t\tthis._back_sync_handler = this.attachEvent(\"onStoreUpdated\", function(id, data, mode){\n\t\t\tif (mode == \"update\" || mode == \"save\"){\n\t\t\t\tthis._skip_next_sync = 1;\n\t\t\t\tsource.updateItem(id, data);\n\t\t\t\tthis._skip_next_sync = 0;\n\t\t\t}\n\t\t});\n\n\t\tsync_logic();\n\t},\n\tunsync:function(){\n\t\tif (this._sync_source){\n\t\t\tvar source = this._sync_source;\n\n\t\t\tif ((source.name != \"DataStore\" && source.name != \"TreeStore\") &&\n\t\t\t\t\t(!source.data || source.data.name != \"DataStore\" || source.data.name != \"TreeStore\")){\n\t\t\t\t//data sync with external component\n\t\t\t\tcallEvent(\"onUnSyncUnknown\", [this, source]);\n\t\t\t} else {\n\t\t\t\t//data sync with webix component\n\t\t\t\tfor (var i = 0; i < this._sync_events.length; i++)\n\t\t\t\t\tsource.detachEvent(this._sync_events[i]);\n\t\t\t\tthis.detachEvent(this._back_sync_handler);\n\t\t\t}\n\n\t\t\tthis._sync_source = null;\n\t\t}\n\t},\n\tdestructor:function(){\n\t\tthis.unsync();\n\n\t\tthis.pull = this.order = this._marks = null;\n\t\tthis._evs_events = this._evs_handlers = {};\n\t},\n\t//adds item to the store\n\tadd:function(obj,index){\n\t\t//default values\t\t\n\t\tif (this._scheme)\n\t\t\tfor (var key in this._scheme)\n\t\t\t\tif (isUndefined(obj[key]))\n\t\t\t\t\tobj[key] = this._scheme[key];\n\t\t\n\t\tif (this._scheme_init)\n\t\t\tthis._scheme_init(obj);\n\t\t\n\t\t//generate id for the item\n\t\tvar id = this.id(obj);\n\n\t\t//in case of treetable order is sent as 3rd parameter\n\t\tvar order = arguments[2]||this.order;\n\t\t\n\t\t//by default item is added to the end of the list\n\t\tvar data_size = order.length;\n\t\t\n\t\tif (isUndefined(index) || index < 0)\n\t\t\tindex = data_size; \n\t\t//check to prevent too big indexes\t\t\t\n\t\tif (index > data_size){\n\t\t\tassert(0, \"Warning\",\"DataStore:add\",\"Index of out of bounds\");\n\t\t\tindex = Math.min(order.length,index);\n\t\t}\n\t\tif (this.callEvent(\"onBeforeAdd\", [id, obj, index]) === false) return false;\n\n\t\tassert(!this.exists(id), \"Not unique ID\");\n\t\t\n\t\tthis.pull[id]=obj;\n\t\torder.insertAt(id,index);\n\t\tif (this._filter_order){\t//adding during filtering\n\t\t\t//we can't know the location of new item in full dataset, making suggestion\n\t\t\t//put at end of original dataset by default\n\t\t\tvar original_index = this._filter_order.length;\n\t\t\t//if some data exists, put at the same position in original and filtered lists\n\t\t\tif (this.order.length)\n\t\t\t\toriginal_index = Math.min((index || 0), original_index);\n\n\t\t\tthis._filter_order.insertAt(id,original_index);\n\t\t}\n\t\t\n\t\t//repaint signal\n\t\tthis.callEvent(\"onStoreUpdated\",[id,obj,\"add\"]);\n\t\tthis.callEvent(\"onAfterAdd\",[id,index]);\n\n\t\treturn obj.id;\n\t},\n\t\n\t//removes element from datastore\n\tremove:function(id){\n\t\t//id can be an array of IDs - result of getSelect, for example\n\t\tif (isArray(id)){\n\t\t\tfor (var i=0; i < id.length; i++)\n\t\t\t\tthis.remove(id[i]);\n\t\t\treturn;\n\t\t}\n\t\tif (this.callEvent(\"onBeforeDelete\",[id]) === false) return false;\n\t\t\n\t\tassert(this.exists(id), \"Not existing ID in remove command\"+id);\n\n\t\tvar obj = this.getItem(id);\t//save for later event\n\t\t//clear from collections\n\t\tthis.order.remove(id);\n\t\tif (this._filter_order) \n\t\t\tthis._filter_order.remove(id);\n\t\t\t\n\t\tdelete this.pull[id];\n\t\tif (this._marks[id])\n\t\t\tdelete this._marks[id];\n\n\t\t//repaint signal\n\t\tthis.callEvent(\"onStoreUpdated\",[id,obj,\"delete\"]);\n\t\tthis.callEvent(\"onAfterDelete\",[id]);\n\t},\n\t//deletes all records in datastore\n\tclearAll:function(soft){\n\t\t//instead of deleting one by one - just reset inner collections\n\t\tthis.pull = {};\n\t\tthis._marks = {};\n\t\tthis.order = _to_array();\n\t\t//this.feed = null;\n\t\tthis._filter_order = null;\n\t\tif (!soft)\n\t\t\tthis.url = null;\n\t\tthis.callEvent(\"onClearAll\",[soft]);\n\t\tthis.refresh();\n\t},\n\t//converts id to index\n\tgetIdByIndex:function(index){\n\t\tassert(index >= 0,\"DataStore::getIdByIndex Incorrect index\");\n\t\treturn this.order[index];\n\t},\n\t//converts index to id\n\tgetIndexById:function(id){\n\t\tif (!this.pull[id])\n\t\t\treturn -1;\n\t\telse\n\t\t\treturn this.order.find(id);\t//slower than getIdByIndex\n\t},\n\t//returns ID of next element\n\tgetNextId:function(id,step){\n\t\treturn this.order[this.getIndexById(id)+(step||1)];\n\t},\n\t//returns ID of first element\n\tgetFirstId:function(){\n\t\treturn this.order[0];\n\t},\n\t//returns ID of last element\n\tgetLastId:function(){\n\t\treturn this.order[this.order.length-1];\n\t},\n\t//returns ID of previous element\n\tgetPrevId:function(id,step){\n\t\treturn this.order[this.getIndexById(id)-(step||1)];\n\t},\n\t/*\n\t\tsort data in collection\n\t\t\tby - settings of sorting\n\t\t\n\t\tor\n\t\t\n\t\t\tby - sorting function\n\t\t\tdir - \"asc\" or \"desc\"\n\t\t\t\n\t\tor\n\t\t\n\t\t\tby - property\n\t\t\tdir - \"asc\" or \"desc\"\n\t\t\tas - type of sortings\n\t\t\n\t\tSorting function will accept 2 parameters and must return 1,0,-1, based on desired order\n\t*/\n\tsort:function(by, dir, as){\n\t\tvar sort = by;\t\n\t\tif (typeof by == \"function\")\n\t\t\tsort = {as:by, dir:dir};\n\t\telse if (typeof by == \"string\")\n\t\t\tsort = {by:by, dir:dir, as:as};\n\n\t\tif(typeof sort.by == \"string\")\n\t\t\tsort.by = sort.by.replace(/#/g,\"\");\n\n\t\t\n\t\tvar parameters = [sort.by, sort.dir, sort.as, sort];\n\t\tif (!this.callEvent(\"onBeforeSort\",parameters)) return;\t\n\t\t\n\t\tthis.order = this._sort_core(sort, this.order);\n\t\tif (this._filter_order && this._filter_order.length != this.order.length)\n\t\t\tthis._filter_order = this._sort_core(sort, this._filter_order);\n\t\t\n\t\t//repaint self\n\t\tthis.refresh();\n\t\t\n\t\tthis.callEvent(\"onAfterSort\",parameters);\n\t},\n\t_sort_core:function(sort, order){\n\t\tvar sorter = this.sorting.create(sort);\n\t\tif (this.order.length){\n\t\t\tvar pre = order.splice(0, this.$freeze);\n\t\t\t//get array of IDs\n\t\t\tvar neworder = _to_array();\n\t\t\tfor (var i=order.length-1; i>=0; i--)\n\t\t\t\tneworder[i] = this.pull[order[i]];\n\t\t\t\n\t\t\tneworder.sort(sorter);\n\t\t\treturn _to_array(pre.concat(neworder.map(function(obj){ \n\t\t\t\tassert(obj, \"Client sorting can't be used with dynamic loading\");\n\t\t\t\treturn this.id(obj);\n\t\t\t},this)));\n\t\t}\n\t\treturn order;\n\t},\n\t/*\n\t\tFilter datasource\n\t\t\n\t\ttext - property, by which filter\n\t\tvalue - filter mask\n\t\t\n\t\tor\n\t\t\n\t\ttext  - filter method\n\t\t\n\t\tFilter method will receive data object and must return true or false\n\t*/\n\t_filter_reset:function(preserve){\n\t\t//remove previous filtering , if any\n\t\tif (this._filter_order && !preserve){\n\t\t\tthis.order = this._filter_order;\n\t\t\tdelete this._filter_order;\n\t\t}\n\t},\n\t_filter_core:function(filter, value, preserve){\n\t\tvar neworder = _to_array();\n\t\tvar freeze = this.$freeze || 0;\n\t\t\n\t\tfor (var i=0; i < this.order.length; i++){\n\t\t\tvar id = this.order[i];\n\t\t\tif (i < freeze || filter(this.getItem(id),value))\n\t\t\t\tneworder.push(id);\n\t\t}\n\t\t//set new order of items, store original\n\t\tif (!preserve ||  !this._filter_order)\n\t\t\tthis._filter_order = this.order;\n\t\tthis.order = neworder;\n\t},\n\tfind:function(config, first){\n\t\tvar result = [];\n\n\t\tfor(var i in this.pull){\n\t\t\tvar data = this.pull[i];\n\n\t\t\tvar match = true;\n\t\t\tif (typeof config == \"object\"){\n\t\t\t\tfor (var key in config)\n\t\t\t\t\tif (data[key] != config[key]){\n\t\t\t\t\t\tmatch = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t} else if (!config(data))\n\t\t\t\tmatch = false;\n\n\t\t\tif (match)\n\t\t\t\tresult.push(data);\n\t\t\t\n\t\t\tif (first && result.length)\n\t\t\t\treturn result[0];\n\t\t}\n\n\t\treturn first ? null : result;\n\t},\n\tfilter:function(text,value,preserve){\n\t\t//unfilter call but we already in not-filtered state\n\t\tif (!text && !this._filter_order && !this._filter_branch) return;\n\t\tif (!this.callEvent(\"onBeforeFilter\", [text, value])) return;\n\t\t\n\t\tthis._filter_reset(preserve);\n\t\tif (!this.order.length) return;\n\t\t\n\t\t//if text not define -just unfilter previous state and exit\n\t\tif (text){\n\t\t\tvar filter = text;\n\t\t\tvalue = value||\"\";\n\t\t\tif (typeof text == \"string\"){\n\t\t\t\ttext = text.replace(/#/g,\"\");\n\t\t\t\tif (typeof value == \"function\")\n\t\t\t\t\tfilter = function(obj){\n\t\t\t\t\t\treturn value(obj[text]);\n\t\t\t\t\t};\n\t\t\t\telse{\n\t\t\t\t\tvalue = value.toString().toLowerCase();\n\t\t\t\t\tfilter = function(obj,value){\t//default filter - string start from, case in-sensitive\n\t\t\t\t\t\tassert(obj, \"Client side filtering can't be used with dynamic loading\");\n\t\t\t\t\t\treturn (obj[text]||\"\").toString().toLowerCase().indexOf(value)!=-1;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis._filter_core(filter, value, preserve, this._filterMode);\n\t\t}\n\t\t//repaint self\n\t\tthis.refresh();\n\t\t\n\t\tthis.callEvent(\"onAfterFilter\", []);\n\t},\n\t/*\n\t\tIterate through collection\n\t*/\n\t_obj_array:function(){\n\t\tvar data = [];\n\t\tfor (var i = this.order.length - 1; i >= 0; i--)\n\t\t\tdata[i]=this.pull[this.order[i]];\n\n\t\treturn data;\n\t},\n\teach:function(method, master, all){\n\t\tvar order = this.order;\n\t\tif (all)\n\t\t\torder = this._filter_order || order;\n\n\t\tfor (var i=0; i<order.length; i++){\n\t\t\tif(order[i])\n\t\t\t\tmethod.call((master||this), this.getItem(order[i]), i);\n\t\t}\n\t},\n\t_methodPush:function(object,method){\n\t\treturn function(){ return object[method].apply(object,arguments); };\n\t},\n\t/*\n\t\tmap inner methods to some distant object\n\t*/\n\tprovideApi:function(target,eventable){\n\t\t\t\n\t\tif (eventable){\n\t\t\tthis.mapEvent({\n\t\t\t\tonbeforesort:\ttarget,\n\t\t\t\tonaftersort:\ttarget,\n\t\t\t\tonbeforeadd:\ttarget,\n\t\t\t\tonafteradd:\t\ttarget,\n\t\t\t\tonbeforedelete:\ttarget,\n\t\t\t\tonafterdelete:\ttarget,\n\t\t\t\tondataupdate:\ttarget/*,\n\t\t\t\tonafterfilter:\ttarget,\n\t\t\t\tonbeforefilter:\ttarget*/\n\t\t\t});\n\t\t}\n\t\t\t\n\t\tvar list = [\"sort\",\"add\",\"remove\",\"exists\",\"getIdByIndex\",\"getIndexById\",\"getItem\",\"updateItem\",\"refresh\",\"count\",\"filter\",\"find\",\"getNextId\",\"getPrevId\",\"clearAll\",\"getFirstId\",\"getLastId\",\"serialize\",\"sync\"];\n\t\tfor (var i=0; i < list.length; i++)\n\t\t\ttarget[list[i]] = this._methodPush(this,list[i]);\n\t},\n\taddMark:function(id, mark, css, value, silent){\n\t\tvar obj = this._marks[id]||{};\n\t\tthis._marks[id] = obj;\n\t\tif (!obj[mark]){\n\t\t\tobj[mark] = value||true;\t\n\t\t\tif (css){\n\t\t\t\tvar old_css = obj.$css||\"\";\n\t\t\t\tobj.$css = old_css+\" \"+mark;\n\t\t\t}\n\t\t\tif (!silent)\n\t\t\t\tthis.refresh(id);\n\t\t}\n\t\treturn obj[mark];\n\t},\n\tremoveMark:function(id, mark, css, silent){\n\t\tvar obj = this._marks[id];\n\t\tif (obj){\n\t\t\tif (obj[mark])\n\t\t\t\tdelete obj[mark];\n\t\t\tif (css){\n\t\t\t\tvar current_css = obj.$css;\n\t\t\t\tif (current_css){\n\t\t\t\t\tobj.$css = current_css.replace(mark, \"\").replace(\"  \",\" \");\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!silent) \n\t\t\t\tthis.refresh(id);\n\t\t}\n\t},\n\tgetMark:function(id, mark){\n\t\tvar obj = this._marks[id];\n\t\treturn (obj?obj[mark]:false);\n\t},\n\tclearMark:function(name, css, silent){\n\t\tfor (var id in this._marks){\n\t\t\tvar obj = this._marks[id];\n\t\t\tif (obj[name]){\n\t\t\t\tdelete obj[name];\n\t\t\t\tif (css && obj.$css)\n\t\t\t\t\tobj.$css = obj.$css.replace(name, \"\").replace(\"  \",\" \");\n\t\t\t\tif (!silent)\n\t\t\t\t\tthis.refresh(id);\n\t\t\t}\n\t\t}\n\t},\t\n\t/*\n\t\tserializes data to a json object\n\t*/\n\tserialize: function(all){\n\t\tvar ids = this.order;\n\t\tif (all && this._filter_order)\n\t\t\tids = this._filter_order;\n\n\t\tvar result = [];\n\t\tfor(var i=0; i< ids.length;i++) {\n\t\t\tvar el = this.pull[ids[i]];\n\t\t\tif (this._scheme_serialize){\n\t\t\t\tel = this._scheme_serialize(el);\n\t\t\t\tif (el===false) continue;\n\t\t\t}\n\t\t\tresult.push(el);\n\t\t}\n\t\treturn result;\n\t},\n\tsorting:{\n\t\tcreate:function(config){\n\t\t\treturn this._dir(config.dir, this._by(config.by, config.as));\n\t\t},\n\t\tas:{\n\t\t\t//handled by dataFeed\n\t\t\t\"server\":function(){\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\t\"date\":function(a,b){\n\t\t\t\ta=a-0; b=b-0;\n\t\t\t\treturn a>b?1:(a<b?-1:0);\n\t\t\t},\n\t\t\t\"int\":function(a,b){\n\t\t\t\ta = a*1; b=b*1;\n\t\t\t\treturn a>b?1:(a<b?-1:0);\n\t\t\t},\n\t\t\t\"string_strict\":function(a,b){\n\t\t\t\ta = a.toString(); b=b.toString();\n\t\t\t\treturn a>b?1:(a<b?-1:0);\n\t\t\t},\n\t\t\t\"string\":function(a,b){\n\t\t\t\tif (!b) return 1;\n\t\t\t\tif (!a) return -1;\n\t\t\t\t\n\t\t\t\ta = a.toString().toLowerCase(); b=b.toString().toLowerCase();\n\t\t\t\treturn a>b?1:(a<b?-1:0);\n\t\t\t},\n\t\t\t\"raw\":function(a,b){\n\t\t\t\treturn a>b?1:(a<b?-1:0);\n\t\t\t}\n\t\t},\n\t\t_by:function(prop, method){\n\t\t\tif (!prop)\n\t\t\t\treturn method;\n\t\t\tif (typeof method != \"function\")\n\t\t\t\tmethod = this.as[method||\"string\"];\n\n\t\t\tassert(method, \"Invalid sorting method\");\n\t\t\treturn function(a,b){\n\t\t\t\treturn method(a[prop],b[prop]);\n\t\t\t};\n\t\t},\n\t\t_dir:function(prop, method){\n\t\t\tif (prop == \"asc\" || !prop)\n\t\t\t\treturn method;\n\t\t\treturn function(a,b){\n\t\t\t\treturn method(a,b)*-1;\n\t\t\t};\n\t\t}\n\t}\n};\n\n\nexport default DataStore;","import {ajax} from \"../load/ajax\";\nimport {bind, delay, extend, toFunctor} from \"../webix/helpers\";\nimport {proto} from \"../ui/core\";\n\nimport {dp} from \"../load/dataprocessor\";\nimport proxy from \"../load/proxy\";\nimport promise from \"../thirdparty/promiz\";\n\nimport DataStore from \"../core/datastore\";\nimport AtomDataLoader from \"../core/atomdataloader\";\n\n\n/*\n\tBehavior:DataLoader - load data in the component\n\t\n\t@export\n\t\tload\n\t\tparse\n*/\nconst DataLoader =proto({\n\t$init:function(config){\n\t\t//prepare data store\n\t\tconfig = config || \"\";\n\n\t\tthis._feed_last = {};\n\t\tthis._data_generation = 1;\n\n\t\tthis.data = new DataStore();\n\t\tthis.data.attachEvent(\"onClearAll\",bind(this._call_onclearall,this));\n\t\tthis.data.attachEvent(\"onServerConfig\", bind(this._call_on_config, this));\n\t\tthis.attachEvent(\"onDestruct\", this._call_onclearall);\n\n\t\tthis.data.feed = this._feed;\n\t\tthis.data.owner = config.id;\n\t},\n\t_feed:function(from,count,callback,defer){\n\t\t//allow only single request at same time\n\t\tif (this._load_count){\n\t\t\tdefer = promise.defer();\n\t\t\tthis._load_count=[from,count,callback,defer];\t//save last ignored request\n\t\t\treturn defer;\n\t\t}\n\t\telse\n\t\t\tthis._load_count=true;\n\t\tthis._feed_last.from = from;\n\t\tthis._feed_last.count = count;\n\t\treturn this._feed_common.call(this, from, count, callback, false, false, defer);\n\t},\n\t_feed_common:function(from, count, callback, url, details, defer){\n\t\tvar state = null;\n\t\turl = url || this.data.url;\n\n\t\tif (from<0) from = 0;\n\n\t\tif(!details)\n\t\t\tdetails = { start: from, count:count };\n\n\t\tif(this.count())\n\t\t\tdetails[\"continue\"] = \"true\";\n\n\t\tif (this.getState)\n\t\t\tstate = this.getState();\n\n\t\t// proxy\n\t\tif (url && typeof url != \"string\"){\n\t\t\tif (state){\n\t\t\t\tif (state.sort)\n\t\t\t\t\tdetails.sort = state.sort;\n\t\t\t\tif (state.filter)\n\t\t\t\t\tdetails.filter = state.filter;\n\t\t\t}\n\t\t\treturn this.load(url, 0, details).then(\n\t\t\t\tdata => this._feed_on_load(data, callback, defer),\n\t\t\t\t() => this._feed_callback()\n\t\t\t);\n\t\t} else { // GET\n\t\t\turl = url+((url.indexOf(\"?\")==-1)?\"?\":\"&\");\n\n\t\t\tvar params = [];\n\t\t\tfor(var d in details){\n\t\t\t\tparams.push(d+\"=\"+details[d]);\n\t\t\t}\n\t\t\tif (state){\n\t\t\t\tif (state.sort)\n\t\t\t\t\tparams.push(\"sort[\"+state.sort.id+\"]=\"+encodeURIComponent(state.sort.dir));\n\t\t\t\tif (state.filter)\n\t\t\t\t\tfor (var key in state.filter){\n\t\t\t\t\t\tvar filterValue = state.filter[key];\n\t\t\t\t\t\tif(typeof filterValue == \"object\")\n\t\t\t\t\t\t\tfilterValue = ajax().stringify(filterValue); //server daterangefilter\n\t\t\t\t\t\tparams.push(\"filter[\"+key+\"]=\"+encodeURIComponent(filterValue));\n\t\t\t\t\t}\n\t\t\t}\n\n\t\t\turl += params.join(\"&\");\n\t\t\tif (this._feed_last.url !== url){\n\t\t\t\tthis._feed_last.url = url;\n\t\t\t\treturn this.load(url).then(\n\t\t\t\t\tdata => this._feed_on_load(data, callback, defer),\n\t\t\t\t\t() => this._feed_callback()\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis._load_count = false;\n\t\t\t\treturn promise.reject();\n\t\t\t}\n\t\t}\n\t},\n\t_feed_on_load:function(data, callback, defer){\n\t\tdelay(()=> this._feed_callback(), \"\", \"\", 100);\n\t\tif(callback)\n\t\t\tajax.$callback(this, callback, data);\n\t\tif(defer)\n\t\t\tdefer.resolve(data);\n\t\treturn data;\n\t},\n\t_feed_callback:function(){\n\t\t//after loading check if we have some ignored requests\n\t\tvar temp = this._load_count;\n\t\tthis._load_count = false;\n\t\tif (typeof temp ==\"object\")\n\t\t\tthis.data.feed.apply(this, temp);\t//load last ignored request\n\t},\n\t//loads data from external URL\n\tload:function(url){\n\t\turl = proxy.$parse(url);\n\t\tvar ajax = AtomDataLoader.load.apply(this, arguments);\n\n\t\t//prepare data feed for dyn. loading\n\t\tif (!this.data.url)\n\t\t\tthis.data.url = url;\n\n\t\treturn ajax;\n\t},\n\t//load next set of data rows\n\tloadNext:function(count, start, callback, url, now){\n\t\tvar config = this._settings;\n\t\tif (config.datathrottle && !now){\n\t\t\tif (this._throttle_request)\n\t\t\t\twindow.clearTimeout(this._throttle_request);\n\n\t\t\tlet defer = promise.defer();\n\t\t\tthis._throttle_request = delay(function(){\n\t\t\t\tdefer.resolve(this.loadNext(count, start, callback, url, true));\n\t\t\t},this, 0, config.datathrottle);\n\t\t\treturn defer;\n\t\t}\n\n\t\tif (!start && start !== 0) start = this.count();\n\t\tif (!count)\n\t\t\tcount = config.datafetch || this.count();\n\n\t\tthis.data.url = this.data.url || url;\n\t\tif (this.callEvent(\"onDataRequest\", [start,count,callback,url]) && this.data.url)\n\t\t\treturn this.data.feed.call(this, start, count, callback);\n\t\treturn promise.reject();\n\t},\n\t_maybe_loading_already:function(count, from){\n\t\tvar last = this._feed_last;\n\t\tif(this._load_count && last.url){\n\t\t\tif (last.from<=from && (last.count+last.from >= count + from )) return true;\n\t\t}\n\t\treturn false;\n\t},\n\tremoveMissed_setter:function(value){\n\t\treturn (this.data._removeMissed = value);\n\t},\n\t//init of dataprocessor delayed after all settings processing\n\t//because it need to be the last in the event processing chain\n\t//to get valid validation state\n\t_init_dataprocessor:function(){\n\t\tvar url = this._settings.save;\n\n\t\tif (url === true)\n\t\t\turl = this._settings.save = this._settings.url;\n\n\t\tvar obj = { master: this };\n\t\t\n\t\tif (url && url.url)\n\t\t\textend(obj, url);\n\t\telse\n\t\t\tobj.url = url;\n\n\t\tdp(obj);\n\t},\n\tsave_setter:function(value){\n\t\tif (value)\n\t\t\tthis.$ready.push(this._init_dataprocessor);\n\n\t\treturn value;\n\t},\n\twaitSave:function(handler){\n\t\treturn dp(this)._promise(() => {\n\t\t\thandler.call(this);\n\t\t}).then(many => many.length == 1 ? many[0] : many);\n\t},\n\tscheme_setter:function(value){\n\t\tthis.data.scheme(value);\n\t},\n\tdataFeed_setter:function(value){\n\t\tvalue = proxy.$parse(value);\n\n\t\tthis.data.attachEvent(\"onBeforeFilter\", bind(function(text, filtervalue){\n\t\t\tvar result;\n\n\t\t\t//complex filtering, can't be routed to dataFeed\n\t\t\tif (typeof text == \"function\") return true;\n\n\t\t\t//we have dataFeed and some text\n\t\t\tif (this._settings.dataFeed && (text || filtervalue)){\n\t\t\t\ttext = text || \"id\";\n\t\t\t\tif (filtervalue && typeof filtervalue == \"object\")\n\t\t\t\t\tfiltervalue = filtervalue.id;\n\n\t\t\t\tvar url = this._settings.dataFeed;\n\n\t\t\t\t//url data feed\n\t\t\t\tif(typeof url ==\"string\"){\n\t\t\t\t\tvar urldata = \"filter[\"+text+\"]=\"+encodeURIComponent(filtervalue);\n\t\t\t\t\tresult = this._fetch(\n\t\t\t\t\t\turl+(url.indexOf(\"?\")<0?\"?\":\"&\")+urldata,\n\t\t\t\t\t\tthis._settings.datatype\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t//js data feed\n\t\t\t\telse{\n\t\t\t\t\tvar filter = {};\n\t\t\t\t\tfilter[text] = filtervalue;\n\t\t\t\t\tif (typeof url == \"function\"){\n\t\t\t\t\t\tresult = url.call(this, filtervalue, filter);\n\t\t\t\t\t} else if (url.$proxy && url.load) {\n\t\t\t\t\t\tresult = url.load(this, { filter });\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (result){\n\t\t\t\t\tif (!result.then)\n\t\t\t\t\t\tresult = promise.resolve(result);\n\n\t\t\t\t\tresult.then(\n\t\t\t\t\t\tdata => {\n\t\t\t\t\t\t\tthis.clearAll();\n\t\t\t\t\t\t\tthis._onLoad(data);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tx => this._onLoadError(x)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},this));\n\t\treturn value;\n\t},\n\t_call_onready:function(){\n\t\tif (this._settings.ready && !this._ready_was_used){\n\t\t\tvar code = toFunctor(this._settings.ready, this.$scope);\n\t\t\tif (code)\n\t\t\t\tdelay(code, this, arguments);\n\t\t\tif (this.callEvent)\n\t\t\t\tdelay(this.callEvent, this, [\"onReady\", []]);\n\t\t\tthis._ready_was_used = true;\n\t\t}\n\t},\n\t_call_onclearall:function(soft){\n\t\tthis._data_generation++;\n\t\tif (!soft){\n\t\t\tthis._load_count = false;\n\t\t\tthis._feed_last = {};\n\t\t\tthis.waitData = promise.defer();\n\t\t}\n\t},\n\t_call_on_config:function(config){\n\t\tthis._parseSeetingColl(config);\n\t}\n},AtomDataLoader);\n\n\n\nexport default DataLoader;","\n\nconst DataState = {\n\tgetState:function(){\n\t\tvar cols_n = this.config.columns.length;\n\t\tvar columns = this.config.columns;\n\t\tvar settings = { \n\t\t\tids:[],\n\t\t\tsize:[],\n\t\t\tselect:this.getSelectedId(true),\n\t\t\tscroll:this.getScrollState()\n\t\t};\n\t\tfor(var i = 0; i < cols_n; i++){\n\t\t\tvar col = columns[i];\n\t\t\tsettings.ids.push(col.id);\n\t\t\tsettings.size.push((col.fillspace || col.adjust) ? -1 : col.width);\n\t\t}\n\n\t\tsettings.order = [].concat(this._hidden_column_order.length ? this._hidden_column_order : settings.ids);\n\n\t\tif(this._last_sorted){\n\t\t\tsettings.sort={\n\t\t\t\tid:this._last_sorted,\n\t\t\t\tdir:this._last_order\n\t\t\t};\n\t\t}\n\n\t\t//this method will try to access the rendered values\n\t\t//just ignore it if grid is not rendered yet\n\t\tif (this._filter_elements && this._dtable_fully_ready) {\n\t\t\tvar filter = {};\n\t\t\tvar any_filter = 0;\n\t\t\tfor (let key in this._filter_elements) {\n\t\t\t\tif (this._hidden_column_hash[key]) continue;\n\n\t\t\t\tvar f = this._filter_elements[key];\n\t\t\t\tf[1].value = filter[key] = f[2].getValue(f[0]);\n\t\t\t\tany_filter = 1;\n\t\t\t}\n\t\t\tif (any_filter)\n\t\t\t\tsettings.filter=filter;\n\t\t}\n\n\t\tsettings.hidden = [];\n\t\tfor (let key in this._hidden_column_hash)\n\t\t\tsettings.hidden.push(key);\n\t\t\n\t\treturn settings;\n\t},\n\tsetState:function(obj){\n\t\tvar columns = this.config.columns;\n\t\tif(!obj) return;\n\n\t\tthis._last_sorted = null; \n\t\tthis.blockEvent();\n\n\t\tif (obj.order && obj.order.length){\n\t\t\tthis._hidden_column_order = [].concat(obj.order);\n\t\t\tthis._hidden_split = [ this._settings.leftSplit, obj.order.length - this._settings.rightSplit ];\n\t\t}\n\n\t\tif (obj.hidden){\n\t\t\tvar hihash = {};\n\t\t\tfor (let i=0; i<obj.hidden.length; i++){\n\t\t\t\thihash[obj.hidden[i]] = true;\n\t\t\t\tif(!this._hidden_column_order.length)\n\t\t\t\t\tthis.hideColumn(obj.hidden[i]);\n\t\t\t}\n\n\t\t\tif(this._hidden_column_order.length){\n\t\t\t\tfor (let i=0; i<this._hidden_column_order.length; i++){\n\t\t\t\t\tvar hikey = this._hidden_column_order[i];\n\t\t\t\t\tif (!!hihash[hikey] == !this._hidden_column_hash[hikey])\n\t\t\t\t\t\tthis.hideColumn(hikey, {}, false, !!hihash[hikey]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (obj.ids){\n\t\t\tvar reorder = false;\n\t\t\tvar cols = this.config.columns;\n\t\t\tfor (let i=0; i<cols.length; i++)\n\t\t\t\tif (cols[i].id != obj.ids[i])\n\t\t\t\t\treorder = true;\n\t\t\tif (reorder){\n\t\t\t\tfor (let i=0; i<obj.ids.length; i++)\n\t\t\t\t\tcols[i] = this.getColumnConfig(obj.ids[i]) || cols[i];\n\t\t\t\tthis.refreshColumns();\n\t\t\t}\n\t\t}\n\n\t\tif (obj.size){\n\t\t\tvar cols_n = Math.min(obj.size.length, columns.length);\n\t\t\tfor(let i = 0; i < cols_n; i++){\n\t\t\t\tvar col = columns[i];\n\t\t\t\tif(col && obj.size[i] > 0 && col.width != obj.size[i]){\n\t\t\t\t\tdelete col.fillspace;\n\t\t\t\t\tdelete col.adjust;\n\t\t\t\t\tthis._setColumnWidth( i, obj.size[i], true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.unblockEvent();\n\n\t\tvar silent = !(this._settings.leftSplit || this._settings.rightSplit);\n\t\tthis._updateColsSizeSettings(silent);\n\t\tthis.callEvent(\"onStructureUpdate\", []);\n\n\t\tif(obj.sort){\n\t\t\tvar column = columns[this.getColumnIndex(obj.sort.id)];\n\t\t\tif (column)\n\t\t\t\tthis._sort(obj.sort.id, obj.sort.dir, column.sort);\t\n\t\t}\n\t\t\t\t\n\t\tif (obj.filter){\n\t\t\t//temporary disable filtering \n\t\t\tlet temp = this.filterByAll;\n\t\t\tthis.filterByAll = function(){};\n\n\t\t\t//apply defined filters\n\t\t\tfor (let key in obj.filter) {\n\t\t\t\tlet value = obj.filter[key];\n\t\t\t\tif (!value) continue;\n\n\t\t\t\tif (!this._filter_elements[key]) continue;\n\t\t\t\tlet f = this._filter_elements[key];\n\t\t\t\tf[2].setValue(f[0], value);\n\t\t\t\tvar contentid = f[1].contentId;\n\t\t\t\tif (contentid)\n\t\t\t\t\tthis._active_headers[contentid].value = value;\n\t\t\t}\n\n\t\t\t//remove old filters\n\t\t\tfor (let key in this._filter_elements){\n\t\t\t\tif (!obj.filter[key]){\n\t\t\t\t\tlet f = this._filter_elements[key];\n\t\t\t\t\tf[2].setValue(f[0], \"\");\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\t\t//restore and apply filtering\n\t\t\tthis.filterByAll = temp;\n\t\t\tthis.filterByAll();\n\t\t}\n\n\t\tif (obj.select && this.select){\n\t\t\tlet select = obj.select;\n\t\t\tthis.unselect();\n\t\t\tfor (let i = 0; i < select.length; i++)\n\t\t\t\tif (!select[i].row || this.exists(select[i].row))\n\t\t\t\t\tthis._select(select[i], true);\n\t\t}\n\n\t\tif(obj.scroll)\n\t\t\tthis.scrollTo(obj.scroll.x, obj.scroll.y);\n\t}\n};\n\nexport default DataState;","import {pos, offset} from \"../webix/html\";\nimport {use} from \"../services\";\nimport env from \"../webix/env\";\nimport Touch from \"../core/touch\";\nimport {extend, delay, _power_array, isArray} from \"../webix/helpers\";\nimport {assert} from \"../webix/debug\";\nimport DragControl from \"../core/dragcontrol\";\nimport AutoScroll from \"../core/autoscroll\";\n\n\n/*\n\tBehavior:DragItem - adds ability to move items by dnd\n\t\n\tdnd context can have next properties\n\t\tfrom - source object\n\t\tto - target object\n\t\tsource - id of dragged item(s)\n\t\ttarget - id of drop target, null for drop on empty space\n\t\tstart - id from which DND was started\n*/\n\nconst DragItem ={\n\t//helper - defines component's container as active zone for dragging and for dropping\n\t_initHandlers:function(obj, source, target){\n\t\tif (!source) DragControl.addDrop(obj._contentobj,obj,true);\n\t\tif (!target) DragControl.addDrag(obj._contentobj,obj);\n\t\tthis.attachEvent(\"onDragOut\",function(a,b){ this.$dragMark(a,b); });\n\t\tthis.attachEvent(\"onBeforeAutoScroll\",function(){\n\t\t\tvar context = DragControl.getContext();\n\t\t\treturn !!(DragControl._active && context && (context.to === this || this._auto_scroll_force));\n\t\t});\n\t},\n\tdrag_setter:function(value){\n\t\tif (value){\n\t\t\textend(this, AutoScroll, true);\n\t\t\tif (value == \"order\" || value == \"move\")\n\t\t\t\textend(this, use(\"DragOrder\"), true);\n\t\t\tif (value == \"inner\" || value == \"order\")\n\t\t\t\tthis._inner_drag_only = true;\n\n\t\t\tthis._initHandlers(this, value == \"source\", value == \"target\");\n\t\t\tdelete this.drag_setter;\t//prevent double initialization\n\t\t}\n\t\treturn value;\n\t},\n\t/*\n\t\ts - source html element\n\t\tt - target html element\n\t\td - drop-on html element ( can be not equal to the target )\n\t\te - native html event \n\t*/\n\t//called when drag moved over possible target\n\t$dragIn:function(s,t,e){\n\t\tvar id = this.locate(e) || null;\n\t\tvar context = DragControl._drag_context;\n\n\t\t//in inner drag mode - ignore dnd from other components\n\t\tif ((this._inner_drag_only || context.from._inner_drag_only) && context.from !== this) return false;\n\n\t\tvar to = DragControl.getMaster(t);\n\t\t//previous target\n\t\tvar html = (this.getItemNode(id, e)||this._dataobj);\n\t\t//prevent double processing of same target\n\t\tif (html == DragControl._landing) return html;\n\t\tcontext.target = id;\n\t\tcontext.to = to;\n\n\t\tif (this._auto_scroll_delay)\n\t\t\tthis._auto_scroll_delay = window.clearTimeout(this._auto_scroll_delay);\n\n\t\tif (this._settings.dragscroll !== false)\n\t\t\tthis._auto_scroll_delay = delay(function(pos,id){\n\t\t\t\tthis._drag_pause(id);\n\t\t\t\tthis._auto_scroll(pos,id);\n\t\t\t}, this, [pos(e), id], 250);\n\n\t\tif (!this.$dropAllow(context, e)  || !this.callEvent(\"onBeforeDragIn\",[context, e])){\n\t\t\tcontext.to = context.target = null;\n\t\t\tif (this._auto_scroll_delay)\n\t\t\t\tthis._auto_scroll_delay = window.clearTimeout(this._auto_scroll_delay);\n\t\t\treturn null;\n\t\t}\n\t\t//mark target only when landing confirmed\n\t\tthis.$dragMark(context,e);\n\t\treturn html;\n\t},\n\t$dropAllow:function(){\n\t\treturn true;\n\t},\n\t_drag_pause:function(){\n\t\t//may be reimplemented in some components\n\t\t// tree for example\n\t},\n\t_target_to_id:function(target){\n\t\treturn target && typeof target === \"object\" ? target.toString() : target;\n\t},\n\t//called when drag moved out from possible target\n\t$dragOut:function(s,t,n,e){ \n\t\tvar id = (this._viewobj.contains(n) ? this.locate(e): null) || null;\n\t\tvar context = DragControl._drag_context;\n\n\t\t//still over previous target\n\t\tif ((context.target||\"\").toString() == (id||\"\").toString()) return null;\n\t\tif (this._auto_scroll_delay)\n\t\t\tthis._auto_scroll_delay = window.clearTimeout(this._auto_scroll_delay);\n\n\t\t//unmark previous target\n\t\tcontext.target = context.to = null;\n\t\tthis.callEvent(\"onDragOut\",[context,e]);\n\t\treturn null;\n\t},\n\t//called when drag moved on target and button is released\n\t$drop:function(s,t,e){\n\t\tvar context = DragControl._drag_context;\n\t\t//finalize context details\n\t\tcontext.to = this;\n\t\tthis._define_index(s,t,context);\n\n\t\t//unmark last target\n\t\tthis.$dragMark({}, e);\n\n\t\tif( context.from && context.from != context.to && context.from.callEvent ){\n\t\t\tif(!context.from.callEvent(\"onBeforeDropOut\", [context,e]))\n\t\t\t\treturn;\n\t\t}\n\n\t\tif (!this.callEvent(\"onBeforeDrop\",[context,e])) return;\n\t\t//moving\n\t\tthis._context_to_move(context,e);\n\t\t\n\t\tthis.callEvent(\"onAfterDrop\",[context,e]);\n\t},\n\t_define_index:function(s,t,context){\n\t\tvar target = this._target_to_id(context.target);\n\n\t\tif (this.getBranchIndex){\n\t\t\tif (target){\n\t\t\t\tcontext.parent = this.getParentId(target);\n\t\t\t\tcontext.index = this.getBranchIndex(target);\n\t\t\t} else context.index = -1;\n\t\t} else\n\t\t\tcontext.index = target?this.getIndexById(target):this.count();\n\t},\n\t_context_to_move:function(context){\n\t\tassert(context.from, \"Unsopported d-n-d combination\");\n\t\tif (context.from && context.from.move){\t//from different component with item dnd\n\t\t\tvar details = { parent: context.parent, mode: context.pos };\n\t\t\tcontext.from.move(context.source,context.index,context.to, details);\n\t\t}\n\t},\n\t_getDragItemPos: function(pos,e){\n\t\tif (this.getItemNode){\n\t\t\tvar id = this.locate(e, true);\n\t\t\t//in some case, node may be outiside of dom ( spans in datatable for example )\n\t\t\t//so getItemNode can return null\n\t\t\tvar node = id ? this.getItemNode(id) : null;\n\t\t\treturn node ? offset(node) : node;\n\t\t}\n\t},\n\t//called when drag action started\n\t$drag:function(s,e){\n\t\tvar id = this.locate(e, true);\n\t\tif (id){\n\t\t\tvar list = [id];\n\n\t\t\tif (this.getSelectedId){ //has selection model\n\t\t\t\t//if dragged item is one of selected - drag all selected\n\t\t\t\tvar selection = this.getSelectedId(true, true);\t\n\n\t\t\t\tif (selection && selection.length > 1 && _power_array.find.call(selection,id)!=-1){\n\t\t\t\t\tvar hash = {}; \n\t\t\t\t\tlist = [];\n\t\t\t\t\tfor (let i=0;i<selection.length; i++)\n\t\t\t\t\t\thash[selection[i]]=true;\n\t\t\t\t\tfor (let i = 0; i<this.data.order.length; i++){\n\t\t\t\t\t\tvar hash_id = this.data.order[i];\n\t\t\t\t\t\tif (hash[hash_id])\n\t\t\t\t\t\t\tlist.push(hash_id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t//save initial dnd params\n\t\t\tvar context = DragControl._drag_context= { source:list, start:id };\n\t\t\tcontext.fragile = (this.addRowCss && env.touch && ( env.isWebKit || env.isFF ));\n\t\t\tcontext.from = this;\n\t\t\t\n\t\t\tif (this.callEvent(\"onBeforeDrag\",[context,e])){\n\t\t\t\tif (Touch)\n\t\t\t\t\tTouch._start_context = null;\n\n\t\t\t\t//set drag representation\n\t\t\t\treturn context.html||this.$dragHTML(this.getItem(id), e, context);\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t},\n\t$dragHTML:function(obj,e,context){\n\t\tlet html = this._toHTML(obj);\n\t\tif ( isArray(context.source) && context.source.length > 1 )\n\t\t\thtml = this._toMultipleHTML(html, context.source.length);\n\t\treturn html;\n\t},\n\t_toMultipleHTML:function(html, len){\n\t\thtml = \"<div class='webix_drag_main'>\"+html+\"</div>\";\n\t\tlet multiple = \"<div class='webix_drag_multiple'></div>\";\n\t\tif ( len > 2 )\n\t\t\tmultiple = \"<div class='webix_drag_multiple_last'></div>\" + multiple;\n\t\treturn multiple+html+\"<span class='webix_badge'>\"+len+\"</span>\";\n\t},\n\t$dragMark:function(context){\n\t\tvar target = null;\n\t\tif (context.target)\n\t\t\ttarget = this._target_to_id(context.target);\n\n\t\t//touch webkit will stop touchmove event if source node removed\n\t\tif (this._marked && this._marked != target){\n\t\t\tif (!context.fragile) this._remove_css([this._marked], \"webix_drag_over\", true);\n\t\t\tthis._marked = null;\n\t\t}\n\n\t\tif (!this._marked && target){\n\t\t\tthis._marked = target;\n\t\t\tif (!context.fragile) this._add_css([target], \"webix_drag_over\", true);\n\t\t\treturn target;\n\t\t}\n\t\t\n\t\tif (context.to){\n\t\t\treturn true;\n\t\t}else\n\t\t\treturn false;\n\t},\n\t_add_css:function(source, css){\n\t\tfor (let i=0; i<source.length; i++)\n\t\t\tthis.addCss(source[i], css);\n\t},\n\t_remove_css:function(source, css){\n\t\tfor (let i=0; i<source.length; i++)\n\t\t\tthis.removeCss(source[i], css);\n\t},\n\n\t// methods used in order/move modes\n\t$dropHTML: function(){\n\t\treturn \"\";\n\t},\n\t_set_drop_area:function(target, t){\n\t\tlet node = this.getItemNode(target);\n\t\tif (node){\n\t\t\tnode.parentNode.insertBefore(DragControl._dropHTML[0], node);\n\t\t} else t.children[0].appendChild(DragControl._dropHTML[0]);\n\t}\n};\n\nexport default DragItem;","import {offset, pos, remove} from \"../webix/html\";\nimport {isArray} from \"../webix/helpers\";\nimport {define} from \"../services\";\n\nimport DragItem from \"../core/dragitem\";\nimport DragControl from \"../core/dragcontrol\";\n\nconst DragOrder ={\n\t$drag: function(s,e){\n\t\tlet html = DragItem.$drag.apply(this, arguments);\n\t\tif (!html) return html;\n\n\t\tlet context = DragControl._drag_context;\n\n\t\tif (this._close_branches)\n\t\t\tthis._close_branches(context);\n\n\t\tif (this._inner_drag_only && this.getBranchIndex)\n\t\t\tthis._drag_order_stored_left = this._drag_order_complex?((this.getItem(context.start).$level+1) * 20 + 8):0;\n\n\t\tif (isArray(context.source) && !context.fragile){\n\t\t\tDragControl._setDragOffset(e);\n\t\t\tthis._add_css(context.source, \"webix_invisible\");\n\t\t}\n\t\treturn html;\n\t},\n\t$dragIn:function(s,t,e){\n\t\tlet html = DragItem.$dragIn.apply(this, arguments);\n\t\tif (!html) return html;\n\n\t\tif (!DragControl._dropHTML)\n\t\t\tDragControl._dropHTML = this._init_drop_area();\n\n\t\tlet context = DragControl._drag_context;\n\t\tlet target = \"$webix-last\";\n\t\tif (context.target)\n\t\t\ttarget = this._target_to_id(context.target);\n\n\t\tif (target != \"$webix-last\" && target != \"$webix-drop\"){\n\t\t\tlet settings = {direction:this._settings.layout||this._drag_direction||\"y\", x:\"width\", y:\"height\"};\n\t\t\tlet ofs = offset(html);\n\t\t\tlet direction = pos(e)[settings.direction] - ofs[settings.direction];\n\t\t\tif ( direction*2 > ofs[settings[settings.direction]] )\n\t\t\t\ttarget = this.getNextId(target) || \"$webix-last\";\n\t\t}\n\n\t\tif (target == this._marked_item_id || target == \"$webix-drop\")\n\t\t\treturn html;\n\n\t\tthis._marked_item_id = target;\n\t\tthis._set_drop_area(target, t);\n\n\t\treturn html;\n\t},\n\t$dragPos:function(pos){\n\t\tif (!this._inner_drag_only){\n\t\t\tlet context = DragControl._drag_context;\n\t\t\tpos.y += context.y_offset;\n\t\t\tpos.x += context.x_offset;\n\t\t\treturn;\n\t\t}\n\n\t\tlet box = offset(this.$view);\n\t\tlet xdrag = (this._settings.layout == \"x\");\n\n\t\tif (xdrag){\n\t\t\tbox.x -= 12;\n\t\t\tpos.y = box.y - 8;\n\t\t\tpos.x = pos.x - 18;\n\n\t\t\tif (pos.x < box.x)\n\t\t\t\tpos.x = box.x;\n\t\t\telse {\n\t\t\t\tlet max = box.x + box.width;\n\t\t\t\tif (pos.x > max)\n\t\t\t\t\tpos.x = max;\n\t\t\t}\n\t\t} else {\n\t\t\tbox.y += (this._header_height||0) - 12;\n\t\t\tpos.x = box.x + 8 + (this._drag_order_stored_left||0);\n\t\t\tpos.y = pos.y - 18;\n\n\t\t\tif (pos.y < box.y)\n\t\t\t\tpos.y = box.y;\n\t\t\telse {\n\t\t\t\tlet max = box.y + box.height - (this._header_height||0);\n\t\t\t\tif (pos.y > max)\n\t\t\t\t\tpos.y = max;\n\t\t\t}\n\t\t}\n\t},\n\t$dragOut:function(s,ot,nt){\n\t\tif (ot != nt){\n\t\t\tremove(DragControl._dropHTML);\n\t\t\tthis._marked_item_id = DragControl._dropHTML = null;\n\t\t}\n\t\treturn DragItem.$dragOut.apply(this, arguments);\n\t},\n\t_define_index:function(s,t,context){\n\t\tvar target = this._marked_item_id == \"$webix-last\" ? null : this._marked_item_id;\n\n\t\tif (this.getBranchIndex){\n\t\t\tif (target){\n\t\t\t\tcontext.parent = this.getParentId(target);\n\t\t\t\tcontext.index = this.getBranchIndex(target);\n\t\t\t\tif (s == t && this.getParentId(context.start) == context.parent && this.getBranchIndex(context.start) < context.index)\n\t\t\t\t\tcontext.index -= 1;\n\t\t\t} else context.index = -1;\n\t\t} else {\n\t\t\tcontext.index = target?this.getIndexById(target):this.count();\n\t\t\tcontext.index -= (s == t && this.getIndexById(context.start)<context.index?1:0);\n\t\t}\n\t},\n\t$dragDestroy: function(){\n\t\tlet context = DragControl._drag_context;\n\n\t\tif (isArray(context.source) && !context.fragile)\n\t\t\tthis._remove_css(context.source, \"webix_invisible\");\n\n\t\tremove(DragControl._html);\n\t},\n\t_init_drop_area: function(){\n\t\tlet node = document.createElement(\"div\");\n\t\tnode.className = \"webix_drop_area\";\n\t\tnode.style.width = this.type.width + \"px\";\n\t\tnode.style.height = this.type.height + \"px\";\n\t\tnode.innerHTML = this.$dropHTML();\n\t\tnode.setAttribute(this._id, \"$webix-drop\");\n\n\t\treturn [node];\n\t},\n\t$dragMark: function(){\n\t\treturn false;\n\t}\n};\n\ndefine(\"DragOrder\", DragOrder);\n\nexport default DragOrder;","import {extend, copy, _power_array} from \"../webix/helpers\";\n\n\nconst Undo = {\n\t$init:function(){\n\t\tthis._undoHistory = extend([],_power_array,true);\n\t\tthis._undoCursor = -1;\n\t},\n\tundo_setter: function(value){\n\t\tif(value){\n\t\t\tthis._init_undo();\n\t\t\tthis._init_undo = function(){};\n\t\t}\n\t\treturn value;\n\t},\n\t_init_undo: function(){\n\t\tvar view = this;\n\n\t\t// drag-n-drop\n\t\tthis.attachEvent(\"onBeforeDrop\", function(context){\n\t\t\tif(context.from == context.to){\n\t\t\t\tvar item = view._draggedItem = copy(this.getItem(context.start));\n\t\t\t\tif(this.data.branch){\n\t\t\t\t\titem.$index = this.getBranchIndex(item.id);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\titem.$index = this.getIndexById(item.id);\n\t\t\t}\n\t\t});\n\t\tthis.data.attachEvent(\"onDataMove\", function( sid ){\n\t\t\tif(view._draggedItem && view._draggedItem.id == sid){\n\t\t\t\tvar data = view._draggedItem;\n\t\t\t\tview._draggedItem = null;\n\t\t\t\tview._addToHistory(sid, data, \"move\");\n\t\t\t}\n\t\t});\n\n\t\t// add, remove\n\t\tthis.data.attachEvent(\"onBeforeDelete\", function(id){\n\t\t\tif(this.getItem(id)){\n\t\t\t\tvar item = view._deletedItem = copy(this.getItem(id));\n\t\t\t\tif(this.branch){\n\t\t\t\t\titem.$index = this.getBranchIndex(id);\n\t\t\t\t\tif(this.branch[id])\n\t\t\t\t\t\titem.$branch = copy(this.serialize(id));\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\titem.$index = this.getIndexById(id);\n\t\t\t}\n\t\t});\n\t\tthis.data.attachEvent(\"onDataUpdate\", function(id, data, old){\n\t\t\tview._addToHistory(id+\"\", old, \"update\");\n\t\t});\n\t\tthis.data.attachEvent(\"onStoreUpdated\", function(id, item, mode){\n\t\t\tvar data = null;\n\t\t\tif(id){\n\t\t\t\tif(mode == \"add\"){\n\t\t\t\t\tdata = copy(item);\n\t\t\t\t}\n\t\t\t\telse if( mode == \"delete\") {\n\t\t\t\t\tdata = view._deletedItem;\n\t\t\t\t}\n\n\t\t\t\tif(data)\n\t\t\t\t\tview._addToHistory(id, data, mode);\n\t\t\t}\n\t\t});\n\n\t\t// id change\n\t\tthis.data.attachEvent(\"onIdChange\", function(oldId,newId){\n\t\t\tif(typeof oldId == \"object\")\n\t\t\t\toldId = oldId.row;\n\t\t\tfor(var i =0; i < view._undoHistory.length; i++){\n\t\t\t\tif(view._undoHistory[i].id == oldId){\n\t\t\t\t\tview._undoHistory[i].id = newId;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\t_addToHistory: function(id, data, action){\n\t\tif(!this._skipHistory && this._settings.undo){\n\t\t\tthis._undoHistory.push({id: id, action: action, data: data});\n\t\t\tif(this._undoHistory.length==20)\n\t\t\t\tthis._undoHistory.splice(0,1);\n\t\t\tif(!this._skipCursorInc)\n\t\t\t\tthis._undoCursor = this._undoHistory.length - 1;\n\t\t}\n\t},\n\tignoreUndo: function(func, master){\n\t\tthis._skipHistory = true;\n\t\tfunc.call(master||this);\n\t\tthis._skipHistory = false;\n\t},\n\tremoveUndo: function(id){\n\t\tfor( var i = this._undoHistory.length-1; i >=0; i--){\n\t\t\tif(this._undoHistory[i].id == id){\n\t\t\t\tif(this._undoHistory[i].action == \"id\"){\n\t\t\t\t\tid = this._undoHistory[i].data;\n\t\t\t\t}\n\t\t\t\tthis._undoHistory.removeAt(i);\n\t\t\t}\n\t\t}\n\t\tthis._undoCursor = this._undoHistory.length - 1;\n\t},\n\tundo: function(id){\n\t\tif(id){\n\t\t\tthis.ignoreUndo(function(){\n\t\t\t\tvar data, i;\n\t\t\t\tfor( i = this._undoHistory.length-1; !data && i >=0; i--){\n\t\t\t\t\tif(this._undoHistory[i].id == id)\n\t\t\t\t\t\tdata = this._undoHistory[i];\n\t\t\t\t}\n\n\t\t\t\tif(data){\n\t\t\t\t\t/*if(data.action == \"id\")\n\t\t\t\t\t\tid = data.data;*/\n\t\t\t\t\tthis._undoAction(data);\n\t\t\t\t\tthis._undoHistory.removeAt(i+1);\n\t\t\t\t\tthis._undoCursor = this._undoHistory.length - 1;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse{\n\t\t\tvar data = this._undoHistory[this._undoCursor];\n\t\t\tif(data){\n\t\t\t\tthis.ignoreUndo(function(){\n\t\t\t\t\tthis._undoAction(data);\n\t\t\t\t\tthis._undoHistory.removeAt(this._undoCursor);\n\t\t\t\t});\n\t\t\t\tthis._undoCursor--;\n\t\t\t\t/*if(data.action == \"id\")\n\t\t\t\t\tthis.undo();*/\n\t\t\t}\n\t\t}\n\t},\n\t_undoAction: function(obj){\n\t\tif(obj.action == \"delete\"){\n\t\t\tvar branch = null,\n\t\t\t\tparentId = obj.data.$parent;\n\n\t\t\tif(obj.data.$branch){\n\t\t\t\tbranch = {\n\t\t\t\t\tparent: obj.id,\n\t\t\t\t\tdata: copy(obj.data.$branch)\n\t\t\t\t};\n\t\t\t\tdelete obj.data.$branch;\n\t\t\t\tif(parentId && !this.data.branch[parentId])\n\t\t\t\t\tparentId = 0;\n\t\t\t}\n\n\t\t\tthis.add(obj.data, obj.data.$index, parentId);\n\t\t\tif(branch){\n\t\t\t\tthis.parse(branch);\n\t\t\t}\n\t\t}\n\t\telse if(obj.action == \"add\"){\n\t\t\tthis.remove(obj.id);\n\t\t}\n\t\telse if(obj.action == \"update\"){\n\t\t\tthis.updateItem(obj.id, obj.data);\n\t\t}\n\t\telse if(obj.action == \"move\"){\n\t\t\tif(obj.data.$parent){\n\t\t\t\tif(this.getItem(obj.data.$parent))\n\t\t\t\t\tthis.move(obj.id, obj.data.$index, null, {parent: obj.data.$parent});\n\t\t\t}\n\t\t\telse\n\t\t\t\tthis.move(obj.id, obj.data.$index);\n\t\t}\n\t\t/*else if(obj.action == \"id\"){\n\t\t\tthis.data.changeId(obj.id, obj.data);\n\t\t}*/\n\t}\n};\n\nexport default Undo;","\n\nimport {create} from \"../webix/html\";\nimport {isArray, isUndefined, copy, toNode, bind, extend} from \"../webix/helpers\";\nimport {ui, $$} from \"../ui/core\";\nimport i18n from \"../webix/i18n\";\nimport {_event} from \"../webix/htmlevents\";\nimport {assert} from \"../webix/debug\";\nimport {callEvent} from \"../webix/customevents\";\n\n\nfunction init_suggest(editor, input){\n\tvar suggest = editor.config.suggest;\n\tif (suggest){\n\t\tvar box = editor.config.suggest = create_suggest(suggest);\n\t\tvar boxobj = $$(box);\n\t\tif (boxobj && input)\n\t\t\tboxobj.linkInput(input);\n\t}\n}\n\nfunction create_suggest(config){\n\tif (typeof config == \"string\") return config;\n\tif (config.linkInput) return config._settings.id;\n\n\n\tif (typeof config == \"object\"){\n\t\tif (isArray(config))\n\t\t\tconfig = { data: config };\n\t\tconfig.view = config.view || \"suggest\";\n\t} else if (config === true)\n\t\tconfig = { view:\"suggest\" };\n\n\tvar obj = ui(config);\n\treturn obj.config.id;\n}\n\nfunction getLabel(config){\n\tvar text = config.header && config.header[0]?config.header[0].text:config.editValue || config.label;\n\treturn (text || \"\").toString().replace(/<[^>]*>/g, \"\");\n}\n\n/*\nthis.node - html node, available after render call\nthis.config - editor config\nthis.value - original value\nthis.popup - id of popup \n*/\nconst editors = {\n\t\"text\":{\n\t\tfocus:function(){\n\t\t\tthis.getInputNode(this.node).focus();\n\t\t\tthis.getInputNode(this.node).select();\n\t\t},\n\t\tgetValue:function(){\n\t\t\treturn this.getInputNode(this.node).value;\n\t\t},\n\t\tsetValue:function(value){\n\t\t\tvar input = this.getInputNode(this.node);\n\t\t\tinput.value = value;\n\n\t\t\tinit_suggest(this, input);\n\t\t},\n\t\tgetInputNode:function(){\n\t\t\treturn this.node.firstChild;\n\t\t},\n\t\trender:function(){\n\t\t\treturn create(\"div\", {\n\t\t\t\t\"class\":\"webix_dt_editor\"\n\t\t\t}, \"<input type='text' aria-label='\"+getLabel(this.config)+\"'>\");\n\t\t}\n\t},\n\t\"inline-checkbox\":{\n\t\trender:function(){ return {}; },\n\t\tgetValue:function(){\n\t\t\treturn this.node.checked;\n\t\t},\n\t\tsetValue:function(){},\n\t\tfocus:function(){\n\t\t\tthis.node.focus();\n\t\t},\n\t\tgetInputNode:function(){},\n\t\t$inline:true\n\t},\n\t\"inline-text\":{\n\t\trender:function(){ return {}; },\n\t\tgetValue:function(){\n\t\t\treturn this.node.value;\n\t\t},\n\t\tsetValue:function(){},\n\t\tfocus:function(){\n\t\t\ttry{\t//IE9\n\t\t\t\tthis.node.select();\n\t\t\t\tthis.node.focus();\n\t\t\t} catch(e){} //eslint-disable-line\n\t\t},\n\t\tgetInputNode:function(){},\n\t\t$inline:true\n\t},\n\t\"checkbox\":{\n\t\tfocus:function(){\n\t\t\tthis.getInputNode().focus();\n\t\t},\n\t\tgetValue:function(){\n\t\t\treturn this.getInputNode().checked;\n\t\t},\n\t\tsetValue:function(value){\n\t\t\tthis.getInputNode().checked = !!value;\n\t\t},\n\t\tgetInputNode:function(){\n\t\t\treturn this.node.firstChild.firstChild;\n\t\t},\n\t\trender:function(){\n\t\t\treturn create(\"div\", {\n\t\t\t\t\"class\":\"webix_dt_editor\"\n\t\t\t}, \"<div><input type='checkbox' aria-label='\"+getLabel(this.config)+\"'></div>\");\n\t\t}\n\t},\n\t\"select\":{\n\t\tfocus:function(){\n\t\t\tthis.getInputNode().focus();\n\t\t},\n\t\tgetValue:function(){\n\t\t\treturn this.getInputNode().value;\n\t\t},\n\t\tsetValue:function(value){\n\t\t\tthis.getInputNode().value = value;\n\t\t},\n\t\tgetInputNode:function(){\n\t\t\treturn this.node.firstChild;\n\t\t},\n\t\trender:function(){\n\t\t\tvar html = \"\";\n\t\t\tvar options = this.config.options || this.config.collection;\n\t\t\tassert(options,\"options not defined for select editor\");\n\n\t\t\tif (options.data && options.data.each)\n\t\t\t\toptions.data.each(function(obj){\n\t\t\t\t\thtml +=\"<option value='\"+obj.id+\"'>\"+obj.value+\"</option>\";\n\t\t\t\t});\n\t\t\telse {\n\t\t\t\tif (isArray(options)){\n\t\t\t\t\tfor (var i=0; i<options.length; i++){\n\t\t\t\t\t\tvar rec = options[i];\n\t\t\t\t\t\tvar isplain = isUndefined(rec.id);\n\t\t\t\t\t\tvar id = isplain ? rec : rec.id;\n\t\t\t\t\t\tvar label = isplain ? rec : rec.value;\n\n\t\t\t\t\t\thtml +=\"<option value='\"+id+\"'>\"+label+\"</option>\";\n\t\t\t\t\t}\n\t\t\t\t} else for (var key in options){\n\t\t\t\t\thtml +=\"<option value='\"+key+\"'>\"+options[key]+\"</option>\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn create(\"div\", {\n\t\t\t\t\"class\":\"webix_dt_editor\"\n\t\t\t}, \"<select aria-label='\"+getLabel(this.config)+\"'>\"+html+\"</select>\");\n\t\t}\n\t},\n\tpopup:{\n\t\tfocus:function(){\n\t\t\tthis.getInputNode().focus();\n\t\t},\n\t\tdestroy:function(){\n\t\t\tthis.getPopup().hide();\n\t\t},\n\t\tgetValue:function(){\n\t\t\treturn this.getInputNode().getValue()||\"\";\n\t\t},\n\t\tsetValue:function(value){\n\t\t\tthis.getPopup().show(this.node);\n\t\t\tthis.getInputNode().setValue(value);\n\t\t},\n\t\tgetInputNode:function(){\n\t\t\treturn this.getPopup().getChildViews()[0];\n\t\t},\n\t\tgetPopup:function(){\n\t\t\tif (!this.config.$popup)\n\t\t\t\tthis.config.$popup = this.createPopup();\n\n\t\t\treturn $$(this.config.$popup);\n\t\t},\n\t\tcreatePopup:function(){\n\t\t\tvar popup = this.config.popup || this.config.suggest;\n\t\t\tif (popup){\n\t\t\t\tvar pobj;\n\t\t\t\tif (typeof popup == \"object\" && !popup.name){\n\t\t\t\t\tpopup.view = popup.view || \"suggest\";\n\t\t\t\t\tpobj = ui(copy(popup));\n\t\t\t\t} else\n\t\t\t\t\tpobj = $$(popup);\n\n\t\t\t\t//custom popup may be linked already\n\t\t\t\tif(!pobj._linked){\n\t\t\t\t\tif (pobj.linkInput)\n\t\t\t\t\t\tpobj.linkInput(document.body);\n\t\t\t\t\telse if(this.linkInput)\n\t\t\t\t\t\tthis.linkInput(document.body);\n\t\t\t\t\tpobj._linked = true;\n\t\t\t\t}\n\n\t\t\t\treturn pobj;\n\t\t\t}\n\n\t\t\tvar type = editors.$popup[this.popupType];\n\t\t\tif (typeof type != \"string\" && !type.name){\n\t\t\t\ttype = editors.$popup[this.popupType] = ui(type);\n\t\t\t\tthis.popupInit(type);\n\n\t\t\t\tif(!type.linkInput)\n\t\t\t\t\tthis.linkInput(document.body);\n\t\t\t\n\t\t\t}\n\t\t\treturn type._settings.id;\n\t\t},\n\t\tlinkInput:function(node){\n\t\t\t_event(toNode(node), \"keydown\", bind(function(e){\n\t\t\t//abort, when editor was not initialized yet\n\t\t\t\tif (!this.config.$popup) return;\n\n\t\t\t\tvar code = e.which || e.keyCode, list = this.getInputNode();\n\t\t\t\tif(!list.isVisible()) return;\n\n\t\t\t\tif(list.moveSelection && code < 41 && code > 32){\n\t\t\t\t\tvar dir;\n\t\t\t\t\tif(code == 33) dir = \"pgup\";\n\t\t\t\t\tif(code == 34) dir = \"pgdown\";\n\t\t\t\t\tif(code == 35) dir = \"bottom\";\n\t\t\t\t\tif(code == 36) dir = \"top\";\n\t\t\t\t\tif(code == 37) dir = \"left\";\n\t\t\t\t\tif(code == 38) dir = \"up\";\n\t\t\t\t\tif(code == 39) dir = \"right\";\n\t\t\t\t\tif(code == 40) dir = \"down\";\n\n\t\t\t\t\tlist.moveSelection(dir);\n\t\t\t\t} \n\t\t\t\t// shift+enter support for 'popup' editor\n\t\t\t\telse if(code === 13 && ( e.target.nodeName !==\"TEXTAREA\" || !e.shiftKey))\n\t\t\t\t\tcallEvent(\"onEditEnd\", []);\n\t\t\t\n\t\t\t}, this));\n\t\t},\n\n\t\tpopupInit:function(){},\n\t\tpopupType:\"text\",\n\t\trender\t:function(){ return {}; },\n\t\t$inline:true\n\t}\n};\n\neditors.color = extend({\n\tfocus\t:function(){},\n\tpopupType:\"color\",\n\tpopupInit:function(popup){\n\t\tpopup.getChildViews()[0].attachEvent(\"onItemClick\", function(value){\n\t\t\tcallEvent(\"onEditEnd\",[value]);\n\t\t});\n\t}\n}, editors.popup);\n\neditors.date = extend({\n\tfocus\t:function(){},\n\tpopupType:\"date\",\n\tsetValue:function(value){\n\t\tthis._is_string = this.config.stringResult || (value && typeof value == \"string\");\n\t\teditors.popup.setValue.call(this, value);\n\t},\n\tgetValue:function(){\n\t\treturn this.getInputNode().getValue(this._is_string?i18n.parseFormatStr:\"\")||\"\";\n\t},\n\tpopupInit:function(popup){\n\t\tpopup.getChildViews()[0].attachEvent(\"onDateSelect\", function(value){\n\t\t\tcallEvent(\"onEditEnd\",[value]);\n\t\t});\n\t}\n}, editors.popup);\n\neditors.combo = extend({\n\t_create_suggest:function(config){\n\t\tif(this.config.popup){\n\t\t\treturn this.config.popup.config.id;\n\t\t}\n\t\telse if (config){\n\t\t\treturn create_suggest(config);\n\t\t} else\n\t\t\treturn this._shared_suggest(config);\n\t},\n\t_shared_suggest:function(){\n\t\tvar e = editors.combo;\n\t\treturn (e._suggest = e._suggest || this._create_suggest(true));\n\t},\n\trender:function(){\n\t\tvar node = create(\"div\", {\n\t\t\t\"class\":\"webix_dt_editor\"\n\t\t}, \"<input type='text' role='combobox' aria-label='\"+getLabel(this.config)+\"'>\");\n\n\t\t//save suggest id for future reference\t\t\n\t\tvar suggest = this.config.suggest = this._create_suggest(this.config.suggest);\n\n\t\tif (suggest){\n\t\t\t$$(suggest).linkInput(node.firstChild, true);\n\t\t\t_event(node.firstChild, \"click\",bind(this.showPopup, this));\n\t\t}\n\t\treturn node;\n\t},\n\tgetPopup:function(){\n\t\treturn $$(this.config.suggest);\n\t},\n\tshowPopup:function(){\n\t\tvar popup = this.getPopup();\n\t\tvar list = popup.getList();\n\t\tvar input = this.getInputNode();\n\t\tvar value = this._initial_value;\n\n\t\tpopup.show(input);\n\t\tinput.setAttribute(\"aria-expanded\", \"true\");\n\t\tif(value ){\n\t\t\tassert(list.exists(value), \"Option with ID \"+value+\" doesn't exist\");\n\t\t\tif(list.exists(value)){\n\t\t\t\tlist.select(value);\n\t\t\t\tlist.showItem(value);\n\t\t\t}\n\t\t}else{\n\t\t\tlist.unselect();\n\t\t\tlist.showItem(list.getFirstId());\n\t\t}\n\t\tpopup._last_input_target = input;\n\t},\n\tafterRender:function(){\n\t\tthis.showPopup();\n\t},\n\tsetValue:function(value){\n\t\tthis._initial_value = value;\n\t\tif (this.config.suggest){\n\t\t\tvar sobj = $$(this.config.suggest);\n\t\t\tvar data =  this.config.collection || this.config.options;\n\t\t\tif (data)\n\t\t\t\tsobj.getList().data.importData(data);\n\n\t\t\tthis.getInputNode(this.node).value = sobj.getItemText(value);\n\t\t}\n\t},\n\tgetValue:function(){\n\t\tvar value = this.getInputNode().value;\n\t\tif (this.config.suggest){\n\t\t\tvar suggest = $$(this.config.suggest),\n\t\t\t\tlist = suggest.getList();\n\t\t\tif (value || (list.getSelectedId && list.getSelectedId()))\t\n\t\t\t\tvalue = suggest.getSuggestion(value);\n\t\t}\n\t\n\t\treturn value;\n\t}\n}, editors.text);\n\n\neditors.richselect = extend({\n\tfocus:function(){},\n\tgetValue:function(){\n\t\treturn this.getPopup().getValue();\n\t},\n\tsetValue:function(value){\n\t\tvar suggest =  this.config.collection || this.config.options;\n\t\tthis.getInputNode();\n\t\tif (suggest)\n\t\t\tthis.getPopup().getList().data.importData(suggest);\n\n\t\tthis.getPopup().show(this.node);\n\t\tthis.getPopup().setValue(value);\n\t},\n\tgetInputNode:function(){\n\t\treturn this.getPopup().getList();\n\t},\n\tpopupInit:function(popup){\n\t\tpopup.linkInput(document.body);\n\t},\n\tpopupType:\"richselect\"\n}, editors.popup);\n\neditors.password = extend({\n\trender:function(){\n\t\treturn create(\"div\", {\n\t\t\t\"class\":\"webix_dt_editor\"\n\t\t}, \"<input type='password' aria-label='\"+getLabel(this.config)+\"'>\");\n\t}\n}, editors.text);\n\neditors.$popup = {\n\ttext:{\n\t\tview:\"popup\", width:250, height:150,\n\t\tbody:{ view:\"textarea\" }\n\t},\n\tcolor:{\n\t\tview:\"popup\",\n\t\tbody:{ view:\"colorboard\" }\n\t},\n\tdate:{\n\t\tview:\"popup\", width:250, height:250, padding:0,\n\t\tbody:{ view:\"calendar\", icons:true, borderless:true }\n\t},\n\trichselect:{\n\t\tview:\"suggest\",\n\t\tbody:{ view:\"list\", select:true }\n\t},\n\tmultiselect:{\n\t\tview:\"multisuggest\",\n\t\tsuggest:{\n\t\t\tbutton:true\n\t\t}\n\t}\n};\n\nexport default editors;","import {remove, removeCss, addCss} from \"../webix/html\";\nimport UIManager from \"../core/uimanager\";\nimport {extend, bind, delay, isUndefined} from \"../webix/helpers\";\nimport {ui, $$} from \"../ui/core\";\nimport {_event} from \"../webix/htmlevents\";\nimport {assert} from \"../webix/debug\";\nimport {attachEvent, callEvent} from \"../webix/customevents\";\nimport Undo from \"../core/undo\";\n\n\nimport globalState from \"../core/state\";\nimport editors from \"../webix/editors\";\n/*\n\tBehavior:EditAbility - enables item operation for the items\n\t\n\t@export\n\t\tedit\n\t\tstopEdit\n*/\n\nconst EditAbility ={\n\tdefaults:{\n\t\teditaction:\"click\"\n\t},\n\t$init:function(config){\n\t\tthis._editors = {};\n\t\tthis._in_edit_mode = 0;\n\t\tthis._edit_open_time = 0;\n\t\tthis._contentobj.style.position = \"relative\";\n\t\tif (config)\n\t\t\tconfig.onDblClick = config.onDblClick || {};\n\n\t\tthis.attachEvent(\"onAfterRender\", this._refocus_inline_editor);\n\n\t\t//when we call extend the editable prop can be already set\n\t\tif (this._settings.editable)\n\t\t\tthis._init_edit_events_once();\n\n\t\textend(this,Undo);\n\t},\n\t_refocus_try:function(newnode){\n\t\ttry{ //Chrome throws an error if selectionStart is not accessible\n\t\t\tif (typeof newnode.selectionStart == \"number\") {\n\t\t\t\tnewnode.selectionStart = newnode.selectionEnd = newnode.value.length;\n\t\t\t} else if (typeof newnode.createTextRange != \"undefined\") {\n\t\t\t\tvar range = newnode.createTextRange();\n\t\t\t\trange.collapse(false);\n\t\t\t\trange.select();\n\t\t\t}\n\t\t} catch(e){} // eslint-disable-line\n\t},\n\t_refocus_inline_editor:function(){\n\t\tvar editor = this.getEditor();\n\t\tif (editor && editor.$inline && !editor.getPopup){\n\t\t\tvar newnode = this._locateInput(editor);\n\t\t\tif (newnode && newnode != editor.node){\n\t\t\t\tvar text = editor.node.value;\n\t\t\t\teditor.node = newnode;\n\t\t\t\tnewnode.value = text;\n\t\t\t\tnewnode.focus();\n\n\t\t\t\tthis._refocus_try(newnode);\n\t\t\t} else \n\t\t\t\tthis.editStop();\n\t\t}\n\t},\n\teditable_setter:function(value){\n\t\tif (value)\n\t\t\tthis._init_edit_events_once();\n\t\treturn value;\n\t},\n\t_init_edit_events_once:function(){\n\t\t//will close editor on any click outside\n\t\tattachEvent(\"onEditEnd\", bind(function(){\n\t\t\tif (this._in_edit_mode)\n\t\t\t\tthis.editStop();\n\t\t}, this));\n\t\tattachEvent(\"onClick\", bind(function(e){\n\t\t\t//but ignore click which opens editor\n\t\t\tif (this._in_edit_mode && (new Date())-this._edit_open_time > 200){\n\t\t\t\tif (!this._last_editor || this._last_editor.popupType || !e || ( !this._last_editor.node || !this._last_editor.node.contains(e.target || e.srcElement)))\n\t\t\t\t\tthis.editStop();\n\t\t\t}\n\t\t}, this));\n\t\t\n\t\t//property sheet has simple data object, without events\n\t\tif (this.data.attachEvent)\n\t\t\tthis.data.attachEvent(\"onIdChange\", bind(function(oldid, newid){\n\t\t\t\tthis._changeEditorId(oldid, newid);\n\t\t\t}, this));\n\n\t\t//when clicking on row - will start editor\n\t\tthis.attachEvent(\"onItemClick\", function(id){\n\t\t\tif (this._settings.editable && this._settings.editaction == \"click\")\n\t\t\t\tthis.edit(id);\n\t\t});\n\t\tthis.attachEvent(\"onItemDblClick\", function(id){\n\t\t\tif (this._settings.editable && this._settings.editaction == \"dblclick\")\n\t\t\t\tthis.edit(id);\n\t\t});\n\t\t//each time when we clicking on input, reset timer to prevent self-closing\n\t\tthis._reset_active_editor = bind(function(){\n\t\t\tthis._edit_open_time = new Date();\n\t\t},this);\n\n\t\tthis._init_edit_events_once = function(){};\n\n\t\tif (this._component_specific_edit_init)\n\t\t\tthis._component_specific_edit_init();\n\t},\n\t_handle_live_edits:function(){\n\t\tdelay(function(){\n\t\t\tvar editor = this.getEditor();\n\t\t\tif (editor && editor.config.liveEdit){\n\t\t\t\tvar state = { value:editor.getValue(), old: editor.value };\n\t\t\t\tif (state.value == state.old) return;\n\n\t\t\t\teditor.value = state.value;\n\t\t\t\tthis._set_new_value(editor, state.value, false);\n\t\t\t\tthis.callEvent(\"onLiveEdit\", [state, editor]);\n\t\t\t}\n\t\t}, this);\n\t},\n\t_show_editor_form:function(id){\n\t\tvar form = this._settings.form;\n\t\tif (typeof form != \"string\")\n\t\t\tthis._settings.form = form = ui(form).config.id;\n\n\t\tform = $$(form);\n\t\tvar realform = form.setValues?form:form.getChildViews()[0];\n\n\t\t\n\t\trealform.setValues(this.getItem(id.row || id));\n\t\tform.config.master = this.config.id;\n\t\tform.show( this.getItemNode(id) );\n\n\t\tvar first = realform.getChildViews()[0];\n\t\tif (first.focus)\n\t\t\tfirst.focus();\n\t},\n\tedit:function(id, preserve, show){\n\t\tif (!this._settings.editable || !this.callEvent(\"onBeforeEditStart\", [id])) return;\n\t\tif (this._settings.form)\n\t\t\treturn this._show_editor_form(id);\n\n\t\tvar editor = this._get_editor_type(id);\n\t\tif (editor){\n\t\t\tif (this.getEditor(id)) return;\n\t\t\tif (!preserve) this.editStop();\n\n\t\t\t//render html input\n\t\t\tassert(editors[editor], \"Invalid editor type: \"+editor);\n\t\t\tvar type = extend({}, editors[editor]);\n\t\t\t\n\t\t\tvar node = this._init_editor(id, type, show);\n\t\t\tif (type.config.liveEdit)\n\t\t\t\tthis._live_edits_handler = this.attachEvent(\"onKeyPress\", this._handle_live_edits);\n\n\t\t\tvar area = type.getPopup?type.getPopup(node)._viewobj:node;\n\n\t\t\tif (area)\n\t\t\t\t_event(area, \"click\", this._reset_active_editor);\n\t\t\tif (node)\n\t\t\t\t_event(node, \"change\", this._on_editor_change, { bind:{ view:this, id:id }});\n\t\t\tif (show !== false)\n\t\t\t\ttype.focus();\n\n\t\t\tif (this.$fixEditor)\n\t\t\t\tthis.$fixEditor(type);\n\n\t\t\t//save time of creation to prevent instant closing from the same click\n\t\t\tthis._edit_open_time = globalState.edit_open_time = new Date();\n\n\t\t\tUIManager.setFocus(this, true);\n\t\t\tthis.callEvent(\"onAfterEditStart\", [id]);\n\t\t\treturn type;\n\t\t}\n\t\treturn null;\n\t},\n\tgetEditor:function(id){\n\t\tif (!id)\n\t\t\treturn this._last_editor;\n\n\t\treturn this._editors[id];\n\t},\n\t_changeEditorId:function(oldid, newid)\t{\n\t\tvar editor = this._editors[oldid];\n\t\tif (editor){\n\t\t\tthis._editors[newid] = editor;\n\t\t\teditor.id = newid;\n\t\t\tdelete this._editors[oldid];\n\t\t}\n\t},\n\t_on_editor_change:function(){\n\t\tif (this.view.hasEvent(\"onEditorChange\"))\n\t\t\tthis.view.callEvent(\"onEditorChange\", [this.id, this.view.getEditorValue(this.id) ]);\n\t},\n\t_get_edit_config:function(){\n\t\treturn this._settings;\n\t},\n\t_init_editor:function(id, type, show){\n\t\ttype.config = this._get_edit_config(id);\n\t\tvar node = type.render();\n\n\t\tif (type.$inline)\n\t\t\tnode = this._locateInput(id);\n\t\ttype.node = node;\n\n\t\tvar item = this.getItem(id);\n\t\t//value can be configured by editValue option\n\t\tvar value = item[this._settings.editValue||\"value\"];\n\t\t//if property was not defined - use empty value\n\t\tif (isUndefined(value))\n\t\t\tvalue = \"\";\n\n\t\ttype.setValue(value, item);\n\t\ttype.value = value;\n\n\t\tthis._addEditor(id, type);\n\n\t\t//show it over cell\n\t\tif (show !== false)\n\t\t\tthis.showItem(id);\n\t\tif (!type.$inline)\n\t\t\tthis._sizeToCell(id, node, true);\n\n\t\tif (type.afterRender)\n\t\t\ttype.afterRender();\n\n\t\treturn node;\n\t},\n\t_locate_cell:function(id){\n\t\treturn this.getItemNode(id);\n\t},\n\t_locateInput:function(id){\n\t\tvar cell = this._locate_cell(id);\n\t\tif (cell)\n\t\t\tcell = cell.getElementsByTagName(\"input\")[0] || cell;\n\n\t\treturn cell;\n\t},\n\t_get_editor_type:function(){\n\t\treturn this._settings.editor;\n\t},\n\t_addEditor:function(id, type){\n\t\ttype.id = id;\n\t\tthis._editors[id]= this._last_editor = type;\n\t\tthis._in_edit_mode++;\n\t},\n\t_removeEditor:function(editor){\n\t\tif (this._last_editor == editor)\n\t\t\tthis._last_editor = 0;\n\t\t\n\t\tif (editor.destroy)\n\t\t\teditor.destroy();\n\n\t\tdelete editor.popup;\n\t\tdelete editor.node;\n\n\t\tdelete this._editors[editor.id];\n\t\tthis._in_edit_mode--;\n\t},\n\tfocusEditor:function(){\n\t\tvar editor = this.getEditor.apply(this, arguments);\n\t\tif (editor && editor.focus)\n\t\t\teditor.focus();\n\t},\n\teditCancel:function(){\n\t\tthis.editStop(null, null, true);\n\t},\n\t_applyChanges: function(el){\n\t\tif (el){\n\t\t\tvar ed = this.getEditor();\n\t\t\tif (ed && ed.getPopup && ed.getPopup() == el.getTopParentView()) return;\n\t\t}\n\t\tthis.editStop();\n\t},\n\teditStop:function(id){\n\t\tif (this._edit_stop) return;\n\t\tthis._edit_stop = 1;\n\n\n\t\tvar cancel = arguments[2];\n\t\tvar result = 1;\n\t\tif (!id){\n\t\t\tthis._for_each_editor(function(editor){\n\t\t\t\tresult = result * this._editStop(editor, cancel);\n\t\t\t});\n\t\t} else \n\t\t\tresult = this._editStop(this._editors[id], cancel);\n\n\t\tthis._edit_stop = 0;\n\t\treturn result;\n\t},\n\t_cellPosition:function(id){\n\t\tvar html = this.getItemNode(id);\n\t\treturn {\n\t\t\tleft:html.offsetLeft, \n\t\t\ttop:html.offsetTop,\n\t\t\theight:html.offsetHeight,\n\t\t\twidth:html.offsetWidth,\n\t\t\tparent:this._contentobj\n\t\t};\n\t},\n\t_sizeToCell:function(id, node, inline){\n\t\t//fake inputs\n\t\tif (!node.style) return;\n\n\t\tvar pos = this._cellPosition(id);\n\n\t\tnode.style.top = pos.top + \"px\";\n\t\tnode.style.left = pos.left + \"px\";\n\n\t\tnode.style.width = pos.width-1+\"px\";\n\t\tnode.style.height = pos.height-1+\"px\";\n\n\t\tnode.top = pos.top; //later will be used during y-scrolling\n\n\t\tif (inline) pos.parent.appendChild(node);\n\t\treturn pos;\n\t},\n\t_for_each_editor:function(handler){\n\t\tfor (var editor in this._editors)\n\t\t\thandler.call(this, this._editors[editor]);\n\t},\n\t_editStop:function(editor, ignore){\n\t\tif (!editor || globalState._final_destruction) return;\n\t\tvar state = { \n\t\t\tvalue : this._get_new_value(editor), \n\t\t\told : editor.value\n\t\t};\n\t\tif (this.callEvent(\"onBeforeEditStop\", [state, editor, ignore])){\n\t\t\tif (!ignore){\n\t\t\t\t//special case, state.old = 0, state.value = \"\"\n\t\t\t\t//we need to state.old to string, to detect the change\n\t\t\t\tvar old = state.old;\n\t\t\t\tif (typeof state.value == \"string\") old += \"\";\n\n\t\t\t\tif (old != state.value || editor.config.liveEdit){\n\t\t\t\t\tvar item = this._set_new_value(editor, state.value, true);\t\n\t\t\t\t\tthis.updateItem(editor.row || editor.id, item);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (editor.$inline)\n\t\t\t\teditor.node = null;\n\t\t\telse\n\t\t\t\tremove(editor.node);\n\n\t\t\tvar popup = editor.config.suggest;\n\t\t\tif (popup && typeof popup == \"string\")\n\t\t\t\t$$(popup).hide();\n\n\t\t\tthis._removeEditor(editor);\n\t\t\tif (this._live_edits_handler)\n\t\t\t\tthis.detachEvent(this._live_edits_handler);\n\n\t\t\tthis.callEvent(\"onAfterEditStop\", [state, editor, ignore]);\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t},\n\tvalidateEditor:function(id){\n\t\tvar result = true;\n\t\tif (this._settings.rules){\n\t\t\tvar editor = this.getEditor(id);\n\t\t\tvar key = editor.column||this._settings.editValue||\"value\";\n\t\t\tvar rule = this._settings.rules[key];\n\t\t\tvar all = this._settings.rules.$all;\n\n\t\t\tif (rule || all){\n\t\t\t\tvar obj = this.data.getItem(editor.row||editor.id);\n\t\t\t\tvar value = editor.getValue();\n\t\t\t\tvar input = editor.getInputNode();\n\n\t\t\t\tif (rule)\n\t\t\t\t\tresult = rule.call(this, value, obj, key);\n\t\t\t\tif (all)\n\t\t\t\t\tresult = all.call(this, value, obj, key) && result;\n\t\t\t\n\t\t\t\tif (result)\n\t\t\t\t\tremoveCss(input, \"webix_invalid\");\n\t\t\t\telse\n\t\t\t\t\taddCss(input, \"webix_invalid\");\n\n\t\t\t\tcallEvent(\"onLiveValidation\", [editor, result, obj, value]);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t},\n\tgetEditorValue:function(id){\n\t\tvar editor;\n\t\tif (arguments.length === 0)\n\t\t\teditor = this._last_editor;\n\t\telse\n\t\t\teditor = this.getEditor(id);\n\n\t\tif (editor)\n\t\t\treturn editor.getValue();\n\t},\n\tgetEditState:function(){\n\t\treturn this._last_editor || false;\n\t},\n\teditNext:function(next, from){ \n\t\tnext = next !== false; //true by default\n\t\tif (this._in_edit_mode == 1 || from){\n\t\t\t//only if one editor is active\n\t\t\tvar editor_next = this._find_cell_next((this._last_editor || from), function(id){\n\t\t\t\tif (this._get_editor_type(id))\n\t\t\t\t\treturn true;\n\t\t\t\treturn false;\n\t\t\t}, next);\n\n\t\t\tif (this.editStop()){\t//if we was able to close previous editor\n\t\t\t\tif (editor_next){\t//and there is a new target\n\t\t\t\t\tthis.edit(editor_next);\t//init new editor\n\t\t\t\t\tthis._after_edit_next(editor_next);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\t//stab, used in datatable\n\t_after_edit_next:function(){},\n\t_find_cell_next:function(start, check, direction){\n\t\tvar row = this.getIndexById(start.id);\n\t\tvar order = this.data.order;\n\t\t\n\t\tif (direction){\n\t\t\tfor (let i=row+1; i<order.length; i++){\n\t\t\t\tif (check.call(this, order[i]))\n\t\t\t\t\treturn order[i];\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let i=row-1; i>=0; i--){\n\t\t\t\tif (check.call(this, order[i]))\n\t\t\t\t\treturn order[i];\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t},\n\t_get_new_value(editor){\n\t\treturn editor.getValue();\n\t},\n\t_set_new_value:function(editor, new_value, copy){\n\t\tvar item = copy ? {} : this.getItem(editor.id);\n\t\titem[this._settings.editValue||\"value\"] = new_value;\n\t\treturn item;\n\t}\n};\n\nexport default EditAbility;","import {debug_size_box_start, debug_size_box_end} from \"../webix/debug\";\n\n\nconst FlexLayout = {\n\t$init:function(){\n\t\tthis.$view.className += \" webix_flexlayout\";\n\t},\n\t_fix_vertical_layout:function(){\n\n\t},\n\t_beforeResetBorders:function(){\n\n\t},\n\t_afterResetBorders:function(){\n\n\t},\n\t$getSize:function(){\n\t\tif (DEBUG) debug_size_box_start(this, true);\n\t\t\n\t\tvar w=0, h=0, g = this._settings.gravity;\n\t\tthis._sizes = [];\n\n\t\tfor (var i=0; i<this._cells.length; i++){\n\t\t\tvar size = this._cells[i].$getSize(0,0);\n\t\t\tthis._sizes.push(size);\n\n\t\t\tw = Math.max(w, size[0]);\n\t\t\th = Math.max(h, size[2]);\n\t\t}\n\n\t\tw += this._padding.left + this._padding.right;\n\t\th += this._padding.top + this._padding.bottom;\n\n\t\tif (this._settings.width)\n\t\t\tw = Math.max(w, this._settings.width);\n\t\tif (this._settings.height)\n\t\t\th = Math.max(h, this._settings.height);\n\n\t\tvar self_size = [w, 100000, h, 100000, g];\n\t\tif (DEBUG) debug_size_box_end(this, self_size);\n\t\treturn self_size;\n\t},\n\trender:function(){ this.resize(); },\n\t_set_child_size:function(){\n\t\tif (!this.isVisible(this._settings.id)) return;\n\t\tvar st = this.$view.style;\n\t\tvar margin = Math.round(this._margin/2);\n\t\tst.paddingTop = this._padding.top-margin + \"px\";\n\t\tst.paddingBottom = this._padding.bottom-margin + \"px\";\n\t\tst.paddingLeft = this._padding.left-margin + \"px\";\n\t\tst.paddingRight = this._padding.right-margin + \"px\";\n\n\t\tfor (let i=0; i<this._cells.length; i++){\n\t\t\tif (this._cells[i]._settings.hidden) continue;\n\t\t\tlet view = this._cells[i].$view;\n\t\t\tlet size = this._sizes[i];\n\t\t\tlet config = this._cells[i]._settings;\n\n\t\t\tif (view){\n\t\t\t\tview.style.minWidth = size[0]+\"px\";\n\t\t\t\tif (size[1] < 100000 && size[1] != size[0])\n\t\t\t\t\tview.style.maxWidth = size[1]+\"px\";\n\n\t\t\t\tview.style.flexBasis = config.flexBasis || (size[0])+\"px\";\n\t\t\t\tview.style.flexGrow = config.flexGrow || ((size[1] != size[0]) ? size[4] : 0);\n\t\t\t\tview.style.height = (size[3] != size[2]) ? \"auto\" : (size[2] + \"px\");\n\n\t\t\t\tview.style.minHeight = size[2]+\"px\";\n\t\t\t\tif (size[3] < 100000 && size[3] != size[2])\n\t\t\t\t\tview.style.maxHeight = size[3]+\"px\";\n\n\t\t\t\tview.style.margin = margin + \"px\";\n\t\t\t}\n\t\t}\n\n\t\tvar whs = [];\n\t\tfor (let i=0; i<this._cells.length; i++){\n\t\t\tif (this._cells[i]._settings.hidden) continue;\n\t\t\tlet view = this._cells[i].$view;\n\t\t\twhs[i] = [view.offsetWidth, view.offsetHeight];\n\t\t}\n\t\t\n\t\tfor (let i=0; i<this._cells.length; i++){\n\t\t\tif (this._cells[i]._settings.hidden) continue;\n\t\t\tlet cell = this._cells[i];\n\t\t\tlet view = cell.$view;\n\t\t\tif (view){\n\t\t\t\tcell._settings.flex = true;\n\t\t\t\tlet size = this._sizes[i];\n\t\t\t\tvar h = size[2] == size[3] ? size[2] : whs[i][1];\n\t\t\t\tcell.$setSize(whs[i][0], h);\n\t\t\t\tcell._settings.flex = false;\n\t\t\t}\n\t\t}\n\n\t\tthis.$height = this._content_height = this.$view.scrollHeight;\n\t\tthis.$view.style.height = this._content_height+\"px\";\n\t}\n};\n\nexport default FlexLayout;","\n\nconst GroupMethods = {\n\tsum:function(property, data){\n\t\tdata = data || this;\n\t\tvar summ = 0;\n\t\tfor (var i = 0; i < data.length; i++){\n\t\t\tconst num = parseFloat(property(data[i]), 10);\n\t\t\tif (!isNaN(num))\n\t\t\t\tsumm+=num;\n\t\t}\n\n\t\treturn summ;\n\t},\n\tmin:function(property, data){\n\t\tdata = data || this;\n\t\tvar min = Infinity;\n\n\n\t\tfor (var i = 0; i < data.length; i++){\n\t\t\tconst num = parseFloat(property(data[i]), 10);\n\t\t\tif (isNaN(num)) continue;\n\t\t\tif (num < min) min = num;\n\t\t}\n\n\t\treturn min === Infinity ? 0 : min*1;\n\t},\n\tmax:function(property, data){\n\t\tdata = data || this;\n\t\tvar max = -Infinity;\n\n\t\tfor (var i = 0; i < data.length; i++){\n\t\t\tconst num = parseFloat(property(data[i]), 10);\n\t\t\tif (isNaN(num)) continue;\n\t\t\tif (num > max) max = num;\n\t\t}\n\n\t\treturn max === -Infinity ? 0 : max*1;\n\t},\n\tcount:function(property, data){\n\t\tvar count = 0;\n\t\tfor (var i = 0; i < data.length; i++) {\n\t\t\tvar some = property(data[i]);\n\t\t\tif (some !== null && typeof some !== \"undefined\")\n\t\t\t\tcount++;\n\t\t}\n\t\treturn count;\n\t},\n\tany:function(property, data){\n\t\treturn property(data[0]);\n\t},\n\tstring:function(property){\n\t\treturn property.$name;\n\t}\n};\n\nexport default GroupMethods;","import {_to_array, uid} from \"../webix/helpers\";\nimport {assert} from \"../webix/debug\";\nimport GroupMethods from \"../core/groupmethods\";\n\n\nconst GroupStore = {\n\t$init:function(){\n\t\tthis.attachEvent(\"onClearAll\", () => this._not_grouped_order = null);\n\t\tthis.attachEvent(\"onSyncApply\", () => this._not_grouped_order = null);\n\t},\n\tungroup:function(target){\n\t\tif (this.getBranchIndex){\n\t\t\tif (!this._ungroupLevel(target)) return;\n\t\t} else {\n\t\t\tif (!this._not_grouped_order) return;\n\n\t\t\tthis.order = this._not_grouped_order;\n\t\t\tthis.pull = this._not_grouped_pull;\n\t\t}\n\t\t\n\t\tthis.callEvent(\"onStoreUpdated\",[]);\n\t},\n\t_ungroupLevel(target){\n\t\tconst parent = target || 0;\n\t\tconst level = parent == \"0\" ? 1 : this.getItem(parent).$level + 1;\n\t\tlet changed = false;\n\t\tconst top = this.branch[parent];\n\t\tlet order = [];\n\n\t\tfor (var i=0; i<top.length; i++){\n\t\t\tconst id = top[i];\n\t\t\tif (this.pull[id].$group){\n\t\t\t\tchanged = true;\n\t\t\t\tvar group = this.branch[id];\n\n\t\t\t\tif (group)\n\t\t\t\t\tthis.branch[id] = group.filter(a => {\n\t\t\t\t\t\tif (!this.pull[a].$footer)\n\t\t\t\t\t\t\treturn a;\n\t\t\t\t\t\tthis._unregisterItem(a);\n\t\t\t\t\t});\n\t\t\t\torder = order.concat(this.branch[id] || []);\n\t\t\t\tthis._unregisterItem(id);\n\t\t\t} else\n\t\t\t\torder.push(id);\n\t\t}\n\n\t\tif (!changed) return false;\n\t\tthis.branch[parent] = order;\n\t\tthis._fix_group_levels(this.branch[parent], parent, level);\n\n\t\tif (typeof target === \"undefined\")\n\t\t\tthis._ungroupLevel();\n\n\t\treturn true;\n\t},\n\t_unregisterItem(id){\n\t\tdelete this.pull[id];\n\t\tdelete this.branch[id];\n\t},\n\t_group_processing:function(scheme){\n\t\tthis.blockEvent();\n\t\tthis.group(scheme);\n\t\tthis.unblockEvent();\n\t},\n\t_group_prop_accessor:function(val){\n\t\tif (typeof val == \"function\")\n\t\t\treturn val;\n\t\tconst acc = function(obj){ return obj[val]; };\n\t\tacc.$name = val;\n\t\treturn acc;\n\t},\t\n\tgroup:function(config, target){\n\t\tassert(config, \"Empty config\");\n\t\tlet input;\n\n\t\tif (typeof config === \"string\"){\n\t\t\tinput = config;\n\t\t\tconfig = { by:this._group_prop_accessor(config), map:{} };\n\t\t} else if (typeof config === \"function\"){\n\t\t\tconfig = { by:config, map:{} };\n\t\t} else if (typeof config.by === \"string\"){\n\t\t\tinput = config.by;\n\t\t\tconfig.by = this._group_prop_accessor(config.by);\n\t\t}\n\t\tconfig.map = config.map || {};\n\t\tif (input && !config.map[input])\n\t\t\tconfig.map[input] = [input];\n\t\tconfig.missing = (config.missing === undefined) ? true : config.missing;\n\n\t\tif (this.getBranchIndex)\n\t\t\treturn this._group_tree(config, target);\n\t\t\n\t\tif (!this._not_grouped_order){\n\t\t\tthis._not_grouped_order = this.order;\n\t\t\tthis._not_grouped_pull = this.pull;\n\t\t}\n\n\t\tconst groups = {};\n\t\tconst labels = [];\n\t\tconst missed = [];\n\t\tconst misGroup = config.missing;\n\t\tthis.each(function(data){\n\t\t\tlet current = config.by(data);\n\t\t\tif (!current && current !== 0){\n\t\t\t\tif (misGroup === false) return;\n\t\t\t\tif (misGroup === true){\n\t\t\t\t\tmissed.push(data);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcurrent = misGroup;\n\t\t\t}\n\n\t\t\tif (!groups[current]){\n\t\t\t\tlabels.push({ id:current, value:current, $group:true, $row:config.row });\n\t\t\t\tgroups[current] = _to_array();\n\t\t\t}\n\t\t\tgroups[current].push(data);\n\t\t});\n\n\t\tfor (let i=0; i<labels.length; i++){\n\t\t\tlet group = labels[i];\n\t\t\tthis._map_group(config.map, group, groups[labels[i].id]);\n\n\t\t\tif (this.hasEvent(\"onGroupCreated\"))\n\t\t\t\tthis.callEvent(\"onGroupCreated\", [group.id, group.value, groups[labels[i].id]]);\n\t\t}\n\n\t\tthis.order = _to_array();\n\t\tthis.pull = {};\n\t\tthis._fill_pull(labels);\n\t\tthis._fill_pull(missed);\n\n\t\tthis.callEvent(\"onStoreUpdated\",[]);\n\t},\n\t_fill_pull:function(arr){\n\t\tfor (let i=0; i < arr.length; i++){\n\t\t\tlet id = this.id(arr[i]);\n\t\t\tif (this.pull[id])\n\t\t\t\tid = arr[i].id = uid();\n\n\t\t\tthis.pull[id] = arr[i];\n\t\t\tthis.order.push(id);\n\t\t\tif (this._scheme_init)\n\t\t\t\tthis._scheme_init(arr[i]);\n\t\t}\n\t},\n\t_map_group:function(map, group, data){\n\t\tfor (let prop in map){\n\t\t\tlet functor = (map[prop][1]||\"any\");\n\t\t\tlet property = this._group_prop_accessor(map[prop][0]);\n\t\t\tif (typeof functor != \"function\"){\n\t\t\t\tassert(GroupMethods[functor], \"Unknown grouping rule: \"+functor);\n\t\t\t\tfunctor = GroupMethods[functor];\n\t\t\t}\n\n\t\t\tgroup[prop] = functor.call(this, property, data);\n\t\t}\n\t},\n\t_group_tree:function(config, parent){\n\t\t//prepare\n\t\tlet level = 0;\n\t\tif (parent)\n\t\t\tlevel = this.getItem(parent).$level;\n\t\telse parent = 0;\n\n\t\t//run\n\t\tconst topbranch = [];\n\t\tconst labels = [];\n\t\tconst missed = [];\n\n\t\tlet order = this.branch[parent];\n\t\tfor (let i=0; i<order.length; i++){\n\t\t\tconst data = this.getItem(order[i]);\n\t\t\tlet current = config.by(data);\n\n\t\t\tif (!current && current !== 0)\n\t\t\t\tif (config.missing === false) continue;\n\t\t\t\telse if (config.missing === true){\n\t\t\t\t\tmissed.push(data.id);\n\t\t\t\t\tcontinue;\n\t\t\t\t} else current = config.missing;\n\n\t\t\tlet current_id = level+\"$\"+current;\n\t\t\tlet ancestor = this.branch[current_id];\n\n\t\t\tif (!ancestor){\n\t\t\t\tlet newitem = this.pull[current_id] = { id:current_id, value:current, $group:true, $row:config.row};\n\t\t\t\tif (this._scheme_init)\n\t\t\t\t\tthis._scheme_init(newitem);\n\n\t\t\t\tlabels.push(newitem);\n\t\t\t\tancestor = this.branch[current_id] = [];\n\t\t\t\tancestor._formath = [];\n\t\t\t\ttopbranch.push(current_id);\n\t\t\t}\n\t\t\tancestor.push(data.id);\n\t\t\tancestor._formath.push(data);\n\t\t}\n\n\t\tthis.branch[parent] = topbranch.concat(missed);\n\t\tfor (let i=0; i<labels.length; i++){\n\t\t\tlet group = labels[i];\n\t\t\tthis._map_group(config.map, group, this.branch[labels[i].id]._formath);\n\n\t\t\tif (this.hasEvent(\"onGroupCreated\"))\n\t\t\t\tthis.callEvent(\"onGroupCreated\", [group.id, group.value, this.branch[group.id]._formath]);\n\n\t\t\tif (config.footer){\n\t\t\t\tlet id = \"footer$\"+group.id;\n\t\t\t\tlet footer = this.pull[id] = { id:id, $footer:true, value: group.value, $level:level, $count:0, $parent:group.id, $row:config.footer.row};\n\n\t\t\t\tthis._map_group(config.footer, footer, this.branch[labels[i].id]._formath);\n\t\t\t\t\n\t\t\t\tthis.branch[group.id].push(footer.id);\n\t\t\t\tthis.callEvent(\"onGroupFooter\", [footer.id, footer.value, this.branch[group.id]._formath]);\n\t\t\t}\n\t\t\tdelete this.branch[group.id]._formath;\n\t\t}\n\n\t\tthis._fix_group_levels(this.branch[parent], parent, level+1);\n\t\tthis.callEvent(\"onStoreUpdated\",[]);\n\t},\n\t_fix_group_levels:function(branch, parent, level){\n\t\tif (parent)\n\t\t\tthis.getItem(parent).$count = branch.length;\n\n\t\tfor (let i = 0; i < branch.length; i++) {\n\t\t\tconst item = this.pull[branch[i]];\n\t\t\titem.$level = level;\n\t\t\titem.$parent = parent;\n\n\t\t\tconst next = this.branch[item.id];\n\t\t\tif (next)\n\t\t\t\tthis._fix_group_levels(next, item.id, level+1);\n\t\t}\n\t}\n};\n\nexport default GroupStore;","import {extend} from \"../webix/helpers\";\nimport GroupStore from \"../core/groupstore\";\n\n\nconst Group = {\n\t$init:function(){\n\t\textend(this.data, GroupStore);\n\t},\n\tgroup:function(config, target){\n\t\tif (!target && target !== 0){\n\t\t\tthis.$blockRender=true;\n\t\t\tthis.data.ungroup();\n\t\t\tthis.$blockRender=false;\n\t\t}\n\t\tthis.data.group(config, target);\n\t},\n\tungroup:function(target){\n\t\tthis.data.ungroup(target);\n\t}\n};\n\nexport default Group;","import {preventEvent} from \"../webix/html\";\nimport {_power_array} from \"../webix/helpers\";\nimport {_event} from \"../webix/htmlevents\";\nimport UIManager from \"./uimanager\";\n\n\n/*aria-style handling for options of multiple-value controls (radio, segmented, tabbar)*/\n\nconst HTMLOptions = {\n\t$init: function(){\n\t\tthis.$ready.push(()=>{\n\t\t\tif(!this.customRadio_setter || this.config.customRadio)\n\t\t\t\t_event( this.$view, \"keydown\", this._moveSelection, {bind:this});\n\t\t});\n\t},\n\t_focus: function(){\n\t\tif(!UIManager.canFocus(this))\n\t\t\treturn false;\n\n\t\tconst input = this._getInputNode();\n\t\tif (input)\n\t\t\tfor (let i=0; i<input.length; i++)\n\t\t\t\tif (input[i].getAttribute(\"tabindex\") == \"0\")\n\t\t\t\t\treturn input[i].focus();\n\t},\n\t_blur: function(){\n\t\tconst input = this._getInputNode();\n\t\tif (input)\n\t\t\tfor (let i=0; i<input.length; i++)\n\t\t\t\tif (input[i].getAttribute(\"tabindex\") == \"0\")\n\t\t\t\t\treturn input[i].blur();\n\t},\n\t_moveSelection: function(e){\n\t\tconst code = e.which || e.keyCode;\n\n\t\tif (code>34 && code <41){\n\t\t\tconst inp = this._getInputNode();\n\t\t\tlet index = false;\n\n\t\t\tif (!inp.length) return;\n\t\t\tpreventEvent(e);\n\n\t\t\tconst dir = (code === 37 || code === 38 || code === 35)?-1:1;\n\t\t\tif (code === 35) index = inp.length-1;\n\t\t\telse if (code === 36 ) index = 0;\n\t\t\telse {\n\t\t\t\tfor (let i=0; i<inp.length; i++)\n\t\t\t\t\tif (inp[i].getAttribute(\"tabindex\") == \"0\"){\n\t\t\t\t\t\tindex = i + dir;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t}\n\t\t\tif (index !== false){\n\t\t\t\tlet i = index;\n\t\t\t\tdo {\n\t\t\t\t\tif (i >= inp.length) i = 0;\n\t\t\t\t\tif (i < 0) i = inp.length-1;\n\n\t\t\t\t\tif (!inp[i].getAttribute(\"webix_disabled\")){\n\t\t\t\t\t\tconst id = inp[i].getAttribute(/*@attr*/\"button_id\");\n\n\t\t\t\t\t\tthis.setValue(id);\n\t\t\t\t\t\tinp[i].focus();\n\t\t\t\t\t\ti = \"success\";\n\t\t\t\t\t}\n\t\t\t\t\telse i += dir;\n\n\t\t\t\t} while(i !== \"success\" && i !== index);\n\t\t\t}\n\t\t}\n\t},\n\t_get_tooltip_data: function(t,e){\n\t\tlet id,\n\t\t\tnode = e.target || e.srcElement;\n\t\twhile (node && !node.webix_tooltip){\n\t\t\tid = node.getAttribute(\"webix_t_id\");\n\t\t\tif (id)\n\t\t\t\treturn this.getOption(id);\n\t\t\tnode = node.parentNode;\n\t\t}\n\t\treturn null;\n\t},\n\toptionIndex: function(id){\n\t\tconst options = this._settings.options;\n\t\tfor (let i=0; i<options.length; i++)\n\t\t\tif (options[i].id == id)\n\t\t\t\treturn i;\n\t\treturn -1;\n\t},\n\tgetOption: function(id){\n\t\tconst index = this.optionIndex(id);\n\t\tif (index !== -1)\n\t\t\treturn this._settings.options[index];\n\t\treturn null;\n\t},\n\taddOption: function(id, value, show, index){\n\t\tlet obj = id;\n\t\tif (typeof id != \"object\"){\n\t\t\tvalue = value || id;\n\t\t\tobj = { id:id, value:value };\n\t\t} else {\n\t\t\tid = obj.id;\n\t\t\tindex = show;\n\t\t\tshow = value;\n\t\t}\n\n\t\tif (this.optionIndex(id) === -1){\n\t\t\t_power_array.insertAt.call(this._settings.options, obj, index);\n\n\t\t\tthis.refresh();\n\t\t\tthis.callEvent(\"onOptionAdd\", [id, obj]);\n\t\t}\n\n\t\tif (show)\n\t\t\tthis.setValue(id);\n\t},\n\tremoveOption: function(id){\n\t\tconst index = this.optionIndex(id);\n\t\tconst options = this._settings.options;\n\n\t\tif (index !== -1)\n\t\t\t_power_array.removeAt.call(options, index);\n\n\t\t// if we remove a selected option\n\t\tif(this._settings.value == id)\n\t\t\tthis._setNextVisible(options, index);\n\n\t\tthis.refresh();\n\t\tthis.callEvent(\"onOptionRemove\", [id, this._settings.value]);\n\t},\n\t_setNextVisible: function(options, index){\n\t\tconst size = options.length;\n\n\t\tif (size && !this.customRadio_setter){\n\t\t\tindex = Math.min(index, size-1);\n\t\t\t//forward search\n\t\t\tfor (let i=index; i<size; i++)\n\t\t\t\tif (!options[i].hidden)\n\t\t\t\t\treturn this.setValue(options[i].id);\n\t\t\t//backward search\n\t\t\tfor (let i=index; i>=0; i--)\n\t\t\t\tif (!options[i].hidden)\n\t\t\t\t\treturn this.setValue(options[i].id);\n\t\t}\n\n\t\t//nothing found\t\t\n\t\tthis.setValue(\"\");\n\t},\n\t_getFirstActive(first){\n\t\tconst options = this._settings.options;\n\n\t\tif (options.length){\n\t\t\tfor (let i=0; i<options.length; i++)\n\t\t\t\tif (!options[i].hidden && !options[i].disabled)\n\t\t\t\t\treturn options[i].id;\n\t\t\tif (first)\n\t\t\t\treturn options[0].id;\n\t\t}\n\t\treturn \"\";\n\t},\n\t_filterOptions: function(options){\n\t\tconst copy = [];\n\t\tfor(let i=0; i<options.length; i++)\n\t\t\tif(!options[i].hidden)\n\t\t\t\tcopy.push(options[i]);\n\t\treturn copy;\n\t},\n\t_setOptionState: function(id, field, state){\n\t\tconst options = this._settings.options;\n\t\tconst index = this.optionIndex(id);\n\n\t\tif (options[index] && state != !!options[index][field]){\t\t\t\t//new state differs from previous one\n\t\t\toptions[index][field] = state;\n\n\t\t\tif (state && field === \"hidden\" && this._settings.value == id)\t\t//switch to next visible one\n\t\t\t\tthis._setNextVisible(options, index);\n\t\t\tthis.refresh();\n\t\t}\n\t},\n\thideOption: function(id){\n\t\tthis._setOptionState(id, \"hidden\", true);\n\t},\n\tshowOption: function(id){\n\t\tthis._setOptionState(id, \"hidden\", false);\n\t},\n\tdisableOption: function(id){\n\t\tthis._setOptionState(id, \"disabled\", true);\n\t},\n\tenableOption: function(id){\n\t\tthis._setOptionState(id, \"disabled\", false);\n\t}\n};\n\nexport default HTMLOptions;","import {create} from \"../webix/html\";\nimport env from \"../webix/env\";\nimport {uid} from \"../webix/helpers\";\nimport {proto} from \"../ui/core\";\n\n\nconst HtmlMap = proto({\n\t$init:function(key){\n\t\tthis._id = \"map_\"+uid();\n\t\tthis._key = key;\n\t\tthis._map = [];\n\t\tthis._areas = [];\n\t},\n\taddRect: function(id,points,userdata) {\n\t\tthis._createMapArea(id,\"RECT\",points,userdata);\n\t},\n\taddPoly: function(id,points,userdata) {\n\t\tthis._createMapArea(id,\"POLY\",points,userdata);\n\t},\n\t_createMapArea:function(id,shape,coords,userdata){\n\t\tvar extra_data = \"\";\n\t\tif(arguments.length==4) \n\t\t\textra_data = \"userdata='\"+userdata+\"'\";\n\t\tthis._map.push(\"<area \"+this._key+\"='\"+id+\"' shape='\"+shape+\"' coords='\"+coords.join()+\"' \"+extra_data+\"></area>\");\n\t\tthis._areas.push({index: userdata, points:coords});\n\n\t},\n\taddSector:function(id,alpha0,alpha1,x,y,R,ky,userdata){\n\t\tvar points = [];\n\t\tpoints.push(x);\n\t\tpoints.push(Math.floor(y*ky)); \n\t\tfor(var i = alpha0; i < alpha1; i+=Math.PI/18){\n\t\t\tpoints.push(Math.floor(x+R*Math.cos(i)));\n\t\t\tpoints.push(Math.floor((y+R*Math.sin(i))*ky));\n\t\t}\n\t\tpoints.push(Math.floor(x+R*Math.cos(alpha1)));\n\t\tpoints.push(Math.floor((y+R*Math.sin(alpha1))*ky));\n\t\tpoints.push(x);\n\t\tpoints.push(Math.floor(y*ky)); \n\t\t\n\t\treturn this.addPoly(id,points,userdata);\n\t},\n\thide:function(obj, data, mode){\n\t\tif (obj.querySelectorAll){\n\t\t\tvar nodes = obj.querySelectorAll(\"area[userdata=\\\"\"+data+\"\\\"]\");\n\t\t\tfor (var i = 0; i < nodes.length; i++){\n\t\t\t\tvar nod = nodes[i];\n\t\t\t\tif (mode){\n\t\t\t\t\tif (nod.getAttribute(\"coords\")){\n\t\t\t\t\t\tnod.coordsdis = nod.getAttribute(\"coords\");\n\t\t\t\t\t\tnod.setAttribute(\"coords\", \"\");\n\t\t\t\t\t\tnod.coords = \"\";\n\t\t\t\t\t}\n\t\t\t\t} else if (!mode){\n\t\t\t\t\tif (nod.coordsdis){\n\t\t\t\t\t\tnod.setAttribute(\"coords\", nod.coordsdis);\n\t\t\t\t\t\tnod.coords = nod.coordsdis;\n\t\t\t\t\t\tnod.coordsdis = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnodes[i].style.display = mode?\"none\":\"\";\n\t\t\t}\n\t\t}\n\t},\n\trender:function(obj){\n\t\tvar d = create(\"DIV\");\n\t\td.style.cssText=\"position:absolute; width:100%; height:100%; top:0px; left:0px;\";\n\t\tobj.appendChild(d);\n\t\tvar src = env.isIE?\"\":\"src='data:image/gif;base64,R0lGODlhEgASAIAAAP///////yH5BAUUAAEALAAAAAASABIAAAIPjI+py+0Po5y02ouz3pwXADs='\";\n\t\td.innerHTML=\"<map id='\"+this._id+\"' name='\"+this._id+\"'>\"+this._map.join(\"\\n\")+\"</map><img \"+src+\" class='webix_map_img' usemap='#\"+this._id+\"'>\";\n\t\t\n\t\tobj._htmlmap = d; //for clearing routine\n\t\t\n\t\tthis._map = [];\n\t}\n});\n\nexport default HtmlMap;","import {bind} from \"../webix/helpers\";\nimport {ui} from \"../ui/core\";\nimport state from \"./state\";\n\nconst IdSpace = {\n\t$init:function(){\n\t\tthis._elements = {};\n\t\tthis._translate_ids = {};\n\t\tthis.getTopParentView = this._get_self = bind(function(){ return this;}, this);\n\n\t\tthis._run_inner_init_logic();\n\t\tthis.$ready.push(this._run_after_inner_init_logic);\n\t},\n\t$$:function(id){\n\t\treturn this._elements[id];\n\t},\n\tinnerId:function(id){\n\t\treturn this._translate_ids[id];\n\t},\n\t_run_inner_init_logic:function(){\n\t\tthis._prev_global_col = state._global_collection;\n\t\tstate._global_collection = this;\n\t},\n\t_run_after_inner_init_logic:function(){\n\t\tfor (var name in this._elements){\n\t\t\tvar input = this._elements[name];\n\t\t\tif (this.callEvent && input.mapEvent && !input._evs_map.onitemclick)\n\t\t\t\tinput.mapEvent({\n\t\t\t\t\tonitemclick:this\n\t\t\t\t});\n\t\t\tinput.getTopParentView = this._get_self;\n\t\t}\n\n\t\tstate._global_collection = this._prev_global_col;\n\t\tthis._prev_global_col = 0;\n\t},\n\t_destroy_child:function(id){\n\t\tdelete this._elements[id];\n\t},\n\tui:function(){\n\t\tthis._run_inner_init_logic();\n\t\tvar temp = ui.apply(this, arguments);\n\t\tthis._run_after_inner_init_logic();\n\t\treturn temp;\n\t}\n};\n\n\nexport default IdSpace;","import {preventEvent} from \"../webix/html\";\nimport UIManager from \"../core/uimanager\";\nimport {$$} from \"../ui/core\";\nimport {assert} from \"../webix/debug\";\n\n\nconst KeysNavigation = {\n\t$init:function(){\n\t\tif(this.getSelectedId)\n\t\t\tthis.attachEvent(\"onAfterRender\", this._set_focusable_item);\n\t\tif(this.moveSelection)\n\t\t\tthis.attachEvent(\"onTabFocus\", this._set_item_focus);\n\t},\n\t_set_item_focus:function(){\n\t\tif(this.getSelectedId){\n\t\t\tvar sel = this.getSelectedId(true);\n\t\t\tif(!sel.length || !this.getItemNode(sel[0]))\n\t\t\t\tthis.moveSelection(\"down\"); //select and show\n\t\t}\n\t},\n\t_set_focusable_item:function(){\n\t\tvar sel = this.getSelectedId(true);\n\t\tif(!sel.length || !this.getItemNode(sel[0])){\n\t\t\tvar node =  this._dataobj.querySelector(\"[\"+this._id+\"]\");\n\t\t\tif(node)\n\t\t\t\tnode.setAttribute(\"tabindex\", \"0\");\n\t\t}\n\t},\n\t_navigation_helper:function(mode){\n\t\treturn function(view, e){\n\t\t\tvar tag = (e.srcElement || e.target);\n\n\t\t\t//ignore clipboard listener\n\t\t\tif (!tag.getAttribute(/*@attr*/\"webixignore\")){\n\t\t\t\t//ignore hotkeys if focus in the common input\n\t\t\t\t//to allow normal text edit operations\n\t\t\t\tvar name = tag.tagName;\n\t\t\t\tif (name == \"INPUT\" || name == \"TEXTAREA\" || name == \"SELECT\") return true;\n\t\t\t}\n\n\t\t\tif (view && view.moveSelection && view.config.navigation && !view._in_edit_mode){\n\t\t\t\tpreventEvent(e);\n\t\t\t\treturn view.moveSelection(mode, {shift:e.shiftKey, ctrl:e.ctrlKey});\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t},\n\tmoveSelection:function(mode, details, focus){\n\t\tvar config = this._settings;\n\t\tif(config.disabled) return;\n\t\t//get existing selection\n\t\tvar selected = this.getSelectedId(true);\n\t\tvar x_layout = (this.count && (config.layout ==\"x\" || config.xCount > 1));\n\n\t\tif((mode == \"right\" || mode == \"left\") && this._parent_menu){\n\t\t\tvar parent = $$(this._parent_menu);\n\n\t\t\tparent._hide_sub_menu(true);\n\t\t\tif(parent.config.layout === \"x\")\n\t\t\t\tparent.moveSelection(mode);\n\t\t\telse\n\t\t\t\tUIManager.setFocus(parent);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!selected.length && this.count()){\n\t\t\tif (mode == \"down\" || (mode == \"right\" && x_layout)) mode = \"top\";\n\t\t\telse if (mode == \"up\" || (mode == \"left\" && x_layout)) mode = \"bottom\";\n\t\t\telse return;\n\t\t\tselected = [this.getFirstId()];\n\t\t}\n\n\t\tif (selected.length == 1){  //if we have a selection\n\t\t\tselected = selected[0];\n\t\t\tvar prev = selected;\n\n\t\t\tif (mode == \"left\" && this.close)\n\t\t\t\treturn this.close(selected);\n\t\t\tif (mode == \"right\" && this.open)\n\t\t\t\treturn this.open(selected);\n\n\t\t\telse if (mode == \"top\") {\n\t\t\t\tselected = this.getFirstId();\n\t\t\t} else if (mode == \"bottom\") {\n\t\t\t\tselected = this.getLastId();\n\t\t\t} else if (mode == \"up\" || mode == \"left\" || mode == \"pgup\") {\n\t\t\t\tlet index = this.getIndexById(selected);\n\t\t\t\tlet step = mode == \"pgup\" ? 10 : 1;\n\t\t\t\tselected = this.getIdByIndex(Math.max(0, index-step));\n\t\t\t} else if (mode == \"down\" || mode == \"right\" || mode == \"pgdown\") {\n\t\t\t\tlet index = this.getIndexById(selected);\n\t\t\t\tlet step = mode == \"pgdown\" ? 10 : 1;\n\t\t\t\tselected = this.getIdByIndex(Math.min(this.count()-1, index+step));\n\t\t\t} else {\n\t\t\t\tassert(false, \"Not supported selection moving mode\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst dir = (mode == \"up\" || mode == \"left\" || mode == \"pgdown\" || mode == \"bottom\")?-1:1;\n\t\t\tif(this._skip_item)\n\t\t\t\tselected = this._skip_item(selected, prev, dir);\n\n\t\t\tthis.showItem(selected);\n\t\t\tthis.select(selected);\n\n\t\t\tif(this.getSubMenu && this.getSubMenu(selected))\n\t\t\t\tthis._mouse_move_activation(selected, this.getItemNode(selected));\n\n\t\t\tif(!this.config.clipboard && focus !== false){\n\t\t\t\tvar node = this.getItemNode(selected);\n\t\t\t\tif(node) node.focus();\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\tnavigation_setter:function(value){\n\t\t//using global flag to apply hotkey only once\n\t\tif (value && !UIManager._global_nav_grid_hotkeys){\n\t\t\tUIManager._global_nav_grid_hotkeys = true;\n\t\t\t//hotkeys will react on any component but will not work in edit mode\n\t\t\t//you can define moveSelection method to handle navigation keys\n\t\t\tUIManager.addHotKey(\"up\",         this._navigation_helper(\"up\"));\n\t\t\tUIManager.addHotKey(\"down\",       this._navigation_helper(\"down\"));\n\t\t\tUIManager.addHotKey(\"right\",      this._navigation_helper(\"right\"));\n\t\t\tUIManager.addHotKey(\"left\",       this._navigation_helper(\"left\"));\n\n\t\t\tUIManager.addHotKey(\"shift+up\",   this._navigation_helper(\"up\"));\n\t\t\tUIManager.addHotKey(\"shift+down\", this._navigation_helper(\"down\"));\n\t\t\tUIManager.addHotKey(\"shift+right\",   this._navigation_helper(\"right\"));\n\t\t\tUIManager.addHotKey(\"shift+left\", this._navigation_helper(\"left\"));\n\n\t\t\tUIManager.addHotKey(\"ctrl+shift+up\",   this._navigation_helper(\"up\"));\n\t\t\tUIManager.addHotKey(\"ctrl+shift+down\", this._navigation_helper(\"down\"));\n\t\t\tUIManager.addHotKey(\"ctrl+shift+right\",   this._navigation_helper(\"right\"));\n\t\t\tUIManager.addHotKey(\"ctrl+shift+left\", this._navigation_helper(\"left\"));\n\n\t\t\tUIManager.addHotKey(\"pageup\", \tthis._navigation_helper(\"pgup\"));\n\t\t\tUIManager.addHotKey(\"pagedown\",   this._navigation_helper(\"pgdown\"));\n\t\t\tUIManager.addHotKey(\"home\", \t    this._navigation_helper(\"top\"));\n\t\t\tUIManager.addHotKey(\"end\", \t\tthis._navigation_helper(\"bottom\"));\n\n\t\t\t\n\n\t\t}\n\n\t\treturn value;\n\t}\n};\n\nexport default KeysNavigation;","import {uid, isArray} from \"../webix/helpers\";\nimport {$$} from \"../ui/core\";\n\nimport i18n from \"../webix/i18n\";\nimport {use} from \"../services\";\n\nimport template from \"../webix/template\";\n\n\n\n/*Data collection mapping logic */\n\nconst MapCollection = {\n\t$init:function(){\n\t\tthis.$ready.push(this._create_scheme_init);\n\t\tthis.attachEvent(\"onStructureUpdate\", this._create_scheme_init);\n\t\tthis.attachEvent(\"onStructureLoad\", function(){\n\t\t\tif(!this._scheme_init_order.length)\n\t\t\t\tthis._create_scheme_init();\n\t\t});\n\t},\n\t_create_scheme_init:function(){\n\t\tvar stack = this._scheme_init_order = [];\n\t\tvar config = this._settings;\n\n\t\tif (config.columns)\n\t\t\tthis._build_data_map(config.columns);\n\t\tif (this._settings.map)\n\t\t\tthis._process_field_map(config.map);\n\n\t\tif (stack.length){\n\t\t\tthis.data._scheme_init = function(obj){\n\t\t\t\tfor (var i=0; i<stack.length; i++){\n\t\t\t\t\tstack[i](obj);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t},\n\t_process_field_map:function(map){\n\t\tfor (var key in map)\n\t\t\tthis._scheme_init_order.push(this._process_single_map(key, map[key]));\n\t},\n\t_process_single_map:function(target, map, extra){\n\t\tvar source = map.replace(/^(\\s|)\\((date|number)\\)/, \"\");\n\t\tvar getSource;\n\t\tif (source === \"\"){\n\t\t\tgetSource = a => a[target];\n\t\t} else {\n\t\t\tif (source.indexOf(\"#\") === -1 && source.indexOf(\"{\") === -1){\n\t\t\t\tsource = \"#\"+source+\"#\";\n\t\t\t}\n\t\t\tgetSource = template(source);\n\t\t}\n\n\t\tif (map.indexOf(\"(date)\")===0){\n\t\t\tif (extra && !extra.format) extra.format = i18n.dateFormatStr;\n\n\t\t\treturn function(obj){\n\t\t\t\tconst dateStr = (getSource(obj) || \"\").toString();\n\t\t\t\tobj[target] = i18n.parseFormatDate(dateStr);\n\t\t\t};\n\t\t} else if (map.indexOf(\"(number)\")===0){\n\t\t\treturn function(obj){\n\t\t\t\tobj[target] = getSource(obj)*1;\n\t\t\t};\n\t\t} else {\n\t\t\treturn function(obj){\n\t\t\t\tobj[target] = getSource(obj) || \"\";\n\t\t\t};\n\t\t}\n\t},\n\t_build_data_map:function(columns){ //for datatable\n\t\tfor (var i=0; i<columns.length; i++){\n\t\t\tvar map = columns[i].map;\n\t\t\tvar id = columns[i].id;\n\t\t\tif (!id) {\n\t\t\t\tid = columns[i].id = \"i\"+uid();\n\t\t\t\tif (!columns[i].header)\n\t\t\t\t\tcolumns[i].header = \"\";\n\t\t\t}\n\t\t\tif (map)\n\t\t\t\tthis._scheme_init_order.push(this._process_single_map(id, map, columns[i]));\n\n\t\t\tthis._map_options(columns[i]);\n\t\t}\n\t},\n\t_create_collection:function(options){\n\t\tif (typeof options === \"string\"){\n\t\t\tlet options_view = $$(options);\t\t\t\t\t\t\t\t\t\t//id of some other view\n\n\t\t\tif (!options_view){\t\t\t\t\t\t\t\t\t\t\t\t\t//or url\n\t\t\t\toptions = new (use(\"DataCollection\"))({ url: options });\n\t\t\t\tthis._destroy_with_me.push(options);\n\t\t\t} else options = options_view;\n\t\t\tif (options.getBody)\t\t\t\t\t\t\t\t\t\t\t\t//if it was a view, special check for suggests\n\t\t\t\toptions = options_view.getBody();\n\n\t\t} else if (typeof options === \"function\" || options.$proxy){\t\t\t//proxy or function\n\t\t\toptions = new (use(\"DataCollection\"))({ url:options });\n\t\t\tthis._destroy_with_me.push(options);\n\n\t\t} else if (!options.loadNext){\n\t\t\tlet array = isArray(options);\n\t\t\tlet data = [];\n\n\t\t\tif (array && typeof options[0] !== \"object\"){\t\t\t\t\t\t//[\"one\", \"two\"]\n\t\t\t\tfor (let i=0; i<options.length; i++)\n\t\t\t\t\tdata.push({id:options[i], value:options[i]});\n\t\t\t\toptions = data;\n\t\t\t} else if (!array){\t\t\t\t\t\t\t\t\t\t\t\t\t//{ 1:\"one\", 2:\"two\" }\n\t\t\t\tfor (let i in options)\n\t\t\t\t\tdata.push({id:i, value:options[i]});\n\t\t\t\toptions = data;\n\t\t\t} \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// else [{ id:1, value:\"one\"}, ...]\n\n\t\t\toptions = new (use(\"DataCollection\"))({ data:options });\n\t\t\tthis._destroy_with_me.push(options);\n\n\t\t} \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// else data collection or view\n\t\treturn options;\n\t},\n\t_map_options:function(column){\n\t\tlet options = column.options||column.collection;\n\t\tif (options){\n\t\t\toptions = this._create_collection(options);\n\t\t\tthis._bind_collection(options, column);\n\t\t}\n\t\tif (column.header){\n\t\t\tthis._map_header_options(column.header);\n\t\t\tthis._map_header_options(column.footer);\n\t\t}\n\t},\n\t_map_header_options:function(arr){\n\t\tarr = arr || [];\n\t\tfor (let i=0; i<arr.length; i++){\n\t\t\tlet config = arr[i];\n\n\t\t\tif (config && config.options){\n\t\t\t\tlet options = config.options;\n\t\t\t\tif (!options.loadNext)\n\t\t\t\t\toptions = config.options = this._create_collection(options);\n\n\t\t\t\tlet id = options.data.attachEvent(\"onStoreUpdated\", () => {\n\t\t\t\t\tif(this.refreshFilter)\n\t\t\t\t\t\tthis.refreshFilter(config.columnId);\n\t\t\t\t});\n\t\t\t\tthis.attachEvent(\"onDestruct\", function(){\n\t\t\t\t\tif (!options.$destructed) options.data.detachEvent(id);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t},\n\t_bind_collection:function(options, column){\n\t\tif (column){\n\t\t\tdelete column.options;\n\t\t\tcolumn.collection = options;\n\t\t\tcolumn.template = column.template || this._bind_template(options, column.id, column.optionslist);\n\t\t\tlet id = options.data.attachEvent(\"onStoreUpdated\", () => {\n\t\t\t\tthis.refresh();\n\t\t\t\tif(this.refreshFilter)\n\t\t\t\t\tthis.refreshFilter(column.id);\n\t\t\t});\n\t\t\tthis.attachEvent(\"onDestruct\", function(){\n\t\t\t\tif (!options.$destructed) options.data.detachEvent(id);\n\t\t\t});\n\t\t}\n\t},\n\t_bind_template:function(options, columnId, multi){\n\t\tcolumnId = this.getColumnConfig ? columnId : \"value\";\n\t\tif (multi) {\n\t\t\tlet separator = typeof multi==\"string\" ? multi : \",\";\n\t\t\treturn function(obj){\n\t\t\t\tlet value = obj[columnId];\n\t\t\t\tif (!value) return \"\";\n\n\t\t\t\tlet ids = value.toString().split(separator);\n\t\t\t\tfor (let i = 0; i < ids.length; i++){\n\t\t\t\t\tlet data = options.data.pull[ids[i]];\n\t\t\t\t\tids[i] = data ? (data.value  || \"\") : \"\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn ids.join(\", \");\n\t\t\t};\n\t\t} else {\n\t\t\treturn function(obj){\n\t\t\t\tlet data = options.data.pull[ obj[columnId] ];\n\t\t\t\tif (data && (data.value || data.value === 0))\n\t\t\t\t\treturn data.value;\n\t\t\t\treturn \"\";\n\t\t\t};\n\t\t}\n\t}\n};\n\nexport default MapCollection;","import {_getClassName, locate} from \"../webix/html\";\nimport UIManager from \"../core/uimanager\";\nimport {extend, delay, toFunctor} from \"../webix/helpers\";\nimport env from \"../webix/env\";\nimport {_event} from \"../webix/htmlevents\";\n\n\nconst MouseEvents={\n\t$init: function(config){\n\t\tconfig = config || {};\n\n\t\tthis._clickstamp = 0;\n\t\tthis._dbl_sensetive = 300;\n\t\tthis._item_clicked = null;\n\n\t\tthis._mouse_action_extend(config.onClick, \"on_click\");\n\t\tthis._mouse_action_extend(config.onContext, \"on_context\");\n\t\tthis._mouse_action_extend(config.onDblClick, \"on_dblclick\");\n\t\tthis._mouse_action_extend(config.onMouseMove, \"on_mouse_move\");\n\n\t\t//attach dom events if related collection is defined\n\t\tif (this.on_click){\n\t\t\t_event(this._contentobj,\"click\",this._onClick,{bind:this});\n\t\t\tif (env.isIE8 && this.on_dblclick)\n\t\t\t\t_event(this._contentobj, \"dblclick\", this._onDblClick, {bind:this});\n\t\t}\n\t\tif (this.on_context)\n\t\t\t_event(this._contentobj,\"contextmenu\",this._onContext,{bind:this});\n\n\t\tif (this.on_mouse_move)\n\t\t\tthis._enable_mouse_move();\n\t},\n\n\t_enable_mouse_move:function(){\n\t\tif (!this._mouse_move_enabled){\n\t\t\tthis.on_mouse_move = this.on_mouse_move || {};\n\t\t\t_event(this._contentobj,\"mousemove\",this._onMouse,{bind:this});\n\t\t\t_event(this._contentobj,(env.isIE?\"mouseleave\":\"mouseout\"),this._onMouse,{bind:this});\n\t\t\tthis._mouse_move_enabled = 1;\n\t\t\tthis.attachEvent(\"onDestruct\", function(){\n\t\t\t\tif (this._mouse_move_timer)\n\t\t\t\t\twindow.clearTimeout(this._mouse_move_timer);\n\t\t\t});\n\t\t}\n\n\t},\n\n\t_mouse_action_extend:function(config, key){\n\t\tif (config){\n\t\t\tvar now = this[key];\n\t\t\tvar step = now ? extend({}, now) : {};\n\t\t\tthis[key] = extend(step, config);\n\t\t}\n\t},\n\n\t//inner onclick object handler\n\t_onClick: function(e){\n\t\tif(!this.isEnabled())\n\t\t\treturn false;\n\n\t\tUIManager._focus_action(this);\n\t\tif(this.on_dblclick){\n\t\t\t// emulates double click\n\t\t\tvar stamp = (new Date()).valueOf();\n\n\t\t\tif (stamp - this._clickstamp <= this._dbl_sensetive && this.locate){\n\t\t\t\tvar item = this.locate(e);\n\t\t\t\tif (\"\"+item == \"\"+this._item_clicked) {\n\t\t\t\t\tthis._clickstamp = 0;\n\t\t\t\t\treturn this._onDblClick(e);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._clickstamp = stamp;\n\t\t}\n\n\t\tvar result = this._mouseEvent(e,this.on_click,\"ItemClick\");\n\t\treturn result;\n\t},\n\t//inner ondblclick object handler\n\t_onDblClick: function(e) {\n\t\treturn this._mouseEvent(e,this.on_dblclick,\"ItemDblClick\");\n\t},\n\t//process oncontextmenu events\n\t_onContext: function(e) {\n\t\tthis._mouseEvent(e, this.on_context, \"BeforeContextMenu\", \"AfterContextMenu\");\n\t},\n\t/*\n\t\tevent throttler - ignore events which occurs too fast\n\t\tduring mouse moving there are a lot of event firing - we need no so much\n\t\talso, mouseout can fire when moving inside the same html container - we need to ignore such fake calls\n\t*/\n\t_onMouse:function(e){\n\t\tif (this.$destructed) return;\n\t\tif (document.createEventObject)\t//make a copy of event, will be used in timed call\n\t\t\te = document.createEventObject(event);\n\n\t\tif (this._mouse_move_timer)\t//clear old event timer\n\t\t\twindow.clearTimeout(this._mouse_move_timer);\n\n\t\t//this event just inform about moving operation, we don't care about details\n\t\tthis.callEvent(\"onMouseMoving\",[e]);\n\t\t//set new event timer\n\t\tthis._mouse_move_timer = delay(function(e){\n\t\t\t//called only when we have at least 100ms after previous event\n\t\t\tif (e.type == \"mousemove\")\n\t\t\t\tthis._onMouseMove(e);\n\t\t\telse\n\t\t\t\tthis._onMouseOut(e);\n\t\t}, this, [e], (this._settings.mouseEventDelay||500));\n\t},\n\n\t//inner mousemove object handler\n\t_onMouseMove: function(e) {\n\t\tif (!this._mouseEvent(e,this.on_mouse_move,\"MouseMove\"))\n\t\t\tthis._onMouseOut(e);\n\t},\n\t//inner mouseout object handler\n\t_onMouseOut: function(e) {\n\t\tthis.callEvent(\"onMouseOut\",[e||event]);\n\t},\n\t//common logic for click and dbl-click processing\n\t_mouseEvent:function(e,hash,name, pair){\n\t\te=e||event;\n\n\t\tif (e.processed || !this._viewobj) return;\n\t\te.processed = true;\n\n\t\tvar trg=e.target||e.srcElement;\n\n\t\t//IE8 can't modify event object\n\t\t//so we need to stop event bubbling to prevent double processing\n\t\tif (env.isIE8){\n\t\t\tvar vid = this._settings.id;\n\t\t\tvar wid = trg.w_view;\n\n\t\t\tif (!wid) trg.w_view = vid; else if (wid !== vid) return;\n\t\t}\n\n\t\tvar css = \"\";\n\t\tvar id = null;\n\t\tvar found = false;\n\t\t//loop through all parents\n\t\t//we need to check for this._viewobj as some handler can destroy the view\n\t\twhile (trg && trg.parentNode && this._viewobj && trg != this._viewobj.parentNode){\n\t\t\tif (!found && trg.getAttribute){\t\t\t\t\t\t\t\t\t\t\t\t\t//if element with ID mark is not detected yet\n\t\t\t\tid = trg.getAttribute(this._id);\t\t\t\t\t\t\t//check id of current one\n\t\t\t\tif (id){\n\t\t\t\t\t// prevent clicking on disabled items\n\t\t\t\t\tif (trg.getAttribute(\"webix_disabled\")){\n\t\t\t\t\t\tthis._item_clicked = null;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._item_clicked = id;\n\t\t\t\t\tif (this.callEvent){\n\t\t\t\t\t\t//it will be triggered only for first detected ID, in case of nested elements\n\t\t\t\t\t\tif (!this.callEvent(\"on\"+name,[id,e,trg])) return;\n\t\t\t\t\t\tif (pair) this.callEvent(\"on\"+pair,[id,e,trg]);\n\t\t\t\t\t}\n\t\t\t\t\t//set found flag\n\t\t\t\t\tfound = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcss=_getClassName(trg);\n\t\t\tif (css){\t\t//check if pre-defined reaction for element's css name exists\n\t\t\t\tcss = css.toString().split(\" \");\n\t\t\t\tfor (var i=0; i<css.length; i++){\n\t\t\t\t\tif (hash[css[i]]){\n\t\t\t\t\t\tvar functor = toFunctor(hash[css[i]], this.$scope);\n\t\t\t\t\t\tvar res =  functor.call(this,e,id||locate(e, this._id),trg);\n\t\t\t\t\t\tif(res === false)\n\t\t\t\t\t\t\treturn found;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttrg=trg.parentNode;\n\t\t}\n\t\t\t\n\t\treturn found;\t//returns true if item was located and event was triggered\n\t}\n};\n\nexport default MouseEvents;","import {preventEvent, remove, create} from \"../webix/html\";\nimport {bind} from \"../webix/helpers\";\nimport {$$} from \"../ui/core\";\nimport i18n from \"../webix/i18n\";\nimport {event} from \"../webix/htmlevents\";\n\n\n/*\n    UI: navigation control\n*/\nconst NavigationButtons = {\n\t$init:function(){\n\t\tthis.$ready.push(function(){\n\t\t\tthis.attachEvent(\"onKeyPress\", this._onKeyPress);\n\t\t});\n\t},\n\t_moveActive:function(code, e){\n\t\tif(code === 37  || code === 39){\n\t\t\tpreventEvent(e);\n\t\t\tthis._showNavItem(code===37?-1:1);\n\n\t\t\tvar node = this._navPanel.querySelector(\"[tabindex='0']\");\n\t\t\tif(node) node.focus();\n\t\t}\n\t},\n\t_renderPanel:function(){\n\t\tremove(this._navPanel);\n\n\n\t\tthis._navPanel = create(\"DIV\",{\n\t\t\t\"class\":\"webix_nav_panel \"+\"webix_nav_panel_\"+this._settings.navigation.type,\n\t\t\t\"role\":\"tablist\"\n\t\t},\"\");\n\n\t\tthis._viewobj.appendChild(this._navPanel);\n\n\n\t\tthis._renderNavItems();\n\t\tthis._renderNavButtons();\n\t\tthis._setLinkEventHandler();\n\t},\n\t_setLinkEventHandler: function(){\n\t\tvar h = [];\n\t\tif(this._navPanel)\n\t\t\th[0] = event(this._navPanel,\"click\", bind(function(e){\n\t\t\t\tvar elem = (e.srcElement || e.target);\n\t\t\t\tvar found = false;\n\t\t\t\twhile(elem != this._navPanel && !found){\n\t\t\t\t\tvar bindId = elem.getAttribute(this._linkAttr);\n\t\t\t\t\tif(bindId){\n\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\tthis._showPanelBind(bindId);\n\t\t\t\t\t}\n\t\t\t\t\telem = elem.parentNode;\n\t\t\t\t}\n\t\t\t},this));\n\t\tif(this._prevNavButton)\n\t\t\th[1] = event(this._prevNavButton,\"click\", bind(function(){\n\t\t\t\tthis._showNavItem(-1);\n\t\t\t},this));\n\t\tif(this._nextNavButton)\n\t\t\th[1] = event(this._nextNavButton,\"click\", bind(function(){\n\t\t\t\tthis._showNavItem(1);\n\t\t\t},this));\n\t\tthis.attachEvent(\"onDestruct\", function(){\n\t\t\tfor(var i=0;i< h.length; i++){\n\t\t\t\tthis.detachEvent(h[i]);\n\t\t\t}\n\t\t\th = null;\n\t\t});\n\t},\n\t_showNavItem: function(inc){\n\t\tif(this._cells){\n\t\t\tvar index = this._active_cell + inc;\n\t\t\tif(index >= this._cells.length || index < 0){\n\t\t\t\tindex = (index < 0?this._cells.length-1:0);\n\t\t\t}\n\t\t\tthis.setActiveIndex(index);\n\t\t}\n\t},\n\t_showPanelBind: function(id){\n\t\tif(this._cells)\n\t\t\t$$(id).show();\n\t},\n\t_renderNavItems:function(){\n\t\tvar item, config;\n\t\tconfig = this._settings.navigation;\n\t\tif(config.items){\n\t\t\tthis._linkAttr = config.linkAttr || /*@attr*/\"bind_id\";\n\n\t\t\tif(!this._navPanel)\n\t\t\t\tthis._renderPanel();\n\t\t\telse\n\t\t\t\tthis._clearPanel();\n\n\t\t\tvar data = (this._cells?this._cells:this.data.order);\n\t\t\tif(data.length>1){\n\t\t\t\tfor (var i=0; i < data.length; i++){\n\n\t\t\t\t\titem = create(\"DIV\",{\n\t\t\t\t\t\t\"class\":\"webix_nav_item webix_nav_\"+(i==this._active_cell?\"active\":\"inactive\"),\n\t\t\t\t\t\t\"role\":\"tab\",\n\t\t\t\t\t\t\"tabindex\":(i==this._active_cell?\"0\":\"-1\")\n\t\t\t\t\t});\n\t\t\t\t\tvar id = this._cells?this._cells[i]._settings.id:data[i];\n\t\t\t\t\tif(id)\n\t\t\t\t\t\titem.setAttribute(this._linkAttr, id);\n\t\t\t\t\tthis._navPanel.appendChild(item);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t_clearPanel:function(){\n\t\tif (this._navPanel){\n\t\t\tvar coll = this._navPanel.childNodes;\n\t\t\tfor (var i = coll.length - 1; i >= 0; i--)\n\t\t\t\tremove(coll[i]);\n\t\t}\n\t},\n\t_renderNavButtons: function(){\n\t\tvar config = this._settings.navigation;\n\t\tif(config.buttons){\n\n\t\t\tif(this._prevNavButton)\n\t\t\t\tremove(this._prevNavButton);\n\t\t\tif(this._prevNavButton)\n\t\t\t\tremove(this._nextNavButton);\n\n\n\t\t\tthis._prevNavButton = create(\n\t\t\t\t\"DIV\",\n\t\t\t\t{\n\t\t\t\t\t\"class\":\"webix_nav_button_\"+config.type+\" webix_nav_button_prev \"\n\t\t\t\t},\n\t\t\t\t\"<div role=\\\"button\\\" tabindex=\\\"0\\\" aria-label=\\\"\"+i18n.aria.prevTab+\"\\\" class=\\\"webix_nav_button_inner\\\"></div>\"\n\t\t\t);\n\t\t\tthis._viewobj.appendChild(this._prevNavButton);\n\n\t\t\tthis._nextNavButton = create(\n\t\t\t\t\"DIV\",\n\t\t\t\t{\n\t\t\t\t\t\"class\":\"webix_nav_button_\"+config.type+\" webix_nav_button_next \"\n\t\t\t\t},\n\t\t\t\t\"<div role=\\\"button\\\" tabindex=\\\"0\\\" aria-label=\\\"\"+i18n.aria.prevTab+\"\\\" class=\\\"webix_nav_button_inner\\\"></div>\"\n\t\t\t);\n\t\t\tthis._viewobj.appendChild(this._nextNavButton);\n\t\t}\n\t}\n};\n\nexport default NavigationButtons;","import {create, insertBefore, remove} from \"../webix/html\";\n\n\nconst OverlayBox = {\n\tshowOverlay:function(message){\n\t\tif (!this._overlay){\n\t\t\tthis._overlay = create(\"DIV\",{ \"class\":\"webix_overlay\" },(message||\"\"));\n\t\t\tinsertBefore(this._overlay, this._viewobj.firstChild, this._viewobj);\n\t\t\tthis._viewobj.style.position = \"relative\";\n\t\t} else \n\t\t\tthis._overlay.innerHTML = message;\n\t},\n\thideOverlay:function(){\n\t\tif (this._overlay){\n\t\t\tremove(this._overlay);\n\t\t\tthis._overlay = null;\n\t\t}\n\t}\n};\n\nexport default OverlayBox;","import {delay} from \"../webix/helpers\";\nimport {ui, $$} from \"../ui/core\";\n\n\nconst PagingAbility = {\n\tpager_setter:function(pager){\n\t\tif (typeof pager == \"string\"){\n\t\t\tvar ui_pager = $$(pager);\n\t\t\tif (!ui_pager){\n\t\t\t\tthis.$blockRender = true;\n\t\t\t\tdelay(function(){\n\t\t\t\t\tvar obj = $$(pager);\n\n\t\t\t\t\tthis._settings.pager = this.pager_setter(obj);\n\t\t\t\t\tvar s = obj._settings;\n\t\t\t\t\ts.count = this.data._count_pager_total(s.level);\n\t\t\t\t\tobj.refresh();\n\n\t\t\t\t\tthis.$blockRender = false;\n\t\t\t\t\tthis.render();\n\t\t\t\t}, this);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tpager = ui_pager;\n\t\t}\n\n\t\tfunction check_pager_sizes(repeat){\n\t\t\tif (pager.config.autosize && this.getVisibleCount){\n\t\t\t\tvar count = this.getVisibleCount();\n\t\t\t\tif (isNaN(count)){\n\t\t\t\t\tpager.config.size = 1;\n\t\t\t\t\tdelay(check_pager_sizes, this, [true]);\n\t\t\t\t} else if (count != pager.config.size){\n\t\t\t\t\tpager.config.size = count;\n\t\t\t\t\tpager.refresh();\n\t\t\t\t\tif (repeat === true)\n\t\t\t\t\t\tthis.refresh();\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar s = this._settings.pager;\n\t\t\t//initial value of pager = -1, waiting for real value\n\t\t\tif (s.page == -1) return false;\t\n\t\t\t\n\t\t\tthis.data.$min = this._count_pager_index(0, s.page*s.size);\t//affect data.getRange\n\t\t\tthis.data.$max = this._count_pager_index(this.data.$min, s.size);\n\t\t\tthis.data.$pagesize = this.data.$max - this.data.$min;\n\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.attachEvent(\"onBeforeRender\",check_pager_sizes);\n\n\t\tif (!pager.$view){\n\t\t\tpager.view = \"pager\";\n\t\t\tpager = ui(pager);\n\t\t}\n\t\tthis._pager = pager;\n\t\tpager.$master = this;\n\n\t\tthis.data.attachEvent(\"onStoreUpdated\", function(){\n\t\t\tvar s = pager._settings;\n\t\t\ts.count = this._count_pager_total(s.level);\n\t\t\tpager.refresh();\n\t\t});\n\t\tthis.data._count_pager_total = this._count_pager_total;\n\n\t\treturn pager._settings;\n\t},\n\t_count_pager_total:function(level){\n\t\tif (level && level !== 0){\n\t\t\tvar count = 0; \n\t\t\tthis.each(function(obj){\n\t\t\t\tif (obj.$level == level) count++;\n\t\t\t});\n\t\t\treturn count;\n\t\t} else\n\t\t\treturn this.count();\n\t},\n\t_count_pager_index:function(start, count){\n\t\tvar s = this._settings.pager;\n\n\t\tif (s.level && s.level !== 0){\n\t\t\tvar end = start;\n\t\t\tvar max = this.data.order.length;\n\n\t\t\tif (count)\n\t\t\t\twhile (end < max){\n\t\t\t\t\tif (this.data.order[end] && this.data.getItem(this.data.order[end]).$level == s.level){\n\t\t\t\t\t\tif (count === 0)\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tcount--;\n\t\t\t\t\t}\n\t\t\t\t\tend++;\n\t\t\t\t}\n\n\t\t\treturn end;\n\t\t} else\n\t\t\treturn start+count;\n\t},\n\tsetPage:function(value){\n\t\tif (this._pager)\n\t\t\tthis._pager.select(value);\n\t},\n\tgetPage:function(){\n\t\treturn this._pager._settings.page;\n\t},\n\tgetPager:function(){\n\t\treturn this._pager;\n\t}\n};\n\nexport default PagingAbility;","import {create, insertBefore, remove} from \"../webix/html\";\nimport Touch from \"../core/touch\";\nimport env from \"../webix/env\";\nimport {isUndefined, extend, delay} from \"../webix/helpers\";\n\n\nconst ProgressBar = {\n\t$init:function(){\n\t\tif (isUndefined(this._progress) && this.attachEvent){\n\t\t\tthis.attachEvent(\"onBeforeLoad\", () => this.showProgress());\n\t\t\tthis.attachEvent(\"onAfterLoad\", () => this.hideProgress());\n\t\t\tthis._progress = null;\n\t\t}\n\t},\n\tshowProgress:function(config){\n\t\t// { position: 0 - 1, delay: 2000ms by default, css : name of css class to use }\n\t\tvar width;\n\t\tif (!this._progress){\n\n\t\t\tconfig = extend({\n\t\t\t\tposition:0,\n\t\t\t\tdelay: 2000,\n\t\t\t\ttype:\"icon\",\n\t\t\t\ticon:\"wxi-sync\",\n\t\t\t\thide:false\n\t\t\t}, (config||{}), true);\n\n\t\t\tvar incss = (config.type == \"icon\") ? (config.icon+\" webix_spin\") : \"\";\n\n\t\t\tthis._progress = create(\n\t\t\t\t\"DIV\",\n\t\t\t\t{\n\t\t\t\t\t\"class\":\"webix_progress_\"+config.type,\n\t\t\t\t\t\"role\":\"progressbar\",\n\t\t\t\t\t\"aria-valuemin\":\"0\",\n\t\t\t\t\t\"aria-valuemax\":\"100\",\n\t\t\t\t\t\"tabindex\":\"0\"\n\t\t\t\t},\n\t\t\t\t\"<div class='webix_progress_state \"+incss+\"'></div>\"\n\t\t\t);\n\n\t\t\tif(!this.setPosition)\n\t\t\t\tthis._viewobj.style.position = \"relative\";\n\n\t\t\tinsertBefore(this._progress, this._viewobj.firstChild, this._viewobj);\n\t\t\tthis._viewobj.setAttribute(\"aria-busy\", \"true\");\n\n\t\t\tif(!Touch.$active){\n\t\t\t\tif(this.getScrollState){\n\t\t\t\t\tvar scroll = this.getScrollState();\n\t\t\t\t\tif(this._viewobj.scrollWidth != this.$width){\n\t\t\t\t\t\tthis._progress.style.left = scroll.x +\"px\";\n\t\t\t\t\t}\n\t\t\t\t\tif(this._viewobj.scrollHeight != this.$height){\n\t\t\t\t\t\tif(config.type != \"bottom\"){\n\t\t\t\t\t\t\tthis._progress.style.top = scroll.y +\"px\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis._progress.style.top =  scroll.y + this.$height - this._progress.offsetHeight +\"px\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._progress_animate = config.type != \"icon\";\n\t\t}\n\n\t\tif (!config) return;\n\n\t\tif (this._progress_animate){\n\t\t\tvar position = config.position || 1;\n\t\t\t//check for css-transition support\n\t\t\tif(this._progress.style[env.transitionDuration] !== undefined || !config.delay){\n\t\t\t\tif (config.delay){\n\t\t\t\t\t// force reflow\n\t\t\t\t\twidth = this._viewobj.firstChild.offsetWidth;\n\t\t\t\t\tthis._progress.firstChild.style[env.transitionDuration] = config.delay+\"ms\";\n\t\t\t\t}\n\n\t\t\t\t// animate to new value\n\t\t\t\tthis._progress.firstChild.style.width = position*100+\"%\";\n\t\t\t} else{\n\t\t\t\t//if animation is not supported fallback to timeouts [IE9]\n\t\t\t\tvar count = 0,\n\t\t\t\t\tstart = 0,\n\t\t\t\t\tstep = position/config.delay*30,\n\t\t\t\t\tview = this;\n\n\t\t\t\tif(this._progressTimer){\n\t\t\t\t\t//reset the existing progress\n\t\t\t\t\twindow.clearInterval(this._progressTimer);\n\t\t\t\t\tstart = this._progress.firstChild.offsetWidth/this._progress.offsetWidth*100;\n\t\t\t\t}\n\t\t\t\tthis._progressTimer = window.setInterval(function(){\n\t\t\t\t\tif(count*30 == config.delay){\n\t\t\t\t\t\twindow.clearInterval(view._progressTimer);\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tif(view._progress && view._progress.firstChild)\n\t\t\t\t\t\t\tview._progress.firstChild.style.width = start+count*step*position*100+\"%\";\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t}\n\t\t\t\t},30);\n\t\t\t}\n\t\t}\n\n\t\tif (this._progress_hide)\n\t\t\tclearTimeout(this._progress_hide);\n\n\t\tif(config.hide)\n\t\t\tthis._progress_hide = delay(this.hideProgress, this, [1], config.delay);\n\n\t\t// necessary to prevent code optimization\n\t\treturn width;\n\t},\n\thideProgress:function(now){\n\t\tif (this._progress){\n\t\t\tif (now || !this._progress_animate){\n\t\t\t\tif(this._progressTimer)\n\t\t\t\t\twindow.clearInterval(this._progressTimer);\n\t\t\t\tremove(this._progress);\n\t\t\t\tthis._progress = null;\n\t\t\t\tthis._viewobj.removeAttribute(\"aria-busy\");\n\t\t\t} else {\n\t\t\t\tthis.showProgress({ position:1.1, delay:300 , hide:true });\n\t\t\t}\n\t\t}\n\t}\n};\n\nexport default ProgressBar;","import {locate, insertBefore, remove} from \"../webix/html\";\nimport {bind, clone, extend, toFunctor} from \"../webix/helpers\";\nimport {assert} from \"../webix/debug\";\nimport template from \"../webix/template\";\n\nimport type from \"../webix/type\";\n\nconst RenderStack ={\n\t$init:function(){\n\t\tassert(this.data,\"RenderStack :: Component doesn't have DataStore\");\n\t\tassert(template,\"template :: template is not accessible\");\n\n\t\t//used for temporary HTML elements\n\t\t//automatically nulified during destruction\n\t\tthis._html = document.createElement(\"DIV\");\n\t\t\t\t\n\t\tthis.data.attachEvent(\"onIdChange\", bind(this._render_change_id, this));\n\t\tthis.attachEvent(\"onItemClick\", this._call_onclick);\n\t\t\n\t\t//create copy of default type, and set it as active one\n\t\tif (!this.types){ \n\t\t\tthis.types = { \"default\" : this.type };\n\t\t\tthis.type.name = \"default\";\n\t\t}\n\n\t\tthis.type = clone(this.type);\n\t},\n\t\n\tcustomize:function(obj){ \n\t\ttype(this,obj);\n\t},\n\titem_setter:function(value){\n\t\treturn this.type_setter(value);\n\t},\n\ttype_setter:function(value){\n\t\tif(!this.types[value])\n\t\t\tthis.customize(value);\n\t\telse {\n\t\t\tthis.type = clone(this.types[value]);\n\t\t\tif (this.type.css) \n\t\t\t\tthis._contentobj.className+=\" \"+this.type.css;\n\t\t}\n\t\tif (this.type.on_click)\n\t\t\textend(this.on_click, this.type.on_click);\n\n\t\treturn value;\n\t},\n\t\n\ttemplate_setter:function(value){\n\t\tthis.type.template=template(value);\n\t},\n\t//convert single item to HTML text (templating)\n\t_toHTML:function(obj){\n\t\tvar mark = this.data._marks[obj.id];\n\t\t//check if related template exist\n\t\tassert((!obj.$template || this.type[\"template\"+obj.$template]),\"RenderStack :: Unknown template: \"+obj.$template);\n\t\tthis.callEvent(\"onItemRender\",[obj]);\n\t\treturn this.type.templateStart(obj,this.type, mark)+(obj.$template?this.type[\"template\"+obj.$template]:this.type.template)(obj,this.type,mark)+this.type.templateEnd(obj, this.type,mark);\n\t},\n\t//convert item to HTML object (templating)\n\t_toHTMLObject:function(obj){\n\t\tthis._html.innerHTML = this._toHTML(obj);\n\t\treturn this._html.firstChild;\n\t},\n\t_render_change_id:function(old, newid){\n\t\tvar obj = this.getItemNode(old);\n\t\tif (obj) {\n\t\t\tobj.setAttribute(this._id, newid);\n\t\t\tthis._htmlmap[newid] = this._htmlmap[old];\n\t\t\tdelete this._htmlmap[old];\n\t\t}\n\t},\n\t//calls function that is set in onclick property\n\t_call_onclick:function(){\n\t\tif (this._settings.click){\n\t\t\tvar code = toFunctor(this._settings.click, this.$scope);\n\t\t\tif (code && code.call) code.apply(this,arguments);\n\t\t}\n\t},\n\t//return html container by its ID\n\t//can return undefined if container doesn't exists\n\tgetItemNode:function(search_id){\n\t\tif (this._htmlmap)\n\t\t\treturn this._htmlmap[search_id];\n\t\t\t\n\t\t//fill map if it doesn't created yet\n\t\tthis._htmlmap={};\n\t\t\n\t\tvar t = this._dataobj.childNodes;\n\t\tfor (var i=0; i < t.length; i++){\n\t\t\tvar id = t[i].getAttribute(this._id); //get item's\n\t\t\tif (id)\n\t\t\t\tthis._htmlmap[id]=t[i];\n\t\t}\n\t\t//call locator again, when map is filled\n\t\treturn this.getItemNode(search_id);\n\t},\n\t//return id of item from html event\n\tlocate:function(e){ return locate(e,this._id); },\n\t/*change scrolling state of top level container, so related item will be in visible part*/\n\tshowItem:function(id){\n\n\t\tvar html = this.getItemNode(id);\n\t\tif (html&&this.scrollTo){\n\t\t\tvar txmin = html.offsetLeft;\n\t\t\tvar txmax = txmin + html.offsetWidth;\n\t\t\tvar tymin = html.offsetTop;\n\n\t\t\tvar tymax = tymin + html.offsetHeight;\n\t\t\tvar state = this.getScrollState();\n\n\t\t\tvar x = state.x;\n\t\t\tif (x > txmin || x + this._content_width < txmax )\n\t\t\t\tx = txmin;\n\t\t\tvar y = state.y;\n\t\t\tif (y > tymin || y + this._content_height < tymax )\n\t\t\t\ty = tymin;\n\n\t\t\tthis.scrollTo(x,y);\n\t\t\tif(this._setItemActive)\n\t\t\t\tthis._setItemActive(id);\n\t\t}\n\t},\n\t//update view after data update\n\t//method calls low-level rendering for related items\n\t//when called without parameters - all view refreshed\n\trender:function(id,data,type){\n\t\tif (!this.isVisible(this._settings.id) || this.$blockRender)\n\t\t\treturn;\n\t\t\n\t\tif (id){\n\t\t\tvar cont = this.getItemNode(id); //get html element of updated item\n\t\t\tswitch(type){\n\t\t\t\tcase \"paint\":\n\t\t\t\tcase \"update\":\n\t\t\t\t\t//in case of update - replace existing html with updated one\n\t\t\t\t\tif (!cont) return;\n\t\t\t\t\tvar t1 = this._htmlmap[id] = this._toHTMLObject(data);\n\t\t\t\t\tinsertBefore(t1, cont); \n\t\t\t\t\tremove(cont);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"delete\":\n\t\t\t\t\t//in case of delete - remove related html\n\t\t\t\t\tif (!cont) return;\n\t\t\t\t\tremove(cont);\n\t\t\t\t\tdelete this._htmlmap[id];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"add\":\n\t\t\t\t\t//in case of add - put new html at necessary position\n\t\t\t\t\tvar t2 = this._htmlmap[id] = this._toHTMLObject(data);\n\t\t\t\t\tinsertBefore(t2, this.getItemNode(this.data.getNextId(id)), this._dataobj);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"move\":\n\t\t\t\t\t//moving without repainting the item\n\t\t\t\t\tinsertBefore(this.getItemNode(id), this.getItemNode(this.data.getNextId(id)), this._dataobj);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tassert(0, \"Unknown render command: \"+type);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\t//full reset\n\t\t\tif (this.callEvent(\"onBeforeRender\",[this.data])){\n\t\t\t\t//getRange - returns all elements\n\t\t\t\t(this._renderobj||this._dataobj).innerHTML = this.data.getRange().map(this._toHTML,this).join(\"\");\n\t\t\t\tthis._htmlmap = null; //clear map, it will be filled at first getItemNode\n\t\t\t\tthis.callEvent(\"onAfterRender\",[]);\n\t\t\t}\n\t\t}\n\t}\n};\n\nexport default RenderStack;","import {create} from \"../webix/html\";\nimport {bind, delay} from \"../webix/helpers\";\nimport env from \"../webix/env\";\nimport {_event} from \"../webix/htmlevents\";\n\nimport Touch from \"../core/touch\";\nimport CustomScroll from \"../core/customscroll\";\n\nconst Scrollable= {\n\t$init:function(config){\n\t\t//do not spam unwanted scroll containers for templates \n\t\tif (config && !config.scroll && this._one_time_scroll) \n\t\t\treturn (this._dataobj = (this._dataobj||this._contentobj));\n\t\t\n\t\t(this._dataobj||this._contentobj).appendChild(create(\"DIV\",{ \"class\" : \"webix_scroll_cont\" },\"\"));\n\t\tthis._dataobj=(this._dataobj||this._contentobj).firstChild;\n\n\t\tif(!env.touch || env.touch === \"native\")\n\t\t\t_event(this._viewobj,\"scroll\", bind(function(){\n\t\t\t\tif(this.callEvent)\n\t\t\t\t\tdelay(function(){\n\t\t\t\t\t\tthis.callEvent(\"onAfterScroll\", []);\n\t\t\t\t\t}, this);\n\t\t\t},this));\n\t},\n\t/*defaults:{\n\t\tscroll:true\n\t},*/\n\tscroll_setter:function(value){\n\t\tif (!value) return false;\n\t\tvar auto = value === \"auto\";\n\t\tvar marker =  (value ==\"x\"?\"x\":(value==\"xy\"?\"xy\":(auto?\"xy\":\"y\")));\n\t\tif (Touch.$active && env.touch != \"native\"){\n\t\t\tthis._dataobj.setAttribute(\"touch_scroll\",marker);\n\t\t\tif (this.attachEvent)\n\t\t\t\tthis.attachEvent(\"onAfterRender\", bind(this._refresh_scroll,this));\n\t\t\tthis._touch_scroll = true;\n\t\t} else {\n\t\t\tif (env.$customScroll){\n\t\t\t\tCustomScroll.enable(this, marker);\n\t\t\t} else {\n\t\t\t\tvar node = this._dataobj.parentNode.style;\n\t\t\t\tif (auto){\n\t\t\t\t\tnode.overflowX = node.overflowY = \"auto\";\n\t\t\t\t} else {\n\t\t\t\t\tif (marker.indexOf(\"x\")!=-1){\n\t\t\t\t\t\tthis._scroll_x = true;\n\t\t\t\t\t\tnode.overflowX = \"scroll\";\n\t\t\t\t\t}\n\t\t\t\t\tif (marker.indexOf(\"y\")!=-1){\n\t\t\t\t\t\tthis._scroll_y = true;\n\t\t\t\t\t\tnode.overflowY = \"scroll\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn marker;\n\t},\n\t_onoff_scroll:function(mode, dir){\n\t\tif (!!this._settings.scroll == !!mode) return;\n\n\t\tif (!env.$customScroll){\n\t\t\tvar style = this._dataobj.parentNode.style;\n\t\t\tstyle[dir === \"x\" ? \"overflowX\" : \"overflowY\"] = mode ? \"auto\" : \"hidden\";\n\t\t}\n\n\t\t\n\t\tif (dir === \"x\"){\n\t\t\tthis._scroll_x = mode;\n\t\t} else {\n\t\t\tthis._scroll_y = mode;\n\t\t}\n\t\tthis._settings.scroll = mode?dir:false;\n\t},\n\tgetScrollState:function(){\n\t\tif (Touch.$active){\n\t\t\tvar temp = Touch._get_matrix(this._dataobj);\n\t\t\treturn { x : -temp.e, y : -temp.f };\n\t\t} else\n\t\t\treturn { x : this._dataobj.parentNode.scrollLeft, y : this._dataobj.parentNode.scrollTop };\n\t},\n\tscrollTo:function(x,y){\n\t\tif (Touch.$active && env.touch != \"native\"){\n\t\t\ty = Math.max(0, Math.min(y, this._dataobj.offsetHeight - this._content_height));\n\t\t\tx = Math.max(0, Math.min(x, this._dataobj.offsetWidth - this._content_width));\n\t\t\tTouch._set_matrix(this._dataobj, -x, -y, this._settings.scrollSpeed||\"100ms\");\n\t\t} else {\n\t\t\tthis._dataobj.parentNode.scrollLeft=x;\n\t\t\tthis._dataobj.parentNode.scrollTop=y;\n\t\t}\n\t},\n\t_refresh_scroll:function(){\n\t\tif (this._settings.scroll.toString().indexOf(\"x\")!=-1){\n\t\t\tlet x =  this._dataobj.scrollWidth;\n\t\t\tif (x){ //in hidden state we will have a Zero scrollWidth\n\t\t\t\tthis._dataobj.style.width = \"100%\";\n\t\t\t\tthis._dataobj.style.width = this._dataobj.scrollWidth + \"px\";\n\t\t\t}\n\t\t}\n\t\t\t\n\t\tif(Touch.$active && this._touch_scroll){\n\t\t\tTouch._clear_artefacts();\n\t\t\tTouch._scroll_end();\n\t\t\tvar s = this.getScrollState();\n\t\t\tvar dx = this._dataobj.offsetWidth - this.$width - s.x;\n\t\t\tvar dy = this._dataobj.offsetHeight - this.$height - s.y;\n\n\t\t\t//if current scroll is outside of data area\n\t\t\tif(dx<0 || dy < 0){\n\t\t\t\t//scroll to the end of data area\n\t\t\t\tlet x = (dx<0?Math.min(-dx - s.x,0):- s.x);\n\t\t\t\tlet y = (dy<0?Math.min(-dy - s.y,0):- s.y);\n\t\t\t\tTouch._set_matrix(this._dataobj, x, y, 0);\n\t\t\t}\n\t\t}\n\t}\n};\n\nexport default Scrollable;","import {addCss, removeCss} from \"../webix/html\";\nimport {_to_array, bind, isArray} from \"../webix/helpers\";\nimport {_event, event} from \"../webix/htmlevents\";\nimport {assert} from \"../webix/debug\";\n\nimport ready from \"../webix/ready\";\nimport state from \"../core/state\";\n\n\n/*\n\tBehavior:SelectionModel - manage selection states\n\t@export\n\t\tselect\n\t\tunselect\n\t\tselectAll\n\t\tunselectAll\n\t\tisSelected\n\t\tgetSelectedId\n*/\nconst SelectionModel ={\n\t$init:function(){\n\t\t//collection of selected IDs\n\t\tthis._selected = _to_array();\n\t\tassert(this.data, \"SelectionModel :: Component doesn't have DataStore\");\n\n\t\t//remove selection from deleted items\n\t\tthis.data.attachEvent(\"onStoreUpdated\",bind(this._data_updated,this));\n\t\tthis.data.attachEvent(\"onStoreLoad\", bind(this._data_loaded,this));\n\t\tthis.data.attachEvent(\"onAfterFilter\", bind(this._data_filtered,this));\n\t\tthis.data.attachEvent(\"onSyncApply\", bind(this._select_check,this));\n\t\tthis.data.attachEvent(\"onIdChange\", bind(this._id_changed,this));\n\t\tthis.$ready.push(this._set_noselect);\n\t},\n\t_set_noselect: function(){\n\t\tif (this._settings.select==\"multiselect\" || this._settings.multiselect || this._settings.select==\"area\")\n\t\t\t_event(this.$view,\"mousedown\", function(e){\n\t\t\t\tvar shiftKey = (e||window.event).shiftKey;\n\t\t\t\tif(shiftKey){\n\t\t\t\t\tstate._noselect_element = this;\n\t\t\t\t\taddCss(this,\"webix_noselect\",1);\n\t\t\t\t}\n\t\t\t});\n\t},\n\t_id_changed:function(oldid, newid){\n\t\tfor (var i = this._selected.length - 1; i >= 0; i--)\n\t\t\tif (this._selected[i]==oldid)\n\t\t\t\tthis._selected[i]=newid;\n\t},\n\t_data_filtered:function(){\n\t\tfor (var i = this._selected.length - 1; i >= 0; i--){\n\t\t\tif (this.data.getIndexById(this._selected[i]) < 0) {\n\t\t\t\tvar id = this._selected[i];\n\t\t\t\tthis.removeCss(id, \"webix_selected\", true);\n\t\t\t\tthis._selected.splice(i,1);\n\t\t\t\tthis.callEvent(\"onSelectChange\",[id]);\n\t\t\t}\n\t\t}\n\t},\n\t//helper - linked to onStoreUpdated\n\t_data_updated:function(id,obj,type){\n\t\tif (type == \"delete\"){\t\t\t\t//remove selection from deleted items\n\t\t\tif (this.loadBranch){\n\t\t\t\t//hierarchy, need to check all\n\t\t\t\tthis._select_check();\n\t\t\t} else\n\t\t\t\tthis._selected.remove(id);\n\t\t}\n\t\telse if (!id && !this.data.count() && !this.data._filter_order){\t//remove selection for clearAll\n\t\t\tthis._selected = _to_array();\n\t\t}\n\t},\n\t_data_loaded:function(){\n\t\tif (this._settings.select)\n\t\t\tthis.data.each(function(obj){\n\t\t\t\tif (obj && obj.$selected) this.select(obj.id);\n\t\t\t}, this);\n\t},\n\t_select_check:function(){\n\t\tfor (var i = this._selected.length - 1; i >= 0; i--)\n\t\t\tif (!this.exists(this._selected[i]))\n\t\t\t\tthis._selected.splice(i,1);\n\t},\n\t//helper - changes state of selection for some item\n\t_select_mark:function(id,state,refresh,need_unselect){\n\t\tvar sname = state ? \"onBeforeSelect\" : \"onBeforeUnSelect\";\n\t\tif (!this.callEvent(sname,[id,state])) return false;\n\n\t\tif (need_unselect){\n\t\t\tthis._silent_selection = true;\n\t\t\tthis.unselectAll();\n\t\t\tthis._silent_selection = false;\n\t\t}\n\t\t\n\t\tif (state)\n\t\t\tthis.addCss(id, \"webix_selected\", true);\n\t\telse\n\t\t\tthis.removeCss(id, \"webix_selected\", true);\n\n\t\tif (refresh)\n\t\t\trefresh.push(id);\t\t\t\t//if we in the mass-select mode - collect all changed IDs\n\t\telse{\n\t\t\tif (state)\n\t\t\t\tthis._selected.push(id);\t\t//then add to list of selected items\n\t\t\telse\n\t\t\t\tthis._selected.remove(id);\n\t\t\tthis._refresh_selection(id);\t//othervise trigger repainting\n\t\t}\n\n\t\tvar ename = state ? \"onAfterSelect\" : \"onAfterUnSelect\";\n\t\tthis.callEvent(ename,[id]);\n\n\t\treturn true;\n\t},\n\t//select some item\n\tselect:function(id,preserve){\n\t\tvar ctrlKey = arguments[2];\n\t\tvar shiftKey = arguments[3];\n\t\t//if id not provide - works as selectAll\n\t\tif (!id) return this.selectAll();\n\n\t\t//allow an array of ids as parameter\n\t\tif (isArray(id)){\n\t\t\tfor (var i=0; i < id.length; i++)\n\t\t\t\tthis.select(id[i], (i?1:preserve), ctrlKey, shiftKey);\n\t\t\treturn;\n\t\t}\n\n\t\tassert(this.data.exists(id), \"Incorrect id in select command: \"+id);\n\t\t\n\t\t//block selection mode\n\t\tif (shiftKey && this._selected.length)\n\t\t\treturn this.selectAll(this._selected[this._selected.length-1],id);\n\n\t\t//single selection mode\n\t\tvar need_unselect = false;\n\t\tif (!ctrlKey && !preserve && (this._selected.length!=1 || this._selected[0]!=id))\n\t\t\tneed_unselect = true;\n\n\t\tif (!need_unselect && this.isSelected(id)){\n\t\t\tif (ctrlKey) this.unselect(id);\t//ctrl-selection of already selected item\n\t\t\treturn;\n\t\t}\n\n\t\tthis._select_mark(id, true, null, need_unselect);\n\t},\n\t//unselect some item\n\tunselect:function(id){\n\t\t//if id is not provided  - unselect all items\n\t\tif (!id) return this.unselectAll();\n\t\tif (!this.isSelected(id)) return;\n\t\t\n\t\tthis._select_mark(id,false);\n\t},\n\t//select all items, or all in defined range\n\tselectAll:function(from,to){\n\t\tvar range;\n\t\tvar refresh=[];\n\t\t\n\t\tif (from||to)\n\t\t\trange = this.data.getRange(from||null,to||null);\t//get limited set if bounds defined\n\t\telse\n\t\t\trange = this.data.getRange();\t\t\t//get all items in other case\n\t\t//in case of paging - it will be current page only\n\t\trange.each(function(obj){ \n\t\t\tif (!this.data.getMark(obj.id, \"webix_selected\")){\n\t\t\t\tthis._selected.push(obj.id);\t\n\t\t\t\tthis._select_mark(obj.id,true,refresh);\n\t\t\t}\n\t\t},this);\n\t\t//repaint self\n\t\tthis._refresh_selection(refresh);\n\t},\n\t//remove selection from all items\n\tunselectAll:function(){\n\t\tvar refresh=[];\n\t\t\n\t\tthis._selected.each(function(id){\n\t\t\tthis._select_mark(id,false,refresh);\t//unmark selected only\n\t\t},this);\n\t\t\n\t\tthis._selected=_to_array();\n\t\tthis._refresh_selection(refresh);\t//repaint self\n\t},\n\t//returns true if item is selected\n\tisSelected:function(id){\n\t\treturn this._selected.find(id)!=-1;\n\t},\n\t/*\n\t\treturns ID of selected items or array of IDs\n\t\tto make result predictable - as_array can be used, \n\t\t\twith such flag command will always return an array \n\t\t\tempty array in case when no item was selected\n\t*/\n\tgetSelectedId:function(as_array){\t\n\t\tswitch(this._selected.length){\n\t\t\tcase 0: return as_array?[]:\"\";\n\t\t\tcase 1: return as_array?[this._selected[0]]:this._selected[0];\n\t\t\tdefault: return ([].concat(this._selected)); //isolation\n\t\t}\n\t},\n\tgetSelectedItem:function(as_array){\n\t\tvar sel = this.getSelectedId(true);\n\t\tif (sel.length > 1 || as_array){\n\t\t\tfor (var i = sel.length - 1; i >= 0; i--)\n\t\t\t\tsel[i] = this.getItem(sel[i]);\n\t\t\treturn sel;\n\t\t} else if (sel.length)\n\t\t\treturn this.getItem(sel[0]);\n\t},\n\t//detects which repainting mode need to be used\n\t_is_mass_selection:function(obj){\n\t\t// crappy heuristic, but will do the job\n\t\treturn obj.length>100 || obj.length > this.data.count/2;\n\t},\n\t_refresh_selection:function(refresh){\n\t\tif (typeof refresh != \"object\") refresh = [refresh];\n\t\tif (!refresh.length) return;\t//nothing to repaint\n\t\t\n\t\tif (this._is_mass_selection(refresh))\t\n\t\t\tthis.data.refresh();\t//many items was selected - repaint whole view\n\t\telse\n\t\t\tfor (var i=0; i < refresh.length; i++)\t//repaint only selected\n\t\t\t\tthis.render(refresh[i],this.data.getItem(refresh[i]),\"update\");\n\t\t\t\n\t\tif (!this._silent_selection)\t\n\t\t\tthis.callEvent(\"onSelectChange\",[refresh]);\n\t}\n};\n\nready(function(){\n\tevent(document.body,\"mouseup\", function(){\n\t\tif(state._noselect_element){\n\t\t\tremoveCss(state._noselect_element,\"webix_noselect\");\n\t\t\tstate._noselect_element = null;\n\t\t}\n\t});\n});\n\nexport default SelectionModel;","import {isArray} from \"../webix/helpers\";\n\nconst color = {\n\t_toHex:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\"],\n\ttoHex:function(number, length){\n\t\tnumber=parseInt(number,10);\n\t\tvar str = \"\";\n\t\twhile (number>0){\n\t\t\tstr=this._toHex[number%16]+str;\n\t\t\tnumber=Math.floor(number/16);\n\t\t}\n\t\twhile (str.length <length)\n\t\t\tstr = \"0\"+str;\n\t\treturn str;\n\t},\n\trgbToHex:function(rgb){\n\t\tvar arr=[];\n\t\tif(typeof(rgb) === \"string\")\n\t\t\trgb.replace(/[\\d+.]+/g, function(v){ \n\t\t\t\tarr.push(parseFloat(v));\n\t\t\t});\n\t\telse if(isArray(rgb))  arr = rgb;\n\t\t\n\t\t//transparent\n\t\tif(arr[3] === 0) return \"\";\n\n\t\treturn arr.slice(0, 3).map(function(n){\n\t\t\treturn color.toHex(Math.floor(n), 2);\n\t\t}).join(\"\");\n\t},\n\thexToDec:function(hex){\n\t\treturn parseInt(hex, 16);\n\t},\n\ttoRgb:function(rgb){\n\t\tvar r,g,b,rgbArr;\n\t\tif (typeof(rgb) != \"string\") {\n\t\t\tr = rgb[0];\n\t\t\tg = rgb[1];\n\t\t\tb = rgb[2];\n\t\t} else if (rgb.indexOf(\"rgb\")!=-1) {\n\t\t\trgbArr = rgb.substr(rgb.indexOf(\"(\")+1,rgb.lastIndexOf(\")\")-rgb.indexOf(\"(\")-1).split(\",\");\n\t\t\tr = rgbArr[0];\n\t\t\tg = rgbArr[1];\n\t\t\tb = rgbArr[2];\n\t\t} else {\n\t\t\tif (rgb.substr(0, 1) == \"#\") {\n\t\t\t\trgb = rgb.substr(1);\n\t\t\t}\n\t\t\tr = this.hexToDec(rgb.substr(0, 2));\n\t\t\tg = this.hexToDec(rgb.substr(2, 2));\n\t\t\tb = this.hexToDec(rgb.substr(4, 2));\n\t\t}\n\t\tr = (parseInt(r,10)||0);\n\t\tg = (parseInt(g,10)||0);\n\t\tb = (parseInt(b,10)||0);\n\t\tif (r < 0 || r > 255)\n\t\t\tr = 0;\n\t\tif (g < 0 || g > 255)\n\t\t\tg = 0;\n\t\tif (b < 0 || b > 255)\n\t\t\tb = 0;\n\t\treturn [r,g,b];\n\t},\n\thsvToRgb:function(h, s, v){\n\t\tvar hi,f,p,q,t,r,g,b;\n\t\thi = Math.floor((h/60))%6;\n\t\tf = h/60-hi;\n\t\tp = v*(1-s);\n\t\tq = v*(1-f*s);\n\t\tt = v*(1-(1-f)*s);\n\t\tr = 0;\n\t\tg = 0;\n\t\tb = 0;\n\t\tswitch(hi) {\n\t\t\tcase 0:\n\t\t\t\tr = v; g = t; b = p;\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tr = q; g = v; b = p;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tr = p; g = v; b = t;\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tr = p; g = q; b = v;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tr = t; g = p; b = v;\n\t\t\t\tbreak;\n\t\t\tcase 5:\n\t\t\t\tr = v; g = p; b = q;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t\tr = Math.floor(r*255);\n\t\tg = Math.floor(g*255);\n\t\tb = Math.floor(b*255);\n\t\treturn [r, g, b];\n\t},\n\trgbToHsv:function(r, g, b){\n\t\tvar r0,g0,b0,min0,max0,s,h,v;\n\t\tr0 = r/255;\n\t\tg0 = g/255;\n\t\tb0 = b/255;\n\t\tmin0 = Math.min(r0, g0, b0);\n\t\tmax0 = Math.max(r0, g0, b0);\n\t\th = 0;\n\t\ts = max0===0?0:(1-min0/max0);\n\t\tv = max0;\n\t\tif (max0 == min0) {\n\t\t\th = 0;\n\t\t} else if (max0 == r0 && g0>=b0) {\n\t\t\th = 60*(g0 - b0)/(max0 - min0)+0;\n\t\t} else if (max0 == r0 && g0 < b0) {\n\t\t\th = 60*(g0 - b0)/(max0 - min0)+360;\n\t\t} else if (max0 == g0) {\n\t\t\th = 60*(b0 - r0)/(max0-min0)+120;\n\t\t} else if (max0 == b0) {\n\t\t\th = 60*(r0 - g0)/(max0 - min0)+240;\n\t\t}\n\t\treturn [h, s, v];\n\t}\n};\n\nexport default color;","import color from \"../../webix/color\";\nimport {assert} from \"../../webix/debug\";\n\n\nfunction joinAttributes(attrs){\n\tvar result = \" \";\n\tif(attrs)\n\t\tfor(var a in attrs)\n\t\t\tresult += a+\"=\\\"\"+attrs[a]+\"\\\" \";\n\treturn result;\n}\n// SVG\nvar SVG = {};\n\nSVG.draw = function(content, width, height, css){\n\tvar attrs = {\n\t\txmlns: \"http://www.w3.org/2000/svg\",\n\t\tversion: \"1.1\",\n\t\theight: \"100%\",\n\t\twidth: \"100%\",\n\t\tviewBox: \"0 0 \"+width+\" \"+height,\n\t\t\"class\": css||\"\"\n\t};\n\treturn \"<svg \"+joinAttributes(attrs)+\">\"+content+\"</svg>\";\n};\nSVG.styleMap = {\n\t\"lineColor\": \"stroke\",\n\t\"color\": \"fill\"\n};\nSVG.group = function(path){\n\treturn \"<g>\"+path+\"</g>\";\n};\nSVG._handlers = {\n\t// MoveTo: {x:px,y:py}\n\t\"M\": function(p){\n\t\treturn \" M \"+ p.x+\" \"+ p.y;\n\t},\n\t// LineTo: {x:px,y:py}\n\t\"L\": function(p){\n\t\treturn \" L \"+ p.x+\" \"+ p.y;\n\t},\n\t// Curve: 3 points {x:px,y:py}: two control points and an end point\n\t\"C\": function(cp0, cp1, p){\n\t\treturn \" C \"+cp0.x + \" \"+cp0.y+\" \"+cp1.x + \" \"+cp1.y+\" \"+p.x + \" \"+p.y;\n\t},\n\t// Arc: center point {x:px,y:py}, radius, angle0, angle1\n\t\"A\": function(p, radius, angle0, angle1){\n\t\tvar x = p.x+Math.cos(angle1)*radius;\n\t\tvar y = p.y+Math.sin(angle1)*radius;\n\t\tvar bigCircle = angle1-angle0 >= Math.PI;\n\t\treturn  \" A \"+radius+\" \"+radius+\" 0 \"+(bigCircle?1:0)+\" 1 \"+x+\" \"+y;\n\t}\n};\n// points is an array of an array with two elements: {string} line type, {array}\nSVG.definePath = function(points, close){\n\tvar path = \"\";\n\tfor(var i =0; i < points.length; i++){\n\t\tassert(points[i][0]&&typeof points[i][0] == \"string\", \"Path type must be a string\");\n\t\tvar type = (points[i][0]).toUpperCase();\n\t\tassert(this._handlers[type], \"Incorrect path type\");\n\t\tpath += this._handlers[type].apply(this,points[i].slice(1));\n\n\t}\n\tif(close)\n\t\tpath += \" Z\";\n\n\treturn path;\n};\nSVG._linePoints = function(points){\n\tvar result = [];\n\tfor(var i = 0; i< points.length; i++){\n\t\tresult.push([i?\"L\":\"M\",points[i]]);\n\t}\n\treturn result;\n};\nSVG.setOpacity = function(rawColor,opacity){\n\tlet rgbColor = color.toRgb(rawColor);\n\trgbColor.push(opacity);\n\treturn \"rgba(\"+rgbColor.join(\",\")+\")\";\n};\nSVG._curvePoints = function(points){\n\tvar result = [];\n\tfor(var i = 0; i< points.length; i++){\n\t\tvar p = points[i];\n\t\tif(!i){\n\t\t\tresult.push([\"M\",p[0]]);\n\t\t}\n\t\tresult.push([\"C\",p[1],p[2],p[3]]);\n\t}\n\treturn result;\n};\nSVG.getPath = function(path, css, attrs){\n\tattrs = joinAttributes(attrs);\n\treturn \"<path class=\\\"\"+css+\"\\\" vector-effect=\\\"non-scaling-stroke\\\" d=\\\"\"+path+\"\\\" \"+attrs+\"/>\";\n};\nSVG.getSector = function(p, radius, angle0, angle1, css, attrs){\n\tattrs = joinAttributes(attrs);\n\tvar x0 = p.x+Math.cos(angle0)*radius;\n\tvar y0 = p.y+Math.sin(angle0)*radius;\n\tvar lines = [\n\t\t[\"M\",p],\n\t\t[\"L\",{x:x0, y:y0}],\n\t\t[\"A\", p,radius,angle0,angle1],\n\t\t[\"L\",p]\n\t];\n\n\n\treturn \"<path class=\\\"\"+css+\"\\\" vector-effect=\\\"non-scaling-stroke\\\" d=\\\"\"+SVG.definePath(lines,true)+\"\\\" \"+attrs+\"/>\";\n};\nSVG.getCurve = function(points,css, attrs){\n\tattrs = joinAttributes(attrs);\n\tvar path = this.definePath(this._curvePoints(points));\n\treturn \"<path fill=\\\"none\\\" class=\\\"\"+css+\"\\\" vector-effect=\\\"non-scaling-stroke\\\" d=\\\"\"+path+\"\\\" \"+attrs+\"/>\";\n};\nSVG.getLine = function(p0,p1,css, attrs){\n\treturn this.getPath(this.definePath(this._linePoints([p0,p1]),true),css,attrs);\n};\nSVG.getCircle = function(p, radius, css, attrs){\n\tattrs = joinAttributes(attrs);\n\treturn \"<circle class=\\\"\"+css+\"\\\" cx=\\\"\"+ p.x+\"\\\" cy=\\\"\"+ p.y+\"\\\" r=\\\"\"+radius+\"\\\" \"+attrs+\"/>\";\n};\nSVG.getRect = function(x, y, width, height, css, attrs){\n\tattrs = joinAttributes(attrs);\n\treturn \"<rect class=\\\"\"+css+\"\\\" rx=\\\"0\\\" ry=\\\"0\\\" x=\\\"\"+x+\"\\\" y=\\\"\"+y+\"\\\" width=\\\"\"+width+\"\\\" height=\\\"\"+height+\"\\\" \"+attrs+\"/>\";\n};\n\n\nexport default SVG;","import {createCss} from \"../../webix/html\";\nimport {extend, copy} from \"../../webix/helpers\";\n\nimport SVG from \"./svg\";\n\nvar defaults = {\n\tpaddingX: 6,\n\tpaddingY: 6,\n\tradius: 2,\n\tminHeight: 4,\n\teventRadius: 8\n};\nfunction Line(config){\n\tthis.config = extend(copy(defaults),config||{},true);\n}\n\nLine.prototype.draw = function(data, width, height){\n\tvar points = this.getPoints(data, width, height);\n\tvar config = this.config;\n\tvar renderer = SVG;\n\tvar styles = config.color?this._applyColor(renderer,config.color):null;\n\t// draw line\n\tvar path = renderer.definePath(this._getLinePoints(points));\n\tvar graph = renderer.group(renderer.getPath(path,\"webix_sparklines_line\"+(styles?\" \"+styles.line:\"\")));\n\t// draw items\n\tgraph += this._drawItems(renderer, points, config.radius, \"webix_sparklines_item\"+(styles?\" \"+styles.item:\"\"));\n\t// draw event items\n\tvar eventRadius = Math.min(data.length?(width-2*(config.paddingX||0))/data.length:0,config.eventRadius);\n\tgraph += this._drawEventItems(renderer, points, eventRadius);\n\treturn  renderer.draw(graph, width, height, \"webix_sparklines_line_chart\"+(config.css?\" \"+config.css:\"\"));\n};\nLine.prototype._applyColor = function(renderer,color){\n\tvar config = {\"line\":{},\"item\":{}},\n\t\tmap = renderer.styleMap;\n\tif(color){\n\t\tconfig.line[map.lineColor] = color;\n\t\tconfig.item[map.color] = color;\n\t\tfor(var name in config)\n\t\t\tconfig[name] = createCss(config[name]);\n\t}\n\treturn config;\n};\nLine.prototype._drawItems = function(renderer,points,radius,css,attrs){\n\tvar items = [];\n\tfor(var i = 0; i< points.length; i++){\n\t\titems.push(renderer.getCircle(points[i], radius, css,attrs));\n\t}\n\treturn renderer.group(items.join(\"\"));\n};\nLine.prototype._drawEventItems = function(renderer,points,radius){\n\tvar items = [];\n\tfor(var i = 0; i< points.length; i++){\n\t\titems.push(renderer.getCircle(points[i], radius, \"webix_sparklines_event_area\", {webix_area:i}));\n\t}\n\treturn renderer.group(items.join(\"\"));\n};\n\nLine.prototype._getLinePoints = function(points){\n\tvar i, type, result =[];\n\tfor( i =0; i< points.length; i++){\n\t\ttype = i?\"L\":\"M\";\n\t\tresult.push([type,points[i]]);\n\t}\n\treturn result;\n};\nLine.prototype.getPoints = function(data, width, height) {\n\tvar config = this.config;\n\tvar minValue = Math.min.apply(null,data);\n\tif (typeof config.origin !== \"undefined\")\n\t\tminValue = Math.min(config.origin, minValue);\n\n\tvar maxValue = Math.max.apply(null,data);\n\tvar result = [];\n\tvar x = config.paddingX||0;\n\tvar y = config.paddingY||0;\n\twidth = (width||100)-x*2;\n\tvar minHeight = config.minHeight||0;\n\theight = (height||100)-y*2;\n\tif(data.length){\n\t\tif(data.length==1)\n\t\t\tresult.push({x: width/2+x, y: height/2+x});\n\t\telse{\n\t\t\tvar unitX = width/(data.length-1);\n\t\t\tvar yNum = config.scale || (maxValue - minValue);\n\t\t\tvar unitY = (height- minHeight)/(yNum?yNum:1);\n\t\t\tif(!yNum)\n\t\t\t\theight /= 2;\n\t\t\tfor(var i=0; i < data.length; i++){\n\t\t\t\tresult.push({x: Math.ceil(unitX*i)+x, y: height-Math.ceil(unitY*(data[i]-minValue))+y-minHeight});\n\t\t\t}\n\t\t}\n\t}\n\treturn result;\n};\n\nexport default Line;","import {createCss} from \"../../webix/html\";\nimport {extend, copy} from \"../../webix/helpers\";\n\nimport SVG from \"./svg\";\nimport BaseLine from \"./line\";\n\n\n\nvar defaults = {\n\tpaddingX: 3,\n\tpaddingY: 4,\n\tradius: 1,\n\tminHeight: 4,\n\teventRadius: 8\n};\n\nfunction Area(config){\n\tthis.config = extend(copy(defaults),config||{},true);\n}\n\nArea.prototype.draw = function(data, width, height){\n\tvar eventRadius, graph, path, points, styles,\n\t\tconfig = this.config,\n\t\tLine = BaseLine.prototype,\n\t\trenderer = SVG;\n\n\t// draw area\n\tpoints = this.getPoints(data, width, height);\n\tpath = renderer.definePath(Line._getLinePoints(points),true);\n\n\tif(config.color)\n\t\tstyles = this._applyColor(renderer,config.color);\n\n\tgraph = renderer.group(renderer.getPath(path,\"webix_sparklines_area\"+(styles?\" \"+styles.area:\"\")));\n\t// draw line\n\tpoints.splice(points.length - 3, 3);\n\tpath = renderer.definePath(Line._getLinePoints(points));\n\tgraph += renderer.group(renderer.getPath(path,\"webix_sparklines_line\"+(styles?\" \"+styles.line:\"\")));\n\t// draw items\n\tgraph += Line._drawItems(renderer, points, config.radius, \"webix_sparklines_item\"+(styles?\" \"+styles.item:\"\"));\n\t// draw event areas\n\teventRadius = Math.min(data.length?(width-2*(config.paddingX||0))/data.length:0,config.eventRadius);\n\tgraph += Line._drawEventItems(renderer, points, eventRadius);\n\treturn  renderer.draw(graph, width, height, \"webix_sparklines_area_chart\"+(config.css?\" \"+config.css:\"\"));\n};\nArea.prototype._applyColor = function(renderer,color){\n\tvar config = {\"area\": {}, \"line\":{},\"item\":{}},\n\t\tmap = renderer.styleMap;\n\tif(color){\n\t\tconfig.area[map.color] = renderer.setOpacity(color,0.2);\n\t\tconfig.line[map.lineColor] = color;\n\t\tconfig.item[map.color] = color;\n\t\tfor(var name in config)\n\t\t\tconfig[name] = createCss(config[name]);\n\t}\n\n\treturn config;\n};\nArea.prototype.getPoints = function(data, width, height){\n\tvar Line = BaseLine.prototype;\n\tvar points =Line.getPoints.call(this, data, width, height);\n\tvar x = this.config.paddingX || 0;\n\tvar y = this.config.paddingY || 0;\n\tpoints.push({x: width - x, y: height - y},{x: x, y: height - y},{x: x, y: points[0].y});\n\treturn points;\n};\n\nexport default Area;","import {createCss} from \"../../webix/html\";\nimport {extend, copy} from \"../../webix/helpers\";\n\nimport SVG from \"./svg\";\n\n\nvar defaults = {\n\tpaddingX: 3,\n\tpaddingY: 4,\n\twidth: 20,\n\tmargin: 4,\n\tminHeight: 4,\n\teventRadius: 8,\n\torigin:0,\n\titemCss: function(value){return value < (this.config.origin||0)?\" webix_sparklines_bar_negative\":\"\";}\n};\nfunction Bar(config){\n\tthis.config = extend(copy(defaults),config||{},true);\n}\n\nBar.prototype.draw = function(data, width, height){\n\tvar i, css, p, y, padding,\n\t\tconfig = this.config,\n\t\tgraph = \"\", items = [],\n\t\tpoints = this.getPoints(data, width, height),\n\t\trenderer = SVG;\n\n\t// draw bars\n\tfor( i = 0; i< points.length; i++){\n\t\tcss = (typeof config.itemCss == \"function\"?config.itemCss.call(this,data[i]):(config.itemCss||\"\"));\n\t\tif (config.negativeColor && data[i] < config.origin)\n\t\t\tcss += \" \"+this._applyColor(renderer,config.negativeColor);\n\t\telse if(config.color)\n\t\t\tcss += \" \"+this._applyColor(renderer,config.color);\n\t\tp = points[i];\n\t\titems.push(renderer.getRect(p.x, p.y, p.width, p.height,\"webix_sparklines_bar \"+css));\n\t}\n\tgraph += renderer.group(items.join(\"\"));\n\t// origin)\n\ty = parseInt(this._getOrigin(data, width, height),10)+0.5;\n\tpadding = config.paddingX||0;\n\tgraph += renderer.group(renderer.getLine({x:padding, y: y},{x: width-padding, y: y},\"webix_sparklines_origin\"));\n\n\t// event areas\n\tvar evPoints = this._getEventPoints(data, width, height);\n\tvar evItems = [];\n\tfor( i = 0; i< evPoints.length; i++){\n\t\tp = evPoints[i];\n\t\tevItems.push(renderer.getRect(p.x, p.y, p.width, p.height,\"webix_sparklines_event_area \",{\"webix_area\":i}));\n\t}\n\tgraph += renderer.group(evItems.join(\"\"));\n\treturn  renderer.draw(graph, width, height, \"webix_sparklines_bar_chart\"+(config.css?\" \"+config.css:\"\"));\n};\nBar.prototype._applyColor = function(renderer,color){\n\tvar config = {},\n\t\tmap = renderer.styleMap;\n\tif(color)\n\t\tconfig[map.color] = color;\n\treturn createCss(config);\n};\nBar.prototype._getOrigin = function(data, width, height){\n\tvar config = this.config;\n\tvar y = config.paddingY||0;\n\theight = (height||100)-y*2;\n\tvar pos = y+height;\n\tif(config.origin !== false){\n\t\tvar minValue = Math.min.apply(null,data);\n\t\tvar maxValue = Math.max.apply(null,data);\n\t\tvar origin = config.origin||-0.000001;\n\t\tif(origin >= maxValue){\n\t\t\tpos = y;\n\t\t}\n\t\telse if(origin > minValue){\n\t\t\tvar unitY = height/(maxValue - minValue);\n\t\t\tpos -= unitY*(origin-minValue);\n\t\t}\n\t}\n\treturn pos;\n};\nBar.prototype._getEventPoints = function(data, width, height){\n\tvar result = [];\n\tvar x = this.config.paddingX||0;\n\tvar y = this.config.paddingY||0;\n\twidth = (width||100)-x*2;\n\theight = (height||100)-y*2;\n\tif(data.length){\n\t\tvar unitX = width/data.length;\n\t\tfor(var i=0; i < data.length; i++)\n\t\t\tresult.push({x: Math.ceil(unitX*i)+x, y: y, height: height, width: unitX});\n\t}\n\treturn result;\n};\nBar.prototype.getPoints = function(data, width, height){\n\tvar config = this.config;\n\tvar minValue = Math.min.apply(null,data);\n\tif (config.origin < minValue) \n\t\tminValue = config.origin;\n\n\tvar maxValue = Math.max.apply(null,data);\n\tvar result = [];\n\tvar x = config.paddingX;\n\tvar y = config.paddingY;\n\tvar margin = config.margin;\n\tvar barWidth = config.width||20;\n\tvar originY = this._getOrigin(data,width,height);\n\twidth = (width||100)-x*2;\n\theight = (height||100)-y*2;\n\tif(data.length){\n\t\tvar unitX = width/data.length;\n\t\tvar yNum = config.scale || (maxValue - minValue);\n\t\tbarWidth = Math.min(unitX-margin,barWidth);\n\t\tmargin = unitX-barWidth;\n\t\tvar minHeight = 0;\n\t\tvar origin = minValue;\n\n\t\tif(config.origin !== false && config.origin > minValue)\n\t\t\torigin = config.origin||0;\n\t\telse\n\t\t\tminHeight = config.minHeight;\n\n\t\tvar unitY = (height-minHeight)/(yNum?yNum:1);\n\n\t\tfor(var i=0; i < data.length; i++){\n\t\t\tvar h = Math.ceil(unitY*(data[i]-origin));\n\t\t\tresult.push({x: Math.ceil(unitX*i)+x+margin/2, y: originY-(data[i]>=origin?h:0)-minHeight, height: Math.abs(h)+minHeight, width: barWidth});\n\t\t}\n\n\t}\n\treturn result;\n};\n\nexport default Bar;","import {extend} from \"../../webix/helpers\";\n\nimport SVG from \"./svg\";\n\nvar defaults = {\n\tpaddingY: 2\n};\n\nfunction Pie(config){\n\tthis.config = extend(defaults,config||{},true);\n}\nPie.prototype._defColorsCursor = 0;\nPie.prototype._defColors  = [\n\t\"#f55b50\",\"#ff6d3f\",\"#ffa521\",\"#ffc927\",\"#ffee54\",\"#d3e153\",\"#9acb61\",\"#63b967\",\n\t\"#21a497\",\"#21c5da\",\"#3ea4f5\",\"#5868bf\",\"#7b53c0\",\"#a943ba\",\"#ec3b77\",\"#9eb0b8\"\n];\nPie.prototype._getColor = function(i,data){\n\tvar count = data.length;\n\tvar colorsCount = this._defColors.length;\n\tif(colorsCount > count){\n\t\tif(i){\n\t\t\tif(i < colorsCount - count)\n\t\t\t\ti = this._defColorsCursor +2;\n\t\t\telse\n\t\t\t\ti = this._defColorsCursor+1;\n\t\t}\n\t\tthis._defColorsCursor = i;\n\t}\n\telse\n\t\ti = i%colorsCount;\n\treturn this._defColors[i];\n};\nPie.prototype.draw = function(data, width, height){\n\tvar attrs, graph, i, sectors,\n\t\tconfig = this.config,\n\t\tcolor = config.color||this._getColor,\n\t\tpoints = this.getAngles(data),\n\t\trenderer = SVG,\n\t\ty = config.paddingY|| 0,\n\t\t// radius\n\t\tr = height/2 - y,\n\t\t// center\n\t\tx0 = width/2, y0 = height/2;\n\n\t// draw sectors\n\tif(typeof color != \"function\")\n\t\tcolor = function(){return color;};\n\tsectors = \"\";\n\tfor( i =0; i < points.length; i++){\n\t\tattrs = {};\n\t\tattrs[renderer.styleMap[\"color\"]] = color.call(this,i,data,this._context);\n\t\tsectors += renderer.getSector({x:x0,y:y0},r,points[i][0],points[i][1],\"webix_sparklines_sector\", attrs);\n\t}\n\tgraph = renderer.group(sectors);\n\n\t// draw event areas\n\tsectors = \"\";\n\tfor(i =0; i < points.length; i++){\n\t\tsectors += renderer.getSector({x:x0,y:y0},r,points[i][0],points[i][1],\"webix_sparklines_event_area\",{\"webix_area\":i});\n\t}\n\tgraph += renderer.group(sectors);\n\n\treturn  renderer.draw(graph, width, height, \"webix_sparklines_pie_chart\"+(config.css?\" \"+config.css:\"\"));\n};\nPie.prototype.getAngles = function(data){\n\tvar a0 = -Math.PI/ 2, a1,\n\t\ti, result = [];\n\n\tvar ratios = this._getRatios(data);\n\n\tfor( i =0; i < data.length; i++){\n\t\ta1= -Math.PI/2+ratios[i]-0.0001;\n\t\tresult.push([a0,a1]);\n\t\ta0 = a1;\n\t}\n\treturn result;\n};\nPie.prototype._getTotalValue = function(data){\n\tvar t=0;\n\tfor(var i = 0; i < data.length;i++)\n\t\tt += data[i]*1;\n\treturn  t;\n};\nPie.prototype._getRatios = function(data){\n\tvar i, value,\n\t\tratios = [],\n\t\tprevSum = 0,\n\t\ttotalValue = this._getTotalValue(data);\n\tfor(i = 0; i < data.length;i++){\n\t\tvalue = data[i]*1;\n\t\tratios[i] = Math.PI*2*(totalValue?((value+prevSum)/totalValue):(1/data.length));\n\t\tprevSum += value;\n\t}\n\treturn ratios;\n};\n\nexport default Pie;","import {createCss} from \"../../webix/html\";\nimport {extend, copy} from \"../../webix/helpers\";\n\nimport SVG from \"./svg\";\nimport Base from \"./line\";\n\nvar defaults = {\n\tpaddingX: 3,\n\tpaddingY: 6,\n\tradius: 2,\n\tminHeight: 4,\n\teventRadius: 8\n};\n\nfunction Spline(config){\n\tthis.config = extend(copy(defaults),config||{},true);\n}\n\nSpline.prototype.draw = function(data, width, height){\n\tvar config = this.config,\n\t\tgraph = \"\",\n\t\tLine = Base.prototype,\n\t\tpoints = this.getPoints(data, width, height),\n\t\trenderer = SVG,\n\t\tstyles = config.color?this._applyColor(renderer,config.color):null;\n\n\t// draw spline\n\tgraph += renderer.group(renderer.getCurve(points, \"webix_sparklines_line\"+(styles?\" \"+styles.line:\"\")));\n\n\tvar linePoints = Line.getPoints.call(this,data, width, height);\n\t// draw items\n\tgraph += Line._drawItems(renderer, linePoints, config.radius, \"webix_sparklines_item\"+(styles?\" \"+styles.item:\"\"));\n\t// draw event items\n\tvar eventRadius = Math.min(data.length?(width-2*(config.paddingX||0))/data.length:0,config.eventRadius);\n\tgraph += Line._drawEventItems(renderer, linePoints, eventRadius);\n\treturn  renderer.draw(graph, width, height,\"webix_sparklines_line_chart\"+(config.css?\" \"+config.css:\"\"));\n};\nSpline.prototype._applyColor = function(renderer,color){\n\tvar config = {\"line\":{},\"item\":{}},\n\t\tmap = renderer.styleMap;\n\tif(color){\n\t\tconfig.line[map.lineColor] = color;\n\t\tconfig.item[map.color] = color;\n\t\tfor(var name in config)\n\t\t\tconfig[name] = createCss(config[name]);\n\t}\n\treturn config;\n};\nSpline.prototype.getPoints = function(data, width, height){\n\tvar i, points, px, py,\n\t\tresult = [], x = [], y =[],\n\t\tLine = Base.prototype;\n\n\tpoints = Line.getPoints.call(this, data, width, height);\n\n\tfor(i = 0; i< points.length; i++){\n\t\tx.push(points[i].x);\n\t\ty.push(points[i].y);\n\t}\n\tpx = this._getControlPoints(x);\n\tpy = this._getControlPoints(y);\n\t/*updates path settings, the browser will draw the new spline*/\n\tfor ( i=0;i<points.length-1;i++){\n\t\tresult.push([points[i],{x:px[0][i],y:py[0][i]},{x:px[1][i],y:py[1][i]},points[i+1]]);\n\t}\n\treturn result;\n\n};\n/* code from https://www.particleincell.com/2012/bezier-splines/ */\nSpline.prototype._getControlPoints = function(points){\n\tvar a=[], b=[], c=[], r=[], p1=[], p2=[],\n\t\ti, m, n = points.length-1;\n\n\ta[0]=0;\n\tb[0]=2;\n\tc[0]=1;\n\tr[0] = points[0] + 2*points[1];\n\n\tfor (i = 1; i < n - 1; i++){\n\t\ta[i]=1;\n\t\tb[i]=4;\n\t\tc[i]=1;\n\t\tr[i] = 4 * points[i] + 2 * points[i+1];\n\t}\n\n\ta[n-1]=2;\n\tb[n-1]=7;\n\tc[n-1]=0;\n\tr[n-1] = 8*points[n-1]+points[n];\n\n\tfor (i = 1; i < n; i++){\n\t\tm = a[i]/b[i-1];\n\t\tb[i] = b[i] - m * c[i - 1];\n\t\tr[i] = r[i] - m*r[i-1];\n\t}\n\n\tp1[n-1] = r[n-1]/b[n-1];\n\tfor (i = n - 2; i >= 0; --i)\n\t\tp1[i] = (r[i] - c[i] * p1[i+1]) / b[i];\n\n\tfor (i=0;i<n-1;i++)\n\t\tp2[i]=2*points[i+1]-p1[i+1];\n\n\tp2[n-1]=0.5*(points[n]+p1[n-1]);\n\n\treturn [p1, p2];\n};\n\n\n\nexport default Spline;","import {createCss} from \"../../webix/html\";\nimport {extend, copy} from \"../../webix/helpers\";\n\nimport SVG from \"./svg\";\nimport Spline from \"./spline\";\nimport Base from \"./line\";\n\n\nvar defaultsArea = {\n\tpaddingX: 3,\n\tpaddingY: 6,\n\tradius: 1,\n\tminHeight: 4,\n\teventRadius: 8\n};\n// spline area\nfunction SplineArea(config){\n\tthis.config = extend(copy(defaultsArea),config||{},true);\n}\nSplineArea.prototype = copy(Spline.prototype);\nSplineArea.prototype.draw = function(data, width, height){\n\tvar config = this.config,\n\t\tLine = Base.prototype,\n\t\trenderer = SVG,\n\t\tstyles = config.color?this._applyColor(renderer,config.color):null;\n\n\tvar points = this.getPoints(data, width, height);\n\t// draw area\n\tvar linePoints = points.splice(points.length - 3, 3);\n\tvar linePath = renderer._linePoints(linePoints);\n\tlinePath[0][0] = \"L\";\n\tvar areaPoints = renderer._curvePoints(points).concat(linePath);\n\tvar graph = renderer.group(renderer.getPath(renderer.definePath(areaPoints),\"webix_sparklines_area\"+(styles?\" \"+styles.area:\"\"), true));\n\t// draw line\n\tgraph += renderer.group(renderer.getPath(renderer.definePath(renderer._curvePoints(points)),\"webix_sparklines_line\"+(styles?\" \"+styles.line:\"\")));\n\n\tvar itemPoints = Line.getPoints.call(this,data, width, height);\n\t// draw items\n\tgraph += Line._drawItems(renderer, itemPoints, config.radius, \"webix_sparklines_item\"+(styles?\" \"+styles.item:\"\"));\n\t// draw event items\n\tvar eventRadius = Math.min(data.length?(width-2*(config.paddingX||0))/data.length:0,config.eventRadius);\n\tgraph += Line._drawEventItems(renderer, itemPoints, eventRadius);\n\treturn  renderer.draw(graph, width, height, \"webix_sparklines_splinearea_chart\"+(config.css?\" \"+config.css:\"\"));\n};\nSplineArea.prototype._applyColor = function(renderer,color){\n\tvar config = {\"area\": {}, \"line\":{},\"item\":{}},\n\t\tmap = renderer.styleMap;\n\tif(color){\n\t\tconfig.area[map.color] = renderer.setOpacity(color,0.2);\n\t\tconfig.line[map.lineColor] = color;\n\t\tconfig.item[map.color] = color;\n\t\tfor(var name in config)\n\t\t\tconfig[name] = createCss(config[name]);\n\t}\n\treturn config;\n};\nSplineArea.prototype.getPoints = function(data, width, height){\n\tvar points = Spline.prototype.getPoints.call(this, data, width, height);\n\tvar x = this.config.paddingX || 0;\n\tvar y = this.config.paddingY || 0;\n\tpoints.push({x: width - x, y: height - y},{x: x, y: height - y},{x: x, y: points[0][0].y});\n\treturn points;\n};\n\nexport default SplineArea;","import {extend, bind} from \"../webix/helpers\";\nimport {assert} from \"../webix/debug\";\nimport {attachEvent} from \"../webix/customevents\";\n\nimport Area from \"./sparklines/area\";\nimport Bar from \"./sparklines/bar\";\nimport Line from \"./sparklines/line\";\nimport Pie from \"./sparklines/pie\";\nimport Spline from \"./sparklines/spline\";\nimport SplineArea from \"./sparklines/splinearea\";\n\nfunction Sparklines(){}\n\nfunction getData(data){\n\tvar values = [];\n\tfor (var i = data.length - 1; i >= 0; i--) {\n\t\tvar value = data[i];\n\t\tvalues[i] = (typeof value === \"object\" ? value.value : value);\n\t}\n\treturn values;\n}\n\n\nSparklines.types ={};\n\nSparklines.getTemplate = function(customConfig){\n\tvar config = customConfig||{};\n\tif(typeof customConfig == \"string\")\n\t\tconfig = { type: customConfig };\n\n\textend(config,{ type:\"line\" });\n\n\tvar slConstructor = this.types[config.type];\n\tassert(slConstructor,\"Unknown sparkline type\");\n\treturn bind(this._template, new slConstructor(config));\n};\n\nSparklines._template =  function(item, common, data, column){\n\tif (column)\n\t\treturn this.draw(getData(data), column.width, 33);\n\telse\n\t\treturn this.draw(item.data || item, common.width, common.height);\n};\n\n// add \"sparklines\" type\nattachEvent(\"onDataTable\", function(table){\n\ttable.type.sparklines = Sparklines.getTemplate();\n});\n\nSparklines.types[\"area\"]=Area;\nSparklines.types[\"bar\"]=Bar;\nSparklines.types[\"line\"]=Line;\nSparklines.types[\"pie\"]=Pie;\nSparklines.types[\"spline\"]=Spline;\nSparklines.types[\"splineArea\"]=SplineArea;\n\nexport default Sparklines;","import i18n from \"./i18n\";\n\nconst csv = {\n\tescape:true,\n\tdelimiter:{\n\t\trows: \"\\n\",\n\t\tcols: \"\\t\"\n\t},\n\tparse:function(text, sep){\n\t\tsep = sep||this.delimiter;\n\t\tif (!this.escape)\n\t\t\treturn this._split_clip_data(text, sep);\n\n\t\tvar lines = text.replace(/\\n$/,\"\").split(sep.rows);\n\n\t\tvar i = 0;\n\t\twhile (i < lines.length - 1) {\n\t\t\tif (this._substr_count(lines[i], \"\\\"\") % 2 === 1) {\n\t\t\t\tlines[i] += sep.rows + lines[i + 1];\n\t\t\t\tdelete lines[i + 1];\n\t\t\t\ti++;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t\tvar csv = [];\n\n\t\tfor (i = 0; i < lines.length; i++) {\n\t\t\tif (typeof(lines[i]) !== \"undefined\") {\n\t\t\t\tvar tline = lines[i];\n\t\t\t\tvar start = 0;\n\t\t\t\tvar line = [];\n\t\t\t\tvar quoted = false;\n\t\t\t\tfor (var j=0; j<=tline.length; j++){\n\t\t\t\t\tif (!quoted && tline[j] === sep.cols || j === tline.length){\n\t\t\t\t\t\tvar chunk = tline.substr(start, j-start);\n\t\t\t\t\t\tif (chunk[0] === chunk[chunk.length-1] && chunk[0] === \"\\\"\"){\n\t\t\t\t\t\t\tchunk = chunk.substr(1, chunk.length-2).replace(\"\\\"\\\"\", \"\\\"\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tline.push(chunk);\n\t\t\t\t\t\tstart = j+1;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tline[j] === \"\\\"\") {\n\t\t\t\t\t\tquoted = !quoted;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcsv.push(line);\n\t\t\t}\n\t\t}\n\t\treturn csv;\n\t},\n\t_split_clip_data: function(text, sep) {\n\t\tvar lines = text.split(sep.rows);\n\t\tfor (var i = 0; i < lines.length; i++) {\n\t\t\tlines[i] = lines[i].split(sep.cols);\n\t\t}\n\t\treturn lines;\n\t},\n\t/*! counts how many occurances substring in string **/\n\t_substr_count: function(string, substring) {\n\t\tvar arr = string.split(substring);\n\t\treturn arr.length - 1;\n\t},\n\tstringify:function(data, sep){\n\t\tsep = sep||this.delimiter;\n\n\t\tif (!this.escape){\n\t\t\tfor (let i = 0; i < data.length; i++)\n\t\t\t\tdata[i] = data[i].join(sep.cols);\n\t\t\treturn data.join(sep.rows);\n\t\t}\n\n\t\tvar reg = /\\n|\"|;|,/;\n\t\tfor (let i = 0; i < data.length; i++) {\n\t\t\tfor (var j = 0; j < data[i].length; j++) {\n\t\t\t\tvar chunk = data[i][j];\n\t\t\t\tif (chunk instanceof Date)\n\t\t\t\t\tdata[i][j] = i18n.parseFormatStr(chunk);\n\t\t\t\telse if (reg.test(chunk))\n\t\t\t\t\tdata[i][j] = \"\\\"\" + chunk.toString().replace(/\"/g, \"\\\"\\\"\") + \"\\\"\";\n\t\t\t}\n\t\t\tdata[i] = data[i].join(sep.cols);\n\t\t}\n\t\tdata = data.join(sep.rows);\n\t\treturn data;\n\t}\n};\n\nexport default csv;","import template from \"../webix/template\";\nimport UIManager from \"../core/uimanager\";\n\nimport clipbuffer from \"../webix/clipbuffer\";\nimport csv from \"../webix/csv\";\n\nimport {isUndefined} from \"../webix/helpers\";\n\n\nconst TablePaste = {\n\tclipboard_setter:function(value){\n\t\tif (value === true || value === 1) value = \"block\";\n\t\tclipbuffer.init();\n\t\tthis.attachEvent(\"onSelectChange\",this._sel_to_clip);\n\t\t// solution for clicks on selected items\n\t\tthis.attachEvent(\"onItemClick\",function(){\n\t\t\tif(document.activeElement && this.$view.contains(document.activeElement)){\n\t\t\t\tclipbuffer.focus();\n\t\t\t\tUIManager.setFocus(this);\n\t\t\t}\n\t\t});\n\t\tthis.attachEvent(\"onPaste\", this._clip_to_sel);\n\n\t\treturn value;\n\t},\n\ttemplateCopy_setter: template,\n\t_sel_to_clip: function() {\n\t\tvar data = this._get_sel_text();\n\t\tclipbuffer.set(data);\n\t\tUIManager.setFocus(this);\n\t},\n\n\t_get_sel_text: function() {\n\t\tvar data = [];\n\t\tvar filter = this._settings.templateCopy;\n\t\tthis.mapSelection(function(value, row, col, row_ind) {\n\t\t\tif (!data[row_ind]) data[row_ind] = [];\n\t\t\tvar newvalue = filter ? filter(value, row, col) : value;\n\t\t\tdata[row_ind].push(newvalue);\n\t\t\treturn value;\n\t\t});\n\t\tvar value = data.length === 1 && data[0].length === 1 ? data[0][0] : csv.stringify(data, this._settings.delimiter);\n\t\treturn value;\n\t},\n\n\t_clip_to_sel: function(text) {\n\t\tif (!isUndefined(this._paste[this._settings.clipboard])) {\n\t\t\tvar data = csv.parse(text, this._settings.delimiter);\n\t\t\tthis._paste[this._settings.clipboard].call(this, data);\n\t\t}\n\t},\n\n\t_paste: {\n\t\tblock: function(data) {\n\t\t\tvar leftTop = this.mapSelection(null);\n\t\t\tif (!leftTop) return;\n\n\t\t\t// filling cells with data\n\t\t\tthis.mapCells(leftTop.row, leftTop.column, data.length, null, function(value, row, col, row_ind, col_ind) {\n\t\t\t\tif (data[row_ind] && data[row_ind].length>col_ind) {\n\t\t\t\t\treturn data[row_ind][col_ind];\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t});\n\t\t\tthis.render();\n\t\t},\n\n\t\tselection: function(data) {\n\t\t\tthis.mapSelection(function(value, row, col, row_ind, col_ind) {\n\t\t\t\tif (data[row_ind] && data[row_ind].length>col_ind)\n\t\t\t\t\treturn data[row_ind][col_ind];\n\t\t\t\treturn value;\n\t\t\t});\n\t\t\tthis.render();\n\t\t},\n\n\t\trepeat: function(data) {\n\t\t\tthis.mapSelection(function(value, row, col, row_ind, col_ind) {\n\t\t\t\trow = data[row_ind%data.length];\n\t\t\t\tvalue = row[col_ind%row.length];\n\t\t\t\treturn value;\n\t\t\t});\n\t\t\tthis.render();\n\t\t},\n\n\t\tcustom: function() {}\n\t}\n};\n\nexport default TablePaste;","import {assert} from \"../webix/debug\";\n\n\nconst TreeAPI = {\n\topen: function(id, show) {\n\t\tif (!id) return;\n\t\t//ignore open for leaf items\n\t\tvar item = this.getItem(id);\n\t\tassert(item,\"Incorrect ID to open: \"+id);\n\n\t\tif (!item.$count || item.open) return;\n\n\t\tif (this.callEvent(\"onBeforeOpen\",[id])){\n\t\t\titem.open=true;\n\t\t\tthis.data.callEvent(\"onStoreUpdated\",[id, 0, \"branch\"]);\n\t\t\tthis.callEvent(\"onAfterOpen\",[id]);\n\t\t}\n\n\t\tif (show && id != \"0\")\n\t\t\tthis.open(this.getParentId(id), show);\n\t},\n\tclose: function(id) {\n\t\tif (!id) return;\n\t\tvar item = this.getItem(id);\n\t\tif (!item.open) return;\n\n\t\tif (this.callEvent(\"onBeforeClose\",[id])){\n\t\t\titem.open=false;\n\t\t\tthis.data.callEvent(\"onStoreUpdated\",[id, 0, \"branch\"]);\n\t\t\tthis.callEvent(\"onAfterClose\",[id]);\n\t\t}\n\t},\n\topenAll: function(id){\n\t\tthis.data.eachSubItem((id||0), function(obj, branch){\n\t\t\tif (branch)\n\t\t\t\tobj.open = true;\n\t\t});\n\t\tthis.data.refresh();\n\t},\n\tcloseAll: function(id){\n\t\tthis.data.eachSubItem((id||0), function(obj, branch){\n\t\t\tif (branch)\n\t\t\t\tobj.open = false;\n\t\t});\n\t\tthis.data.refresh();\n\t},\n\t_tree_check_uncheck:function(id,mode,e){\n\t\tif(this._settings.threeState)\n\t\t\treturn this._tree_check_uncheck_3(id,(mode !== null?mode:\"\"));\n\n\t\tvar value,\n\t\t\titem = this.getItem(id),\n\t\t\ttrg = (e? (e.target|| e.srcElement):null);\n\n\t\t//read actual value from HTML tag when possible\n\t\t//as it can be affected by dbl-clicks\n\t\tif(trg && trg.type == \"checkbox\")\n\t\t\tvalue = trg.checked?true:false;\n\t\telse\n\t\t\tvalue = (mode !== null?mode:!item.checked);\n\n\t\titem.checked = value;\n\t\tthis.callEvent(\"onItemCheck\", [id, item.checked, e]);\n\t},\n\tisBranchOpen:function(search_id){\n\t\tif (search_id == \"0\") return true;\n\n\t\tvar item = this.getItem(search_id);\n\t\tif (item.open)\n\t\t\treturn this.isBranchOpen(item.$parent);\n\t\treturn false;\n\t},\n\tgetOpenItems: function() {\n\t\tvar open = [];\n\t\tfor (var id in this.data.branch) {\n\t\t\tif (this.exists(id) && this.getItem(id).open)\n\t\t\t\topen.push(id);\n\t\t}\n\t\treturn open;\n\t},\n\tgetState: function(){\n\t\treturn {\n\t\t\topen: this.getOpenItems(),\n\t\t\tselect: this.getSelectedId(true)\n\t\t};\n\t},\n\t_repeat_set_state:function(tree, open){\n\t\tvar event = this.data.attachEvent(\"onStoreLoad\", function(){\n\t\t\ttree.setState.call(tree,open);\n\t\t\ttree.data.detachEvent(event);\n\t\t\ttree = null;\n\t\t});\n\t},\n\tsetState: function(state){\n\t\tif (state.open){\n\t\t\tthis.closeAll();\t\n\t\t\tvar open = state.open;\n\t\t\tfor (let i = 0; i < open.length; i++){\n\t\t\t\tvar item = this.getItem(open[i]);\n\t\t\t\tif (item && item.$count){\n\t\t\t\t\titem.open=true;\n\t\t\t\t\t//dynamic loading\n\t\t\t\t\tif (item.$count == -1){\n\t\t\t\t\t\t//call the same method after data loading\n\t\t\t\t\t\tthis._repeat_set_state(this, state);\n\t\t\t\t\t\tthis.refresh();\n\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t//end processing\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.refresh();\n\t\t}\n\n\n\t\tif (state.select && this.select){\t\t\t\n\t\t\tvar select = state.select;\n\t\t\tthis.unselect();\n\t\t\tfor (let i = 0; i < select.length; i++)\n\t\t\t\tif (this.exists(select[i]))\n\t\t\t\t\tthis.select(select[i], true);\n\t\t}\n\n\t\treturn 1;\n\t}\n};\n\nexport default TreeAPI;","\n\nconst TreeClick = {\n\twebix_tree_open:function(e, id){\n\t\tthis.close(id);\n\t\treturn false;\n\t},\n\twebix_tree_close:function(e, id){\n\t\tthis.open(id);\n\t\treturn false;\n\t},\n\twebix_tree_checkbox:function(e,id){\n\t\tthis._tree_check_uncheck(id, null, e);\n\t\treturn false;\n\t}\n};\n\nexport default TreeClick;","import {bind} from \"../webix/helpers\";\nimport DataLoader from \"../core/dataloader\";\nimport promise from \"../thirdparty/promiz\";\n\n\nconst TreeDataLoader = {\n\t$init:function(){\n\t\tthis.data.attachEvent(\"onStoreUpdated\", bind(this._sync_hierarchy, this), null, true);\n\t\t//redefine methods\n\t\tthis._feed_common = this._feed_commonA;\n\t},\n\t_feed_commonA:function(id, count, callback, url){\n\t\t// branch loading\n\t\tvar details = (count === 0?{parent: encodeURIComponent(id)}:null);\n\n\t\treturn DataLoader.prototype._feed_common.call(this,id, count, callback, url, details);\n\t},\n\t//load next set of data rows\n\tloadBranch:function(id, callback, url){\n\t\tid = id ||0;\n\t\tthis.data.url = url || this.data.url;\n\t\tif (this.callEvent(\"onDataRequest\", [id,callback,this.data.url]) && this.data.url)\n\t\t\treturn this.data.feed.call(this, id, 0, callback, url);\n\t\treturn promise.reject();\n\t},\n\t_sync_hierarchy:function(id, data, mode){\n\t\tif (!mode || mode == \"add\" || mode == \"delete\" || mode == \"branch\"){\n\t\t\tthis.data._sync_to_order(this);\n\t\t}\n\t}\n};\n\nexport default TreeDataLoader;","import {isArray, copy as makeCopy, uid, _power_array} from \"../webix/helpers\";\nimport {assert} from \"../webix/debug\";\nimport DataMove from \"../core/datamove\";\nimport DragControl from \"../core/dragcontrol\";\n\n\n/*\n\tBehavior:DataMove - allows to move and copy elements, heavily relays on DataStore.move\n\t@export\n\t\tcopy\n\t\tmove\n*/\nconst TreeDataMove ={\n\t$init:function(){\n\t\tassert(this.data, \"DataMove :: Component doesn't have DataStore\");\n\t},\n\t//creates a copy of the item\n\tcopy:function(sid,tindex,tobj,details){\n\t\tdetails = details || {};\n\t\tdetails.copy = true;\n\t\treturn this.move(sid, tindex, tobj, details);\n\t},\n\t_next_move_index:function(nid, next, source){\n\t\tif (next && nid){\n\t\t\tvar new_index = this.getBranchIndex(nid);\n\t\t\t// check parent only when moving locally (source == this)\n\t\t\treturn new_index + ((source == this && this.getParentId(nid) == this.getParentId(next)\n\t\t\t\t&& source.getBranchIndex(next) < new_index) ? 0 : 1);\n\t\t}\n\t},\n\t_check_branch_child:function(parent, child){\n\t\tvar t = this.data.branch[parent];\n\t\tif (t && t.length){\n\t\t\tfor (var i=0; i < t.length; i++) {\n\t\t\t\tif (t[i] == child) return true;\n\t\t\t\tif (this._check_branch_child(t[i], child)) return true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\t_remove_childs(ids){\n\t\tfor(var i = 0; i < ids.length; i++){\n\t\t\tvar id = ids[i];\n\t\t\twhile(this.getParentId(id)){\n\t\t\t\tid = this.getParentId(id);\n\t\t\t\tif(_power_array.find.call(ids, id) != -1){\n\t\t\t\t\tids.splice(i,1);\n\t\t\t\t\ti--;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn ids;\n\t},\n\t//move item to the new position\n\tmove:function(sid,tindex,tobj, details){\n\t\tdetails = details || {};\n\t\ttindex = tindex || 0;\n\t\tvar new_id = details.newId || sid;\n\t\tvar target_parent = details.parent || 0;\n\t\t\n\t\ttobj = tobj||this;\n\t\tassert(tobj.data, \"moving attempt to component without datastore\");\n\t\tif (!tobj.data) return;\n\n\t\tif (isArray(sid)){\n\t\t\tthis._remove_childs(sid);\n\t\t\tfor (var i=0; i < sid.length; i++) {\n\t\t\t\t//increase index for each next item in the set, so order of insertion will be equal to order in the array\n\t\t\t\tvar nid = this.move(sid[i], tindex, tobj, details);\n\t\t\t\ttindex = tobj._next_move_index(nid, sid[i+1], this);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif (this != tobj || details.copy){\n\t\t\tnew_id = tobj.data.add(tobj._externalData(this.getItem(sid),new_id), tindex, (target_parent || 0));\n\t\t\tif (this.data.branch[sid] && tobj.getBranchIndex){\n\t\t\t\tvar temp = this.data._scheme_serialize;\n\t\t\t\tthis.data._scheme_serialize = function(obj){\n\t\t\t\t\tvar copy = makeCopy(obj);\n\t\t\t\t\tdelete copy.$parent; delete copy.$level; delete copy.$child;\n\t\t\t\t\tif (tobj.data.pull[copy.id])\n\t\t\t\t\t\tcopy.id = uid();\n\t\t\t\t\treturn copy;\n\t\t\t\t};\n\t\t\t\tvar copy_data = { data:this.serialize(sid, true), parent:new_id };\n\t\t\t\tthis.data._scheme_serialize = temp;\n\t\t\t\ttobj.parse(copy_data);\n\t\t\t}\n\t\t\tif (!details.copy)\n\t\t\t\tthis.data.remove(sid);\n\t\t} else {\n\t\t\t//move in self\n\t\t\tif (sid == target_parent || this._check_branch_child(sid,target_parent)) return;\n\n\t\t\tvar source = this.getItem(sid);\n\t\t\tvar tbranch = this.data.branch[target_parent];\n\t\t\tif (!tbranch) \n\t\t\t\ttbranch = this.data.branch[target_parent] = [];\n\t\t\tvar sbranch = this.data.branch[source.$parent];\n\n\t\t\tvar sindex = _power_array.find.call(sbranch, sid);\n\t\t\tif (tindex < 0) tindex = tbranch.length;\n\t\t\t//in the same branch\n\t\t\tif (sbranch === tbranch && tindex === sindex) return; //same position\n\n\t\t\t_power_array.removeAt.call(sbranch, sindex);\n\t\t\t_power_array.insertAt.call(tbranch, sid, Math.min(tbranch.length, tindex));\n\n\t\t\tif (!sbranch.length)\n\t\t\t\tdelete this.data.branch[source.$parent];\n\t\t\t\n\n\t\t\tif(source.$parent && source.$parent != \"0\")\n\t\t\t\tthis.getItem(source.$parent).$count--;\n\n\t\t\tif (target_parent && target_parent != \"0\"){\n\t\t\t\tvar target = tobj.getItem(target_parent);\n\t\t\t\ttarget.$count++;\n\t\t\t\tthis._set_level_rec(source, target.$level+1);\n\t\t\t} else \n\t\t\t\tthis._set_level_rec(source, 1);\n\n\t\t\tsource.$parent = target_parent;\n\t\t\ttobj.data.callEvent(\"onDataMove\", [sid, tindex, target_parent, tbranch[tindex+1]]);\n\t\t}\n\n\t\tthis.refresh();\n\t\treturn new_id;\t//return ID of item after moving\n\t},\n\t_set_level_rec:function(item, value){\n\t\titem.$level = value;\n\t\tvar branch = this.data.branch[item.id];\n\t\tif (branch)\n\t\t\tfor (var i=0; i<branch.length; i++)\n\t\t\t\tthis._set_level_rec(this.getItem(branch[i]), value+1);\n\t},\n\t//reaction on pause during dnd\n\t_drag_pause:function(id){\n\t\tif (id && !id.header && this.exists(id) && this._target_to_id(id) != DragControl._drag_context.start) //ignore drag other header\n\t\t\tthis.open(id);\n\t},\n\t$dropAllow:function(context){\n\t\tif (context.from != context.to) return true;\n\t\tfor (let i=0; i<context.source.length; i++)\n\t\t\tif (this._check_branch_child(context.source, context.target)) return false;\n\n\t\treturn true;\n\t},\n\t/*\n\t\tthis is a stub for future functionality\n\t\tcurrently it just makes a copy of data object, which is enough for current situation\n\t*/\n\t_externalData:function(data,id){\n\t\tvar new_data = DataMove._externalData.call(this, data, id);\n\t\tdelete new_data.open;\n\t\treturn new_data;\n\t}\n};\n\nexport default TreeDataMove;","import {insertBefore, remove, create} from \"../webix/html\";\nimport {assert} from \"../webix/debug\";\n\n\nconst TreeRenderStack ={\n\t$init:function(){\n\t\tassert(this.render,\"TreeRenderStack :: Object must use RenderStack first\");\n\t},\n\t_toHTMLItem:function(obj){\n\t\tvar mark = this.data._marks[obj.id];\n\t\tthis.callEvent(\"onItemRender\",[obj]);\n\t\treturn this.type.templateStart(obj,this.type,mark)+(obj.$template?this.type[\"template\"+obj.$template](obj,this.type,mark):this.type.template(obj,this.type,mark))+this.type.templateEnd();\n\t},\n\t_toHTMLItemObject:function(obj){\n\t\tthis._html.innerHTML = this._toHTMLItem(obj);\n\t\treturn this._html.firstChild;\n\t},\n\t//convert single item to HTML text (templating)\n\t_toHTML:function(obj){\n\t\t//check if related template exist\n\t\tassert((!obj.$template || this.type[\"template\"+obj.$template]),\"RenderStack :: Unknown template: \"+obj.$template);\n\t\tvar html=\"<div role='presentation' class='webix_tree_branch_\"+obj.$level+\"'>\"+this._toHTMLItem(obj);\n\n\t\tif (obj.open)\n\t\t\thtml+=this._toHTMLLevel(obj.id);\n\n\t\thtml+=\"</div>\";\n\n\t\treturn html;\n\t},\n\t_toHTMLLevel:function(id){\n\t\tvar html = \"\";\n\t\tvar leaves = this.data.branch[id];\n\t\tif (leaves){\n\t\t\thtml+=\"<div role='presentation' class='webix_tree_leaves'>\";\n\t\t\tvar last = leaves.length-1;\n\t\t\tfor (var i=0; i <= last; i++){\n\t\t\t\tvar obj = this.getItem(leaves[i]);\n\t\t\t\tvar state = this.type._tree_branch_render_state;\n\t\t\t\tif (state !== 0) state[obj.$level] = (i == last);\n\t\t\t\thtml+=this._toHTML(obj);\n\t\t\t}\n\t\t\thtml+=\"</div>\";\n\t\t}\n\t\treturn html;\n\t},\n\t//return true when some actual rendering done\n\trender:function(id,data,type){\n\t\tTreeRenderStack._obj = this;\t//can be used from complex render\n\n\t\tif (!this.isVisible(this._settings.id) || this.$blockRender)\n\t\t\treturn;\n\n\t\tif (id){\n\t\t\tvar cont, node;\n\t\t\tvar item = this.getItem(id);\n\t\t\tif (type!=\"add\"){\n\t\t\t\tcont = this.getItemNode(id);\n\t\t\t\tif (!cont) return;\n\t\t\t}\n\t\t\t\n\t\t\tswitch(type){\n\t\t\t\tcase \"branch\":\n\t\t\t\t\tvar branch = cont.parentNode;\n\t\t\t\t\tnode = this._toHTMLObject(item);\n\t\t\t\t\t\n\t\t\t\t\tinsertBefore(node, branch); \n\t\t\t\t\tremove(branch);\n\t\t\t\t\tthis._htmlmap = null;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"paint\":\n\t\t\t\tcase \"update\":\n\t\t\t\t\tnode = this._htmlmap[id] = this._toHTMLItemObject(item);\n\t\t\t\t\tinsertBefore(node, cont); \n\t\t\t\t\tremove(cont);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"delete\":\n\t\t\t\t\t//deleting not item , but full branch\n\t\t\t\t\tremove(cont.parentNode);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"add\":\n\t\t\t\t\tvar parent;\n\t\t\t\t\t//we want process both empty value and 0 as string\n\t\t\t\t\t//jshint -W041:true\n\t\t\t\t\tif (item.$parent == 0){\n\t\t\t\t\t\tparent = this._dataobj.firstChild;\n\t\t\t\t\t} else if(this.getItem(item.$parent).open){\n\t\t\t\t\t\tparent  = this.getItemNode(item.$parent);\n\t\t\t\t\t\tif (parent){\n\t\t\t\t\t\t\t//when item created by the script, it will miss the container for child notes\n\t\t\t\t\t\t\t//create it on demand\n\t\t\t\t\t\t\tif (!parent.nextSibling){\n\t\t\t\t\t\t\t\tvar leafs = create(\"DIV\", { \"class\" : \"webix_tree_leaves\" },\"\");\n\t\t\t\t\t\t\t\tparent.parentNode.appendChild(leafs);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tparent = parent.nextSibling;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (parent){\n\t\t\t\t\t\tvar next = this.data.getNextSiblingId(id);\n\t\t\t\t\t\tnext = this.getItemNode(next);\n\t\t\t\t\t\tif (next)\n\t\t\t\t\t\t\tnext = next.parentNode;\n\n\t\t\t\t\t\tnode = this._toHTMLObject(item);\n\t\t\t\t\t\tthis._htmlmap[id] = node.firstChild;\n\t\t\t\t\t\tinsertBefore(node, next, parent);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.callEvent(\"onPartialRender\", [id,data,type]);\n\t\t} else {\n\t\t\t//full reset\n\t\t\tif (this.callEvent(\"onBeforeRender\",[this.data])){\n\t\t\t\t//will be used for lines management\n\t\t\t\tthis.type._tree_branch_render_state = [];\n\t\t\t\t//getTopRange - returns all elements on top level\n\t\t\t\tthis._dataobj.innerHTML = this._toHTMLLevel(0);\n\t\t\t\t\t\n\t\t\t\tthis._htmlmap = null; //clear map, it will be filled at first getItemNode\n\t\t\t\tthis.callEvent(\"onAfterRender\",[]);\n\t\t\t}\n\t\t}\n\n\t\t//clear after usage\n\t\tthis.type._tree_branch_render_state = 0;\n\t\tTreeRenderStack._obj = null;\n\t\treturn true;\n\t},\n\tgetItemNode:function(search_id){\n\t\tif (this._htmlmap)\n\t\t\treturn this._htmlmap[search_id];\n\t\t\t\n\t\t//fill map if it doesn't created yet\n\t\tthis._htmlmap={};\n\t\t\n\t\tvar t = this._dataobj.getElementsByTagName(\"DIV\");\n\t\tfor (var i=0; i < t.length; i++){\n\t\t\tvar id = t[i].getAttribute(this._id); //get item's\n\t\t\tif (id) \n\t\t\t\tthis._htmlmap[id]=t[i];\n\t\t}\n\t\t//call locator again, when map is filled\n\t\treturn this.getItemNode(search_id);\n\t},\n\t_branch_render_supported:1\n};\n\nexport default TreeRenderStack;","\n\nconst TreeStateCheckbox = {\n\t_init_render_tree_state: function(){\n\t\tif (this._branch_render_supported){\n\t\t\tvar old_render = this.render;\n\t\t\tthis.render = function(id,data){\n\t\t\t\tvar updated = old_render.apply(this,arguments);\n\n\t\t\t\tif(this._settings.threeState && updated && data != \"checkbox\")\n\t\t\t\t\tthis._setThirdState.apply(this,arguments);\n\t\t\t};\n\t\t\tthis._init_render_tree_state=function(){};\n\t\t}\n\t},\n\tthreeState_setter:function(value){\n\t\tif (value)\n\t\t\tthis._init_render_tree_state();\n\t\treturn value;\n\t},\n\t_setThirdState:function(id){\n\t\tvar i,leaves,parents,checkedParents,tree;\n\t\tparents = [];\n\t\ttree = this;\n\n\t\t/*if item was removed*/\n\t\tif(id&&!tree.data.pull[id]){\n\t\t\tid = 0;\n\t\t}\n\t\t/*sets checkbox states*/\n\t\t/*if branch or full reloading*/\n\t\tif(!id||tree.data.pull[id].$count){\n\t\t\tleaves = this._getAllLeaves(id);\n\t\t\tleaves.sort(function(a,b){\n\t\t\t\treturn tree.data.pull[b].$level - tree.data.pull[a].$level;\n\t\t\t});\n\t\t\tfor(i=0;i < leaves.length;i++){\n\t\t\t\tif(!i||tree.data.pull[leaves[i]].$parent!=tree.data.pull[leaves[i-1]].$parent)\n\t\t\t\t\tparents = parents.concat(tree._setParentThirdState(leaves[i]));\n\t\t\t}\n\t\t}\n\t\telse{\n\t\t\t/*an item is a leaf */\n\t\t\tparents = parents.concat(tree._setParentThirdState(id));\n\t\t}\n\n\t\tcheckedParents = {};\n\t\tfor(i=0;i<parents.length;i++){\n\t\t\tif(!checkedParents[parents[i]]){\n\t\t\t\tcheckedParents[parents[i]] = 1;\n\t\t\t\tthis._setCheckboxIndeterminate(parents[i]);\n\t\t\t}\n\t\t}\n\n\t\ttree = null;\n\t},\n\t_setCheckboxIndeterminate:function(id){\n\t\tvar chElem, elem;\n\t\telem = this.getItemNode(id);\n\t\tif(elem){\n\t\t\tthis.render(id,\"checkbox\",\"update\");\n\t\t\t/*needed to get the new input obj and to set indeterminate state*/\n\t\t\tif(this.getItem(id).indeterminate){\n\t\t\t\telem = this.getItemNode(id);\n\t\t\t\tchElem = elem.getElementsByTagName(\"input\")[0];\n\t\t\t\tif(chElem)\n\t\t\t\t\tchElem.indeterminate = this.getItem(id).indeterminate;\n\t\t\t}\n\t\t}\n\t},\n\t_setParentThirdState:function(itemId){\n\t\t//we need to use dynamic function creating\n\t\t//jshint -W083:true\n\n\t\tvar checked, checkedCount,indeterminate, parentId,result,unsureCount,needrender;\n\t\tparentId = this.getParentId(itemId);\n\t\tresult = [];\n\t\twhile(parentId && parentId != \"0\"){\n\t\t\tunsureCount = 0;\n\t\t\tcheckedCount = 0;\n\t\t\tthis.data.eachChild(parentId,function(obj){\n\t\t\t\tif(obj.indeterminate){\n\t\t\t\t\tunsureCount++;\n\t\t\t\t}\n\t\t\t\telse if(obj.checked){\n\t\t\t\t\tcheckedCount++;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tchecked = indeterminate = needrender = false;\n\t\t\t\n\t\t\tvar item = this.getItem(parentId);\n\t\t\tif(checkedCount==item.$count){\n\t\t\t\tchecked = true;\n\t\t\t}\n\t\t\telse if(checkedCount>0||unsureCount>0){\n\t\t\t\tindeterminate = true;\n\t\t\t}\n\t\t\t\n\t\t\t//we need to reset indeterminate in any case :(\n\t\t\tif (indeterminate || indeterminate != item.indeterminate)\n\t\t\t\tneedrender = true;\n\t\t\titem.indeterminate = indeterminate;\n\t\t\tif (checked || item.checked != checked)\n\t\t\t\tneedrender = true;\n\t\t\titem.checked = checked;\n\n\t\t\tif (needrender){\n\t\t\t\tresult.push(parentId);\n\t\t\t\tparentId = this.getParentId(parentId);\n\t\t\t} else\n\t\t\t\tparentId = 0;\n\t\t}\n\n\t\treturn result;\n\t},\n\t/*get all checked items in tree*/\n\tgetChecked:function(){\n\t\tvar result=[];\n\t\tvar tree = this;\n\t\tthis.data.eachSubItem(0,function(obj){\n\t\t\tif (tree.isChecked(obj.id))\n\t\t\t\tresult.push(obj.id);\n\t\t});\n\t\treturn result;\n\t},\n\t_tree_check_uncheck_3:function(id, mode){\n\t\tvar item = this.getItem(id);\n\t\tif(item){\n\t\t\tif (mode === \"\") \n\t\t\t\tmode = !item.checked;\n\t\t\tif(item.checked != mode || item.indeterminate){\n\t\t\t\titem.checked = mode;\n\t\t\t\tthis._correctThreeState(id);\n\t\t\t\tvar parents = this._setParentThirdState(id);\n\t\t\t\tif (this._branch_render_supported && parents.length < 5){\n\t\t\t\t\tfor (var i=0; i<parents.length; i++)\n\t\t\t\t\t\tthis._setCheckboxIndeterminate(parents[i]);\n\t\t\t\t} else\n\t\t\t\t\tthis.refresh();\n\t\t\t\tthis.callEvent(\"onItemCheck\", [id, mode]);\n\t\t\t}\n\t\t}\n\t},\n\t/*set checked state for item checkbox*/\n\tcheckItem:function(id){\n\t\tthis._tree_check_uncheck(id, true);\n\t\tthis.updateItem(id);\n\t},\n\t/*uncheckes an item checkbox*/\n\tuncheckItem:function(id){\n\t\tthis._tree_check_uncheck(id, false);\n\t\tthis.updateItem(id);\n\t},\n\t_checkUncheckAll: function(id,mode,all){\n\t\tvar method = mode?\"checkItem\":\"uncheckItem\";\n\t\tif(!id)\n\t\t\tid = 0;\n\t\telse\n\t\t\tthis[method](id);\n\t\tif(this._settings.threeState){\n\t\t\tif(!id)\n\t\t\t\tthis.data.eachChild(0,function(item){\n\t\t\t\t\tthis[method](item.id);\n\t\t\t\t},this,all);\n\t\t}\n\t\telse\n\t\t\tthis.data.each(function(item){\n\t\t\t\tthis[method](item.id);\n\t\t\t},this,all,id);\n\n\t},\n\t/*checkes checkboxes of all items in a branch/tree*/\n\tcheckAll: function(id, all){\n\t\tthis._checkUncheckAll(id,true,all);\n\n\t},\n\t/*uncheckes checkboxes of all items in a branch/tree*/\n\tuncheckAll: function(id, all){\n\t\tthis._checkUncheckAll(id,false,all);\n\t},\n\t_correctThreeState:function(id){\n\t\tvar state;\n\t\tvar item = this.getItem(id);\n\n\t\titem.indeterminate = false;\n\t\tstate = item.checked;\n\n\t\tthis.data.eachSubItem(id, function(child){\n\t\t\tchild.indeterminate = false;\n\t\t\tchild.checked = state;\n\t\t});\n\t\t\n\t\tif(this._branch_render_supported && this.isBranchOpen(item.$parent)){ //for tree-render only\n\t\t\tthis.render(id,0,\"branch\");\n\t\t}\n\t},\n\t/*returns checked state of item checkbox*/\n\tisChecked:function(id){\n\t\treturn this.getItem(id).checked;\n\t},\n\t/*gets all leaves in a certain branch (in the whole tree if id is not set)*/\n\t_getAllLeaves:function(parentId){\n\t\tvar result = [];\n\t\tthis.data.eachSubItem(parentId, function(obj, branch){\n\t\t\tif (!branch)\n\t\t\t\tresult.push(obj.id);\n\t\t});\n\t\treturn result;\n\t}\t\n};\n\nexport default TreeStateCheckbox;","import {bind, extend, _to_array, copy, clone, isArray, uid, _power_array} from \"../webix/helpers\";\nimport {assert} from \"../webix/debug\";\nimport DataStore from \"../core/datastore\";\nimport DataDriver from \"../load/drivers/index\";\n\n\n// #include core/datastore.js\n// #include core/bind.js\n// #include core/treemove.js\n\nconst TreeStore = {\n\tname:\"TreeStore\",\n\t$init:function() {\n\t\tthis._filterMode={\n\t\t\t//level:1,\n\t\t\tshowSubItems:true\n\t\t};\n\t\tthis.branch = { 0:[] };\n\t\tthis.attachEvent(\"onParse\", function(driver){\n\t\t\tthis._set_child_scheme(driver.child);\n\t\t});\n\t\tthis.attachEvent(\"onClearAll\", bind(function(){\n\t\t\tthis._filter_branch = null;\n\t\t},this));\n\t},\n\tfilterMode_setter:function(mode){\n\t\treturn extend(this._filterMode, mode, true);\n\t},\n\t_filter_reset:function(preserve){\n\t\t//remove previous filtering , if any\n\t\tif (this._filter_branch && !preserve){\n\t\t\tthis.branch = this._filter_branch;\n\t\t\tthis.order = _to_array(copy(this.branch[0]));\n\t\t\tfor (var key in this.branch)\n\t\t\t\tif (key != \"0\")\t//exclude 0 - virtual root\n\t\t\t\t\tthis.getItem(key).$count = this.branch[key].length;\n\t\t\tdelete this._filter_branch;\n\t\t}\n\t},\n\t_filter_core:function(filter, value, preserve, filterMode){\n\t\t//for tree we have few filtering options\n\t\t//- filter leafs only\n\t\t//- filter data on specific level\n\t\t//- filter data on all levels\n\t\t//- in all cases we can show or hide empty folder\n\t\t//- in all cases we can show or hide childs for matched item\n\t\t\n\t\t//set new order of items, store original\n\t\tif (!preserve ||  !this._filter_branch){\n\t\t\tthis._filter_branch = this.branch;\n\t\t\tthis.branch  = clone(this.branch);\n\t\t}\n\n\t\tthis.branch[0] = this._filter_branch_rec(filter, value, this.branch[0], 1, (filterMode||{}));\n\t},\n\t_filter_branch_rec:function(filter, value, branch, level, config){\n\t\t//jshint -W041\n\t\tvar neworder = [];\n\t\t\n\t\tvar allow = (config.level && config.level != level);\n\n\t\tfor (var i=0; i < branch.length; i++){\n\t\t\tvar id = branch[i];\n\t\t\tvar item = this.getItem(id);\n\t\t\tvar child_run = false;\n\t\t\tvar sub = this.branch[id];\n\n\t\t\tif (allow){\n\t\t\t\tchild_run = true;\n\t\t\t} else if (filter(this.getItem(id),value)){\n\t\t\t\tneworder.push(id);\n\t\t\t\t// open all parents of the found item\n\t\t\t\tif (config.openParents !== false){\n\t\t\t\t\tvar parentId = this.getParentId(id);\n\t\t\t\t\twhile(parentId && parentId != \"0\"){\n\t\t\t\t\t\tthis.getItem(parentId).open = 1;\n\t\t\t\t\t\tparentId = this.getParentId(parentId);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//in case of of fixed level filtering - do not change child-items\n\t\t\t\tif (config.level || config.showSubItems)\n\t\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\t//filtering level, not match\n\t\t\t\tchild_run = true;\n\t\t\t}\t\n\n\t\t\t//if \"filter by all levels\" - filter childs\n\t\t\tif (allow || !config.level){ \n\t\t\t\tif (sub){\n\t\t\t\t\tvar newsub = this.branch[id] = this._filter_branch_rec(filter, value, sub, level+1, config);\n\t\t\t\t\titem.$count = newsub.length;\n\t\t\t\t\tif (child_run && newsub.length)\n\t\t\t\t\t\tneworder.push(id);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn neworder;\n\t},\n\tcount:function(){\n\t\tif (this.order.length)\n\t\t\treturn this.order.length;\n\n\t\t//we must return some non-zero value, or logic of selection will think that we have not data at all\n\t\tvar count=0;\n\t\tthis.eachOpen(function(){ count++; });\n\t\treturn count;\n\t},\n\t_change_branch_id:function(branches, parent, old, newid){\n\t\tif (branches[old]){\n\t\t\tvar branch = branches[newid] = branches[old];\n\t\t\tfor (var i = 0; i < branch.length; i++)\n\t\t\t\tthis.getItem(branch[i]).$parent = newid;\n\t\t\tdelete branches[old];\n\t\t}\n\t\tif (branches[parent]){\n\t\t\tvar index = _power_array.find.call(branches[parent], old);\n\t\t\tif (index >= 0)\n\t\t\t\tbranches[parent][index] = newid;\n\t\t}\n\t},\n\tchangeId:function(old, newid){\n\t\tif(old == newid) return;\n\t\t\n\t\tvar parent = this.getItem(old).$parent;\n\t\tthis._change_branch_id(this.branch, parent, old, newid);\n\n\t\t//in case of filter applied, update id in filtered state as well\n\t\tif (this._filter_branch)\n\t\t\tthis._change_branch_id(this._filter_branch, parent, old, newid);\n\n\t\treturn DataStore.prototype.changeId.call(this, old, newid);\n\t},\n\tclearAll:function(soft){\n\t\tthis.branch = { 0:[] };\n\t\tDataStore.prototype.clearAll.call(this, soft);\t\n\t},\n\tgetPrevSiblingId:function(id){\n\t\tvar order = this.branch[this.getItem(id).$parent];\n\t\tvar pos = _power_array.find.call(order, id)-1;\n\t\tif (pos>=0)\n\t\t\treturn order[pos];\n\t\treturn null;\n\t},\n\tgetNextSiblingId:function(id){\n\t\tvar order = this.branch[this.getItem(id).$parent];\n\t\tvar pos = _power_array.find.call(order, id)+1;\n\t\tif (pos<order.length)\n\t\t\treturn order[pos];\n\t\treturn null;\n\t},\n\tgetParentId:function(id){\n\t\treturn this.getItem(id).$parent;\n\t},\n\tgetFirstChildId:function(id){\n\t\tvar order = this.branch[id];\n\t\tif (order && order.length)\n\t\t\treturn order[0];\n\t\treturn null;\n\t},\n\tisBranch:function(parent){\n\t\treturn !!this.branch[parent];\n\t},\n\tgetBranchIndex:function(child){\n\t\tvar t = this.branch[this.pull[child].$parent];\n\t\treturn _power_array.find.call(t, child);\n\t},\n\t_set_child_scheme:function(parse_name){\n\n\t\tif (typeof parse_name == \"string\")\n\t\t\tthis._datadriver_child = function(obj){\n\t\t\t\tvar t = obj[parse_name];\n\t\t\t\tif (t)\n\t\t\t\t\tdelete obj[parse_name];\n\t\t\t\treturn t;\n\t\t\t};\n\t\telse \n\t\t\tthis._datadriver_child = parse_name;\n\t},\n\t_inner_parse:function(info, recs){ \n\t\tvar parent  = info.parent || 0;\n\t\t\n\t\tfor (var i=0; i<recs.length; i++){\n\t\t\t//get hash of details for each record\n\t\t\tvar temp = this.driver.getDetails(recs[i]);\n\t\t\tvar id = this.id(temp); \t//generate ID for the record\n\t\t\tvar update = !!this.pull[id]; //update mode\n\n\t\t\tif (update){\n\t\t\t\ttemp = extend(this.pull[id], temp, true);\n\t\t\t\tif (this._scheme_update)\n\t\t\t\t\tthis._scheme_update(temp);\n\t\t\t} else {\n\t\t\t\tif (this._scheme_init)\n\t\t\t\t\tthis._scheme_init(temp);\n\t\t\t\tthis.pull[id]=temp;\n\t\t\t}\n\n\t\t\tthis._extraParser(temp, parent, 0, update, info.from ? info.from*1+i : 0);\n\t\t}\n\n\t\t//fix state of top item after data loading\n\t\tvar pItem = this.pull[parent] || {};\n\t\tvar pBranch = this.branch[parent] || [];\n\t\tpItem.$count = pBranch.length;\n\t\tdelete pItem.webix_kids;\n\n\t\tif (info.size && info.size != pBranch.length)\n\t\t\tpBranch[info.size-1] = undefined;\n\t},\n\t_extraParser:function(obj, parent, level, update, from){\n\t\t//processing top item\n\t\tobj.$count = 0;\n\t\t//using soft check, as parent can be a both 0 and \"0\" ( second one in case of loading from server side ) \n\t\tobj.$parent = parent!=\"0\"?parent:0;\n\t\tobj.$level = level||(parent!=\"0\"?this.pull[parent].$level+1:1);\n\t\t\n\t\tvar parent_branch = this.branch[obj.$parent];\n\t\tif (!parent_branch)\n\t\t\tparent_branch = this.branch[obj.$parent] = [];\n\t\tif (this._filter_branch)\n\t\t\tthis._filter_branch[obj.$parent] = parent_branch;\n\n\t\tif (!update){\n\t\t\tvar pos = from || parent_branch.length;\n\t\t\tparent_branch[pos] = obj.id;\n\t\t}\n\n\t\tvar child = this._datadriver_child(obj);\n\n\t\tif (obj.webix_kids){\n\t\t\treturn (obj.$count = -1);\n\t\t}\n\n\t\tif (!child) //ignore childless\n\t\t\treturn (obj.$count = 0);\t\n\n\t\t//when loading from xml we can have a single item instead of an array\n\t\tif (!isArray(child))\n\t\t\tchild = [child];\n\t\t\n\n\t\tfor (var i=0; i < child.length; i++) {\n\t\t\t//extra processing to convert strings to objects\n\t\t\tvar item = DataDriver.json.getDetails(child[i]);\n\t\t\tvar itemid = this.id(item);\n\t\t\tupdate = !!this.pull[itemid];\n\t\t\t\n\t\t\tif (update){\n\t\t\t\titem = extend(this.pull[itemid], item, true);\n\t\t\t\tif (this._scheme_update)\n\t\t\t\t\tthis._scheme_update(item);\n\t\t\t} else {\n\t\t\t\tif (this._scheme_init)\n\t\t\t\t\tthis._scheme_init(item);\n\t\t\t\tthis.pull[itemid]=item;\n\t\t\t}\n\t\t\tthis._extraParser(item, obj.id, obj.$level+1, update);\n\t\t}\n\n\t\t//processing childrens\n\t\tvar branch = this.branch[obj.id];\n\t\tif (branch)\n\t\t\tobj.$count = branch.length;\n\t}, \n\t_sync_to_order:function(master){\n\t\tthis.order = _to_array();\n\n\t\t// send current order to prevent simultaneous use in synс mode\n\t\tthis._sync_each_child(this.order, 0, master);\n\t},\n\t_sync_each_child:function(order, start, master){\n\t\tvar branch = this.branch[start];\n\t\tfor (var i=0; i<branch.length; i++){\n\t\t\tvar id = branch[i];\n\t\t\torder.push(id);\n\t\t\tvar item = this.pull[id];\n\t\t\tif (item && item.open){\n\t\t\t\tif (item.$count == -1)\n\t\t\t\t\tmaster.loadBranch(id);\n\t\t\t\telse if (item.$count)\n\t\t\t\t\tthis._sync_each_child(order, id, master);\n\t\t\t}\n\t\t}\n\t},\n\tprovideApi:function(target,eventable){\n\t\tvar list = [\"getPrevSiblingId\",\"getNextSiblingId\",\"getParentId\",\"getFirstChildId\",\"isBranch\",\"getBranchIndex\",\"filterMode_setter\"];\n\t\tfor (var i=0; i < list.length; i++)\n\t\t\ttarget[list[i]]=this._methodPush(this,list[i]);\n\n\t\tif (!target.getIndexById)\n\t\t\tDataStore.prototype.provideApi.call(this, target, eventable);\n\t},\n\tgetTopRange:function(){\n\t\treturn _to_array([].concat(this.branch[0])).map(function(id){\n\t\t\treturn this.getItem(id);\n\t\t}, this);\n\t},\n\teachChild:function(id, functor, master, all){\n\t\tvar branch = this.branch;\n\t\tif (all && this._filter_branch)\n\t\t\tbranch = this._filter_branch;\n\n\t\tvar stack = branch[id];\n\t\tif (stack)\n\t\t\tfor (var i=0; i<stack.length; i++){\n\t\t\t\tif(stack[i])\n\t\t\t\t\tfunctor.call((master||this), this.getItem(stack[i]));\n\t\t\t}\n\t},\n\teach:function(method,master, all, id){\n\t\tthis.eachChild((id||0), function(item){\n\t\t\tvar branch = this.branch;\n\n\t\t\tmethod.call((master||this), item);\n\n\t\t\tif (all && this._filter_branch)\n\t\t\t\tbranch = this._filter_branch;\n\n\t\t\tif (item && branch[item.id])\n\t\t\t\tthis.each(method, master, all, item.id);\n\t\t}, this, all);\n\t},\t\n\teachOpen:function(method,master, id){\n\t\tthis.eachChild((id||0), function(item){\n\t\t\tmethod.call((master||this), item);\n\t\t\tif (this.branch[item.id] && item.open)\n\t\t\t\tthis.eachOpen(method, master, item.id);\n\t\t});\n\t},\n\teachSubItem:function(id, functor){\n\t\tvar top = this.branch[id||0];\n\t\tif (top)\n\t\t\tfor (var i=0; i<top.length; i++){\n\t\t\t\tvar key = top[i];\n\t\t\t\tif (this.branch[key]){\n\t\t\t\t\tfunctor.call(this, this.getItem(key),true);\n\t\t\t\t\tthis.eachSubItem(key, functor);\n\t\t\t\t} else\n\t\t\t\t\tfunctor.call(this, this.getItem(key), false);\n\t\t\t}\n\t},\n\teachLeaf:function(id, functor){\n\t\tvar top = this.branch[id||0];\n\t\tif (top)\n\t\t\tfor (var i=0; i<top.length; i++){\n\t\t\t\tvar key = top[i];\n\t\t\t\tif (this.branch[key]){\n\t\t\t\t\tthis.eachLeaf(key, functor);\n\t\t\t\t} else\n\t\t\t\t\tfunctor.call(this, this.getItem(key), false);\n\t\t\t}\n\t},\n\t_sort_core:function(sort, order){\n\t\tvar sorter = this.sorting.create(sort);\n\t\tfor (var key in this.branch){\n\t\t\tvar bset =  this.branch[key];\n\t\t\tvar data = [];\n\n\t\t\tfor (let i=0; i<bset.length; i++)\n\t\t\t\tdata.push(this.pull[bset[i]]);\n\n\t\t\tdata.sort(sorter);\n\n\t\t\tfor (let i=0; i<bset.length; i++)\n\t\t\t\tdata[i] = data[i].id;\n\n\t\t\tthis.branch[key] = data;\n\t\t}\n\t\treturn order;\n\t},\n\tadd:function(obj, index, pid){\n\t\tvar refresh_parent = false;\n\n\t\tvar parent = this.getItem(pid||0);\n\t\tif(parent){\n\t\t\t//when adding items to leaf item - it need to be repainted\n\t\t\tif (!this.branch[parent.id])\n\t\t\t\trefresh_parent = true;\n\n\t\t\tparent.$count++;\n\t\t\t//fix for the adding into dynamic loading branch\n\t\t\t//dynamic branch has $count as -1\n\t\t\tif (!parent.$count) parent.$count = 1;\n\t\t}\n\n\t\tthis.branch[pid||0] = this.order = _to_array(this.branch[pid||0]);\n\n\t\tobj.$count = obj.webix_kids ? -1 : 0; \n\t\tobj.$level= (parent?parent.$level+1:1); \n\t\tobj.$parent = (parent?parent.id:0);\n\n\t\tif (this._filter_branch){\t//adding during filtering\n\t\t\tvar origin = this._filter_branch[pid||0];\n\t\t\t//newly created branch\n\t\t\tif (!origin) origin = this._filter_branch[pid] = this.order;\n\n\t\t\t//branch can be shared bettwen collections, ignore such cases\n\t\t\tif (this.order !== origin){\n\t\t\t\t//we can't know the location of new item in full dataset, making suggestion\n\t\t\t\t//put at end by default\n\t\t\t\tvar original_index = origin.length;\n\t\t\t\t//put at start only if adding to the start and some data exists\n\t\t\t\tif (!index && this.branch[pid||0].length)\n\t\t\t\t\toriginal_index = 0;\n\n\t\t\t\torigin = _to_array(origin);\n\t\t\t\tobj.id = obj.id || uid();\n\t\t\t\torigin.insertAt(obj.id,original_index);\n\t\t\t}\n\t\t}\n\n\t\t//call original adding logic\n\t\tvar result = DataStore.prototype.add.call(this, obj, index);\n\n\n\t\tif (refresh_parent)\n\t\t\tthis.refresh(pid);\n\n\t\treturn result;\n\t},\n\t_rec_remove:function(id){\n\t\tvar obj = this.pull[id];\n\t\tif(this.branch[obj.id] && this.branch[obj.id].length > 0){\n\t\t\tvar branch = this.branch[id];\n\t\t\tfor(var i=0;i<branch.length;i++)\n\t\t\t\tthis._rec_remove(branch[i], true);\n\t\t}\n\t\tdelete this.branch[id];\n\t\tif(this._filter_branch)\n\t\t\tdelete this._filter_branch[id];\n\t\tdelete this.pull[id];\n\t\tif (this._marks[id])\n\t\t\tdelete this._marks[id];\n\t},\n\t_filter_removed:function(pull, parentId, id){\n\t\tvar branch = pull[parentId];\n\t\tif (branch.length == 1 && branch[0] == id && parentId){\n\t\t\tdelete pull[parentId];\n\t\t} else\n\t\t\t_to_array(branch).remove(id);\n\t},\n\tremove:function(id){\n\t\t//id can be an array of IDs - result of getSelect, for example\n\t\tif (isArray(id)){\n\t\t\tfor (var i=0; i < id.length; i++)\n\t\t\t\tthis.remove(id[i]);\n\t\t\treturn;\n\t\t}\n\n\t\tassert(this.exists(id), \"Not existing ID in remove command\"+id);\n\t\tvar obj = this.pull[id];\n\t\tvar parentId = (obj.$parent||0);\n\n\t\tif (this.callEvent(\"onBeforeDelete\",[id]) === false) return false;\n\t\tthis._rec_remove(id);\n\t\tthis.callEvent(\"onAfterDelete\",[id]);\n\n\t\tvar parent = this.pull[parentId];\n\t\tthis._filter_removed(this.branch, parentId, id);\n\t\tif (this._filter_branch)\n\t\t\tthis._filter_removed(this._filter_branch, parentId, id);\n\n\t\tvar refresh_parent = 0;\n\t\tif (parent){\n\t\t\tparent.$count--;\n\t\t\tif (parent.$count<=0){\n\t\t\t\tparent.$count=0;\n\t\t\t\tparent.open = 0;\n\t\t\t\trefresh_parent = 1;\n\t\t\t}\n\t\t}\n\n\t\t//repaint signal\n\t\tthis.callEvent(\"onStoreUpdated\",[id,obj,\"delete\"]);\n\t\tif (refresh_parent)\n\t\t\tthis.refresh(parent.id);\n\t},\n\t/*\n\t\tserializes data to a json object\n\t*/\n\tgetBranch:function(id){\n\t\tvar out = [];\n\t\tvar items = (this._filter_branch || this.branch)[id];\n\t\tif (items)\n\t\t\tfor (var i = 0; i < items.length; i++) out[i] = this.pull[items[i]];\n\n\t\treturn out;\n\t},\n\tserialize: function(id, all){\n\t\tvar coll = this.branch;\n\t\t//use original collection of branches\n\t\tif (all && this._filter_branch) coll = this._filter_branch;\n\n\t\tvar ids = coll[id||0];\n\t\tvar result = [];\n\t\tfor(var i=0; i< ids.length;i++) {\n\t\t\tvar obj = this.pull[ids[i]];\n\t\t\tvar rel;\n\n\t\t\tif (this._scheme_serialize){\n\t\t\t\trel = this._scheme_serialize(obj);\n\t\t\t\tif (rel===false) continue;\n\t\t\t} else \n\t\t\t\trel = copy(obj);\n\t\t\t\t\n\t\t\tif (coll[obj.id])\n\t\t\t\trel.data = this.serialize(obj.id, all);\n\n\t\t\tresult.push(rel);\n\t\t}\n\t\treturn result;\n\t}\n};\n\nexport default TreeStore;","import {isUndefined, uid} from \"../webix/helpers\";\n\n\nconst TreeTablePaste = {\n\tinsert: function(data) {\n\t\tvar parent = this.getSelectedId(true, true);\n\t\tfor (var i = 0; i < data.length; i++) {\n\t\t\tvar item = {};\n\t\t\tfor (var j = 0; j < this._settings.columns.length; j++) {\n\t\t\t\titem[this._settings.columns[j].id] = data[i][j] || \"\";\n\t\t\t}\n\t\t\tif (!isUndefined(item.id) && this.exists(item.id))\n\t\t\t\titem.id = uid();\n\t\t\tthis.add(item, null, parent[0]);\n\t\t}\n\t}\n};\n\nexport default TreeTablePaste;","\n\nconst TreeType ={\n\tspace:function(obj){\n\t\tvar html = \"\";\n\t\tfor (var i=1; i<obj.$level; i++)\n\t\t\thtml += \"<div class='webix_tree_none'></div>\";\n\t\treturn html;\n\t},\n\ticon:function(obj){\n\t\tif (obj.$count){\n\t\t\tif (obj.open)\n\t\t\t\treturn \"<div class='webix_tree_open'></div>\";\n\t\t\telse\n\t\t\t\treturn \"<div class='webix_tree_close'></div>\";\n\t\t} else\n\t\t\treturn \"<div class='webix_tree_none'></div>\";\n\t},\n\tcheckbox:function(obj){\n\t\tif(obj.nocheckbox)\n\t\t\treturn \"\";\n\t\treturn \"<input type='checkbox' class='webix_tree_checkbox' \"+(obj.checked?\"checked\":\"\")+(obj.disabled?\" disabled\":\"\")+\">\";\n\t},\t\n\tfolder:function(obj){\n\t\tif (obj.icon)\n\t\t\treturn \"<div class='webix_tree_file webix_tree_\"+obj.icon+\"'></div>\";\n\n\t\tif (obj.$count){\n\t\t\tif (obj.open)\n\t\t\t\treturn \"<div class='webix_tree_folder_open'></div>\";\n\t\t\telse\n\t\t\t\treturn \"<div class='webix_tree_folder'></div>\";\n\t\t}\n\t\treturn \"<div class='webix_tree_file'></div>\";\n\t}\n};\n\nexport default TreeType;","import {create, preventEvent} from \"../webix/html\";\nimport {bind, extend} from \"../webix/helpers\";\nimport {_event} from \"../webix/htmlevents\";\nimport {assert} from \"../webix/debug\";\nimport {callEvent} from \"../webix/customevents\";\n\nimport env from \"../webix/env\";\nimport DataDriver from \"../load/drivers/index\";\n\n\nconst UploadDriver = {\n\t$render: function() {\n\t\tif (this._upload_area){\n\t\t\t//firstChild is webix_el_box container, which have relative position\n\t\t\t//as result, file control is placed under the button and not in the top corner\n\t\t\tthis._contentobj.firstChild.appendChild(this._upload_area);\n\t\t\treturn;\n\t\t}\n\t\tthis.files.attachEvent(\"onBeforeDelete\", this._stop_file);\n\n\t\tvar input_config =  {\n\t\t\t\"type\": \"file\",\n\t\t\t\"class\": \"webix_hidden_upload\",\n\t\t\ttabindex:-1\n\t\t};\n\n\t\tif (this._settings.accept)\n\t\t\tinput_config.accept = this._settings.accept;\n\n\t\tif (this._settings.multiple)\n\t\t\tinput_config.multiple = \"true\";\n\n\t\tif (this._settings.directory) {\n\t\t\tinput_config.webkitdirectory = \"true\";\n\t\t\tinput_config.mozdirectory = \"true\";\n\t\t\tinput_config.directory = \"true\";\n\t\t}\n\n\t\tvar f = create(\"input\", input_config);\n\t\tthis._upload_area = this._contentobj.firstChild.appendChild(f);\n\n\t\t_event(this._viewobj, \"drop\", bind(function(e) {\n\t\t\tthis._drop(e);\n\t\t\tpreventEvent(e);\n\t\t}, this));\n\t\t_event(f, \"change\", bind(function() {\n\t\t\tthis._add_files(f.files);\n\n\t\t\tif (env.isIE) {\n\t\t\t\tvar t = document.createElement(\"form\");\n\t\t\t\tt.appendChild(this._upload_area);\n\t\t\t\tt.reset();\n\t\t\t\tthis._contentobj.firstChild.appendChild(f);\n\t\t\t} else\n\t\t\t\tf.value = \"\";\n\t\t}, this));\n\t\t_event(this._viewobj, \"click\", bind(function() {\n\t\t\tvar now_date = new Date();\n\t\t\tif (now_date - (this._upload_timer_click || 0) > 250) {\n\t\t\t\tthis.fileDialog();\n\t\t\t}\n\t\t}, this));\n\n\t\t_event(this._viewobj, \"dragenter\", preventEvent);\n\t\t_event(this._viewobj, \"dragexit\", preventEvent);\n\t\t_event(this._viewobj, \"dragover\", preventEvent);\n\t},\n\t_directoryEntry: function(value) {\n\t\treturn value.isDirectory;\n\t},\n\t_directoryDrop: function(item, state, path) {\n\t\tif (item.isFile){\n\t\t\titem.file(function(file){\n\t\t\t\tstate.addFile(file, null, null, { name : path+\"/\"+file.name });\n\t\t\t});\n\t\t} else if (item.isDirectory) {\n\t\t\t// Get folder contents\n\t\t\tvar dirReader = item.createReader();\n\t\t\tdirReader.readEntries(function(entries){\n\t\t\t\tfor (var i = 0; i < entries.length; i++){\n\t\t\t\t\tstate._directoryDrop(entries[i], state, (path ? (path + \"/\") : \"\") + item.name);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\t// adding files by drag-n-drop\n\t$drop: function(e) {\n\t\tvar files = e.dataTransfer.files;\n\t\tvar items = e.dataTransfer.items;\n\n\t\tif (this.callEvent(\"onBeforeFileDrop\", [files, e])) {\n\t\t\titems = items || files; //IE10+\n\t\t\tfor (var i = 0; i < items.length; i++) {\n\t\t\t\t//https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry\n\t\t\t\tvar item = items[i];\n\t\t\t\tif (item.webkitGetAsEntry){\n\t\t\t\t\titem = item.webkitGetAsEntry();\n\t\t\t\t\tif (item.isDirectory){\n\t\t\t\t\t\tthis._directoryDrop(item, this, \"\");\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.addFile(files[i]);\n\t\t\t}\n\t\t}\n\t\tthis.callEvent(\"onAfterFileDrop\", [files, e]);\n\t},\n\tfileDialog:function(context){\n\t\tthis._upload_timer_click = new Date();\n\t\tthis._last_file_context = context;\n\t\tvar inputs = this._viewobj.getElementsByTagName(\"INPUT\");\n\t\tinputs[inputs.length-1].click();\n\t},\n\tsend: function(id){\n\t\t//alternative syntx send(callback)\n\t\tif (typeof id == \"function\"){\n\t\t\tthis._last_assigned_upload_callback = id;\n\t\t\tid = 0;\n\t\t}\n\n\t\tif (!id){\n\t\t\tvar order = this.files.data.order;\n\t\t\tvar complete = true;\n\n\t\t\tif (order.length)\n\t\t\t\tfor (var i=0; i<order.length; i++)\n\t\t\t\t\tcomplete = (!this.send(order[i])) && complete;\n\n\t\t\tif (complete)\n\t\t\t\tthis._upload_complete();\n\n\t\t\treturn;\n\t\t}\n\n\t\tvar item = this.files.getItem(id);\n\t\tif (item.status !== \"client\") return false;\n\n\t\tassert(this._settings.upload, \"You need to define upload url for uploader component\");\n\t\titem.status = \"transfer\";\n\n\t\tvar formData = new FormData();\n\n\t\tformData.append(this.config.inputName, item.file, item.name);\n\t\tformData.append(this.config.inputName+\"_fullpath\", item.name);\n\n\t\tvar headers = {};\n\t\tvar globalData = this._settings.formData || {};\n\t\tif (typeof globalData === \"function\")\n\t\t\tglobalData = globalData.call(this);\n\t\tvar details = extend(item.formData||{} , globalData);\n\n\t\tvar xhr = new XMLHttpRequest();\n\t\tvar url = this._get_active_url(item);\n\t\tif(callEvent(\"onBeforeAjax\",[\"POST\", url, details, xhr, headers, formData])){\n\t\t\tfor (let key in details)\n\t\t\t\tformData.append(key, details[key]);\n\n\t\t\titem.xhr = xhr;\n\n\t\t\txhr.upload.addEventListener(\"progress\", bind(function(e){ this.$updateProgress(id, e.loaded/e.total*100); }, this), false);\n\t\t\txhr.onload = bind(function(){ if (!xhr.aborted) this._file_complete(id); }, this);\n\t\t\txhr.open(\"POST\", url, true);\n\n\t\t\tfor (let key in headers)\n\t\t\t\txhr.setRequestHeader(key, headers[key]);\n\n\t\t\txhr.send(formData);\n\t\t}\n\n\t\tthis.$updateProgress(id, 0);\n\t\treturn true;\n\t},\n\n\t\n\t_file_complete: function(id) {\n\t\tvar item = this.files.getItem(id);\n\t\tif (item){\n\t\t\tvar response = null;\n\t\t\tif(item.xhr.status < 400){\n\t\t\t\tvar driver = DataDriver[this._settings.datatype||\"json\"];\n\t\t\t\tresponse = driver.toObject(item.xhr.responseText);\n\t\t\t\tif (response)\n\t\t\t\t\tresponse = driver.getDetails(response);\n\t\t\t}\n\t\t\tif (!response || response.status == \"error\"){\n\t\t\t\t// file upload error\n\t\t\t\titem.status = \"error\";\n\t\t\t\tdelete item.percent;\n\t\t\t\tthis.files.updateItem(id);\n\t\t\t\tthis.callEvent(\"onFileUploadError\", [item, response]);\n\t\t\t} else {\n\t\t\t\t// file upload complete\n\t\t\t\tassert(\n\t\t\t\t\t(!response.status || response.status == \"server\"),\n\t\t\t\t\t\"Not supported status value, use 'error' or 'server'\"\n\t\t\t\t);\n\t\t\t\tthis._complete(id, response);\n\t\t\t}\n\t\t\tdelete item.xhr;\n\t\t}\n\t},\n\tstopUpload: function(id){\n\t\tbind(this._stop_file,this.files)(id);\n\t},\n\t_stop_file: function(id) {\n\t\tvar item = this.getItem(id);\n\t\tif (typeof(item.xhr) !== \"undefined\"){\n\t\t\titem.xhr.aborted = true;\n\t\t\titem.xhr.abort();\n\t\t\tdelete item.xhr;\n\t\t\titem.status = \"client\";\n\t\t}\n\t}\n\n};\n\nexport default UploadDriver;","import {bind} from \"../webix/helpers\";\nimport ValidateData from \"./validatedata\";\nimport rules from \"../webix/rules\";\n\nconst ValidateCollection = {\n\t_validate_init_once:function(){\n\t\tthis.data.attachEvent(\"onStoreUpdated\",bind(function(id, data, mode){\n\t\t\tif (id && (mode == \"add\" || mode == \"update\"))\n\t\t\t\tthis.validate(id);\n\t\t}, this));\n\t\tthis.data.attachEvent(\"onClearAll\",bind(this.clearValidation, this));\n\n\t\tthis._validate_init_once = function(){};\n\t},\n\trules_setter:function(value){\n\t\tif (value){\n\t\t\tthis._validate_init_once();\n\t\t}\n\t\treturn value;\n\t},\n\tclearValidation:function(){\n\t\tthis.data.clearMark(\"webix_invalid\", true);\n\t},\n\tvalidate:function(id){\n\t\tvar result = true;\n\t\tif (!id)\n\t\t\tfor (var key in this.data.pull)\n\t\t\t\tresult = this.validate(key) && result;\n\t\telse {\n\t\t\tthis._validate_details = {};\n\t\t\tvar obj = this.getItem(id);\n\t\t\tresult = ValidateData.validate.call(this, null, obj);\n\t\t\tif (result){\n\t\t\t\tif (this.callEvent(\"onValidationSuccess\",[id, obj]))\n\t\t\t\t\tthis._clear_invalid(id);\n\t\t\t} else {\n\t\t\t\tif (this.callEvent(\"onValidationError\",[id, obj, this._validate_details]))\n\t\t\t\t\tthis._mark_invalid(id, this._validate_details);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t},\n\t_validate:function(rule, data, obj, key){\n\t\tif (typeof rule == \"string\")\n\t\t\trule = rules[rule];\n\n\t\tvar res = rule.call(this, data, obj, key);\n\t\tif (!res){\n\t\t\tthis._validate_details[key] = true;\n\t\t}\n\t\treturn res;\n\t},\n\t_clear_invalid:function(id){\n\t\tthis.data.removeMark(id, \"webix_invalid\", true);\n\t},\n\t_mark_invalid:function(id){\n\t\tthis.data.addMark(id, \"webix_invalid\", true);\n\t}\n};\n\nexport default ValidateCollection;","import {addCss, removeCss} from \"../webix/html\";\nimport {isUndefined, copy} from \"../webix/helpers\";\nimport {assert} from \"../webix/debug\";\n\nimport CodeParser from \"../core/codeparser\";\n\n\n// #include core/parsing.js\n\nconst Values = {\n\t$init:function(){\n\t\tthis.elements = {};\n\t},\n\tfocus:function(name){\n\t\tif (name){\n\t\t\tassert(this.elements[name],\"unknown input name: \"+name);\n\t\t\tthis._focus(this.elements[name]);\n\t\t} else{\n\t\t\tfor(var n in this.elements){\n\t\t\t\tif(this._focus(this.elements[n]) !== false)\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\t_focus: function(target){\n\t\tif (target && target.focus){\n\t\t\treturn target.focus();\n\t\t}\n\t\treturn false;\n\t},\n\tsetValues:function(data, update){\n\t\tif (this._settings.complexData)\n\t\t\tdata = CodeParser.collapseNames(data, \"\", {}, (v) => !this.elements[v]);\n\t\tthis._inner_setValues(data, update);\n\t},\n\t_inner_setValues:function(data, update){\n\t\tthis._is_form_dirty = update;\n\t\t//prevent onChange calls from separate controls\n\t\tthis.blockEvent();\n\n\t\tif (!update || !this._values)\n\t\t\tthis._values = {};\n\n\t\tfor (let name in data)\n\t\t\tif (!this.elements[name])\n\t\t\t\tthis._values[name] = data[name];\n\n\t\tfor (let name in this.elements){\n\t\t\tvar input = this.elements[name];\n\t\t\tif (input){\n\t\t\t\tif (!isUndefined(data[name]))\n\t\t\t\t\tinput.setValue(data[name]);\n\t\t\t\telse if (!update && input.$allowsClear)\n\t\t\t\t\tinput.setValue(\"\");\n\t\t\t\tthis._values[name] = input.getValue();\n\t\t\t}\n\t\t}\n\n\t\tthis.unblockEvent();\n\t\tthis.callEvent(\"onValues\",[]);\n\t},\n\tisDirty:function(){\n\t\tif (this._is_form_dirty) return true;\n\t\tif (this.getDirtyValues(1) === 1)\n\t\t\treturn true;\n\n\t\treturn false;\n\t},\n\tsetDirty:function(flag){\n\t\tthis._is_form_dirty = flag;\n\t\tif (!flag)\n\t\t\tthis._values = this._inner_getValues();\n\t},\n\tgetDirtyValues:function(){\n\t\tvar result = {};\n\t\tif (this._values){\n\t\t\tfor (var name in this.elements){\n\t\t\t\tvar value = this.elements[name].getValue();\n\t\t\t\tif (this._values[name] != value){\n\t\t\t\t\tresult[name] = value;\n\t\t\t\t\t//FIXME - used by isDirty\n\t\t\t\t\tif (arguments[0])\n\t\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t},\n\tgetCleanValues:function(){\n\t\treturn this._values;\n\t},\n\tgetValues:function(filter){\n\t\tvar data = this._inner_getValues(filter);\n\t\tif (this._settings.complexData)\n\t\t\tdata = CodeParser.expandNames(data);\n\n\t\treturn data;\n\t},\n\t_inner_getValues:function(filter){\n\t\t//get original data\t\t\n\t\tvar success,\n\t\t\telem = null,\n\t\t\tdata = (this._values?copy(this._values):{});\n\n\t\t//update properties from linked controls\n\t\tfor (var name in this.elements){\n\t\t\telem = this.elements[name];\n\t\t\tsuccess = true;\n\t\t\tif(filter){\n\t\t\t\tif(typeof filter == \"object\"){\n\t\t\t\t\tif(filter.hidden === false)\n\t\t\t\t\t\tsuccess = elem.isVisible();\n\t\t\t\t\tif(success && filter.disabled === false)\n\t\t\t\t\t\tsuccess = elem.isEnabled();\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tsuccess = filter.call(this,elem);\n\t\t\t}\n\t\t\tif(success)\n\t\t\t\tdata[name] = elem.getValue();\n\t\t\telse\n\t\t\t\tdelete data[name]; //in case of this._values[name]\n\t\t}\n\t\treturn data;\n\t},\n\tclear:function(){\n\t\tthis._is_form_dirty = false;\n\t\tvar data = {};\n\t\tfor (var name in this.elements)\n\t\t\tif (this.elements[name].$allowsClear)\n\t\t\t\tdata[name] = \"\";\n\t\t\n\t\tthis._inner_setValues(data);\n\t},\n\tmarkInvalid: function(name, state){\n\t\t// remove 'invalid' mark\n\t\tif(state === false){\n\t\t\tthis._clear_invalid(name);\n\t\t}\n\t\t// add 'invalid' mark\n\t\telse{\n\t\t\t// set invalidMessage\n\t\t\tif(typeof state == \"string\"){\n\t\t\t\tvar input = this.elements[name];\n\t\t\t\tif(input)\n\t\t\t\t\tinput._settings.invalidMessage = state;\n\t\t\t}\n\t\t\t//add mark to current validation process\n\t\t\tif (this._validate_details)\n\t\t\t\tthis._validate_details[name] = true;\n\n\t\t\tthis._mark_invalid(name);\n\t\t}\n\t},\n\t_mark_invalid:function(id){\n\t\tvar input = this.elements[id];\n\t\tif (id && input){\n\t\t\tthis._clear_invalid(id,true);\n\t\t\taddCss(input._viewobj, \"webix_invalid\");\n\t\t\tinput._settings.invalid = true;\n\t\t\tvar message = input._settings.invalidMessage;\n\t\t\tif(typeof message === \"string\" && input.setBottomText)\n\t\t\t\tinput.setBottomText();\n\t\t}\n\t},\n\t_clear_invalid:function(id,silent){\n\t\tvar input = this.elements[id];\n\t\tif(id && input && input.$view && input._settings.invalid){\n\t\t\tremoveCss(input._viewobj, \"webix_invalid\");\n\t\t\tinput._settings.invalid = false;\n\t\t\tvar message = input._settings.invalidMessage;\n\t\t\tif(typeof message === \"string\" && !silent && input.setBottomText)\n\t\t\t\tinput.setBottomText();\n\t\t}\n\t}\n};\n\n\nexport default Values;","import {insertBefore, remove} from \"../webix/html\";\nimport env from \"../webix/env\";\nimport {bind} from \"../webix/helpers\";\nimport {_event} from \"../webix/htmlevents\";\nimport {assert} from \"../webix/debug\";\n\n\n/*\n\tRenders collection of items\n\tAlways shows y-scroll\n\tCan be used with huge datasets\n\t\n\t@export\n\t\tshow\n\t\trender\n*/\n\nconst VirtualRenderStack ={\n\t$init:function(){\n\t\tassert(this.render,\"VirtualRenderStack :: Object must use RenderStack first\");\n\t\t\n\t\tthis._htmlmap={}; //init map of rendered elements\n        \n\t\t//we need to repaint area each time when view resized or scrolling state is changed\n\t\t_event(this._viewobj,\"scroll\",bind(this._render_visible_rows,this));\n\t\tif(env.touch){\n\t\t\tthis.attachEvent(\"onAfterScroll\", bind(this._render_visible_rows,this));\n\t\t}\n\t\t//here we store IDs of elemenst which doesn't loadede yet, but need to be rendered\n\t\tthis._unrendered_area=[];\n\t},\n\t//return html object by item's ID. Can return null for not-rendering element\n\tgetItemNode:function(search_id){\n\t\t//collection was filled in _render_visible_rows\n\t\treturn this._htmlmap[search_id];\n\t},\n\t//adjust scrolls to make item visible\n\tshowItem:function(id){\n\t\tvar range = this._getVisibleRange();\n\t\tvar ind = this.data.getIndexById(id);\n\t\t//we can't use DOM method for not-rendered-yet items, so fallback to pure math\n\t\tvar dy = Math.floor(ind/range._dx)*range._y;\n\t\tvar state = this.getScrollState();\n\t\tif (dy<state.y || dy + this._settings.height >= state.y + this._content_height)\n\t\t\tthis.scrollTo(0, dy);\n\t},\n\t//repain self after changes in DOM\n\t//for add, delete, move operations - render is delayed, to minify performance impact\n\trender:function(id,data,type){\n\t\tif (!this.isVisible(this._settings.id) || this.$blockRender)\n\t\t\treturn;\n\t\t\n\t\tif (id){\n\t\t\tvar cont = this.getItemNode(id);\t//old html element\n\t\t\tswitch(type){\n\t\t\t\tcase \"update\":\n\t\t\t\t\tif (!cont) return;\n\t\t\t\t\t//replace old with new\n\t\t\t\t\tvar t = this._htmlmap[id] = this._toHTMLObject(data);\n\t\t\t\t\tinsertBefore(t, cont); \n\t\t\t\t\tremove(cont);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: // \"move\", \"add\", \"delete\"\n\t\t\t\t\t/*\n\t\t\t\t\t\tfor all above operations, full repainting is necessary\n\t\t\t\t\t\tbut from practical point of view, we need only one repainting per thread\n\t\t\t\t\t\tcode below initiates double-thread-rendering trick\n\t\t\t\t\t*/\n\t\t\t\t\tthis._render_delayed();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\t//full repainting\n\t\t\tif (this.callEvent(\"onBeforeRender\",[this.data])){\n\t\t\t\tthis._htmlmap = {}; \t\t\t\t\t//nulify links to already rendered elements\n\t\t\t\tthis._render_visible_rows(null, true);\t\n\t\t\t\t// clear delayed-rendering, because we already have repaint view\n\t\t\t\tthis._wait_for_render = false;\t\t\t\n\t\t\t\tthis.callEvent(\"onAfterRender\",[]);\n\t\t\t}\n\t\t}\n\t},\n\t//implement double-thread-rendering pattern\n\t_render_delayed:function(){\n\t\t//this flag can be reset from outside, to prevent actual rendering \n\t\tif (this._wait_for_render) return;\n\t\tthis._wait_for_render = true;\t\n\t\t\n\t\twindow.setTimeout(bind(function(){\n\t\t\tthis.render();\n\t\t},this),1);\n\t},\n\t//create empty placeholders, which will take space before rendering\n\t_create_placeholder:function(height){\n\t\tif(env.maxHTMLElementSize)\n\t\t\theight = Math.min(env.maxHTMLElementSize, height);\n\t\tvar node = document.createElement(\"DIV\");\n\t\tnode.style.cssText = \"height:\"+height+\"px; width:100%; overflow:hidden;\";\n\t\treturn node;\n\t},\n\t/*\n\t\tMethods get coordinatest of visible area and checks that all related items are rendered\n\t\tIf, during rendering, some not-loaded items was detected - extra data loading is initiated.\n\t\treset - flag, which forces clearing of previously rendered elements\n\t*/\n\t_render_visible_rows:function(e,reset){\n\t\tthis._unrendered_area=[]; //clear results of previous calls\n\t\t\n\t\tvar viewport = this._getVisibleRange();\t//details of visible view\n\n\t\tif (!this._dataobj.firstChild || reset){\t//create initial placeholder - for all view space\n\t\t\tthis._dataobj.innerHTML=\"\";\n\t\t\tthis._dataobj.appendChild(this._create_placeholder(viewport._max));\n\t\t\t//register placeholder in collection\n\t\t\tthis._htmlrows = [this._dataobj.firstChild];\n\t\t}\n\t\t\n\t\t/*\n\t\t\tvirtual rendering breaks all view on rows, because we know widht of item\n\t\t\twe can calculate how much items can be placed on single row, and knowledge \n\t\t\tof that, allows to calculate count of such rows\n\t\t\t\n\t\t\teach time after scrolling, code iterate through visible rows and render items \n\t\t\tin them, if they are not rendered yet\n\t\t\t\n\t\t\tboth rendered rows and placeholders are registered in _htmlrows collection\n\t\t*/\n\n\t\t//position of first visible row\n\t\tvar t = viewport._from;\n\t\t\t\n\t\twhile(t<=viewport._height){\t//loop for all visible rows\n\t\t\t//skip already rendered rows\n\t\t\twhile(this._htmlrows[t] && this._htmlrows[t]._filled && t<=viewport._height){\n\t\t\t\tt++; \n\t\t\t}\n\t\t\t//go out if all is rendered\n\t\t\tif (t>viewport._height) break;\n\t\t\t\n\t\t\t//locate nearest placeholder\n\t\t\tvar holder = t;\n\t\t\twhile (!this._htmlrows[holder]) holder--;\n\t\t\tvar holder_row = this._htmlrows[holder];\n\t\t\t\n\t\t\t//render elements in the row\t\t\t\n\t\t\tvar base = t*viewport._dx+(this.data.$min||0);\t//index of rendered item\n\t\t\tif (base > (this.data.$max||Infinity)) break;\t//check that row is in virtual bounds, defined by paging\n\t\t\tvar nextpoint =  Math.min(base+viewport._dx-1,(this.data.$max?this.data.$max-1:Infinity));\n\t\t\tvar node = this._create_placeholder(viewport._y);\n\t\t\t//all items in rendered row\n\t\t\tvar range = this.data.getIndexRange(base, nextpoint);\n\t\t\tif (!range.length) break; \n\t\t\t\n\t\t\tvar loading = { $template:\"Loading\" };\n\t\t\tfor (let i=0; i<range.length; i++){\n\t\t\t\tif (!range[i])\n\t\t\t\t\tthis._unrendered_area.push(base+i);\n\t\t\t\trange[i] = this._toHTML(range[i]||loading);\n\t\t\t}\n\n\t\t\tnode.innerHTML=range.join(\"\"); \t//actual rendering\n\t\t\tfor (let i=0; i < range.length; i++)\t\t\t\t\t//register all new elements for later usage in getItemNode\n\t\t\t\tthis._htmlmap[this.data.getIdByIndex(base+i)]=node.childNodes[i];\n\t\t\t\n\t\t\t//correct placeholders\n\t\t\tvar h = parseFloat(holder_row.style.height,10);\n\t\t\tvar delta = (t-holder)*viewport._y;\n\t\t\tvar delta2 = (h-delta-viewport._y);\n\t\t\t\n\t\t\t//add new row to the DOOM\n\t\t\tinsertBefore(node,delta?holder_row.nextSibling:holder_row,this._dataobj);\n\t\t\tthis._htmlrows[t]=node;\n\t\t\tnode._filled = true;\n\t\t\t\n\t\t\t/*\n\t\t\t\tif new row is at start of placeholder - decrease placeholder's height\n\t\t\t\telse if new row takes whole placeholder - remove placeholder from DOM\n\t\t\t\telse \n\t\t\t\t\twe are inserting row in the middle of existing placeholder\n\t\t\t\t\tdecrease height of existing one, and add one more, \n\t\t\t\t\tbefore the newly added row\n\t\t\t*/\n\t\t\tif (delta <= 0 && delta2>0){\n\t\t\t\tholder_row.style.height = delta2+\"px\";\n\t\t\t\tthis._htmlrows[t+1] = holder_row;\n\t\t\t} else {\n\t\t\t\tif (delta<0)\n\t\t\t\t\tremove(holder_row);\n\t\t\t\telse\n\t\t\t\t\tholder_row.style.height = delta+\"px\";\n\t\t\t\tif (delta2>0){ \n\t\t\t\t\tvar new_space = this._htmlrows[t+1] = this._create_placeholder(delta2);\n\t\t\t\t\tinsertBefore(new_space,node.nextSibling,this._dataobj);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\t\n\t\t\tt++;\n\t\t}\n\t\t\n\t\t//when all done, check for non-loaded items\n\t\tif (this._unrendered_area.length){\n\t\t\t//we have some data to load\n\t\t\t//detect borders\n\t\t\tvar from = this._unrendered_area[0];\n\t\t\tvar to = this._unrendered_area.pop()+1;\n\t\t\tif (to>from){\n\t\t\t\t//initiate data loading\n\t\t\t\tvar count = to - from;\n\t\t\t\tif (this._maybe_loading_already(count, from)) return;\n\n\t\t\t\tcount = Math.max(count, (this._settings.datafetch||this._settings.loadahead||0));\n\t\t\t\tthis.loadNext(count, from);\n\t\t\t}\n\t\t}\n\t},\n\t//calculates visible view\n\t_getVisibleRange:function(){\n\t\tvar state = this.getScrollState();\n\t\tvar top = Math.max(0, state.y);\n\t\tvar width = this._content_width; \n\t\tvar height = this._content_height;\n\n\t\t//size of single item\n\t\tvar t = this.type;\n\n\t\tvar dx = Math.floor(width/t.width)||1; //at least single item per row\n\t\t\n\t\tvar min = Math.floor(top/t.height);\t\t\t\t//index of first visible row\n\t\tvar dy = Math.ceil((height+top)/t.height)-1;\t\t//index of last visible row\n\t\t//total count of items, paging can affect this math\n\t\tvar count = this.data.$max?(this.data.$max-this.data.$min):this.data.count();\n\t\tvar max = Math.ceil(count/dx)*t.height;\t\t\t//size of view in rows\n\n\t\treturn { _from:min, _height:dy, _top:top, _max:max, _y:t.height, _dx:dx};\n\t},\n\t_cellPosition:function(id){\n\t\tvar html = this.getItemNode(id);\n\t\tif (!html){\n\t\t\tthis.showItem(id);\n\t\t\tthis._render_visible_rows();\n\t\t\thtml = this.getItemNode(id);\n\t\t}\n\t\treturn {\n\t\t\tleft:html.offsetLeft, \n\t\t\ttop:html.offsetTop,\n\t\t\theight:html.offsetHeight,\n\t\t\twidth:html.offsetWidth,\n\t\t\tparent:this._contentobj\n\t\t};\n\t}\n};\n\nexport default VirtualRenderStack;","import {offset, insertBefore, remove} from \"../webix/html\";\nimport {bind} from \"../webix/helpers\";\nimport base from \"../views/view\";\nimport {_event} from \"../webix/htmlevents\";\nimport Touch from \"../core/touch\";\n\n/*\n\tRenders collection of items on demand\n*/\nconst VRenderStack = {\n\t$init:function(){\n\t\tthis._htmlmap = {};\n\n\t\tif (Touch.$active){\n\t\t\tthis.attachEvent(\"onBeforeScroll\", function(){ \n\t\t\t\tthis._in_touch_scroll = true;\n\t\t\t});\n\t\t\tthis.attachEvent(\"onAfterScroll\", function(){\n\t\t\t\tthis.render(null, null, \"paint\");\n\t\t\t\tthis._in_touch_scroll = false;\n\t\t\t});\n\t\t\tthis.attachEvent(\"onTouchMove\", function(){\n\t\t\t\tif (this._in_touch_scroll){\n\t\t\t\t\tthis.blockEvent();\n\t\t\t\t\tthis.render(null, null, \"paint\");\n\t\t\t\t\tthis.unblockEvent();\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t_event(this._viewobj, \"scroll\", bind(function(){\n\t\t\t\tthis.render(null, null, \"paint\");\n\t\t\t}, this));\n\t\t}\n\t},\n\t_sync_scroll:function(x,y,t){\n\n\t\tif (this._settings.footer)\n\t\t\tTouch._set_matrix(this._footer.childNodes[1].firstChild,x,0,t);\n\n\t\tthis.callEvent(\"onSyncScroll\", [x,y,t]);\n\t},\n\t//return html container by its ID\n\t//can return undefined if container doesn't exists\n\tgetItemNode:function(search_id){\n\t\treturn this._htmlmap && this._htmlmap[search_id];\n\t},\n\t/*change scrolling state of top level container, so related item will be in visible part*/\n\tshowItem:function(id){\n\t\tvar index = this.data.getIndexById(id);\n\t\tif (index > -1){\n\t\t\tvar top = index*this.type.height;\n\t\t\tvar bottom = top + this.type.height;\n\t\t\tvar scroll = this.getScrollState();\n\t\t\tvar box = offset(this.$view);\n\t\t\tif (top < scroll.y)\n\t\t\t\tthis.scrollTo(0, top);\n\t\t\telse if (bottom > scroll.y+box.height)\n\t\t\t\tthis.scrollTo(0, bottom-box.height);\n\t\t}\n\t},\n\t//update view after data update\n\t//when called without parameters - all view refreshed\n\trender:function(id,data,type){\n\t\tif (!this.isVisible(this._settings.id) || this.$blockRender)\n\t\t\treturn;\n\t\t\n\t\tvar parent = (this._renderobj||this._dataobj);\n\n\t\tif (id){\n\t\t\tif (type == \"paint\" || type == \"update\"){\n\t\t\t\tvar cont = this.getItemNode(id); //get html element of updated item\n\t\t\t\tif (cont){\n\t\t\t\t\tvar t = this._htmlmap[id] = this._toHTMLObject(data);\n\t\t\t\t\tt.style.top = cont.style.top;\n\t\t\t\t\tt.style.position = \"absolute\";\n\t\t\t\t\tt.style.left = 0; t.style.width = \"100%\";\n\n\t\t\t\t\tinsertBefore(t, cont); \n\t\t\t\t\tremove(cont);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t//updating not rendered yet item\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (type != \"paint\"){\n\t\t\t//repaint all\n\t\t\tthis._htmlmap = {};\n\t\t\tparent.innerHTML = \"\";\n\t\t}\n\n\t\t//full reset\n\t\tif (this.callEvent(\"onBeforeRender\",[this.data])){\n\t\t\tvar count = this.data.count();\n\t\t\tvar scroll = this.getScrollState();\n\t\t\tvar box = offset(this._viewobj);\n\n\t\t\tvar top = Math.floor(scroll.y / this.type.height)-2;\n\t\t\tvar bottom = Math.ceil((scroll.y + box.height)/ this.type.height)+2;\n\n\t\t\ttop = Math.max(0, top);\n\t\t\tbottom = Math.min(this.data.count()-1, bottom);\n\n\t\t\tvar html = [];\n\t\t\tfor (let i=top; i<=bottom; i++){\n\t\t\t\tvar sid = this.data.order[i];\n\t\t\t\tif (!this._htmlmap[sid]){\n\t\t\t\t\tvar item = this.data.getItem(sid);\n\t\t\t\t\tif (!item){\n\t\t\t\t\t\tthis._run_load_next({ \n\t\t\t\t\t\t\tcount:bottom-i+(this._settings.loadahead || 0),\n\t\t\t\t\t\t\tstart:i \n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\thtml.push(this._toHTML(item));\n\t\t\t\t} else {\n\t\t\t\t\thtml.push(\"<div></div>\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._html.innerHTML = html.join(\"\");\n\n\t\t\tparent.style.position = \"relative\";\n\t\t\tparent.style.height = count*this.type.height+\"px\";\n\n\t\t\tvar kids = this._html.childNodes;\n\t\t\tfor (let i=kids.length-1; i>=0; i--){\n\t\t\t\tvar child = kids[i];\n\t\t\t\tvar cid = child.getAttribute(this._id);\n\n\t\t\t\tif (cid){\n\t\t\t\t\tchild.style.position = \"absolute\";\n\t\t\t\t\tchild.style.top = (top+i)*this.type.height+\"px\";\n\t\t\t\t\tchild.style.left = 0; child.style.width = \"100%\";\n\n\t\t\t\t\tparent.appendChild(child);\n\t\t\t\t\tthis._htmlmap[cid] = child;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tthis.callEvent(\"onAfterRender\",[]);\n\t\t}\n\t},\n\t$setSize:function(){\n\t\tif (base.api.$setSize.apply(this, arguments)){\n\t\t\tthis.render(null, null, \"paint\");\n\t\t}\n\t},\n\t_run_load_next:function(conf){\n\t\tvar count = Math.max(conf.count, (this._settings.datafetch||this._settings.loadahead||0));\n\t\tif (this._maybe_loading_already(conf.count, conf.start)) return;\n\t\tthis.loadNext(count, conf.start);\n\t}\n};\n\nexport default VRenderStack;","import {$active} from \"../../webix/skin\";\nimport {extend, isUndefined} from \"../../webix/helpers\";\n\nexport const errorMessage = \"non-existing view for export\";\n\nfunction getDataHelper(key, column, raw){\n\tif (!raw && column.format)\n\t\treturn function(obj){ return column.format(obj[key]); };\n\n\treturn function(obj){ return obj[key]; };\n}\n\nexport function getExportScheme(view, options){\n\tvar scheme = [];\n\tvar h_count = 0, f_count = 0;\n\tvar isTable = view.getColumnConfig;\n\tvar columns = options.columns;\n\tvar raw = !!options.rawValues;\n\tvar isTree = view.data.name == \"TreeStore\";\n\n\tvar treeLines = options.treeLines;\n\tif(treeLines === true || isUndefined(treeLines))\n\t\ttreeLines = \"value\";\n\n\tscheme.heights = {};\n\n\tif (!columns){\n\t\tif (isTable)\n\t\t\tcolumns = [].concat(view._columns);\n\t\telse {\n\t\t\tcolumns = [];\n\t\t\tvar obj = view.data.pull[view.data.order[0]];\n\t\t\tfor (let key in obj)\n\t\t\t\tif(key !== \"id\" && key[0] != \"$\")\n\t\t\t\t\tcolumns.push({id:key, isTree: isTree && key === treeLines});\n\t\t}\n\t}\n\telse if(!columns.length){\n\t//export options are set as - columns:{ rank:true, title:{ header:\"custom\"}}\n\t\tvar arr = [];\n\t\tfor(let key in columns)\n\t\t\tarr.push(extend({ id:key}, extend({}, columns[key])));\n\t\tcolumns = arr;\n\t}\n\n\tif (options.ignore)\n\t\tfor (let i=columns.length-1; i>=0; i--)\n\t\t\tif (options.ignore[columns[i].id])\n\t\t\t\tcolumns.splice(i,1);\n\n\tif (options.id)\n\t\tscheme.push({ id:\"id\", width:50, header:\" \", template:function(obj){ return obj.id; }});\n\n\tif (options.flatTree){\n\t\tvar flatKey = options.flatTree.id;\n\t\tvar copy = [].concat(options.flatTree.columns);\n\t\tvar fill = [];\n\t\tvar fillMode = !!options.flatTree.fill;\n\t\tfor (let i = 1; i <= copy.length; i++)\n\t\t\tcopy[i-1].template = (function(i){ \n\t\t\t\treturn function(obj){ \n\t\t\t\t\treturn obj.$level == i ? (fill[i]=obj[flatKey]) : ((fillMode && i<obj.$level)?fill[i]:\"\"); \n\t\t\t\t};\n\t\t\t})(i);\n\n\t\tvar index = 0;\n\t\tfor (let i = columns.length-1; i >= 0; i--)\n\t\t\tif (columns[i].id === flatKey)\n\t\t\t\tindex = i;\n\n\t\tcolumns = [].concat(columns.slice(0,index)).concat(copy).concat(columns.slice(index+1));\n\t}\n\n\tvar treeColumn;\n\n\tfor (let j = 0; j < columns.length; j++) {\n\t\tlet column = columns[j];\n\t\tlet key = column.id;\n\n\t\tif (column.noExport) continue;\n\n\t\t// raw mode has sense only for datatable\n\t\t// in other cases we don't have built-in data templates\n\t\tvar rawColumn = raw && isTable;\n\t\tif (isTable){\n\t\t\tlet sourceColumn = view._columns_pull[key];\n\t\t\t// when these's no column to take raw data from, or custom template defined - ignore raw mode\n\t\t\tif (column.template && (!sourceColumn || sourceColumn.template != column.template))\n\t\t\t\trawColumn = false;\n\t\t\tif(sourceColumn)\n\t\t\t\tcolumn = extend(extend({}, column), sourceColumn);\n\t\t}\n\n\t\tlet record = {\n\t\t\tid:         column.id,\n\t\t\ttemplate:   (( rawColumn || !column.template) ? getDataHelper(key, column, raw)  : column.template ),\n\t\t\twidth:      ((column.width   || 200) * (options.export_mode===\"excel\"?8.43/70:1 )),\n\t\t\theader:     (column.header!==false?(column.header||key)  : \"\")\n\t\t};\n\n\t\tif(isTree && key === treeLines)\n\t\t\trecord.isTree = treeColumn = true;\n\n\t\tif(options.export_mode === \"excel\"){\n\t\t\textend(record, {\n\t\t\t\ttype: column.exportType || \"\",\n\t\t\t\tformat:column.exportFormat || \"\"\n\t\t\t});\n\t\t}\n\n\t\tif(typeof record.header === \"string\") record.header = [{text:record.header}];\n\t\telse record.header = [].concat(record.header);\n\n\t\tfor(let i = 0; i<record.header.length; i++){\n\t\t\tconst hcell = record.header[i] || {};\n\t\t\tconst text =  hcell.contentId ?\n\t\t\t\tview.getHeaderContent(hcell.contentId).getValue(true) :\n\t\t\t\thcell.text;\n\n\t\t\trecord.header[i] = (text||\"\").toString().replace( /<[^>]*>/gi, \"\");\n\t\t}\n\n\t\th_count = Math.max(h_count, record.header.length);\n\n\t\tif(view._settings.footer){\n\t\t\tlet footer = column.footer || \"\";\n\t\t\tif(typeof footer == \"string\") footer = [{text:footer}];\n\t\t\telse footer = [].concat(footer);\n\n\t\t\tfor(let i = 0; i<footer.length; i++){\n\t\t\t\tif(footer[i]) footer[i] = footer[i].contentId?view.getHeaderContent(footer[i].contentId).getValue():footer[i].text;\n\t\t\t\telse footer[i] = \"\";\n\t\t\t}\n\t\t\trecord.footer = footer;\n\t\t\tf_count = Math.max(f_count, record.footer.length);\n\t\t}\n\t\tscheme.push(record);\n\t}\n\n\n\tif(!treeColumn && isTree && options.treeLines != treeLines && scheme[0])\n\t\tscheme[0].isTree = true;\n\n\tfor(let i =0; i<scheme.length; i++){\n\n\t\tvar diff = h_count-scheme[i].header.length;\n\t\tfor(let d=0; d<diff; d++)\n\t\t\tscheme[i].header.push(\"\");\n\n\t\tif(view._settings.footer){\n\t\t\tdiff = f_count-scheme[i].footer.length;\n\t\t\tfor(let d=0; d<diff; d++)\n\t\t\t\tscheme[i].footer.push(\"\");\n\t\t}\n\t}\n\n\treturn scheme;\n}\n\n\nexport function getExportData(view, options, scheme){\n\tvar filterHTML = !!options.filterHTML;\n\tvar htmlFilter = /<[^>]*>/gi;\n\tvar data = [];\n\tvar header, headers;\n\tvar mode = options.export_mode;\n\n\tif((mode === \"excel\" || mode == \"csv\") && options.docHeader){\n\t\tdata = [[(options.docHeader.text || options.docHeader).toString()], [\"\"]];\n\t\tif(mode === \"excel\" && options.docHeader.height)\n\t\t\tscheme.heights[0] = options.docHeader.height;\n\t}\n\n\tif( options.header !== false && scheme.length){\n\t\tfor(let h=0; h < scheme[0].header.length; h++){\n\t\t\theaders = [];\n\t\t\tfor (let i = 0; i < scheme.length; i++){ \n\t\t\t\theader = \"\";\n\t\t\t\tif(scheme[i].header[h]){\n\t\t\t\t\theader = scheme[i].header[h];\n\t\t\t\t\tif (filterHTML)\n\t\t\t\t\t\theader = scheme[i].header[h] = header.replace(htmlFilter, \"\");\n\t\t\t\t}\n\t\t\t\theaders.push(header);\n\t\t\t}\n\n\t\t\tif(mode ==\"excel\" && view._columns && options.heights !==false &&\n\t\t\t(view._headers[h] !== $active.barHeight || options.heights == \"all\")\n\t\t\t) scheme.heights[data.length] = view._headers[h];\n\n\t\t\tif (mode !== \"pdf\")\n\t\t\t\tdata[data.length] = headers;\n\t\t}\n\t}\n\toptions.yCorrection = (options.yCorrection||0)-data.length;\n\n\tvar treeline = (options.flatTree || options.plainOutput) ? \"\" : \"-\";\n\n\tview.data.each(function(item){\n\t\tif(!options.filter || options.filter(item)){\n\t\t\tif(this.data._scheme_export){\n\t\t\t\titem = view.data._scheme_export(item);\n\t\t\t}\n\n\t\t\tlet line = [];\n\t\t\tfor (let i = 0; i < scheme.length; i++){\n\t\t\t\tlet column = scheme[i], cell = null;\n\t\t\t\t//spreadsheet can output math\n\t\t\t\tif(options.math && item[\"$\"+column.id] && item[\"$\"+column.id].charAt(0) ==\"=\" && !item[\"$\"+column.id].match(/^=(image|link|sparkline)\\(/i))\n\t\t\t\t\tcell = item[\"$\"+column.id];\n\t\t\t\tif(this._spans_pull){\n\t\t\t\t\tlet span = this.getSpan(item.id, column.id);\n\t\t\t\t\tif(span && span[4] && span[0] == item.id && span[1] == column.id){\n\t\t\t\t\t\tcell = span[4];\n\t\t\t\t\t\tif(filterHTML && typeof cell === \"string\")\n\t\t\t\t\t\t\tcell = cell.replace(htmlFilter, \"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!cell){\n\t\t\t\t\tcell = column.template(item, view.type, item[column.id], column, i);\n\t\t\t\t\tif (!cell && cell !== 0) cell = \"\";\n\t\t\t\t\tif(column.isTree && treeline)\n\t\t\t\t\t\tcell = \" \"+Array(item.$level).join(treeline)+\" \"+cell;\n\t\t\t\t\tif (filterHTML && typeof cell === \"string\"){\n\t\t\t\t\t\tcell = cell.replace(htmlFilter, \"\");\n\t\t\t\t\t}\n\t\t\t\t\t//remove end/start spaces(ex.hierarchy data)\n\t\t\t\t\tif (typeof cell === \"string\" && mode === \"csv\")\n\t\t\t\t\t\tcell = cell.trim();\n\t\t\t\t\t//for multiline data\n\t\t\t\t\tif (typeof cell === \"string\" && (mode === \"excel\" || mode === \"csv\")){\n\t\t\t\t\t\tcell = cell.replace(/<br\\s*\\/?>/mg,\"\\n\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tline.push(cell);\n\t\t\t}\n\n\t\t\tif(mode ==\"excel\" && view._columns &&  options.heights !==false &&\n\t\t\t((item.$height && item.$height !== $active.rowHeight) || options.heights ==\"all\")\n\t\t\t) scheme.heights[data.length] = item.$height || this.config.rowHeight;\n\n\t\t\tdata.push(line);\n\t\t}\n\t}, view);\n\n\tif( options.footer !==false ){\n\t\tlet f_count = scheme[0].footer?scheme[0].footer.length:0;\n\t\tfor (let f = 0; f < f_count; f++){\n\t\t\tlet footers  = [];\n\t\t\tfor(let i = 0; i<scheme.length; i++){\n\t\t\t\tlet footer = scheme[i].footer[f];\n\t\t\t\tif (filterHTML) footer = scheme[i].footer[f] = footer.toString().replace(htmlFilter, \"\");\n\t\t\t\tfooters.push(footer);\n\t\t\t}\n\n\t\t\tif(mode ==\"excel\" && view._columns && options.heights !==false &&\n\t\t\t(view._footers[f] !== $active.barHeight || options.heights==\"all\")\n\t\t\t) scheme.heights[data.length] = view._footers[f];\n\n\t\t\tif(mode !== \"pdf\")\n\t\t\t\tdata.push(footers);\n\t\t}\n\t}\n\n\tif(mode ===\"excel\" && options.docFooter){\n\t\tdata = data.concat([[], [(options.docFooter.text || options.docFooter).toString()]]);\n\t\tif(options.docFooter.height)\n\t\t\tscheme.heights[data.length-1] = options.docFooter.height;\n\t}\n\n\treturn data;\n}","import {errorMessage, getExportScheme, getExportData} from \"./common\";\n\nimport i18n from \"../../webix/i18n\";\nimport promise from \"../../thirdparty/promiz\";\nimport require from \"../../load/require\";\nimport env from \"../../webix/env\";\n\nimport {download} from \"../../webix/html\";\nimport {isArray} from \"../../webix/helpers\";\nimport {extend, isUndefined} from \"../../webix/helpers\";\nimport {$$} from \"../../ui/core\";\nimport {assert} from \"../../webix/debug\";\n\nlet font = {};\nexport const toPDF = function(id, options){\n\treturn require([\n\t\tenv.cdn + \"/extras/pdfjs.js\", env.cdn + \"/extras/html2canvas-1.0.min.js\"\n\t]).then(function(){\n\t\toptions = options || {};\n\t\t\n\t\toptions.export_mode = \"pdf\";\n\t\toptions._export_font = font;\n\t\toptions.fontName = options.fontName || \"pt-sans.regular\";\n\t\toptions.display = options.display || \"table\";\n\n\t\tid = isArray(id)?id:[id];\n\t\tlet views = [];\n\n\t\tfor (let i = 0; i < id.length; i++) {\n\t\t\tif(!id[i].id) id[i]  = { id:id[i] }; \n\t\t\t\n\t\t\tlet view = $$(id[i].id);\n\t\t\tlet viewOptions  = extend(id[i].options || {}, options);\n\n\t\t\tif (view && view.$exportView)\n\t\t\t\tview = view.$exportView(viewOptions);\n\n\t\t\tif(view){\n\t\t\t\tif(viewOptions.display !== \"table\"){\n\t\t\t\t\tviews.push({ node:  view.$view, viewOptions:viewOptions });\n\t\t\t\t\tif(options.autowidth)\n\t\t\t\t\t\toptions.width = Math.max( options.width||0, view.$view.$width );\n\t\t\t\t}\n\n\t\t\t\tif(viewOptions.display !== \"image\" && view.data && view.data.pull){\n\t\t\t\t\tconst scheme = getExportScheme(view, viewOptions);\n\t\t\t\t\tviews.push({\n\t\t\t\t\t\tscheme: scheme, \n\t\t\t\t\t\tdata: getExportData(view, viewOptions, scheme),\n\t\t\t\t\t\tviewOptions: viewOptions\n\t\t\t\t\t});\n\t\t\t\t\tif(options.autowidth)\n\t\t\t\t\t\tgetAutowidth(scheme, options);\n\t\t\t\t}\n\t\t\t}\n\t\t\tassert(view, errorMessage);\n\t\t}\n\n\t\tif(views.length == 0)\n\t\t\treturn promise.reject(errorMessage);\n\n\t\tif(font[options.fontName]){\n\t\t\toptions._export_font = font[options.fontName];\n\t\t\treturn getPdfData(views, options).then(function(pdf){\n\t\t\t\treturn getBlob(pdf, options);\n\t\t\t});\n\t\t}\n\t\telse{\n\t\t\tconst defer = promise.defer();\n\t\t\t/* global pdfjs */\n\t\t\tpdfjs.load(env.cdn + \"/extras/\"+options.fontName+\".ttf\", function(err, buf){\n\t\t\t\tif(err) throw err;\n\t\t\t\toptions._export_font = font[options.fontName] = new pdfjs.TTFFont(buf);\n\t\t\t\tdefer.resolve(\n\t\t\t\t\tgetPdfData(views, options).then(function(pdf){\n\t\t\t\t\t\treturn getBlob(pdf, options);\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t});\n\t\t\treturn defer;\n\t\t}\n\t});\n};\n\nfunction getBlob(pdf, options){\n\tconst filename = (options.filename || \"Data\")+\".pdf\";\n\tconst blob = new Blob([pdf.toString()], { type: \"application/pdf\" });\n\n\tif(options.download !== false)\n\t\tdownload(blob, filename);\n\treturn blob;\n}\n\nfunction getPdfData(views, options){\n\tconst doc = addPDFDoc(options);\n\tlet promises = [];\n\tfor (let i = 0; i < views.length; i++) {\n\t\tif(views[i].node)\n\t\t\tpromises.push(getPDFImage(views[i].node));\n\t\telse\n\t\t\tpromises.push(promise.resolve());\n\t}\n\n\treturn promise.all(promises).then(function(images){\n\t\tfor(let i = 0; i < promises.length; i++){\n\t\t\tconst viewOptions = views[i].viewOptions;\n\t\t\tif(viewOptions.textBefore)\n\t\t\t\taddText(doc, \"before\", viewOptions.textBefore);\n\n\t\t\tif(images[i])\n\t\t\t\tdoc.image(images[i], {align:\"center\"});\n\t\t\telse\n\t\t\t\taddPDFTable(views[i].scheme, views[i].data, viewOptions, doc);\n\t\t\t\n\t\t\tif(viewOptions.textAfter)\n\t\t\t\taddText(doc, \"after\", viewOptions.textAfter);\n\t\t\tif(i != views.length - 1)\n\t\t\t\tdoc.pageBreak();\n\t\t}\n\t\treturn addPDFHeader(doc, options);\n\t});\n}\n\nfunction addText(doc, type, text){\n\tif(type == \"after\")\n\t\tdoc.text().br();\n\tif(typeof text == \"string\")\n\t\ttext = {text:text};\n\n\tdoc.text(text.text, text.options || {});\n\tif(type == \"before\")\n\t\tdoc.text().br();\n}\n\nfunction getPDFImage(node){\n\treturn window.html2canvas(node, {background:\"#fff\", logging:false, useCORS:true}).then(function(canvas){\n\t\tconst image = canvas.toDataURL(\"image/jpeg\");\n\t\tconst binary_string =  window.atob(image.split(\"base64,\")[1]);\n\t\tconst length = binary_string.length;\n\t\tconst bytes = new Uint8Array(length);\n\t\tfor (let i = 0; i < length; i++)\n\t\t\tbytes[i] = binary_string.charCodeAt(i);\n\t\treturn new pdfjs.Image(bytes.buffer);\n\t});\n}\n\nfunction getAutowidth(scheme, options){\n\tconst prop = options.orientation && options.orientation == \"landscape\" ? \"height\" : \"width\";\n\tlet width = 80; //paddings\n\tfor(let i = 0; i<scheme.length; i++)\n\t\twidth += scheme[i].width;\n\toptions[prop] = Math.max(options[prop] || 0, width);\n}\n\nfunction addPDFDoc(options){\n\tvar width = options.width||595.296, height = options.height || 841.896;// default A4 size\n\n\tif(options.orientation && options.orientation ===\"landscape\")\n\t\theight = [width, width = height][0];\n\n\treturn new pdfjs.Document({\n\t\tpadding: 40,\n\t\tfont: options._export_font,\n\t\tthreshold:256,\n\t\twidth:width,\n\t\theight:height\n\t});\n}\n\nfunction addPDFTable(scheme, data, options, doc){\n\toptions.header = (isUndefined(options.header) || options.header === true) ? {} : options.header;\n\toptions.footer = (isUndefined(options.footer) || options.footer === true) ? {} : options.footer;\n\toptions.table = options.table || {};\n\n\t//render table\n\tvar h_count = options.header === false ? 0: scheme[0].header.length;\n\tvar f_count = (options.footer === false || !scheme[0].footer) ? 0: scheme[0].footer.length;\n\n\tvar colWidths = [];\n\tfor(let i = 0; i<scheme.length; i++)\n\t\tcolWidths[i] = scheme[i].width;\n\n\tvar tableOps = extend(options.table, {\n\t\tborderWidth: 1,height:20, lineHeight:1.1,\n\t\tborderColor: 0xEEEEEE, backgroundColor: 0xFFFFFF, color:0x666666,\n\t\ttextAlign:\"left\", paddingRight:10, paddingLeft:10,\n\t\theaderRows:h_count, widths: colWidths.length?colWidths:[\"100%\"]\n\t});\n\n\tvar table = doc.table(tableOps);\n\n\t//render table header\n\tif(h_count){\n\t\tvar headerOps = extend(options.header, {\n\t\t\tborderRightColor:0xB0CEE3, borderBottomColor:0xB0CEE3,\n\t\t\tcolor:0x4A4A4A, backgroundColor:0xD2E3EF,\n\t\t\theight:27, lineHeight:1.2\n\t\t});\n\n\t\tfor(let i = 0; i<h_count; i++){\n\t\t\tvar header = table.tr(headerOps);\n\t\t\tfor(var s=0; s<scheme.length; s++)\n\t\t\t\theader.td(scheme[s].header[i].toString());\n\t\t}\n\t}\n\n\t//render table data\n\tfor(let r=0; r<data.length;r++){\n\t\tlet row = table.tr({});\n\t\tfor(let c=0; c< data[r].length; c++)\n\t\t\trow.td(data[r][c]);\n\t}\n\n\t//render table footer\n\tif(f_count){\n\t\tlet footerOps = extend(options.footer, {\n\t\t\tborderRightColor:0xEEEEEE, borderBottomColor:0xEEEEEE,\n\t\t\tbackgroundColor: 0xFAFAFA, color:0x666666,\n\t\t\theight:27, lineHeight:1.2\n\t\t});\n\n\t\tfor(let i = 0; i<f_count; i++){\n\t\t\tlet footer = table.tr(footerOps);\n\t\t\tfor(let s=0; s<scheme.length; s++)\n\t\t\t\tfooter.td(scheme[s].footer[i].toString());\n\t\t}\n\t}\n}\n\nfunction addPDFHeader(doc, options){\n\t//doc footer\n\tif(options.docFooter !== false){\n\t\tlet ft = doc.footer();\n\t\tft.text({\n\t\t\tcolor: 0x666666, textAlign:\"center\"\n\t\t}).append((i18n.dataExport.page||\"Page\")).pageNumber().append(\"  \"+(i18n.dataExport.of || \"of\")+\"  \").pageCount();\n\t}\n\n\tvar horder = { text:0, image:1};\n\n\t//doc header, configurable\n\tif(options.docHeader){\n\t\tif(typeof options.docHeader == \"string\") options.docHeader = {text:options.docHeader};\n\t\textend(options.docHeader, {\n\t\t\tcolor: 0x666666, textAlign:\"right\", order:0\n\t\t});\n\t\thorder.text = options.docHeader.order;\n\t}\n\n\tif (options.docHeaderImage){\n\t\tif(typeof options.docHeaderImage == \"string\") options.docHeaderImage = {url:options.docHeaderImage};\n\t\textend(options.docHeaderImage, {\n\t\t\talign:\"right\", order:1\n\t\t});\n\t\thorder.image = options.docHeaderImage.order;\n\t}\n\n\tif(options.docHeader && horder.image > horder.text)\n\t\tdoc.header({paddingBottom:10}).text(options.docHeader.text, options.docHeader);\n\n\tif (options.docHeaderImage){\n\t\tconst defer = promise.defer();\n\t\tpdfjs.load(options.docHeaderImage.url, function(err, buffer){\n\t\t\tif (!err){\n\t\t\t\tvar img = new pdfjs.Image(buffer);\n\t\t\t\tdoc.header({paddingBottom:10}).image(img, options.docHeaderImage);\n\n\t\t\t\tif(options.docHeader && horder.image < horder.text)\n\t\t\t\t\tdoc.header({paddingBottom:10}).text(options.docHeader.text, options.docHeader);\n\t\t\t}\n\t\t\t//render pdf and show in browser\n\t\t\tdefer.resolve(doc.render());\n\t\t});\n\t\treturn defer;\n\t}\n\telse\n\t\treturn promise.resolve(doc.render());\n}","import {errorMessage, getExportScheme, getExportData} from \"./common\";\n\nimport promise from \"../../thirdparty/promiz\";\nimport require from \"../../load/require\";\nimport env from \"../../webix/env\";\n\nimport {download} from \"../../webix/html\";\nimport {isArray} from \"../../webix/helpers\";\nimport {$$} from \"../../ui/core\";\nimport {assert} from \"../../webix/debug\";\n\nexport const toExcel = function(id, options){\n\toptions = options || {};\n\toptions.export_mode = \"excel\";\n\n\tid = isArray(id)?id:[id];\n\tvar views = [];\n\n\tfor(var i = 0; i<id.length; i++){\n\t\tvar view = $$(id[i]);\n\t\tif (view && view.$exportView)\n\t\t\tview = view.$exportView(options);\n\t\tif(view) views = views.concat(view);\n\t\tassert(view, errorMessage);\n\n\t\t//spreadsheet and excelviewer require plain data output first\n\t\tif(options.dataOnly){\n\t\t\tvar scheme = getExportScheme(view, options);\n\t\t\tviews[i] = {\n\t\t\t\tscheme : scheme,\n\t\t\t\texportData:getExportData(view, options, scheme),\n\t\t\t\tspans:(options.spans ? getSpans(view, options) : [])\n\t\t\t};\n\t\t}\n\t}\n\tif(options.dataOnly) return views;\n\n\tvar defer = promise.defer(); \n\n\treturn require(env.cdn + \"/extras/xlsx.core.styles.min.js\").then(function(){\n\t\tif(!views.length) return defer.reject(errorMessage);\n\n\t\tvar wb = { SheetNames:[], Sheets:{}, Workbook:{ WBProps :{}, Names:[] }};\n\t\tvar name = isArray(options.sheets) ? options.sheets : [options.name || \"Data\"];\n\t\n\t\tfor(var i = 0; i<views.length; i++){\n\t\t\tvar scheme = views[i].scheme || getExportScheme(views[i], options);\n\t\t\tvar result = views[i].exportData || getExportData(views[i], options, scheme);\n\t\t\tvar spans  = views[i].spans ? views[i].spans: (options.spans ? getSpans(views[i], options) : []);\n\t\t\tvar ranges =  views[i].ranges || [];\n\t\t\tvar styles = views[i].styles || [];\n\t\t\tvar data   = getExcelData(result, scheme, spans, styles, options);\n\t\t\tvar sname  = (name[i] || \"Data\"+i).replace(/[*?:[\\]\\\\/]/g,\"\").replace(/&/g, \"&amp;\").substring(0, 31);\n\n\t\t\twb.SheetNames.push(sname);\n\t\t\twb.Sheets[sname] = data;\n\t\t\twb.Workbook.Names = wb.Workbook.Names.concat(ranges);\n\t\t}\n\n\t\t/* global XLSX */\n\t\tvar xls = XLSX.write(wb, {bookType:\"xlsx\", bookSST:false, type: \"binary\"});\n\t\tvar filename =  (options.filename || name.join(\",\"))+\".xlsx\";\n\t\n\t\tvar blob = new Blob([str2array(xls)], { type: \"application/xlsx\" });\n\t\tif(options.download !== false)\n\t\t\tdownload(blob, filename);\n\t\tdefer.resolve(blob);\n\t\treturn defer;\n\t});\n};\n\nfunction str2array(s) {\n\tvar buf = new ArrayBuffer(s.length);\n\tvar view = new Uint8Array(buf);\n\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\treturn buf;\n}\n\nvar types = { number:\"n\", date:\"n\", string:\"s\", boolean:\"b\"};\nvar table = \"_table\";\nfunction getExcelData(data, scheme, spans, styles, options) {\n\tvar ws = {};\n\tvar range = {s: {c:10000000, r:10000000}, e: {c:0, r:0 }};\n\tfor(var R = 0; R != data.length; ++R) {\n\t\tfor(var C = 0; C != data[R].length; ++C) {\n\t\t\tif(range.s.r > R) range.s.r = R;\n\t\t\tif(range.s.c > C) range.s.c = C;\n\t\t\tif(range.e.r < R) range.e.r = R;\n\t\t\tif(range.e.c < C) range.e.c = C;\n\n\t\t\tvar cell = {v: data[R][C] };\n\t\t\tif(cell.v === null) continue;\n\t\t\tvar cell_ref = XLSX.utils.encode_cell({c:C,r:R});\n\n\t\t\tlet stringValue = cell.v.toString();\n\t\t\tlet isFormula = (stringValue.charAt(0) === \"=\");\n\n\t\t\t// set type based on column's config\n\t\t\t// skip headers and formula based cells\n\t\t\tvar header = (options.docHeader?2:0)+scheme[0].header.length;\n\t\t\tif(R>=header && !isFormula){\n\t\t\t\tvar column = scheme[C];\n\t\t\t\tif(column.type) cell.t = (types[column.type] || \"\");\n\t\t\t\tif(column.format) cell.z = column.format;\n\t\t\t}\n\n\t\t\t// set type based on cell's value\n\t\t\tif(cell.v instanceof Date){\n\t\t\t\tcell.t = cell.t || \"n\";\n\t\t\t\tcell.z = cell.z || XLSX.SSF[table][14];\n\t\t\t\tcell.v = excelDate(cell.v);\n\t\t\t}\n\t\t\telse if(!cell.t){\n\t\t\t\tif(typeof cell.v === \"boolean\")\n\t\t\t\t\tcell.t = \"b\";\n\t\t\t\telse if(typeof cell.v === \"number\" || parseFloat(cell.v) == cell.v){\n\t\t\t\t\tcell.v = cell.v*1;\n\t\t\t\t\tcell.t = \"n\";\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// convert any other object to a string\n\t\t\t\t\tcell.v = stringValue;\n\t\t\t\t\tif(isFormula){\n\t\t\t\t\t\tcell.t = \"n\";\n\t\t\t\t\t\tcell.f = cell.v;\n\t\t\t\t\t\tdelete cell.v;\n\t\t\t\t\t}\n\t\t\t\t\telse cell.t = \"s\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(styles){\n\t\t\t\tvar cellStyle = getStyles(R, C, styles);\n\t\t\t\tif(cellStyle.format){\n\t\t\t\t\tcell.z = cellStyle.format;\n\t\t\t\t\tdelete cellStyle.format;\n\t\t\t\t}\n\t\t\t\tcell.s = cellStyle;\n\t\t\t}\n\n\t\t\tws[cell_ref] = cell;\n\t\t}\n\t}\n\tif(range.s.c < 10000000) ws[\"!ref\"] = XLSX.utils.encode_range(range);\n\n\tws[\"!rows\"] = getRowHeights(scheme.heights);\n\tws[\"!cols\"] = getColumnsWidths(scheme);\n\tif(spans.length)\n\t\tws[\"!merges\"] = spans;\n\n\treturn ws;\n}\n\nfunction getRowHeights(heights){\n\tfor(var i in heights)\n\t\theights[i] = {hpx:heights[i], hpt:heights[i]*0.75};\n\treturn heights;\n}\n\nfunction getStyles(r, c, styles){\n\t//row index, column index, styles array\n\tif(styles[r] && styles[r][c])\n\t\treturn styles[r][c];\n\treturn \"\";\n}\n\nfunction getSpans(view, options){\n\tvar isTable = view.getColumnConfig;\n\tvar pull = view._spans_pull;\n\tvar spans = [];\n\n\tif(isTable){\n\t\tif(options.header!==false)\n\t\t\tspans = getHeaderSpans(view, options, \"header\", spans); \n\n\t\tif(pull){\n\t\t\tvar xc = options.xCorrection || 0;\n\t\t\tvar yc = options.yCorrection || 0;\n\t\t\tfor(var row in pull){\n\t\t\t\t//{ s:{c:1, r:0}, e:{c:3, r:0} }\n\t\t\t\tvar cols = pull[row];\n\t\t\t\tfor(var col in cols){\n\t\t\t\t\tvar sc = view.getColumnIndex(col) - xc;\n\t\t\t\t\tvar sr = view.getIndexById(row) - yc;\n\t\t\t\t\tif(sc<0||sr<0) //hidden cols/rows\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tvar ec = sc+cols[col][0]-1;\n\t\t\t\t\tvar er = sr+(cols[col][1]-1);\n\n\t\t\t\t\tspans.push({ s:{c:sc, r:sr}, e:{c:ec, r:er} });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(options.footer!==false)\n\t\t\tspans = getHeaderSpans(view, options, \"footer\", spans);\n\t}\n\n\treturn spans;\n}\n\nfunction getHeaderSpans(view, options, group, spans){\n\tvar columns = view.config.columns;\n\tvar delta = (options.docHeader?2:0)+(group == \"header\" ? 0 :((options.header!==false?view._headers.length:0)+view.count()));\n\n\tfor(var i=0; i<columns.length; i++){\n\t\tvar header = columns[i][group];\n\t\tfor(var h = 0; h<header.length; h++){\n\t\t\tif(header[h] && (header[h].colspan || header[h].rowspan)){\n\t\t\t\tspans.push({\n\t\t\t\t\ts:{ c:i, r:h+delta},\n\t\t\t\t\te:{ c:i+(header[h].colspan||1)-1, r:h+(header[h].rowspan ||1)-1+delta }\n\t\t\t\t});\n\t\t\t}\n\t\t}  \n\t}\n\treturn spans;\n}\n\nfunction excelDate(date) {\n\treturn Math.round(25569 + date / (24 * 60 * 60 * 1000));\n}\n\nfunction getColumnsWidths(scheme){\n\tvar wscols = [];\n\tfor (var i = 0; i < scheme.length; i++)\n\t\twscols.push({ wch: scheme[i].width });\n\n\treturn wscols;\n}","import state from \"../core/state\";\nimport i18n from \"../webix/i18n\";\nimport rules from \"../webix/rules\";\n\nimport {toNode, isUndefined} from \"../webix/helpers\";\nimport { event } from \"../webix/htmlevents\";\nimport {define} from \"../services\";\nimport Promise from \"../thirdparty/promiz\";\nimport {_uid} from \"../ui/helpers\";\nimport {create} from \"../webix/html\";\n\nfunction callback(config, result){\n\t(config.type.indexOf(\"confirm\") != -1 && result === false) ? config._promise.reject() : config._promise.resolve(result);\n\n\tvar usercall = config.callback;\n\tif (usercall)\n\t\tusercall(result, config.details);\n\n\tmodalbox.hide(config.id);\n}\nfunction modal_key(e){\n\tvar count = modalbox.order.length;\n\tif (count > 0 && message.keyboard){\n\t\te = e||window.event;\n\t\tvar code = e.which||e.keyCode;\n\t\tvar lastModalbox = modalbox.pull[modalbox.order[count-1]];\n\n\t\tif (code == 13 || code == 32)\n\t\t\tcallback(lastModalbox, true);\n\t\tif (code == 27)\n\t\t\tcallback(lastModalbox, false);\n\n\t\tif (e.preventDefault)\n\t\t\te.preventDefault();\n\t\treturn !(e.cancelBubble = true);\n\t}\n}\n\nevent(document, \"keydown\", modal_key, { capture: true });\n\t\nfunction modality(mode, container){\n\tvar node = container || document.body;\n\tvar cover;\n\tif(isUndefined(node.modality)){\n\t\tcover = create(\"DIV\", {\n\t\t\t\"class\":\"webix_modal_cover\",\n\t\t\tstyle:\"position:\"+(container ? \"absolute\" : \"fixed\")+\";\"\n\t\t});\n\t\tcover.onkeydown = modal_key;\n\n\t\tif(container){\n\t\t\tvar position = window.getComputedStyle(container).position;\n\t\t\tif(position != \"fixed\" && position != \"absolute\" && position != \"sticky\" && position != \"relative\")\n\t\t\t\tnode.style.position = \"relative\";\n\t\t}\n\t\tnode.appendChild(cover);\n\t\tnode.modality = 1;\n\t}\n\telse\n\t\tmode ? node.modality ++ : node.modality --;\n\n\t//trigger visibility only if necessary\n\tif((mode && node.modality === 1) || node.modality === 0){\n\t\tif(cover)\n\t\t\tcover.style.display = \"inline-block\";\n\t\telse{\n\t\t\tcover = node.querySelectorAll(\".webix_modal_cover\");\n\t\t\tfor(var i = 0; i < cover.length; i++){\n\t\t\t\tif(cover[i].parentNode == node){\n\t\t\t\t\tcover[i].style.display = node.modality == 1 ? \"inline-block\" : \"none\";\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\t\n\t}\n}\n\nfunction button(text, result, className){\n\treturn \"<div role='button' tabindex='0' aria-label='\"+text+\"' class='webix_popup_button\"+(className?(\" \"+className):\"\")+\"' result='\"+result+\"' ><div>\"+text+\"</div></div>\";\n}\n\nfunction info(text){\n\tif (!t.area){\n\t\tt.area = document.createElement(\"DIV\");\n\t\tt.area.className = \"webix_message_area\";\n\t\tt.area.style[t.position]=\"5px\";\n\t\t\n\t\tdocument.body.appendChild(t.area);\n\t}\n\tt.area.setAttribute(\"role\", \"alert\");\n\tt.area.setAttribute(\"aria-atomic\", true);\n\tt.hide(text.id);\n\tvar message = document.createElement(\"DIV\");\n\tmessage.innerHTML = \"<div>\"+text.text+\"</div>\";\n\tmessage.className = \"webix_message webix_\" + text.type;\n\tmessage.onclick = function(){\n\t\tif (text) t.hide(text.id);\n\t\ttext = null;\n\t};\n\n\tif (state.$testmode)\n\t\tmessage.className += \" webix_no_transition\";\n\n\tif (t.position == \"bottom\" && t.area.firstChild)\n\t\tt.area.insertBefore(message,t.area.firstChild);\n\telse\n\t\tt.area.appendChild(message);\n\t\n\tif (text.expire > 0)\n\t\tt.timers[text.id]=window.setTimeout(function(){\n\t\t\tt.hide(text.id);\n\t\t}, text.expire);\n\n\t//styling for animation\n\tmessage.style.height = message.offsetHeight-2+\"px\";\n\n\tt.pull[text.id] = message;\n\tmessage = null;\n\n\treturn text.id;\n}\nfunction _boxStructure(config, ok, cancel){\n\tvar box = document.createElement(\"DIV\");\n\tvar css = config.css ? \" \"+config.css : \"\";\n\tbox.className = \"webix_modal_box webix_\"+config.type+css;\n\tbox.setAttribute(\"webixbox\", 1);\n\tbox.setAttribute(\"role\", \"alertdialog\");\n\tbox.setAttribute(\"aria-label\", config.title || \"\");\n\tbox.setAttribute(\"tabindex\", \"0\");\n\n\tvar inner = \"\";\n\tif (config.width)\n\t\tbox.style.width = config.width+(rules.isNumber(config.width)?\"px\":\"\");\n\tif (config.height)\n\t\tbox.style.height = config.height+(rules.isNumber(config.height)?\"px\":\"\");\n\tif (config.title)\n\t\tinner+=\"<div class=\\\"webix_popup_title\\\">\"+config.title+\"</div>\";\n\tinner+=\"<div class=\\\"webix_popup_text\\\"><span>\"+(config.content?\"\":config.text)+\"</span></div><div  class=\\\"webix_popup_controls\\\">\";\n\tif (cancel)\n\t\tinner += button(config.cancel || i18n.message.cancel, false);\n\tif (ok)\n\t\tinner += button(config.ok || i18n.message.ok, true,\"confirm\");\n\tif (config.buttons && !ok && !cancel){\n\t\tfor (var i=0; i<config.buttons.length; i++)\n\t\t\tinner += button(config.buttons[i],i);\n\t}\n\tinner += \"</div>\";\n\tbox.innerHTML = inner;\n\n\tif (config.content){\n\t\tvar node = config.content;\n\t\tif (typeof node == \"string\") \n\t\t\tnode = document.getElementById(node);\n\t\tif (node.style.display == \"none\")\n\t\t\tnode.style.display = \"\";\n\t\tbox.childNodes[config.title?1:0].appendChild(node);\n\t}\n\n\tbox.onclick = function(e){\n\t\te = e ||window.event;\n\t\tvar source = e.target || e.srcElement;\n\t\tif (!source.className) source = source.parentNode;\n\t\tif (source.className.indexOf(\"webix_popup_button\")!=-1){\n\t\t\tvar result = source.getAttribute(\"result\");\n\t\t\tresult = (result == \"true\")||(result == \"false\"?false:result);\n\t\t\tcallback(config, result);\n\t\t}\n\t\te.cancelBubble = true;\n\t};\n\tconfig._box = box;\n\treturn box;\n}\n\nmodalbox.pull = {};\nmodalbox.order = [];\n\nfunction _createBox(config, ok, cancel){\n\tvar box = config.tagName ? config : _boxStructure(config, ok, cancel);\n\n\tvar containerWidth = config.container ? config.container.offsetWidth : (window.innerWidth||document.documentElement.offsetWidth);\n\tvar containerHeight = config.container ? config.container.offsetHeight : (window.innerHeight||document.documentElement.offsetHeight);\n\n\tif(config.container)\n\t\tbox.style.position = \"absolute\";\n\n\ttoNode((config.container || document.body).appendChild(box));\n\tmodality(true, config.container);\n\n\tvar x = config.left||Math.abs(Math.floor((containerWidth - box.offsetWidth)/2));\n\tvar y = config.top||Math.abs(Math.floor((containerHeight - box.offsetHeight)/2));\n\tif (config.position == \"top\")\n\t\tbox.style.top = \"-3px\";\n\telse\n\t\tbox.style.top = y+\"px\";\n\tbox.style.left = x+\"px\";\n\t//necessary for IE only\n\tbox.onkeydown = modal_key;\n\n\tbox.focus();\n\n\tif (!config.id)\n\t\tconfig.id = _uid(\"modalbox\");\n\telse if(modalbox.pull[config.id]){\n\t\tmodalbox.hide(config.id);\n\t}\n\n\tmodalbox.order.push(config.id);\n\tmodalbox.pull[config.id] = config;\n\n\tconfig._promise = Promise.defer();\n\treturn config._promise;\n}\n\nfunction alertPopup(config){\n\treturn _createBox(config, true);\n}\nfunction confirmPopup(config){\n\treturn _createBox(config, true, true);\n}\nfunction boxPopup(config){\n\treturn _createBox(config);\n}\nfunction box_params(text, type, callback){\n\tif (typeof text != \"object\"){\n\t\tif (typeof type == \"function\"){\n\t\t\tcallback = type;\n\t\t\ttype = \"\";\n\t\t}\n\t\ttext = {text:text, type:type, callback:callback };\n\t}\n\treturn text;\n}\nfunction params(text, type, expire, id){\n\tif (typeof text != \"object\")\n\t\ttext = {text:text, type:type, expire:expire, id:id};\n\ttext.id = text.id||_uid(\"message\");\n\ttext.expire = text.expire||t.expire;\n\treturn text;\n}\nexport function alert(){\n\tvar text = box_params.apply(this, arguments);\n\ttext.type = text.type || \"alert\";\n\treturn alertPopup(text);\n}\nexport function confirm(){\n\tvar text = box_params.apply(this, arguments);\n\ttext.type = text.type || \"confirm\";\n\treturn confirmPopup(text);\n}\n\nexport function modalbox(){\n\tvar text = box_params.apply(this, arguments);\n\ttext.type = text.type || \"alert\";\n\treturn boxPopup(text);\n}\n\nmodalbox.hide = function(id){\n\tif(id && modalbox.pull[id]){\n\t\tvar node = modalbox.pull[id]._box;\n\t\tif(node){\n\t\t\tnode.parentNode.removeChild(node);\n\t\t\tmodalbox.order.splice(modalbox.order.indexOf(id), 1);\n\t\t\tmodality(false, modalbox.pull[id].container);\n\t\t\tdelete modalbox.pull[id];\n\t\t}\n\t}\n};\n\nmodalbox.hideAll = function(){\n\tfor (var id in modalbox.pull){\n\t\tthis.hide(id);\n\t}\n};\n\nexport function message(text, type, expire, id){ //eslint-disable-line\n\ttext = params.apply(this, arguments);\n\ttext.type = text.type||\"info\";\n\n\tvar subtype = text.type.split(\"-\")[0];\n\tswitch (subtype){\n\t\tcase \"alert\":\n\t\t\treturn alertPopup(text);\n\t\tcase \"confirm\":\n\t\t\treturn confirmPopup(text);\n\t\tcase \"modalbox\":\n\t\t\treturn boxPopup(text);\n\t\tdefault:\n\t\t\treturn info(text);\n\t}\n}\n\nvar t = message;\nt.expire = 4000;\nt.keyboard = true;\nt.position = \"top\";\nt.pull = {};\nt.timers = {};\n\nt.hideAll = function(){\n\tfor (var key in t.pull)\n\t\tt.hide(key);\n};\nt.hide = function(id){\n\tvar obj = t.pull[id];\n\tif (obj && obj.parentNode){\n\t\twindow.setTimeout(function(){\n\t\t\tobj.parentNode.removeChild(obj);\n\t\t\tobj = null;\n\t\t},2000);\n\t\t//styling for animation\n\t\tobj.style.height = 0;\n\t\tobj.className+=\" hidden\";\n\t\tt.area.removeAttribute(\"role\");\n\t\t\n\t\tif(t.timers[id])\n\t\t\twindow.clearTimeout(t.timers[id]);\n\t\tdelete t.pull[id];\n\t}\n};\n\n//override circualr dependencies\ndefine(\"message\", message);\nexport default modalbox;","\nimport {message} from \"./message\";\n\nvar key = \"VGhpcyBhcHAgdXNlcyBhIHRyaWFsIHZlcnNpb24gb2YgV2ViaXggVUkuIFRoZSB0cmlhbCBwZXJpb2QgaGFzIGV4cGlyZWQuIDxicj4gSWYgeW91ciB3YW50IHRvIGNvbnRpbnVlIHVzaW5nIFdlYml4IFVJLCBwbGVhc2UgdXBncmFkZSB0byBDb21tZXJjaWFsIG9yIEdQTCBlZGl0aW9uLg==\";\nif (window.atob && (new Date()) > (new Date(2099,0,1)))\n\tsetTimeout(function(){\n\t\tmessage({ type:\"error\", expire:-1, text:atob(key) });\n\t}, Math.floor(Math.random()*5000) + 1000);","import env from \"./env\";\n// Only IE8 doesn't support defineProperty\nif (env.isIE8){\n\t// Not really a polyfill, silence the esModule flag\n\tObject.defineProperty = function(obj, key, data){\n\t\tobj[key] = data.value;\n\t};\n}","const en = {\n\tgroupDelimiter:\",\",\n\tgroupSize:3,\n\tdecimalDelimiter:\".\",\n\tdecimalSize:2,\n\n\tdateFormat:\"%m/%d/%Y\",\n\ttimeFormat:\"%h:%i %A\",\n\tlongDateFormat:\"%d %F %Y\",\n\tfullDateFormat:\"%m/%d/%Y %h:%i %A\",\n\tam:[\"am\",\"AM\"],\n\tpm:[\"pm\",\"PM\"],\n\n\tprice:\"${obj}\",\n\tpriceSettings:{\n\t\tgroupDelimiter:\",\",\n\t\tgroupSize:3,\n\t\tdecimalDelimiter:\".\",\n\t\tdecimalSize:2\n\t},\n\tfileSize: [\"b\",\"Kb\",\"Mb\",\"Gb\",\"Tb\",\"Pb\",\"Eb\"],\n\t\n\tcalendar: {\n\t\tmonthFull:[\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n\t\tmonthShort:[\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n\t\tdayFull:[\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n\t\tdayShort:[\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n\t\thours: \"Hours\",\n\t\tminutes: \"Minutes\",\n\t\tdone:\"Done\",\n\t\tclear: \"Clear\",\n\t\ttoday: \"Today\"\n\t},\n\n\tdataExport:{\n\t\tpage:\"Page\",\n\t\tof:\"of\"\n\t},\n\tPDFviewer:{\n\t\tof:\"of\",\n\t\tautomaticZoom:\"Automatic Zoom\",\n\t\tactualSize:\"Actual Size\",\n\t\tpageFit:\"Page Fit\",\n\t\tpageWidth:\"Page Width\",\n\t\tpageHeight:\"Page Height\",\n\t\tenterPassword:\"Enter password\",\n\t\tpasswordError:\"Wrong password\"\n\t},\n\taria:{\n\t\tcalendar:\"Calendar\",\n\t\tincreaseValue:\"Increase value\",\n\t\tdecreaseValue:\"Decrease value\",\n\t\tnavMonth:[\"Previous month\", \"Next month\"],\n\t\tnavYear:[\"Previous year\", \"Next year\"],\n\t\tnavDecade:[\"Previous decade\", \"Next decade\"],\n\t\tdateFormat:\"%d %F %Y\",\n\t\tmonthFormat:\"%F %Y\",\n\t\tyearFormat:\"%Y\",\n\t\thourFormat:\"Hours: %h %A\",\n\t\tminuteFormat:\"Minutes: %i\",\n\t\tremoveItem:\"Remove item\",\n\t\tpages:[\"First page\", \"Previous page\", \"Next page\", \"Last page\"],\n\t\tpage:\"Page\",\n\t\theadermenu:\"Header menu\",\n\t\topenGroup:\"Open column group\",\n\t\tcloseGroup:\"Close column group\",\n\t\tcloseTab:\"Close tab\",\n\t\tshowTabs:\"Show more tabs\",\n\t\tresetTreeMap:\"Reset tree map\",\n\t\tnavTreeMap:\"Level up\",\n\t\tnextTab:\"Next tab\",\n\t\tprevTab:\"Previous tab\",\n\t\tmultitextSection:\"Add section\",\n\t\tmultitextextraSection:\"Remove section\",\n\t\tshowChart:\"Show chart\",\n\t\thideChart:\"Hide chart\",\n\t\tresizeChart:\"Resize chart\"\n\t},\n\trichtext:{\n\t\tunderline: \"Underline\",\n\t\tbold: \"Bold\",\n\t\titalic: \"Italic\"\n\t},\n\tcombo:{\n\t\tselect:\"Select\",\n\t\tselectAll:\"Select all\",\n\t\tunselectAll:\"Unselect all\"\n\t},\n\tmessage:{\n\t\tok:\"OK\",\n\t\tcancel:\"Cancel\"\n\t},\n\tcomments:{\n\t\tsend: \"Send\",\n\t\tconfirmMessage: \"The comment will be removed. Are you sure?\",\n\t\tedit: \"Edit\",\n\t\tremove: \"Remove\",\n\t\tplaceholder: \"Type here..\",\n\t\tmoreComments:\"More comments\"\n\t}\n};\n\nexport default en;","import env from \"../webix/env\";\nimport i18n from \"../webix/i18n\";\n\n\nconst wDate = {\n\tstartOnMonday:false,\n\n\ttoFixed:function(num, ms){\n\t\tif( num<10)\tnum = \"0\"+num;\n\t\tif( ms && num <100 ) num = \"0\"+num;\n\t\treturn num;\n\t},\n\tweekStart:function(date){\n\t\tdate = this.copy(date);\n\n\t\tvar shift=date.getDay();\n\t\tif (this.startOnMonday){\n\t\t\tif (shift===0) shift=6;\n\t\t\telse shift--;\n\t\t}\n\t\treturn this.datePart(this.add(date,-1*shift,\"day\"));\n\t},\n\tmonthStart:function(date){\n\t\tdate = this.copy(date);\n\n\t\tdate.setDate(1);\n\t\treturn this.datePart(date);\n\t},\n\tyearStart:function(date){\n\t\tdate = this.copy(date);\n\n\t\tdate.setMonth(0);\n\t\treturn this.monthStart(date);\n\t},\n\tdayStart:function(date){\n\t\treturn this.datePart(date, true);\n\t},\n\tdateToStr:function(format,utc){\n\t\tif (typeof format == \"function\") return format;\n\n\t\tif(env.strict){\n\t\t\treturn function(date){\n\t\t\t\tif (!date)\n\t\t\t\t\treturn \"\";\n\t\t\t\tif (!date.getMonth)\n\t\t\t\t\tdate = i18n.parseFormatDate(date);\n\n\t\t\t\tvar str = \"\";\n\t\t\t\tvar lastPos = 0;\n\t\t\t\tformat.replace(/%[a-zA-Z]/g,function(s,pos){\n\t\t\t\t\tstr += format.slice(lastPos,pos);\n\t\t\t\t\tvar fn = function(date){\n\t\t\t\t\t\tif( s == \"%d\")  return wDate.toFixed(date.getDate());\n\t\t\t\t\t\tif( s == \"%m\")  return wDate.toFixed((date.getMonth()+1));\n\t\t\t\t\t\tif( s == \"%j\")  return date.getDate();\n\t\t\t\t\t\tif( s == \"%n\")  return (date.getMonth()+1);\n\t\t\t\t\t\tif( s == \"%y\")  return wDate.toFixed(date.getFullYear()%100);\n\t\t\t\t\t\tif( s == \"%Y\")  return date.getFullYear();\n\t\t\t\t\t\tif( s == \"%D\")  return i18n.calendar.dayShort[date.getDay()];\n\t\t\t\t\t\tif( s == \"%l\")  return i18n.calendar.dayFull[date.getDay()];\n\t\t\t\t\t\tif( s == \"%M\")  return i18n.calendar.monthShort[date.getMonth()];\n\t\t\t\t\t\tif( s == \"%F\")  return i18n.calendar.monthFull[date.getMonth()];\n\t\t\t\t\t\tif( s == \"%h\")  return wDate.toFixed((date.getHours()+11)%12+1);\n\t\t\t\t\t\tif( s == \"%g\")  return ((date.getHours()+11)%12+1);\n\t\t\t\t\t\tif( s == \"%G\")  return date.getHours();\n\t\t\t\t\t\tif( s == \"%H\")  return wDate.toFixed(date.getHours());\n\t\t\t\t\t\tif( s == \"%i\")  return wDate.toFixed(date.getMinutes());\n\t\t\t\t\t\tif( s == \"%a\")  return (date.getHours()>11?i18n.pm[0]:i18n.am[0]);\n\t\t\t\t\t\tif( s == \"%A\")  return (date.getHours()>11?i18n.pm[1]:i18n.am[1]);\n\t\t\t\t\t\tif( s == \"%s\")  return wDate.toFixed(date.getSeconds());\n\t\t\t\t\t\tif( s == \"%S\")\treturn wDate.toFixed(date.getMilliseconds(), true);\n\t\t\t\t\t\tif( s == \"%W\")  return wDate.toFixed(Date.getISOWeek(date));\n\t\t\t\t\t\tif( s == \"%c\"){\n\t\t\t\t\t\t\tvar str = date.getFullYear();\n\t\t\t\t\t\t\tstr += \"-\"+wDate.toFixed((date.getMonth()+1));\n\t\t\t\t\t\t\tstr += \"-\"+wDate.toFixed(date.getDate());\n\t\t\t\t\t\t\tstr += \"T\";\n\t\t\t\t\t\t\tstr += wDate.toFixed(date.getHours());\n\t\t\t\t\t\t\tstr += \":\"+wDate.toFixed(date.getMinutes());\n\t\t\t\t\t\t\tstr += \":\"+wDate.toFixed(date.getSeconds());\n\t\t\t\t\t\t\treturn str;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn s;\n\t\t\t\t\t};\n\t\t\t\t\tstr += fn(date);\n\t\t\t\t\tlastPos = pos + 2;\n\t\t\t\t});\n\t\t\t\tstr += format.slice(lastPos,format.length);\n\t\t\t\treturn str;\n\t\t\t};\n\n\t\t}\n\n\t\tformat=format.replace(/%[a-zA-Z]/g,function(a){\n\t\t\tswitch(a){\n\t\t\t\tcase \"%d\": return \"\\\"+wDate.toFixed(date.getDate())+\\\"\";\n\t\t\t\tcase \"%m\": return \"\\\"+wDate.toFixed((date.getMonth()+1))+\\\"\";\n\t\t\t\tcase \"%j\": return \"\\\"+date.getDate()+\\\"\";\n\t\t\t\tcase \"%n\": return \"\\\"+(date.getMonth()+1)+\\\"\";\n\t\t\t\tcase \"%y\": return \"\\\"+wDate.toFixed(date.getFullYear()%100)+\\\"\"; \n\t\t\t\tcase \"%Y\": return \"\\\"+date.getFullYear()+\\\"\";\n\t\t\t\tcase \"%D\": return \"\\\"+i18n.calendar.dayShort[date.getDay()]+\\\"\";\n\t\t\t\tcase \"%l\": return \"\\\"+i18n.calendar.dayFull[date.getDay()]+\\\"\";\n\t\t\t\tcase \"%M\": return \"\\\"+i18n.calendar.monthShort[date.getMonth()]+\\\"\";\n\t\t\t\tcase \"%F\": return \"\\\"+i18n.calendar.monthFull[date.getMonth()]+\\\"\";\n\t\t\t\tcase \"%h\": return \"\\\"+wDate.toFixed((date.getHours()+11)%12+1)+\\\"\";\n\t\t\t\tcase \"%g\": return \"\\\"+((date.getHours()+11)%12+1)+\\\"\";\n\t\t\t\tcase \"%G\": return \"\\\"+date.getHours()+\\\"\";\n\t\t\t\tcase \"%H\": return \"\\\"+wDate.toFixed(date.getHours())+\\\"\";\n\t\t\t\tcase \"%i\": return \"\\\"+wDate.toFixed(date.getMinutes())+\\\"\";\n\t\t\t\tcase \"%a\": return \"\\\"+(date.getHours()>11?i18n.pm[0]:i18n.am[0])+\\\"\";\n\t\t\t\tcase \"%A\": return \"\\\"+(date.getHours()>11?i18n.pm[1]:i18n.am[1])+\\\"\";\n\t\t\t\tcase \"%s\": return \"\\\"+wDate.toFixed(date.getSeconds())+\\\"\";\n\t\t\t\tcase \"%S\": return \"\\\"+wDate.toFixed(date.getMilliseconds(), true)+\\\"\";\n\t\t\t\tcase \"%W\": return \"\\\"+wDate.toFixed(wDate.getISOWeek(date))+\\\"\";\n\t\t\t\tcase \"%c\":\n\t\t\t\t\tvar str = \"\\\"+date.getFullYear()+\\\"\";\n\t\t\t\t\tstr += \"-\\\"+wDate.toFixed((date.getMonth()+1))+\\\"\";\n\t\t\t\t\tstr += \"-\\\"+wDate.toFixed(date.getDate())+\\\"\";\n\t\t\t\t\tstr += \"T\";\n\t\t\t\t\tstr += \"\\\"+wDate.toFixed(date.getHours())+\\\"\";\n\t\t\t\t\tstr += \":\\\"+wDate.toFixed(date.getMinutes())+\\\"\";\n\t\t\t\t\tstr += \":\\\"+wDate.toFixed(date.getSeconds())+\\\"\";\n\t\t\t\t\tif(utc === true)\n\t\t\t\t\t\tstr += \"Z\";\n\t\t\t\t\treturn str;\n\n\t\t\t\tdefault: return a;\n\t\t\t}\n\t\t});\n\t\tif (utc===true) format=format.replace(/date\\.get/g,\"date.getUTC\");\n\t\tconst temp = new Function(\"date\", \"i18n\", \"wDate\", \"if (!date) return ''; if (!date.getMonth) date=i18n.parseFormatDate(date);  return \\\"\"+format+\"\\\";\");\n\t\treturn function(v){ return temp(v, i18n, wDate); };\n\t},\n\tstrToDate:function(format,utc){\n\t\tif (typeof format == \"function\") return format;\n\n\t\tvar mask=format.match(/%[a-zA-Z]/g);\n\t\tvar splt=\"var temp=date.split(/[^0-9a-zA-Z]+/g);\";\n\t\tvar i,t,s;\n\n\t\tif(!i18n.calendar.monthShort_hash){\n\t\t\ts = i18n.calendar.monthShort;\n\t\t\tt = i18n.calendar.monthShort_hash = {};\n\t\t\tfor (i = 0; i < s.length; i++)\n\t\t\t\tt[s[i]]=i;\n\n\t\t\ts = i18n.calendar.monthFull;\n\t\t\tt = i18n.calendar.monthFull_hash = {};\n\t\t\tfor (i = 0; i < s.length; i++)\n\t\t\t\tt[s[i]]=i;\n\t\t}\n\n\t\tif(env.strict){\n\t\t\treturn function(date){\n\t\t\t\tif (!date) return \"\";\n\t\t\t\tif (typeof date == \"object\") return date;\n\t\t\t\tvar temp=date.split(/[^0-9a-zA-Z]+/g);\n\t\t\t\tvar set=[0,0,1,0,0,0,0];\n\t\t\t\tfor (i=0; i<mask.length; i++){\n\t\t\t\t\tvar a = mask[i];\n\t\t\t\t\tif( a ==  \"%y\")\n\t\t\t\t\t\tset[0]=temp[i]*1+(temp[i]>30?1900:2000);\n\t\t\t\t\telse if( a ==  \"%Y\"){\n\t\t\t\t\t\tset[0]=(temp[i]||0)*1; if (set[0]<30) set[0]+=2000;\n\t\t\t\t\t}\n\t\t\t\t\telse if( a == \"%n\" || a == \"%m\")\n\t\t\t\t\t\tset[1]=(temp[i]||1)-1;\n\t\t\t\t\telse if( a ==  \"%M\")\n\t\t\t\t\t\tset[1]=i18n.calendar.monthShort_hash[temp[i]]||0;\n\t\t\t\t\telse if( a ==  \"%F\")\n\t\t\t\t\t\tset[1]=i18n.calendar.monthFull_hash[temp[i]]||0;\n\t\t\t\t\telse if( a == \"%j\" || a == \"%d\")\n\t\t\t\t\t\tset[2]=temp[i]||1;\n\t\t\t\t\telse if( a == \"%g\" || a == \"%G\" || a == \"%h\" || a == \"%H\")\n\t\t\t\t\t\tset[3]=temp[i]||0;\n\t\t\t\t\telse if( a == \"%a\")\n\t\t\t\t\t\tset[3]=set[3]%12+((temp[i]||\"\")==i18n.am[0]?0:12);\n\t\t\t\t\telse if( a == \"%A\")\n\t\t\t\t\t\tset[3]=set[3]%12+((temp[i]||\"\")==i18n.am[1]?0:12);\n\t\t\t\t\telse if( a ==  \"%i\")\n\t\t\t\t\t\tset[4]=temp[i]||0;\n\t\t\t\t\telse if( a ==  \"%s\")\n\t\t\t\t\t\tset[5]=temp[i]||0;\n\t\t\t\t\telse if( a ==  \"%S\")\n\t\t\t\t\t\tset[6]=temp[i]||0;\n\t\t\t\t\telse if( a ==  \"%c\"){\n\t\t\t\t\t\tvar reg = /(\\d+)-(\\d+)-(\\d+)T(\\d+):(\\d+):(\\d+)(\\+.*|)/g;\n\t\t\t\t\t\tvar res = reg.exec(date);\n\t\t\t\t\t\tset[0]= (res[1]||0)*1; if (set[0]<30) set[0]+=2000;\n\t\t\t\t\t\tset[1]= (res[2]||1)-1;\n\t\t\t\t\t\tset[2]= res[3]||1;\n\t\t\t\t\t\tset[3]= res[4]||0;\n\t\t\t\t\t\tset[4]= res[5]||0;\n\t\t\t\t\t\tset[5]= res[6]||0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(utc)\n\t\t\t\t\treturn new Date(Date.UTC(set[0],set[1],set[2],set[3],set[4],set[5], set[6]));\n\t\t\t\treturn new Date(set[0],set[1],set[2],set[3],set[4],set[5], set[6]);\n\t\t\t};\n\t\t}\n\n\t\tfor (i=0; i<mask.length; i++){\n\t\t\tswitch(mask[i]){\n\t\t\t\tcase \"%j\":\n\t\t\t\tcase \"%d\": splt+=\"set[2]=temp[\"+i+\"]||1;\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%n\":\n\t\t\t\tcase \"%m\": splt+=\"set[1]=(temp[\"+i+\"]||1)-1;\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%y\": splt+=\"set[0]=temp[\"+i+\"]*1+(temp[\"+i+\"]>30?1900:2000);\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%g\":\n\t\t\t\tcase \"%G\":\n\t\t\t\tcase \"%h\": \n\t\t\t\tcase \"%H\":\n\t\t\t\t\tsplt+=\"set[3]=temp[\"+i+\"]||0;\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%i\":\n\t\t\t\t\tsplt+=\"set[4]=temp[\"+i+\"]||0;\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%Y\":  splt+=\"set[0]=(temp[\"+i+\"]||0)*1; if (set[0]<30) set[0]+=2000;\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%a\":\n\t\t\t\t\tsplt+= \"set[3]=set[3]%12+(temp[\"+i+\"]==i18n.am[0]?0:12);\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%A\":\n\t\t\t\t\tsplt+= \"set[3]=set[3]%12+(temp[\"+i+\"]==i18n.am[1]?0:12);\";\n\t\t\t\t\tbreak;\t\t\t\t\t\n\t\t\t\tcase \"%s\":  splt+=\"set[5]=temp[\"+i+\"]||0;\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%S\":  splt+=\"set[6]=temp[\"+i+\"]||0;\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%M\":  splt+=\"set[1]=i18n.calendar.monthShort_hash[temp[\"+i+\"]]||0;\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%F\":  splt+=\"set[1]=i18n.calendar.monthFull_hash[temp[\"+i+\"]]||0;\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"%c\":\n\t\t\t\t\tsplt+= \"var res = date.split('T');\";\n\t\t\t\t\tsplt+= \"if(res[0]){ var d = res[0].split('-');\";\n\t\t\t\t\tsplt+= \"set[0]= (d[0]||0)*1; if (set[0]<30) set[0]+=2000;\";\n\t\t\t\t\tsplt+= \"set[1]= (d[1]||1)-1;\";\n\t\t\t\t\tsplt+= \"set[2]= d[2]||1;}\";\n\t\t\t\t\tsplt+= \"if(res[1]){ var t = res[1].split(':');\";\n\t\t\t\t\tsplt+= \"set[3]= t[0]||0;\";\n\t\t\t\t\tsplt+= \"set[4]= t[1]||0;\";\n\t\t\t\t\tsplt+= \"set[5]= parseInt(t[2])||0;}\";\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar code =\"set[0],set[1],set[2],set[3],set[4],set[5], set[6]\";\n\t\tif (utc) code =\" Date.UTC(\"+code+\")\";\n\t\tconst temp = new Function(\"date\", \"i18n\", \"if (!date) return ''; if (typeof date == 'object') return date; var set=[0,0,1,0,0,0,0]; \"+splt+\" return new Date(\"+code+\");\");\n\t\treturn function(v){ return temp(v, i18n ); };\n\t},\n\t\t\n\tgetISOWeek: function(ndate) {\n\t\tif(!ndate) return false;\n\t\tvar nday = ndate.getDay();\n\t\tif (nday === 0) {\n\t\t\tnday = 7;\n\t\t}\n\t\tvar first_thursday = new Date(ndate.valueOf());\n\t\tfirst_thursday.setDate(ndate.getDate() + (4 - nday));\n\t\tvar year_number = first_thursday.getFullYear(); // year of the first Thursday\n\t\tvar ordinal_date = Math.floor( (first_thursday.getTime() - new Date(year_number, 0, 1).getTime()) / 86400000); //ordinal date of the first Thursday - 1 (so not really ordinal date)\n\t\tvar weekNumber = 1 + Math.floor( ordinal_date / 7);\t\n\t\treturn weekNumber;\n\t},\n\t\n\tgetUTCISOWeek: function(ndate){\n\t\treturn this.getISOWeek(ndate);\n\t},\n\t_correctDate: function(d,d0,inc,checkFunc){\n\t\tif(!inc)\n\t\t\treturn;\n\t\tvar incorrect = checkFunc(d,d0);\n\t\tif(incorrect){\n\t\t\tvar i = (inc>0?1:-1);\n\n\t\t\twhile(incorrect){\n\t\t\t\td.setHours(d.getHours()+i);\n\t\t\t\tincorrect = checkFunc(d,d0);\n\t\t\t\ti += (inc>0?1:-1);\n\t\t\t}\n\t\t}\n\t},\n\tadd:function(date,inc,mode,copy){\n\t\tif (copy) date = this.copy(date);\n\t\tvar d = wDate.copy(date);\n\t\tswitch(mode){\n\t\t\tcase \"day\":\n\t\t\t\tdate.setDate(date.getDate()+inc);\n\t\t\t\tthis._correctDate(date,d,inc,function(d,d0){\n\t\t\t\t\treturn \twDate.datePart(d0,true).valueOf()== wDate.datePart(d,true).valueOf();\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"week\":\n\t\t\t\tdate.setDate(date.getDate()+7*inc);\n\t\t\t\tthis._correctDate(date,d,7*inc,function(d,d0){\n\t\t\t\t\treturn \twDate.datePart(d0,true).valueOf()== wDate.datePart(d,true).valueOf();\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"month\":\n\t\t\t\tdate.setMonth(date.getMonth()+inc);\n\t\t\t\tthis._correctDate(date,d,inc,function(d,d0){\n\t\t\t\t\treturn \td0.getMonth() == d.getMonth() && d0.getYear() == d.getYear();\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"year\":\n\t\t\t\tdate.setYear(date.getFullYear()+inc);\n\t\t\t\tthis._correctDate(date,d,inc,function(d,d0){\n\t\t\t\t\treturn \td0.getFullYear() == d.getFullYear();\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"hour\":\n\t\t\t\tdate.setHours(date.getHours()+inc);\n\t\t\t\tthis._correctDate(date,d,inc,function(d,d0){\n\t\t\t\t\treturn \td0.getHours() == d.getHours() && Date.datePart(d0,true)== Date.datePart(d,true);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase \"minute\": \tdate.setMinutes(date.getMinutes()+inc); break;\n\t\t\tdefault:\n\t\t\t\twDate.add[mode](date, inc, mode);\n\t\t\t\tbreak;\n\t\t}\n\t\treturn date;\n\t},\n\tdatePart:function(date, copy){\n\t\tif (copy) date = this.copy(date);\n\n\t\t// workaround for non-existent hours\n\t\tvar d = this.copy(date);\n\t\td.setHours(0);\n\t\tif(d.getDate()!=date.getDate()){\n\t\t\tdate.setHours(1);\n\t\t}\n\t\telse{\n\t\t\tdate.setHours(0);\n\t\t}\n\n\t\tdate.setMinutes(0);\n\t\tdate.setSeconds(0);\n\t\tdate.setMilliseconds(0);\n\t\treturn date;\n\t},\n\ttimePart:function(date, copy){\n\t\tif (copy) date = this.copy(date);\n\t\treturn (date.valueOf()/1000 - date.getTimezoneOffset()*60)%86400;\n\t},\n\tcopy:function(date){\n\t\treturn new Date(date.valueOf());\n\t},\n\tequal:function(a,b){\n\t\tif (!a || !b) return false;\n\t\treturn a.valueOf() === b.valueOf();\n\t},\n\tisHoliday:function(day){ \n\t\tday = day.getDay();\n\t\tif (day === 0 || day==6) return \"webix_cal_event\"; \n\t}\n};\n\nexport default wDate;","import i18n from \"../webix/i18n\";\n\nconst Number={\n\tgetConfig: function(value){\n\t\tvar config = {\n\t\t\tdecimalSize:0,\n\t\t\tgroupSize:999,\n\t\t\tprefix:\"\",\n\t\t\tsufix:\"\"\n\t\t};\n\t\tvar parts = value.split(/[0-9].*[0-9]/g);\n\t\tif (parts[0].length)\n\t\t\tconfig.prefix = parts[0];\n\t\tif (parts[1].length)\n\t\t\tconfig.sufix = parts[1];\n\t\tif (config.prefix || config.sufix){\n\t\t\tvalue = value.substr(config.prefix.length, value.length - config.prefix.length - config.sufix.length);\n\t\t}\n\n\t\tvar num = value.indexOf(\"1\");\n\t\tif (num > 0){\n\t\t\tconfig.prefix = value.substr(0, num);\n\t\t\tvalue = value.substr(num);\n\t\t}\n\n\t\tvar dot = value.indexOf(\"0\");\n\t\tif (dot > 0){\n\t\t\tconfig.decimalSize = value.length - dot;\n\t\t\tconfig.decimalDelimiter = value[dot-1];\n\t\t\tvalue = value.substr(0, dot-1);\n\t\t}\n\t\tvar sep = value.match(/[^0-9]/);\n\t\tif (sep){\n\t\t\tconfig.groupSize = value.length - sep.index - 1;\n\t\t\tconfig.groupDelimiter = value[sep.index];\n\t\t}\n\t\treturn config;\n\t},\n\tparse:function(value, config){\n\t\tif (!value || typeof value !== \"string\")\n\t\t\treturn value;\n\n\t\tif (config.prefix)\n\t\t\tvalue = value.toLowerCase().replace(config.prefix.toLowerCase() || \"\", \"\");\n\t\tif (config.sufix)\n\t\t\tvalue = value.toLowerCase().replace(config.sufix.toLowerCase() || \"\", \"\");\n\n\t\tvar decimal = \"\";\n\t\tif (config.decimalDelimiter){\n\t\t\tvar ind = value.indexOf(config.decimalDelimiter);\n\t\t\tif (ind > -1){\n\t\t\t\tdecimal = value.substr(ind+1).replace(/[^0-9]/g, \"\");\n\t\t\t\tdecimal = decimal.substr(0, Math.min(decimal.length, config.decimalSize));\n\t\t\t\tvalue = value.substr(0, ind);\n\t\t\t}\n\t\t}\n\n\t\tvar sign = value[0] === \"-\" ? -1 : 1;\n\t\tvalue = value.replace(/[^0-9]/g, \"\");\n\t\tif (!value)\n\t\t\tvalue = \"0\";\n\n\t\tif (decimal)\n\t\t\tvalue += \".\"+decimal;\n\n\t\treturn parseFloat(value)*sign;\n\t},\n\tformat: function(value, config){ \n\t\tif (value === \"\" || typeof value === \"undefined\") return value;\n\t\t\n\t\tconfig = config||i18n;\n\t\tvalue = parseFloat(value);\n\n\t\tvar sign = value < 0 ? \"-\":\"\";\n\t\tvalue = Math.abs(value);\n\n\t\tif (!config.decimalOptional)\n\t\t\tvalue = value.toFixed(config.decimalSize);\n\n\t\tvar str = value.toString();\n\t\tstr = str.split(\".\");\n\n\t\tvar int_value = \"\";\n\t\tif (config.groupSize){\n\t\t\tvar step = config.groupSize;\n\t\t\tvar i=str[0].length;\n\t\t\tdo {\n\t\t\t\ti-=step;\n\t\t\t\tvar chunk = (i>0)?str[0].substr(i,step):str[0].substr(0,step+i);\n\t\t\t\tint_value = chunk+(int_value?config.groupDelimiter+int_value:\"\");\n\t\t\t} while(i>0);\n\t\t} else\n\t\t\tint_value = str[0];\n\n\t\tif (config.decimalSize)\n\t\t\tstr = sign + int_value + (str[1] ? (config.decimalDelimiter + str[1]) : \"\");\n\t\telse\n\t\t\tstr = sign + int_value;\n\n\t\tif (config.prefix || config.sufix){\n\t\t\treturn config.prefix + str + config.sufix;\n\t\t} else \n\t\t\treturn str;\n\t},\n\tnumToStr:function(config){\n\t\treturn function(value){\n\t\t\treturn Number.format(value, config);\n\t\t};\n\t}\n};\n\nexport default Number;","import en from \"../i18n/en\";\nimport i18n from \"./i18n\";\n\nimport wDate from \"../core/date\";\nimport Number from \"../core/number\";\n\nimport {copy, isArray} from \"../webix/helpers\";\nimport template from \"./template\";\n\n\nfunction extend(base,source){\n\tfor (var method in source){\n\t\tif(typeof(source[method]) == \"object\" && !isArray(source[method])){\n\t\t\tif(!base[method]){\n\t\t\t\tbase[method] = {};\n\t\t\t}\n\t\t\textend(base[method],source[method]);\n\t\t}\n\t\telse\n\t\t\tbase[method] = source[method];\n\t}\n}\n\nconst helpers = [\"fullDateFormat\", \"timeFormat\", \"dateFormat\", \"longDateFormat\", \"parseFormat\", \"parseTimeFormat\"];\n\ni18n.setLocale = function(locale){\n\tif (typeof locale == \"string\")\n\t\tlocale = i18n.locales[locale];\n\tif (locale){\n\t\tlocale.priceSettings  = copy(locale.priceSettings || locale);\n\t\textend(i18n, locale);\n\t}\n\tfor( var i=0; i<helpers.length; i++){\n\t\tvar key = helpers[i];\n\t\tvar utc = i18n[key+\"UTC\"];\n\t\ti18n[key+\"Str\"] = wDate.dateToStr(i18n[key], utc);\n\t\ti18n[key+\"Date\"] = wDate.strToDate(i18n[key], utc);\n\t}\n\n\tconst _price_format = template(i18n.price);\n\tconst _price_settings = i18n.priceSettings || i18n;\n\n\ti18n.intFormat = Number.numToStr({ groupSize:i18n.groupSize, groupDelimiter:i18n.groupDelimiter, decimalSize : 0});\n\ti18n.priceFormat = function(value){ return _price_format(Number.format(value, _price_settings)); };\n\ti18n.numberFormat = Number.format;\n};\n\n\ni18n.locales={ \"en-US\" : en };\ni18n.setLocale(\"en-US\");\n\nexport default i18n;","import env from \"../webix/env\";\nimport {stringify} from \"./stringify\";\nimport DataDriver from \"../load/drivers/index\";\n\n\nconst storage = {};\n\nstorage.prefix = function(scope, storage){\n\tscope = scope + \".\";\n\treturn {\n\t\tput:function(name, data){\n\t\t\treturn storage.put(scope+name, data);\n\t\t},\n\t\tget:function(name){\n\t\t\treturn storage.get(scope+name);\n\t\t},\n\t\tremove:function(name){\n\t\t\treturn storage.remove(scope+name);\n\t\t}\n\t};\n};\n\nstorage.local = {\n\tput:function(name, data){\n\t\tif(name && window.JSON && window.localStorage){\n\t\t\twindow.localStorage.setItem(name, stringify(data));\n\t\t}\n\t},\n\tget:function(name){\n\t\tif(name && window.JSON && window.localStorage){\n\t\t\tvar json = window.localStorage.getItem(name);\n\t\t\tif(!json)\n\t\t\t\treturn null;\n\t\t\treturn DataDriver.json.toObject(json);\n\t\t}else\n\t\t\treturn null;\n\t},\n\tremove:function(name){\n\t\tif(name && window.JSON && window.localStorage){\n\t\t\twindow.localStorage.removeItem(name);\n\t\t}\n\t},\n\tclear:function(){\n\t\twindow.localStorage.clear();\n\t}\n};\n\nstorage.session = {\n\tput:function(name, data){\n\t\tif(name && window.JSON && window.sessionStorage){\n\t\t\twindow.sessionStorage.setItem(name, stringify(data));\n\t\t}\n\t},\n\tget:function(name){\n\t\tif(name && window.JSON && window.sessionStorage){\n\t\t\tvar json = window.sessionStorage.getItem(name);\n\t\t\tif(!json)\n\t\t\t\treturn null;\n\t\t\treturn DataDriver.json.toObject(json);\n\t\t}else\n\t\t\treturn null;\n\t},\n\tremove:function(name){\n\t\tif(name && window.JSON && window.sessionStorage){\n\t\t\twindow.sessionStorage.removeItem(name);\n\t\t}\n\t},\n\tclear:function(){\n\t\twindow.sessionStorage.clear();\n\t}\n};\n\nstorage.cookie = {\n\tput:function(name, data, domain, expires ){\n\t\tif(name && window.JSON){\n\t\t\tdocument.cookie = name + \"=\" + escape(stringify(data)) +\n\t\t\t(( expires && (expires instanceof Date)) ? \";expires=\" + expires.toUTCString() : \"\" ) +\n\t\t\t(( domain ) ? \";domain=\" + domain : \"\" ) + \n\t\t\t(( env.https ) ? \";secure\" : \"\");\n\t\t}\n\t},\n\tgetRaw:function(check_name){\n\t\t// first we'll split this cookie up into name/value pairs\n\t\t// note: document.cookie only returns name=value, not the other components\n\t\tvar a_all_cookies = document.cookie.split( \";\" );\n\t\tvar a_temp_cookie = \"\";\n\t\tvar cookie_name = \"\";\n\t\tvar cookie_value = \"\";\n\t\tvar b_cookie_found = false; // set boolean t/f default f\n\n\t\tfor (var i = 0; i < a_all_cookies.length; i++ ){\n\t\t\t// now we'll split apart each name=value pair\n\t\t\ta_temp_cookie = a_all_cookies[i].split( \"=\" );\n\n\t\t\t// and trim left/right whitespace while we're at it\n\t\t\tcookie_name = a_temp_cookie[0].replace(/^\\s+|\\s+$/g, \"\");\n\n\t\t\t// if the extracted name matches passed check_name\n\t\t\tif (cookie_name == check_name ){\n\t\t\t\tb_cookie_found = true;\n\t\t\t\t// we need to handle case where cookie has no value but exists (no = sign, that is):\n\t\t\t\tif ( a_temp_cookie.length > 1 ){\n\t\t\t\t\tcookie_value = unescape( a_temp_cookie[1].replace(/^\\s+|\\s+$/g, \"\") );\n\t\t\t\t}\n\t\t\t\t// note that in cases where cookie is initialized but no value, null is returned\n\t\t\t\treturn cookie_value;\n\t\t\t}\n\t\t\ta_temp_cookie = null;\n\t\t\tcookie_name = \"\";\n\t\t}\n\t\tif ( !b_cookie_found ){\n\t\t\treturn null;\n\t\t}\n\t\treturn null;\n\t},\n\tget:function(name){\n\t\tif(name && window.JSON){\n\t\t\tvar json = this.getRaw(name);\n\t\t\tif(!json)\n\t\t\t\treturn null;\n\t\t\treturn DataDriver.json.toObject(unescape(json));\n\t\t}else\n\t\t\treturn null;\n\t},\n\tremove:function(name, domain){\n\t\tif(name && this.getRaw(name)) \n\t\t\tdocument.cookie = name + \"=\" + (( domain ) ? \";domain=\" + domain : \"\") + \";expires=Thu, 01-Jan-1970 00:00:01 GMT\";\n\t},\n\tclear:function(domain){\n\t\tvar cookies = document.cookie.split(\";\");\n\t\tfor (var i = 0; i < cookies.length; i++)\n\t\t\tdocument.cookie = /^[^=]+/.exec(cookies[i])[0] + \"=\" + (( domain ) ? \";domain=\" + domain : \"\") + \";expires=Thu, 01-Jan-1970 00:00:01 GMT\";\t\t\n\t}\n};\n\nexport default storage;","import {addCss, addStyle, removeCss, removeStyle, remove, insertBefore, create} from \"../webix/html\";\nimport env from \"../webix/env\";\nimport {$$} from \"../ui/core\";\nimport {assert} from \"../webix/debug\";\n\n\nenv.printPPI = 96;\nenv.printMargin = 0.75*env.printPPI;\n\nvar margin = env.printMargin;\nvar papers = { \"a4\":\"A4\", \"a3\":\"A3\", \"letter\":\"letter\"};\nvar fits = { page:true, data:true};\nvar modes = { portrait:true, landscape:true};\n\nvar sizes = {//inches, real size is value*ppi\n\t\"A3\": { width: 11.7, height: 16.5 },\n\t\"A4\": { width: 8.27, height:11.7 },\n\t\"letter\": { width: 8.5, height:11 }\n};\n\nconst print = function(id, options){\n\n\tvar view = $$(id);\n\tif (view && view.$printView)\n\t\tview = view.$printView();\n\n\tassert(view, \"non-existing view for printing\");\n\tif(!view) return;\n\n\tif(view.callEvent)\n\t\tview.callEvent(\"onBeforePrint\", [options]);\n\n\toptions = _checkOptions(options);\n\t_beforePrint(options);\n\n\t//try widget's custom logic first, sometimes it may deny \n\tif(!view.$customPrint || view.$customPrint(options) === true) \n\t\t_print(view, options);\n\n\t_afterPrint(options);\n};\n\n/*processing print options*/\nfunction _checkOptions(options){\n\t\n\toptions = options || {};\n\toptions.paper = papers[(options.paper || \"\").toLowerCase()] || \"A4\";\n\toptions.mode = modes[options.mode] ? options.mode : \"portrait\";\n\toptions.fit = fits[options.fit] ? options.fit: \"page\";\n\toptions.scroll = options.scroll || false;\n\toptions.size = sizes[options.paper];\n\n\toptions.margin = (options.margin || options.margin === 0) ? options.margin : {};\n\tmargin = isNaN(options.margin*1) ? margin : options.margin;\n\toptions.margin = {\n\t\ttop:(options.margin.top || options.margin.top === 0) ? options.margin.top: margin, \n\t\tbottom:(options.margin.bottom || options.margin.bottom === 0) ? options.margin.bottom: margin, \n\t\tright:(options.margin.right || options.margin.right === 0) ? options.margin.right: margin, \n\t\tleft:(options.margin.left || options.margin.left === 0) ? options.margin.left: margin\n\t};\n\n\treturn options;\n}\n\n/*preparing printing environment*/\nfunction _beforePrint(options){\n\taddCss(document.body,\"webix_print\");\n\n\tif(options.docHeader) _getHeaderFooter(\"Header\", options);\n\tif(options.docFooter) _getHeaderFooter(\"Footer\", options);\n\n\t/* static print styles are located at 'css/print.less'*/\n\tvar cssString = \"@media print { \"+\n\t\t\"@page{ size:\"+options.paper+\" \"+options.mode+\";\"+\n\t\t\t\"margin-top:\"+options.margin.top+\"px;margin-bottom:\"+options.margin.bottom+\n\t\t\t\"px;margin-right:\"+options.margin.right+\"px;margin-left:\"+options.margin.left+\n\t\t\"px;}\"+\n\t\"}\";\n\taddStyle(cssString, \"print\");\n}\n\n/*cleaning environment*/\nfunction _afterPrint(options){\n\tremoveCss(document.body, \"webix_print\");\n\tremoveStyle(\"print\");\n\n\tif(options.docHeader) remove(options.docHeader);\n\tif(options.docFooter) remove(options.docFooter);\n}\n\n/*common print actions */\nfunction _print(view, options){\n\tvar doc = view.$view.cloneNode(true);\n\n\t//copy data from all canvases\n\tvar canvases = view.$view.getElementsByTagName(\"canvas\");\n\tif(canvases.length)\n\t\tfor(var i = canvases.length-1; i >=0; i--){\n\t\t\tvar destCtx = doc.getElementsByTagName(\"canvas\")[i].getContext(\"2d\");\n\t\t\tdestCtx.drawImage(canvases[i], 0, 0);\n\t\t}\n\n\tinsertBefore(doc, options.docFooter, document.body);\n\n\taddCss(doc,\"webix_ui_print\");\n\tif(!options.scroll && ((view._dataobj && view.data && view.data.pull) || view.getBody))\n\t\taddCss(doc, \"webix_print_noscroll\");\n\n\twindow.print();\n\n\tremove(doc);\n}\n/*custom header nad footer*/\nfunction _getHeaderFooter(group, options){\n\tvar header =  create(\"div\", { \n\t\t\"class\":\"webix_view webix_print_\"+group.toLowerCase(),\n\t\t\"style\":\"height:0px;visibility:hidden;\"\n\t}, options[\"doc\"+group]);\n\n\tif(group ===\"Header\")\n\t\tinsertBefore(header, document.body.firstChild);\n\telse\n\t\tdocument.body.appendChild(header);\n\n\toptions[\"doc\"+group] = header;\n}\n\nexport default print;","const patterns = {\n\tphone:{ mask:\"+# (###) ###-####\", allow:/[0-9]/g },\n\tcard: { mask:\"#### #### #### ####\", allow:/[0-9]/g },\n\tdate: { mask:\"####-##-## ##:##\", allow:/[0-9]/g }\n};\n\nexport default patterns;","import {ui, $$} from \"../ui/core\";\nimport {isUndefined} from \"../webix/helpers\";\nimport {create} from \"../webix/html\";\nimport {assert} from \"../webix/debug\";\n\nconst fullscreen = {\n\tset:function(view, config){\n\t\tconfig = config || {};\n\n\t\tif(this._view)\n\t\t\tthis.exit();\n\n\t\tif($$(view))\n\t\t\tview = $$(view);\n\t\telse{\n\t\t\tif(typeof view == \"string\")\n\t\t\t\tview = document.getElementById(view);\n\t\t\tif(view instanceof Element)\n\t\t\t\tview = {$view: view, $html: true};\n\t\t\tassert(view, \"Incorrect view for fullscreen mode\");\n\t\t}\n\n\t\tthis._view = view;\n\n\t\tconst viewConfig = view.config;\n\t\tif(view.setPosition){\n\t\t\tthis._pos = {left: view.config.left, top: view.config.top};\n\t\t\tview.setPosition(0,0);\n\t\t\tviewConfig.fullscreen = true;\n\t\t\tview.resize();\n\t\t}\n\t\telse{\n\t\t\tthis._fullscreen = ui({\n\t\t\t\tview:\"window\",\n\t\t\t\thead: this._getHeadConfig(config),\n\t\t\t\tfullscreen:true,\n\t\t\t\t//better resize logic\n\t\t\t\tbody:{rows:[]}\n\t\t\t});\n\n\t\t\tif(viewConfig)\n\t\t\t\tthis._sizes = {\n\t\t\t\t\twidth: viewConfig.width, minWidth: viewConfig.minWidth, maxWidth: viewConfig.maxWidth,\n\t\t\t\t\theight: viewConfig.height, minHeight: viewConfig.minHeight, maxHeight: viewConfig.maxHeight\n\t\t\t\t};\n\n\t\t\tif(view.getParentView && view.getParentView()){\n\t\t\t\tthis._parent = view.getParentView();\n\n\t\t\t\tif(this._parent.index)\n\t\t\t\t\tthis._pos = {\n\t\t\t\t\t\tindex: this._parent.index(view),\n\t\t\t\t\t\tactive: (this._parent.getActiveId ? this._parent.getActiveId() == viewConfig.id : false)\n\t\t\t\t\t};\n\t\t\t}\n\t\t\telse{\n\t\t\t\tthis._parent = view.$view.parentNode;\n\t\t\t\tthis._pos = create(\"div\");\n\n\t\t\t\t//save old position\n\t\t\t\tthis._parent.replaceChild(this._pos, view.$view);\n\t\t\t}\n\n\t\t\tthis._fullscreen.getBody().addView(view.$html ? {view:\"template\", content:view.$view, css:\"webix_fullscreen_html\"} : view);\n\n\t\t\tthis._fullscreen.show();\n\t\t\tthis._setSizes(view);\n\t\t}\n\t},\n\texit:function(){\n\t\tif(this._view){\n\t\t\tconst viewConfig = this._view.config;\n\t\t\tif(this._view.setPosition){\n\t\t\t\tviewConfig.fullscreen = false;\n\t\t\t\tthis._view.setPosition(this._pos.left, this._pos.top);\n\t\t\t\tthis._view.resize();\n\t\t\t}\n\t\t\telse{\n\t\t\t\tif(this._parent instanceof Element){\n\t\t\t\t\tthis._view._parent_cell = null;\n\t\t\t\t\tif(this._view._set_inner)\n\t\t\t\t\t\tthis._view._set_inner(this._view.config);\n\t\t\t\t\tthis._parent.replaceChild(this._view.$view, this._pos);\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tif(!isUndefined(this._pos)){\n\t\t\t\t\t\tthis._parent.addView(this._view, this._pos.index);\n\t\t\t\t\t\tif(this._pos.active)\n\t\t\t\t\t\t\tthis._view.show(false, false);\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tthis._view._parent_cell = this._parent;\n\t\t\t\t\t\tthis._parent._replace(this._view);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._setSizes(this._view, this._sizes);\n\n\t\t\t\t//prevent view destruction (with layout)\n\t\t\t\tif(!this._view.$html)\n\t\t\t\t\tthis._fullscreen.getBody()._cells = [];\n\n\t\t\t\t//we can't set head false with replace, so we need to close win\n\t\t\t\tthis._fullscreen.close();\n\t\t\t}\n\t\t\tthis._clearValues();\n\t\t}\n\t},\n\t_clearValues:function(){\n\t\tdelete this._parent;\n\t\tdelete this._view;\n\t\tdelete this._sizes;\n\t\tdelete this._pos;\n\t},\n\t_setSizes:function(view, sizes){\n\t\tif(!view.$html){\n\t\t\tsizes = sizes || {height:0, minHeight:0, maxHeight:0, width:0, minWidth:0, maxWidth:0};\n\t\t\tview.define(sizes);\n\t\t\tview.resize();\n\t\t}\n\t},\n\t_getHeadConfig:function(config){\n\t\tif(config.head === false || typeof config.head == \"object\")\n\t\t\treturn config.head;\n\t\telse{\n\t\t\treturn {\n\t\t\t\tcols:[\n\t\t\t\t\t{template:config.head||\"\", type:\"header\", borderless:true},\n\t\t\t\t\t{view:\"icon\", icon:\"wxi-close\", click:()=>{\n\t\t\t\t\t\tthis.exit();\n\t\t\t\t\t}}\n\t\t\t\t]\n\t\t\t};\n\t\t}\n\t}\n};\n\nexport default fullscreen;","/*\n\tCommon helpers\n*/\n\nexport * from \"./consts\";\nexport * from \"./helpers\";\nexport * from \"./htmlevents\";\nexport * from \"./customevents\";\nexport * from \"./stringify\";\nexport * from \"./export\";\nexport * from \"./message\";\nexport * from \"./api\";\nexport * from \"./init\";\n\nimport \"./ie8\";\n\n/*\n\tNext two ugly blocks are here for IE8 compatibility\n\trollup converts \"import * as\" to Object.freeze which doesn't work in IE8\n\n\tfor modern browsers it can be replaced with \n*/\n\n//\timport * as html from \"./html\";\nimport { denySelect, allowSelect, index, createCss, addStyle, removeStyle, create, getValue, remove, insertBefore, locate, offset, posRelative, pos, preventEvent, stopEvent, triggerEvent, addCss, removeCss, getTextSize, download, _getClassName, setSelectionRange, getSelectionRange, addMeta } from \"./html\";\nconst html = { denySelect, allowSelect, index, createCss, addStyle, removeStyle, create, getValue, remove, insertBefore, locate, offset, posRelative, pos, preventEvent, stopEvent, triggerEvent, addCss, removeCss, getTextSize, download, _getClassName, setSelectionRange, getSelectionRange, addMeta };\nexport { html };\n\n//\timport * as skin from \"./skin\";\nexport { skin } from \"./skin\";\n\nexport {debug} from \"./debug\";\n\nexport {default as i18n} from \"./locale\";\nexport {default as ready} from \"./ready\";\nexport {default as env} from \"./env\";\nexport {default as color} from \"./color\";\nexport {default as csv} from \"./csv\";\nexport {default as clipbuffer} from \"./clipbuffer\";\nexport {default as storage} from \"./storage\";\nexport {default as template} from \"./template\";\nexport {default as type} from \"./type\";\nexport {default as editors} from \"./editors\";\nexport {default as animate} from \"./animate\";\nexport {default as print} from \"./print\";\nexport {default as rules} from \"./rules\";\nexport {default as patterns} from \"./patterns\";\nexport {default as fullscreen} from \"./fullscreen\";","import {ajax} from \"../load/ajax\";\nimport promise from \"../thirdparty/promiz\";\nimport {bind} from \"../webix/helpers\";\nimport {callEvent} from \"../webix/customevents\";\n\n\nvar error_key = \"__webix_remote_error\";\n\nfunction RemoteContext(url, config){\n\tthis._proxy = {};\n\tthis._queue = [];\n\tthis._url = url;\n\tthis._key = \"\";\n\n\tif (config)\n\t\tthis._process(config);\n\telse\n\t\tthis._ready = ajax(url)\n\t\t\t.then(function(data){\n\t\t\t\treturn data.text();\n\t\t\t})\n\t\t\t.then(bind(function(text){\n\t\t\t\ttext = text.split(\"/*api*/\")[1];\n\t\t\t\tthis._process(JSON.parse(text));\n\t\t\t\treturn this._proxy;\n\t\t\t}, this));\n}\nRemoteContext.prototype = {\n\t_process:function(config){\n\t\tif (config.$key)\n\t\t\tthis._key = config.$key;\n\t\tif (config.$vars)\n\t\t\tfor (var key in config.$vars)\n\t\t\t\tthis._proxy[key] = config.$vars[key];\n\n\t\tthis._parse(config, this._proxy, \"\");\n\t},\n\t_parse:function(api, obj, prefix){\n\t\tfor (var key in api){\n\t\t\tif (key === \"$key\" || key === \"$vars\") continue;\n\t\t\tvar val = api[key];\n\t\t\tif (typeof val == \"object\"){\n\t\t\t\tvar sub = obj[key] = {};\n\t\t\t\tthis._parse(val, sub, prefix+key+\".\");\n\t\t\t} else\n\t\t\t\tobj[key] = this._proxy_call(this, prefix+key);\n\t\t}\n\t},\n\t_call:function(name, args){\n\t\tvar def = this._deffer(this, name, args);\n\t\tthis._queue.push(def);\n\t\tthis._start_queue();\n\t\treturn def;\n\t},\n\t_start_queue:function(){\n\t\tif (!this._timer)\n\t\t\tthis._timer = setTimeout(bind(this._run_queue, this), 1);\n\t},\n\t_run_queue:function(){\n\t\tvar data = [], defs = this._queue;\n\t\tfor (var i=0; i<this._queue.length; i++){\n\t\t\tvar def = this._queue[i];\n\t\t\tif (def.$sync){\n\t\t\t\tdefs.splice(i,1); i--;\n\t\t\t} else\n\t\t\t\tdata.push({ name: def.$name, args: def.$args });\t\n\t\t}\n\n\t\tif (defs.length){\n\t\t\tvar request = ajax();\n\t\t\tvar pack = this._pack(data);\n\t\t\tcallEvent(\"onBeforeRemoteCall\", [request, pack, {}]);\n\t\t\tvar promise = request.post(this._url, pack)\n\t\t\t\t.then(function(response){\n\t\t\t\t\tvar data = response.json();\n\t\t\t\t\tvar results = data.data;\n\t\t\t\t\tfor (var i=0; i<results.length; i++){\n\t\t\t\t\t\tlet res = results[i];\n\t\t\t\t\t\tlet error = results[i] && results[i][error_key];\n\t\t\t\t\t\tif (error){\n\t\t\t\t\t\t\tcallEvent(\"onRemoteError\", [error]);\n\t\t\t\t\t\t\tdefs[i].reject(error);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tdefs[i].resolve(res);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\t\t\n\t\t\t\t}, function(res){\n\t\t\t\t\tfor (var i=0; i<defs.length; i++)\n\t\t\t\t\t\tdefs[i].reject(res);\n\t\t\t\t\tthrow res;\n\t\t\t\t});\n\t\t\tcallEvent(\"onAfterRemoteCall\", [promise]);\n\t\t}\n\n\t\tthis._queue = [];\n\t\tthis._timer = null;\n\t},\n\t_sync:function(){\n\t\tvar value = null;\n\t\tthis.$sync = true;\n\t\tvar data = [{ name: this.$name, args: this.$args }];\n\n\t\ttry {\n\t\t\tvar request = ajax();\n\t\t\tvar pack = this.$context._pack(data);\n\t\t\tcallEvent(\"onBeforeRemoteCall\", [request, pack, { sync: true }]);\n\t\t\tvar xhr = request.sync().post(this.$context._url, pack);\n\t\t\tcallEvent(\"onAfterRemoteCall\", [null]);\n\t\t\tvalue = JSON.parse(xhr.responseText).data[0];\n\t\t\tif (value[error_key])\n\t\t\t\tvalue = null;\n\t\t} catch(e){} //eslint-disable-line\n\n\t\treturn value;\n\t},\n\t_deffer:function(master, name, args){\n\t\tvar pr = promise.defer();\n\t\tpr.sync = master._sync;\n\t\tpr.$name = name;\n\t\tpr.$args = args;\n\t\tpr.$context = this;\n\n\t\treturn pr;\n\t},\n\t_proxy_call:function(master, name){\n\t\treturn function(){\n\t\t\treturn master._call(name, [].slice.call(arguments));\n\t\t};\n\t},\n\t_getProxy:function(){\n\t\treturn this._ready || this._proxy;\n\t},\n\t_pack:function(obj){\n\t\treturn {\n\t\t\tkey: this._key,\n\t\t\tpayload:obj\n\t\t};\n\t}\n};\n\nfunction getApi(url, config){\n\tvar ctx = new RemoteContext(url, config);\n\tvar proxy = ctx._getProxy();\n\tfor (var key in proxy)\n\t\tremote[key] = proxy[key];\n\n\treturn proxy;\n}\n\nconst remote = function(url, config){\n\tif (typeof url === \"object\"){\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tconfig = url;\n\t\turl = scripts[scripts.length - 1].src;\n\t\treturn getApi(url, config);\n\t} else \n\t\treturn getApi(url, config);\n};\n\nexport default remote;","import {addMeta} from \"../webix/html\";\nimport env from \"../webix/env\";\nimport state from \"../core/state\";\n\nimport {isUndefined, delay} from \"../webix/helpers\";\nimport {resize} from \"../ui/helpers\";\nimport {event} from \"../webix/htmlevents\";\nimport {callEvent, attachEvent} from \"../webix/customevents\";\n\nfunction orientation(){\n\tvar new_orientation = !!(window.orientation%180);\n\tif (state.orientation === new_orientation) return;\n\tstate.orientation = new_orientation;\t\n\tcallEvent(\"onRotate\", [new_orientation]);\n}\n\nif(env.touch){\n\tstate.orientation = !!((isUndefined(window.orientation)?90:window.orientation)%180);\n\tevent(window, (\"onorientationchange\" in window ?\"orientationchange\":\"resize\"), orientation);\n}\n\nexport default function fullScreen(){\n\tif (!env.touch) return;\n\n\taddMeta(\"apple-mobile-web-app-capable\",\"yes\");\n\taddMeta(\"viewport\",\"initial-scale=1, maximum-scale=1, user-scalable=no, shrink-to-fit=no\");\n\n\tvar fix = function(){\n\t\tvar x = window.innerWidth;\n\t\tvar y = window.innerHeight;\n\n\t\tif (y){\n\t\t\tdocument.body.style.height = y+\"px\";\n\t\t\tdocument.body.style.width = x+\"px\";\n\t\t}\n\n\t\tstate._freeze_resize = false;\n\t\tresize();\n\t};\n\n\tvar onrotate = function(){ \n\t\tstate._freeze_resize = true;\n\t\tdelay(fix,null, [], 500);\n\t};\n\n\n\tattachEvent(\"onRotate\", onrotate);\n\torientation();\n\tdelay(onrotate);\n\n}","import {preventEvent} from \"../webix/html\";\nimport template from \"../webix/template\";\nimport {extend} from \"../webix/helpers\";\nimport {$$} from \"../ui/core\";\nimport i18n from \"../webix/i18n\";\nimport {_event} from \"../webix/htmlevents\";\nimport wDate from \"../core/date\";\n\n\nconst datafilter = {\n\ttextWaitDelay:500,\n\t\"summColumn\":{\n\t\tgetValue:function(node){ return node.firstChild.innerHTML; },\n\t\tsetValue: function(){},\n\t\trefresh:function(master, node, value){ \n\t\t\tvar result = 0;\n\t\t\tmaster.mapCells(null, value.columnId, null, 1, function(value){\n\t\t\t\tvalue = value*1;\n\t\t\t\tif (!isNaN(value))\n\t\t\t\t\tresult+=value;\n\t\t\t}, true);\n\n\t\t\tif (value.format)\n\t\t\t\tresult = value.format(result);\n\t\t\tif (value.template)\n\t\t\t\tresult = value.template({value:result});\n\n\t\t\tnode.firstChild.innerHTML = result;\n\t\t},\n\t\ttrackCells:true,\n\t\trender:function(master, config){ \n\t\t\tif (config.template)\n\t\t\t\tconfig.template = template(config.template);\n\t\t\treturn \"\"; \n\t\t}\n\t},\n\t\"masterCheckbox\":{\n\t\tgetValue:function(){},\n\t\tsetValue:function(){},\n\t\tgetHelper:function(node, config){\n\t\t\treturn {\n\t\t\t\tcheck:function(){ config.checked = false; node.onclick(); },\n\t\t\t\tuncheck:function(){ config.checked = true; node.onclick(); },\n\t\t\t\tisChecked:function(){ return config.checked; }\n\t\t\t};\n\t\t},\n\t\trefresh:function(master, node, config){\n\t\t\tnode.onclick = function(){\n\t\t\t\tthis.getElementsByTagName(\"input\")[0].checked = config.checked = !config.checked;\n\t\t\t\tvar column = master.getColumnConfig(config.columnId);\n\t\t\t\tvar checked = config.checked ? column.checkValue : column.uncheckValue;\n\t\t\t\tmaster.data.each(function(obj){\n\t\t\t\t\tobj[config.columnId] = checked;\n\t\t\t\t\tmaster.callEvent(\"onCheck\", [obj.id, config.columnId, checked]);\n\t\t\t\t\tthis.callEvent(\"onStoreUpdated\", [obj.id, obj, \"save\"]);\n\t\t\t\t});\n\t\t\t\tmaster.refresh();\n\t\t\t};\n\t\t},\n\t\trender:function(master, config){ \n\t\t\treturn \"<input type='checkbox' \"+(config.checked?\"checked='1'\":\"\")+\">\"; \n\t\t}\n\t},\n\t\"textFilter\":{\n\t\tgetInputNode:function(node){ return node.firstChild?node.firstChild.firstChild:{ value: null }; },\n\t\tgetValue:function(node){ return this.getInputNode(node).value;  },\n\t\tsetValue:function(node, value){ this.getInputNode(node).value = value;  },\n\t\trefresh:function(master, node, value){\n\t\t\tnode.component = master._settings.id;\n\t\t\tmaster.registerFilter(node, value, this);\n\t\t\tnode._comp_id = master._settings.id;\n\t\t\tif (value.value && this.getValue(node) != value.value) this.setValue(node, value.value);\n\t\t\tnode.onclick = preventEvent;\n\t\t\t_event(node, \"keydown\", this._on_key_down);\n\t\t},\n\t\trender:function(master, config){\n\t\t\tif (this.init) this.init(config);\n\t\t\tconfig.css = \"webix_ss_filter\"; \n\t\t\treturn \"<input \"+(config.placeholder?(\"placeholder=\\\"\"+config.placeholder+\"\\\" \"):\"\")+\"type='text'>\"; \n\t\t},\n\t\t_on_key_down:function(e){\n\t\t\tvar id = this._comp_id;\n\n\t\t\t//tabbing through filters must not trigger filtering\n\t\t\t//we can improve this functionality by preserving initial filter value\n\t\t\t//and comparing new one with it\n\t\t\tif ((e.which || e.keyCode) == 9) return;\n\n\t\t\tif (this._filter_timer) window.clearTimeout(this._filter_timer);\n\t\t\tthis._filter_timer=window.setTimeout(function(){\n\t\t\t\tvar ui = $$(id);\n\t\t\t\t//ensure that ui is not destroyed yet\n\t\t\t\tif (ui) ui.filterByAll();\n\t\t\t},datafilter.textWaitDelay);\n\t\t}\n\t},\n\t\"selectFilter\":{\n\t\tgetInputNode:function(node){ return node.firstChild?node.firstChild.firstChild:{ value: null}; },\n\t\tgetValue:function(node){ return this.getInputNode(node).value;  },\n\t\tsetValue:function(node, value){ this.getInputNode(node).value = value;  },\n\t\trefresh:function(master, node, value){\n\t\t\t//value - config from header { contet: }\n\t\t\tvalue.compare = value.compare || function(a,b){ return a == b; };\n\n\t\t\tnode.component = master._settings.id;\n\t\t\tmaster.registerFilter(node, value, this);\n\n\t\t\tconst data = datafilter._get_data(master, value);\n\t\t\tif (value.emptyOption !== false)\n\t\t\t\tdata.unshift({id:\"\", value:value.emptyOption||\"\"});\n\n\t\t\t//slow in IE\n\t\t\t//http://jsperf.com/select-options-vs-innerhtml\n\n\t\t\tlet select = document.createElement(\"select\");\n\t\t\tfor (let i = 0; i < data.length; i++){\n\t\t\t\tlet option = document.createElement(\"option\");\n\t\t\t\toption.value = data[i].id;\n\t\t\t\toption.text = data[i].value;\n\t\t\t\tselect.add(option);\n\t\t\t}\n\n\t\t\tnode.firstChild.innerHTML = \"\";\n\t\t\tnode.firstChild.appendChild(select);\n\n\t\t\tif (value.value) this.setValue(node, value.value);\n\t\t\tnode.onclick = preventEvent;\n\n\t\t\tselect._comp_id = master._settings.id;\n\t\t\t_event(select, \"change\", this._on_change);\n\t\t},\n\t\trender:function(master, config){\n\t\t\tif (this.init) this.init(config);\n\t\t\tconfig.css = \"webix_ss_filter\"; return \"\"; },\n\t\t_on_change:function(){ \n\t\t\t$$(this._comp_id).filterByAll();\n\t\t}\n\t},\n\t_get_data:function(master, value){\n\t\tlet data;\n\t\tlet options = value.options;\n\n\t\tif (options){\n\t\t\tdata = master._collectValues.call(options, \"id\", \"value\");\n\t\t} else\n\t\t\tdata = master.collectValues(value.columnId, value.collect);\n\n\t\treturn data;\n\t}\n};\n\ndatafilter.serverFilter = extend({\n\t$server: true,\n\t_on_key_down:function(e){\n\t\tvar id = this._comp_id,\n\t\t\tcode = (e.which || e.keyCode);\n\n\t\t//ignore tab and navigation keys\n\t\tif (code == 9 || ( code >= 33 &&  code <= 40)) return;\n\t\tif (this._filter_timer) window.clearTimeout(this._filter_timer);\n\t\tthis._filter_timer=window.setTimeout(function(){\n\t\t\t$$(id).filterByAll();\n\t\t},datafilter.textWaitDelay);\n\t}\n}, datafilter.textFilter);\n\ndatafilter.serverSelectFilter = extend({\n\t$server: true,\n\t_on_change:function(){\n\t\tvar id = this._comp_id;\n\t\t$$(id).filterByAll();\n\t}\n}, datafilter.selectFilter);\n\ndatafilter.numberFilter = extend({\n\tinit:function(config){\n\t\tconfig.prepare = function(value){\n\t\t\tvar equality = (value.indexOf(\"=\") != -1);\n\t\t\tvar intvalue = this.format(value);\n\t\t\tif (intvalue === \"\") return \"\";\n\n\t\t\tvar compare;\n\t\t\tif (value.indexOf(\">\") != -1){\n\t\t\t\tcompare = this._greater;\n\t\t\t}\n\t\t\telse if (value.indexOf(\"<\") != -1){\n\t\t\t\tcompare = this._lesser;\n\t\t\t}\n\n\t\t\tif (compare && equality) {\n\t\t\t\tconfig.compare = (a,b) => this._equal(a,b) || compare(a,b);\n\t\t\t} else {\n\t\t\t\tconfig.compare = compare || this._equal; \n\t\t\t}\n\n\t\t\treturn intvalue;\n\t\t};\n\t},\n\tformat:function(value){\n\t\treturn value.replace(/[^\\-.0-9]/g,\"\");\n\t},\n\t_greater:function(a,b){ return a*1>b; },\n\t_lesser:function(a,b){ return a!==\"\" && a*1<b; },\n\t_equal:function(a,b){ return a !== \"\" && a*1==b; }\n}, datafilter.textFilter);\n\ndatafilter.dateFilter = extend({\n\tformat:function(value){\n\t\tif (value === \"\") return \"\";\n\t\tvar date = new Date();\n\n\t\tif (value.indexOf(\"today\") != -1){\n\t\t\tdate = wDate.dayStart(date);\n\t\t} else if (value.indexOf(\"now\") == -1){\n\t\t\tvar parts = value.match(/[0-9]+/g);\n\t\t\tif (!parts||!parts.length) return \"\";\n\t\t\tif (parts.length < 3){\n\t\t\t\tparts.reverse();\n\t\t\t\tdate = new Date(parts[0], (parts[1]||1)-1, 1);\n\t\t\t} else\n\t\t\t\tdate = i18n.dateFormatDate(value.replace(/^[>< =]+/,\"\"));\n\t\t}\n\t\treturn date.valueOf();\n\t}\n}, datafilter.numberFilter);\n\nexport default datafilter;","import {assert} from \"../webix/debug\";\nimport {debug_size_box_start, debug_size_box_end} from \"../webix/debug\";\n\nimport {callEvent} from \"../webix/customevents\";\nimport {insertBefore, remove} from \"../webix/html\";\nimport {extend, _power_array, isUndefined, copy} from \"../webix/helpers\";\nimport {_each} from \"../ui/helpers\";\n\nimport {$$,ui,protoUI} from \"../ui/core\";\n\nimport state from \"../core/state\";\nimport IdSpace from \"../core/idspace\";\nimport EventSystem from \"../core/eventsystem\";\n\nimport base from \"./baseview\";\n\nconst api = {\n\tname:\"baselayout\",\n\trestore:function(state, factory, configOnly){\n\t\tvar out = this._restore(copy(state), factory);\n\t\tif (configOnly)\n\t\t\treturn out;\n\t\telse\n\t\t\tui((out.cols || out.rows), this);\n\t},\n\t_restore:function(state, factory){\n\t\tif (state.$layout){\n\t\t\tvar sub = state.cols || state.rows;\n\t\t\tfor (var i = 0; i < sub.length; i++) {\n\t\t\t\tsub[i] = this._restore(sub[i], factory);\n\t\t\t}\n\t\t} else {\n\t\t\treturn factory.call(this, state);\n\t\t}\n\n\t\treturn state;\n\t},\n\tserialize:function(serializer){\n\t\tvar out = [];\n\t\tvar childs = this.getChildViews();\n\n\t\tfor (var i=0; i<childs.length; i++){\n\t\t\tvar sub = childs[i];\n\t\t\tif (sub.movePortlet){\n\t\t\t\tvar child = sub.getChildViews();\n\t\t\t\tout.push(serializer.call(this, child[child.length-1]));\n\t\t\t} else if (sub.serialize){\n\t\t\t\t// some kind of layout\n\t\t\t\tout.push(sub.serialize(serializer, true));\n\t\t\t} else {\n\t\t\t\t// leaf view\n\t\t\t\tout.push(serializer.call(this, sub));\n\t\t\t}\n\t\t}\n\n\t\tvar obj = { $layout: true, type: this.config.type };\n\t\tif (this.config.rows)\n\t\t\tobj.rows = out;\n\t\telse\n\t\t\tobj.cols = out;\n\n\t\treturn obj;\n\t},\n\t$init:function(config){\n\t\tthis.$ready.push(this._parse_cells);\n\t\tthis._dataobj  = this._contentobj;\n\t\tthis._layout_sizes = [];\n\t\tthis._responsive = [];\n\t\tthis._padding = { top:0, left:0, right:0, bottom:0 };\n\n\t\tif (config.$topView){\n\t\t\tconfig.borderless = true;\n\t\t\tconfig._inner = { top:true, left:true, bottom:true, right:true };\n\t\t}\n\n\t\tif (config.isolate)\n\t\t\textend(this, IdSpace);\n\t},\n\trows_setter:function(value){\n\t\tthis._vertical_orientation = 1;\n\t\tthis._collection = value;\n\t\treturn true;\n\t},\n\tcols_setter:function(value){\n\t\tthis._vertical_orientation = 0;\n\t\tthis.$view.style.whiteSpace = \"nowrap\";\n\t\tthis._collection = value;\n\t\treturn true;\n\t},\n\t_remove:function(view){\n\t\tvar index = _power_array.find.call(this._cells, view);\n\t\tif(this._beforeRemoveView)\n\t\t\tthis._beforeRemoveView(index);\n\t\t_power_array.removeAt.call(this._cells, index);\n\t\tthis.resizeChildren(true);\n\t},\n\t_replace:function(new_view,target_id){\n\t\tif (isUndefined(target_id)){\n\t\t\tfor (var i=0; i < this._cells.length; i++)\n\t\t\t\tthis._cells[i].destructor();\n\t\t\tthis._collection = new_view;\n\t\t\tthis._parse_cells();\n\t\t} else {\n\t\t\tvar source;\n\t\t\tif (typeof target_id == \"number\"){\n\t\t\t\tif (target_id<0 || target_id > this._cells.length)\n\t\t\t\t\ttarget_id = this._cells.length;\n\t\t\t\t_power_array.insertAt.call(this._cells, new_view, target_id);\n\t\t\t\tif (!new_view._settings.hidden)\n\t\t\t\t\tthis._insertBeforeView(new_view, this._cells[target_id]);\n\t\t\t} else {\n\t\t\t\tsource = $$(target_id);\n\t\t\t\ttarget_id = _power_array.find.call(this._cells, source);\n\t\t\t\tassert(target_id!=-1, \"Attempt to replace the non-existing view\");\n\t\t\t\tif (!new_view._settings.hidden)\n\t\t\t\t\tthis._insertBeforeView(new_view, source);\n\n\t\t\t\tsource.destructor();\t\n\t\t\t\tthis._cells[target_id] = new_view;\n\t\t\t}\n\n\t\t\tif (!this._vertical_orientation)\n\t\t\t\tthis._fix_vertical_layout(new_view);\n\t\t}\n\t\tthis.resizeChildren(true);\n\n\t\tvar form = this.elements ? this : this.getFormView();\n\t\tif (form) form._recollect_elements();\n\n\t\tcallEvent(\"onReconstruct\",[this]);\n\t},\n\t_fix_vertical_layout:function(cell){\n\t\tcell._viewobj.style.display = \"inline-block\";\n\t\tcell._viewobj.style.verticalAlign = \"top\";\n\t},\n\taddView:function(view, index){\n\t\tif (isUndefined(index))\n\t\t\tindex = this._cells.length;\n\t\tvar top = this.$$ ? this : this.getTopParentView();\n\t\t\n\t\tstate._parent_cell = this;\n\t\tvar newui = (top && top.ui) ? top.ui(view, this, index) : ui(view, this, index);\n\t\tstate._parent_cell = null;\n\n\t\treturn newui._settings.id;\n\t},\n\tremoveView:function(id){\n\t\tvar view;\n\t\tif (typeof id != \"object\")\n\t\t\tview = $$(id) || (this.$$ ? this.$$(id) : null);\n\t\telse\n\t\t\tview = id;\n\n\t\tvar target = _power_array.find.call(this._cells, view);\n\t\tif (target >= 0){\n\t\t\tif (this._beforeRemoveView)\n\t\t\t\tthis._beforeRemoveView(target, view);\n\n\t\t\tvar form = this.elements ? this : this.getFormView();\n\n\t\t\tthis._cells.splice(target, 1);\n\t\t\tif (form)\n\t\t\t\t_each(view, function(sub){\n\t\t\t\t\tif (sub.name)\n\t\t\t\t\t\tdelete form.getCleanValues()[sub.config.name];\n\t\t\t\t}, form, true);\t\t\t\t\n\n\t\t\tview.destructor();\n\t\t\tthis.resizeChildren(true);\n\t\t\t\n\t\t\tif (form)\n\t\t\t\tform._recollect_elements();\n\t\t} else\n\t\t\tassert(false, \"Attemp to remove not existing view: \"+id);\n\n\t\tcallEvent(\"onReconstruct\",[this]);\n\t},\n\treconstruct:function(){\n\t\tthis._hiddencells = 0;\n\t\tthis._replace(this._collection);\n\t},\n\t_hide:function(obj, settings, silent){\n\t\tif (obj._settings.hidden) return;\n\t\tobj._settings.hidden = true;\n\t\tremove(obj._viewobj);\n\t\tthis._hiddencells++;\n\t\tif (!silent && !state._ui_creation)\n\t\t\tthis.resizeChildren(true);\t\n\t},\n\t_signal_hidden_cells:function(view){\n\t\tif (view.callEvent)\n\t\t\tview.callEvent(\"onViewShow\",[]);\n\t},\n\tresizeChildren:function(){\n\t\tif (state._freeze_resize) return;\n\n\t\tif (this._layout_sizes){\n\t\t\tvar parent = this.getParentView();\n\t\t\tif (parent){\n\t\t\t\tif (parent.resizeChildren)\n\t\t\t\t\treturn parent.resizeChildren();\n\t\t\t\telse\n\t\t\t\t\treturn parent.resize();\n\t\t\t}\n\t\t\t\t\n\t\t\tvar sizes = this.$getSize(0,0);\n\n\t\t\tvar x,y,nx,ny;\n\t\t\tnx = x = this._layout_sizes[0] || 0;\n\t\t\tny = y = this._layout_sizes[1] || 0;\n\n\t\t\t//for auto-fill content, use adjust strategy\n\t\t\tif ((sizes[1]>=100000 || sizes[3] >= 100000) && this._viewobj.parentNode){\n\t\t\t\t//in hidden container adjust doesn't work, so fallback to last known size\n\t\t\t\t//also, ensure that min-size is not violated\n\t\t\t\tnx = x = Math.max(sizes[0], (this._settings.width || this._viewobj.parentNode.offsetWidth || x || 0));\n\t\t\t\tny = y = Math.max(sizes[2], (this._settings.height || this._viewobj.parentNode.offsetHeight || y || 0));\n\t\t\t}\n\t\t\t\n\t\t\tif (!parent){\n\t\t\t\t//minWidth\n\t\t\t\tif (sizes[0]>x) nx = sizes[0];\n\t\t\t\t//minHeight\n\t\t\t\tif (sizes[2]>y) ny = sizes[2];\n\n\t\t\t\tvar fullscreen = (this._viewobj.parentNode == document.body) && !this.setPosition;\n\t\t\t\t//maxWidth rule\n\t\t\t\tif (!fullscreen && x>sizes[1]) nx = sizes[1];\n\t\t\t\t//maxHeight rule\n\t\t\t\tif (!fullscreen && y>sizes[3]) ny = sizes[3];\n\n\t\t\t\tthis.$setSize(nx,ny);\n\t\t\t} else\n\t\t\t\tthis._set_child_size(x,y);\n\n\t\t\tif (state._responsive_exception){\n\t\t\t\tstate._responsive_exception = false;\n\t\t\t\tthis.resizeChildren();\n\t\t\t}\n\n\t\t\tcallEvent(\"onResize\",[]);\n\t\t}\n\t},\n\tgetChildViews:function(){\n\t\treturn this._cells;\n\t},\n\tindex:function(obj){\n\t\tif (obj._settings)\n\t\t\tobj = obj._settings.id;\n\t\tfor (var i=0; i < this._cells.length; i++)\n\t\t\tif (this._cells[i]._settings.id == obj)\n\t\t\t\treturn i;\n\t\treturn -1;\n\t},\n\t_insertBeforeView:function(view, before){\n\t\tif (before){\n\t\t\tif (before._settings.hidden || view === before){\n\t\t\t\t//index of sibling cell, next to which new item will appear\n\t\t\t\tvar index = this.index(before)+1;\n\t\t\t\t//locate nearest visible cell\n\t\t\t\twhile (this._cells[index] && this._cells[index]._settings.hidden) index++;\n\t\t\t\tbefore = this._cells[index] ? this._cells[index]._viewobj : null;\n\t\t\t} else {\n\t\t\t\tbefore = before._viewobj;\n\t\t\t}\n\t\t}\n\t\tinsertBefore(view._viewobj, before, (this._dataobj||this._viewobj));\n\t},\n\t_show:function(obj, settings, silent){\n\t\tif (!obj._settings.hidden) return;\n\t\tthis._insertBeforeView(obj, obj);\n\t\tobj._settings.hidden = false;\n\n\t\tthis._hiddencells--;\n\n\t\tif (!silent){\n\t\t\tthis.resizeChildren(true);\n\t\t\tif (obj.refresh)\n\t\t\t\tobj.refresh();\n\t\t}\n\n\t\tif (obj.callEvent){\n\t\t\tobj.callEvent(\"onViewShow\", []);\n\t\t\t_each(obj, this._signal_hidden_cells);\n\t\t}\n\t},\n\tshowBatch:function(name, mode){\n\t\tvar preserve = typeof mode != \"undefined\";\n\t\tmode = mode !== false;\n\n\t\tif (!preserve){\n\t\t\tif (this._settings.visibleBatch == name ) return;\n\t\t\tthis._settings.visibleBatch = name;\n\t\t} else \n\t\t\tthis._settings.visibleBatch = \"\";\n\n\t\tvar show = [];\n\t\tfor (let i=0; i < this._cells.length; i++){\n\t\t\tif (!this._cells[i]._settings.batch && !this._cells[i]._settings.hidden) \n\t\t\t\tshow.push(this._cells[i]);\n\t\t\telse if (this._cells[i]._settings.batch == name){\n\t\t\t\tif (mode)\n\t\t\t\t\tshow.push(this._cells[i]);\n\t\t\t\telse\n\t\t\t\t\tthis._hide(this._cells[i], null, true);\n\t\t\t} else if (!preserve)\n\t\t\t\tthis._hide(this._cells[i], null, true);\n\t\t}\n\n\t\tfor (let i=0; i < show.length; i++){\n\t\t\tthis._show(show[i], null, true);\n\t\t\tshow[i]._render_hidden_views();\n\t\t}\n\t\t\t\n\t\tthis.resizeChildren(true);\n\t},\n\t_parse_cells:function(collection){\n\t\tthis._cells=[];\n\n\t\tassert(collection,this.name+\" was incorrectly defined. <br><br> You have missed rows|cols|cells|elements collection\"); \n\t\tfor (var i=0; i<collection.length; i++){\n\t\t\tstate._parent_cell = this;\n\t\t\tif (!collection[i]._inner)\n\t\t\t\tcollection[i].borderless = true;\n\n\t\t\tthis._cells[i]=ui._view(collection[i], this);\n\t\t\tif (!this._vertical_orientation)\n\t\t\t\tthis._fix_vertical_layout(this._cells[i]);\n\t\t\t\n\t\t\tif (this._settings.visibleBatch && this._settings.visibleBatch != this._cells[i]._settings.batch && this._cells[i]._settings.batch){\n\t\t\t\tthis._cells[i]._settings.hidden = true;\n\t\t\t\tthis._hiddencells++;\n\t\t\t}\n\t\t\t\n\t\t\tif (!this._cells[i]._settings.hidden){\n\t\t\t\t(this._dataobj||this._contentobj).appendChild(this._cells[i]._viewobj);\n\t\t\t\tif (this._cells[i].$nospace)\n\t\t\t\t\tthis._hiddencells++;\n\t\t\t}\n\t\t}\n\n\t\tif (this._parse_cells_ext_end)\n\t\t\tthis._parse_cells_ext_end(collection);\t\n\t},\n\t_fix_container_borders:function(style, inner){\n\t\tif (inner.top) \n\t\t\tstyle.borderTopWidth=\"0px\";\n\t\tif (inner.left) \n\t\t\tstyle.borderLeftWidth=\"0px\";\n\t\tif (inner.right) \n\t\t\tstyle.borderRightWidth=\"0px\";\n\t\tif (inner.bottom) \n\t\t\tstyle.borderBottomWidth=\"0px\";\n\t},\n\t_bubble_size:function(prop, size, vertical){\n\t\tif (this._vertical_orientation != vertical)\n\t\t\tfor (var i=0; i<this._cells.length; i++){\n\t\t\t\tthis._cells[i]._settings[prop] = size;\n\t\t\t\tif (this._cells[i]._bubble_size)\n\t\t\t\t\tthis._cells[i]._bubble_size(prop, size, vertical);\n\t\t\t}\n\t},\n\t$getSize:function(dx, dy){\n\t\tif (DEBUG) debug_size_box_start(this, true);\n\t\tvar minWidth = 0; \n\t\tvar maxWidth = 100000;\n\t\tvar maxHeight = 100000;\n\t\tvar minHeight = 0;\n\t\tif (this._vertical_orientation) maxHeight=0; else maxWidth = 0;\n\t\t\n\t\tvar fixed = 0;\n\t\tvar fixed_count = 0;\n\t\tvar gravity = 0;\n\t\tthis._sizes=[];\n\n\t\tfor (var i=0; i < this._cells.length; i++) {\n\t\t\t//ignore hidden cells\n\t\t\tif (this._cells[i]._settings.hidden)\n\t\t\t\tcontinue;\n\t\t\t\n\t\t\tvar sizes = this._sizes[i] = this._cells[i].$getSize(0,0);\n\n\t\t\tif (this._cells[i].$nospace){\n\t\t\t\tfixed_count++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (this._vertical_orientation){\n\t\t\t\t//take max minSize value\n\t\t\t\tif (sizes[0]>minWidth) minWidth = sizes[0];\n\t\t\t\t//take min maxSize value\n\t\t\t\tif (sizes[1]<maxWidth) maxWidth = sizes[1];\n\t\t\t\t\n\t\t\t\tminHeight += sizes[2];\n\t\t\t\tmaxHeight += sizes[3];\n\n\t\t\t\tif (sizes[2] == sizes[3] && sizes[2] != -1){ fixed+=sizes[2]; fixed_count++; }\n\t\t\t\telse gravity += sizes[4];\n\t\t\t} else {\n\t\t\t\t//take max minSize value\n\t\t\t\tif (sizes[2]>minHeight) minHeight = sizes[2];\n\t\t\t\t//take min maxSize value\n\t\t\t\tif (sizes[3]<maxHeight) maxHeight = sizes[3];\n\t\t\t\t\n\t\t\t\tminWidth += sizes[0];\n\t\t\t\tmaxWidth += sizes[1];\n\n\t\t\t\tif (sizes[0] == sizes[1] && sizes[0] != -1){ fixed+=sizes[0]; fixed_count++; }\n\t\t\t\telse gravity += sizes[4];\n\t\t\t}\n\t\t}\n\n\t\tif (minHeight>maxHeight)\n\t\t\tmaxHeight = minHeight;\n\t\tif (minWidth>maxWidth)\n\t\t\tmaxWidth = minWidth;\n\n\t\tthis._master_size = [fixed, this._cells.length - fixed_count, gravity];\n\t\tthis._desired_size = [minWidth+dx, minHeight+dy];\n\n\t\t//get layout sizes\n\t\tvar self_size = base.api.$getSize.call(this, 0, 0);\n\t\t//use child settings if layout's one was not defined\n\t\tif (self_size[1] >= 100000) self_size[1]=0;\n\t\tif (self_size[3] >= 100000) self_size[3]=0;\n\n\t\tself_size[0] = (self_size[0] || minWidth ) +dx;\n\t\tself_size[1] = Math.max(self_size[0], (self_size[1] || maxWidth ) +dx);\n\t\tself_size[2] = (self_size[2] || minHeight) +dy;\n\t\tself_size[3] = Math.max(self_size[2], (self_size[3] || maxHeight) +dy);\n\n\t\tif (DEBUG) debug_size_box_end(this, self_size);\n\n\t\tif (!this._vertical_orientation && this._settings.responsive)\n\t\t\tself_size[0] = 0;\n\n\t\treturn self_size;\n\t},\n\t$setSize:function(x,y){\n\t\tthis._layout_sizes = [x,y];\n\t\tif (DEBUG) debug_size_box_start(this);\n\n\t\tbase.api.$setSize.call(this,x,y);\n\t\tthis._set_child_size(x,y);\n\n\t\tif (DEBUG) debug_size_box_end(this, [x,y]);\n\t},\n\t_set_child_size_a:function(sizes, min, max){\n\t\tmin = sizes[min]; max = sizes[max];\n\t\tvar height = min;\n\n\t\tif (min != max){\n\t\t\tvar ps = this._set_size_delta * sizes[4]/this._set_size_gravity;\n\t\t\tif (ps < min){\n\t\t\t\theight = min;\n\t\t\t\tthis._set_size_gravity -= sizes[4]; \n\t\t\t\tthis._set_size_delta -= height;\n\t\t\t} else  if (ps > max){\n\t\t\t\theight = max;\n\t\t\t\tthis._set_size_gravity -= sizes[4]; \n\t\t\t\tthis._set_size_delta -= height;\n\t\t\t} else {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\n\t\treturn height;\n\t},\n\t_responsive_hide:function(cell, mode){\n\t\tvar target =  $$(mode);\n\n\t\tif (target === \"hide\" || !target){\n\t\t\tcell.hide();\n\t\t\tcell._responsive_marker = \"hide\";\n\t\t} else{\n\t\t\t//for SideBar in Webix 1.9\n\t\t\tif (!target)\n\t\t\t\ttarget = ui({ view:\"popup\", body:[{}]});\n\n\t\t\tcell._responsive_width = cell._settings.width;\n\t\t\tcell._responsive_height = cell._settings.height;\n\t\t\tcell._responsive_marker = target._settings.id;\n\t\t\tcell._settings.width = 0;\n\t\t\tif (!cell._settings.height)\n\t\t\t\tcell._settings.autoheight = true;\n\n\t\t\tui(cell, target, this._responsive.length);\n\t\t}\n\n\t\tthis._responsive.push(cell);\n\t},\n\t_responsive_show:function(cell){\n\t\tvar target = cell._responsive_marker;\n\t\tcell._responsive_marker = 0;\n\n\t\tif (target === \"hide\" || !target){\n\t\t\tcell.show();\n\t\t} else {\n\t\t\tcell._settings.width = cell._responsive_width;\n\t\t\tcell._settings.height = cell._responsive_height;\n\t\t\tdelete cell._settings.autoheight;\n\n\t\t\tvar index = 0;\n\t\t\twhile (this._cells[index] && this._cells[index]._settings.responsiveCell === false) index++;\n\t\t\tui(cell, this, index);\n\t\t}\n\t\tthis._responsive.pop();\n\t},\n\t_responsive_cells:function(x){\n\t\tstate._responsive_tinkery = true;\n\t\tif (x + this._padding.left + this._padding.right + this._margin * (this._cells.length-1)< this._desired_size[0]){\n\t\t\tvar max = this._cells.length - 1;\n\t\t\tfor (var i = 0; i < max; i++){\n\t\t\t\tlet cell = this._cells[i];\n\t\t\t\tif (!cell._responsive_marker){\n\t\t\t\t\tif (cell._settings.responsiveCell !== false){\n\t\t\t\t\t\tthis._responsive_hide(cell, this._settings.responsive);\n\t\t\t\t\t\tcallEvent(\"onResponsiveHide\", [cell._settings.id]);\n\t\t\t\t\t\tstate._responsive_exception = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmax = this._cells.length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else  if (this._responsive.length){\n\t\t\tlet cell = this._responsive[this._responsive.length-1];\n\t\t\tvar dx = cell._responsive_marker == \"hide\" ? 0 : cell._responsive_width;\n\t\t\tvar px = cell.$getSize(dx,0);\n\t\t\tif (px[0] + this._desired_size[0] + this._margin + 20 <= x ){\n\t\t\t\tthis._responsive_show(cell);\n\t\t\t\tcallEvent(\"onResponsiveShow\", [cell._settings.id]);\n\t\t\t\tstate._responsive_exception = true;\n\t\t\t}\n\t\t}\n\n\t\tstate._responsive_tinkery = false;\n\t},\n\t_set_child_size:function(x,y){ \n\t\tstate._child_sizing_active = (state._child_sizing_active||0)+1;\n\n\t\tif (!this._vertical_orientation && this._settings.responsive)\n\t\t\tthis._responsive_cells(x,y);\n\n\n\t\tthis._set_size_delta = (this._vertical_orientation?y:x) - this._master_size[0];\n\t\tthis._set_size_gravity = this._master_size[2];\n\t\tlet width = x; let height = y;\n\n\t\tvar auto = [];\n\t\tfor (let i=0; i < this._cells.length; i++){\n\t\t\t//ignore hidden cells\n\t\t\tif (this._cells[i]._settings.hidden || !this._sizes[i])\n\t\t\t\tcontinue;\n\n\t\t\tlet sizes = this._sizes[i];\n\n\t\t\tif (this._vertical_orientation){\n\t\t\t\theight = this._set_child_size_a(sizes,2,3);\n\t\t\t\tif (height < 0)\t{ auto.push({oldIndex:i, view:this._cells[i]}); continue; }\n\t\t\t} else {\n\t\t\t\twidth = this._set_child_size_a(sizes,0,1);\n\t\t\t\tif (width < 0)\t{ auto.push({oldIndex:i, view:this._cells[i]}); continue; }\n\t\t\t}\n\t\t\tthis._cells[i].$setSize(width,height);\n\t\t}\n\n\t\tfor (let i = 0; i < auto.length; i++){\n\t\t\tvar index = auto[i].oldIndex;\n\t\t\tlet sizes = this._sizes[index];\n\t\t\tvar dx = Math.round(this._set_size_delta * sizes[4]/this._set_size_gravity);\n\t\t\tthis._set_size_delta -= dx; this._set_size_gravity -= sizes[4];\n\t\t\tif (this._vertical_orientation)\n\t\t\t\theight = dx;\n\t\t\telse {\n\t\t\t\twidth = dx;\n\t\t\t}\n\n\t\t\tauto[i].view.$setSize(width,height);\n\t\t}\n\n\t\tstate._child_sizing_active -= 1;\n\t},\n\t_next:function(obj, mode){\n\t\tvar index = this.index(obj);\n\t\tif (index == -1) return null;\n\t\treturn this._cells[index+mode];\n\t}, \n\t_first:function(){\n\t\treturn this._cells[0];\n\t}\n};\n\nconst view = protoUI(api, EventSystem, base.view);\nexport default { api, view };","import {protoUI} from \"../ui/core\";\nimport state from \"../core/state\";\nimport {$active} from \"../webix/skin\";\n\nimport {clone, extend} from \"../webix/helpers\";\nimport {debug_size_box_start, debug_size_box_end} from \"../webix/debug\";\n\n\nimport base from \"./baselayout\";\nimport baseview from \"./baseview\";\nimport viewA from \"./view\";\n\nconst api = {\n\tname:\"layout\",\n\t$init:function(){\n\t\tthis._hiddencells = 0;\n\t},\n\tdefaults:{\n\t\ttype:\"line\"\n\t},\n\t_parse_cells:function(){\n\t\tif (this._parse_cells_ext)\n\t\t\tcollection = this._parse_cells_ext(collection);\n\n\t\tif (!this._parse_once){\n\t\t\tthis._viewobj.className += \" webix_layout_\"+(this._settings.type||\"\");\n\t\t\tthis._parse_once = 1;\n\t\t}\n\n\t\tif (this._settings.margin !== undefined)\n\t\t\tthis._margin = this._settings.margin;\n\n\t\tif (this._settings.padding !== undefined && typeof this._settings.padding !== \"object\" )\n\t\t\tthis._padding.left = this._padding.right = this._padding.top = this._padding.bottom = this._settings.padding;\n\t\tif (this._settings.paddingX !== undefined)\n\t\t\tthis._padding.left = this._padding.right = this._settings.paddingX;\n\t\tif (this._settings.paddingY !== undefined)\n\t\t\tthis._padding.top = this._padding.bottom = this._settings.paddingY;\n\t\tif (typeof this._settings.padding === \"object\")\n\t\t\textend(this._padding, this._settings.padding, true);\n\n\t\tif (this._padding.left || this._padding.right || this._padding.top || this._padding.bottom)\n\t\t\tthis._padding.defined = true;\n\n\t\t//if layout has paddings we need to set the visible border \n\t\tif (this._hasBorders() && !this._settings.borderless){\n\t\t\tthis._contentobj.style.borderWidth=\"1px\";\n\t\t\t//if layout has border - normal bordering rules are applied\n\t\t\tthis._render_borders = true;\n\t\t}\n\t\n\t\t\n\t\tvar collection = this._collection;\n\t\n\t\tif (this._settings.borderless)\n\t\t\tthis._settings._inner = { top:true, left:true, right:true, bottom:true};\n\n\t\tthis._beforeResetBorders(collection);\n\t\tbase.api._parse_cells.call(this, collection);\n\t\tthis._afterResetBorders(collection);\n\t},\n\t$getSize:function(dx, dy){\n\t\tdx=dx||0; dy=dy||0;\n\n\t\tvar correction = this._margin*(this._cells.length-this._hiddencells-1);\n\t\tif (this._render_borders || this._hasBorders()){\n\t\t\tvar _borders = this._settings._inner;\n\t\t\tif (_borders){\n\t\t\t\tdx += (_borders.left?0:1)+(_borders.right?0:1);\n\t\t\t\tdy += (_borders.top?0:1)+(_borders.bottom?0:1);\n\t\t\t}\n\t\t}\n\n\t\tif (!this._settings.height)\n\t\t\tdy += this._padding.top + this._padding.bottom + (this._vertical_orientation ? correction : 0);\n\n\t\tif (!this._settings.width)\n\t\t\tdx += this._padding.left + this._padding.right + (this._vertical_orientation ? 0 : correction);\n\t\t\t\t\n\t\treturn base.api.$getSize.call(this, dx, dy);\n\t},\n\t$setSize:function(x,y){\n\t\tthis._layout_sizes = [x,y];\n\t\tif (DEBUG) debug_size_box_start(this);\n\n\t\tif (this._hasBorders()||this._render_borders)\n\t\t\tviewA.api.$setSize.call(this,x,y);\n\t\telse\t\n\t\t\tbaseview.api.$setSize.call(this,x,y);\n\n\t\t//form with scroll\n\t\ty = this._content_height;\n\t\tx = this._content_width;\n\n\t\tvar config = this._settings;\n\t\tif (config.scroll){\n\t\t\ty = Math.max(y, this._desired_size[1]);\n\t\t\tx = Math.max(x, this._desired_size[0]);\n\t\t}\n\t\t\n\t\tthis._set_child_size(x, y);\n\n\t\tif (DEBUG) debug_size_box_end(this, [x,y]);\n\t},\n\t_set_child_size:function(x,y){\n\t\tvar correction = this._margin*(this._cells.length-this._hiddencells-1);\n\n\t\ty -= this._padding.top + this._padding.bottom;\n\t\tx -= this._padding.left + this._padding.right;\n\t\tif (this._vertical_orientation)\n\t\t\ty-=correction;\n\t\telse x-=correction;\n\n\t\treturn base.api._set_child_size.call(this, x, y);\n\t},\n\tresizeChildren:function(structure_changed){ \n\t\tif (structure_changed){\n\t\t\tthis._last_size = null; //forces children resize\n\t\t\tvar config = [];\n\t\t\tfor (var i = 0; i < this._cells.length; i++){\n\t\t\t\tvar cell = this._cells[i];\n\t\t\t\tconfig[i] = cell._settings;\n\t\t\t\tvar n = ((cell._layout_sizes && !cell._render_borders) || cell._settings.borderless)?\"0px\":\"1px\";\n\n\t\t\t\tcell._viewobj.style.borderTopWidth=cell._viewobj.style.borderBottomWidth=cell._viewobj.style.borderLeftWidth=cell._viewobj.style.borderRightWidth=n;\n\t\t\t}\n\t\t\t\n\t\t\tthis._beforeResetBorders(config);\n\t\t\tfor (let i=0; i<config.length; i++)\n\t\t\t\tif (config[i].borderless && this._cells[i]._set_inner)\n\t\t\t\t\tthis._cells[i]._set_inner(config[i]);\n\t\t\tthis._afterResetBorders(this._cells);\n\t\t}\n\n\t\tif (state._responsive_tinkery) return;\n\t\tbase.api.resizeChildren.call(this);\n\t},\n\t_hasBorders:function(){\n\t\treturn this._padding.defined && this._margin>0 && !this._cleanlayout;\n\t},\n\t_beforeResetBorders:function(collection){\n\t\tif (this._hasBorders() && (!this._settings.borderless || this._settings.type == \"space\")){\n\t\t\tfor (let i=0; i < collection.length; i++){\n\t\t\t\tif (!collection[i]._inner || !collection[i].borderless)\n\t\t\t\t\tcollection[i]._inner={ top:false, left:false, right:false, bottom:false};\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let i=0; i < collection.length; i++)\n\t\t\t\tcollection[i]._inner=clone(this._settings._inner);\n\t\t\tvar mode = false;\n\t\t\tif (this._cleanlayout)\n\t\t\t\tmode = true;\n\t\t\t\t\n\t\t\tvar maxlength = collection.length;\t\t\t\t\n\t\t\tif (this._vertical_orientation){\n\t\t\t\tfor (let i=1; i < maxlength-1; i++)\n\t\t\t\t\tcollection[i]._inner.top = collection[i]._inner.bottom = mode;\n\t\t\t\tif (maxlength>1){\n\t\t\t\t\tif (this._settings.type!=\"head\")\n\t\t\t\t\t\tcollection[0]._inner.bottom = mode;\n\n\t\t\t\t\twhile (collection[maxlength-1].hidden && maxlength>1)\n\t\t\t\t\t\tmaxlength--;\n\t\t\t\t\tif (maxlength>0)\n\t\t\t\t\t\tcollection[maxlength-1]._inner.top = mode;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tfor (let i=1; i < maxlength-1; i++)\n\t\t\t\t\tcollection[i]._inner.left = collection[i]._inner.right= mode;\n\t\t\t\tif (maxlength>1){\n\t\t\t\t\tif (this._settings.type!=\"head\")\n\t\t\t\t\t\tcollection[0]._inner.right= mode;\n\t\t\t\t\tcollection[maxlength-1]._inner.left = mode;\n\n\t\t\t\t\twhile (maxlength>1 && collection[maxlength-1].hidden)\n\t\t\t\t\t\tmaxlength--;\n\t\t\t\t\tif (maxlength>0)\n\t\t\t\t\t\tcollection[maxlength-1]._inner.left = mode;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\t_afterResetBorders:function(collection){\n\t\tvar start = 0; \n\t\tfor (let i=0; i<collection.length; i++){\n\t\t\tvar cell = this._cells[i];\n\n\t\t\tvar s_inner = cell._settings._inner;\n\t\t\tif (cell._settings.hidden && this._cells[i+1]){\n\t\t\t\tvar s_next = this._cells[i+1]._settings._inner;\n\t\t\t\tif (!s_inner.top)\n\t\t\t\t\ts_next.top = false;\n\t\t\t\tif (!s_inner.left)\n\t\t\t\t\ts_next.left = false;\n\n\t\t\t\tif (i==start) start++;\n\t\t\t}\n\t\t\tthis._fix_container_borders(cell._viewobj.style, cell._settings._inner);\n\t\t}\n\n\t\tvar style = this._vertical_orientation?\"marginLeft\":\"marginTop\";\n\t\tvar contrstyle = this._vertical_orientation?\"marginTop\":\"marginLeft\";\n\t\tvar padding = this._vertical_orientation?this._padding.left:this._padding.top;\n\t\tvar contrpadding = this._vertical_orientation?this._padding.top:this._padding.left;\n\n\t\t//add top offset to all\n\t\tfor (let i=0; i<collection.length; i++)\n\t\t\tthis._cells[i]._viewobj.style[style] = padding + \"px\";\n\n\t\t//add left offset to first cell\n\t\tif (this._cells.length)\n\t\t\tthis._cells[start]._viewobj.style[contrstyle] = contrpadding + \"px\";\n\n\t\t//add offset between cells\n\t\tfor (var index=start+1; index<collection.length; index++)\n\t\t\tthis._cells[index]._viewobj.style[contrstyle]=this._margin+\"px\";\n\t\t\n\t},\n\ttype_setter:function(value){\n\t\tthis._margin = (typeof this._margin_set[value] !== \"undefined\"? this._margin_set[value]: this._margin_set[\"line\"]);\n\t\tthis._padding.left = this._padding.right = this._padding.top = this._padding.bottom =\n\t\t\t(typeof this._margin_set[value] !== \"undefined\") ? this._padding_set[value] : this._padding_set[\"line\"];\n\t\tthis._cleanlayout = (value==\"material\" || value==\"clean\");\n\t\tif (value == \"material\")\n\t\t\tthis._settings.borderless = true;\n\n\t\treturn value;\n\t},\n\t$skin:function(){\n\t\tthis._margin_set = $active.layoutMargin;\n\t\tthis._padding_set = $active.layoutPadding;\n\t}\n};\n\nconst view = protoUI(api, base.view);\nexport default { api, view };\n\n//not necessary anymore\n//preserving for backward compatibility\nview.call(-1);","import {removeCss, addCss, getTextSize} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\nimport {extend, bind, copy, isUndefined} from \"../webix/helpers\";\nimport {event} from \"../webix/htmlevents\";\n\nimport template from \"../webix/template\";\nimport i18n from \"../webix/i18n\";\nimport wDate from \"../core/date\";\n\nimport layout from \"../views/layout\";\n\nconst api = {\n\tname:\"daterange\",\n\tdefaults:{\n\t\tbutton:false,\n\t\ticons:false,\n\t\tcalendarCount:2,\n\t\tborderless:false\n\t},\n\t$init:function(config){\n\t\tconfig.calendar = config.calendar || {};\n\t\tconfig.value = this._correct_value(config.value);\n\t\tdelete config.calendar.type; // other types are not implemented\n\t\t\n\t\tthis._viewobj.className += \" webix_daterange\";\n\t\tthis._zoom_level = this._types[config.calendar.type] || 0;\n\n\t\tvar cols = [],\n\t\t\tskinConf = $active.calendar,\n\t\t\tcheight = skinConf && skinConf.height ? skinConf.height : 0,\n\t\t\tcwidth = skinConf && skinConf.width ? skinConf.width : 0,\n\t\t\trheight = cheight||250,\n\t\t\trwidth = cwidth||250,\n\t\t\tcalendar = extend({ view:\"calendar\", width:cwidth, height:cheight }, config.calendar || {}, true),\n\t\t\tcount = config.calendarCount = this._zoom_level === 0 ? (config.calendarCount || this.defaults.calendarCount) : this.defaults.calendarCount,\n\t\t\tbasecss = (calendar.css?calendar.css + \" \":\"\")+\"webix_range_\",\n\t\t\tstart = config.value.start || new Date();\n\t\t\n\t\tfor(var i = 0; i<count; i++){\n\t\t\tvar date = wDate.add(start, this._steps[this._zoom_level]*i, \"month\", true);\n\n\t\t\textend(calendar, {\n\t\t\t\tevents:bind(this._isInRange, this),\n\t\t\t\tcss:basecss+(count ===1?\"\":(i === 0 ? \"0\" : (i+1 == count ? \"N\" :\"1\"))),\n\t\t\t\tmonthSelect:(i===0 || i+1===count),\n\t\t\t\ttimepicker: this._zoom_level === 0?config.timepicker:false,\n\t\t\t\tborderless:true,\n\t\t\t\tdate:date\n\t\t\t}, true);\n\t\t\t\n\t\t\tcols.push(copy(calendar));\n\t\t}\n\n\n\t\tconfig.rows = [\n\t\t\t{ type:\"clean\", cols: cols}\n\t\t];\n\t\tif (config.button || config.icons)\n\t\t\tconfig.rows.push( this._footer_row(config, rwidth*count) );\n\t\t\n\t\tconfig.height = isUndefined(config.height) ? rheight+(config.icons || config.button?30:0) : config.height;\n\t\tconfig.width = isUndefined(config.width) ? rwidth*count : config.width;\n\t\tconfig.type = \"line\";\n\t\tthis.$ready.push(this._after_init);\n\n\t\tevent(this.$view, \"keydown\", bind(function(e){\n\t\t\tthis._onKeyPress( e.which || e.keyCode, e);\n\t\t}, this));\n\t},\n\tvalue_setter:function(value){\n\t\treturn this._correct_value(value);\n\t},\n\tgetValue:function(){\n\t\treturn this._settings.value;\n\t},\n\tsetValue:function(value, silent){\n\t\tvalue = this._correct_value(value);\n\t\tthis._settings.value = value;\n\n\t\tvar start = value.start || value.end || new Date();\n\n\t\tif(!silent){\n\t\t\tthis._cals[0].showCalendar(value.start);\n\t\t\t\n\t\t\tfor(var i = 1; i<this._cals.length; i++){\n\t\t\t\tthis._cals[i]._settings.date = start;\n\t\t\t\tthis._changeDateSilent(this._cals[i], 1, i);\n\t\t\t}\n\t\t}\n\t\tthis.callEvent(\"onChange\", [value]);\n\t\tthis.refresh();\n\t},\n\trefresh:function(){\n\t\tfor(var i = 0; i<this._cals.length; i++){\n\n\t\t\tif(this._cals[i]._zoom_level === this._zoom_level){\n\t\t\t\tremoveCss(this._cals[i].$view, \"webix_cal_timepicker\");\n\t\t\t\tremoveCss(this._cals[i].$view, \"webix_range_timepicker\");\n\t\t\t\t\n\n\t\t\t\tvar rel = this._related_date(this._cals[i].getVisibleDate());\n\t\t\t\tif(rel.start || rel.end){\n\t\t\t\t\tthis._cals[i]._settings.date = rel.start || rel.end;\n\t\t\t\t\tif(this._settings.timepicker){\n\t\t\t\t\t\tvar css = \"webix_\"+(rel.start && rel.end?\"range\":\"cal\")+\"_timepicker\";\n\t\t\t\t\t\taddCss(this._cals[i].$view, css);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\twDate.datePart(this._cals[i]._settings.date);\n\n\t\t\t\tthis._cals[i].refresh();\n\t\t\t}\n\t\t}\n\t},\n\taddToRange:function(date){\n\t\tvar value = this._add_date(this._string_to_date(date));\n\t\tthis.setValue(value);\n\t},\n\t_icons:[\n\t\t{\n\t\t\ttemplate:function(){\n\t\t\t\treturn \"<span role='button' tabindex='0' class='webix_cal_icon_today webix_cal_icon'>\"+i18n.calendar.today+\"</span>\";\n\t\t\t},\n\t\t\ton_click:{\n\t\t\t\t\"webix_cal_icon_today\":function(){\n\t\t\t\t\tvar date = new Date();\n\t\t\t\t\tif(!this._settings.timepicker)\n\t\t\t\t\t\tdate = wDate.datePart(date);\n\t\t\t\t\tthis.addToRange(date);\n\t\t\t\t\tthis.callEvent(\"onTodaySet\",[this.getValue()]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\ttemplate:function(){\n\t\t\t\treturn \"<span role='button' tabindex='0' class='webix_cal_icon_clear webix_cal_icon'>\"+i18n.calendar.clear+\"</span>\";\n\t\t\t},\n\t\t\ton_click:{\n\t\t\t\t\"webix_cal_icon_clear\":function(){\n\t\t\t\t\tthis.setValue(\"\");\n\t\t\t\t\tthis.callEvent(\"onDateClear\", []);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t],\n\t_icons_template:function(icons){\n\t\tif(!icons)\n\t\t\treturn { width:0};\n\t\telse{\n\t\t\ticons = (typeof icons ==\"object\") ? icons:this._icons; //custom or default \n\t\t\tvar icons_template = { css:\"webix_cal_footer \", borderless:true, template:\"<div class='webix_cal_icons'>\", onClick:{}};\n\n\t\t\tfor(var i = 0; i<icons.length; i++){\n\t\t\t\tif(icons[i].template){\n\t\t\t\t\tvar itemplate = (typeof(icons[i].template) == \"function\"?icons[i].template: template(icons[i].template));\n\t\t\t\t\ticons_template.template += itemplate.call(this);\n\t\t\t\t}\t\n\t\t\t\tif(icons[i].on_click){\n\t\t\t\t\tfor(var k in icons[i].on_click){\n\t\t\t\t\t\ticons_template.onClick[k] = bind(icons[i].on_click[k], this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ticons_template.template += \"</div>\";\n\t\t\ticons_template.width = getTextSize(icons_template.template).width+30;\n\t\t\treturn icons_template;\n\t\t}\n\t},\n\t_footer_row:function(config, width){\n\t\tvar button = { view:\"button\", value:i18n.calendar.done,\n\t\t\tminWidth:100, maxWidth:230, align:\"center\",\n\t\t\tclick:function(){\n\t\t\t\tthis.getParentView().getParentView().hide();\n\t\t\t}};\n\n\t\tvar icons = this._icons_template(config.icons);\n\n\t\tvar row = { css:\"webix_range_footer\", height:30, cols:[\n\t\t\t{ width:icons.width }\n\t\t]};\n\t\tif((config.button || config.icons) && (icons.width*2+button.minWidth) > width)\n\t\t\trow.cols[0].width = 0;\n\n\t\trow.cols.push(config.button ? button : {});\n\t\trow.cols.push(icons);\n\n\t\treturn row;\n\t},\n\t_types:{\n\t\t\"time\":-1,\n\t\t\"month\":1,\n\t\t\"year\":2\n\t},\n\t_steps:{\n\t\t0:1,\n\t\t1:12,\n\t\t2:120\n\t},\n\t_correct_value:function(value){\n\t\tif(!value) value = { start:null, end:null};\n\n\t\tif(!value.start && !value.end)\n\t\t\tvalue = {start: value};\n\t\t\n\t\tvalue.end = this._string_to_date(value.end) || null;\n\t\tvalue.start = this._string_to_date(value.start) || null;\n\n\t\tif((value.end && value.end < value.start) || !value.start)\n\t\t\tvalue.end = [value.start, value.start = value.end][0];\n\t\treturn value;\n\t},\n\t_string_to_date:function(date){\n\t\tif(typeof date == \"string\"){\n\t\t\tdate = i18n.parseFormatDate(date);\n\t\t}\n\t\treturn isNaN(date*1) ? null : date;\n\t},\n\t_isInRange:function(date, isOutside){\n\t\tif (isOutside) return;\n\t\tvar v = this._settings.value,\n\t\t\ts = v.start? wDate.datePart(wDate.copy(v.start)) : null,\n\t\t\te = v.end ? wDate.datePart(wDate.copy(v.end)) : null,\n\t\t\td = wDate.datePart(date),\n\t\t\ttomorrow = wDate.add(d,1,\"day\",true),\n\t\t\tyesterday = wDate.add(d,-1,\"day\",true),\n\t\t\tcss = \"\";\n\n\t\tif(d>=s && e && d<=e){\n\t\t\tcss = \"webix_cal_range\";\n\t\t\tif(wDate.equal(yesterday, s))\n\t\t\t\tcss += \" webix_cal_range_first\";\n\t\t\tif(wDate.equal(tomorrow, e))\n\t\t\t\tcss += \" webix_cal_range_last\";\n\t\t}\n\t\tif(wDate.equal(d, s))\n\t\t\tcss = \"webix_cal_range_start\";\n\t\tif(wDate.equal(d, e))\n\t\t\tcss = \"webix_cal_range_end\";\n\n\t\tvar holiday =wDate.isHoliday(date)+\" \" || \"\";\n\t\treturn css+\" \"+holiday;\n\t},\n\t_after_init:function(){\n\t\tvar cals = this._cals = this.getChildViews()[0].getChildViews();\n\t\tvar range = this;\n\t\tvar masterId = this.config.id;\n\n\t\tthis._cals_hash = {};\n\n\t\tfor(var i = 0; i<cals.length; i++){\n\t\t\tcals[i].config.master = masterId;\n\t\t\tthis._cals_hash[cals[i].config.id] = i;\n\n\t\t\t//events\n\t\t\tcals[i].attachEvent(\"onBeforeDateSelect\", function(date){ return range._on_date_select(this, date); });\n\t\t\tcals[i].attachEvent(\"onBeforeZoom\", function(zoom){ return range._before_zoom(this, zoom); });\n\t\t\t\n\t\t\tif(i===0 || i  === cals.length-1){\n\t\t\t\tcals[i].attachEvent(\"onAfterMonthChange\", bind(this._month_change, this));\n\t\t\t\tcals[i].attachEvent(\"onAfterZoom\", function(zoom, oldzoom){ range._after_zoom(this, zoom, oldzoom);});\n\t\t\t}\n\t\t}\n\t\tif(this._settings.timepicker)\n\t\t\tthis.refresh();\n\t},\n\t_before_zoom:function(view, zoom){\n\t\tvar ind = this._getIndexById(view.config.id);\n\n\t\tif(zoom >=0 && ind>0 && ind !== this._cals.length-1)\n\t\t\treturn false;\n\t\tif(zoom ===-1){ //time mode\n\t\t\tvar rel = this._related_date(view.getVisibleDate());\n\t\t\tif(rel.start && rel.end) //both dates are in one calendar\n\t\t\t\tview._settings.date = rel[this._time_mode];\n\t\t}\n\t\treturn true;\n\t},\n\t_month_change:function(now, prev){\n\t\tvar dir = now>prev ? 1: -1;\n\t\tvar start = now>prev ? this._cals[this._cals.length-1] : this._cals[0];\n\t\tvar step = start._zoom_logic[start._zoom_level]._changeStep;\n\n\t\tthis._shift(dir, step, start);\n\t\tthis.refresh();\n\t},\n\t_after_zoom:function(start, zoom, oldzoom){\n\t\tvar step = start._zoom_logic[start._zoom_level]._changeStep;\n\t\tvar ind = this._getIndexById(start.config.id);\n\t\tvar dir = ind === 0 ? 1 :-1;\n\t\tif(!this._cals[ind+dir]) \n\t\t\treturn;\n\t\t\n\t\tvar next = this._cals[ind+dir]._settings.date;\n\t\t\n\t\tif(oldzoom>zoom && zoom >=0){\n\t\t\tvar diff = 0;\n\t\t\tif(zoom === 1){ //year was changed \n\t\t\t\tvar year = next.getFullYear();\n\t\t\t\tif(this._zoom_level || (dir === -1 && next.getMonth() === 11) || (dir ===1 && next.getMonth() === 0))\n\t\t\t\t\tyear = year - dir;\n\t\t\t\tdiff = start._settings.date.getFullYear()-year;\n\t\t\t}\n\t\t\telse if(zoom === 0 ){//month was changed\n\t\t\t\tvar month = next.getMonth()-dir;\n\t\t\t\tif(month === 12 || month ==-1)\n\t\t\t\t\tmonth = (month === -1) ? 11: 0;\n\t\t\t\t\n\t\t\t\tdiff = start._settings.date.getMonth()-month;\n\t\t\t}\n\t\t\tthis._shift(diff, step, start);\n\t\t\tthis.refresh();\n\t\t}\n\t},\n\t_changeDateSilent:function(view, dir, step){\n\t\tview.blockEvent();\n\t\tif(view._zoom_level>=0)\n\t\t\tview._changeDate(dir, step);\n\t\tview.unblockEvent();\n\t},\n\t_getIndexById:function(id){\n\t\treturn this._cals_hash[id];\n\t},\n\t_shift:function(dir, step, start){\n\t\tfor(var i =0; i<this._cals.length; i++){\n\t\t\tvar next = this._cals[i];\n\t\t\tif(!start || next.config.id !==start.config.id)\n\t\t\t\tthis._changeDateSilent(next, dir, step);\n\t\t}\n\t},\n\t_related_date:function(date){\n\t\tvar v = this._settings.value;\n\t\tvar rel = {};\n\t\tif(v.start && v.start.getYear() === date.getYear() && v.start.getMonth() === date.getMonth())\n\t\t\trel.start = v.start;\n\t\tif(v.end && v.end.getYear() === date.getYear() && v.end.getMonth() === date.getMonth())\n\t\t\trel.end = v.end;\n\t\treturn rel;\n\t},\n\t_set_time:function(date, source){\n\t\tdate.setHours(source.getHours());\n\t\tdate.setMinutes(source.getMinutes());\n\t\tdate.setSeconds(source.getSeconds());\n\t\tdate.setMilliseconds(source.getMilliseconds());\n\t},\n\t_add_date:function(date, ind){\n\t\tvar v = copy(this._settings.value);\n\t\t//year, month\n\t\tif(this._zoom_level !==0 && !isUndefined(ind)){\n\t\t\tvar key = ind?\"end\":\"start\";\n\t\t\tv[key] = date;\n\t\t}\n\t\telse{\n\t\t\tif(v.start && !v.end)\n\t\t\t\tv.end = date;\n\t\t\telse {\n\t\t\t\tv.start = date;\n\t\t\t\tv.end = null;\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn v;\n\t},\n\t_on_date_select:function(view, date){\n\t\tif(this.callEvent(\"onBeforeDateSelect\", [date])){\n\t\t\tvar v = this._settings.value;\n\n\t\t\tif(view._zoom_level<0){ //time set\n\t\t\t\tvar rel = copy(this._related_date(date)),\n\t\t\t\t\treldate;\n\t\t\t\t\n\t\t\t\treldate = (rel.start && rel.end) ? rel[this._time_mode] : rel.start || rel.end;\n\t\t\t\tif(reldate)\n\t\t\t\t\tthis._set_time(reldate, date);\n\n\t\t\t\tview._zoom_level = 0;\n\n\t\t\t\tv = extend(copy(v), rel, true);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tvar vis = view.getVisibleDate();\n\t\t\t\tvar ind = this._getIndexById(view.config.id);\n\t\t\t\t\n\t\t\t\tif(date.getMonth() !== vis.getMonth() && (ind ===0 || ind === this._cals.length-1)){\n\t\t\t\t\tvar dir = date>vis? 1 : -1;\n\t\t\t\t\tthis._shift(dir, 1);\n\t\t\t\t}\n\t\t\t\tv = this._add_date(date, ind);\n\t\t\t}\n\n\t\t\tif(view._zoom_level !== this._zoom_level)\n\t\t\t\tview.showCalendar(date);\n\t\t\t\n\t\t\tthis.setValue(v, true);\n\t\t\tthis.callEvent(\"onAfterDateSelect\", [this.getValue()]);\n\t\t}\n\n\t\treturn false;\n\t}\n};\n\n\nconst view = protoUI(api,  layout.view);\nexport default {api, view};","import {create, stopEvent} from \"../webix/html\";\nimport {delay, extend} from \"../webix/helpers\";\nimport daterange from \"../views/daterange\";\nimport {ui, $$} from \"../ui/core\";\nimport i18n from \"../webix/i18n\";\n\n\nimport datafilter from \"./datafilter\";\n\ndatafilter.richSelectFilter = {\n\tgetInputNode:function(node){\n\t\treturn $$(node.$webix) || null;\n\t},\n\tgetValue:function(node, text){\n\t\tvar ui = this.getInputNode(node);\n\t\tif (text && ui.getText){\n\t\t\treturn ui.getText();\n\t\t}\n\t\treturn ui?ui.getValue():\"\";\n\t},\n\tsetValue:function(node, value){\n\t\tvar ui = this.getInputNode(node);\n\t\treturn ui?ui.setValue(value):\"\";\n\t},\n\tcompare:function(a,b){\n\t\treturn a == b;\n\t},\n\trefresh:function(master, node, value){\n\t\tif (master.$destructed) return;\n\n\t\tlet select = $$(value.richselect);\n\n\t\t//IE8 can destory the content of richselect, so recreating\n\t\tif (!select.$view.parentNode) {\n\t\t\tlet d = create(\"div\", { \"class\" : \"webix_richfilter\" });\n\t\t\td.appendChild(select.$view);\n\t\t}\n\n\t\tnode.$webix = value.richselect;\n\t\tnode.style.marginLeft = \"-10px\";\n\n\t\tvalue.compare = value.compare || this.compare;\n\t\tvalue.prepare = value.prepare || this.prepare;\n\t\tmaster.registerFilter(node, value, this);\n\n\t\tconst data = datafilter._get_data(master, value);\n\t\tlet list = select.getPopup().getList();\n\n\t\t//reattaching node back to master container\n\t\tnode.firstChild.appendChild(select.$view.parentNode);\n\n\t\t//load data in list, must be after reattaching, as callback of parse can try to operate with innerHTML\n\t\tif (list.parse){\n\t\t\tlist.clearAll();\n\t\t\tlist.parse(data);\n\n\t\t\tif ((!this.$noEmptyOption && value.emptyOption !== false) || value.emptyOption){\n\t\t\t\tlet emptyOption = { id:\"$webix_empty\", value: value.emptyOption||\"\", $empty: true };\n\t\t\t\tlist.add(emptyOption,0);\n\t\t\t}\n\t\t}\n\n\t\t//set actual value for the filter\n\t\tif (value.value) this.setValue(node, value.value);\n\n\t\t//repaint the filter control\n\t\tselect.render();\n\n\t\t//adjust sizes after full rendering\n\t\tdelay(select.resize, select);\n\t},\n\trender:function(master, config){\n\t\tif (!config.richselect){\n\t\t\tvar d = create(\"div\", { \"class\" : \"webix_richfilter\" });\n\n\t\t\tvar richconfig = {\n\t\t\t\tcontainer:d,\n\t\t\t\tview:this.inputtype,\n\t\t\t\toptions:[]\n\t\t\t};\n\n\t\t\tvar inputConfig = extend( this.inputConfig||{}, config.inputConfig||{}, true );\n\t\t\textend(richconfig, inputConfig);\n\n\t\t\tif (config.separator)\n\t\t\t\trichconfig.separator = config.separator;\n\t\t\tif(config.suggest)\n\t\t\t\trichconfig.suggest = config.suggest;\n\n\t\t\tvar richselect = ui(richconfig);\n\t\t\trichselect.attachEvent(\"onChange\", function(){\n\t\t\t\tmaster.filterByAll();\n\t\t\t});\n\t\t\t\n\t\t\tconfig.richselect = richselect._settings.id;\n\t\t\tmaster._destroy_with_me.push(richselect);\n\t\t}\n\n\t\tconfig.css = \"webix_div_filter\";\n\t\treturn \" \";\n\t},\n\tinputtype:\"richselect\"\n};\n\ndatafilter.serverRichSelectFilter = extend({\n\t$server:true\n}, datafilter.richSelectFilter);\n\ndatafilter.multiSelectFilter = extend({\n\t$noEmptyOption: true,\n\tinputtype:\"multiselect\",\n\tprepare:function(value, filter){\n\t\tif (!value) return value;\n\t\tvar hash = {};\n\t\tvar parts = value.toString().split(filter.separator || \",\");\n\t\tfor (var i = 0; i < parts.length; i++)\n\t\t\thash[parts[i]] = 1;\n\t\treturn hash;\n\t},\n\tcompare:function(a,b){\n\t\treturn !b || b[a];\n\t}\n}, datafilter.richSelectFilter);\n\ndatafilter.serverMultiSelectFilter = extend({\n\t$server:true,\n\t_on_change:function(){\n\t\tvar id = this._comp_id;\n\t\t$$(id).filterByAll();\n\t}\n}, datafilter.multiSelectFilter);\n\ndatafilter.multiComboFilter = extend({\n\tinputtype:\"multicombo\",\n\tinputConfig:{\n\t\ttagMode: false\n\t}\n}, datafilter.multiSelectFilter);\n\ndatafilter.serverMultiComboFilter = extend({\n\tinputtype:\"multicombo\",\n\tinputConfig:{\n\t\ttagMode: false\n\t}\n}, datafilter.serverMultiSelectFilter);\n\ndatafilter.datepickerFilter = extend({\n\tprepare:function(value){ return value||\"\"; },\n\tcompare:function(a,b){ return a*1 == b*1; },\n\tinputtype:\"datepicker\"\n}, datafilter.richSelectFilter);\n\n\ndatafilter.columnGroup = {\n\tgetValue:function(node){ return node.innerHTML; },\n\tsetValue:function(){},\n\tgetHelper:function(node, config){\n\t\treturn {\n\t\t\topen:function(){ config.closed = true; node.onclick(); },\n\t\t\tclose:function(){ config.closed = false; node.onclick(); },\n\t\t\tisOpened:function(){ return config.closed; }\n\t\t};\n\t},\n\trefresh:function(master, node, config){\n\t\tnode.onclick = function(e){\n\t\t\tstopEvent(e);\n\t\t\tvar mark = this.firstChild.firstChild;\n\t\t\tif (config.closed){\n\t\t\t\tconfig.closed = false;\n\t\t\t\tmark.className = \"webix_tree_open\";\n\t\t\t} else {\n\t\t\t\tconfig.closed = true;\n\t\t\t\tmark.className = \"webix_tree_close\";\n\t\t\t}\n\n\t\t\tdelay(function(){\n\t\t\t\tmaster.callEvent(\"onColumnGroupCollapse\", [config.columnId, config.batch, !config.closed]);\n\t\t\t\tmaster.showColumnBatch(config.batch, !config.closed);\n\t\t\t});\n\t\t};\n\n\t\tif (!config.firstRun){\n\t\t\tconfig.firstRun = 1;\n\t\t\tif (config.closed)\n\t\t\t\tmaster.showColumnBatch(config.batch, false);\n\t\t}\n\t},\n\trender:function(master, config){\n\t\treturn \"<div role='button' tabindex='0' aria-label='\"+i18n.aria[config.closed?\"openGroup\":\"closeGroup\"]+\"' class='\"+(config.closed?\"webix_tree_close\":\"webix_tree_open\")+\"'></div>\"+(config.groupText||\"\");\n\t}\n};\n\ndatafilter.dateRangeFilter = extend({\n\tprepare:function(value){\n\t\tif (!value.start && !value.end) return \"\";\n\t\treturn daterange.api._correct_value(value);\n\t},\n\tcompare:function(a, b){\n\t\treturn ((!b.start || a>=b.start) && (!b.end || a<=b.end));\n\t},\n\tinputtype:\"daterangepicker\"\n}, datafilter.richSelectFilter);\n\ndatafilter.serverDateRangeFilter = extend({\n\t$server:true\n}, datafilter.dateRangeFilter);","import Touch from \"../core/touch\";\nimport env  from \"../webix/env\";\nimport ready from \"../webix/ready\";\nimport {set as setSkin} from \"../webix/skin\";\nimport {create, addStyle} from \"../webix/html\";\nimport {define} from \"../services\";\n\n\nenv.scrollSize = ((env.touch||env.$customScroll)?0:17);\nready(function(){\n\tvar size = _detectScrollSize();\n\tenv.scrollSize = env.touch ? 0 : size;\n});\n\n\nfunction _detectScrollSize(){\n\tvar div = create(\"div\");\n\tdiv.className = \"webix_skin_mark\";\n\tdiv.style.cssText=\"position:absolute;left:-1000px;width:100px;padding:0px;margin:0px;min-height:100px;overflow-y:scroll;\";\n\n\tdocument.body.appendChild(div);\n\tvar width = div.offsetWidth-div.clientWidth;\n\tvar name = { 200:\"flat\" , 210:\"compact\", 230: \"contrast\", 240:\"material\", 250:\"mini\" }[Math.floor(div.offsetHeight/10)*10];\n\tdocument.body.removeChild(div);\n\n\tif (name)\n\t\tsetSkin(name);\n\n\tif (env.$customScroll) return 0;\n\treturn width;\n}\n\n\nlet fixed = false;\nfunction _fixHeight(){\n\tif (fixed) return;\n\n\taddStyle(\"html, body{ height:100%; }\");\n\tdocument.body.className+=\" webix_full_screen\";\n\tTouch.limit(false);\n\tfixed = true;\n}\n\ndefine(\"_fixHeight\", _fixHeight);","export {proto, protoUI, $$} from \"./core\";\n\nimport {ui} from \"./core\";\n\nimport {animate, animateView} from \"./animate\";\nimport {freeze, resize, zIndex} from \"./helpers\";\nimport fullScreen from \"./fullscreen\";\n\n// filters\nimport datafilter from \"./datafilter\";\nimport \"./datafilter_pro\";\n\n// detect scroll\nimport \"./detect\";\n\n\nui.animate = animate;\nui.animateView = animateView;\n\nui.freeze = freeze;\nui.resize = resize;\nui.zIndex = zIndex;\nui.datafilter = datafilter;\nui.fullScreen = fullScreen;\n\nexport {ui};","import {ui, $$} from \"./core\";\nimport {create} from \"../webix/html\";\nimport ani from \"../webix/animate\";\n\nexport function animate(obj, parent, config){\n\tvar pobj = $$(parent);\n\tif (pobj){\n\t\tvar aniset = config || { type:\"slide\", direction:\"left\" };\n\t\tvar d = pobj._viewobj.cloneNode(true);\n\t\tvar view = ui(obj, parent);\n\n\t\tview._viewobj.parentNode.appendChild(d);\n\t\tvar line = ani.formLine(\n\t\t\tview._viewobj,\n\t\t\td,\n\t\t\taniset\n\t\t);\n\n\t\taniset.callback = function(){\n\t\t\tani.breakLine(line);\n\t\t};\n\t\tani(line, aniset);\n\n\t\treturn view;\n\t}\n}\n\nexport function animateView(view, stateHandler, config){\n\tview = $$(view);\n\tif (view){\n\t\tconfig = config || { type:\"slide\", direction:\"left\" };\n\n\t\tvar getHTML = function(view){\n\t\t\tvar el = view._viewobj;\n\t\t\tvar css = el.className;\n\t\t\tvar content =el.innerHTML;\n\t\t\treturn \"<div class='\"+css+\"' style='width:\"+el.offsetWidth+\"px;height:\"+el.offsetHeight+\"px;'>\"+content+\"</div>\";\n\t\t};\n\n\t\t// get 'display' state of child nodes\n\t\tvar display = [];\n\t\tfor(let i=0; i<view._viewobj.childNodes.length; i++){\n\t\t\tvar node = view._viewobj.childNodes[i];\n\t\t\tvar value = node.currentStyle ?node.currentStyle.display : getComputedStyle(node, null).display;\n\t\t\tdisplay.push(value||\"\");\n\t\t}\n\t\t// get current html content\n\t\tvar currentState = getHTML(view);\n\n\t\t// apply new state\n\t\tif(typeof stateHandler == \"function\"){\n\t\t\tstateHandler.call(this);\n\t\t}\n\n\t\t// get new html content\n\t\tvar newState = getHTML(view);\n\n\t\t// insert elements into the view\n\t\tvar tempParent = view._viewobj.insertBefore(create(\"DIV\",{\n\t\t\t\"class\" : \"webix_view_animate\",\n\t\t\t\"style\" : \"width:\"+view._viewobj.offsetWidth+\"px;height:\"+view._viewobj.offsetHeight+\"px;\"\n\t\t}, newState+currentState),view._viewobj.firstChild);\n\n\t\t// hide child nodes\n\t\tfor(let i =1; i<view._viewobj.childNodes.length; i++){\n\t\t\tview._viewobj.childNodes[i].style.display = \"none\";\n\t\t}\n\n\t\t// animate inserted elements\n\t\tvar line = ani.formLine(\n\t\t\ttempParent.childNodes[0],\n\t\t\ttempParent.childNodes[1],\n\t\t\tconfig\n\t\t);\n\t\tconfig.callback = function(){\n\t\t\tif(tempParent){\n\t\t\t\tview._viewobj.removeChild(tempParent);\n\t\t\t\ttempParent = null;\n\t\t\t\t// restore 'display' state of child nodes\n\t\t\t\tfor(var i =0; i< view._viewobj.childNodes.length;i++){\n\t\t\t\t\tview._viewobj.childNodes[i].style.display = display[i];\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tani(line, config);\n\n\t\treturn view;\n\t}\n}","// en-EN locale is bundled by default\nimport i18n from \"../webix/i18n\";\n\n// germany\nimport de from \"./de\";\ni18n.locales[\"de-DE\"] = de;\n\n// spain\nimport es from \"./es\";\ni18n.locales[\"es-ES\"] = es;\n\n// france\nimport fr from \"./fr\";\ni18n.locales[\"fr-FR\"] = fr;\n\n// italy\nimport it from \"./it\";\ni18n.locales[\"it-IT\"] = it;\n\n// japan\nimport ja from \"./ja\";\ni18n.locales[\"ja-JP\"] = ja;\n\n// portuguese\nimport pt from \"./pt\";\ni18n.locales[\"pt-BR\"] = pt;\n\n// chinese\nimport zh from \"./zh\";\ni18n.locales[\"zh-CN\"] = zh;\n\n// russian\nimport ru from \"./ru\";\ni18n.locales[\"ru-RU\"] = ru;\n\n// belarus\nimport be from \"./be\";\ni18n.locales[\"be-BY\"] = be;","/*German (Germany) locale*/\nconst de = {\n\tgroupDelimiter:\".\",\n\tgroupSize:3,\n\tdecimalDelimiter:\",\",\n\tdecimalSize:2,\n\tdateFormat:\"%d.%n.%Y\",\n\ttimeFormat:\"%H:%i\",\n\tlongDateFormat:\"%j. %F %Y\",\n\tfullDateFormat:\"%j. %F %Y %H:%i\",\n\tam:null,\n\tpm:null,\n\tprice:\"{obj} €\",\n\tpriceSettings:{\n\t\tgroupDelimiter:\".\",\n\t\tgroupSize:3,\n\t\tdecimalDelimiter:\",\",\n\t\tdecimalSize:2\n\t},\n\tcalendar:{\n\t\tmonthFull:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],\n\t\tmonthShort:[\"Jan\",\"Feb\",\"Mrz\",\"Apr\",\"Mai\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],\n\t\tdayFull:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"],\n\t\tdayShort:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],\n\t\thours: \"Stunden\",\n\t\tminutes: \"Minuten\",\n\t\tdone:\"Fertig\",\n\t\tclear: \"Entfernen\",\n\t\ttoday: \"Heute\"\n\t},\n\n\tdataExport:{\n\t\tpage:\"Seite\",\n\t\tof:\"aus\"\n\t},\n\tPDFviewer:{\n\t\tof:\"aus\",\n\t\tautomaticZoom:\"Automatisch Zoom\",\n\t\tactualSize:\"Aktuelles Ausmaß\",\n\t\tpageFit:\"Seite Ausmaß\",\n\t\tpageWidth:\"Seite Breite\",\n\t\tpageHeight:\"Seite Höhe\",\n\t\tenterPassword:\"Passwort eingeben\",\n\t\tpasswordError:\"Falsches passwort\"\n\t},\n\taria:{\n\t\tcalendar:\"Kalender\",\n\t\tincreaseValue:\"Wert erhöhen\",\n\t\tdecreaseValue:\"Wert verringern\",\n\t\tnavMonth:[\"Vorheriger Monat\", \"Nächsten Monat\"],\n\t\tnavYear:[\"Vorheriges Jahr\", \"Nächstes Jahr\"],\n\t\tnavDecade:[\"Zurück Jahrzehnt\", \"Als nächstes Jahrzehnt\"],\n\t\tdateFormat:\"%j. %F %Y\",\n\t\tmonthFormat:\"%F %Y\",\n\t\tyearFormat:\"%Y\",\n\t\thourFormat:\"Stunden: %H\",\n\t\tminuteFormat:\"Minuten: %i\",\n\t\tremoveItem:\"Element entfernen\",\n\t\tpages:[\"Erste Seite\", \"Vorherige Seite\", \"Folgeseite\", \"Letzte Seite\"],\n\t\tpage:\"Seite\",\n\t\theadermenu:\"Titelmenü\",\n\t\topenGroup:\"Öffnen Spaltengruppe \",\n\t\tcloseGroup:\"Schließen Spaltengruppe \",\n\t\tcloseTab:\"Tab schließen\",\n\t\tshowTabs:\"Weitere Tabs\",\n\t\tresetTreeMap:\"Zurück zur ursprünglichen Ansicht\",\n\t\tnavTreeMap:\"Aufleveln\",\n\t\tnextTab:\"Weiter tab\",\n\t\tprevTab:\"Zurück tab\",\n\t\tmultitextSection:\"Element hinzufügen\",\n\t\tmultitextextraSection:\"Element entfernen\",\n\t\tshowChart:\"Chart anzeigen\",\n\t\thideChart:\"Chart verstecken\",\n\t\tresizeChart:\"Chart Größe ändern\"\n\t},\n\trichtext:{\n\t\tunderline: \"Unterstreichen\",\n\t\tbold: \"Fettgedruckt\",\n\t\titalic: \"Kursiv\"\n\t},\n\tcombo:{\n\t\tselect:\"Auswählen\",\n\t\tselectAll:\"Alles auswählen\",\n\t\tunselectAll:\"Alles widerrufen\"\n\t},\n\tmessage:{\n\t\tok:\"OK\",\n\t\tcancel:\"Abbrechen\"\n\t},\n\tcomments:{\n\t\tsend: \"Absenden\",\n\t\tconfirmMessage: \"Der Kommentar wird entfernt. Sind Sie sicher?\",\n\t\tedit: \"Redigieren\",\n\t\tremove: \"Löschen\",\n\t\tplaceholder: \"Geben Sie hier ein..\",\n\t\tmoreComments:\"Mehr Kommentare\"\n\t}\n};\n\nexport default de;","/*Spanish (Spain, International Sort) locale*/\nconst es = {\n\tgroupDelimiter:\".\",\n\tgroupSize:3,\n\tdecimalDelimiter:\",\",\n\tdecimalSize:2,\n\tdateFormat:\"%d/%n/%Y\",\n\ttimeFormat:\"%G:%i\",\n\tlongDateFormat:\"%d %F %Y\",\n\tfullDateFormat:\"%d %F %Y %G:%i\",\n\tam:null,\n\tpm:null,\n\tprice:\"{obj} €\",\n\tpriceSettings:{\n\t\tgroupDelimiter:\".\",\n\t\tgroupSize:3,\n\t\tdecimalDelimiter:\",\",\n\t\tdecimalSize:2\n\t},\n\tcalendar:{\n\t\tmonthFull:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"],\n\t\tmonthShort:[\"ene\",\"feb\",\"mar\",\"abr\",\"may\",\"jun\",\"jul\",\"ago\",\"sep\",\"oct\",\"nov\",\"dic\"],\n\t\tdayFull:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"],\n\t\tdayShort:[\"dom\",\"lun\",\"mar\",\"mié\",\"jue\",\"vie\",\"sáb\"],\n\t\thours: \"Horas\",\n\t\tminutes: \"Minutos\",\n\t\tdone:\"Listo\",\n\t\tclear: \"Reinicio\",\n\t\ttoday: \"Hoy\"\n\t},\n\n\tdataExport:{\n\t\tpage:\"Página\",\n\t\tof:\"de\"\n\t},\n\tPDFviewer:{\n\t\tof:\"de\",\n\t\tautomaticZoom:\"Zoom automático\",\n\t\tactualSize:\"Tamaño real\",\n\t\tpageFit:\"Tamaño de página\",\n\t\tpageWidth:\"Ancho de página\",\n\t\tpageHeight:\"Altura de la página\",\n\t\tenterPassword:\"Introduzca la contraseña\",\n\t\tpasswordError:\"Contraseña incorrecta\"\n\t},\n\taria:{\n\t\tcalendar:\"Сalendario\",\n\t\tincreaseValue:\"Aumentar el valor\",\n\t\tdecreaseValue:\"Disminuye el valor\",\n\t\tnavMonth:[\"Mes anterior\", \"Próximo mes\"],\n\t\tnavYear:[\"Año anterior\", \"Próximo año\"],\n\t\tnavDecade:[\"Década anterior\", \"Próxima década\"],\n\t\tdateFormat:\"%d %F %Y\",\n\t\tmonthFormat:\"%F %Y\",\n\t\tyearFormat:\"%Y\",\n\t\thourFormat:\"Horas: %G\",\n\t\tminuteFormat:\"Minutos: %i\",\n\t\tremoveItem:\"Retire el elemento\",\n\t\tpages:[\"Primera página\", \"Pagina anterior\", \"Siguiente página\", \"Última página\"],\n\t\tpage:\"Página\",\n\t\theadermenu:\"Menú de títulos\",\n\t\topenGroup:\"Grupo de columnas abiertas\",\n\t\tcloseGroup:\"Primer grupo de columnas\",\n\t\tcloseTab:\"Cerrar tab\",\n\t\tshowTabs:\"Mostrar más tabs\",\n\t\tresetTreeMap:\"Volver a la vista original\",\n\t\tnavTreeMap:\"Elevar a mismo nivel\",\n\t\tnextTab:\"Siguiente tab\",\n\t\tprevTab:\"Tab anterior\",\n\t\tmultitextSection:\"Añadir elemento\",\n\t\tmultitextextraSection:\"Retire el elemento\",\n\t\tshowChart:\"Espectáculo chart\",\n\t\thideChart:\"Esconder chart\",\n\t\tresizeChart:\"Cambiar el tamaño el chart\"\n\t},\n\trichtext:{\n\t\tunderline: \"Subrayar\",\n\t\tbold: \"Negrita\",\n\t\titalic: \"Itálico\"\n\t},\n\tcombo:{\n\t\tselect:\"Seleccionar\",\n\t\tselectAll:\"Seleccionar todo\",\n\t\tunselectAll:\"Deselecciona todo\"\n\t},\n\tmessage:{\n\t\tok:\"OK\",\n\t\tcancel:\"Cancelar\"\n\t},\n\tcomments:{\n\t\tsend: \"Enviar\",\n\t\tconfirmMessage: \"El comentario será eliminado. Estás seguro?\",\n\t\tedit: \"Corregir\",\n\t\tremove: \"Suprimir\",\n\t\tplaceholder: \"Escriba aquí..\",\n\t\tmoreComments:\"Más comentarios\"\n\t}\n};\n\nexport default es;","const fr = {\n\tgroupDelimiter:\" \",\n\tgroupSize:3,\n\tdecimalDelimiter:\",\",\n\tdecimalSize:2,\n\n\tdateFormat:\"%d/%m/%Y\",\n\ttimeFormat:\"%H:%i\",\n\tlongDateFormat:\"%d %F %Y\",\n\tfullDateFormat:\"%d.%m.%Y %H:%i\",\n\n\tprice:\"{obj} €\",\n\tpriceSettings:null, //use number defaults\n\t\n\tcalendar:{\n\t\tmonthFull:[\"Janvier\", \"Février\", \"Mars\", \"Avril\", \"Mai\", \"Juin\", \"Juillet\", \"Août\", \"Septembre\", \"Octobre\", \"Novembre\", \"Décembre\"],\n\t\tmonthShort:[\"Jan\", \"Fév\", \"Mar\", \"Avr\", \"Mai\", \"Juin\", \"Juil\", \"Aôu\", \"Sep\", \"Oct\", \"Nov\", \"Déc\"],\t\n\t\tdayFull:[\"Dimanche\", \"Lundi\", \"Mardi\", \"Mercredi\", \"Jeudi\", \"Vendredi\", \"Samedi\"],\n\t\tdayShort:[\"Dim\", \"Lun\", \"Mar\", \"Mer\", \"Jeu\", \"Ven\", \"Sam\"],\n\t\thours: \"Heures\",\n\t\tminutes: \"Minutes\",\n\t\tdone:\"Fini\",\n\t\tclear: \"Effacer\",\n\t\ttoday: \"Aujourd'hui\"\n\t},\n\n\tdataExport:{\n\t\tpage:\"Page\",\n\t\tof:\"sur\"\n\t},\n\tPDFviewer:{\n\t\tof:\"sur\",\n\t\tautomaticZoom:\"Zoom automatique\",\n\t\tactualSize:\"Taille actuelle\",\n\t\tpageFit:\"Taille de la page\",\n\t\tpageWidth:\"Largeur de la page\",\n\t\tpageHeight:\"Hauteur de page\",\n\t\tenterPassword:\"Entrez le mot de passe\",\n\t\tpasswordError:\"Mauvais mot de passe\"\n\t},\n\taria:{\n\t\tcalendar:\"Сalendrier\",\n\t\tincreaseValue:\"Augmenter la valeur\",\n\t\tdecreaseValue:\"Diminution de la valeur\",\n\t\tnavMonth:[\"Le mois précédent\", \"Le mois prochain\"],\n\t\tnavYear:[\"Année précédente\", \"L'année prochaine\"],\n\t\tnavDecade:[\"Décennie précédente\", \"Suivant décennie\"],\n\t\tdateFormat:\"%d %F %Y\",\n\t\tmonthFormat:\"%F %Y\",\n\t\tyearFormat:\"%Y\",\n\t\thourFormat:\"Heures: %H\",\n\t\tminuteFormat:\"Minutes: %i\",\n\t\tremoveItem:\"Retirer l'élément\",\n\t\tpages:[\"Première page\", \"Page précédente\", \"Page suivante\", \"Dernière page\"],\n\t\tpage:\"Page\",\n\t\theadermenu:\"Menu de titre\",\n\t\topenGroup:\"Ouvrir groupe de colonnes \",\n\t\tcloseGroup:\"Fermer groupe de colonnes\",\n\t\tcloseTab:\"Fermer tab\",\n\t\tshowTabs:\"Montrer plus tabs\",\n\t\tresetTreeMap:\"Revenir à la vue originale\",\n\t\tnavTreeMap:\"Niveau supérieur\",\n\t\tnextTab:\"Prochain tab\",\n\t\tprevTab:\"Précédent tab\",\n\t\tmultitextSection:\"Ajouter l'élément\",\n\t\tmultitextextraSection:\"Retirer l'élément\",\n\t\tshowChart:\"Montrer chart\",\n\t\thideChart:\"Cacher chart\",\n\t\tresizeChart:\"Redimensionner chart\"\n\t},\n\trichtext:{\n\t\tunderline: \"Souligner\",\n\t\tbold: \"Gras\",\n\t\titalic: \"Italique\"\n\t},\n\tcombo:{\n\t\tselect:\"Sélectionner\",\n\t\tselectAll:\"Tout sélectionner\",\n\t\tunselectAll:\"Tout déselectionner\"\n\t},\n\tmessage:{\n\t\tok:\"OK\",\n\t\tcancel:\"Annuler\"\n\t},\n\tcomments:{\n\t\tsend: \"Envoyer\",\n\t\tconfirmMessage: \"Le commentaire sera supprimé. Êtes-vous sûr?\",\n\t\tedit: \"Modifier\",\n\t\tremove: \"Effacer\",\n\t\tplaceholder: \"Écrivez ici..\",\n\t\tmoreComments:\"Plus de commentaires\"\n\t}\n};\n\nexport default fr;","/*Italian (Italy) locale*/\nconst it = {\n\tgroupDelimiter:\".\",\n\tgroupSize:3,\n\tdecimalDelimiter:\",\",\n\tdecimalSize:2,\n\tdateFormat:\"%d/%m/%Y\",\n\ttimeFormat:\"%H:%i\",\n\tlongDateFormat:\"%j %F %Y\",\n\tfullDateFormat:\"%j %F %Y %H:%i\",\n\tam:null,\n\tpm:null,\n\tprice:\"€ {obj}\",\n\tpriceSettings:{\n\t\tgroupDelimiter:\".\",\n\t\tgroupSize:3,\n\t\tdecimalDelimiter:\",\",\n\t\tdecimalSize:2\n\t},\n\tcalendar:{\n\t\tmonthFull:[\"gennaio\",\"febbraio\",\"marzo\",\"aprile\",\"maggio\",\"giugno\",\"luglio\",\"agosto\",\"settembre\",\"ottobre\",\"novembre\",\"dicembre\"],\n\t\tmonthShort:[\"gen\",\"feb\",\"mar\",\"apr\",\"mag\",\"giu\",\"lug\",\"ago\",\"set\",\"ott\",\"nov\",\"dic\"],\n\t\tdayFull:[\"domenica\",\"lunedì\",\"martedì\",\"mercoledì\",\"giovedì\",\"venerdì\",\"sabato\"],\n\t\tdayShort:[\"dom\",\"lun\",\"mar\",\"mer\",\"gio\",\"ven\",\"sab\"],\n\t\thours: \"Orario\",\n\t\tminutes: \"Minuti\",\n\t\tdone:\"Pronto\",\n\t\tclear: \"Pulisci\",\n\t\ttoday: \"Oggi\"\n\t},\n\n\tdataExport:{\n\t\tpage:\"Pagina\",\n\t\tof:\"di\"\n\t},\n\tPDFviewer:{\n\t\tof:\"di\",\n\t\tautomaticZoom:\"Zoom automatico\",\n\t\tactualSize:\"Dimensione reale\",\n\t\tpageFit:\"Dimensioni della pagina\",\n\t\tpageWidth:\"Larghezza della pagina\",\n\t\tpageHeight:\"Altezza della pagina\",\n\t\tenterPassword:\"Inserisci la password\",\n\t\tpasswordError:\"Password errata\"\n\t},\n\taria:{\n\t\tcalendar:\"Calendario\",\n\t\tincreaseValue:\"Aumenta il valore\",\n\t\tdecreaseValue:\"Riduci il valore\",\n\t\tnavMonth:[\"Il mese scorso\", \"Il prossimo mese\"],\n\t\tnavYear:[\"L'anno scorso\", \"L'anno prossimo\"],\n\t\tnavDecade:[\"Decennio precedente\", \"Prossimo decennio\"],\n\t\tdateFormat:\"%j %F %Y\",\n\t\tmonthFormat:\"%F %Y\",\n\t\tyearFormat:\"%Y\",\n\t\thourFormat:\"Orario: %H\",\n\t\tminuteFormat:\"Minuti: %i\",\n\t\tremoveItem:\"Rimuovere l'elemento\",\n\t\tpages:[\"Prima pagina\", \"Pagina precedente\", \"Pagina successiva\", \"Ultima pagina\"],\n\t\tpage:\"Pagina\",\n\t\theadermenu:\"Menu del titolo\",\n\t\topenGroup:\"Aperto gruppo di colonne\",\n\t\tcloseGroup:\"Chiudi gruppo di colonne\",\n\t\tcloseTab:\"Chiudi tab\",\n\t\tshowTabs:\"Mostra più tabs\",\n\t\tresetTreeMap:\"Tornare alla vista originale\",\n\t\tnavTreeMap:\"Livello superiore\",\n\t\tnextTab:\"Tab successivo\",\n\t\tprevTab:\"Tab precedente\",\n\t\tmultitextSection:\"Aggiungi elemento\",\n\t\tmultitextextraSection:\"Rimuovere l'elemento\",\n\t\tshowChart:\"Mostrare grafico\",\n\t\thideChart:\"Nascondere grafico\",\n\t\tresizeChart:\"Ridimensionare grafico\"\n\t},\n\trichtext:{\n\t\tunderline: \"Sottolineare\",\n\t\tbold: \"Grassetto\",\n\t\titalic: \"Corsivo\"\n\t},\n\tcombo:{\n\t\tselect:\"Selezionare\",\n\t\tselectAll:\"Seleziona tutto\",\n\t\tunselectAll:\"Deseleziona tutto\"\n\t},\n\tmessage:{\n\t\tok:\"OK\",\n\t\tcancel:\"Annullare\"\n\t},\n\tcomments:{\n\t\tsend: \"Inviare\",\n\t\tconfirmMessage: \"Il commento verrà rimosso. Sei sicuro?\",\n\t\tedit: \"Correggere\",\n\t\tremove: \"Elimina\",\n\t\tplaceholder: \"Digitare qui..\",\n\t\tmoreComments:\"Altri commenti\"\n\t}\n};\n\nexport default it;","const ja = {\n\tgroupDelimiter:\",\",\n\tgroupSize:3,\n\tdecimalDelimiter:\".\",\n\tdecimalSize:2,\n\n\tdateFormat:\"%Y.%m.%d\",\n\ttimeFormat:\"%H:%i\",\n\tlongDateFormat:\"%Y年%m月%d日\",\n\tfullDateFormat:\"%Y.%m.%d %H:%i\",\n\n\tprice:\"¥{obj}\",\n\tpriceSettings:{\n\t\tgroupSize:3,\n\t\tgroupDelimiter:\",\",\n\t\tdecimalDelimiter:\"\",\n\t\tdecimalSize:0\n\t},\n\n\tcalendar:{\n\t\tmonthFull:[\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\n\t\tmonthShort:[ \"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"],\n\t\tdayFull:[\"日曜日\", \"月曜日\", \"火曜日\", \"水曜日\", \"木曜日\", \"金曜日\", \"土曜日\"],\n\t\tdayShort:[\"日\", \"月\", \"火\", \"水\", \"木\", \"金\", \"土\"],\n\t\thours: \"営業時間\",\n\t\tminutes: \"分\",\n\t\tdone: \"レディー\",\n\t\tclear: \"削除する\",\n\t\ttoday: \"今日\"\n\t},\n\n\tdataExport:{\n\t\tpage:\"ページ\",\n\t\tof:\"から\"\n\t},\n\tPDFviewer:{\n\t\tof:\"から\",\n\t\tautomaticZoom:\"自動ズーム\",\n\t\tactualSize:\"実サイズ\",\n\t\tpageFit:\"ページサイズ\",\n\t\tpageWidth:\"ページ幅\",\n\t\tpageHeight:\"ページの高さ\",\n\t\tenterPassword:\"パスワードを入力する\",\n\t\tpasswordError:\"間違ったパスワード\"\n\t},\n\taria:{\n\t\tcalendar:\"カレンダー\",\n\t\tincreaseValue:\"増加値\",\n\t\tdecreaseValue:\"数字を小さく\",\n\t\tnavMonth:[\"前の月\", \"来月\"],\n\t\tnavYear:[\"前年\", \"来年\"],\n\t\tnavDecade:[\"前の十年\", \"次の10年\"],\n\t\tdateFormat:\"%Y年%m月%d日\",\n\t\tmonthFormat:\"%Y年%m月\",\n\t\tyearFormat:\"%Y年\",\n\t\thourFormat:\"営業時間: %H\",\n\t\tminuteFormat:\"分: %i\",\n\t\tremoveItem:\"要素を削除します\",\n\t\tpages:[\"一ページ目\", \"前のページ\", \"次のページ\", \"最後のページ\"],\n\t\tpage:\"ページ\",\n\t\theadermenu:\"ヘッダメニュー\",\n\t\topenGroup:\"オープン列グループ\",\n\t\tcloseGroup:\"閉じる列グループ\",\n\t\tcloseTab:\"タブを閉じます\",\n\t\tshowTabs:\"複数のタブを表示します\",\n\t\tresetTreeMap:\"元の表示に戻ります\",\n\t\tnavTreeMap:\"レベルパック\",\n\t\tnextTab:\"次のタブ\",\n\t\tprevTab:\"前のタブ\",\n\t\tmultitextSection:\"要素を追加します。\",\n\t\tmultitextextraSection:\"要素を削除します\",\n\t\tshowChart:\"靴チャート\",\n\t\thideChart:\"隠すチャート\",\n\t\tresizeChart:\"グラフのサイズを変更\"\n\t},\n\trichtext:{\n\t\tunderline: \"アンダーライン\",\n\t\tbold: \"大胆な\",\n\t\titalic: \"イタリック\"\n\t},\n\tcombo:{\n\t\tselect:\"選択する\",\n\t\tselectAll:\"すべて選択\",\n\t\tunselectAll:\"すべての選択を解除する\"\n\t},\n\tmessage:{\n\t\tok:\"OK\",\n\t\tcancel:\"取り消す\"\n\t},\n\tcomments:{\n\t\tsend: \"送信\",\n\t\tconfirmMessage: \"コメントは削除されます. 本気ですか?\",\n\t\tedit: \"編集\",\n\t\tremove: \"削除\",\n\t\tplaceholder: \"ここに入力..\",\n\t\tmoreComments:\"その他のコメント\"\n\t}\n};\n\nexport default ja;","const pt = {\n\tgroupDelimiter:\".\",\n\tgroupSize:3,\n\tdecimalDelimiter:\",\",\n\tdecimalSize:2,\n\n\tdateFormat:\"%d/%m/%Y\",\n\ttimeFormat:\"%G:%i\",\n\tlongDateFormat:\"%d de %F de %Y\",\n\tfullDateFormat:\"%d de %F de %Y %G:%i\",\n\n\tam:null,\n\tpm:null,\n\tprice:\"R$ {obj}\",\n\tpriceSettings:{\n\t\tgroupDelimiter:\".\",\n\t\tgroupSize:3,\n\t\tdecimalDelimiter:\",\",\n\t\tdecimalSize:2\n\t},\n\tfileSize: [\"b\",\"Kb\",\"Mb\",\"Gb\",\"Tb\",\"Pb\",\"Eb\"],\n\tcalendar:{\n\t\tmonthFull:[\"Janeiro\",\"Fevereiro\",\"Março\",\"Abril\",\"Maio\",\"Junho\",\"Julho\",\"Agosto\",\"Setembro\",\"Outubro\",\"Novembro\",\"Dezembro\"],\n\t\tmonthShort:[\"Jan\",\"Fev\",\"Mar\",\"Abr\",\"Mai\",\"Jun\",\"Jul\",\"Ago\",\"Set\",\"Out\",\"Nov\",\"Dez\"],\n\t\tdayFull:[\"Domingo\",\"Segunda-Feira\",\"Terça-Feira\",\"Quarta-Feira\",\"Quinta-Feira\",\"Sexta-Feira\",\"Sábado\"],\n\t\tdayShort:[\"Dom\",\"Seg\",\"Ter\",\"Qua\",\"Qui\",\"Sex\",\"Sáb\"],\n\t\thours: \"Horas\",\n\t\tminutes: \"Minutos\",\n\t\tdone:\"Feito\",\n\t\tclear: \"Limpar\",\n\t\ttoday: \"Hoje\"\n\t},\n\n\tdataExport:{\n\t\tpage:\"Página\",\n\t\tof:\"de\"\n\t},\n\tPDFviewer:{\n\t\tof:\"de\",\n\t\tautomaticZoom:\"Zoom automático\",\n\t\tactualSize:\"Tamanho atual\",\n\t\tpageFit:\"Tamanho da página\",\n\t\tpageWidth:\"Largura da página\",\n\t\tpageHeight:\"Altura da página\",\n\t\tenterPassword:\"Digite a senha\",\n\t\tpasswordError:\"Senha incorreta\"\n\t},\n\taria:{\n\t\tcalendar:\"Calendário\",\n\t\tincreaseValue:\"Aumentar o valor\",\n\t\tdecreaseValue:\"Diminuir o valor\",\n\t\tnavMonth:[\"Mês anterior\", \"Próximo mês\"],\n\t\tnavYear:[\"Ano anterior\", \"Próximo ano\"],\n\t\tnavDecade:[\"Década anterior\", \"Próxima década\"],\n\t\tdateFormat:\"%d de %F de %Y\",\n\t\tmonthFormat:\"%F de %Y\",\n\t\tyearFormat:\"%Y\",\n\t\thourFormat:\"Horas: %G\",\n\t\tminuteFormat:\"Minutos: %i\",\n\t\tremoveItem:\"Remover elemento\",\n\t\tpages:[\"Primeira página\", \"Página anterior\", \"Próxima página\", \"Última página\"],\n\t\tpage:\"Página\",\n\t\theadermenu:\"Menu de títulos\",\n\t\topenGroup:\"Grupo coluna aberta\",\n\t\tcloseGroup:\"Fechar grupo de colunas\",\n\t\tcloseTab:\"Fechar tab\",\n\t\tshowTabs:\"Mostre mais tabs\",\n\t\tresetTreeMap:\"Мoltar à vista original\",\n\t\tnavTreeMap:\"Upar\",\n\t\tnextTab:\"Próximo tab\",\n\t\tprevTab:\"Anterior tab\",\n\t\tmultitextSection:\"Adicionar elemento\",\n\t\tmultitextextraSection:\"Remover elemento\",\n\t\tshowChart:\"Exposição chart\",\n\t\thideChart:\"Esconder chart\",\n\t\tresizeChart:\"Redimensionar chart\"\n\t},\n\trichtext:{\n\t\tunderline: \"Sublinhado\",\n\t\tbold: \"Negrito\",\n\t\titalic: \"itálico\"\n\t},\n\tcombo:{\n\t\tselect:\"Selecionar\",\n\t\tselectAll:\"Selecionar tudo\",\n\t\tunselectAll:\"Desmarque todos\"\n\t},\n\tmessage:{\n\t\tok:\"OK\",\n\t\tcancel:\"Cancelar\"\n\t},\n\tcomments:{\n\t\tsend: \"Enviar\",\n\t\tconfirmMessage: \"Comentário será removido. Você tem certeza?\",\n\t\tedit: \"Editar\",\n\t\tremove: \"Excluir\",\n\t\tplaceholder: \"Digite aqui..\",\n\t\tmoreComments:\"Mais comentários\"\n\t}\n};\n\nexport default pt;","/*Chinese (Simplified, PRC) locale*/\nconst zh = {\n\tgroupDelimiter:\",\",\n\tgroupSize:3,\n\tdecimalDelimiter:\".\",\n\tdecimalSize:2,\n\tdateFormat:\"%Y/%m/%j\",\n\ttimeFormat:\"%G:%i\",\n\tlongDateFormat:\"%Y'年'%m'月'%j'日'\",\n\tfullDateFormat:\"%Y'年'%m'月'%j'日' %G:%i\",\n\tam:[\"上午\",\"上午\"],\n\tpm:[\"下午\",\"下午\"],\n\tprice:\"¥{obj}\",\n\tpriceSettings:{\n\t\tgroupDelimiter:\",\",\n\t\tgroupSize:3,\n\t\tdecimalDelimiter:\".\",\n\t\tdecimalSize:2\n\t},\n\tcalendar:{\n\t\tmonthFull:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],\n\t\tmonthShort:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],\n\t\tdayFull:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"],\n\t\tdayShort:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],\n\t\thours: \"小时\",\n\t\tminutes: \"分钟\",\n\t\tdone:\"完成\",\n\t\tclear: \"清除\",\n\t\ttoday: \"今天\"\n\t},\n\n\tdataExport:{\n\t\tpage:\"页\",\n\t\tof:\"从\"\n\t},\n\tPDFviewer:{\n\t\tof:\"从\",\n\t\tautomaticZoom:\"自动设置页面大小\",\n\t\tactualSize:\"实际尺寸\",\n\t\tpageFit:\"页面大小\",\n\t\tpageWidth:\"页面宽度\",\n\t\tpageHeight:\"页面高度\",\n\t\tenterPassword:\"输入密码\",\n\t\tpasswordError:\"密码错误\"\n\t},\n\taria:{\n\t\tcalendar:\"日历\",\n\t\tincreaseValue:\"增加值\",\n\t\tdecreaseValue:\"减少值\",\n\t\tnavMonth:[\"上个月\", \"下个月\"],\n\t\tnavYear:[\"上年\", \"明年\"],\n\t\tnavDecade:[\"过去十年\", \"下个十年\"],\n\t\tdateFormat:\"%Y'年'%m'月'%j'日'\",\n\t\tmonthFormat:\"%Y'年'%m'月\",\n\t\tyearFormat:\"%Y'年\",\n\t\thourFormat:\"小时: %G\",\n\t\tminuteFormat:\"分钟: %i\",\n\t\tremoveItem:\"删除元素\",\n\t\tpages:[\"第一页\", \"上一页\", \"下一页\", \"最后一页\"],\n\t\tpage:\"页\",\n\t\theadermenu:\"标题菜单\",\n\t\topenGroup:\"打开栏目组\",\n\t\tcloseGroup:\"关闭栏目组\",\n\t\tcloseTab:\"关闭标签\",\n\t\tshowTabs:\"显示更多选项卡\",\n\t\tresetTreeMap:\"回到原来的视图\",\n\t\tnavTreeMap:\"升级\",\n\t\tnextTab:\"下一个标签\",\n\t\tprevTab:\"前一个标签\",\n\t\tmultitextSection:\"加元\",\n\t\tmultitextextraSection:\"删除元素\",\n\t\tshowChart:\"显示图表\",\n\t\thideChart:\"隐藏图表\",\n\t\tresizeChart:\"调整图\"\n\t},\n\trichtext:{\n\t\tunderline: \"强调\",\n\t\tbold: \"粗體\",\n\t\titalic: \"斜体\"\n\t},\n\tcombo:{\n\t\tselect:\"选择\",\n\t\tselectAll:\"全选\",\n\t\tunselectAll:\"全部取消选择\"\n\t},\n\tmessage:{\n\t\tok:\"好\",\n\t\tcancel:\"取消\"  \n\t},\n\tcomments:{\n\t\tsend: \"发送\",\n\t\tconfirmMessage: \"评论将被删除. 你确定吗?\",\n\t\tedit: \"编辑\",\n\t\tremove: \"去掉\",\n\t\tplaceholder: \"在此输入..\",\n\t\tmoreComments:\"更多评论\"\n\t}\n};\n\nexport default zh;","const ru = {\n\tgroupDelimiter:\" \",\n\tgroupSize:3,\n\tdecimalDelimiter:\",\",\n\tdecimalSize:2,\n\n\tdateFormat:\"%d.%m.%Y\",\n\ttimeFormat:\"%H:%i\",\n\tlongDateFormat:\"%d %F %Y\",\n\tfullDateFormat:\"%d.%m.%Y %H:%i\",\n\n\tprice:\"{obj} руб.\",\n\tpriceSettings:null, //use number defaults\n\t\n\tcalendar:{\n\t\tmonthFull:[\"Январь\", \"Февраль\", \"Март\", \"Апрель\", \"Maй\", \"Июнь\", \"Июль\", \"Август\", \"Сентябрь\", \"Oктябрь\", \"Ноябрь\", \"Декабрь\"],\n\t\tmonthShort:[\"Янв\", \"Фев\", \"Maр\", \"Aпр\", \"Maй\", \"Июн\", \"Июл\", \"Aвг\", \"Сен\", \"Окт\", \"Ноя\", \"Дек\"],\n\t\tdayFull:[ \"Воскресенье\", \"Понедельник\", \"Вторник\", \"Среда\", \"Четверг\", \"Пятница\", \"Суббота\"],\n\t\tdayShort:[\"Вс\", \"Пн\", \"Вт\", \"Ср\", \"Чт\", \"Пт\", \"Сб\"],\n\t\thours: \"Часы\",\n\t\tminutes: \"Минуты\",\n\t\tdone: \"Гoтовo\",\n\t\tclear: \"Очистить\",\n\t\ttoday: \"Сегодня\"\n\t},\n\n\tdataExport:{\n\t\tpage:\"Страница\",\n\t\tof:\"из\"\n\t},\n\tPDFviewer:{\n\t\tof:\"из\",\n\t\tautomaticZoom:\"Автоматический зум\",\n\t\tactualSize:\"Настоящий размер\",\n\t\tpageFit:\"Размер страницы\",\n\t\tpageWidth:\"Ширина страницы\",\n\t\tpageHeight:\"Высота страницы\",\n\t\tenterPassword:\"Введите пароль\",\n\t\tpasswordError:\"Неверный пароль\"\n\t},\n\taria:{\n\t\tcalendar:\"Календарь\",\n\t\tincreaseValue:\"Увеличить значение\",\n\t\tdecreaseValue:\"Уменьшить значение\",\n\t\tnavMonth:[\"Предыдущий месяц\", \"Следующий месяц\"],\n\t\tnavYear:[\"Предыдущий год\", \"Следующий год\"],\n\t\tnavDecade:[\"Предыдущие десять лет\", \"Следующие десять лет\"],\n\t\tdateFormat:\"%d %F %Y\",\n\t\tmonthFormat:\"%F %Y\",\n\t\tyearFormat:\"%Y\",\n\t\thourFormat:\"Часы: %H\",\n\t\tminuteFormat:\"Минуты: %i\",\n\t\tremoveItem:\"Удалить элемент\",\n\t\tpages:[\"Первая страница\", \"Предыдущая страница\", \"Следующая страница\", \"Последняя страница\"],\n\t\tpage:\"Страница\",\n\t\theadermenu:\"Меню шапки таблицы\",\n\t\topenGroup:\"Развернуть группу столбцов\",\n\t\tcloseGroup:\"Свернуть группу столбцов\",\n\t\tcloseTab:\"Закрыть вкладку\",\n\t\tshowTabs:\"Показать больше вкладок\",\n\t\tresetTreeMap:\"Вернуться к первоначальному представлению\",\n\t\tnavTreeMap:\"Перейти на уровень выше\",\n\t\tnextTab:\"Следующая вкладка\",\n\t\tprevTab:\"Предыдущая вкладка\",\n\t\tmultitextSection:\"Добавить элемент\",\n\t\tmultitextextraSection:\"Удалить элемент\",\n\t\tshowChart:\"Показать чарт\",\n\t\thideChart:\"Спрятать чарт\",\n\t\tresizeChart:\"Изменить размер чарта\"\n\t},\n\trichtext:{\n\t\tunderline: \"Подчеркивание\",\n\t\tbold: \"Жирный\",\n\t\titalic: \"Курсив\"\n\t},\n\tcombo:{\n\t\tselect:\"Выбрать\",\n\t\tselectAll:\"Выбрать все\",\n\t\tunselectAll:\"Сброс выбора\"\n\t},\n\tmessage:{\n\t\tok:\"OK\",\n\t\tcancel:\"Отмена\"\n\t},\n\tcomments:{\n\t\tsend: \"Отправить\",\n\t\tconfirmMessage: \"Комментарий будет удален. Вы уверены?\",\n\t\tedit: \"Редактировать\",\n\t\tremove: \"Удалить\",\n\t\tplaceholder: \"Введите текст..\",\n\t\tmoreComments:\"Больше комментариев\"\n\t}\n};\n\nexport default ru;","const be = {\n\tgroupDelimiter:\" \",\n\tgroupSize:3,\n\tdecimalDelimiter:\",\",\n\tdecimalSize:2,\n\n\tdateFormat:\"%d.%m.%Y\",\n\ttimeFormat:\"%H:%i\",\n\tlongDateFormat:\"%d %F %Y\",\n\tfullDateFormat:\"%d.%m.%Y %H:%i\",\n\n\tprice:\"{obj} руб.\",\n\tpriceSettings:{\n\t\tgroupSize:3,\n\t\tgroupDelimiter:\" \",\n\t\tdecimalDelimiter:\"\",\n\t\tdecimalSize:0\n\t},\n\n\tcalendar:{\n\t\tmonthFull:[\"Студзень\", \"Люты\", \"Сакавік\", \"Красавік\", \"Травень\", \"Чэрвень\", \"Ліпень\", \"Жнівень\", \"Верасень\", \"Кастрычнік\", \"Лістапад\", \"Снежань\"],\n\t\tmonthShort:[\"Студз\", \"Лют\", \"Сак\", \"Крас\", \"Трав\", \"Чэр\", \"Ліп\", \"Жнів\", \"Вер\", \"Каст\", \"Ліст\", \"Снеж\"],\n\t\tdayFull:[ \"Нядзеля\", \"Панядзелак\", \"Аўторак\", \"Серада\", \"Чацвер\", \"Пятніца\", \"Субота\"],\n\t\tdayShort:[\"Нд\", \"Пн\", \"Аўт\", \"Ср\", \"Чцв\", \"Пт\", \"Сб\"],\n\t\thours: \"Гадзіны\",\n\t\tminutes: \"Хвіліны\",\n\t\tdone: \"Гатова\",\n\t\ttoday: \"Cёння\",\n\t\tclear: \"Ачысціць\"\n\t},\n\n\tdataExport:{\n\t\tpage:\"Старонка\",\n\t\tof:\"з\"\n\t},\n\tPDFviewer:{\n\t\tof:\"з\",\n\t\tautomaticZoom:\"Аўтаматычны зум\",\n\t\tactualSize:\"Сапраўдны памер\",\n\t\tpageFit:\"Памер старонкі\",\n\t\tpageWidth:\"Шырыня старонкі\",\n\t\tpageHeight:\"Вышыня старонкі\",\n\t\tenterPassword:\"Увядзіце пароль\",\n\t\tpasswordError:\"Няправільны пароль\"\n\t},\n\taria:{\n\t\tcalendar:\"Каляндар\",\n\t\tincreaseValue:\"Павялічыць значэнне\",\n\t\tdecreaseValue:\"Паменшыць значэнне\",\n\t\tnavMonth:[\"Папярэдні месяц\", \"Наступны месяц\"],\n\t\tnavYear:[\"Папярэдні год\", \"Наступны год\"],\n\t\tnavDecade:[\"Папярэднія дзесяць год\", \"Наступныя дзесяць год\"],\n\t\tdateFormat:\"%d %F %Y\",\n\t\tmonthFormat:\"%F %Y\",\n\t\tyearFormat:\"%Y\",\n\t\thourFormat:\"Hours: %h\",\n\t\tminuteFormat:\"Гадзіны: %i\",\n\t\tremoveItem:\"Прыбраць элемент\",\n\t\tpages:[\"Першая старонка\", \"Папярэдняя старонка\", \"Наступная старонка\", \"Апошняя старонка\"],\n\t\tpage:\"Старонка\",\n\t\theadermenu:\"Меню загалоўка\",\n\t\topenGroup:\"Адкрыць групу слупкоў\",\n\t\tcloseGroup:\"Закрыць групу слупкоў\",\n\t\tcloseTab:\"Закрыць укладку\",\n\t\tshowTabs:\"Паказаць больш укладак\",\n\t\tresetTreeMap:\"Вярнуцца да першапачатковага выгляду\",\n\t\tnavTreeMap:\"Падняцца на ўзровень вышэй\",\n\t\tnextTab:\"Наступная ўкладка\",\n\t\tprevTab:\"Папярэдняя ўкладка\",\n\t\tmultitextSection:\"Дадаць элемент\",\n\t\tmultitextextraSection:\"Прыбраць элемент\",\n\t\tshowChart:\"Паказаць графік\",\n\t\thideChart:\"Схаваць графік\",\n\t\tresizeChart:\"Змяніць памер графіка\"\n\t},\n\trichtext:{\n\t\tunderline: \"Падкрэсліванне\",\n\t\tbold: \"Паўтлусты\",\n\t\titalic: \"Курсіў\"\n\t},\n\tcombo:{\n\t\tselect:\"Абраць\",\n\t\tselectAll:\"Абраць усё\",\n\t\tunselectAll:\"Ачысціць ўсе\"\n\t},\n\tmessage:{\n\t\tok:\"ОК\",\n\t\tcancel:\"Адмена\"\n\t},\n\tcomments:{\n\t\tsend: \"Даслаць\",\n\t\tconfirmMessage: \"Каментарый будзе выдалены. Вы ўпэўнены?\",\n\t\tedit: \"Рэдагаваць\",\n\t\tremove: \"Выдаліць\",\n\t\tplaceholder: \"Пішыце тут..\",\n\t\tmoreComments:\"Больш каментарыяў\"\n\t}\n};\n\nexport default be;","import {protoUI} from \"../ui/core\";\n\nimport base from \"./view\";\n\nconst api = {\n\tname:\"spacer\",\n\tdefaults:{\n\t\tborderless:true\n\t},\n\t$init:function(){\n\t\tthis._viewobj.className += \" webix_spacer\";\n\t}\n};\n\nconst view = protoUI(api, base.view);\nexport default { api, view };","import {protoUI} from \"../ui/core\";\n\nimport {extend,bind,toNode,delay} from \"../webix/helpers\";\nimport {ajax} from \"../load/ajax\";\nimport {create, getTextSize} from \"../webix/html\";\nimport {$active} from \"../webix/skin\";\n\n\nimport base from \"./view\";\nimport template from \"../webix/template\";\n\nimport AutoTooltip from \"../core/autotooltip\";\nimport AtomDataLoader from \"../core/atomdataloader\";\nimport AtomRender from \"../core/atomrender\";\nimport MouseEvents from \"../core/mouseevents\";\nimport EventSystem from \"../core/eventsystem\";\nimport Scrollable from \"../core/scrollable\";\n\n\nconst api = {\n\tname:\"template\",\n\t$init:function(config){\n\t\tconst subtype = this._template_types[config.type];\n\t\tif (subtype){\n\t\t\tif (subtype.css && config.css)\n\t\t\t\tthis._viewobj.className += \" \"+subtype.css;\n\t\t\textend(config, subtype);\n\n\t\t\t//will reset borders for \"section\"\n\t\t\tif (config.borderless){\n\t\t\t\tdelete config._inner;\n\t\t\t\tthis._set_inner(config);\n\t\t\t}\n\t\t}\n\n\t\tif (this._dataobj == this._viewobj){\n\t\t\tthis._dataobj = create(\"DIV\");\n\t\t\tthis._dataobj.className = \" webix_template\";\n\t\t\tthis._viewobj.appendChild(this._dataobj);\n\t\t} else \n\t\t\tthis._dataobj.className += \" webix_template\";\n\n\t\tthis.attachEvent(\"onAfterRender\", this._correct_width_scroll);\n\t},\n\tsetValues:function(obj, update){\n\t\tthis.data = update?extend(this.data, obj, true):obj;\n\t\tthis.render();\n\t},\n\tgetValues:function(){\n\t\treturn this.data;\n\t},\n\t$skin:function(){\n\t\tthis._template_types.header.height = $active.barHeight - $active.borderWidth*2;\n\t\tthis._template_types.section.height = $active.barHeight;\n\t},\n\t_template_types:{\n\t\t\"header\":{\n\t\t\tcss:\"webix_header\"\n\t\t},\n\t\t\"section\":{\n\t\t\tcss:\"webix_section\",\n\t\t\tborderless:true\n\t\t},\n\t\t\"clean\":{\n\t\t\tcss:\"webix_clean\",\n\t\t\tborderless:true\n\t\t}\n\t},\n\tonClick_setter:function(value){\n\t\tthis.on_click = extend((this.on_click || {}), value, true);\n\n\t\tif (!this._onClick)\n\t\t\textend(this, MouseEvents);\n\n\t\treturn value;\n\t},\n\tdefaults:{\n\t\ttemplate:template.empty\n\t},\n\t_render_me:function(){\n\t\tthis._not_render_me = false;\n\t\tthis._probably_render_me();\n\t\tthis.resize();\n\t},\n\t_probably_render_me:function(){\n\t\tif (!this._not_render_me){\n\t\t\tthis._not_render_me = true;\n\t\t\tthis.render();\n\t\t}\n\t},\n\tsrc_setter:function(value){\n\t\tthis._not_render_me = true;\n\t\t\n\t\tif(!this.callEvent(\"onBeforeLoad\",[])) \n\t\t\treturn \"\";\n\t\tajax(value, bind(function(text){\n\t\t\tthis._settings.template = template(text);\n\t\t\tthis._render_me();\n\t\t\tthis.callEvent(\"onAfterLoad\",[]);\n\t\t}, this));\n\t\treturn value;\n\t},\n\t_correct_width_scroll:function(){\n\t\t//we need to force auto height calculation after content change\n\t\t//dropping the last_size flag will ensure that inner logic of $setSize will be processed\n\t\tif (this._settings.autoheight){\n\t\t\tthis._last_size = null;\n\t\t\tthis.resize();\n\t\t}\n\n\t\tif (this._settings.scroll && this._settings.scroll.indexOf(\"x\") != -1)\n\t\t\tthis._dataobj.style.width = this._dataobj.scrollWidth + \"px\";\n\t},\n\tcontent_setter:function(config){\n\t\tif (config){\n\t\t\tthis._not_render_me = true;\n\t\t\tthis.render = function(){};\n\t\t\tthis._dataobj.appendChild(toNode(config));\n\t\t\tdelay(this._correct_width_scroll, this);\n\t\t}\n\t},\n\trefresh:function(){\n\t\tthis.render();\n\t},\n\tsetHTML:function(html){\n\t\tthis._settings.template = function(){ return html; };\n\t\tthis.refresh();\n\t},\n\tsetContent:function(content){\n\t\tthis._dataobj.innerHTML = \"\";\n\t\tthis.content_setter(content);\n\t},\n\t$setSize:function(x,y){\n\t\tif (base.api.$setSize.call(this,x,y)){\n\t\t\tthis._probably_render_me();\n\t\t\tif (this._settings.autoheight){\n\t\t\t\tvar top =this.getTopParentView();\n\t\t\t\tclearTimeout(top._template_resize_timer);\n\t\t\t\ttop._template_resize_timer = delay(this.resize, this);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n\t$getSize:function(x,y){\n\t\tif (this._settings.autoheight && (!this._settings.type || this._settings.type == \"clean\"))\n\t\t\tthis._settings.height = this._get_auto_height();\n\n\t\treturn base.api.$getSize.call(this,x,y);\n\t},\n\t_get_auto_height:function(){\n\t\tvar size;\n\t\tvar padding = $active.layoutPadding.space;\n\t\t\n\t\tthis._probably_render_me();\n\n\t\tif(!this.isVisible()){ //try getting height of a hidden template\n\t\t\tsize = getTextSize(\n\t\t\t\tthis._toHTML(this.data) || this._dataobj.innerHTML, //check for config.content \n\t\t\t\t\"webix_template\",\n\t\t\t\t(this.$width || (this.getParentView() ? this.getParentView().$width :0))-padding\n\t\t\t).height;\n\t\t}\n\t\telse{ \n\t\t\tthis._dataobj.style.height = \"auto\";\n\t\t\tsize = this._dataobj.scrollHeight;\n\t\t\tthis._dataobj.style.height = \"\";\n\t\t}\n\t\treturn size;\n\t},\n\t_one_time_scroll:true //scroll will appear only if set directly in config\n};\n\nconst view = protoUI(api, Scrollable, AutoTooltip, AtomDataLoader, AtomRender, EventSystem, base.view);\nexport default { api, view };","import base from \"../views/view\";\nimport Scrollable from \"../core/scrollable\";\nimport EventSystem from \"../core/eventsystem\";\nimport {protoUI, ui, $$} from \"../ui/core\";\nimport env from \"../webix/env\";\nimport state from \"../core/state\";\nimport {callEvent} from \"../webix/customevents\";\n\n\n/*scrollable view with another view insize*/\nconst api = {\n\tname:\"scrollview\",\n\tdefaults:{\n\t\tscroll:\"y\",\n\t\tscrollSpeed:\"0ms\"\n\t},\n\t$init:function(){\n\t\tthis._viewobj.className += \" webix_scrollview\";\n\t},\n\tbody_setter:function(config){\n\t\tconfig.borderless = true;\n\t\tstate._parent_cell = this;\n\t\tthis._body_cell = ui._view(config);\n\t\t\n\t\tthis._dataobj.appendChild(this._body_cell._viewobj);\n\t},\n\tgetChildViews:function(){\n\t\treturn [this._body_cell];\n\t},\n\tgetBody:function(){\n\t\treturn this._body_cell;\n\t},\n\tresizeChildren:function(){\n\t\tif (!this._body_cell) return;\n\n\t\tthis._desired_size = this._body_cell.$getSize(0, 0);\n\t\tthis._resizeChildren();\n\t\tcallEvent(\"onResize\",[]);\n\t},\n\t_resizeChildren:function(){\n\t\tvar cx = Math.max(this._content_width, this._desired_size[0]);\n\t\tvar cy = Math.max(this._content_height, this._desired_size[2]);\n\t\tthis._body_cell.$setSize(cx, cy);\t\t\t\n\t\tthis._dataobj.style.width = this._body_cell._content_width+\"px\";\n\t\tthis._dataobj.style.height = this._body_cell._content_height+\"px\";\n\t\tif (env.touch){\n\t\t\tvar scroll = this.getScrollState();\n\t\t\tvar top = this._body_cell._content_height - this._content_height;\n\t\t\tif (top < scroll.y)\n\t\t\t\tthis.scrollTo(null, top);\n\t\t}\n\t\tif (state._responsive_exception){\n\t\t\tstate._responsive_exception = false;\n\t\t\tthis._desired_size = this._body_cell.$getSize(0, 0);\n\t\t\tthis._resizeChildren();\n\t\t}\n\t},\n\t$getSize:function(dx, dy){\n\t\tvar desired_size = this._desired_size = this._body_cell.$getSize(0, 0);\n\t\tvar self_sizes   = base.api.$getSize.call(this, dx, dy);\n\t\tvar scroll_size = this._native_scroll || env.scrollSize;\n\n\t\tif(this._settings.scroll==\"x\"){\n\t\t\tself_sizes[2] = Math.max(self_sizes[2], desired_size[2]) + scroll_size;\n\t\t\tself_sizes[3] = Math.min(self_sizes[3], desired_size[3]) + scroll_size;\n\t\t} else if(this._settings.scroll==\"y\"){\n\t\t\tself_sizes[0] = Math.max(self_sizes[0], desired_size[0]) + scroll_size;\n\t\t\tself_sizes[1] = Math.min(self_sizes[1], desired_size[1]) + scroll_size;\n\t\t}\n\t\treturn self_sizes;\n\t},\n\t$setSize:function(x,y){\n\t\tvar temp = env.scrollSize;\n\t\tenv.scrollSize = this._native_scroll || temp;\n\n\t\tif (base.api.$setSize.call(this,x,y) || state._force_resize)\n\t\t\tthis._resizeChildren();\n\t\t\n\t\tenv.scrollSize = temp;\n\t},\n\tscroll_setter:function(value){\n\t\tvar custom = env.$customScroll;\n\t\tif (typeof value == \"string\" && value.indexOf(\"native-\") === 0){\n\t\t\tthis._native_scroll = 17;\n\t\t\tvalue = value.replace(\"native-\");\n\t\t\tenv.$customScroll = false;\n\t\t}\n\n\t\tvalue =  Scrollable.scroll_setter.call(this, value);\n\n\t\tenv.$customScroll = custom;\n\t\treturn value;\n\t},\n\t_replace:function(new_view){\n\t\tthis._body_cell.destructor();\n\t\tthis._body_cell = new_view;\n\t\t\n\t\tthis._bodyobj.appendChild(this._body_cell._viewobj);\n\t\tthis.resize();\n\t},\n\tshowView: function(id){\n\t\tvar topPos = $$(id).$view.offsetTop-$$(id).$view.parentNode.offsetTop;\n\t\tthis.scrollTo(0, topPos);\n\t}\n};\n\n\nconst view = protoUI(api,  Scrollable, EventSystem, base.view);\nexport default {api, view};","import {protoUI} from \"../ui/core\";\nimport {_each} from \"../ui/helpers\";\nimport {isUndefined} from \"../webix/helpers\";\nimport {$active} from \"../webix/skin\";\nimport base from \"./layout\";\n\nconst api = {\n\tname:\"accordion\",\n\tdefaults:{\n\t\tpanelClass:\"accordionitem\",\n\t\tmulti:false,\n\t\tcollapsed:false\n\t},\n\t$init:function(){\n\t\tthis._viewobj.setAttribute(\"role\", \"tablist\");\n\t\tthis._viewobj.setAttribute(\"aria-multiselectable\", \"true\");\n\t},\n\t_replace:function(newview){\n\t\tbase.api._replace.apply(this, arguments);\n\t\tif (newview.collapsed_setter && newview.refresh){\n\t\t\tnewview.refresh();\n\t\t}\n\t},\n\t_parse_cells:function(){\n\t\tvar panel = this._settings.panelClass;\n\t\tvar cells = this._collection;\n\n\t\tfor (var i=0; i<cells.length; i++){\n\t\t\tif ((cells[i].body || cells[i].header)&& !cells[i].view && !cells[i].align)\n\t\t\t\tcells[i].view = panel;\n\t\t\tif (isUndefined(cells[i].collapsed))\n\t\t\t\tcells[i].collapsed = this._settings.collapsed;\n\n\t\t}\n\n\t\n\t\tthis._skin_render_collapse = true;\n\t\tbase.api._parse_cells.call(this);\n\t\tthis._skin_render_collapse = false;\n\n\t\tfor (let i=0; i < this._cells.length; i++){\n\t\t\tif (this._cells[i].name == panel) \n\t\t\t\tthis._cells[i].refresh();\n\t\t\tthis._cells[i]._accLastChild = false;\n\t\t}\n\t\tvar found = false;\n\t\tfor (let i=this._cells.length-1; i>=0 &&!found; i--){\n\t\t\tif(!this._cells[i]._settings.hidden){\n\t\t\t\tthis._cells[i]._accLastChild = true;\n\t\t\t\tfound = true;\n\t\t\t}\n\t\t}\n\n\t},\n\t_afterOpen:function(view){\n\t\tif (this._settings.multi === false && this._skin_render_collapse !== true){\n\t\t\tfor (var i=0; i < this._cells.length; i++) {\n\t\t\t\tif (view != this._cells[i] && !this._cells[i]._settings.collapsed && this._cells[i].collapse)\n\t\t\t\t\tthis._cells[i].collapse();\n\t\t\t}\n\t\t}\n\t\tif (view.callEvent){\n\t\t\tview.callEvent(\"onViewShow\",[]);\n\t\t\t_each(view, this._signal_hidden_cells);\n\t\t}\n\t},\n\t_canCollapse:function(view){\n\t\tif (this._settings.multi === true || this._skin_render_collapse) return true;\n\t\t//can collapse only if you have other item to open\n\t\tfor (var i=0; i < this._cells.length; i++)\n\t\t\tif (view != this._cells[i] && !this._cells[i]._settings.collapsed && this._cells[i].isVisible() && !this._cells[i].$nospace)\n\t\t\t\treturn true;\n\t\treturn false;\n\t},\n\t$skin:function(){\n\t\tbase.api.$skin.call(this);\n\n\t\tif($active.accordionType)\n\t\t\tthis.defaults.type = $active.accordionType;\n\t}\n};\n\n\nconst view = protoUI(api, base.view);\nexport default {api, view};","import base from \"../views/view\";\nimport EventSystem from \"../core/eventsystem\";\nimport {protoUI} from \"../ui/core\";\n\n\nconst api = {\n\tname:\"iframe\",\n\t$init:function(){\n\t\tthis._dataobj = this._contentobj;\n\t\tthis._contentobj.innerHTML = \"<iframe style='width:100%; height:100%' frameborder='0' onload='var t = $$(this.parentNode.getAttribute(\\\"view_id\\\")); if (t) t.callEvent(\\\"onAfterLoad\\\",[]);' src='about:blank'></iframe>\";\n\t},\n\tload:function(value){\n\t\tthis.src_setter(value);\n\t},\n\tsrc_setter:function(value){\n\t\tif(!this.callEvent(\"onBeforeLoad\",[])) \n\t\t\treturn \"\";\n\t\tthis.getIframe().src = value;\n\t\treturn value;\n\t},\n\tgetIframe:function(){\n\t\treturn this._contentobj.getElementsByTagName(\"iframe\")[0];\n\t},\n\tgetWindow:function(){\n\t\treturn this.getIframe().contentWindow;\n\t}\n};\n\n\nconst view = protoUI(api,  base.view, EventSystem);\nexport default {api, view};","import {removeCss, addCss} from \"../webix/html\";\nimport {debug_size_box} from \"../webix/debug\";\nimport {protoUI, ui} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\n\nimport state from \"../core/state\";\nimport UIManager from \"../core/uimanager\";\nimport env from \"../webix/env\";\nimport MouseEvents from \"../core/mouseevents\";\nimport EventSystem from \"../core/eventsystem\";\n\nimport template from \"../webix/template\";\n\nimport base from \"./view\";\nimport baseview from \"./baseview\";\nimport animate from \"../webix/animate\";\n\nconst api = {\n\tname:\"accordionitem\",\n\t$init:function(config){\n\t\tthis._viewobj.innerHTML = \"<div tabindex='0' \"+/*@attr*/\"webix_ai_id\"+\"='\"+config.id+\"'  class='webix_accordionitem_header'><div class='webix_accordionitem_button' ></div><div class='webix_accordionitem_label' ></div></div><div class='webix_accordionitem_body'></div>\";\n\t\tthis._contentobj = this._viewobj;\n\t\tthis._headobj = this._contentobj.childNodes[0];\n\t\tif(!config.header)\n\t\t\tthis._headobj.style.display = \"none\";\n\t\tthis._headlabel = this._contentobj.childNodes[0].childNodes[1];\n\t\tthis._headbutton = this._contentobj.childNodes[0].childNodes[0];\n\t\tthis._bodyobj = this._contentobj.childNodes[1];\n\t\tthis._viewobj.className +=\" webix_accordionitem\";\n\t\tthis._head_cell = this._body_cell = null;\n\t\tthis._cells = true;\n\n\t\tthis._bodyobj.setAttribute(\"role\", \"tabpanel\");\n\t\tthis._headobj.setAttribute(\"role\", \"tab\");\n\n\t\tthis.attachEvent(\"onKeyPress\", this._onKeyPress);\n\t},\n\t_remove:function(){\n\t\tthis.body_setter();\n\t},\n\t_replace:function(new_view){\n\t\tthis._body_cell.destructor();\n\t\tthis._body_cell = new_view;\n\t\t\n\t\tthis._bodyobj.appendChild(this._body_cell._viewobj);\n\t\tthis.resize();\n\t},\n\t_id:/*@attr*/\"webix_ai_id\",\n\tgetChildViews:function(){\n\t\treturn [this._body_cell];\n\t},\n\tbody_setter:function(value){\n\t\tif (typeof value != \"object\")\n\t\t\tvalue = {template:value };\n\n\t\tvalue._inner = { top:true, left:true, right:true, bottom:true};\n\t\tstate._parent_cell = this;\n\t\tthis._body_cell = ui._view(value);\n\n\t\tthis._bodyobj.appendChild(this._body_cell._viewobj);\n\t\treturn value;\n\t},\n\theader_setter:function(value){\n\t\tif(value)\n\t\t\tvalue = template(value);\n\t\treturn value;\n\t},\n\theaderAlt_setter:function(value){\n\t\tif(value)\n\t\t\tvalue = template(value);\n\t\treturn value;\n\t},\n\t$getSize:function(dx, dy){\n\t\tvar size =  this._body_cell.$getSize(0, 0);\n\n\t\t//apply external border to inner content sizes\n\t\tvar _borders = this._settings._inner;\n\t\tif (_borders){\n\t\t\tdx += (_borders.left?0:1)+(_borders.right?0:1);\n\t\t\tdy += (_borders.top?0:1)+(_borders.bottom?0:1);\n\t\t}\n\n\t\tvar header = 0;\n\t\tvar self_size = baseview.api.$getSize.call(this, 0, 0);\n\n\t\t//use child settings if layout's one was not defined\n\t\tself_size[0] = (self_size[0] || size[0] ) +dx;\n\t\tif (self_size[1] >= 100000)\n\t\t\tself_size[1] = size[1];\n\t\tself_size[1] +=\tdx;\n\t\t\n\t\tself_size[2] = (self_size[2] || size[2] ) +dy;\n\t\tvar fixedHeight = (self_size[3]< 100000);\n\t\tif (!fixedHeight)\n\t\t\tself_size[3] = size[3];\n\n\t\tself_size[3] += dy;\n\t\tif(this.getParentView()._vertical_orientation){\n\t\t\tif (this._settings.collapsed){\n\t\t\t\tself_size[2] = self_size[3] = this._getHeaderSize()+dy;\n\t\t\t} else if(this._settings.header)\n\t\t\t\theader = this._settings.headerHeight;\n\t\t} else {\n\t\t\tif (this._settings.collapsed)\n\t\t\t\tself_size[0] = self_size[1] = this._getHeaderSize()+dx;\n\t\t\tif(this._settings.header)\n\t\t\t\theader = this._settings.headerHeight;\n\t\t}\n\n\t\t//include header in total height calculation\n\t\tif(!fixedHeight){\n\t\t\tself_size[2] += header;\n\t\t\tself_size[3] += header;\n\t\t}\n\n\t\tif (DEBUG) debug_size_box(this, self_size, true);\n\t\treturn self_size;\n\t},\n\ton_click:{\n\t\twebix_accordionitem_header:function(e){\n\t\t\tthis._toggle(e);\n\t\t\treturn false;\n\t\t},\n\t\twebix_accordionitem_header_v:function(e){\n\t\t\tthis._toggle(e);\n\t\t\treturn false;\n\t\t}\n\t},\n\t_toggle:function(){\n\t\tthis.define(\"collapsed\", !this._settings.collapsed);\n\t},\n\tcollapsed_setter:function(value){\n\t\tif (this._settings.header === false) return;\n\t\t//use last layout element if parent is not known yet\n\t\tvar parent = this.getParentView();\n\t\tif(parent){\n\t\t\tif(!value)\n\t\t\t\tthis._expand();\n\t\t\telse{\n\t\t\t\tif ( parent._canCollapse(this))\n\t\t\t\t\tthis._collapse();\n\t\t\t\telse{\n\t\t\t\t\tvar success = 0;\n\t\t\t\t\tif(parent._cells.length > 1)\n\t\t\t\t\t\tfor (var i=0; i < parent._cells.length; i++){\n\t\t\t\t\t\t\tvar sibl = parent._cells[i];\n\t\t\t\t\t\t\tif (this != sibl && sibl.isVisible() && sibl.expand){\n\t\t\t\t\t\t\t\tsibl.expand();\n\t\t\t\t\t\t\t\tthis._collapse();\n\t\t\t\t\t\t\t\tsuccess = 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\tif (!success) return;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._settings.collapsed = value;\n\t\t\tif (!value) parent._afterOpen(this);\n\n\t\t\tthis.refresh();\n\t\t\tif (!state._ui_creation)\n\t\t\t\tthis.resize();\n\n\t\t\tparent.callEvent(\"onAfter\"+(value?\"Collapse\":\"Expand\"), [this._settings.id]);\n\n\t\t\tthis._settings.$noresize = value;\n\t\t}\n\t\treturn value;\n\t},\n\tcollapse:function(){\n\t\tthis.define(\"collapsed\", true);\n\t\tUIManager._moveChildFocus(this);\n\t},\n\texpand:function(){\n\t\tthis.define(\"collapsed\", false);\n\t},\n\t_show: function() {\n\t\tthis.show();\n\t},\n\t_hide: function() {\n\t\tthis.hide();\n\t},\n\t_expand:function(){\n\t\tthis._bodyobj.style.display = \"\";\n\t\tremoveCss(this.$view, \"collapsed\");\n\t\tremoveCss(this._headobj, \"collapsed\");\n\n\t\tthis._headobj.setAttribute(\"aria-expanded\", \"true\");\n\t},\n\t_collapse:function(){\n\t\tif(this._settings.headerAlt)\n\t\t\tthis._headlabel.innerHTML = this._settings.headerAlt();\n\t\tthis._bodyobj.style.display = \"none\";\n\t\taddCss(this.$view, \"collapsed\");\n\t\taddCss(this._headobj, \"collapsed\");\n\n\t\tthis._headobj.setAttribute(\"aria-expanded\", \"false\");\n\t},\n\trefresh:function(){\n\t\tvar template = this._settings[this._settings.collapsed?\"headerAlt\":\"header\"] ||this._settings.header;\n\t\tif (template){\n\t\t\tthis._headlabel.innerHTML = template();\n\t\t\tthis._headbutton.setAttribute(\"aria-label\", template());\n\t\t}\n\t\t\t\n\t\tvar css = (this.getParentView()._vertical_orientation?\"vertical\":\"horizontal\");\n\t\tif(this._viewobj.className.indexOf(\" \"+css) < 0 ){\n\t\t\taddCss(this._viewobj, css);\n\t\t}\n\t\t//fix collapsed columns in IE8\n\t\tif(!env.transform){\n\t\t\taddCss(this._viewobj,\"webix_ie\",true);\n\t\t}\n\t},\n\t_getHeaderSize:function(){\n\t\treturn (this._settings.collapsed?this._settings.headerAltHeight:this._settings.headerHeight);\n\t},\n\t$setSize:function(x,y){\n\t\tif (base.api.$setSize.call(this,x,y) || this._getHeaderSize() != this._last_set_header_size){\n\t\t\tx = this._content_width;\n\t\t\ty = this._content_height;\n\n\t\t\tvar headerSize = this._last_set_header_size = this._getHeaderSize();//-(this._settings._inner.top?0:1);\n\t\t\tif (this._settings.header){\n\n\t\t\t\tthis._headobj.style.height=headerSize+\"px\";\n\t\t\t\tthis._headobj.style.width=\"auto\";\n\t\t\t\tthis._headobj.style[env.transform]=\"\";\n\n\t\t\t\t\n\t\t\t\tthis._headobj.style.borderBottomWidth = (this._settings.collapsed?0:1)+\"px\";\n\n\t\t\t\tif(this.getParentView()._vertical_orientation||!this._settings.collapsed){\n\t\t\t\t\ty-=this._getHeaderSize();\n\t\t\t\t} else if (this._settings.collapsed){\n\t\t\t\t\t//-2 - borders\n\t\t\t\t\tif (animate.isSupported()){\n\t\t\t\t\t\tthis._headobj.style.width = y + \"px\";\n\t\t\t\t\t\tthis._headobj.style.height = x + 3 + \"px\";\n\t\t\t\t\t\tvar d = Math.floor(y/2-x/2)+(x-this._settings.headerAltHeight)/2;\n\t\t\t\t\t\tthis._headobj.style[env.transform]=\"rotate(90deg) translate(\"+d+\"px, \"+(d+1)+\"px)\";\n\t\t\t\t\t}\n\t\t\t\t\telse { //IE8 fix\n\t\t\t\t\t\tthis._headobj.style.width = x + \"px\";\n\t\t\t\t\t\tthis._headobj.style.height = y + 3 + \"px\";\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!this._settings.collapsed){\n\t\t\t\tthis._body_cell.$setSize(x,y);\n\t\t\t\tthis._last_size_y = y;\n\t\t\t}\n\t\t} else if (!this._settings.collapsed){\n\t\t\tvar body = this._body_cell;\n\t\t\tif (this._last_size_y)\n\t\t\t\tbody.$setSize(this._content_width, this._last_size_y);\n\t\t}\n\t},\n\t$skin:function(){\n\t\tthis.defaults.headerAltHeight = this.defaults.headerHeight = $active.barHeight - $active.borderWidth*2;\n\t},\n\tdefaults:{\n\t\theader:false,\n\t\theaderAlt:false,\n\t\tbody:\"\"\n\t}\n};\n\n\nconst view = protoUI(api, MouseEvents, EventSystem, base.view);\nexport default {api, view};","import {protoUI} from \"../ui/core\";\nimport base from \"./accordion\";\n\n\nconst api = {\n\tname:\"headerlayout\",\n\tdefaults:{\n\t\ttype: \"accordion\",\n\t\tmulti:\"mixed\",\n\t\tcollapsed:false\n\t}\n};\n\nconst view = protoUI(api, base.view);\nexport default {api, view};","\n\nimport {create, stopEvent, remove, pos as getPos} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport {toNode} from \"../webix/helpers\";\nimport env from \"../webix/env\";\nimport EventSystem from \"../core/eventsystem\";\nimport {_event, event, eventRemove} from \"../webix/htmlevents\";\nimport Settings from \"../core/settings\";\n\n\nconst api = {\n\tname:\"resizearea\",\n\tdefaults:{\n\t\tdir:\"x\"\n\t},\n\t$init:function(config){\n\t\tvar dir = config.dir||\"x\";\n\t\tvar node = toNode(config.container);\n\t\tvar size = (dir==\"x\"?\"width\":\"height\");\n\t\tvar margin = (config.margin? config.margin+\"px\":0);\n\n\t\tthis._key_property = (dir == \"x\"?\"left\":\"top\");\n\n\t\tthis._viewobj = create(\"DIV\",{\n\t\t\t\"class\"\t: \"webix_resize_area webix_dir_\"+dir\n\t\t});\n\t\t//[[COMPAT]] FF12 can produce 2 move events\n\t\t_event(this._viewobj, env.mouse.down, stopEvent);\n\n\t\tif(margin){\n\t\t\tif(dir==\"x\")\n\t\t\t\tmargin = margin+\" 0 \"+margin;\n\t\t\telse\n\t\t\t\tmargin = \"0 \"+margin+\" 0 \"+margin;\n\t\t}\n\t\tthis._dragobj = create(\"DIV\",{\n\t\t\t\"class\"\t: \"webix_resize_handle_\"+dir,\n\t\t\t\"style\" : (margin?\"padding:\"+margin:\"\")\n\t\t},\"<div class='webix_handle_content'></div>\");\n\n\t\tthis._originobj = create(\"DIV\",{\n\t\t\t\"class\"\t: \"webix_resize_origin_\"+dir\n\t\t});\n\n\t\tif(config[size]){\n\t\t\tthis._originobj.style[size] = config[size]+(config.border?1:0)+\"px\";\n\t\t\tthis._dragobj.style[size] = config[size]+\"px\";\n\t\t}\n\t\tif (config.cursor)\n\t\t\tthis._dragobj.style.cursor = this._originobj.style.cursor = this._viewobj.style.cursor = config.cursor;\n\t\tthis._moveev =\tevent(node, env.mouse.move, this._onmove, {bind:this});\n\t\tthis._upev =\tevent(document.body, env.mouse.up, this._onup, {bind:this});\n\n\t\tthis._dragobj.style[this._key_property] = this._originobj.style[this._key_property] = config.start+\"px\";\n\n\t\tnode.appendChild(this._viewobj);\n\t\tnode.appendChild(this._dragobj);\n\t\tnode.appendChild(this._originobj);\n\t},\n\t_onup:function(){\n\n\t\tthis.callEvent(\"onResizeEnd\", [this._last_result]);\n\n\t\teventRemove(this._moveev);\n\t\teventRemove(this._upev);\n\n\t\tremove(this._viewobj);\n\t\tremove(this._dragobj);\n\t\tremove(this._originobj);\n\t\tthis._viewobj = this._dragobj = this._originobj = null;\n\t},\n\t_onmove:function(e){\n\t\tvar eventPos = getPos(e);\n\t\tthis._last_result = (this._settings.dir == \"x\" ? eventPos.x : eventPos.y)+this._settings.start-this._settings.eventPos;\n\t\tthis._dragobj.style[this._key_property] = this._last_result+\"px\";\n\t\tthis.callEvent(\"onResize\", [this._last_result]);\n\t}\n};\n\nconst view = protoUI(api, EventSystem, Settings);\nexport default {api, view};","import {pos as getPos, offset, addCss, removeCss} from \"../webix/html\";\nimport {ui, protoUI} from \"../ui/core\";\nimport env from \"../webix/env\";\n\nimport MouseEvents from \"../core/mouseevents\";\nimport Destruction from \"../core/destruction\";\n\nimport base from \"./view\";\n\n//used inderectly through ui\nimport \"./resizearea\";\n\nimport {bind} from \"../webix/helpers\";\nimport {_event, event} from \"../webix/htmlevents\";\nimport {assert} from \"../webix/debug\";\nimport {callEvent} from \"../webix/customevents\";\n\n\nconst api = {\n\tname:\"resizer\",\n\tdefaults:{\n\t\twidth:7, height:7\n\t},\n\t$init:function(config){\n\t\tassert(this.getParentView(), \"Resizer can't be initialized outside a layout\");\n\t\tthis._viewobj.className += \" webix_resizer\";\n\t\tvar space = this.getParentView()._margin;\n\t\t\n\t\t_event(this._viewobj, env.mouse.down, this._rsDown, {bind:this});\n\t\tevent(document.body, env.mouse.up, this._rsUp, {bind:this});\n\n\t\tvar dir = this._getResizeDir();\n\n\t\tthis._rs_started = false;\n\t\tthis._resizer_dir = dir;\n\n\t\tthis._resizer_dim = (dir==\"x\"?\"width\":\"height\");\n\t\t\n\t\tif (dir==\"x\")\n\t\t\tconfig.height = 0;\n\t\telse \n\t\t\tconfig.width = 0;\n\n\t\tif (space>0){\n\t\t\tthis._viewobj.className += \" webix_resizer_v\"+dir;\n\t\t\tthis._viewobj.style.marginRight = \"-\"+space+\"px\";\n\t\t\tif (dir == \"x\")\t\n\t\t\t\tconfig.width = space;\n\t\t\telse\n\t\t\t\tconfig.height = space;\n\t\t\tthis.$nospace = true;\n\t\t} else\n\t\t\tthis._viewobj.className += \" webix_resizer_\"+dir;\n\t\t\n\t\tthis._viewobj.innerHTML = \"<div class='webix_resizer_content'></div>\";\n\t\tif (dir == \"y\" && space>0) this._viewobj.style.marginBottom = \"-\"+(config.height||this.defaults.height)+\"px\";\n\t\tthis._viewobj.setAttribute(/*@attr*/\"webix_disable_drag\", \"true\");\n\t\tthis._viewobj.setAttribute(\"tabindex\", \"-1\");\n\t\tthis._viewobj.setAttribute(\"aria-grabbed\", \"false\");\n\n\t},\n\t_rsDown:function(e){\n\t\tvar cells = this._getResizerCells();\n\t\t//some sibling can block resize\n\t\tif(cells && !this._settings.disabled){\n\t\t\te = e||window.event;\n\t\t\tthis._rs_started = true;\n\t\t\tthis._rs_process = getPos(e);\n\t\t\tthis._rsLimit = [];\n\t\t\tthis._viewobj.setAttribute(\"aria-grabbed\", \"true\");\n\t\t\t\n\t\t\tfor(var i=0; i<2; i++)\n\t\t\t\tcells[i].$view.setAttribute(\"aria-dropeffect\", \"move\");\n\t\t\tthis._viewobj.setAttribute(\"aria-dropeffect\", \"move\");\n\t\t\t\n\t\t\tthis._rsStart(e, cells[0]);\n\t\t}\n\t},\n\t_rsUp:function(){\n\t\tthis._rs_started = false;\n\t\tthis._rs_process = false;\n\t},\n\t_rsStart:function(e, cell){\n\n\t\tvar dir, cellOffset, pos,posParent,start;\n\t\te = e||window.event;\n\t\tdir = this._resizer_dir;\n\n\t\t/*layout position:relative to place absolutely positioned elements in it*/\n\t\tthis.getParentView()._viewobj.style.position = \"relative\";\n\t\tpos = offset(this._viewobj);\n\t\tposParent = offset(this.getParentView()._viewobj);\n\t\tstart = pos[dir]-posParent[dir];\n\t\tcellOffset = offset(cell.$view)[dir]- offset(this.getParentView().$view)[dir];\n\n\t\tthis._rs_progress = [dir, cell, start, cellOffset];\n\t\t/*resizer stick (resizerea ext)*/\n\n\t\tthis._resizeStick = new ui.resizearea({\n\t\t\tcontainer:this.getParentView()._viewobj,\n\t\t\tdir:dir,\n\t\t\teventPos:this._rs_process[dir],\n\t\t\tstart:start-1,\n\t\t\theight: this.$height,\n\t\t\twidth: this.$width,\n\t\t\tborder: 1,\n\t\t\tmargin: this.getParentView()._padding[dir === \"x\"? \"left\" : \"top\"]\n\t\t});\n\n\t\t/*stops resizing on stick mouseup*/\n\t\tthis._resizeStick.attachEvent(\"onResizeEnd\", bind(this._rsEnd, this));\n\t\t/*needed to stop stick moving when the limit for dimension is reached*/\n\t\tthis._resizeStick.attachEvent(\"onResize\", bind(this._rsResizeHandler, this));\n\n\t\taddCss(document.body,\"webix_noselect\",1);\n\t},\n\t_getResizeDir: function(){\n\t\treturn this.getParentView()._vertical_orientation?\"y\":\"x\";\n\t},\n\t_rsResizeHandler:function(){\n\t\tlet cells,cDiff,diff,dir,i,limits,limitSizes,sizes,totalSize;\n\t\tif(this._rs_progress){\n\t\t\tcells = this._getResizerCells();\n\t\t\tdir = this._rs_progress[0];\n\t\t\t/*vector distance between resizer and stick*/\n\t\t\tdiff = this._resizeStick._last_result -this._rs_progress[2];\n\t\t\t/*new sizes for the resized cells, taking into account the stick position*/\n\t\t\tsizes = this._rsGetDiffCellSizes(cells,dir,diff);\n\t\t\t/*sum of cells dimensions*/\n\t\t\ttotalSize = cells[0][\"$\"+this._resizer_dim]+cells[1][\"$\"+this._resizer_dim];\n\t\t\tfor(i=0;i<2;i++){\n\t\t\t\tcDiff = (i?-diff:diff);/*if cDiff is positive, the size of i cell is increased*/\n\n\t\t\t\t/*max and min limits*/\n\t\t\t\tlimits = cells[i].$getSize(0,0);\n\t\t\t\t/*if size is bigger than max limit or size is smaller than min limit*/\n\t\t\t\tlet min = (dir==\"y\")?limits[2]:limits[0];\n\t\t\t\tlet max = (dir==\"y\")?limits[3]:limits[1];\n\n\t\t\t\t//if size is fixed, treat it as responsive (default behavior)\n\t\t\t\tif (min === max){\n\t\t\t\t\tmin = cells[i]._settings[ (dir==\"y\")?\"minHeight\":\"minWidth\" ]||3;\n\t\t\t\t\tmax = cells[i]._settings[ (dir==\"y\")?\"maxHeight\":\"maxWidth\" ]||100000;\n\t\t\t\t}\n\n\t\t\t\tif(cDiff>0&&max&&max<=sizes[i] || cDiff<0&&min&&min>=sizes[i]){\n\t\t\t\t\tthis._rsLimit[i] = (cDiff>0?max:min);\n\t\t\t\t\t/*new sizes, taking into account max and min limits*/\n\t\t\t\t\tlimitSizes = this._rsGetLimitCellSizes(cells,dir);\n\t\t\t\t\t/*stick position*/\n\t\t\t\t\tthis._resizeStick._dragobj.style[(dir==\"y\"?\"top\":\"left\")] = this._rs_progress[3] + limitSizes[0]+\"px\";\n\t\t\t\t\treturn;\n\t\t\t\t}else if(sizes[i]<3){/*cells size can not be less than 1*/\n\t\t\t\t\tthis._resizeStick._dragobj.style[(dir==\"y\"?\"top\":\"left\")] = this._rs_progress[3] + i*totalSize+1+\"px\";\n\t\t\t\t}else{\n\t\t\t\t\tthis._rsLimit[i] = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t_getResizerCells:function(){\n\t\tvar cells,i,res;\n\t\tcells = this.getParentView()._cells;\n\t\tfor(i=0; i< cells.length;i++){\n\t\t\tif(cells[i]==this){\n\t\t\t\tres = [this._getRsCell(cells, i, 1, -1), this._getRsCell(cells, i, 1, 1)];\n\t\t\t\tif (!res[0] || !res[1])\n\t\t\t\t\tres = null;\n\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\t},\n\t_getRsCell:function(cells, i, step, dir){\n\t\tvar cell = cells[i+(dir*step)];\n\t\tif(cell && cell._settings.hidden)\n\t\t\treturn this._getRsCell(cells, i, step+1, dir);\n\t\telse if(cell && cell._settings.$noresize)\n\t\t\treturn null;\n\t\telse\n\t\t\treturn cell;\n\t},\n\t_rsEnd:function(result){\n\t\tif (typeof result == \"undefined\") return;\n\n\t\tvar cells,dir,diff,size;\n\t\tvar vertical = this.getParentView()._vertical_orientation;\n\t\tthis._resizerStick = null;\n\t\tif (this._rs_progress){\n\t\t\tdir = this._rs_progress[0];\n\t\t\tdiff = result-this._rs_progress[2];\n\t\t\tcells = this._getResizerCells();\n\t\t\tif(cells[0]&&cells[1]){\n\t\t\t\t/*new cell sizes*/\n\t\t\t\tsize = this._rsGetCellSizes(cells,dir,diff);\n\n\t\t\t\tfor (let i=0; i<2; i++){\n\t\t\t\t\t//cell has not fixed size, of fully fixed layout\n\t\t\t\t\tvar cell_size = cells[i].$getSize(0,0);\n\t\t\t\t\tif (vertical?(cell_size[2] == cell_size[3]):(Math.abs(cell_size[1]-cell_size[0])<3)){\n\t\t\t\t\t\t/*set fixed sizes for both cells*/\n\t\t\t\t\t\tcells[i]._settings[this._resizer_dim]=size[i];\n\t\t\t\t\t\tif (cells[i]._bubble_size)\n\t\t\t\t\t\t\tcells[i]._bubble_size(this._resizer_dim, size[i], vertical);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar actualSize = cells[i].$view[vertical?\"offsetHeight\":\"offsetWidth\"];//cells[i][\"$\"+this._resizer_dim];\n\t\t\t\t\t\tcells[i]._settings.gravity = size[i]/actualSize*cells[i]._settings.gravity;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcells[0].resize();\n\n\t\t\t\tfor (let i = 0; i < 2; i++){\n\t\t\t\t\tif (cells[i].callEvent)\n\t\t\t\t\t\tcells[i].callEvent(\"onViewResize\",[]);\n\t\t\t\t\tcells[i].$view.removeAttribute(\"aria-dropeffect\");\n\t\t\t\t}\n\t\t\t\tcallEvent(\"onLayoutResize\", [cells]);\n\t\t\t}\n\t\t\tthis._rs_progress = false;\n\t\t}\n\t\tthis._rs_progress = false;\n\t\tthis._rs_started = false;\n\t\tthis._rsLimit = null;\n\t\tremoveCss(document.body,\"webix_noselect\");\n\n\t\tthis._viewobj.setAttribute(\"aria-grabbed\", \"false\");\n\t\tthis._viewobj.removeAttribute(\"aria-dropeffect\");\n\t},\n\t_rsGetLimitCellSizes: function(cells){\n\t\tvar size1,size2,totalSize;\n\t\ttotalSize = cells[0][\"$\"+this._resizer_dim]+cells[1][\"$\"+this._resizer_dim];\n\t\tif(this._rsLimit[0]){\n\t\t\tsize1 = this._rsLimit[0];\n\t\t\tsize2 = totalSize-size1;\n\t\t}\n\t\telse if(this._rsLimit[1]){\n\t\t\tsize2 = this._rsLimit[1];\n\t\t\tsize1 = totalSize-size2;\n\t\t}\n\t\treturn [size1,size2];\n\t},\n\t_rsGetDiffCellSizes:function(cells,dir,diff){\n\t\tvar sizes =[];\n\t\tvar styleDim = this._resizer_dim==\"height\"?\"offsetHeight\":\"offsetWidth\";\n\t\tfor(var i=0;i<2;i++)\n\t\t\tsizes[i] = cells[i].$view[styleDim]+(i?-1:1)*diff;\n\t\treturn sizes;\n\t},\n\t_rsGetCellSizes:function(cells,dir,diff){\n\t\tvar i,sizes,totalSize;\n\t\t/*if max or min dimentsions are set*/\n\t\tif(this._rsLimit[0]||this._rsLimit[1]){\n\t\t\tsizes = this._rsGetLimitCellSizes(cells,dir);\n\t\t}\n\t\telse{\n\t\t\tsizes = this._rsGetDiffCellSizes(cells,dir,diff);\n\t\t\tfor(i =0; i<2;i++ ){\n\t\t\t\t/*if stick moving is stopped outsize cells borders*/\n\t\t\t\tif(sizes[i]<0){\n\t\t\t\t\ttotalSize = sizes[0]+sizes[1];\n\t\t\t\t\tsizes[i] =1;\n\t\t\t\t\tsizes[1-i] = totalSize-1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn sizes;\n\t}\n};\n\nconst view = protoUI(api, MouseEvents, Destruction, base.view);\nexport default {api, view};","import {protoUI, ui} from \"../ui/core\";\nimport state from \"../core/state\";\n\nimport base from \"./view\";\nimport baseview from \"./baseview\";\n\n\nconst api = {\n\tname:\"align\",\n\tdefaults:{\n\t\tborderless:true,\n\t\tleft:0, top:0, right:0, bottom:0\n\t},\n\t$init:function(){\n\t\tthis._viewobj.className\t+= \" webix_view_align\";\n\t},\n\tgetChildViews:function(){\n\t\treturn [this._body_cell];\n\t},\n\tbody_setter:function(value){\n\t\tvalue._inner = { top:false, left:false, right:false, bottom:false};\n\t\tstate._parent_cell = this;\n\t\tthis._body_cell = ui._view(value);\n\n\t\tthis._viewobj.appendChild(this._body_cell._viewobj);\n\t\treturn value;\n\t},\n\talign_setter:function(value){\n\t\tif (typeof value === \"string\")\n\t\t\tvalue = value.split(\",\");\n\n\t\tthis._x_align = this._y_align = this._p_align = \"\";\n\t\tfor (var i=0; i<value.length; i++){\n\t\t\tvar c = value[i];\n\t\t\tif (c === \"center\" || c === \"left\" || c === \"right\")\n\t\t\t\tthis._x_align = c;\n\t\t\tif (c === \"top\" || c === \"bottom\" || c === \"middle\")\n\t\t\t\tthis._y_align = c;\n\t\t\tif (c === \"absolute\")\n\t\t\t\tthis._x_align = this._y_align = this._p_align = \"precise\";\n\t\t}\n\n\t\treturn value;\n\t},\n\tgetBody:function(){\n\t\treturn this._body_cell;\n\t},\n\t$setSize:function(x,y){\n\t\tbase.api.$setSize.call(this, x,y);\n\n\t\tvar dx, dy;\n\t\tif (this._p_align){\n\t\t\tdx = x - this._settings.left - this._settings.right;\n\t\t\tdy = y - this._settings.top - this._settings.bottom;\n\t\t} else {\n\t\t\tdx = this._desired_size[0] || x;\n\t\t\tdy = this._desired_size[2] || y;\n\t\t}\n\n\n\n\t\tthis._body_cell.$setSize(dx, dy);\n\n\t\tvar box = this._body_cell._viewobj;\n\n\t\tif (this._x_align == \"center\")\n\t\t\tbox.style.marginLeft = Math.ceil((x-dx)/2)+\"px\";\n\t\telse if (this._x_align == \"right\")\n\t\t\tbox.style.marginLeft = (x-dx)+\"px\";\n\t\telse\n\t\t\tbox.style.marginLeft = (this._p_align ? this._settings.left : 0) +\"px\";\n\n\t\tif (this._y_align == \"middle\") \n\t\t\tbox.style.marginTop = Math.ceil((y-dy)/2)+\"px\";\n\t\telse if (this._y_align == \"bottom\")\n\t\t\tbox.style.marginTop = (y-dy)+\"px\";\n\t\telse\n\t\t\tbox.style.marginTop = (this._p_align ? this._settings.top : 0) + \"px\";\n\t},\n\t$getSize:function(dx,dy){\n\t\tvar size = this._desired_size = this._body_cell.$getSize(0,0);\n\t\tvar self_size = baseview.api.$getSize.call(this, 0, 0);\n\t\n\t\tif (this._p_align){\n\t\t\tdx += this._settings.left + this._settings.right;\n\t\t\tdy += this._settings.top + this._settings.bottom;\n\t\t}\n\n\t\tif (!this._x_align || this._p_align){\n\t\t\tself_size[0] = size[0]+dx;\n\t\t\tself_size[1] = size[1]+dx;\n\t\t} else {\n\t\t\tself_size[0] = (self_size[0] || size[0] ) +dy;\n\t\t\tself_size[1] +=\tdx;\n\t\t}\n\n\t\tif (!this._y_align || this._p_align){\n\t\t\tself_size[2] = size[2]+dy;\n\t\t\tself_size[3] = size[3]+dy;\n\t\t} else {\n\t\t\tself_size[2] = (self_size[2] || size[2] ) +dy;\n\t\t\tself_size[3] +=\tdy;\n\t\t}\n\n\t\treturn self_size;\n\t}\n};\n\nconst view = protoUI(api, base.view);\nexport default {api, view};","import {remove} from \"../webix/html\";\nimport {protoUI, $$} from \"../ui/core\";\nimport {clone, delay, extend, isUndefined} from \"../webix/helpers\";\nimport {_each} from \"../ui/helpers\";\nimport {debug_size_box_start, debug_size_box_end} from \"../webix/debug\";\nimport {assert} from \"../webix/debug\";\n\nimport baselayout from \"../views/baselayout\";\nimport baseview from \"../views/baseview\";\nimport base from \"../views/view\";\n\nimport Settings from \"../core/settings\";\nimport animate from \"../webix/animate\";\n\n\n// #include ui/view.js\n\nconst api = {\n\tname:\"multiview\",\n\tdefaults:{\n\t\tanimate:{\n\t\t}\n\t},\n\tsetValue:function(val){\n\t\t$$(val).show();\n\t},\n\tgetValue:function(){\n\t\treturn this.getActiveId();\n\t},\n\t$init:function(){\n\t\tthis._active_cell = 0;\n\t\tthis._vertical_orientation = 1;\n\t\tthis._viewobj.style.position = \"relative\";\n\t\tthis._viewobj.className += \" webix_multiview\";\n\t\tthis._back_queue = [];\n\t},\n\t_ask_render:function(cell_id, view_id){\n\t\tvar cell = $$(cell_id);\n\t\tif (!cell._render_hash){\n\t\t\tcell._render_queue = [];\n\t\t\tcell._render_hash = {};\t\t\t\n\t\t}\n\t\tif (!cell._render_hash[view_id]){\n\t\t\tcell._render_hash[view_id]=true;\n\t\t\tcell._render_queue.push(view_id);\n\t\t}\n\t},\n\t_render_activation:function(cell_id){ \n\t\tvar cell = $$(cell_id);\n\t\tif(this._settings.keepViews)\n\t\t\tcell._viewobj.style.display = \"\";\n\t\t/*back array*/\n\t\tif(this._back_queue[this._back_queue.length-2]!=cell_id){\n\t\t\tif(this._back_queue.length==10)\n\t\t\t\tthis._back_queue.splice(0,1);\n\t\t\tthis._back_queue.push(cell_id);\n\t\t}\n\t\telse \n\t\t\tthis._back_queue.splice(this._back_queue.length-1,1);\t\n\t\t\n\t\tif (cell._render_hash){\n\t\t\tfor (var i=0; i < cell._render_queue.length; i++){\n\t\t\t\tvar subcell = $$(cell._render_queue[i]);\n\t\t\t\t//cell can be already destroyed\n\t\t\t\tif (subcell)\n\t\t\t\t\tsubcell.render();\n\t\t\t}\n\t\t\t\t\n\t\t\tcell._render_queue = [];\n\t\t\tcell._render_hash = {};\t\t\t\n\t\t}\n\t},\n\taddView:function(view, index){\n\t\tvar inc = !isUndefined(index) && index <= this._active_cell ? 1 : 0;\n\t\tvar id = baselayout.api.addView.apply(this, arguments);\n\n\t\tif(this._cells.length > 1){\n\t\t\tif(this._settings.keepViews)\n\t\t\t\t$$(id)._viewobj.style.display = \"none\";\n\t\t\telse\n\t\t\t\tremove($$(id)._viewobj);\n\n\t\t\tthis._active_cell += inc;\n\t\t}\n\n\t\treturn id;\n\t},\n\t_replace:function(view){\n\t\tif(!view._settings.borderless){\n\t\t\tconst settings = clone(this._settings._inner);\n\t\t\tview._settings._inner = settings;\n\t\t\tlet style = view._viewobj.style;\n\t\t\tstyle.borderTopWidth = style.borderBottomWidth = style.borderLeftWidth = style.borderRightWidth = \"1px\";\n\t\t\tthis._fix_container_borders(style, settings);\n\t\t}\n\t\tbaselayout.api._replace.apply(this, arguments);\n\t},\n\t_beforeRemoveView:function(index){\n\t\t//removing current view\n\t\tif (index == this._active_cell){\n\t\t\tvar next = index ? index-1 : 1;\n\t\t\tif (this._cells[next]){\n\t\t\t\tthis._in_animation = false;\n\t\t\t\tthis._show(this._cells[next], false);\n\t\t\t}\n\t\t}\n\n\t\tif (index < this._active_cell)\n\t\t\tthis._active_cell--;\n\t},\n\t//necessary, as we want to ignore hide calls for elements in multiview\n\t_hide:function(){},\n\t_parse_cells:function(collection){\n\t\tcollection = collection || this._collection; \n\n\t\tfor (let i=0; i < collection.length; i++)\n\t\t\tcollection[i]._inner = this._settings.borderless?{top:1, left:1, right:1, bottom:1}:(this._settings._inner||{});\n\t\t\t\n\t\tbaselayout.api._parse_cells.call(this, collection);\n\t\t\n\t\tfor (let i=1; i < this._cells.length; i++){\n\t\t\tif(this._settings.keepViews)\n\t\t\t\tthis._cells[i]._viewobj.style.display = \"none\";\n\t\t\telse\n\t\t\t\tremove(this._cells[i]._viewobj);\n\t\t}\n\n\t\t\t\n\t\tfor (let i=0; i<collection.length; i++){\n\t\t\tvar cell = this._cells[i];\n\t\t\tif (cell._cells && !cell._render_borders) continue;\n\n\t\t\tthis._fix_container_borders(cell._viewobj.style, cell._settings._inner);\n\n\t\t\tcell._viewobj.setAttribute(\"role\", \"tabpanel\");\n\t\t}\n\t\tthis._render_activation(this.getActiveId());\n\t},\n\tcells_setter:function(value){\n\t\tassert(value && value.length,\"Multiview must have at least one view in 'cells'\");\n\t\tthis._collection = value;\n\t},\n\t_getDirection:function(next, active){\n\t\tvar dir = (this._settings.animate || {}).direction;\n\t\tvar vx = (dir == \"top\" || dir == \"bottom\");\n\t\treturn \t next < active ? (vx?\"bottom\":\"right\"):(vx?\"top\":\"left\");\n\t},\n\t_show:function(obj, animation_options){\n\n\t\tvar parent = this.getParentView();\n\t\tif (parent && parent.getTabbar)\n\t\t\tparent.getTabbar().setValue(obj._settings.$id || obj._settings.id);\n\n\t\tif (this._in_animation)\n\t\t\treturn delay(this._show, this,[obj, animation_options],100);\n\n\t\tvar _next_cell = -1;\n\t\tfor (var i=0; i < this._cells.length; i++)\n\t\t\tif (this._cells[i]==obj){\n\t\t\t\t_next_cell = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\tif (_next_cell < 0 || _next_cell == this._active_cell)\n\t\t\treturn;\n\n\n\t\tvar prev = this._cells[this._active_cell];\n\t\tvar next = this._cells[ _next_cell ];\n\t\tprev.$getSize(0,0);\n\n\t\t//need to be moved in animate\n\t\tif((animation_options||typeof animation_options==\"undefined\")&&animate.isSupported() && this._settings.animate) {\n\t\t\tvar aniset = extend({}, this._settings.animate);\n\t\t\tif(this._settings.keepViews)\n\t\t\t\taniset.keepViews = true;\n\t\t\taniset.direction = this._getDirection(_next_cell,this._active_cell);\n\t\t\taniset = Settings._mergeSettings(animation_options||{}, aniset);\n\n\t\t\tvar line = animate.formLine(\n\t\t\t\tnext._viewobj,\n\t\t\t\tprev._viewobj,\n\t\t\t\taniset);\n\t\t\tnext.$getSize(0,0);\n\t\t\tnext.$setSize(this._content_width,this._content_height);\n\n\t\t\tvar callback_original = aniset.callback;\n\t\t\taniset.callback = function(){\n\t\t\t\tanimate.breakLine(line,this._settings.keepViews);\n\t\t\t\tthis._in_animation = false;\n\t\t\t\tif (callback_original) callback_original.call(this);\n\t\t\t\tcallback_original = aniset.master = aniset.callback = null;\n\t\t\t\tthis.resize();\n\t\t\t};\n\t\t\taniset.master = this;\n\n\t\t\tthis._active_cell = _next_cell;\n\t\t\tthis._render_activation(this.getActiveId());\n\n\t\t\tanimate(line, aniset);\n\t\t\tthis._in_animation = true;\n\t\t}\n\t\telse { // browsers which don't support transform and transition, or animate:false in config\n\t\t\tif(this._settings.keepViews){\n\t\t\t\tprev._viewobj.style.display = \"none\";\n\t\t\t}\n\t\t\telse{\n\t\t\t\tremove(prev._viewobj);\n\t\t\t\tthis._viewobj.appendChild(this._cells[i]._viewobj);\n\t\t\t}\n\n\t\t\tthis._active_cell = _next_cell;\n\t\t\tthis.resizeChildren();\n\t\t\tthis._render_activation(this.getActiveId());\n\t\t}\n\n\t\tif (next.callEvent){\n\t\t\tnext.callEvent(\"onViewShow\",[]);\n\t\t\t_each(next, this._signal_hidden_cells);\n\t\t}\n\n\t\tthis.callEvent(\"onViewChange\",[prev._settings.id, next._settings.id]);\n\t\t\n\t},\n\t$getSize:function(dx, dy){\n\t\tif (!this._cells.length) return baseview.api.$getSize.call(this, 0, 0);\n\t\tif (DEBUG) debug_size_box_start(this, true);\n\t\tvar size = this._cells[this._active_cell].$getSize(0, 0);\n\t\tif (this._settings.fitBiggest){\n\t\t\tfor (var i=0; i<this._cells.length; i++)\n\t\t\t\tif (i != this._active_cell){\n\t\t\t\t\tvar other = this._cells[i].$getSize(0, 0);\n\t\t\t\t\tfor (var j = 0; j < 4; j++)\n\t\t\t\t\t\tsize[j] = Math.max(size[j], other[j]);\n\t\t\t\t}\n\t\t}\n\n\n\t\t//get layout sizes\n\t\tvar self_size = baseview.api.$getSize.call(this, 0, 0);\n\t\t//use child settings if layout's one was not defined\n\t\tif (self_size[1] >= 100000) self_size[1]=0;\n\t\tif (self_size[3] >= 100000) self_size[3]=0;\n\n\t\tself_size[0] = (self_size[0] || size[0] ) +dx;\n\t\tself_size[1] = (self_size[1] || size[1] ) +dx;\n\t\tself_size[2] = (self_size[2] || size[2] ) +dy;\n\t\tself_size[3] = (self_size[3] || size[3] ) +dy;\n\t\t\n\t\tif (DEBUG) debug_size_box_end(this, self_size);\n\t\t\n\t\treturn self_size;\n\t},\n\t$setSize:function(x,y){\n\t\tif (!this._cells.length) return;\n\t\tthis._layout_sizes = [x,y];\n\t\tbaseview.api.$setSize.call(this,x,y);\n\t\tthis._cells[this._active_cell].$setSize(x,y);\n\t},\n\tisVisible:function(base_id, cell_id){\n\t\tif (cell_id && cell_id != this.getActiveId()){\n\t\t\tif (base_id)\n\t\t\t\tthis._ask_render(cell_id, base_id);\n\t\t\treturn false;\n\t\t}\n\t\treturn base.api.isVisible.call(this, base_id, this._settings.id);\n\t},\n\tgetActiveId:function(){\n\t\treturn this._cells.length?this._cells[this._active_cell]._settings.id:null;\n\t},\n\tback:function(step){\t\t\n\t\tstep=step||1;\n\t\tif(this.callEvent(\"onBeforeBack\",[this.getActiveId(), step])){\n\t\t\tif(this._back_queue.length>step){\n\t\t\t\tvar viewId = this._back_queue[this._back_queue.length-step-1];\n\t\t\t\t$$(viewId).show();\n\t\t\t\treturn viewId;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\treturn null;\n\n\t},\n\t_insertBeforeView:function(view, before){\n\t\tif (this._settings.keepViews || (!before || before == this._cells[this._active_cell]))\n\t\t\tbaselayout.api._insertBeforeView.call(this, view, before);\n\t}\n};\n\n\nconst view = protoUI(api, baselayout.view);\nexport default {api, view};","import layout from \"../views/layout\";\nimport {protoUI, $$} from \"../ui/core\";\nimport {uid, extend} from \"../webix/helpers\";\nimport {assert} from \"../webix/debug\";\n\n\nconst api = {\n\tname:\"tabview\",\n\tsetValue:function(val){\n\t\tthis._cells[0].setValue(val);\n\t},\n\tgetValue:function(){\n\t\treturn this._cells[0].getValue();\n\t},\n\tgetTabbar:function(){\n\t\treturn this._cells[0];\n\t},\n\tgetMultiview:function(){\n\t\treturn this._cells[1];\n\t},\n\taddView:function(obj){\n\t\tvar nid = this.getMultiview().addView(obj.body);\n\n\t\tobj.id = nid;\n\t\tobj.value = obj.header;\n\t\tdelete obj.body;\n\t\tdelete obj.header;\n\n\t\tvar t = this.getTabbar();\n\t\tt.addOption(obj);\n\n\t\treturn nid;\n\t},\n\tremoveView:function(id){\n\t\tvar t = this.getTabbar();\n\t\tt.removeOption(id);\n\t\tt.refresh();\n\t},\n\t$init:function(config){\n\t\tthis.$ready.push(this._init_tabview_handlers);\n\n\t\tvar cells = config.cells;\n\t\tvar tabs = [];\n\n\t\tassert(cells && cells.length, \"tabview must have cells collection\");\n\n\t\tfor (var i = cells.length - 1; i >= 0; i--){\n\t\t\tvar view = cells[i].body||cells[i];\n\t\t\tif (!view.id) view.id = \"view\"+uid();\n\t\t\ttabs[i] = { value:cells[i].header, id:view.id, close:cells[i].close, width:cells[i].width, hidden:  !!cells[i].hidden};\n\t\t\tcells[i] = view;\n\t\t}\n\n\t\tvar tabbar = { view:\"tabbar\", multiview:true };\n\t\tvar mview = { view:\"multiview\", cells:cells, animate:(!!config.animate) };\n\n\t\tif (config.value)\n\t\t\ttabbar.value = config.value;\n\n\t\tif (config.tabbar)\n\t\t\textend(tabbar, config.tabbar, true);\n\t\tif (config.multiview)\n\t\t\textend(mview, config.multiview, true);\n\t\t\n\t\ttabbar.options = tabbar.options || tabs;\n\n\t\tconfig.rows = [\n\t\t\ttabbar, mview\n\t\t];\n\n\t\tdelete config.cells;\n\t\tdelete config.tabs;\n\t},\n\t_init_tabview_handlers:function(){\n\t\tthis.getTabbar().attachEvent(\"onOptionRemove\", function(id){\n\t\t\tvar view = $$(id);\n\t\t\tif (view){\n\t\t\t\tvar parent = view.getParentView();\n\t\t\t\tif(parent)\n\t\t\t\t\tparent.removeView(view);\n\t\t\t}\n\t\t});\n\t}\n};\n\n\nconst view = protoUI(api,  layout.view);\nexport default {api, view};","import {protoUI, ui, $$} from \"../ui/core\";\nimport {copy, extend, bind} from \"../webix/helpers\";\nimport {_each} from \"../ui/helpers\";\nimport animate from \"../webix/animate\";\nimport {assert} from \"../webix/debug\";\nimport {attachEvent} from \"../webix/customevents\";\n\nimport state from \"../core/state\";\nimport Touch from \"../core/touch\";\n\nimport base from \"../views/view\";\nimport baseview from \"../views/baseview\";\n\nimport EventSystem from \"../core/eventsystem\";\nimport NavigationButtons from \"../core/navigationbuttons\";\n\n\nconst api = {\n\tname:\"carousel\",\n\tdefaults:{\n\t\tscrollSpeed:\"300ms\",\n\t\ttype: \"clean\",\n\t\tnavigation: {},\n\t\tanimate:true\n\t},\n\t$init:function(){\n\t\tthis._viewobj.className += \" webix_carousel\";\n\t\tthis._layout = null;\n\t\tthis._dataobj = null;\n\t\tthis._active_cell = 0;\n\t\tthis.$ready.unshift(this._initLayout);\n\t\tthis.$ready.push(this._after_init_call);\n\t},\n\taddView: function(view, index){\n\t\tvar t = this._layout.addView(view, index);\n\t\tthis._fix_after_view_add();\n\t\treturn t;\n\t},\n\tremoveView: function(id){\n\t\tthis._layout.removeView(id);\n\t\tthis._fix_after_view_add();\n\t},\n\t_replace: function(new_view,target_id){\n\t\tthis._layout._replace(new_view, target_id);\n\t\tthis._fix_after_view_add();\n\t},\n\t_fix_after_view_add: function(){\n\t\tthis._cells = this._layout._cells;\n\t\tthis._renderPanel();\n\t\tthis.setActiveIndex(Math.min(this._active_cell, this._cells.length-1));\n\t},\n\t_initLayout: function(){\n\t\tif(this._layout && this._layout.destructor)\n\t\t\tthis._layout.destructor();\n\n\t\tvar layout = \"\";\n\n\t\tif(this.config.cols){\n\t\t\tlayout = \"cols\";\n\t\t\tthis._vertical_orientation = 0;\n\t\t}\n\t\telse{\n\t\t\tlayout = \"rows\";\n\t\t\tthis._vertical_orientation = 1;\n\t\t}\n\n\t\tvar config = {borderless: true, type: \"clean\"};\n\t\tconfig[layout] = copy(this._settings[layout]);\n\t\tvar layoutProp = [\"type\", \"margin\", \"marginX\", \"marginY\", \"padding\", \"paddingX\", \"paddingY\"];\n\t\tvar layoutConfig = {};\n\t\tfor(var i=0; i< layoutProp.length; i++){\n\t\t\tif(this._settings[layoutProp[i]]){\n\t\t\t\tlayoutConfig[layoutProp[i]] = this._settings[layoutProp[i]];\n\t\t\t}\n\t\t}\n\t\textend(config,layoutConfig,true);\n\n\t\tstate._parent_cell = this;\n\t\tthis._layout = ui._view(config);\n\n\t\tthis._viewobj.appendChild(this._layout._viewobj);\n\t\tthis._cells = this._layout._cells;\n\n\t\tthis._layout._show = bind(api._show,this);\n\t\tthis._layout.adjustScroll = bind(api.adjustScroll,this);\n\n\t\tattachEvent(\"onReconstruct\", bind(function(view){\n\t\t\tif(view == this._layout)\n\t\t\t\tthis._setScroll();\n\t\t},this));\n\n\t\tthis._contentobj = this._viewobj.firstChild;\n\t},\n\t_onKeyPress:function(code, e){\n\t\tif(this._settings.navigation.items && e.target.getAttribute(\"role\") === \"tab\")\n\t\t\tthis._moveActive(code, e);\n\n\t\tbaseview.api._onKeyPress.call(this, code, e);\n\t},\n\tgetChildViews:function(){\n\t\treturn [this._layout];\n\t},\n\tgetLayout:function(){\n\t\treturn this._layout;\n\t},\n\t_after_init_call:function(){\n\t\tthis._contentobj.setAttribute(\"touch_scroll\", (this._vertical_orientation?\"y\":\"x\"));\n\n\t\tthis._layout.attachEvent(\"onAfterScroll\",bind(function(){\n\t\t\tthis.callEvent(\"onShow\",[this.getActiveId()]);\n\t\t},this));\n\n\t\t_each(this._layout, function(view){\n\t\t\tview._viewobj.setAttribute(\"role\", \"tabpanel\");\n\t\t});\n\t},\n\tadjustScroll:function(matrix){\n\t\tvar size =  (this._vertical_orientation?this._content_height:this._content_width);\n\n\t\tvar correction;\n\t\tif (this._vertical_orientation) {\n\t\t\tcorrection = Math.round(matrix.f/size);\n\t\t\tmatrix.f = correction*size;\n\t\t} else {\n\t\t\tcorrection = Math.round(matrix.e/size);\n\t\t\tmatrix.e = correction*size;\n\t\t}\n\t\t\n\t\tthis._active_cell = - correction;\n\n\t\tif(this._settings.navigation)\n\t\t\tthis._renderNavItems();\n\n\t\treturn true;\n\t},\n\t_show:function(obj){\n\t\tvar i, layout, _nextCell, _size, x, y;\n\t\t_nextCell = -1;\n\t\tlayout = this._layout;\n\t\tfor (i=0; i < layout._cells.length; i++){\n\t\t\tif (layout._cells[i]==obj){\n\t\t\t\t_nextCell = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (_nextCell < 0 || _nextCell == this._active_cell)\n\t\t\treturn;\n\n\t\tthis._active_cell = _nextCell;\n\t\t_size =  (layout._vertical_orientation?this._content_height:this._content_width);\n\n\t\tx = -(layout._vertical_orientation?0:_nextCell*_size);\n\t\ty = -(layout._vertical_orientation?_nextCell*_size:0);\n\n\t\tthis.scrollTo(x,y);\n\t\tthis.callEvent(\"onShow\",[layout._cells[this._active_cell]._settings.id]);\n\t\tif(this._settings.navigation)\n\t\t\tthis._renderPanel();\n\t},\n\tscrollTo:function(x,y){\n\t\tif (Touch && animate.isSupported() && this._settings.animate)\n\t\t\tTouch._set_matrix(this._contentobj, x,y, this._settings.scrollSpeed||\"100ms\");\n\t\telse{\n\t\t\tthis._contentobj.style.marginLeft = x+\"px\";\n\t\t\tthis._contentobj.style.marginTop =  y+\"px\";\n\t\t}\n\t},\n\tnavigation_setter:function(config){\n\t\tthis._mergeSettings(config,{\n\t\t\ttype: \"corner\",\n\t\t\tbuttons: true,\n\t\t\titems: true\n\t\t});\n\t\treturn config;\n\t},\n\tshowNext:function(){\n\t\tif (this._active_cell < this._layout._cells.length - 1)\n\t\t\tthis.setActiveIndex(this._active_cell+1);\n\t},\n\tshowPrev:function(){\n\t\tif (this._active_cell > 0)\n\t\t\tthis.setActiveIndex(this._active_cell-1);\n\t},\n\tsetActiveIndex:function(value){\n\t\tassert(value < this._layout._cells.length, \"Not existing index in collection\");\n\n\t\tvar id = this._layout._cells[value]._settings.id;\n\t\t$$(id).show();\n\t},\n\tgetActiveIndex:function(){\n\t\treturn this._active_cell;\n\t},\n\t$getSize:function(dx, dy){\n\t\tvar layoutSizes = this._layout.$getSize(0, 0);\n\t\tvar selfSizes   = base.api.$getSize.call(this, dx, dy);\n\t\tif(this._layout._vertical_orientation){\n\t\t\tselfSizes[0] = Math.max(selfSizes[0], layoutSizes[0]);\n\t\t\tselfSizes[1] = Math.min(selfSizes[1], layoutSizes[1]);\n\n\t\t} else{\n\t\t\tselfSizes[2] = Math.max(selfSizes[2], layoutSizes[2]);\n\t\t\tselfSizes[3] = Math.min(selfSizes[3], layoutSizes[3]);\n\t\t}\n\t\treturn selfSizes;\n\t},\n\t$setSize:function(x,y){\n\t\tvar layout = this._layout;\n\t\tvar c = layout._cells.length;\n\n\t\tvar changed = base.api.$setSize.call(this,x,y);\n\t\tvar yc = this._content_height*(layout._vertical_orientation?c:1);\n\t\tvar xc = this._content_width*(layout._vertical_orientation?1:c);\n\n\t\tif (changed){\n\t\t\tthis._contentobj.style.height = yc+\"px\";\n\t\t\tthis._contentobj.style.width = xc+\"px\";\n\t\t\tlayout.$setSize(xc,yc);\n\t\t\tthis._setScroll();\n\t\t} else\n\t\t\tlayout.$setSize(xc,yc);\n\t},\n\t_setScroll: function(){\n\t\tvar layout = this._layout;\n\t\tvar activeCell = this._active_cell||0;\n\t\tvar size =  (layout._vertical_orientation?this._content_height:this._content_width);\n\n\t\tvar x = -(layout._vertical_orientation?0:activeCell*size);\n\t\tvar y = -(layout._vertical_orientation?activeCell*size:0);\n\n\n\t\tthis.scrollTo(x,y);\n\n\t\tif(this._settings.navigation)\n\t\t\tthis._renderPanel();\n\t},\n\tgetActiveId:function(){\n\t\tvar cell = this._layout._cells[this._active_cell];\n\t\treturn cell?cell._settings.id:null;\n\t},\n\tsetActive:function(value){\n\t\t$$(value).show();\n\t}\n};\n\n\nconst view = protoUI(api,  EventSystem,NavigationButtons, base.view);\nexport default {api, view};","import base from \"../views/view\";\nimport {protoUI, ui} from \"../ui/core\";\nimport state from \"../core/state\";\n\n\nconst api = {\n\tname:\"proxy\",\n\tbody_setter:function(value){\n\t\tstate._parent_cell = this;\n\t\tthis._body_cell = ui._view(value);\n\t\tthis._viewobj.appendChild(this._body_cell._viewobj);\n\t\treturn value;\n\t},\n\tgetChildViews:function(){\n\t\treturn [this._body_cell];\n\t},\n\t$setSize:function(x,y){\n\t\tbase.api.$setSize.call(this, x,y);\n\t\tthis._body_cell.$setSize(this.$width, this.$height);\n\t},\n\t$getSize:function(dx,dy){\n\t\tvar selfSize = base.api.$getSize.call(this, dx, dy);\n\t\tvar size = this._body_cell.$getSize(dx, dy);\n\n\t\tsize[0] = Math.max(selfSize[0], size[0]);\n\t\tsize[1] = Math.min(selfSize[1], size[1]);\n\t\tsize[2] = Math.max(selfSize[2], size[2]);\n\t\tsize[3] = Math.min(selfSize[3], size[3]);\n\t\tsize[4] = Math.max(selfSize[4], size[4]);\n\n\t\treturn size;\n\t},\n\t_replace:function(n){\n\t\tthis._body_cell.destructor();\n\t\tthis._body_cell = n;\n\t\tthis._viewobj.appendChild(n._viewobj);\n\t\tthis.resize();\n\t}\n};\n\n\nconst view = protoUI(api,  base.view);\nexport default {api, view};","import layout from \"../views/layout\";\nimport {create, remove, addCss, removeCss, offset, pos as getPos} from \"../webix/html\";\nimport {protoUI, ui, $$} from \"../ui/core\";\nimport env from \"../webix/env\";\nimport {isArray} from \"../webix/helpers\";\nimport {_each} from \"../ui/helpers\";\nimport {attachEvent, callEvent} from \"../webix/customevents\";\nimport DragControl from \"../core/dragcontrol\";\n\nimport state from \"../core/state\";\n\n\nconst api = {\n\tname:\"portlet\",\n\tdefaults:{\n\t\tlayoutType:\"wide\",\n\t\ticon:\"wxi-drag\",\n\t},\n\t$init:function(config){\n\t\tthis._viewobj.style.position = \"relative\";\n\n\t\tif (config.header && config.body)\n\t\t\tconfig.body = [ { template:config.header, type:\"header\" }, config.body ];\n\n\t\tthis.$ready.push(this._init_drag_area);\n\t\t// refresh scroll state of datatables\n\t\tattachEvent(\"onAfterPortletMove\", this._refreshChildScrolls);\n\t},\n\t_refreshChildScrolls: function(source){\n\t\t_each(source, function(view){\n\t\t\tif(view._restore_scroll_state)\n\t\t\t\tview._restore_scroll_state();\n\t\t});\n\t},\n\t_init_drag_area:function(){\n\t\tvar childs = this.getChildViews();\n\n\t\tif (childs.length > 1)\n\t\t\tDragControl.addDrag(childs[0].$view, this);\n\t\telse if (this._settings.icon){\n\t\t\tvar drag = create(\"div\", { \"class\":\"portlet_drag\" }, \"<span class='webix_icon \"+this._settings.icon+\"'></span>\");\n\t\t\tthis._viewobj.appendChild(drag);\n\t\t\tDragControl.addDrag(drag, this);\n\t\t} else {\n\t\t\tDragControl.addDrag(this.$view, this);\n\t\t}\n\t},\n\tbody_setter:function(value){\n\t\treturn this.rows_setter(isArray(value) ? value:[value]);\n\t},\n\tmarkDropArea:function(target, mode){\n\t\tif (!target)\n\t\t\treturn remove(this._markerbox);\n\n\t\ttarget = $$(target);\n\n\t\tif (!this._markerbox)\n\t\t\tthis._markerbox = create(\"div\",null,\"&nbsp;\");\n\n\t\ttarget.$view.appendChild(this._markerbox);\n\t\tthis._markerbox.className = \"portlet_marker\"+mode;\n\t},\n\tmovePortlet:function(target, mode){\n\t\tvar parent = target.getParentView();\n\t\tvar source = this.getParentView();\n\n\t\tvar tindex = parent.index(target);\n\t\tvar sindex = source.index(this);\n\n\t\tif (!callEvent(\"onBeforePortletMove\", [source, parent, this, target, mode])) return;\n\n\t\tstate._freeze_resize = true;\n\n\t\tvar shift = (source != parent ? 1 : 0);\n\t\tvar isv = parent._vertical_orientation;\t\t\n\t\tif ((mode == \"top\" || mode == \"bottom\")){\n\t\t\tif (isv !== 1){\n\t\t\t\tparent = ui({ type:target._settings.layoutType, rows:[] }, parent, tindex+shift);\n\t\t\t\tui(target, parent, 0);\n\t\t\t\ttindex = 0; shift = 1;\n\t\t\t}\n\t\t\tif (mode == \"bottom\") shift+=1;\n\t\t} else if ((mode == \"left\" || mode == \"right\")){\n\t\t\tif (isv !== 0){\n\t\t\t\tparent = ui({ type:target._settings.layoutType, cols:[] }, parent, tindex+shift);\n\t\t\t\tui(target, parent, 0);\n\t\t\t\ttindex = 0; shift = 1;\n\t\t\t}\n\t\t\tif (mode == \"right\") shift+=1;\n\t\t}\n\n\t\tif (sindex < tindex) shift -= 1;\n\t\tui(this, parent, tindex+shift );\n\t\tif (mode == \"replace\")\n\t\t\tui(target, source, sindex);\n\n\t\tthis._removeEmptySource(source);\n\n\t\tstate._freeze_resize = false;\n\n\t\ttarget.resize();\n\t\tsource.resize();\n\n\t\tcallEvent(\"onAfterPortletMove\", [source, parent, this, target, mode]);\n\t},\n\t_removeEmptySource:function(view){\n\t\tvar childview;\n\t\tvar maxcount = 0;\n\n\t\twhile (view.getChildViews().length <= maxcount){\n\t\t\tchildview = view;\n\t\t\tview = view.getParentView();\n\n\t\t\tmaxcount = 1;\n\t\t}\n\n\t\tif (maxcount)\n\t\t\tview.removeView(childview);\n\t},\n\t$drag:function(object){\n\t\taddCss(this._viewobj, \"portlet_in_drag\");\n\t\tDragControl._drag_context = {source:object, from:object};\n\t\treturn this._viewobj.innerHTML;\n\t},\n\t$dragDestroy:function(target, html){\n\t\tremoveCss(this._viewobj, \"portlet_in_drag\");\n\t\tremove(html);\n\t\tif (this._portlet_drop_target){\n\t\t\tthis.movePortlet(this._portlet_drop_target, this._portlet_drop_mode);\n\t\t\tthis.markDropArea();\n\t\t\tthis._portlet_drop_target = null;\n\t\t}\n\t},\n\t_getDragItemPos: function(){\n\t\treturn offset(this.$view);\n\t},\n\t$dragPos: function(pos, e, html){\n\t\thtml.style.left = \"-10000px\";\n\t\tvar evObj = env.mouse.context(e);\n\n\n\t\tvar top = document.body.scrollTop || document.documentElement.scrollTop || 0;\n\t\tvar left = document.body.scrollLeft ||  document.documentElement.scrollLeft || 0;\n\t\t// elementFromPoint need to be corrected on scroll value\n\t\tvar node = document.elementFromPoint(evObj.x-left, evObj.y-top);\n\n\t\tvar view = null;\n\t\tif (node)\n\t\t\tview = $$(node);\n\n\t\tthis._portlet_drop_target = this._getPortletTarget(view);\n\t\tthis._portlet_drop_mode = this._markPortletDrag(this._portlet_drop_target, e);\n\n\t\tpos.x = pos.x - this._content_width + 10;\n\t\tpos.y = pos.y - 20;\n\n\t\tDragControl._skip = true;\n\t},\n\t_markPortletDrag:function(view, ev){\n\t\tvar drop = \"\";\n\t\tvar mode = \"\";\n\n\t\tif (ev && view){\n\t\t\tvar box = offset(view.$view);\n\t\t\tvar pos = getPos(ev);\n\t\t\tvar erx = (pos.x-box.x) - box.width/2;\n\t\t\tvar ery = (pos.y-box.y) - box.height/2;\n\n\t\t\tmode = view._settings.mode;\n\t\t\tif (!mode)\n\t\t\t\tmode = Math.abs(erx)*(box.height/box.width) > Math.abs(ery) ? \"cols\" : \"rows\";\n\n\t\t\tif (mode == \"cols\"){\n\t\t\t\tdrop = erx >=0 ? \"right\" :\"left\";\n\t\t\t} else if (mode == \"rows\"){\n\t\t\t\tdrop = ery >=0 ? \"bottom\" : \"top\";\n\t\t\t}\n\n\t\t\tthis.markDropArea(view, drop);\n\t\t}\n\n\t\tthis.markDropArea(view, drop);\n\t\treturn drop || mode;\n\t},\n\t_getPortletTarget:function(view){\n\t\twhile(view){\n\t\t\tif (view.movePortlet)\n\t\t\t\treturn view;\n\t\t\telse\n\t\t\t\tview = view.getParentView();\n\t\t}\n\t}\n};\n\n\nconst view = protoUI(api,  layout.view);\nexport default {api, view};","import baselayout from \"../views/baselayout\";\nimport {protoUI} from \"../ui/core\";\nimport baseview from \"../views/baseview\";\nimport {debug_size_box_start, debug_size_box_end} from \"../webix/debug\";\n\n\nconst api = {\n\tname:\"abslayout\",\n\t$init:function(){\n\t\tthis.$view.className += \" webix_abslayout\";\n\t\tdelete this.rows_setter;\n\t\tdelete this.cols_setter;\n\t\tthis._collection = [];\n\t},\n\tcells_setter:function(cells){\n\t\tthis._collection = cells;\n\t},\n\t_parse_cells:function(){\n\t\tbaselayout.api._parse_cells.call(this, this._collection);\n\t},\n\t$getSize:function(){\n\t\tvar self_size = baseview.api.$getSize.call(this, 0, 0);\n\t\tvar sub = null;\n\n\t\tfor (var i=0; i<this._cells.length; i++)\n\t\t\tif (this._cells[i]._settings.relative)\n\t\t\t\tsub = this._cells[i].$getSize(0,0);\n\n\t\tif (sub){\n\t\t\t//use child settings if layout's one was not defined\n\t\t\tif (self_size[1] >= 100000) self_size[1]=0;\n\t\t\tif (self_size[3] >= 100000) self_size[3]=0;\n\n\t\t\tself_size[0] = Math.max(self_size[0], sub[0]);\n\t\t\tself_size[1] = Math.max(self_size[1], sub[1]);\n\t\t\tself_size[2] = Math.max(self_size[2], sub[2]);\n\t\t\tself_size[3] = Math.max(self_size[3], sub[3]);\n\t\t}\n\n\t\treturn self_size;\n\t},\n\t$setSize:function(x,y){\n\t\tthis._layout_sizes = [x,y];\n\t\tif (DEBUG) debug_size_box_start(this);\n\n\t\tbaseview.api.$setSize.call(this,x,y);\n\t\tthis._set_child_size(x,y);\n\n\t\tif (DEBUG) debug_size_box_end(this, [x,y]);\n\t},\n\t_set_child_size:function(x,y){\n\t\tfor (var i=0; i<this._cells.length; i++){\n\t\t\tvar view = this._cells[i];\n\t\t\tvar conf = view._settings;\n\n\t\t\tvar sizes = view.$getSize(0,0);\n\t\t\tif (conf.relative){\n\t\t\t\tconf.left = conf.top = 0;\n\t\t\t\tview.$setSize(x,y);\n\t\t\t} else {\n\t\t\t\tview.$setSize(sizes[0], sizes[2]);\n\t\t\t}\n\n\t\t\tvar node = view.$view;\n\t\t\tvar options = [\"left\", \"right\", \"top\", \"bottom\"];\n\n\t\t\tfor (var j = 0; j < options.length; j++) {\n\t\t\t\tvar key = options[j];\n\t\t\t\tif (key in conf)\n\t\t\t\t\tnode.style[key] = conf[key] + \"px\";\n\t\t\t}\n\t\t}\n\t}\n};\n\n\nconst view = protoUI(api,  baselayout.view);\nexport default {api, view};","import abslayout from \"../views/abslayout\";\nimport {protoUI, $$} from \"../ui/core\";\nimport {isUndefined, extend, copy} from \"../webix/helpers\";\nimport baselayout from \"../views/baselayout\";\nimport baseview from \"../views/baseview\";\n\n\nconst api = {\n\tname:\"gridlayout\",\n\tdefaults:{\n\t\tautoplace:true,\n\t\tgridColumns:2,\n\t\tgridRows:2,\n\t\tmargin:10,\n\t\tpadding:10\n\t},\n\tgridRows_setter:function(value){\n\t\treturn (this._actual_rows = value);\n\t},\n\t_parse_cells:function(){\n\t\tfor (var i = 0; i < this._collection.length; i++) {\n\t\t\tthis._collection[i]._inner = {};\n\t\t}\n\t\tbaselayout.api._parse_cells.call(this, this._collection);\n\t},\n\tremoveView:function(id){\n\t\tabslayout.api.removeView.call(this, id);\n\t\tthis._do_compact();\n\t\tthis.callEvent(\"onChange\", []);\n\t},\n\t_check_default_pos:function(config){\n\t\tconfig.dx = config.dx || 1;\n\t\tconfig.dy = config.dy || 1;\n\n\t\tif (isUndefined(config.y) || isUndefined(config.x)){\n\t\t\tvar matrix = this._buildMatrix();\n\t\t\tfor (var y=0; y<this._actual_rows; y++)\n\t\t\t\tfor (var x=0; x<this._settings.gridColumns; x++){\n\t\t\t\t\tif (!matrix[x][y] && this._isFree(matrix, x, y, x+config.dx, y+config.dy)){\n\t\t\t\t\t\tconfig.x = x;\n\t\t\t\t\t\tconfig.y = y;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tconfig.x = 0;\n\t\t\tconfig.y = this._actual_rows;\n\t\t}\n\n\t\t//ensure that view is not wider than grid\n\t\tvar exceed = config.x+config.dx - this._settings.gridColumns;\n\t\tif (exceed > 0)\n\t\t\tconfig.dx -= exceed;\n\t},\n\t_replace:function(new_view){\n\t\tthis._check_default_pos(new_view.config);\n\t\tthis._cells.push(new_view);\n\n\t\tthis.$view.appendChild(new_view._viewobj);\n\n\t\tthis._reserveSpace(new_view.config, new_view.config.id);\n\t\tthis._do_compact(true);\n\n\t\tif (!this._silent)\n\t\t\tthis.callEvent(\"onChange\", []);\n\t},\n\t_isFree:function(matrix, sx,sy, dx, dy){\n\t\tfor (var x=sx; x<dx; x++)\n\t\t\tfor (var y=sy; y<dy; y++){\n\t\t\t\tif (!matrix[x] || matrix[x][y])\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\treturn true;\n\t},\n\t_markMatrix:function(matrix, sub, id){\n\t\tfor (var x=0; x<sub.dx; x++)\n\t\t\tfor (var y=0; y<sub.dy; y++)\n\t\t\t\tmatrix[x+sub.x][y+sub.y] = id;\n\t},\n\t_canMoveRight:function(matrix, obj, sub){\n\t\tvar mx = this._settings.gridColumns;\n\t\tfor (var x=obj.x+obj.dx; (x+sub.dx)<=mx; x++){\n\t\t\tif (this._isFree(matrix, x, sub.y, x+sub.dx, sub.y+sub.dy))\n\t\t\t\treturn x-sub.x;\n\t\t}\n\t\treturn 0;\n\t},\n\t_canMoveLeft:function(matrix, obj, sub){\n\t\tfor (var x=obj.x-sub.dx; x>=0; x--){\n\t\t\tif (this._isFree(matrix, x, sub.y, x+sub.dx, sub.y+sub.dy))\n\t\t\t\treturn sub.x-x;\n\t\t}\n\t\treturn 0;\n\t},\n\t_canMoveTop:function(matrix, obj, sub){\n\t\tfor (var y=obj.y-sub.dy; y>=0; y--){\n\t\t\tif (this._isFree(matrix, sub.x, y, sub.x+sub.dx, y+sub.dy))\n\t\t\t\treturn sub.y-y;\n\t\t}\n\t\treturn 0;\n\t},\n\t_buildMatrix:function(id){\n\t\tvar m = [];\n\t\tfor (var x=0; x<this._settings.gridColumns; x++)\n\t\t\tm[x] = [];\n\t\tfor (var i=0; i<this._cells.length; i++){\n\t\t\tvar sub = this._cells[i].config;\n\t\t\tif (sub.id === id || sub.hidden) continue;\n\n\t\t\tthis._markMatrix(m, sub, sub.id);\n\t\t}\n\t\treturn m;\n\t},\n\t_do_compact:function(force){\n\t\t//do not correct places or grid, if autoplace disabled\n\t\tif (this._compact() || force)\n\t\t\tthis._apply_new_grid();\n\t},\n\t_compact:function(){\n\t\tif (!this._settings.autoplace) return false;\n\n\t\tvar mx = this._settings.gridColumns;\n\t\tvar my = this._actual_rows;\n\t\tvar matrix = this._buildMatrix();\n\t\tvar compacted = false;\n\n\t\ttop: for (var y=my-1; y>=0; y--){\n\t\t\tfor (var x=mx-1; x>=0; x--)\n\t\t\t\tif (matrix[x][y])\n\t\t\t\t\tcontinue top;\n\n\t\t\tcompacted = true;\n\t\t\tfor (var i=0; i<this._cells.length; i++){\n\t\t\t\tvar sub = this._cells[i].config;\n\t\t\t\tif (!sub.hidden && sub.y >= y){\n\t\t\t\t\tsub.y -= 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn compacted;\n\t},\n\t_reserveSpace:function(conf, id){\n\t\t//prevent x-overflow\n\t\tconf.x -= Math.max(0, conf.x + conf.dx - this._settings.gridColumns);\n\n\t\t//do not move other cells in non-compact mode\n\t\tif (!this._settings.autoplace){\n\t\t\tconf.y -= Math.max(0, conf.y + conf.dy - this._settings.gridRows);\n\t\t\treturn;\n\t\t}\n\n\t\tvar cross = [];\n\t\tvar matrix = this._buildMatrix(id);\n\n\t\tfor (let i=0; i<this._cells.length; i++){\n\t\t\tlet sub = this._cells[i].config;\n\t\t\tif (sub.id === id || sub.hidden) continue;\n\n\t\t\t//console.log(sub.y +\"<\"+ (conf.y+conf.dy), (sub.y+sub.dy) + \">\" +conf.y , sub.x +\"<\"+ (conf.x+conf.dx), (sub.x+sub.dx) + \">\" + conf.x);\n\t\t\tif (sub.y < conf.y+conf.dy && sub.y+sub.dy > conf.y &&\n\t\t\t\tsub.x < conf.x+conf.dx && sub.x+sub.dx > conf.x ){\n\t\t\t\t//intersection\n\t\t\t\tcross.push(sub);\n\t\t\t}\n\t\t}\n\n\t\tvar next = [];\n\t\tfor (let i=0; i<cross.length; i++){\n\t\t\t// check right\n\t\t\tlet sub = cross[i];\n\t\t\tthis._markMatrix(matrix, sub, 0);\n\n\t\t\tvar right = this._canMoveRight(matrix, conf, sub);\n\t\t\tif (right){\n\t\t\t\tsub.x += right;\n\t\t\t} else {\n\t\t\t\t// check left\n\t\t\t\tvar left = this._canMoveLeft(matrix, conf, sub);\n\t\t\t\tif (left){\n\t\t\t\t\tsub.x -= left;\n\t\t\t\t} else {\n\t\t\t\t\t//check top\n\t\t\t\t\tvar top = this._canMoveTop(matrix, conf, sub);\n\t\t\t\t\tif (top){\n\t\t\t\t\t\tsub.y -= top;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t//move bottom\n\t\t\t\t\t\tsub.y = conf.y + conf.dy;\n\t\t\t\t\t\tnext.push(sub);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis._markMatrix(matrix, sub, sub.id);\n\t\t}\n\t\t\n\t\t//when moving bottom, we need to iterate one more time, to resolve new intersections\n\t\tfor (let i=0; i<next.length; i++){\n\t\t\t//console.log(\"after correction for \"+next[i].id);\n\t\t\tthis._reserveSpace(next[i], next[i].id);\n\t\t}\n\t},\n\t_apply_new_grid:function(){\n\t\tvar rows = this._settings.gridRows;\n\t\tfor (var i=0; i<this._cells.length; i++){\n\t\t\tvar cell = this._cells[i].config;\n\t\t\tif (!cell.hidden)\n\t\t\t\trows = Math.max(rows, cell.y + cell.dy);\n\t\t}\n\n\t\tif (this._actual_rows != rows){\n\t\t\tthis._actual_rows = rows;\n\t\t\tthis.resize();\n\t\t}\n\t\tthis._set_child_size();\n\t},\n\tmoveView:function(id, obj){\n\t\tobj = extend($$(id).config, obj, true);\n\t\tthis._reserveSpace(obj, id);\n\t\tthis._do_compact(true);\n\t\tthis.callEvent(\"onChange\", []);\n\t},\n\tserialize:function(serializer){\n\t\tvar state = [];\n\t\tfor (var i=0; i<this._cells.length; i++){\n\t\t\tif (serializer){\n\t\t\t\tstate.push(serializer.call(this, this._cells[i]));\n\t\t\t} else {\n\t\t\t\tvar conf = this._cells[i].config;\n\t\t\t\tstate.push({ id:conf.id, name:conf.name, x:conf.x, y:conf.y, dx:conf.dx, dy:conf.dy });\n\t\t\t}\n\t\t}\n\t\treturn state;\n\t},\n\tclearAll:function(){\n\t\tfor (var i=0; i < this._cells.length; i++)\n\t\t\tthis._cells[i].destructor();\n\t\tthis._cells = [];\n\t\tthis.callEvent(\"onChange\", []);\n\t},\n\trestore:function(state, factory){\n\t\tfactory = factory || this._settings.factory;\n\t\tstate = copy(state);\n\n\t\tthis._silent = true;\n\t\tvar ids = {};\n\n\t\tfor (let i = 0; i < state.length; i++) {\n\t\t\tvar conf = state[i];\n\t\t\tvar view = $$(conf.id);\n\t\t\tvar id;\n\t\t\tif (view){\n\t\t\t\textend(view.config, conf, true);\n\t\t\t\tid = view.config.id;\n\t\t\t} else {\n\t\t\t\tview = factory.call(this, conf);\n\t\t\t\tid = this.addView(view);\n\t\t\t}\n\t\t\tids[id] = 1;\n\t\t}\n\t\tfor (let i = this._cells.length-1; i >= 0; i--) {\n\t\t\tif (!ids[this._cells[i].config.id]){\n\t\t\t\tthis._cells[i].destructor();\n\t\t\t\tthis._cells.splice(i, 1);\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis._apply_new_grid();\n\t\tthis._silent = false;\n\t},\n\t$getSize:function(){\n\t\tvar self_size = baseview.api.$getSize.call(this, 0, 0);\n\n\t\tfor (var i=0; i<this._cells.length; i++)\n\t\t\tthis._cells[i].$getSize(0,0);\n\n\t\tvar width = this._settings.cellWidth;\n\t\tvar height = this._settings.cellHeight;\n\t\tvar box = this._getActualSize(0,0, this._settings.gridColumns, this._actual_rows);\n\n\t\tif (width)\n\t\t\tself_size[0] = box.dx+box.x*2;\n\t\tif (height)\n\t\t\tself_size[2] = box.dy+box.y*2;\n\n\t\treturn self_size;\n\t},\n\t_getActualSize:function(x,y,w,h){\n\t\tvar margin = this._settings.margin;\n\t\tvar paddingX = this._settings.paddingX || this._settings.padding;\n\t\tvar paddingY = this._settings.paddingY || this._settings.padding;\n\n\t\tvar dx = this._settings.cellWidth;\n\t\tif (!dx) dx = (this.$width - 2 * paddingX + margin) / this._settings.gridColumns - margin;\n\t\tvar dy = this._settings.cellHeight;\n\t\tif (!dy) dy = (this.$height - 2 * paddingY + margin) / this._actual_rows - margin;\n\n\t\tvar left = paddingX+(dx+margin)*x;\n\t\tvar top = paddingY+(dy+margin)*y;\n\t\tvar width = Math.ceil(dx+(dx+margin)*(w-1));\n\t\tvar height = Math.ceil(dy+(dy+margin)*(h-1));\n\n\t\treturn { x:left, y:top, dx:width, dy:height };\n\t},\n\t_set_child_size:function(){\n\t\tfor (var i=0; i<this._cells.length; i++){\n\t\t\tvar view = this._cells[i];\n\t\t\tvar conf = view._settings;\n\n\t\t\tvar size = this._getActualSize(conf.x, conf.y, conf.dx, conf.dy);\t\t\t\n\t\t\tview.$getSize(0,0); //need to be called before $setSize\n\t\t\tview.$setSize(size.dx, size.dy);\n\n\t\t\tvar node = view.$view;\n\t\t\tnode.style.left = size.x + \"px\";\n\t\t\tnode.style.top = size.y + \"px\";\n\t\t}\n\t}\n};\n\n\nconst view = protoUI(api,  abslayout.view);\nexport default {api, view};","import gridlayout from \"../views/gridlayout\";\nimport {offset, pos as getPos, create, remove} from \"../webix/html\";\nimport {protoUI, $$} from \"../ui/core\";\nimport env from \"../webix/env\";\nimport {uid, extend} from \"../webix/helpers\";\nimport DragControl from \"../core/dragcontrol\";\n\n\nconst api = {\n\tname:\"dashboard\",\n\t$init:function(){\n\t\tDragControl.addDrag(this.$view, this);\n\t\tDragControl.addDrop(this.$view, this, true);\n\t},\n\t_isDragNode:function(target){\n\t\tif (!target.getAttribute || target.getAttribute(/*@attr*/\"webix_disable_drag\") || target.getAttribute(/*@attr*/\"webixignore\")) return false;\n\n\t\tvar css = (target.className || \"\").toString();\n\t\tif (css.indexOf(\"panel_drag\") != -1)\n\t\t\treturn target;\n\t\tif (target.parentNode && target != this.$view)\n\t\t\treturn this._isDragNode(target.parentNode);\n\n\t\treturn false;\n\t},\n\t$dragCreate:function(object, e){\n\t\tif (!e.target) return;\n\n\t\tif (!this._isDragNode(e.target)) return false;\n\t\t\n\t\t// ok, it seem the dnd need to be started\n\t\tvar sview = $$(e);\n\t\tif (!sview.$resizeMove)\n\t\t\tsview = sview.queryView(function(a){ return !!a.config.dx; }, \"parent\" );\n\n\t\tvar box = offset(this.$view);\n\t\tvar pos = getPos(e);\n\n\t\tvar context = DragControl._drag_context = { \n\t\t\tsource:sview, from:this,\n\t\t\tdashboard:{\n\t\t\t\tsx: pos.x - box.x - parseInt(sview.$view.style.left)+ this._settings.margin/2,\n\t\t\t\tsy: pos.y - box.y - parseInt(sview.$view.style.top)+ this._settings.margin/2\n\t\t\t}\n\t\t};\n\n\t\tif(this.callEvent(\"onBeforeDrag\", [context, e])){\n\t\t\tthis._addDragMarker(sview._settings.dx, sview._settings.dy);\n\t\t\treturn sview.$view;\n\t\t}\n\t},\n\t_addDragMarker:function(x, y){\n\t\tvar drag = this._dragMarker = create(\"div\", { \"class\":\"panel_target\" });\n\t\tvar size = this._getActualSize(0,0, x, y);\n\t\tdrag.style.width = size.dx+\"px\";\n\t\tdrag.style.height = size.dy+\"px\";\n\n\t\tthis.$view.appendChild(this._dragMarker);\n\t},\n\t$drop:function(s,t,e){\n\t\tvar context = DragControl._drag_context;\n\t\tvar obj = {\n\t\t\tx: context.dashboard.x,\n\t\t\ty: context.dashboard.y\n\t\t};\n\n\t\tif(this.callEvent(\"onBeforeDrop\", [context, e])){\n\t\t\tif (context.from === this){\n\t\t\t\tvar conf = context.source.config;\n\t\t\t\tthis.moveView(conf.id, obj);\n\t\t\t} else {\n\t\t\t\tif(context.from && context.from.callEvent && context.from.callEvent(\"onBeforeDropOut\", [context,e])){\n\t\t\t\t\tobj.name = context.source[0];\n\t\t\t\t\tobj.dx = context.dashboard.dx;\n\t\t\t\t\tobj.dy = context.dashboard.dy;\n\t\t\t\t\tobj.id = obj.name+\":\"+uid();\n\n\t\t\t\t\tobj = this._settings.factory.call(this, obj);\n\t\t\t\t\tif (obj){\n\t\t\t\t\t\tthis.addView(obj);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.callEvent(\"onAfterDrop\", [context, e]);\n\t\t}\n\t},\n\t$dragDestroy:function(target, html){\n\t\thtml.style.zIndex = 1;\n\t\tremove(this._dragMarker);\n\t\tthis._dragMarker = null;\n\n\t\tthis._apply_new_grid();\n\t},\n\t_getPosFromCoords:function(x,y,resize){\n\t\tvar margin = this._settings.margin;\n\t\tvar paddingX = this._settings.paddingX || this._settings.padding;\n\t\tvar paddingY = this._settings.paddingY || this._settings.padding;\n\n\t\tvar dx = this._settings.cellWidth;\n\t\tif (!dx) dx = (this.$width - 2 * paddingX + margin) / this._settings.gridColumns - margin;\n\t\tvar dy = this._settings.cellHeight;\n\t\tif (!dy) dy = (this.$height - 2 * paddingY + margin) / this._actual_rows - margin;\n\n\t\tx+=resize ? margin : -paddingX;\n\t\ty+=resize ? margin : -paddingY;\n\t\t\n\t\tx = Math.round(x/(dx+margin));\n\t\ty = Math.round(y/(dy+margin));\n\n\t\tx = Math.max(0, Math.min(x, this._settings.gridColumns));\n\t\ty = Math.max(0, Math.min(y, this._actual_rows));\n\t\t\n\t\treturn {\n\t\t\tx:x, y:y,\n\t\t\twidth: dx, height:dy, margin:margin,\t\n\t\t\trx: x*(dx+margin)+paddingX,\n\t\t\try: y*(dy+margin)+paddingY\n\t\t};\n\t},\n\t$dragOut:function(s,t,d,e){\n\t\tvar context = DragControl._drag_context;\n\t\tthis.callEvent(\"onDragOut\", [context,e]);\n\t\tif (this._dragMarker && context.external){\n\t\t\tremove(this._dragMarker);\n\t\t\tthis._dragMarker = null;\n\t\t}\n\t},\n\t$dragIn:function(to, from, e){\n\t\tvar context = DragControl._drag_context;\n\n\t\tif(this.callEvent(\"onBeforeDragIn\", [context,e])){\n\t\t\tif (!this._dragMarker){\n\t\t\t\t// drag source must provide getItem method\n\t\t\t\tif (!context.from || !context.from.getItem) return false;\n\t\t\t\t// when factory not defined, do not allow external drag-n-drop\n\t\t\t\tif (!this._settings.factory)\n\t\t\t\t\treturn false;\n\n\t\t\t\tcontext.external = true;\n\t\t\t\tvar item = context.from.getItem(context.source);\n\t\t\t\tcontext.dashboard = { dx : item.dx, dy : item.dy };\n\n\t\t\t\tthis._addDragMarker(item.dx, item.dy);\n\t\t\t}\n\t\t\tif (context.external){\n\t\t\t\tvar drag = this._dragMarker;\n\t\t\t\tvar evObj = env.mouse.context(e);\n\t\t\t\tvar box = offset(this.$view);\n\n\t\t\t\tvar inpos = this._getPosFromCoords(evObj.x - box.x, evObj.y - box.y);\n\t\t\t\textend(context.dashboard , inpos, true);\n\t\t\t\tdrag.style.left = inpos.rx+\"px\";\n\t\t\t\tdrag.style.top = inpos.ry+\"px\";\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t},\n\t$dragPos: function(pos, e, html){\n\t\tvar context = DragControl._drag_context;\n\t\thtml.style.left = \"-10000px\";\n\n\t\tvar evObj = env.mouse.context(e);\n\t\tvar box = offset(this.$view);\n\t\tvar dash = context.dashboard;\n\n\t\tvar inpos = this._getPosFromCoords(evObj.x - box.x - dash.sx , evObj.y - box.y - dash.sy);\n\t\tpos.x = evObj.x - dash.sx - box.x;\n\t\tpos.y = evObj.y - dash.sy - box.y;\n\n\t\t//drag marker\n\t\tvar drag = this._dragMarker;\n\t\tdrag.style.left = inpos.rx+\"px\";\n\t\tdrag.style.top = inpos.ry+\"px\";\n\n\t\textend(dash , inpos, true);\n\t},\n};\n\n\nconst view = protoUI(api,  gridlayout.view);\nexport default {api, view};","import layout from \"../views/layout\";\nimport ResizeArea from \"../core/resizearea\";\nimport {addCss, create} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport {isArray} from \"../webix/helpers\";\n\n\nconst api = {\n\tname:\"panel\",\n\t$init:function(config){\n\t\tif (config.header && config.body){\n\t\t\tvar header = config.header;\n\t\t\tif (typeof header !== \"object\")\n\t\t\t\theader = { template:config.header, type:\"header\", css:\"webix_header\" };\n\t\t\tconfig.body = [ header, config.body ];\n\t\t}\n\n\t\taddCss(this.$view, \"panel_drag_view\");\n\t\tthis.$ready.push(this._init_drag_area);\n\t},\n\t_init_drag_area:function(){\n\t\tvar childs = this.getChildViews();\n\t\tvar parent = childs.length === 1 ? this : childs[1];\n\n\t\tif (this._settings.icon){\n\t\t\tvar drag = create(\"div\", { \"class\":\"panel_icon\" }, \"<span class='webix_icon \"+this._settings.icon+\" panel_icon_span'></span>\");\n\t\t\tif (parent != this)\n\t\t\t\tparent.$view.style.position = \"relative\";\n\t\t\tparent.$view.appendChild(drag);\n\t\t}\n\t},\n\tbody_setter:function(value){\n\t\treturn this.rows_setter(isArray(value) ? value:[value]);\n\t},\n\t$resizeEnd:function(pos){\n\t\tvar parent = this.getParentView();\n\t\tif (parent && parent._getPosFromCoords){\n\t\t\tvar end = parent._getPosFromCoords(pos.mx, pos.my, true);\n\n\t\t\tvar dx = Math.max(end.x, 1);\n\t\t\tvar dy = Math.max(end.y, 1);\n\t\t\tparent.moveView(this._settings.id, { dx:dx, dy:dy });\n\t\t}\n\t},\n\t$resizeMove:function(pos){\n\t\tvar parent = this.getParentView();\n\t\tif (parent && parent._getPosFromCoords){\n\t\t\tpos.mx = pos.x;\n\t\t\tpos.my = pos.y;\n\t\t\tvar fx = parent._getPosFromCoords(pos.x, pos.y, true);\n\t\t\tpos.x = (fx.width+fx.margin)*fx.x - fx.margin;\n\t\t\tpos.y = (fx.height+fx.margin)*fx.y - fx.margin;\n\t\t}\n\t}\n};\n\n\nconst view = protoUI(api,  layout.view, ResizeArea);\nexport default {api, view};","import layout from \"../views/layout\";\nimport {protoUI} from \"../ui/core\";\nimport {extend} from \"../webix/helpers\";\nimport FlexLayout from \"../core/flexlayout\";\n\n\nconst api = {\n\t$init:function(){\n\t\textend(this, FlexLayout, true);\n\t},\n\tname:\"flexlayout\"\n};\n\n\nconst view = protoUI(api,  layout.view);\nexport default {api, view};","import layout from \"../views/layout\";\nimport DataLoader from \"../core/dataloader\";\nimport {protoUI} from \"../ui/core\";\nimport {bind, extend, copy} from \"../webix/helpers\";\n\n\nconst api = {\n\tname:\"datalayout\",\n\t$init:function(){\n\t\tthis.data.provideApi(this, true);\n\t\tthis.data.attachEvent(\"onStoreUpdated\", bind(this.render, this));\n\t},\n\t_parse_cells:function(){\n\t\tif (!this._origin_cells){\n\t\t\tthis._origin_cells = this._collection;\n\t\t\tthis._collection = [{}];\n\t\t}\n\n\t\treturn layout.api._parse_cells.call(this, this._collection);\n\t},\n\tsetValue:function(obj){\n\t\tthis.parse(obj);\n\t},\n\tgetValue:function(){\n\t\tvar subcount = this._origin_cells.length;\n\t\tfor (var i = 0; i < this._cells.length; i++) {\n\t\t\tvar id = this.data.order[Math.floor(i/subcount)];\n\t\t\tvar item = this.data.getItem(id);\n\t\t\tthis._save_data(this._cells[i], item);\n\t\t}\n\t\treturn this.data.serialize();\n\t},\n\t_save_data:function(view, prop){\n\t\tvar name = view._settings.name;\n\t\tif (name){\n\t\t\tvar data = null;\n\t\t\tif (view.getValues) data = view.getValues();\n\t\t\telse if (view.getValue) data = view.getValue();\n\t\t\telse if (view.serialize) data = view.serialize();\n\n\t\t\tif (name == \"$value\")\n\t\t\t\textend(prop, data, true);\n\t\t\telse \n\t\t\t\tprop[name] = data;\n\t\t} else {\n\t\t\tvar collection = view._cells;\n\t\t\tif (collection)\n\t\t\t\tfor (var i = 0; i < collection.length; i++)\n\t\t\t\t\tthis._save_data(collection[i], prop);\n\t\t}\n\t},\n\t_fill_data:function(view, prop){\n\t\tvar obj, name = view._settings.name;\n\t\tif (name){\n\t\t\tif (name == \"$value\")\n\t\t\t\tobj = prop;\n\t\t\telse\n\t\t\t\tobj = prop[name];\n\n\t\t\tif (view.setValues) view.setValues(obj);\n\t\t\telse if (view.setValue) view.setValue(obj);\n\t\t\telse if (view.parse){\n\t\t\t\t//make copy of data for treestore parsers\n\t\t\t\tif (view.openAll)\n\t\t\t\t\tobj = copy(obj);\n\t\t\t\tview.parse(obj);\n\t\t\t}\n\t\t} else {\n\t\t\tvar collection = view._cells;\n\t\t\tif (collection)\n\t\t\t\tfor (var i = 0; i < collection.length; i++)\n\t\t\t\t\tthis._fill_data(collection[i], prop);\n\t\t}\n\t},\n\trender:function(id, obj, mode){\n\t\tvar subcount = this._origin_cells.length;\n\n\t\tif (id && mode === \"update\"){\n\t\t\t//update mode, change only part of layout\n\t\t\tvar item = this.getItem(id);\n\t\t\tvar index = this.getIndexById(id);\n\n\t\t\tfor(let i=0; i<subcount; i++)\n\t\t\t\tthis._fill_data(this._cells[index*subcount+i], item);\n\t\t\treturn;\n\t\t}\n\n\t\t//full repainting\n\t\tvar cells = this._collection = [];\n\t\tvar order = this.data.order;\n\n\t\tfor (let i = 0; i < order.length; i++) {\n\t\t\tif (subcount)\n\t\t\t\tfor (let j = 0; j < subcount; j++)\n\t\t\t\t\tcells.push(copy(this._origin_cells[j]));\n\t\t\telse\n\t\t\t\tcells.push(this.getItem(order[i]));\n\t\t}\n\n\t\tif (!cells.length) cells.push({});\n\n\t\tthis.reconstruct();\n\n\t\tif (subcount)\n\t\t\tfor (let i = 0; i < order.length; i++) {\n\t\t\t\tvar prop = this.getItem(order[i]);\n\t\t\t\tfor (let j = 0; j < subcount; j++) {\n\t\t\t\t\tvar view = this._cells[i*subcount + j];\n\t\t\t\t\tthis._fill_data(view, prop);\n\t\t\t\t}\n\t\t\t}\n\t}\n};\n\n\nconst view = protoUI(api,  DataLoader, layout.view);\nexport default {api, view};","import datalayout from \"../views/datalayout\";\nimport {protoUI} from \"../ui/core\";\nimport {extend} from \"../webix/helpers\";\nimport FlexLayout from \"../core/flexlayout\";\n\n\nconst api = {\n\t$init:function(){\n\t\textend(this, FlexLayout, true);\n\t},\n\tname:\"flexdatalayout\"\n};\n\n\nconst view = protoUI(api,  datalayout.view);\nexport default {api, view};","import {remove, create} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\n\nimport window from \"../views/window\";\nimport base from \"../views/view\";\n\nimport {zIndex} from \"../ui/helpers\";\nimport {attachEvent} from \"../webix/customevents\";\n\n\nconst api = {\n\tname:\"popup\",\n\t$init:function(){\n\t\tthis._settings.head = false;\n\t\tthis.$view.className += \" webix_popup\";\n\t\tattachEvent(\"onClick\", (e)=>this._hide(e));\n\t\tthis.attachEvent(\"onHide\", this._hide_point);\n\t},\n\t$skin:function(){\n\t\twindow.api.$skin.call(this);\n\n\t\tthis.defaults.padding = $active.popupPadding;\n\t\tthis.defaults.point = !$active.popupNoPoint;\n\t\tthis.defaults.borderless = $active.borderlessPopup;\n\t},\n\tclose:function(){\n\t\tremove(this._point_element);\n\t\twindow.api.close.call(this);\n\t},\n\t$getSize:function(x,y){\n\t\treturn window.api.$getSize.call(this, x+this._settings.padding*2,y+this._settings.padding*2);\n\t},\n\t$setSize:function(x,y){\n\t\tbase.api.$setSize.call(this,x,y);\n\t\tx = this._content_width-this._settings.padding*2;\n\t\ty = this._content_height-this._settings.padding*2;\n\t\tthis._contentobj.style.padding = this._settings.padding+\"px\";\n\t\tthis._headobj.style.display=\"none\";\n\t\tthis._body_cell.$setSize(x,y);\n\t},\n\t//redefine to preserve inner borders\n\t//_inner_body_set:function(){}, //same as win?\n\t_inner_body_set:function(value){\n\t\tif (typeof value.borderless == \"undefined\")\n\t\t\tvalue.borderless = false;\n\t},\n\thead_setter:function(){\n\t},\n\t_set_point:function(mode, left, top, fixed){\n\t\tthis._hide_point();\n\t\tdocument.body.appendChild(this._point_element = create(\"DIV\",{ \"class\":\"webix_point_\"+mode },\"\"));\n\t\tthis._point_element.style.zIndex = zIndex();\n\t\tthis._point_element.style.position = fixed ? \"fixed\":\"absolute\";\n\n\t\tthis._point_element.style.top = top+\"px\";\n\t\tthis._point_element.style.left = left+\"px\";\n\t},\n\t_hide_point:function(){\n\t\tthis._point_element = remove(this._point_element);\n\t}\n};\n\n\n\nconst view = protoUI(api, window.view);\nexport default {api, view};","import {protoUI} from \"../ui/core\";\n\nimport {_each} from \"../ui/helpers\";\nimport {extend} from \"../webix/helpers\";\nimport {debug_size_box} from \"../webix/debug\";\n\nimport layout from \"../views/layout\";\n\nimport Scrollable from \"../core/scrollable\";\nimport AtomDataLoader from \"../core/atomdataloader\";\nimport Values from \"../core/values\";\nimport ValidateData from \"../core/validatedata\";\n\n\nconst api = {\n\tname:\"toolbar\",\n\tdefaults:{\n\t\ttype:\"toolbar\"\n\t},\n\t_render_borders:true,\n\t_form_classname:\"webix_toolbar\",\n\t_form_vertical:false,\n\t$init:function(config){\n\t\tif (!config.borderless){\n\t\t\tthis._contentobj.style.borderWidth=\"1px\";\n\t\t\tthis._settings._inner = {top:false, left:false, right:false, bottom:false };\n\t\t}\n\n\t\tthis._contentobj.className+=\" \"+this._form_classname;\n\t\tthis._viewobj.setAttribute(\"role\", \"toolbar\");\n\t},\n\t_recollect_elements:function(){\n\t\tvar form = this;\n\t\tform.elements = {};\n\t\t_each(this, function(view){\n\t\t\tif (view._settings.name && view.getValue && view.setValue){\n\t\t\t\tform.elements[view._settings.name] = view;\n\t\t\t\tif (view.mapEvent)\n\t\t\t\t\tview.mapEvent({\n\t\t\t\t\t\tonbeforetabclick:form,\n\t\t\t\t\t\tonaftertabclick:form,\n\t\t\t\t\t\tonitemclick:form,\n\t\t\t\t\t\tonchange:form\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (view.setValues) return false;\n\t\t});\n\t\tvar old = this._values;\n\t\tthis.setDirty(false);\n\t\tif (old) {\n\t\t\t//restore dirty state after form reconstructing\n\t\t\tvar now = this._values;\n\t\t\tfor (var key in form.elements) \n\t\t\t\tif (old[key] && now[key] != old[key]){\n\t\t\t\t\tnow[key] = old[key];\n\t\t\t\t\tthis.setDirty(true);\n\t\t\t\t}\n\t\t}\n\t},\n\t_parse_cells_ext_end:function(){\n\t\tthis._recollect_elements();\n\t},\n\t_parse_cells_ext:function(collection){\n\t\tvar config = this._settings;\n\t\tif (config.elements && !collection){\n\t\t\tthis._collection = collection = config.elements;\n\t\t\tthis._vertical_orientation = this._form_vertical;\n\t\t\tdelete config.elements;\n\t\t}\n\n\t\tif (this._settings.elementsConfig)\n\t\t\tthis._rec_apply_settings(this._collection, config.elementsConfig);\n\t\t\n\t\treturn collection;\n\t},\n\t_rec_apply_settings:function(col, settings){\n\t\tfor (var i=0; i<col.length; i++){\n\t\t\tvar element = col[i];\n\t\t\textend( element, settings );\n\t\t\tvar nextsettings = settings;\n\n\t\t\tif (element.elementsConfig)\n\t\t\t\tnextsettings = extend(extend({}, element.elementsConfig), settings);\n\n\t\t\tvar sub;\n\t\t\tif (element.body)\n\t\t\t\tsub = [element.body];\n\t\t\telse\n\t\t\t\tsub = element.rows || element.cols || element.cells || element.body;\n\n\t\t\tif (sub)\n\t\t\t\tthis._rec_apply_settings(sub, nextsettings);\n\t\t}\n\t},\n\t$getSize:function(dx, dy){\n\t\tvar sizes = layout.api.$getSize.call(this, dx, dy);\n\t\tvar parent = this.getParentView();\n\t\tvar index = this._vertical_orientation?3:1;\n\t\tif (parent && this._vertical_orientation != parent._vertical_orientation)\n\t\t\tsizes[index]+=100000;\n\t\t\n\t\tif (DEBUG) debug_size_box(this, sizes, true);\n\t\treturn sizes;\n\t},\n\trender:function(){\n\t},\n\trefresh:function(){\n\t\tthis.render();\n\t}\n};\n\nconst view = protoUI(api, Scrollable, AtomDataLoader, Values, layout.view, ValidateData);\nexport default {api, view};","import {protoUI} from \"../ui/core\";\nimport env from \"../webix/env\";\n\nimport layout from \"../views/layout\";\nimport toolbar from \"../views/toolbar\";\n\n\nconst api = {\n\tname:\"form\",\n\tdefaults:{\n\t\ttype:\"form\",\n\t\tautoheight:true\n\t},\n\t_default_height:-1,\n\t_form_classname:\"webix_form\",\n\t_form_vertical:true,\n\t$init:function(){\n\t\tthis._viewobj.setAttribute(\"role\", \"form\");\n\t},\n\t$getSize:function(dx, dy){\n\t\tif (this._scroll_y && !this._settings.width) dx += env.scrollSize;\n\n\t\tvar sizes = layout.api.$getSize.call(this, dx, dy);\n\n\t\tif (this._settings.scroll || !this._settings.autoheight){\n\t\t\tsizes[2] =  this._settings.height || this._settings.minHeight || 0;\n\t\t\tsizes[3] = this._settings.height || 100000;\n\t\t}\n\t\t\n\t\treturn sizes;\n\t}\n};\n\n\nconst view = protoUI(api, toolbar.view);\nexport default {api, view};","import base from \"../views/view\";\nimport {protoUI, ui} from \"../ui/core\";\nimport state from \"../core/state\";\nimport {debug_size_box_start, debug_size_box_end} from \"../webix/debug\";\n\n\nconst api = {\n\tname:\"fieldset\",\n\tdefaults:{\n\t\tborderless:true,\n\t\t$cssName:\"webix_fieldset\",\n\t\tpaddingX: 18,\n\t\tpaddingY: 30\n\t},\n\t$init:function(obj){\n\t\tobj.body = obj.body || {};\n\n\t\tlet css = this.defaults.$cssName;\n\t\tthis._viewobj.className += \" \"+css;\n\t\tthis._viewobj.innerHTML =  \"<fieldset><legend class='\"+css+\"_label\"+(obj.required?\" webix_required\":\"\")+\n\t\t\t\"'></legend><div class='\"+css+\"_body'></div></fieldset>\";\n\t},\n\tlabel_setter:function(value){\n\t\tthis._viewobj.firstChild.childNodes[0].innerHTML = value;\n\t\treturn value;\n\t},\n\tgetChildViews:function(){\n\t\treturn [this._body_view];\n\t},\n\tbody_setter:function(config){\n\t\tstate._parent_cell = this;\n\t\tthis._body_view = ui(config, this._viewobj.firstChild.childNodes[1]);\n\t\treturn config;\n\t},\n\tgetBody:function(){\n\t\treturn this._body_view;\n\t},\n\tresizeChildren:function(){\n\t\tif (!this._body_view) return;\n\t\tvar x = this.$width - this._settings.paddingX;\n\t\tvar y = this.$height - this._settings.paddingY;\n\t\tvar sizes=this._body_view.$getSize(0,0);\n\n\t\t//minWidth\n\t\tif (sizes[0]>x) x = sizes[0];\n\t\t//minHeight\n\t\tif (sizes[2]>y) y = sizes[2];\n\n\t\tthis._body_view.$setSize(x,y);\n\t\tthis.resize();\n\t},\n\t$getSize:function(x, y){\n\t\tif (DEBUG) debug_size_box_start(this, true);\n\n\t\tx += this._settings.paddingX;\n\t\ty += this._settings.paddingY;\n\t\t\n\t\tvar t = this._body_view.$getSize(x, y);\n\t\tvar s = this._last_body_size = base.api.$getSize.call(this, x, y);\n\n\t\t//inner content minWidth > outer\n\t\tif (s[0] < t[0]) s[0] = t[0];\n\t\tif (s[2] < t[2]) s[2] = t[2];\n\t\t//inner content maxWidth < outer\n\t\tif (s[1] > t[1]) s[1] = t[1];\n\t\tif (s[3] > t[3]) s[3] = t[3];\n\t\t//make max size not less than min size\n\t\tif (s[1] < s[0]) s[1] = s[0];\n\t\tif (s[3] < s[2]) s[3] = s[2];\n\n\t\tif (DEBUG) debug_size_box_end(this, s);\n\t\treturn s;\n\t},\n\t$setSize:function(x,y){\n\t\tif (base.api.$setSize.call(this, x,y)){\n\t\t\tx = Math.min(this._last_body_size[1], x);\n\t\t\ty = Math.min(this._last_body_size[3], y);\n\t\t\tthis._body_view.$setSize(x - this._settings.paddingX, y - this._settings.paddingY);\n\t\t}\n\t}\n};\n\n\nconst view = protoUI(api,  base.view);\nexport default {api, view};","import fieldset from \"../views/fieldset\";\nimport {remove, create} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\nimport {isUndefined} from \"../webix/helpers\";\n\n\nconst api = {\n\tname:\"forminput\",\n\tdefaults:{\n\t\t$cssName:\"webix_forminput\",\n\t\tlabelWidth: 80,\n\t\tlabelAlign : \"left\",\n\t\t// remove fieldset sizing\n\t\tpaddingY:0, paddingX:0\n\t},\n\tsetValue:function(value){\n\t\tif(this._body_view.setValue)\n\t\t\tthis._body_view.setValue(value);\n\t\telse if (this._body_view.setValues)\n\t\t\tthis._body_view.setValues(value);\n\t},\n\tfocus:function(){\n\t\tif (this._body_view.focus){\n\t\t\treturn this._body_view.focus();\n\t\t}\n\t\treturn false;\n\t},\n\tgetValue:function(){\n\t\tif(this._body_view.getValue)\n\t\t\treturn this._body_view.getValue();\n\t\telse if (this._body_view.getValues)\n\t\t\treturn this._body_view.getValues();\n\t},\n\tgetBody:function(){\n\t\treturn this._body_view;\n\t},\n\t$skin:function(){\n\t\tthis._inputPadding = $active.inputPadding;\n\t\tthis._inputSpacing = $active.inputSpacing;\n\t\tthis._labelTopHeight = $active.labelTopHeight;\n\t},\n\t$init:function(obj){\n\t\tthis.$ready.push(function(){\n\t\t\tlet label = this._viewobj.firstChild.childNodes[0];\n\n\t\t\tif (!this._settings.label || !this._settings.labelWidth){\n\t\t\t\tlabel.style.display = \"none\";\n\t\t\t\tthis._settings.paddingX = this._settings.paddingY = 0;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this._settings.labelPosition == \"top\"){\n\t\t\t\tlabel.style.lineHeight = this._labelTopHeight - this._inputPadding + \"px\";\n\t\t\t\tlabel.className += \" \"+this.defaults.$cssName+\"_label_top\";\n\t\t\t} else label.style.width = this._settings.paddingX+\"px\";\n\n\t\t\tlabel.style.textAlign = this._settings.labelAlign;\n\n\t\t\tif(this._settings.value) this.setValue(this._settings.value);\n\t\t});\n\n\t\tif (obj.labelPosition != \"top\"){\n\t\t\tvar lw = isUndefined(obj.labelWidth) ? this.defaults.labelWidth : obj.labelWidth;\n\t\t\tobj.paddingX = lw - this._inputPadding*2 + this._inputSpacing* 2;\n\t\t} else obj.paddingY = this._labelTopHeight;\n\t},\n\tsetBottomText: function(text) {\n\t\tvar config = this._settings;\n\t\tif (typeof text != \"undefined\"){\n\t\t\tif (config.bottomLabel == text) return;\n\t\t\tconfig.bottomLabel = text;\n\t\t}\n\t\tvar message = (config.invalid ? config.invalidMessage : \"\") || config.bottomLabel;\n\t\tif(this._invalidMessage) {\n\t\t\tremove(this._invalidMessage);\n\t\t}\n\t\tif(message) {\n\t\t\tthis.$view.style.position = \"relative\";\n\t\t\tthis._invalidMessage = create(\"div\", { \"class\":\"webix_inp_bottom_label\", role:config.invalid?\"alert\":\"\", \"aria-relevant\":\"all\", style:\"position:absolute; bottom:0px; padding:2px; background: white; left:\"+this._settings.labelWidth+\"px; \" }, message);\n\t\t\tthis._viewobj.appendChild(this._invalidMessage);\n\t\t}\n\t}\n};\n\n\nconst view = protoUI(api,  fieldset.view);\nexport default {api, view};","import template from \"../views/template\";\nimport Values from \"../core/values\";\nimport {addCss, removeCss} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport {toNode} from \"../webix/helpers\";\n\n\nfunction _tagname(el) {\n\tif (!el.tagName) return null;\n\treturn el.tagName.toLowerCase();\n}\nfunction _attribute(el, name) {\n\tif (!el.getAttribute) return null;\n\tvar attr = el.getAttribute(name);\n\treturn attr ? attr.toLowerCase() : null;\n}\nfunction _get_html_value() {\n\tvar tagname = _tagname(this);\n\tif (_get_value[tagname])\n\t\treturn _get_value[tagname](this);\n\treturn _get_value.other(this);\n}\n\nvar _get_value = {\n\tradio: function(el){\n\t\tfor (var i = 0; i < el.length; i++)\n\t\t\tif (el[i].checked) return el[i].value;\n\t\treturn \"\";\n\t},\n\tinput: function(el) {\n\t\tvar type = _attribute(el, \"type\");\n\t\tif (type === \"checkbox\")\n\t\t\treturn el.checked;\t\t\t\n\t\treturn el.value;\n\t},\n\ttextarea: function(el) {\n\t\treturn el.value;\n\t},\n\tselect: function(el) {\n\t\tvar index = el.selectedIndex;\n\t\treturn el.options[index].value;\n\t},\n\tother: function(el) {\n\t\treturn el.innerHTML;\n\t}\n};\n\nfunction  _set_html_value(value) {\n\tvar tagname = _tagname(this);\n\tif (_set_value[tagname])\n\t\treturn _set_value[tagname]( this, value);\n\treturn _set_value.other( this, value);\n}\n\nvar _set_value = {\n\tradio:function(el, value){\n\t\tfor (var i = 0; i < el.length; i++)\n\t\t\tel[i].checked = (el[i].value == value);\n\t},\n\tinput: function(el, value) {\n\t\tvar type = _attribute(el, \"type\");\n\t\tif (type === \"checkbox\")\n\t\t\tel.checked = (value) ? true : false;\n\t\telse\n\t\t\tel.value = value;\n\t},\n\ttextarea: function(el, value) {\n\t\tel.value = value;\n\t},\n\tselect: function(el, value) {\n\t\tel.value = value;\n\t\t//incorrect option applied, select first option\n\t\tif(el.selectedIndex === -1) el.value = el.firstElementChild.value;\n\t},\n\tother: function(el, value) {\n\t\tel.innerHTML = value;\n\t}\n};\n\n\nconst api = {\n\tname:\"htmlform\",\n\t$init: function(config) {\n\t\tthis.elements = {};\n\t\tthis._default_values  = false;\n\n\t\tif (config.content && (config.container == config.content || !config.container && config.content == document.body))\n\t\t\tthis._copy_inner_content = true;\n\t},\n\tcontent_setter:function(content){\n\t\tcontent = toNode(content);\n\t\tif (this._copy_inner_content){\n\t\t\twhile (content.childNodes.length > 1)\n\t\t\t\tthis._viewobj.childNodes[0].appendChild(content.childNodes[0]);\n\t\t} else {\n\t\t\tthis._viewobj.childNodes[0].appendChild(content);\n\t\t}\n\t\tthis._parse_inputs();\n\t\treturn true;\n\t},\n\trender:function(){\n\t\ttemplate.api.render.apply(this, arguments);\n\t\tthis._parse_inputs();\n\t},\n\t_parse_inputs: function() {\n\t\tvar inputs = this._viewobj.querySelectorAll(\"[name]\");\n\t\tthis.elements = {};\n\n\n\t\tfor (var i=0; i<inputs.length; i++){\n\t\t\tvar el = inputs[i];\n\t\t\tvar name = _attribute(el, \"name\");\n\t\t\tif (name){\n\t\t\t\tvar tag = _tagname(el) === \"button\";\n\t\t\t\tvar type = _attribute(el, \"type\");\n\n\t\t\t\tvar cant_clear = tag || type === \"button\" || type === \"submit\";\n\n\t\t\t\tif (type === \"radio\"){\n\t\t\t\t\tvar stack = this.elements[name] || [];\n\t\t\t\t\tstack.tagName = \"radio\";\n\t\t\t\t\tstack.push(el);\n\t\t\t\t\tel = stack;\n\t\t\t\t}\n\n\t\t\t\tthis.elements[name] = el;\n\n\t\t\t\tel.getValue =  _get_html_value;\n\t\t\t\tel.setValue =  _set_html_value;\n\t\t\t\tel.$allowsClear = !cant_clear;\n\t\t\t}\n\t\t}\n\n\t\treturn this.elements;\n\t},\n\t_mark_invalid:function(id,obj){\n\t\tthis._clear_invalid(id,obj);\n\t\tvar el = this._viewobj.querySelector(\"[name=\\\"\" + id + \"\\\"]\");\n\t\tif (el) addCss(el, \"invalid\");\n\t},\n\t_clear_invalid:function(id){\n\t\tvar el = this._viewobj.querySelector(\"[name=\\\"\" + id + \"\\\"]\");\n\t\tif (el) removeCss(el, \"invalid\");\n\t},\n\tfocus:function(name){\n\t\tif (!name && this.$view.contains(document.activeElement)){\n\t\t\t// focus already inside of form, leaving\n\t\t\treturn false;\n\t\t}\n\t\tValues.focus.apply(this, arguments);\n\t}\n};\n\n\nconst view = protoUI(api,  template.view, Values);\nexport default {api, view};","import base from \"../views/view\";\nimport AutoTooltip from \"../core/autotooltip\";\nimport EditAbility from \"../core/editability\";\nimport MapCollection from \"../core/mapcollection\";\nimport MouseEvents from \"../core/mouseevents\";\nimport Scrollable from \"../core/scrollable\";\nimport SingleRender from \"../core/singlerender\";\nimport AtomDataLoader from \"../core/atomdataloader\";\nimport EventSystem from \"../core/eventsystem\";\nimport {locate, createCss} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport template from \"../webix/template\";\nimport {$active} from \"../webix/skin\";\nimport {uid, extend, clone, isUndefined} from \"../webix/helpers\";\nimport {addCss, removeCss} from \"../webix/html\";\nimport RenderStack from \"../core/renderstack\";\nimport CodeParser from \"../core/codeparser\";\n\n\nconst api = {\n\tname:\"property\",\n\t$init:function(){\n\t\tthis._contentobj.className+=\" webix_property\";\n\t\tthis._contentobj.setAttribute(\"role\", \"listbox\");\n\t\tthis._destroy_with_me = [];\n\n\t\tthis.attachEvent(\"onAfterEditStart\", function(id){\n\t\t\tvar node = this.getItemNode(id);\n\t\t\taddCss(node, \"webix_focused\");\n\t\t});\n\t\tthis.attachEvent(\"onAfterEditStop\", function(id, editor){\n\t\t\tvar node = this.getItemNode(editor.config.id);\n\t\t\tremoveCss(node, \"webix_focused\");\n\t\t});\n\t},\n\tdefaults:{\n\t\tnameWidth:100,\n\t\teditable:true\n\t},\n\ton_render:{\n\t\tcheckbox:function(value){\n\t\t\treturn  \"<input type='checkbox' class='webix_property_check' \"+(value?\"checked\":\"\")+\">\";\n\t\t},\n\t\tcolor:function(value){\n\t\t\treturn  \"<div class=\\\"webix_property_col_val\\\"><div class='webix_property_col_ind' style=\\\"background-color:\"+(value||\"#FFFFFF\")+\";\\\"></div><span>\" +value+\"</span></div>\";\n\t\t}\n\t},\n\ton_edit:{\n\t\tlabel:false\n\t},\n\t_id:/*@attr*/\"webix_f_id\",\n\ton_click:{\n\t\twebix_property_check:function(ev){\n\t\t\tvar id = this.locate(ev);\n\t\t\tthis.getItem(id).value = !this.getItem(id).value;\n\t\t\tthis.callEvent(\"onCheck\",[id, this.getItem(id).value]);\n\t\t\treturn false;\n\t\t}\n\t},\n\ton_dblclick:{\n\t},\n\tregisterType:function(name, data){\n\t\tif (!isUndefined(data.template))\n\t\t\tthis.on_render[name] = data.template;\n\t\tif (!isUndefined(data.editor))\n\t\t\tthis.on_edit[name] = data.editor;\n\t\tif (!isUndefined(data.click))\n\t\t\tfor (var key in data.click)\n\t\t\t\tthis.on_click[key] = data.click[key];\n\t},\n\telements_setter:function(data){\n\t\tthis._idToLine = {};\n\t\tfor(var i =0; i < data.length; i++){\n\t\t\tvar line = data[i];\n\t\t\tif (line.type == \"multiselect\")\n\t\t\t\tline.optionslist = true;\n\n\t\t\t//line.type \t= \tline.type||\"label\";\n\t\t\tline.id \t=\tline.id||uid();\n\t\t\tline.label \t=\tline.label||\"\";\n\t\t\tline.value \t=\tline.value||\"\";\n\t\t\tthis._idToLine[line.id] = i;\n\t\t\tthis._map_options(data[i]);\n\t\t}\n\t\treturn data;\n\t},\n\tshowItem:function(id){\n\t\tRenderStack.showItem.call(this, id);\n\t},\n\tlocate:function(){\n\t\treturn locate(arguments[0], this._id);\n\t},\n\tgetItemNode:function(id){\n\t\treturn this._dataobj.childNodes[this._idToLine[id]];\n\t},\n\tgetItem:function(id){\n\t\treturn this._settings.elements[this._idToLine[id]];\n\t},\n\t_get_editor_type:function(id){\n\t\tvar type = this.getItem(id).type;\n\t\tif (type == \"checkbox\") return \"inline-checkbox\";\n\t\tvar alter_type = this.on_edit[type];\n\t\treturn (alter_type === false)?false:(alter_type||type);\n\t},\n\t_get_edit_config:function(id){\n\t\treturn this.getItem(id);\n\t},\n\t_find_cell_next:function(start, check , direction){\n\t\tlet row = this._idToLine[start.id];\n\t\tlet order = this._settings.elements;\n\t\t\n\t\tif (direction){\n\t\t\tfor (let i=row+1; i<order.length; i++){\n\t\t\t\tif (check.call(this, order[i].id))\n\t\t\t\t\treturn order[i].id;\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let i=row-1; i>=0; i--){\n\t\t\t\tif (check.call(this, order[i].id))\n\t\t\t\t\treturn order[i].id;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t},\n\tupdateItem:function(key, data){\n\t\tdata = data || {};\n\n\t\tvar line = this.getItem(key);\n\t\tif (line)\n\t\t\textend(line, data, true);\n\n\t\tthis.refresh();\n\t},\n\t_cellPosition:function(id){\n\t\tvar html = this.getItemNode(id);\n\t\treturn {\n\t\t\tleft:html.offsetLeft+this._settings.nameWidth,\n\t\t\ttop:html.offsetTop,\n\t\t\theight:html.firstChild.offsetHeight,\n\t\t\twidth:this._data_width,\n\t\t\tparent:this._contentobj\n\t\t};\n\t},\n\t_clear:function(){\n\t\tvar lines = this._settings.elements;\n\t\tfor (var i=0; i<lines.length; i++)\n\t\t\tlines[i].value = \"\";\n\t},\n\tclear:function(){\n\t\tthis._clear();\n\t\tthis._props_dataset = {};\n\t\tthis.refresh();\n\t},\n\tsetValues:function(data, update){\n\t\tif (this._settings.complexData)\n\t\t\tdata = CodeParser.collapseNames(data, \"\", {}, (v) => isUndefined(this._idToLine[v]));\n\n\t\tif(!update) this._clear();\n\t\tfor(var key in data){\n\t\t\tvar line = this.getItem(key);\n\t\t\tif (line)\n\t\t\t\tline.value = data[key];\n\t\t}\n\t\t\n\t\tthis._props_dataset = data;\n\t\tthis.refresh();\n\t},\n\tgetValues:function(){\n\t\tvar data = clone(this._props_dataset||{});\n\t\tfor (var i = 0; i < this._settings.elements.length; i++) {\n\t\t\tvar line = this._settings.elements[i];\n\t\t\tif (line.type != \"label\")\n\t\t\t\tdata[line.id] = line.value;\n\t\t}\n\n\t\tif (this._settings.complexData)\n\t\t\tdata = CodeParser.expandNames(data);\n\n\t\treturn data;\n\t},\n\trefresh:function(){\n\t\tthis.render();\n\t},\n\t$setSize:function(x,y){\n\t\tif (base.api.$setSize.call(this, x, y)){\n\t\t\tthis._data_width = this._content_width - this._settings.nameWidth;\n\t\t\tthis.render();\n\t\t}\n\t},\n\t$getSize:function(dx,dy){\n\t\tif (this._settings.autoheight){\n\t\t\tvar count = this._settings.elements.length;\n\t\t\tthis._settings.height = Math.max(this.type.height * count,this._settings.minHeight||0);\n\t\t}\n\t\treturn base.api.$getSize.call(this, dx, dy);\n\t},\n\t_toHTML:function(){\n\t\tvar html = [];\n\t\tvar els = this._settings.elements;\n\t\tif (els)\n\t\t\tfor (var i=0; i<els.length; i++){\n\t\t\t\tvar data = els[i];\n\t\t\t\tif (data.css && typeof data.css == \"object\")\n\t\t\t\t\tdata.css = createCss(data.css);\n\n\t\t\t\tvar pre = \"<div \"+/*@attr*/\"webix_f_id\"+\"=\\\"\"+data.id+\"\\\"\"+(data.type!==\"label\"?\"role=\\\"option\\\" tabindex=\\\"0\\\"\":\"\")+\" class=\\\"webix_property_line \"+(data.css||\"\")+\"\\\">\";\n\t\t\t\tif (data.type == \"label\")\n\t\t\t\t\thtml[i] = pre+\"<div class='webix_property_label_line'>\"+data.label+\"</div></div>\";\n\t\t\t\telse {\n\t\t\t\t\tvar render = this.on_render[data.type],\n\t\t\t\t\t\tcontent;\n\t\t\t\t\tvar post = \"<div class='webix_property_label' style='width:\"+this._settings.nameWidth+\"px'>\"+data.label+\"</div><div class='webix_property_value' style='width:\"+this._data_width+\"px'>\";\n\t\t\t\t\tif(data.collection || data.options){\n\t\t\t\t\t\tcontent = data.template(data);\n\t\t\t\t\t}else if(data.format)\n\t\t\t\t\t\tcontent = data.format(data.value);\n\t\t\t\t\telse\n\t\t\t\t\t\tcontent = data.value;\n\t\t\t\t\tif (render)\n\t\t\t\t\t\tcontent = render.call(this, data.value, data);\n\t\t\t\t\thtml[i] = pre+post+content+\"</div></div>\";\n\t\t\t\t}\n\t\t\t}\n\t\treturn html.join(\"\");\n\t},\n\ttype:{\n\t\theight:24,\n\t\ttemplateStart:template(\"\"),\n\t\ttemplateEnd:template(\"</div>\")\n\t},\n\t$skin: function(){\n\t\tthis.type.height = $active.propertyItemHeight;\n\t}\n};\n\n\nconst view = protoUI(api, AutoTooltip, EditAbility, MapCollection, MouseEvents, Scrollable, SingleRender, AtomDataLoader, EventSystem, base.view);\nexport default {api, view};","import {index} from \"../webix/html\";\nimport {protoUI, $$} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\nimport env from \"../webix/env\";\nimport {bind, isUndefined, extend, copy, toFunctor, isArray} from \"../webix/helpers\";\nimport {_event} from \"../webix/htmlevents\";\nimport template from \"../webix/template\";\n\nimport i18n from \"../webix/i18n\";\nimport UIManager from \"../core/uimanager\";\nimport MouseEvents from \"../core/mouseevents\";\nimport EventSystem from \"../core/eventsystem\";\nimport base from \"../views/view\";\nimport DateHelper from \"../core/date\";\nimport KeysNavigation from \"../core/keysnavigation\";\n\n\nconst api = {\n\tname:\"calendar\",\n\n\tdefaults:{\n\t\tdate: new Date(), //selected date, not selected by default\n\t\tselect: false,\n\t\tnavigation: true,\n\t\tmonthSelect: true,\n\t\tweekHeader: true,\n\t\tmonthHeader: true,\n\t\tweekNumber: false,\n\t\tskipEmptyWeeks: false,\n\t\tcalendarHeader: \"%F %Y\",\n\t\t//calendarTime: \"%H:%i\",\n\t\tevents:DateHelper.isHoliday,\n\t\tminuteStep: 5,\n\t\ttimeIcon:\"wxi-clock\",\n\t\ticons: false,\n\t\ttimepickerHeight: 30,\n\t\theaderHeight: 30,\n\t\tdayTemplate: function(d){\n\t\t\treturn d.getDate();\n\t\t},\n\t\twidth: 260,\n\t\theight: 250\n\t},\n\n\tdayTemplate_setter: template,\n\tcalendarHeader_setter:DateHelper.dateToStr,\n\tcalendarTime_setter:function(format){\n\t\tthis._calendarTime = format;\n\t\treturn DateHelper.dateToStr(format);\n\t},\n\tdate_setter:function(date){\n\t\treturn this._string_to_date(date);\n\t},\n\tmaxDate_setter:function(date){\n\t\treturn this._string_to_date(date);\n\t},\n\tminDate_setter:function(date){\n\t\treturn this._string_to_date(date);\n\t},\n\tminTime_setter:function(time){\n\t\tif(typeof(time) == \"string\"){\n\t\t\ttime = i18n.parseTimeFormatDate(time);\n\t\t\ttime = [time.getHours(),time.getMinutes()];\n\n\t\t}\n\n\t\treturn time;\n\t},\n\tmaxTime_setter:function(time){\n\t\tif(typeof(time) == \"string\"){\n\t\t\ttime = i18n.parseTimeFormatDate(time);\n\t\t\ttime = [time.getHours(),time.getMinutes()];\n\t\t}\n\t\treturn time;\n\t},\n\t_ariaFocus:function(){\n\t\tvar ev = \"focus\"+(env.isIE?\"in\":\"\");\n\t\t\n\t\tif(!env.touch){\n\t\t\t_event(this.$view, ev, bind(function(e){\n\t\t\t\tvar t = e.target.className;\n\t\t\t\tvar css = t.indexOf(\"webix_cal_day\")!==-1 ? \"webix_cal_day\" : (t.indexOf(\"webix_cal_block\")!==-1?\"webix_cal_block\":\"\");\n\n\t\t\t\tif(new Date() - UIManager._tab_time > 300 && new Date() - UIManager._mouse_time >100 && css){\n\t\t\t\t\tvar prev = e.relatedTarget;\n\t\t\t\t\tif(prev && !isUndefined(prev.className)){\n\t\t\t\t\t\tvar date = (css==\"webix_cal_day\")?\n\t\t\t\t\t\t\tthis._locate_day(e.target):\n\t\t\t\t\t\t\tthis._locate_date(e.target);\n\t\t\t\t\t\tthis._moveSelection(date);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, this), {capture:!env.isIE});\n\t\t}\n\t},\n\t$init: function() {\n\t\tthis._viewobj.className += \" webix_calendar\";\n\t\tthis._viewobj.setAttribute(\"role\", \"region\");\n\t\tthis._viewobj.setAttribute(\"aria-label\", i18n.aria.calendar);\n\n\t\t//special dates\n\t\tthis._special_dates = {};\n\t\tthis._selected_days = {};\n\t\tthis._zoom_level = 0;\n\n\t\t//navigation and aria\n\t\tthis._ariaFocus();\n\t\tthis.attachEvent(\"onKeyPress\", this._onKeyPress);\n\t},\n\tminuteStep_setter(value){\n\t\treturn Math.max( Math.min(value, 60), this.defaults.minuteStep );\n\t},\n\ttype_setter: function(value){\n\t\tif(value == \"time\"){\n\t\t\tthis._zoom_in = true;\n\t\t\tthis._zoom_level = -1;\n\t\t}\n\t\telse if(value == \"year\"){\n\t\t\tthis._fixed = true;\n\t\t}\n\t\treturn value;\n\t},\n\t$setSize:function(x,y){\n\n\t\tif(base.api.$setSize.call(this,x,y)){\n\t\t\t//repaint calendar when size changed\n\t\t\tthis.render();\n\t\t}\n\t},\n\t$getSize:function(dx, dy){\n\t\tconst s = this._settings;\n\t\tif (s.cellHeight && !s.type){\n\t\t\tconst state = this._getDateBoundaries(s.date);\n\t\t\ts.height = s.cellHeight * state._rows + s.headerHeight + (s.weekHeader?$active.calendarWeekHeaderHeight:0) +\n\t\t\t\t(s.timepicker||this._icons?s.timepickerHeight:0) + (this._content_padding+$active.borderWidth)*2;\n\t\t}\n\t\treturn base.api.$getSize.call(this, dx,dy);\n\t},\n\tmoveSelection:function(mode, details, focus){\n\t\tif(this.config.master) return; //in daterange\n\t\tvar start = this.getSelectedDate();\n\t\tif (this.config.multiselect)\n\t\t\tstart = start[0];\n\t\tvar date = DateHelper.copy(start || this.getVisibleDate());\n\t\tthis._moveSelection(date, mode, focus);\n\t\t\n\t},\n\t_moveSelection:function(date, mode, focus){\n\t\tvar css = this._zoom_logic[this._zoom_level]._keyshift(date, mode, this);\n\t\t\n\t\tif(focus !==false){\n\t\t\tvar sel = this._viewobj.querySelector(\".\"+css+\"[tabindex='0']\");\n\t\t\tif(sel) sel.focus();\n\t\t}\n\t},\n\t_getDateBoundaries: function(date, reset) {\n\t\t// addition information about rendering event:\n\t\t// how many days from the previous month,\n\t\t// next,\n\t\t// number of weeks to display and so on\n\t\t\n\t\tif (!this._set_date_bounds || reset){\n\t\t\tvar month = date.getMonth();\n\t\t\tvar year = date.getFullYear();\n\n\t\t\tvar next = new Date(year, month+1, 1);\n\t\t\tvar start = DateHelper.weekStart(new Date(year, month, 1));\n\n\t\t\tvar days = Math.round((next.valueOf() - start.valueOf())/(60*1000*60*24));\n\t\t\tvar rows = this._settings.skipEmptyWeeks?Math.ceil(days/7):6;\n\n\t\t\tthis._set_date_bounds = { _month: month, _start:start, _next:next, _rows: rows};\n\t\t}\n\n\t\treturn this._set_date_bounds;\n\t},\n\t$skin:function(){\n\t\tif($active.calendar){\n\t\t\tif( $active.calendar.width)\n\t\t\t\tthis.defaults.width = $active.calendar.width;\n\t\t\tif( $active.calendar.height)\n\t\t\t\tthis.defaults.height = $active.calendar.height;\n\t\t\tif( $active.calendar.headerHeight)\n\t\t\t\tthis.defaults.headerHeight = $active.calendar.headerHeight;\n\t\t\tif( $active.calendar.timepickerHeight)\n\t\t\t\tthis.defaults.timepickerHeight = $active.calendar.timepickerHeight;\n\t\t}\n\t\tthis._content_padding = $active.layoutPadding.form;\n\t},\n\t_getColumnConfigSizes: function(date){ \n\t\tvar bounds = this._getDateBoundaries(date);\n\n\t\tvar s = this._settings;\n\t\tvar _columnsHeight = [];\n\t\tvar _columnsWidth = [];\n\t\tvar min = Infinity;\n\n\t\tvar containerWidth = this._content_width - (this._content_padding+$active.borderWidth)*2;\n\n\t\tvar containerHeight = this._content_height - (s.monthHeader?s.headerHeight:0) - (s.weekHeader?$active.calendarWeekHeaderHeight:0) -\n\t\t\t(s.timepicker||this._icons?s.timepickerHeight:0) - (this._content_padding+$active.borderWidth)*2;\n\n\t\tvar columnsNumber = (s.weekNumber)?8:7;\n\t\tfor(var i=0; i<columnsNumber; i++) {\n\t\t\t_columnsWidth[i] = Math.ceil(containerWidth/(columnsNumber-i));\n\t\t\tcontainerWidth -= _columnsWidth[i];\n\t\t\tmin = Math.min(min, _columnsWidth[i]);\n\t\t}\n\n\t\tvar rowsNumber = bounds._rows;\n\t\tfor (var k = 0; k < rowsNumber; k++) {\n\t\t\t_columnsHeight[k] = Math.ceil(containerHeight/(rowsNumber-k) );\n\t\t\tcontainerHeight -= _columnsHeight[k];\n\t\t\tmin = Math.min(min, _columnsHeight[k]);\n\t\t}\n\t\treturn [_columnsWidth, _columnsHeight, min];\n\t},\n\ticons_setter: function(value){\n\t\tif(!value)\n\t\t\tthis._icons = null;\n\t\telse if(typeof value == \"object\")\n\t\t\tthis._icons = value;\n\t\telse\n\t\t\tthis._icons = this._icons2;\n\t},\n\t_icons: [],\n\t_icons2: [\n\n\t\t{\n\t\t\ttemplate: function(){\n\t\t\t\treturn \"<span role='button' tabindex='0' class='webix_cal_icon_today webix_cal_icon'>\"+i18n.calendar.today+\"</span>\";\n\t\t\t},\n\t\t\ton_click:{\n\t\t\t\t\"webix_cal_icon_today\": function(){\n\t\t\t\t\tvar date = new Date();\n\t\t\t\t\tif(!this._settings.timepicker)\n\t\t\t\t\t\tdate = DateHelper.datePart(date);\n\t\t\t\t\tthis.setValue(date);\n\t\t\t\t\tthis.callEvent(\"onTodaySet\",[this.getSelectedDate()]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\ttemplate: function(){\n\t\t\t\treturn \"<span role='button' tabindex='0' class='webix_cal_icon_clear webix_cal_icon'>\"+i18n.calendar.clear+\"</span>\";\n\t\t\t},\n\t\t\ton_click:{\n\t\t\t\t\"webix_cal_icon_clear\": function(){\n\t\t\t\t\tthis.setValue(\"\");\n\t\t\t\t\tthis.callEvent(\"onDateClear\",[this.getSelectedDate()]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t],\n\trefresh:function(){ this.render(); },\n\trender: function() {\n\t\t//reset zoom level\n\t\tthis._zoom_level = 0;\n\t\tthis._zoom_size = false;\n\n\t\tvar s = this._settings;\n\n\t\tif (!this.isVisible(s.id)) return;\n\t\tthis._current_time = DateHelper.datePart(new Date());\n\n\t\tthis.callEvent(\"onBeforeRender\",[]);\n\n\t\tvar date = this._settings.date;\n\n\t\tvar bounds = this._getDateBoundaries(date, true);\n\t\tvar sizes = this._getColumnConfigSizes(date);\n\t\tvar cpad = this._content_padding + \"px\";\n\t\tvar width = sizes[0];\n\t\tvar height = sizes[1];\n\n\t\tvar html = \"\";\n\t\tif (s.monthHeader){\n\t\t\thtml += \"<div class='webix_cal_month' style='margin:0 \"+cpad+\"'><span aria-live='assertive' aria-atomic='true' class='webix_cal_month_name\"+((!s.monthSelect || !s.navigation)?\" webix_readonly'\":\"' role='button' tabindex='0'\")+\">\"+s.calendarHeader(date)+\"</span>\";\n\t\t\tif (s.navigation)\n\t\t\t\thtml += \"<div role='button' tabindex='0' aria-label='\"+i18n.aria.navMonth[0]+\"' class='webix_cal_prev_button'></div><div role='button' tabindex='0' aria-label='\"+i18n.aria.navMonth[1]+\"' class='webix_cal_next_button'></div>\";\n\t\t\thtml += \"</div>\";\n\t\t}\n\n\t\tif(s.weekHeader)\n\t\t\thtml += \"<div class='webix_cal_header' style='margin:0 \"+cpad+\"' aria-hidden='true'>\"+this._week_template(width)+\"</div>\";\n\t\thtml += \"<div class='webix_cal_body' style='margin:0 \"+cpad+\"'>\"+this._body_template(width, height, bounds, sizes[2])+\"</div>\";\n\n\t\tif (this._settings.timepicker || this._icons){\n\t\t\thtml += \"<div class='webix_cal_footer' style='margin:0 \"+cpad+\"'>\";\n\t\t\tif(this._settings.timepicker)\n\t\t\t\thtml += this._timepicker_template(date);\n\n\t\t\tif(this._icons)\n\t\t\t\thtml += this._icons_template();\n\t\t\thtml += \"</div>\";\n\t\t}\n\n\t\tthis._contentobj.innerHTML = html;\n\t\tthis._contentobj.firstChild.style.marginTop = cpad;\n\n\t\tif(this._settings.type == \"time\"){\n\t\t\tvar time = this._settings.date;\n\t\t\tif(time){\n\t\t\t\tif(typeof(time) == \"string\"){\n\t\t\t\t\tdate = i18n.parseTimeFormatDate(time);\n\t\t\t\t}\n\t\t\t\telse if(isArray(time)){\n\t\t\t\t\tdate.setHours(time[0]);\n\t\t\t\t\tdate.setMinutes(time[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._changeZoomLevel(-1,date);\n\t\t}\n\t\telse if(this._settings.type == \"month\"){\n\t\t\tthis._changeZoomLevel(1,date);\n\t\t}\n\t\telse if(this._settings.type == \"year\"){\n\t\t\tthis._changeZoomLevel(2,date);\n\t\t}\n\n\t\tthis.callEvent(\"onAfterRender\",[]);\n\t},\n\t_icons_template: function(date){\n\t\tvar html =\t\"<div class='webix_cal_icons'>\";\n\t\tvar icons = this._icons;\n\n\t\tfor(var i=0; i < icons.length; i++){\n\t\t\tif(icons[i].template){\n\t\t\t\tvar template = (typeof(icons[i].template) == \"function\"?icons[i].template: template(icons[i].template));\n\t\t\t\thtml += template.call(this,date);\n\t\t\t}\n\t\t\tif(icons[i].on_click){\n\t\t\t\textend(this.on_click,icons[i].on_click);\n\t\t\t}\n\t\t}\n\t\thtml += \"</div>\";\n\t\treturn html;\n\t},\n\t_timepicker_template:function(date){\n\t\tvar timeFormat = this._settings.calendarTime||i18n.timeFormatStr;\n\t\tvar clock = this._settings.timeIcon;\n\t\tvar tpl = \"\";\n\n\t\tif(!this._settings.master)\n\t\t\ttpl = \"<div role='button' tabindex='0' class='webix_cal_time\"+(this._icons?\" webix_cal_time_icons\":\"\")+\"'><span class='webix_icon \"+clock+\"'></span> \"+timeFormat(date)+\"</div>\";\n\t\telse{\n\t\t\t//daterange needs two clocks\n\t\t\tvar range_date = copy($$(this._settings.master)._settings.value);\n\t\t\tif(DateHelper.equal(range_date.end, date))\n\t\t\t\trange_date.start = range_date.end;\n\t\t\t\t\n\t\t\tfor(var i in range_date){\n\t\t\t\ttpl += \"<div role='button' tabindex='0' class='webix_range_time_\"+i+\" webix_cal_time'><span class='webix_icon \"+clock+\"'></span> \"+timeFormat(range_date[i])+\"</div>\";\n\t\t\t}\n\t\t}\n\t\treturn tpl;\n\t},\n\t_week_template: function(widths){\n\t\tvar s = this._settings;\n\t\tvar week_template = \"\";\n\t\tvar correction = 0;\n\n\t\tif(s.weekNumber) {\n\t\t\tcorrection = 1;\n\t\t\tweek_template += \"<div class='webix_cal_week_header' style='width: \"+widths[0]+\"px;' >\"+(s.calendarWeekHeader||\"\")+\"</div>\";\n\t\t}\n\t\t\n\t\tvar k = (DateHelper.startOnMonday)?1:0;\n\t\tfor (var i=0; i<7; i++){ // 7 days total\n\t\t\tvar day_index = (k + i) % 7; // 0 - Sun, 6 - Sat as in Locale.date.day_short\n\t\t\tvar day = i18n.calendar.dayShort[day_index]; // 01, 02 .. 31\n\t\t\tweek_template += \"<div day='\"+day_index+\"' style='width: \"+widths[i+correction]+\"px;' >\"+day+\"</div>\";\n\t\t}\n\t\t\n\t\treturn week_template;\n\t},\n\tblockDates_setter:function(value){\n\t\treturn toFunctor(value, this.$scope);\n\t},\n\t_day_css:function(day, bounds){\n\t\tvar css = \"\", isOutside = false;\n\t\tif (DateHelper.equal(day, this._current_time))\n\t\t\tcss += \" webix_cal_today\";\n\t\tif (!this._checkDate(day))\n\t\t\tcss+= \" webix_cal_day_disabled\";\n\t\tif (day.getMonth() != bounds._month){\n\t\t\tisOutside = true;\n\t\t\tcss += \" webix_cal_outside\";\n\t\t}\n\t\tif (!isOutside && this._selectedDay(day))\n\t\t\tcss += \" webix_cal_select\";\n\t\tif (this._settings.events)\n\t\t\tcss+=\" \"+(this._settings.events(day, isOutside) || \"\");\n\t\tcss += \" webix_cal_day\";\n\t\treturn css;\n\t},\n\t_body_template: function(widths, heights, bounds, sqSize){\n\t\tvar s = this._settings;\n\t\tvar html = \"\";\n\t\tvar day = DateHelper.datePart(DateHelper.copy(bounds._start));\n\t\tvar start = s.weekNumber?1:0;\n\t\tvar weekNumber = DateHelper.getISOWeek(DateHelper.add(day,2,\"day\", true));\n\n\t\tfor (var y=0; y<heights.length; y++){\n\t\t\thtml += \"<div class='webix_cal_row' style='height:\"+heights[y]+\"px;line-height:\"+heights[y]+\"px'>\";\n\n\t\t\tif (start){\n\t\t\t\t// recalculate week number for the first week of a year\n\t\t\t\tif(!day.getMonth() && day.getDate()<7)\n\t\t\t\t\tweekNumber =  DateHelper.getISOWeek(DateHelper.add(day,2,\"day\", true));\n\t\t\t\thtml += \"<div class='webix_cal_week_num' aria-hidden='true' style='width:\"+widths[0]+\"px'>\"+weekNumber+\"</div>\";\n\t\t\t}\n\n\t\t\tfor (var x=start; x<widths.length; x++){\n\t\t\t\tvar css = this._day_css(day, bounds);\n\t\t\t\tvar d = this._settings.dayTemplate.call(this,day);\n\t\t\t\tvar sel = this._selectedDay(day);\n\t\t\t\tvar alabel = \"\";\n\t\t\t\tvar isOutside = day.getMonth() != bounds._month;\n\n\t\t\t\tif(typeof d == \"object\"){\n\t\t\t\t\talabel = d.aria || alabel;\n\t\t\t\t\td = d.text;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\talabel = DateHelper.dateToStr(i18n.aria.dateFormat)(day);\n\n\t\t\t\thtml += \"<div day='\"+x+\"' role='gridcell' \"+(isOutside?\"aria-hidden='true'\":\"\")+\" aria-label='\"+alabel+\n\t\t\t\t\t\"' tabindex='\"+(sel && !isOutside?\"0\":\"-1\")+\"' aria-selected='\"+(sel && !isOutside?\"true\":\"false\")+\"' class='\"+css+\"' style='text-align:center; width:\"+widths[x]+\n\t\t\t\t\t\"px'><span aria-hidden='true' class='webix_cal_day_inner' style='display:inline-block; \"+this._getCalSizesString(sqSize,sqSize)+\"'>\"+d+\"</span></div>\";\n\t\t\t\tday = DateHelper.add(day, 1, \"day\");\n\n\t\t\t\tif(day.getHours()){\n\t\t\t\t\tday = DateHelper.datePart(day);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\thtml += \"</div>\";\n\t\t\tweekNumber++;\n\t\t}\n\t\treturn html;\n\t},\n\t_changeDate:function(dir, step){\n\t\tvar now = this._settings.date;\n\t\tif(!step) { step = this._zoom_logic[this._zoom_level]._changeStep; }\n\t\tif(!this._zoom_level){\n\t\t\tnow = DateHelper.copy(now);\n\t\t\tnow.setDate(1);\n\t\t}\n\t\tvar next = DateHelper.add(now, dir*step, \"month\", true);\n\t\tthis._changeDateInternal(now, next);\n\t},\n\t_changeDateInternal:function(now, next){\n\t\tif(this.callEvent(\"onBeforeMonthChange\", [now, next])){\n\t\t\tif (this._zoom_level){\n\t\t\t\tthis._update_zoom_level(next);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tthis.showCalendar(next);\n\t\t\t}\n\t\t\tthis.callEvent(\"onAfterMonthChange\", [next, now]);\n\t\t}\n\t},\n\t_zoom_logic:{\n\t\t\"-2\":{\n\t\t\t_isBlocked: function(i){\n\t\t\t\tvar config = this._settings,\n\t\t\t\t\tdate = config.date,\n\t\t\t\t\tisBlocked = false;\n\n\t\t\t\tvar minHour = (config.minTime ? config.minTime[0] : 0);\n\t\t\t\tvar maxHour = (config.maxTime ? (config.maxTime[0] + ( config.maxTime[1] ? 1 : 0 )) : 24);\n\n\t\t\t\tvar minMinute = (config.minTime && (date.getHours()==minHour) ? config.minTime[1] : 0);\n\t\t\t\tvar maxMinute = (config.maxTime && config.maxTime[1] && (date.getHours()==(maxHour-1)) ? config.maxTime[1] : 60);\n\n\t\t\t\tif(this._settings.blockTime){\n\t\t\t\t\tvar d = DateHelper.copy(date);\n\t\t\t\t\td.setMinutes(i);\n\t\t\t\t\tisBlocked = this._settings.blockTime(d);\n\t\t\t\t}\n\t\t\t\treturn (i < minMinute || i >= maxMinute || isBlocked);\n\n\t\t\t},\n\t\t\t_setContent:function(next, i){ next.setMinutes(i); },\n\t\t\t_findActive:function(date, mode, calendar){\n\t\t\t\tif(!this._isBlocked.call(calendar, date.getMinutes()))\n\t\t\t\t\treturn date;\n\t\t\t\telse{\n\t\t\t\t\tvar step = calendar._settings.minuteStep;\n\t\t\t\t\tvar newdate = DateHelper.add(date, mode ==\"right\"?step:-step, \"minute\", true);\n\t\t\t\t\tif(date.getHours() === newdate.getHours())\n\t\t\t\t\t\treturn  this._findActive(newdate, mode, calendar);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"-1\":{\n\t\t\t_isBlocked: function(i){\n\t\t\t\tvar config = this._settings,\n\t\t\t\t\tdate = config.date;\n\n\t\t\t\tvar minHour = (config.minTime? config.minTime[0]:0);\n\t\t\t\tvar maxHour = (config.maxTime? config.maxTime[0]+(config.maxTime[1]?1:0):24);\n\n\t\t\t\tif (i < minHour || i >= maxHour) return true;\n\n\t\t\t\tif(config.blockTime){\n\t\t\t\t\tvar d = DateHelper.copy(date);\n\t\t\t\t\td.setHours(i);\n\t\t\t\t\t\n\t\t\t\t\tvar minMinute = (config.minTime && (i==minHour) ? config.minTime[1] : 0);\n\t\t\t\t\tvar maxMinute = (config.maxTime && config.maxTime[1] && (i==(maxHour-1)) ? config.maxTime[1] : 60);\n\n\t\t\t\t\tfor (var j=minMinute; j<maxMinute; j+= config.minuteStep){\n\t\t\t\t\t\td.setMinutes(j);\n\t\t\t\t\t\tif (!config.blockTime(d))\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t},\n\t\t\t_setContent:function(next, i){ next.setHours(i); },\n\t\t\t_keyshift:function(date, mode, calendar){\n\t\t\t\tvar newdate, inc, step = calendar._settings.minuteStep;\n\t\t\t\t\n\t\t\t\tif(mode === \"bottom\" || mode === \"top\"){\n\t\t\t\t\tdate.setHours(mode===\"bottom\"?23:0);\n\t\t\t\t\tdate.setMinutes(mode===\"bottom\"?55:0);\n\t\t\t\t\tdate.setSeconds(0);\n\t\t\t\t\tdate.setMilliseconds(0);\n\t\t\t\t\tnewdate = date;\n\t\t\t\t}\n\t\t\t\telse if(mode === \"left\" || mode === \"right\"){//minutes\n\n\t\t\t\t\tinc = (mode===\"right\"?step:-step);\n\t\t\t\t\tif(mode === \"left\" && date.getMinutes() < step ) inc = 60-step;\n\t\t\t\t\tif(mode === \"right\" && date.getMinutes() >= (60-step)) inc = step-60;\n\t\t\t\t\tinc -= date.getMinutes()%step;\n\t\t\t\t\tnewdate = calendar._zoom_logic[\"-2\"]._findActive(DateHelper.add(date, inc, \"minute\"), mode, calendar);\n\t\t\t\t}\n\t\t\t\telse if(mode === \"up\" || mode === \"down\"){ //hours\n\t\t\t\t\tinc = mode===\"down\"?1:-1;\n\t\t\t\t\tif(mode === \"down\" && date.getHours() === 23) inc = -23;\n\t\t\t\t\tif(mode === \"up\" && date.getHours() === 0) inc = 23;\n\t\t\t\t\tnewdate = this._findActive(DateHelper.add(date, inc, \"hour\"), mode, calendar);\n\t\t\t\t}\n\t\t\t\telse if(mode === false)\n\t\t\t\t\tnewdate = this._findActive(date, mode, calendar);\n\n\t\t\t\tcalendar.selectDate(newdate, false);\n\n\t\t\t\tif(newdate){\n\t\t\t\t\tcalendar._update_zoom_level(newdate);\n\t\t\t\t\tcalendar.selectDate(newdate, false);\n\t\t\t\t}\n\n\t\t\t\treturn \"webix_cal_block\"+(mode === \"left\" || mode === \"right\"?\"_min\":\"\");\n\t\t\t},\n\t\t\t_findActive:function(date, mode, calendar){\n\t\t\t\tif(!this._isBlocked.call(calendar, date.getHours()))\n\t\t\t\t\treturn date;\n\t\t\t\telse{\n\t\t\t\t\tvar newdate = DateHelper.add(date, mode ==\"down\"?1:-1, \"hour\", true);\n\t\t\t\t\tif(date.getDate() === newdate.getDate())\n\t\t\t\t\t\treturn  this._findActive(newdate, mode, calendar);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"0\":{//days\n\t\t\t_changeStep:1,\n\t\t\t_keyshift:function(date, mode, calendar){\n\t\t\t\tvar newdate = date;\n\t\t\t\tif(mode === \"pgup\" || mode === \"pgdown\")\n\t\t\t\t\tnewdate = DateHelper.add(date, (mode===\"pgdown\"?1:-1), \"month\");\n\t\t\t\telse if(mode === \"bottom\")\n\t\t\t\t\tnewdate = new Date(date.getFullYear(), date.getMonth()+1, 0);\n\t\t\t\telse if(mode === \"top\")\n\t\t\t\t\tnewdate = new Date(date.setDate(1));\n\t\t\t\telse if(mode === \"left\" || mode === \"right\")\n\t\t\t\t\tnewdate = DateHelper.add(date, (mode===\"right\"?1:-1), \"day\");\n\t\t\t\telse if(mode === \"up\" || mode === \"down\")\n\t\t\t\t\tnewdate = DateHelper.add(date, (mode===\"down\"?1:-1), \"week\");\n\t\t\t\t\n\t\t\t\tif(!calendar._checkDate(newdate))\n\t\t\t\t\tnewdate = calendar._findActive(date, mode);\n\t\t\t\t\n\t\t\t\tif(newdate)\n\t\t\t\t\tcalendar.selectDate(newdate, true);\n\t\t\t\treturn \"webix_cal_day\";\n\t\t\t},\n\t\t\t\n\t\t},\n\t\t\"1\":{\t//months\n\t\t\t_isBlocked: function(i,calendar){\n\t\t\t\tvar blocked = false,\n\t\t\t\t\tmin = calendar._settings.minDate,\n\t\t\t\t\tmax = calendar._settings.maxDate,\n\t\t\t\t\tyear = calendar._settings.date.getFullYear();\n\n\t\t\t\tif (min){\n\t\t\t\t\tvar minYear = min.getFullYear();\n\t\t\t\t\tblocked = year<minYear || (year==minYear&&min.getMonth()>i);\n\t\t\t\t}\n\n\t\t\t\tif (max && !blocked){\n\t\t\t\t\tvar maxYear = max.getFullYear();\n\t\t\t\t\tblocked = year>maxYear || (year==maxYear&&max.getMonth()<i);\n\t\t\t\t}\n\n\t\t\t\treturn blocked;\n\t\t\t},\n\t\t\t_correctDate: function(date,calendar){\n\t\t\t\tdate = DateHelper.monthStart(date);\n\n\t\t\t\tif (date < calendar._settings.minDate){\n\t\t\t\t\tdate = DateHelper.copy(calendar._settings.minDate);\n\t\t\t\t}\n\t\t\t\telse if (date > calendar._settings.maxDate){\n\t\t\t\t\tdate = DateHelper.copy(calendar._settings.maxDate);\n\t\t\t\t}\n\n\t\t\t\treturn date;\n\t\t\t},\n\t\t\t_getTitle:function(date){ return date.getFullYear(); },\n\t\t\t_getContent:function(i){ return i18n.calendar.monthShort[i]; },\n\t\t\t_setContent:function(next, i){ if(i!=next.getMonth()) next.setDate(1);next.setMonth(i); },\n\t\t\t_changeStep:12,\n\t\t\t_keyshift:function(date, mode, calendar){\n\t\t\t\tvar newdate = date;\n\t\t\t\tif(mode === \"pgup\" || mode === \"pgdown\")\n\t\t\t\t\tnewdate = DateHelper.add(date, (mode===\"pgdown\"?1:-1), \"year\");\n\t\t\t\telse if(mode === \"bottom\")\n\t\t\t\t\tnewdate = new Date(date.setMonth(11));\n\t\t\t\telse if(mode === \"top\")\n\t\t\t\t\tnewdate = new Date(date.setMonth(0));\n\t\t\t\telse if(mode === \"left\" || mode === \"right\")\n\t\t\t\t\tnewdate = DateHelper.add(date, (mode===\"right\"?1:-1), \"month\");\n\t\t\t\telse if(mode === \"up\" || mode === \"down\")\n\t\t\t\t\tnewdate = DateHelper.add(date, (mode===\"down\"?4:-4), \"month\");\n\n\t\t\t\tnewdate = calendar._correctDate(newdate);\n\n\t\t\t\tif(!calendar._checkDate(newdate)){\n\t\t\t\t\tnewdate = calendar._findActive(date, mode);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif(newdate){\n\t\t\t\t\tcalendar._update_zoom_level(newdate);\n\t\t\t\t\tcalendar.selectDate(newdate, false);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\treturn \"webix_cal_block\";\n\t\t\t}\n\t\t},\n\t\t\"2\":{\t//years\n\t\t\t_isBlocked: function(i,calendar){\n\t\t\t\ti += calendar._zoom_start_date;\n\t\t\t\tvar min = calendar._settings.minDate;\n\t\t\t\tvar max = calendar._settings.maxDate;\n\n\t\t\t\tif ((min && min.getFullYear() > i) || (max && max.getFullYear()<i))\n\t\t\t\t\treturn true;\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\t_correctDate: function(date,calendar){\n\t\t\t\tdate = DateHelper.yearStart(date);\n\t\t\t\tif (date < calendar._settings.minDate){\n\t\t\t\t\tdate = DateHelper.copy(calendar._settings.minDate);\n\t\t\t\t}\n\t\t\t\telse if (date > calendar._settings.maxDate){\n\t\t\t\t\tdate = DateHelper.copy(calendar._settings.maxDate);\n\t\t\t\t}\n\t\t\t\treturn date;\n\t\t\t},\n\t\t\t_getTitle:function(date, calendar){\n\t\t\t\tvar start = date.getFullYear();\n\t\t\t\tcalendar._zoom_start_date = start = start - start%10 - 1;\n\t\t\t\treturn start+\" - \"+(start+10 + 1);\n\t\t\t},\n\t\t\t_getContent:function(i, calendar){ return calendar._zoom_start_date+i; },\n\t\t\t_setContent:function(next, i, calendar){ next.setFullYear(calendar._zoom_start_date+i); },\n\t\t\t_changeStep:12*10,\n\t\t\t_keyshift:function(date, mode, calendar){\n\t\t\t\tvar newdate = date;\n\t\t\t\tif(mode === \"pgup\" || mode === \"pgdown\")\n\t\t\t\t\tnewdate = DateHelper.add(date, (mode===\"pgdown\"?10:-10), \"year\");\n\t\t\t\telse if(mode === \"bottom\")\n\t\t\t\t\tnewdate = new Date(date.setYear(calendar._zoom_start_date+10));\n\t\t\t\telse if(mode === \"top\")\n\t\t\t\t\tnewdate = new Date(date.setYear(calendar._zoom_start_date));\n\t\t\t\telse if(mode === \"left\" || mode === \"right\")\n\t\t\t\t\tnewdate = DateHelper.add(date, (mode===\"right\"?1:-1), \"year\");\n\t\t\t\telse if(mode === \"up\" || mode === \"down\")\n\t\t\t\t\tnewdate = DateHelper.add(date, (mode===\"down\"?4:-4), \"year\");\n\n\t\t\t\tnewdate = calendar._correctDate(newdate);\n\n\t\t\t\tif(!calendar._checkDate(newdate))\n\t\t\t\t\tnewdate = calendar._findActive(date, mode);\n\t\t\t\t\n\t\t\t\tif(newdate){\n\t\t\t\t\tcalendar._update_zoom_level(newdate);\n\t\t\t\t\tcalendar.selectDate(newdate, false);\n\t\t\t\t}\n\n\t\t\t\treturn \"webix_cal_block\";\n\t\t\t}\n\t\t}\n\t},\n\t_correctBlockedTime: function(){\n\t\tvar i, isDisabledHour, isDisabledMinutes;\n\t\tisDisabledHour = this._zoom_logic[-1]._isBlocked.call(this,this._settings.date.getHours());\n\t\tif(isDisabledHour){\n\t\t\tfor (i= 0; i< 24; i++){\n\t\t\t\tif(!this._zoom_logic[-1]._isBlocked.call(this,i)){\n\t\t\t\t\tthis._settings.date.setHours(i);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tisDisabledMinutes = this._zoom_logic[-2]._isBlocked.call(this,this._settings.date.getMinutes());\n\t\tif(isDisabledMinutes){\n\t\t\tfor (i=0; i<60; i+=this._settings.minuteStep){\n\t\t\t\tif(!this._zoom_logic[-2]._isBlocked.call(this,i)){\n\t\t\t\t\tthis._settings.date.setMinutes(i);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t_update_zoom_level:function(date){\n\t\tvar config, css, height, i, index,  sections, selected, type, width, zlogic, temp, sqSize;\n\t\tvar html = \"\";\n\t\tvar cpad = this._content_padding + \"px\";\n\n\t\tconfig = this._settings;\n\t\tindex = 2 - (config.weekHeader?0:1) - (config.monthHeader?0:1);\n\t\tzlogic = this._zoom_logic[this._zoom_level];\n\t\tsections  = this._contentobj.childNodes;\n\n\t\tif (date){\n\t\t\tconfig.date = date;\n\t\t}\n\n\t\ttype = config.type;\n\n\n\n\t\t//store width and height of draw area\n\t\tif (!this._zoom_size){\n\n\t\t\tthis._reserve_box_height = this._contentobj.offsetHeight - (config.monthHeader||this._zoom_in?config.headerHeight:0) -\n\t\t\t\t(this._content_padding+$active.borderWidth)*2;\n\t\t\tif(type != \"year\" && type != \"month\")\n\t\t\t\tthis._reserve_box_height -= config.timepickerHeight;\n\n\t\t\tthis._reserve_box_width = sections[index].offsetWidth;\n\t\t\tthis._zoom_size = 1;\n\t\t}\n\n\t\t//main section\n\t\tif (this._zoom_in){\n\t\t\t//hours and minutes\n\t\t\theight = this._reserve_box_height/6;\n\t\t\tvar timeColNum = 6;\n\t\t\tvar timeFormat = this._calendarTime||i18n.timeFormat;\n\t\t\tvar enLocale = timeFormat.match(/%([a,A])/);\n\t\t\tif(enLocale)\n\t\t\t\ttimeColNum++;\n\t\t\twidth = parseInt((this._reserve_box_width-3)/timeColNum,10);\n\t\t\tsqSize = Math.min(width,height);\n\n\t\t\thtml += \"<div class='webix_time_header' style='margin:0 \"+cpad+\"'>\"+this._timeHeaderTemplate(width,enLocale)+\"</div>\";\n\t\t\thtml += \"<div  class='webix_cal_body' style='height:\"+this._reserve_box_height+\"px; margin:0 \"+cpad+\";'>\";\n\n\t\t\t// check and change blocked selected time\n\t\t\tthis._correctBlockedTime();\n\n\t\t\thtml += \"<div class='webix_hours'>\";\n\t\t\tselected = config.date.getHours();\n\t\t\ttemp = DateHelper.copy(config.date);\n\n\t\t\tfor (i= 0; i< 24; i++){\n\t\t\t\tcss=\"\";\n\t\t\t\tif(enLocale){\n\t\t\t\t\tif(i%4===0){\n\t\t\t\t\t\tvar label = (!i ? i18n.am[0] : (i==12?i18n.pm[0]:\"\"));\n\t\t\t\t\t\thtml += \"<div class='webix_cal_block_empty\"+css+\"' style='\"+this._getCalSizesString(width,height)+\"clear:both;\"+\"'>\"+label+\"</div>\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(this._zoom_logic[-1]._isBlocked.call(this,i)){\n\t\t\t\t\tcss += \" webix_cal_day_disabled\";\n\t\t\t\t}\n\t\t\t\telse if(selected ==  i)\n\t\t\t\t\tcss += \" webix_selected\";\n\n\t\t\t\t\n\t\t\t\ttemp.setHours(i);\n\n\t\t\t\thtml += \"<div aria-label='\"+DateHelper.dateToStr(i18n.aria.hourFormat)(temp)+\"' role='gridcell'\"+\n\t\t\t\t\t\" tabindex='\"+(selected==i?\"0\":\"-1\")+\"' aria-selected='\"+(selected==i?\"true\":\"false\")+\n\t\t\t\t\t\"' class='webix_cal_block\"+css+\"' data-value='\"+i+\"' style='\"+this._getCalSizesString(width,height)+(i%4===0&&!enLocale?\"clear:both;\":\"\")+\n\t\t\t\t\t\"'><span style='display:inline-block; \"+this._getCalSizesString(sqSize,sqSize)+\"'>\"+DateHelper.toFixed(enLocale?(!i||i==12?12:i%12):i)+\"</span></div>\";\n\t\t\t}\n\t\t\thtml += \"</div>\";\n\n\t\t\thtml += \"<div class='webix_minutes'>\";\n\t\t\tselected = config.date.getMinutes();\n\t\t\ttemp = DateHelper.copy(config.date);\n\n\n\t\t\tfor (i=0; i<60; i+=config.minuteStep){\n\t\t\t\tcss = \"\";\n\t\t\t\tif(this._zoom_logic[-2]._isBlocked.call(this,i)){\n\t\t\t\t\tcss = \" webix_cal_day_disabled\";\n\t\t\t\t}\n\t\t\t\telse if(selected ==  i)\n\t\t\t\t\tcss = \" webix_selected\";\n\n\t\t\t\ttemp.setMinutes(i);\n\n\t\t\t\thtml += \"<div aria-label='\"+DateHelper.dateToStr(i18n.aria.minuteFormat)(temp)+\"' role='gridcell' tabindex='\"+(selected==i?\"0\":\"-1\")+\n\t\t\t\t\t\"' aria-selected='\"+(selected==i?\"true\":\"false\")+\"' class='webix_cal_block webix_cal_block_min\"+css+\"' data-value='\"+i+\"' style='\"+\n\t\t\t\t\tthis._getCalSizesString(width,height)+((i/config.minuteStep)%2===0?\"clear:both;\":\"\")+\"'><span style='display:inline-block; \"+\n\t\t\t\t\tthis._getCalSizesString(sqSize,sqSize)+\"'>\"+DateHelper.toFixed(i)+\"</span></div>\";\n\t\t\t}\n\t\t\thtml += \"</div>\";\n\n\t\t\thtml += \"</div>\";\n\t\t\thtml += \"<div class='webix_time_footer' style='margin:0 \"+cpad+\"'>\"+this._timeButtonsTemplate()+\"</div>\";\n\t\t\tthis._contentobj.innerHTML = html;\n\t\t\tthis._contentobj.firstChild.style.marginTop = cpad;\n\t\t} else {\n\t\t\t//years and months\n\t\t\t\n\t\t\t//reset header\n\t\t\tif (config.monthHeader){\n\t\t\t\tvar header = sections[0].childNodes;\n\t\t\t\tvar labels = i18n.aria[\"nav\"+(this._zoom_level==1?\"Year\":\"Decade\")];\n\t\t\t\theader[0].innerHTML = zlogic._getTitle(config.date, this);\n\t\t\t\theader[0].blur();\n\t\t\t\tif (config.navigation){\n\t\t\t\t\theader[1].setAttribute(\"aria-label\", labels[0]);\n\t\t\t\t\theader[2].setAttribute(\"aria-label\", labels[1]);\n\t\t\t\t}\n\t\t\t} else\t//needed for \"year\" to set start value\n\t\t\t\tzlogic._getTitle(config.date, this);\n\n\t\t\theight = Math.floor(this._reserve_box_height/3);\n\t\t\twidth = Math.floor(this._reserve_box_width/4);\n\t\t\tsqSize = Math.min(height, width);\n\n\t\t\tif (this._checkDate(config.date))\n\t\t\t\tselected = (this._zoom_level==1?config.date.getMonth():config.date.getFullYear());\n\t\t\tfor (i=0; i<12; i++){\n\t\t\t\tcss = (selected == (this._zoom_level==1?i:zlogic._getContent(i, this)) ? \" webix_selected\" : \"\");\n\t\t\t\tif(zlogic._isBlocked(i,this)){\n\t\t\t\t\tcss += \" webix_cal_day_disabled\";\n\t\t\t\t}\n\n\t\t\t\tvar format = i18n.aria[(this._zoom_level==1?\"month\":\"year\")+\"Format\"];\n\t\t\t\thtml+=\"<div role='gridcell' aria-label='\"+DateHelper.dateToStr(format)(config.date)+\n\t\t\t\t\t\"' tabindex='\"+(css.indexOf(\"selected\")!==-1?\"0\":\"-1\")+\n\t\t\t\t\t\"' aria-selected='\"+(css.indexOf(\"selected\")!==-1?\"true\":\"false\")+\n\t\t\t\t\t\"' class='webix_cal_block\"+css+\"' data-value='\"+i+\"' style='\"+this._getCalSizesString(width,height)+\n                    \"'><span style='display:inline-block; \"+this._getCalSizesString(sqSize,sqSize)+\"'>\"+zlogic._getContent(i, this)+\"</span></div>\";\n\t\t\t}\n\t\t\tif (config.weekHeader){\n\t\t\t\tsections[index-1].style.display = \"none\";\n\t\t\t\tif (index === 1) sections[index].style.marginTop = cpad;\n\t\t\t}\n\t\t\tsections[index].innerHTML = html;\n\t\t\tif (type != \"year\" && type != \"month\"){\n\t\t\t\tif(!sections[index+1])\n\t\t\t\t\tthis._contentobj.innerHTML += \"<div class='webix_time_footer' style='margin:0 \"+cpad+\"'>\"+this._timeButtonsTemplate()+\"</div>\";\n\t\t\t\telse\n\t\t\t\t\tsections[index+1].innerHTML = this._timeButtonsTemplate();\n\t\t\t} else if (sections[index+1]){\n\t\t\t\tsections[index+1].style.display = \"none\";\n\t\t\t}\n\t\t\tsections[index].style.height = this._reserve_box_height+\"px\";\n\t\t}\n\t},\n\t_getCalSizesString: function(width,height){\n\t\treturn \"width:\"+width+\"px; height:\"+height+\"px; line-height:\"+height+\"px;\";\n\t},\n\t_timeButtonsTemplate: function(){\n\t\treturn \"<input type='button' style='width:100%' class='webix_cal_done' value='\"+i18n.calendar.done+\"'>\";\n\t},\n\t_timeHeaderTemplate: function(width,enLocale){\n\t\tvar w1 = width*(enLocale?5:4);\n\t\tvar w2 = width*2;\n\t\treturn \"<div class='webix_cal_hours' style='width:\"+w1+\"px'>\"+i18n.calendar.hours+\"</div><div class='webix_cal_minutes' style='width:\"+w2+\"px'>\"+i18n.calendar.minutes+\"</div>\";\n\t},\n\t_changeZoomLevel: function(zoom,date){\n\t\tvar oldzoom = this._zoom_level;\n\t\tif(this.callEvent(\"onBeforeZoom\",[zoom, oldzoom])){\n\t\t\tthis._zoom_level = zoom;\n\n\t\t\tif(zoom)\n\t\t\t\tthis._update_zoom_level(date);\n\t\t\telse\n\t\t\t\tthis.showCalendar(date);\n\t\t\tthis.callEvent(\"onAfterZoom\",[zoom, oldzoom]);\n\t\t}\n\t},\n\t_correctDate:function(date){\n\t\tif(!this._checkDate(date) && this._zoom_logic[this._zoom_level]._correctDate)\n\t\t\tdate = this._zoom_logic[this._zoom_level]._correctDate(date,this);\n\t\treturn date;\n\t},\n\t_mode_selected:function(target){\n\n\t\tvar next = this._locate_date(target);\n\t\tvar zoom = this._zoom_level-(this._fixed?0:1);\n\n\t\tnext = this._correctDate(next);\n\t\tif(this._checkDate(next)){\n\t\t\tthis._changeZoomLevel(zoom, next);\n\t\t\tvar type = this._settings.type;\n\t\t\tif(type == \"month\" || type == \"year\")\n\t\t\t\tthis._selectDate(next);\n\t\t}\n\t},\n\t// selects date and redraw calendar\n\t_selectDate: function(date, add){\n\t\tif(this.callEvent(\"onBeforeDateSelect\", [date])){\n\t\t\tthis.selectDate(date, true, add);\n\t\t\tthis.callEvent(\"onDateSelect\", [date]);       // should be deleted in a future version\n\t\t\tthis.callEvent(\"onAfterDateSelect\", [date]);\n\t\t}\n\t},\n\t_locate_day:function(target){\n\t\tvar cind = index(target) - (this._settings.weekNumber?1:0);\n\t\tvar rind = index(target.parentNode);\n\t\tvar date = DateHelper.add(this._getDateBoundaries()._start, cind + rind*7, \"day\", true);\n\t\tif (this._settings.timepicker){\n\t\t\tdate.setHours(this._settings.date.getHours());\n\t\t\tdate.setMinutes(this._settings.date.getMinutes());\n\t\t}\n\t\treturn date;\n\t},\n\t_locate_date:function(target){\n\t\tvar value = target.getAttribute(\"data-value\")*1;\n\t\tvar level = (target.className.indexOf(\"webix_cal_block_min\")!=-1?this._zoom_level-1:this._zoom_level);\n\t\tvar now = this._settings.date;\n\t\tvar next = DateHelper.copy(now);\n\n\t\tthis._zoom_logic[level]._setContent(next, value, this);\n\n\t\treturn next;\n\t},\n\ton_click:{\n\t\twebix_cal_prev_button: function(){\n\t\t\tthis._changeDate(-1);\n\t\t},\n\t\twebix_cal_next_button: function(){\n\t\t\tthis._changeDate(1);\n\t\t},\n\t\twebix_cal_day_disabled: function(){\n\t\t\treturn false;\n\t\t},\n\t\twebix_cal_outside: function(){\n\t\t\tif(!this._settings.navigation)\n\t\t\t\treturn false;\n\t\t},\n\t\twebix_cal_day: function(e, id, target){\n\t\t\tvar date = this._locate_day(target);\n\t\t\tvar add = this._settings.multiselect === \"touch\"  || (e.ctrlKey || e.metaKey);\n\t\t\tthis._selectDate(date, add);\n\t\t},\n\t\twebix_cal_time:function(){\n\t\t\tif(this._zoom_logic[this._zoom_level-1]){\n\t\t\t\tthis._zoom_in = true;\n\t\t\t\tvar zoom = this._zoom_level - 1;\n\t\t\t\tthis._changeZoomLevel(zoom);\n\t\t\t}\n\t\t},\n\t\twebix_range_time_start:function(){\n\t\t\t$$(this._settings.master)._time_mode = \"start\";\n\t\t},\n\t\twebix_range_time_end:function(){\n\t\t\t$$(this._settings.master)._time_mode = \"end\";\n\t\t},\n\t\twebix_cal_done:function(){\n\t\t\tvar date = DateHelper.copy(this._settings.date);\n\t\t\tdate = this._correctDate(date);\n\t\t\tthis._selectDate(date);\n\t\t},\n\t\twebix_cal_month_name:function(){\n\t\t\tif (!this._settings.navigation) return;\n\n\t\t\tthis._zoom_in = false;\n\t\t\t//maximum zoom reached\n\t\t\tif (this._zoom_level == 2 || !this._settings.monthSelect) return;\n\n\t\t\tvar zoom = Math.max(this._zoom_level, 0) + 1;\n\t\t\tthis._changeZoomLevel(zoom);\n\t\t},\n\t\twebix_cal_block:function(e, id, trg){\n\t\t\tif(this._zoom_in){\n\t\t\t\tif(trg.className.indexOf(\"webix_cal_day_disabled\")!==-1)\n\t\t\t\t\treturn false;\n\t\t\t\tvar next = this._locate_date(trg);\n\t\t\t\tthis._update_zoom_level(next);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tif(trg.className.indexOf(\"webix_cal_day_disabled\")==-1)\n\t\t\t\t\tthis._mode_selected(trg);\n\t\t\t}\n\t\t}\n\t},\n\t_string_to_date: function(date, format){\n\t\tif (!date){\n\t\t\treturn DateHelper.datePart(new Date());\n\t\t}\n\t\tif(typeof date == \"string\"){\n\t\t\tif (format)\n\t\t\t\tdate = DateHelper.strToDate(format)(date);\n\t\t\telse\n\t\t\t\tdate=i18n.parseFormatDate(date);\n\t\t}\n\n\t\treturn date;\n\t},\n\t_checkDate: function(date){\n\t\tvar blockedDate = (this._settings.blockDates && this._settings.blockDates.call(this,date));\n\t\tvar minDate = this._settings.minDate;\n\t\tvar maxDate = this._settings.maxDate;\n\t\tvar outOfRange = (date < minDate || date > maxDate);\n\t\treturn !blockedDate &&!outOfRange;\n\t},\n\t_findActive:function(date, mode){\n\t\tvar dir = (mode === \"top\" || mode ===\"left\" || mode === \"pgup\" || mode === \"up\") ? -1 : 1;\n\t\tvar newdate = DateHelper.add(date, dir, \"day\", true);\n\t\tif(this._checkDate(newdate))\n\t\t\treturn newdate;\n\t\telse{\n\t\t\tvar compare;\n\t\t\tif(this._zoom_level === 0) compare = (date.getMonth() === newdate.getMonth());\n\t\t\telse if(this._zoom_level === 1 ) compare = (date.getFullYear() === newdate.getFullYear());\n\t\t\telse if(this._zoom_level === 2) compare = (newdate.getFullYear() > this._zoom_start_date && newdate.getFullYear() < this._zoom_start_date+10);\n\n\t\t\tif(compare)\n\t\t\t\treturn this._findActive(newdate, mode);\n\t\t}\n\t},\n\tshowCalendar: function(date) {\n\t\tdate = this._string_to_date(date);\n\t\tthis._settings.date = date;\n\t\tthis.render();\n\t\tthis.resize();\n\t},\n\t_selectedDay: function(day){\n\t\treturn day && this._selected_days[day.valueOf()];\n\t},\n\tgetSelectedDate: function() {\n\t\tvar result = [];\n\t\tfor (var key in this._selected_days)\n\t\t\tresult.push(DateHelper.copy(this._selected_days[key]));\n\t\t\n\t\treturn this.config.multiselect ? result : (result[0] || null);\n\t},\n\tgetVisibleDate: function() {\n\t\treturn DateHelper.copy(this._settings.date);\n\t},\n\tsetValue: function(date){\n\t\tthis.selectDate(date, true);\n\t},\n\tgetValue: function(format){\n\t\tvar date = this.getSelectedDate();\n\t\tif (format)\n\t\t\tdate = DateHelper.dateToStr(format)(date);\n\t\treturn date;\n\t},\n\tselectDate: function(date, show, add){\n\t\tif (!date || !add || !this.config.multiselect)\n\t\t\tthis._selected_days = {};\n\n\t\tif(date){\n\t\t\tif (!isArray(date))\n\t\t\t\tdate = [date];\n\t\t\tfor (var i=0; i<date.length; i++){\n\t\t\t\tvar days = this._string_to_date(date[i]);\n\t\t\t\tvar key = DateHelper.datePart(DateHelper.copy(days)).valueOf();\n\t\t\t\tif (this._selected_days[key] && add)\n\t\t\t\t\tdelete this._selected_days[key];\n\t\t\t\telse\n\t\t\t\t\tthis._selected_days[key] = days;\n\n\t\t\t\tif (!this.config.multiselect)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\tif (date.length && show)\n\t\t\t\tthis.showCalendar(date[0]);\n\t\t}\n\n\t\tif(show !== false)\n\t\t\tthis.render();\n\n\t\tthis.callEvent(\"onChange\",[date]);\n\t}, \n\tlocate:function(){ return null; }\n};\n\n\nconst view = protoUI(api, KeysNavigation, MouseEvents, base.view, EventSystem);\nexport default {api, view};","import {locate} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport {bind} from \"../webix/helpers\";\nimport {_event} from \"../webix/htmlevents\";\nimport template from \"../webix/template\";\n\nimport color from \"../webix/color\";\nimport KeysNavigation from \"../core/keysnavigation\";\nimport EventSystem from \"../core/eventsystem\";\nimport base from \"../views/view\";\n\nconst api = {\n\tname:\"colorboard\",\n\tdefaults:{\n\t\ttemplate:\"<div style=\\\"width:100%;height:100%;background-color:{obj.val}\\\"></div>\",\n\t\tpalette:null,\n\t\theight:220,\n\t\twidth:220,\n\t\tcols:12,\n\t\trows:10,\n\t\tminLightness:0.15,\n\t\tmaxLightness:1,\n\t\tnavigation:true\n\t},\n\t$init:function(){\n\t\t_event(this._viewobj, \"click\", bind(function(e){\n\t\t\tvar value = locate(e, /*@attr*/\"webix_val\");\n\t\t\t// locate can return null in case of drag\n\t\t\tif(value){\n\t\t\t\tthis.setValue(value);\n\t\t\t\tthis.callEvent(\"onItemClick\", [this._settings.value, e]);\n\t\t\t\tthis.callEvent(\"onSelect\", [this._settings.value]);\n\t\t\t}\n\t\t}, this));\n\n\t\tthis.$view.setAttribute(\"role\", \"grid\");\n\t\tthis._viewobj.setAttribute(\"aria-readonly\", \"true\");\n\t},\n\t_set_item_focus:function(){\n\t\tif(!this.getValue())\n\t\t\tthis.moveSelection(\"up\");\n\t},\n\t_findIndex:function(value){\n\t\tvar pal = this._settings.palette;\n\t\tvalue = (value || \"\").toUpperCase();\n\t\tfor(var r= 0, rows= pal.length; r < rows; r++)\n\t\t\tfor(var c= 0, cols = pal[r].length; c < cols; c++){\n\t\t\t\tif(pal[r][c].toUpperCase() == value){\n\t\t\t\t\treturn {row:r, col:c};\n\t\t\t\t}\n\t\t\t}\n\t\treturn null;\n\t},\n\t$setSize:function(x,y){\n\t\tif(base.api.$setSize.call(this,x,y)){\n\t\t\tthis.render();\n\t\t}\n\t},\n\tgetValue:function(){\n\t\treturn this._settings.value;\n\t},\n\t_getBox:function(){\n\t\treturn this._viewobj.firstChild;\n\t},\n\t$prepareValue:function(value){\n\t\tvalue = value ? value.toString(16) : \"\";\n\t\tif (value && value.charAt(0) != \"#\" && /^[0-9a-fA-F]+$/.test(value))\n\t\t\tvalue = \"#\" + value;\n\t\treturn value;\n\t},\n\tvalue_setter:function(value){\n\t\treturn this.$prepareValue(value);\n\t},\n\tsetValue:function(value){\n\t\tvalue = this.$prepareValue(value);\n\t\tconst oldvalue = this._settings.value;\n\n\t\tthis._settings.value = value;\n\t\tthis.$setValue(value, oldvalue);\n\n\t\treturn value;\n\t},\n\t_selectBox:null,\n\t_getSelectBox:function(){\n\t\tif( this._selectBox && this._selectBox.parentNode ){\n\t\t\treturn this._selectBox;\n\t\t}else{\n\t\t\tvar div = this._selectBox = document.createElement(\"div\");\n\t\t\tdiv.className = \"webix_color_selector\";\n\t\t\tthis._viewobj.lastChild.appendChild(div);\n\t\t\treturn div;\n\t\t}\n\t},\n\t$setValue:function(value, oldvalue){\n\t\tif(this.isVisible(this._settings.id)){\n\t\t\tvar cell, div, ind, parent, style,\n\t\t\t\tleft = 0, top = 0;\n\n\t\t\t//remove tabindex for previous selection\n\t\t\tif(oldvalue) ind = this._findIndex(oldvalue);\n\t\t\tif(!ind) ind = {row:0, col:0};\n\t\t\tthis._viewobj.lastChild.childNodes[ind.row].childNodes[ind.col].setAttribute(\"tabindex\", \"-1\");\n\n\t\t\tind = this._findIndex(value);\n\t\t\tif(ind){\n\t\t\t\tcell = this._viewobj.lastChild.childNodes[ind.row].childNodes[ind.col];\n\t\t\t}\n\n\t\t\tif(cell && cell.parentNode && cell.parentNode.parentNode){\n\t\t\t\tparent = cell.parentNode;\n\t\t\t\tleft = cell.offsetLeft - parent.offsetLeft ;\n\t\t\t\ttop = - (this.$height - (cell.offsetTop -parent.parentNode.offsetTop ));\n\n\t\t\t\tcell.setAttribute(\"tabindex\", \"0\");\n\t\t\t\tcell.setAttribute(\"aria-selected\", \"true\");\n\t\t\t\tcell.setAttribute(\"tabindex\", \"0\");\n\t\t\t\tcell.setAttribute(\"aria-selected\", \"true\");\n\t\t\t}else{\n\t\t\t\tif (this._selectBox)\n\t\t\t\t\tthis._selectBox.style.left = \"-100px\";\n\t\t\t\tthis._viewobj.lastChild.childNodes[0].childNodes[0].setAttribute(\"tabindex\", \"0\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdiv = this._getSelectBox();\n\t\t\tstyle =  [\n\t\t\t\t\"left:\" + left + \"px\",\n\t\t\t\t\"top:\" + top+\"px\",\n\t\t\t\t\"width:\" + cell.style.width,\n\t\t\t\t\"height:\" + cell.style.height\n\t\t\t].join(\";\");\n\n\t\t\tif( typeof( div.style.cssText ) !== \"undefined\" ) {\n\t\t\t\tdiv.style.cssText = style;\n\t\t\t} else {\n\t\t\t\tdiv.setAttribute(\"style\",style);\n\t\t\t}\n\t\t}\n\t},\n\n\n\t_initPalette:function(config){\n\t\tfunction numToHex(n){\n\t\t\treturn color.toHex(n, 2);\n\t\t}\n\t\tfunction rgbToHex(r,g,b){\n\t\t\treturn \"#\"+numToHex( Math.floor(r)) +numToHex( Math.floor(g)) + numToHex(Math.floor(b));\n\t\t}\n\t\tfunction hslToRgb(h, s, l){\n\t\t\tvar r, g, b;\n\t\t\tif(!s){\n\t\t\t\tr = g = b = l; // achromatic\n\t\t\t}else{\n\t\t\t\tvar q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n\t\t\t\tvar p = 2 * l - q;\n\t\t\t\tr = hue2rgb(p, q, h + 1/3);\n\t\t\t\tg = hue2rgb(p, q, h);\n\t\t\t\tb = hue2rgb(p, q, h - 1/3);\n\t\t\t}\n\n\t\t\treturn {r:r * 255, g:g * 255, b:b * 255};\n\t\t}\n\t\tfunction hue2rgb(p, q, t){\n\t\t\tif(t < 0) t += 1;\n\t\t\tif(t > 1) t -= 1;\n\t\t\tif (t < 1/6)\n\t\t\t\treturn p + (q - p) * 6 * t; \n\t\t\telse if (t <= 1/2)\n\t\t\t\treturn q;\n\t\t\telse if (t < 2/3) \n\t\t\t\treturn p + (q - p) * (2/3 - t) * 6;\n\t\t\telse\n\t\t\t\treturn p;\n\t\t}\n\n\t\tfunction renderGrayBar(colCount){\n\t\t\tvar gray = [],\n\t\t\t\tval = 255,\n\t\t\t\tstep = val / colCount;\n\n\t\t\tfor(var i=0; i < colCount; i++){\n\t\t\t\tval = Math.round(val > 0 ? val : 0);\n\t\t\t\tgray.push(rgbToHex(val, val, val));\n\t\t\t\tval -= step;\n\t\t\t}\n\t\t\tgray[gray.length - 1] = \"#000000\";\n\t\t\treturn gray;\n\t\t}\n\n\t\tvar colors = [];\n\t\tvar colorRows = config.rows - 1;\n\t\tvar colorStep = 1/config.cols;\n\t\tvar lightStep = (config.maxLightness - config.minLightness)/colorRows;\n\t\tvar colorRange = null;\n\n\t\tcolors.push(renderGrayBar(config.cols));\n\n\t\tfor(var step = 0, lt = config.minLightness; step < colorRows; step++){\n\t\t\tcolorRange = [];\n\t\t\tfor(var c = 0, col = 0; c < config.cols; c++ ){\n\t\t\t\tvar val = hslToRgb(col, 1, lt );\n\t\t\t\tcolorRange.push(rgbToHex(val.r, val.g, val.b));\n\t\t\t\tcol += colorStep;\n\t\t\t}\n\t\t\tcolors.push(colorRange);\n\t\t\tlt+=lightStep;\n\t\t}\n\n\t\tthis._settings.palette = colors;\n\t},\n\tmoveSelection:function(mode, details, focus){\n\t\tvar value = this.getValue(), ind, cell;\n\n\t\tif(value) ind = this._findIndex(value);\n\t\tif(!ind) ind = {row:0, col:0};\n\n\t\tif(ind){\n\t\t\tif(mode == \"up\" || mode == \"down\")\n\t\t\t\tind.row = ind.row + (mode == \"up\"?-1:1);\n\t\t\telse if(mode == \"right\" || mode == \"left\")\n\t\t\t\tind.col = ind.col +(mode == \"right\"?1:-1);\n\t\t\telse if(mode == \"top\" )\n\t\t\t\tind.row = ind.col = 0;\n\t\t\telse if(mode == \"bottom\"){\n\t\t\t\tind.row = this._viewobj.lastChild.querySelectorAll(\".webix_color_row\").length-1;\n\t\t\t\tind.col = this._viewobj.lastChild.childNodes[ind.row].childNodes.length-1;\n\t\t\t}\n\t\t\tind.row = Math.max(ind.row, 0);\n\t\t\tif(ind.row>=0)\n\t\t\t\tcell = this._viewobj.lastChild.childNodes[ind.row].childNodes[ind.col];\n\t\t\tif(cell){\n\t\t\t\tvalue =  cell.getAttribute(/*@attr*/\"webix_val\");\n\t\t\t\tthis.setValue(value);\n\t\t\t\tthis.callEvent(\"onSelect\", [this._settings.value]);\n\n\t\t\t\tif(focus !==false){\n\t\t\t\t\tvar sel = this._viewobj.querySelector(\"div[tabindex='0']\");\n\t\t\t\t\tif(sel)  sel.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\trender:function(){\n\t\tif(!this.isVisible(this._settings.id))\n\t\t\treturn;\n\n\t\tif(!this._settings.palette)\n\t\t\tthis._initPalette(this._settings);\n\t\tvar palette = this._settings.palette;\n\n\t\tthis.callEvent(\"onBeforeRender\",[]);\n\t\tvar config = this._settings,\n\t\t\titemTpl = template(\"<div role='gridcell' tabindex='-1' aria-label=\\\"{obj.val}\\\" style=\\\"width:{obj.width}px;height:{obj.height}px;\\\" \"+/*@attr*/\"webix_val\"+\"=\\\"{obj.val}\\\">\" + (config.template||\"\") + \"</div>\"),\n\t\t\tdata = {width: 0, height:0, val:0},\n\t\t\twidth = this.$width,\n\t\t\theight =  this.$height,\n\t\t\twidths = [];\n\n\t\tvar html = \"<div class=\\\"webix_color_palette\\\"role=\\\"rowgroup\\\">\";\n\n\t\tvar firstRow = (typeof palette[0] == \"object\") ? palette[0] : palette;\n\t\tfor(var i=0; i < firstRow.length; i++){\n\t\t\twidths[i] = Math.floor(width/(firstRow.length - i));\n\t\t\twidth -= widths[i];\n\t\t}\n\n\t\tif(typeof palette[0] == \"object\"){\n\t\t\tfor(var r=0; r < palette.length; r++){\n\t\t\t\tvar cellHeight = Math.floor(height/(palette.length - r));\n\t\t\t\theight -= cellHeight;\n\t\t\t\tvar row = palette[r];\n\t\t\t\thtml += renderRow(row, widths, cellHeight);\n\t\t\t}\n\t\t}else{\n\t\t\thtml+= renderRow(palette, widths, height);\n\t\t}\n\n\t\thtml += \"</div>\";\n\t\tthis._viewobj.innerHTML = html;\n\n\t\tfunction renderRow(row, widths, height){\n\t\t\tvar rowHtml = \"<div class=\\\"webix_color_row\\\" role=\\\"row\\\">\";\n\t\t\tfor(var cell = 0; cell < row.length; cell++){\n\t\t\t\tdata.width = widths[cell];\n\t\t\t\tdata.height = height;\n\t\t\t\tdata.val = row[cell];\n\t\t\t\trowHtml += itemTpl(data);\n\t\t\t}\n\t\t\trowHtml += \"</div>\";\n\t\t\treturn rowHtml;\n\t\t}\n\t\tthis._selectBox = null;\n\t\tif(this._settings.value)\n\t\t\tthis.$setValue(this._settings.value);\n\t\telse\n\t\t\tthis._viewobj.lastChild.childNodes[0].childNodes[0].setAttribute(\"tabindex\", \"0\");\n\t\tthis.callEvent(\"onAfterRender\",[]);\n\t},\n\trefresh:function(){ this.render(); }\n};\n\nconst view = protoUI(api, KeysNavigation, base.view, EventSystem);\nexport default {api, view};","import {triggerEvent, preventEvent, getTextSize, locate} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\nimport {isUndefined, isArray} from \"../webix/helpers\";\nimport {assert} from \"../webix/debug\";\nimport template from \"../webix/template\";\n\nimport baseview from \"../views/baseview\";\nimport base from \"../views/view\";\n\nimport AutoTooltip from \"../core/autotooltip\";\nimport UIManager from \"../core/uimanager\";\nimport EventSystem from \"../core/eventsystem\";\nimport AtomRender from \"../core/atomrender\";\nimport Settings from \"../core/settings\";\n\n\nconst api = {\n\tname:\"button\",\n\ttouchable:true,\n\t$skin:function(){\n\t\tthis.defaults.height = $active.buttonHeight||$active.inputHeight;\n\t},\n\tdefaults:{\n\t\ttemplate:function(obj, common){\n\t\t\tvar text = common.$renderInput(obj, common);\n\t\t\tif (obj.badge||obj.badge===0) text = text.replace(\"</button>\", \"<span class='webix_badge'>\"+obj.badge+\"</span></button>\");\n\t\t\treturn \"<div class='webix_el_box' style='width:\"+obj.awidth+\"px; height:\"+obj.aheight+\"px'>\"+ text + \"</div>\";\n\t\t},\n\t\tlabel:\"\",\n\t\tborderless:true\n\t},\n\t$renderInput:function(obj){\n\t\treturn \"<button type='button' \"+(obj.popup?\"aria-haspopup='true'\":\"\")+\" class='webix_button'>\"+(obj.label||this._pattern(obj.value))+\"</button>\";\n\t},\n\t$init:function(config){\n\t\tthis._viewobj.className += \" webix_control webix_el_\"+(this.$cssName||this.name);\n\n\t\tthis._set_default_css(config);\n\n\t\tthis.data = this._settings;\n\t\tthis._dataobj = this._viewobj;\n\n\t\tthis.$ready.push(function(){ this._calc_size(this.config); });\n\t},\n\thotkey_setter: function(key){\n\t\tvar control = this;\n\t\tthis._addElementHotKey(key, function(view,ev){\n\t\t\tif(control.isVisible()){\n\t\t\t\tvar elem = control.$view.firstChild;\n\t\t\t\ttriggerEvent(elem, \"MouseEvents\", \"click\");\n\t\t\t\tpreventEvent(ev);\n\t\t\t}\n\t\t});\n\t},\n\t_set_default_css: function(config){\n\t\tif (!config.css || !this._get_class(config.css) || (this.defaults.css && !this._get_class(this.defaults.css))){\n\t\t\tthis._viewobj.className += \" webix_secondary\";\n\t\t}\n\t},\n\t_get_class:function(css){\n\t\tif(typeof css == \"string\"){\n\t\t\tconst classes = { webix_danger:1, webix_transparent:1, webix_primary:1 };\n\t\t\tfor(let i in classes){\n\t\t\t\tif(css.indexOf(i)!==-1)\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\t_addElementHotKey: function(key, func, view){\n\t\tvar keyCode = UIManager.addHotKey(key, func, view);\n\t\tthis.attachEvent(\"onDestruct\", function(){\n\t\t\tUIManager.removeHotKey(keyCode, func, view);\n\t\t});\n\t},\n\ttype_setter:function(value){\n\t\tif (this._types[value])\n\t\t\tthis.$renderInput = template(this._types[value]);\n\t\treturn value;\n\t},\n\t_set_inner_size:false,\n\t_types:{\n\t\timage:\"<button type='button' class='webix_button webix_img_btn' style='line-height:#cheight#px;'><img class='webix_image' style='max-width:#cheight#px; max-height:#cheight#px;' src = '#image#'>#label#</button>\",\n\t\timageTop:\"<button type='button' class='webix_button webix_img_btn_top'><div class='webix_image' style='width:100%;height:100%;background-image:url(#image#);'></div><div class='webix_img_btn_text'>#label#</div></button>\",\n\n\t\ticon:\"<button type='button' class='webix_button webix_img_btn' style='line-height:#cheight#px;'><span class='webix_icon_btn #icon#' style='max-width:#cheight#px;'></span>#label#</button>\",\n\t\ticonTop:\"<button type='button' class='webix_button webix_img_btn_top' style='width:100%;text-align:center;'><span class='webix_icon #icon#'></span><div class='webix_img_btn_text'>#label#</div></button>\",\n\t},\n\t_findAllInputs: function(){\n\t\tvar result = [];\n\t\tvar tagNames = [\"input\",\"select\",\"textarea\",\"button\"];\n\t\tfor(var i=0; i< tagNames.length; i++){\n\t\t\tvar inputs = this.$view.getElementsByTagName(tagNames[i]);\n\t\t\tfor(var j = 0; j< inputs.length; j++){\n\t\t\t\tresult.push(inputs[j]);\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t},\n\tdisable: function(){\n\t\tvar i, node, elem = this._getBox();\n\t\tbaseview.api.disable.apply(this, arguments);\n\t\tif(elem && elem.className.indexOf(\" webix_disabled_box\")== -1){\n\t\t\telem.className += \" webix_disabled_box\";\n\t\t\tvar inputs = this._findAllInputs();\n\t\t\tfor(i=0; i< inputs.length; i++)\n\t\t\t\tinputs[i].setAttribute(\"disabled\",true);\n\n\t\t\t// richselect and based on it\n\t\t\tnode = this.getInputNode();\n\t\t\tif(node && node.tagName.toLowerCase() == \"div\"){\n\t\t\t\tthis._disabledTabIndex = node.getAttribute(\"tabIndex\");\n\t\t\t\tnode.removeAttribute(\"tabIndex\");\n\t\t\t}\n\n\t\t\tif(this._settings.labelPosition == \"top\"){\n\t\t\t\tvar label = this._dataobj.firstChild;\n\t\t\t\tif(label)\n\t\t\t\t\tlabel.className += \" webix_disabled_top_label\";\n\t\t\t}\n\t\t}\n\t},\n\tenable: function(){\n\t\tbaseview.api.enable.apply(this, arguments);\n\t\tvar node,\n\t\t\telem = this._getBox();\n\t\tif(elem){\n\t\t\telem.className = elem.className.replace(\" webix_disabled_box\",\"\");\n\t\t\tvar inputs = this._findAllInputs();\n\t\t\tfor(var i=0; i< inputs.length; i++)\n\t\t\t\tinputs[i].removeAttribute(\"disabled\");\n\n\t\t\tnode = this.getInputNode();\n\t\t\tif(node && !isUndefined(this._disabledTabIndex))\n\t\t\t\tnode.setAttribute(\"tabIndex\",this._disabledTabIndex);\n\n\t\t\tif(this._settings.labelPosition == \"top\"){\n\t\t\t\tvar label = this._dataobj.firstChild;\n\t\t\t\tif(label)\n\t\t\t\t\tlabel.className = label.className.replace(\" webix_disabled_top_label\",\"\");\n\t\t\t}\n\t\t}\n\t},\n\t$setSize:function(x,y){\n\t\tif(base.api.$setSize.call(this,x,y)){\n\t\t\tthis.render();\n\t\t}\n\t},\n\tsetValue:function(value){\n\t\tvalue = this.$prepareValue(value);\n\t\tconst oldvalue = this._settings.value;\n\n\t\tif (this.$compareValue(oldvalue, value)){\n\t\t\tif (this._rendered_input && value != this.$getValue())\n\t\t\t\tthis.$setValue(value);\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._settings.value = value;\n\t\tif (this._rendered_input)\n\t\t\tthis.$setValue(value);\n\n\t\tthis.callEvent(\"onChange\", [value, oldvalue]);\n\t},\n\t$compareValue:function(oldvalue, value){ \n\t\tif (typeof value === \"number\") value = value.toString();\n\t\tif (typeof oldvalue === \"number\") oldvalue = oldvalue.toString();\n\t\treturn oldvalue == value;\n\t},\n\t$prepareValue:function(value){ return this._pattern(value, false); },\n\t_pattern :function(value){\n\t\treturn value === 0 ? \"0\" : (value || \"\").toString();\n\t},\n\t//visual part of setValue\n\t$setValue:function(value){\n\t\tconst node = this.getInputNode();\n\t\tif (node && !this._types[this._settings.type]){\n\t\t\tvalue = this._settings.label || value;\n\t\t\tif (node.tagName==\"BUTTON\") node.innerHTML = value;\n\t\t\telse node.value = value;\n\t\t}\n\t},\n\tgetValue:function(){\n\t\t//if button was rendered - returning actual value\n\t\t//otherwise - returning last set value\n\t\tvar value = this._rendered_input? this.$getValue() : this._settings.value;\n\t\treturn (typeof value == \"undefined\") ? \"\" : value;\n\t},\n\t$getValue:function(){\n\t\treturn this._settings.value||\"\";\t\n\t},\n\tfocus:function(){\n\t\tif(!UIManager.canFocus(this))\n\t\t\treturn false;\n\t\t\n\t\tvar input = this.getInputNode();\n\t\tif (input && input.focus) input.focus();\n\t},\n\tblur:function() {\n\t\tvar input = this.getInputNode();\n\t\tif (input && input.blur) input.blur();\n\t},\n\t//get input element\n\tgetInputNode: function() {\n\t\treturn this._dataobj.getElementsByTagName(\"input\")[0]||this._dataobj.getElementsByTagName(\"button\")[0];\n\t},\n\t//get top-level sub-container\n\t_getBox:function(){\n\t\tfor(var i=0;i< this._dataobj.childNodes.length;i++){\n\t\t\tif(this._dataobj.childNodes[i].className.indexOf(\"webix_el_box\")>=0)\n\t\t\t\treturn this._dataobj.childNodes[i];\n\t\t}\n\t\treturn null;\n\t},\n\t_get_tooltip_data:function(t,e){\n\t\tlet node = e.target || e.srcElement;\n\t\tlet box = this._getBox();\n\n\t\tif (box && box.contains(node))\n\t\t\treturn this._settings;\n\t\treturn null;\n\t},\n\t_sqrt_2:Math.sqrt(2),\n\t_calc_size:function(config){\n\t\tconfig = config || this._settings;\n\t\tif (config.autowidth){\n\t\t\tlet width = getTextSize((config.value||config.label || \"\"), \"webixbutton\").width +\n\t\t\t\t(config.badge||config.badge===0 ? getTextSize(config.badge, \"webix_badge\").width * 2 - 32 : 0) +\n\t\t\t\t(config.type === \"icon\" ? 24 : 0) +\n\t\t\t\t(config.type === \"image\" ? config.height-$active.inputPadding : 0);\n\n\t\t\twidth = Math.max(config.minWidth || 0, width);\n\t\t\tconfig.width = Math.min(config.maxWidth || Infinity, width);\n\t\t}\n\t},\n\t_calck_input_size:function(){\n\t\t//use width for both width and inputWidth settings in clever way\n\t\t//in form, we can define width for some element smaller than for siblings\n\t\t//it will use inputWidth to render the desired view\n\t\tthis._input_width = this._settings.inputWidth || \n\t\t\t((this._content_width - this._settings.width > 2)?this._settings.width:0) || this._content_width;\n\t\tthis._input_height = this._settings.inputHeight||this._inputHeight||0;\n\t},\n\tresize: function(){\n\t\tthis._calc_size();\n\t\treturn base.api.resize.apply(this,arguments);\n\t},\n\trender:function(){\n\t\tthis._calck_input_size();\n\t\tthis._settings.awidth  = this._input_width||this._content_width;\n\t\tthis._settings.aheight = this._input_height||this._content_height;\n\n\t\t//image button - image width\n\t\tthis._settings.bheight = this._settings.aheight+2;\n\t\tthis._settings.cheight = this._settings.aheight- 2*$active.inputPadding;\n\t\tthis._settings.dheight = this._settings.cheight - 2; // - borders\n\n\t\tif(AtomRender.render.call(this)){\n\t\t\tthis._rendered_input = true;\n\t\t\tif (this._set_inner_size) this._set_inner_size();\n\t\t\tif (this._settings.align){\n\t\t\t\tvar handle = this._dataobj.firstChild;\n\t\t\t\tif (this._settings.labelPosition == \"top\" && handle.nextSibling)\n\t\t\t\t\thandle = handle.nextSibling;\n\n\t\t\t\tswitch(this._settings.align){\n\t\t\t\t\tcase \"right\":\n\t\t\t\t\t\thandle.style.cssFloat = \"right\";\n\t\t\t\t\t\thandle.style.textAlign = \"right\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"center\":\n\t\t\t\t\t\thandle.style.display = \"inline-block\";\n\t\t\t\t\t\thandle.parentNode.style.textAlign = \"center\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"middle\":\n\t\t\t\t\t\thandle.style.marginTop = Math.round((this._content_height-this._input_height)/2)+\"px\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"bottom\": \n\t\t\t\t\t\thandle.style.marginTop = (this._content_height-this._input_height)+\"px\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"left\":\n\t\t\t\t\t\thandle.style.cssFloat = \"left\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tassert(false, \"Unknown align mode: \"+this._settings.align);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.$render)\n\t\t\t\tthis.$render(this.data);\n\n\t\t\tif (this._settings.disabled)\n\t\t\t\tthis.disable();\n\n\t\t\tif (this._init_once){\n\t\t\t\tthis._init_once(this.data);\n\t\t\t\tthis._init_once = 0;\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh:function(){ this.render(); },\n\n\ton_click:{\n\t\t_handle_tab_click: function(ev){\n\t\t\tconst id = locate(ev, /*@attr*/\"button_id\");\n\t\t\tconst opt = this.getOption(id);\n\n\t\t\tif (opt && !opt.disabled && this.callEvent(\"onBeforeTabClick\", [id, ev])){\n\t\t\t\tthis.setValue(id);\n\t\t\t\tthis.focus();\n\t\t\t\tthis.callEvent(\"onAfterTabClick\", [id, ev]);\n\t\t\t}\n\t\t},\n\t\twebix_all_segments:function(ev, button){\n\t\t\tthis.on_click._handle_tab_click.call(this, ev, button);\n\t\t},\n\t\twebix_all_tabs:function(ev, button){\n\t\t\tthis.on_click._handle_tab_click.call(this, ev, button);\n\t\t},\n\t\twebix_inp_counter_next:function(){\n\t\t\tif (!this._settings.readonly)\n\t\t\t\tthis.next();\n\t\t},\n\t\twebix_inp_counter_prev:function(){\n\t\t\tif (!this._settings.readonly)\n\t\t\t\tthis.prev();\n\t\t},\n\t\twebix_input_icon:function(){\n\t\t\tthis.getInputNode().focus();\n\t\t},\n\t\twebix_inp_checkbox_border: function(e) {\n\t\t\tif (!this._settings.disabled && (e.target||e.srcElement).tagName != \"DIV\" && !this._settings.readonly)\n\t\t\t\tthis.toggle();\n\t\t},\n\t\twebix_inp_checkbox_label: function() {\n\t\t\tif (!this._settings.readonly)\n\t\t\t\tthis.toggle();\n\t\t},\n\t\twebix_inp_radio_border: function(e) {\n\t\t\tconst id = locate(e, /*@attr*/\"radio_id\");\n\t\t\tconst opt = this.getOption(id);\n\n\t\t\tif (opt && !opt.disabled){\n\t\t\t\tthis.setValue(id);\n\t\t\t\tthis.focus();\n\t\t\t}\n\t\t},\n\t\twebix_tab_more_icon: function(ev,obj,node){\n\t\t\tconst popup = this.getPopup();\n\t\t\tif (!popup.isVisible()){\n\t\t\t\tpopup.resize();\n\t\t\t\tpopup.show(node, null, true);\n\t\t\t} else\n\t\t\t\tpopup.hide();\n\t\t},\n\t\twebix_tab_close:function(e){\n\t\t\tconst id = locate(e, /*@attr*/\"button_id\");\n\t\t\tconst opt = this.getOption(id);\n\n\t\t\tif (opt && !opt.disabled && this.callEvent(\"onBeforeTabClose\", [id, e]))\n\t\t\t\tthis.removeOption(id);\n\t\t}\n\t},\n\n\t//method do not used by button, but  used by other child-views\n\t_check_options:function(opts){\n\t\tassert(!!opts, this.name+\": options not defined\");\n\t\tassert(isArray(opts), this.name+\": options must be an array\");\n\n\t\tfor(var i=0;i<opts.length;i++){\n\t\t\t// asserts need to be removed in final version\t\t\t\n\t\t\tassert(!opts[i].text, \"Please replace .text with .value in control config\");\n\t\t\tassert(!opts[i].label, \"Please replace .label with .value in control config\");\n\n\t\t\tif(typeof opts[i]==\"string\"){\n\t\t\t\topts[i] = {id:opts[i], value:opts[i]};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif(isUndefined(opts[i].id))\n\t\t\t\t\topts[i].id = opts[i].value;\n\n\t\t\t\tif(isUndefined(opts[i].value))\n\t\t\t\t\topts[i].value = opts[i].id;\n\t\t\t}\n\t\t}\n\t\treturn opts;\n\t},\n\t_get_div_placeholder: function(obj){\n\t\tvar placeholder = (obj?obj.placeholder:this._settings.placeholder);\n\t\treturn (placeholder?\"<span class='webix_placeholder'>\"+placeholder+\"</span>\":\"\");\n\t}\n};\n\nconst view = protoUI(api, base.view, AutoTooltip, AtomRender, Settings, EventSystem);\nexport default {api, view};","import {getTextSize} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\n\nimport button from \"../views/button\";\n\nconst api = {\n\tname:\"label\",\n\tdefaults:{\n\t\ttemplate:\"<div class='webix_el_box' style='width:#awidth#px;height:#aheight#px;line-height:#cheight#px'>#label#</div>\"\n\t},\n\t$skin:function(){\n\t\tbutton.api.$skin.call(this);\n\n\t\tthis.defaults.height = $active.inputHeight;\n\t},\n\tfocus:function(){ return false; },\n\t_getBox:function(){\n\t\treturn this._dataobj.firstChild;\n\t},\n\tsetHTML:function(html){\n\t\tthis._settings.label = html;\n\t\tthis.refresh();\n\t},\n\tsetValue: function(value){\n\t\tthis._settings.label = value;\n\t\tbutton.api.setValue.apply(this,arguments);\n\t},\n\t$setValue:function(value){\n\t\tthis._dataobj.firstChild.innerHTML = value;\n\t},\n\t_set_inner_size:false,\n\t_set_default_css:function(){},\n\t_calc_size:function(config){\n\t\tconst css = \"webix_el_box webixlabel\" + (this.queryView(\"toolbar\", \"parent\") ? \" webixtoolbarlabel\" : \"\");\n\t\tconfig = config || this._settings;\n\t\tif (config.autowidth)\n\t\t\tconfig.width = getTextSize(config.label, css).width;\n\t}\n};\n\nconst view = protoUI(api, button.view);\nexport default {api, view};","import UIManager from \"../core/uimanager\";\nimport Number from \"../core/number\";\n\nimport env from \"../webix/env\";\nimport patterns from \"../webix/patterns\";\n\nimport {preventEvent, getSelectionRange, setSelectionRange} from \"../webix/html\";\nimport {bind, isUndefined} from \"../webix/helpers\";\nimport {_event} from \"../webix/htmlevents\";\n\n\nvar controls = {};\nfor(var i in UIManager._controls){\n\tcontrols[UIManager._controls[i]] = i;\n}\nvar nav_controls = {\n\t9:\"tab\",\n\t38:\"up\",\n\t40:\"down\",\n\t37:\"left\",\n\t39:\"right\"\n};\n\n\nconst TextPattern = {\n\t$init:function(config){\n\t\tvar pattern =  this.defaults.pattern || config.pattern;\n\t\tvar format = this.defaults.format || config.format;\n\t\tconfig.value = isUndefined(config.value) ? \"\" :config.value;\n\n\t\tif(pattern || (format && !this.format_setter)){\n\t\t\tthis.attachEvent(\"onKeyPress\", function(code, e){\n\t\t\t\tif(e.ctrlKey || e.altKey || this._settings.readonly || this._custom_format)\n\t\t\t\t\treturn;\n\n\t\t\t\tif(code>105 && code<112) //numpad operators\n\t\t\t\t\tcode -=64;\n\n\t\t\t\tif(controls[code] && code !== 8 && code !==46){  //del && bsp\n\t\t\t\t\tif(!nav_controls[code])\n\t\t\t\t\t\tpreventEvent(e);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tpreventEvent(e);\n\t\t\t\tthis._on_key_pressed(e, code);\n\t\t\t});\n\n\t\t\tthis.attachEvent(\"onAfterRender\", this._after_render);\n\t\t\tthis.getText = function(){ return this.getInputNode().value; };\n\t\t\tthis._pattern = function(value, mode){\n\t\t\t\tif (mode === false)\n\t\t\t\t\treturn this._getRawValue(value);\n\t\t\t\telse\n\t\t\t\t\treturn this._matchPattern(value);\n\t\t\t};\n\n\t\t\tif (format){\n\t\t\t\tif (typeof format === \"object\"){\n\t\t\t\t\tthis._custom_format = format;\n\t\t\t\t} else {\n\t\t\t\t\tformat = Number.getConfig(format);\n\t\t\t\t\tthis._custom_format = {\n\t\t\t\t\t\tparse : function(value){ return Number.parse(value, format); },\n\t\t\t\t\t\tedit : function(value){ return Number.format(value, format); },\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t},\n\tpattern_setter:function(value){\n\t\tvar pattern = patterns[value] || value;\n\t\t\n\t\tif(typeof pattern ==\"string\") pattern = { mask: pattern };\n\t\tpattern.allow =  pattern.allow || /[A-Za-z0-9]/g;\n\t\t\n\t\tthis._patternScheme(pattern);\n\t\treturn pattern;\n\t},\n\t_init_validation:function(){\n\t\tthis.config.validate = this.config.validate || bind(function(){\n\t\t\tvar value = this.getText();\n\t\t\tvar raw = value.replace(this._pattern_chars, \"\");\n\t\t\tvar matches = (value.toString().match(this._pattern_allows) || []).join(\"\");\n\t\t\treturn (matches.length == raw.length && value.length == this._settings.pattern.mask.length);\n\t\t}, this);\n\t},\n\t_after_render:function(){\n\t\tvar ev =  env.isIE8?\"propertychange\":\"input\";\n\t\t\n\t\tif (!this._custom_format) \n\t\t\t_event(this.getInputNode(), ev, function(){\n\t\t\t\tvar stamp =  (new Date()).valueOf();\n\t\t\t\t//dark ie8 magic\n\t\t\t\tvar width = this.$view.offsetWidth; //eslint-disable-line\n\t\t\t\tif(!this._property_stamp || stamp-this._property_stamp>100){\n\t\t\t\t\tthis._property_stamp = stamp;\n\t\t\t\t\tthis.$setValue(this.getText());\n\t\t\t\t}\n\t\t\t}, {bind:this});\n\n\t\t_event(this.getInputNode(), \"blur\", function(){\n\t\t\tthis._applyChanges();\n\t\t}, {bind:this});\n\t},\n\t_patternScheme:function(pattern){\n\t\tvar mask = pattern.mask, scheme = {}, chars = \"\", count = 0;\n\t\t\n\t\tfor(var i = 0; i<mask.length; i++){\n\t\t\tif(mask[i] === \"#\"){\n\t\t\t\tscheme[i] = count; count++;\n\t\t\t}\n\t\t\telse{\n\t\t\t\tscheme[i] = false;\n\t\t\t\tif(chars.indexOf(mask[i]) === -1) chars+=\"\\\\\"+mask[i];\n\t\t\t}\n\t\t}\n\t\tthis._pattern_allows = pattern.allow;\n\t\tthis._pattern_chars = new RegExp(\"[\"+chars+\"]\", \"g\");\n\t\tthis._pattern_scheme = scheme;\n\n\t\tthis._init_validation();\n\t},\n\t_on_key_pressed:function(e, code){\n\t\tvar node = this.getInputNode();\n\t\tvar value = node.value;\n\t\tvar pos = getSelectionRange(node);\n\t\tvar chr = \"\";\n\n\t\tif(code == 8 || code == 46){\n\t\t\tif(pos.start == pos.end){\n\t\t\t\tif(code == 8) pos.start--;\n\t\t\t\telse pos.end++;\n\t\t\t}\n\t\t}\n\t\telse{\n\t\t\tchr = String.fromCharCode(code);\n\t\t\tif(!e.shiftKey) chr = chr.toLowerCase();\n\t\t}\n\n\t\tvalue = value.substr(0, pos.start) + chr +value.substr(pos.end);\n\t\tpos = this._getCaretPos(chr, value.length, pos.start, code);\n\n\t\tthis._input_code = code;\n\t\tthis.$setValue(value);\n\n\t\tsetSelectionRange(node, pos);\n\t},\n\t_getCaretPos:function(chr, len, pos, code){\n\t\tif((chr && chr.match(this._pattern_allows)) || (code ==8 || code ==46)){\n\t\t\tpos = chr ? pos+1 : pos;\n\t\t\tpos = this._fixCaretPos(pos, code);\n\t\t}\n\t\telse if(len-1 == pos && code !==8 && code !==46){\n\t\t\tvar rest = this._settings.pattern.mask.indexOf(\"#\", pos);\n\t\t\tif(rest>0) pos += rest;\n\t\t}\n\t\treturn pos;\n\t},\n\t_fixCaretPos:function(pos, code){\n\t\tvar prev = pos-(code !== 46)*1;\n\n\t\tif(this._pattern_scheme[prev] === false){\n\t\t\tpos = pos+(code ==8 ? -1: 1);\n\t\t\treturn this._fixCaretPos(pos, code);\n\t\t}\n\t\tif(this._pattern_scheme[pos] === false && code !==8)\n\t\t\treturn this._fixCaretPos(pos+1, code)-1;\n\t\treturn pos;\n\t},\n\t_getRawValue:function(value){\n\t\tif (this._custom_format)\n\t\t\treturn this._custom_format.parse(value);\n\n\t\tvalue = value || value === 0 ? value : \"\";\n\t\tvar matches = value.toString().match(this._pattern_allows) || [];\n\t\treturn matches.join(\"\").replace(this._pattern_chars, \"\");\n\t},\n\t_matchPattern:function(value){\n\t\tif (this._custom_format)\n\t\t\treturn this._custom_format.edit(this._custom_format.parse(value));\n\n\t\tvar raw = this._getRawValue(value),\n\t\t\tpattern = this._settings.pattern.mask,\n\t\t\tmask = this._settings.pattern.mask,\n\t\t\tscheme = this._pattern_scheme,\n\t\t\tend = false,\n\t\t\tindex = 0,\n\t\t\trawIndex = 0,\n\t\t\trawLength = 0;\n\n\t\tfor(var i in scheme){\n\t\t\tif(scheme[i]!==false){\n\t\t\t\tif(!end){\n\t\t\t\t\tindex = i*1;\n\t\t\t\t\trawIndex = scheme[i];\n\t\t\t\t\tvar rchar = raw[rawIndex]||\"\";\n\t\t\t\t\tvar next = raw[rawIndex+1];\n\n\t\t\t\t\tpattern = (rchar?pattern.substr(0, index):\"\") + rchar +(rchar && next?pattern.substr(index + 1):\"\");\n\t\t\t\t\tif(!next) end = true;\n\t\t\t\t}\n\t\t\t\trawLength++;\n\t\t\t}\n\t\t}\n\n\t\t//finalize value with subsequent mask chars \n\t\tvar icode = this._input_code;\n\t\tif((icode && icode !== 8) || (!icode && rawLength-1 === rawIndex && pattern.length < mask.length)){\n\t\t\tif(raw){\n\t\t\t\tvar nind = index+1;\n\t\t\t\tif(mask.charAt(nind)!==\"#\" && pattern.length < mask.length){\n\t\t\t\t\tvar lind = mask.indexOf(\"#\", nind);\n\t\t\t\t\tif(lind<0) lind = mask.length;\n\t\t\t\t\tpattern += mask.substr(nind, lind-nind);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(icode !==46){\n\t\t\t\tpattern += mask.substr(0, mask.indexOf(\"#\"));\n\t\t\t}\n\t\t}\n\t\tthis._input_code = null;\n\t\treturn pattern;\n\t}\n};\n\nexport default TextPattern;","import {protoUI, ui, $$} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\nimport {isUndefined, isArray, extend, uid} from \"../webix/helpers\";\nimport {_event} from \"../webix/htmlevents\";\nimport {setSelectionRange} from \"../webix/html\";\nimport {assert} from \"../webix/debug\";\nimport template from \"../webix/template\";\n\nimport i18n from \"../webix/i18n\";\nimport rules from \"../webix/rules\";\nimport button from \"./button\";\nimport base from \"../views/view\";\n\nimport TextPattern from \"../core/textpattern\";\n\nconst api = {\n\tname:\"text\",\n\t$allowsClear:true,\n\t_init_onchange:function(){\n\t\tif (this.$allowsClear){\n\t\t\t//attach onChange handler only for controls which do not manage blur on their own\n\t\t\t//for example - combo\n\t\t\tif (!this._onBlur)\n\t\t\t\t_event(this.getInputNode(), \"change\", this._applyChanges, {bind:this});\n\t\t\tif (this._settings.suggest)\n\t\t\t\t$$(this._settings.suggest).linkInput(this);\n\t\t}\n\t},\n\t_applyChanges: function(){\n\t\tvar newvalue = this.getValue();\n\t\t\n\t\tvar res = this.setValue(newvalue, true);\n\t\t//controls with post formating, we need to repaint value\n\t\tif (this._custom_format && res === false ){\n\t\t\tthis.$setValue(newvalue);\n\t\t}\n\t},\n\t$skin:function(){\n\t\tbutton.api.$skin.call(this);\n\n\t\tthis.defaults.height = $active.inputHeight;\n\t\tthis.defaults.inputPadding = $active.inputPadding;\n\t\tthis._inputSpacing = $active.inputSpacing;\n\t\tthis._labelTopHeight = $active.labelTopHeight;\n\t},\n\t$init:function(config){\n\t\tif (config.labelPosition == \"top\")\n\t\t\tif (isUndefined(config.height) && this.defaults.height)  // textarea\n\t\t\t\tconfig.height = this.defaults.height + (config.label?this._labelTopHeight:0);\n\n\t\t//suggest reference for destructor\n\t\tthis._destroy_with_me = [];\n\n\t\tthis.attachEvent(\"onAfterRender\", this._init_onchange);\n\t\tthis.attachEvent(\"onBlur\", function(){\n\t\t\tif(this._onBlur) this._onBlur();\n\t\t});\n\t},\n\t$renderIcon:function(){\n\t\tvar config = this._settings;\n\t\tif (config.icon){\n\t\t\tvar height = config.aheight - 2*config.inputPadding,\n\t\t\t\tpadding = (height - 18)/2 -1,\n\t\t\t\taria = this.addSection ? \"role='button' tabindex='0' aria-label='\"+(i18n.aria[\"multitext\"+(config.mode || \"\")+\"Section\"])+\"'\": \"\";\n\t\t\treturn \"<span style='height:\"+(height-padding)+\"px;padding-top:\"+padding+\"px;' class='webix_input_icon \"+config.icon+\"' \"+aria+\"></span>\";\n\t\t}\n\t\treturn \"\";\n\t},\n\trelatedView_setter:function(value){\n\t\tthis.attachEvent(\"onChange\", function(){\n\t\t\tvar value = this.getValue();\n\t\t\tvar mode = this._settings.relatedAction;\n\t\t\tvar viewid = this._settings.relatedView;\n\t\t\tvar view = $$(viewid);\n\t\t\tif (!view){\n\t\t\t\tvar top = this.getTopParentView();\n\t\t\t\tif (top && top.$$)\n\t\t\t\t\tview = top.$$(viewid);\n\t\t\t}\n\n\t\t\tassert(view, \"Invalid relatedView: \"+viewid);\n\n\t\t\tif (mode == \"enable\"){\n\t\t\t\tif (value) view.enable(); else view.disable();\n\t\t\t} else {\n\t\t\t\tif (value) view.show(); else view.hide();\n\t\t\t}\n\t\t});\n\t\treturn value;\n\t},\n\tvalidateEvent_setter:function(value){\n\t\tif (value == \"blur\")\n\t\t\tthis.attachEvent(\"onBlur\", this.validate);\n\n\t\tif (value == \"key\")\n\t\t\tthis.attachEvent(\"onTimedKeyPress\", this.validate);\n\n\t\treturn value;\n\t},\n\tvalidate:function(){\n\t\tvar rule = this._settings.validate;\n\t\tif (!rule && this._settings.required)\n\t\t\trule = rules.isNotEmpty;\n\n\t\tvar form =this.getFormView();\n\t\tvar name = this._settings.name;\n\t\tvar value = this.getValue();\n\t\tvar data = {}; data[name] = value;\n\n\t\tassert(form, \"Validation works only for fields in the form\");\n\t\tassert(name, \"Validation works only for fields with name\");\n\n\t\tif (rule && !form._validate(rule, value, data, name))\n\t\t\treturn false;\n\t\treturn true;\n\t},\n\tbottomLabel_setter: function(value){\n\t\tif(!this._settings.bottomPadding)\n\t\t\tthis._settings.bottomPadding = 18;\n\t\treturn value;\n\t},\n\t_getInvalidText: function(){\n\t\tvar text = this._settings.invalidMessage;\n\t\tif(typeof text == \"function\"){\n\t\t\ttext.call(this);\n\t\t}\n\t\treturn text;\n\t},\n\tsetBottomText: function(text, height){\n\t\tvar config = this._settings;\n\t\tif (typeof text != \"undefined\"){\n\t\t\tif (config.bottomLabel == text) return;\n\t\t\tconfig.bottomLabel = text;\n\t\t}\n\n\t\tvar message = (config.invalid ? config.invalidMessage : \"\" ) || config.bottomLabel;\n\t\tif (!message && !config.bottomPadding)\n\t\t\tconfig.inputHeight = 0;\n\t\tif (message && !config.bottomPadding){\n\t\t\tthis._restorePadding = 1;\n\t\t\tconfig.bottomPadding = config.bottomPadding || height || 18;\t\n\t\t\tthis.render();\n\t\t\tthis.adjust();\n\t\t\tthis.resize();\n\t\t} else if (!message && this._restorePadding){\n\t\t\tconfig.bottomPadding = this._restorePadding = 0;\n\t\t\t//textarea\n\t\t\tif (!config.height)\n\t\t\t\tthis.render();\n\t\t\tthis.adjust();\n\t\t\tthis.resize();\n\t\t} else\n\t\t\tthis.render();\n\t},\n\t$getSize: function(){\n\t\tvar sizes = base.api.$getSize.apply(this,arguments);\n\t\tvar heightInc = this.config.bottomPadding;\n\t\tif(heightInc){\n\t\t\tsizes[2] += heightInc;\n\t\t\tsizes[3] += heightInc;\n\t\t}\n\t\treturn sizes;\n\t},\n\t$setSize:function(x,y){\n\t\tvar config = this._settings;\n\n\t\tif(base.api.$setSize.call(this,x,y)){\n\t\t\tif (!x || !y) return;\n\n\t\t\tif (config.labelPosition == \"top\"){\n\t\t\t\t// textarea\n\t\t\t\tif (!config.inputHeight)\n\t\t\t\t\tthis._inputHeight = this._content_height - (config.label?this._labelTopHeight:0) - (this.config.bottomPadding||0);\n\t\t\t\tconfig.labelWidth = 0;\n\t\t\t} else if (config.bottomPadding){\n\t\t\t\tconfig.inputHeight = this._content_height - this.config.bottomPadding;\n\t\t\t}\n\t\t\tthis.render();\n\t\t}\n\t},\n\t_get_input_width: function(config){\n\t\tvar width = (this._input_width||0)-(config.label?this._settings.labelWidth:0) - this._inputSpacing - (config.iconWidth || 0);\n\n\t\t//prevent js error in IE\n\t\treturn (width < 0)?0:width;\n\t},\n\t_render_div_block:function(obj, common){\n\t\tvar id = \"x\"+uid();\n\t\tvar width = common._get_input_width(obj);\n\t\tvar inputAlign = obj.inputAlign || \"left\";\n\t\tvar height = this._settings.aheight - 2*$active.inputPadding - 2*$active.borderWidth;\n\t\tvar text = (obj.text||obj.value||this._get_div_placeholder(obj));\n\t\tvar html = \"<div class='webix_inp_static' role='combobox' aria-label='\"+template.escape(obj.label)+\"' tabindex='0'\"+(obj.readonly?\" aria-readonly='true'\":\"\")+(obj.invalid?\"aria-invalid='true'\":\"\")+\" onclick='' style='line-height:\"+height+\"px;width: \" + width + \"px; text-align: \" + inputAlign + \";' >\"+ text +\"</div>\";\n\t\treturn common.$renderInput(obj, html, id);\n\t},\n\t_baseInputHTML:function(tag){\n\t\tvar html = \"<\"+tag+(this._settings.placeholder?\" placeholder='\"+this._settings.placeholder+\"' \":\" \");\n\t\tif (this._settings.readonly)\n\t\t\thtml += \"readonly='true' aria-readonly=''\";\n\t\tif(this._settings.required)\n\t\t\thtml += \"aria-required='true'\";\n\t\tif(this._settings.invalid)\n\t\t\thtml += \"aria-invalid='true'\";\n\n\t\tvar attrs = this._settings.attributes;\n\t\tif (attrs)\n\t\t\tfor(var prop in attrs)\n\t\t\t\thtml += prop+\"='\"+attrs[prop]+\"' \";\n\t\treturn html;\n\t},\n\t$renderLabel: function(config, id){\n\t\tlet label = \"\";\n\n\t\tif (config.label){\n\t\t\tlet labelAlign = (config.labelAlign||\"left\");\n\t\t\tlet top = this._settings.labelPosition == \"top\";\n\t\t\tlet labelTop =  top?\"display:block;\":(\"width: \" + this._settings.labelWidth + \"px;\");\n\t\t\tlet labelHeight = this._getLabelHeight(top);\n\t\t\tlabel = \"<label style='\"+labelTop+\"text-align: \" + labelAlign + \";line-height:\"+labelHeight+\"px;' onclick='' for='\"+id+\"' class='webix_inp_\"+(top?\"top_\":\"\")+\"label \"+(config.required?\"webix_required\":\"\")+\"'>\" + (config.label||\"\") + \"</label>\";\n\t\t}\n\t\treturn label;\n\t},\n\t_getLabelHeight:function(top){\n\t\treturn top ? this._labelTopHeight-this._settings.inputPadding : (this._settings.aheight - 2*this._settings.inputPadding);\n\t},\n\t$renderInput: function(config, div_start, id) {\n\t\tvar inputAlign = (config.inputAlign||\"left\");\n\t\tvar top = (config.labelPosition == \"top\");\n\t\tvar inputWidth = this._get_input_width(config);\n\n\t\tid = id||uid();\n\n\t\tvar label = this.$renderLabel(config,id);\n\n\t\tvar html = \"\";\n\t\tif(div_start){\n\t\t\thtml += div_start;\n\t\t} else {\n\t\t\tvar value =  template.escape(config.text || this._pattern(config.value) );\n\t\t\thtml += this._baseInputHTML(\"input\")+\"id='\" + id + \"' type='\"+(config.type||this.name)+\"'\"+(config.editable?\" role='combobox'\":\"\")+\" value='\" + value + \"' style='width: \" + inputWidth + \"px; text-align: \" + inputAlign + \";'\";\n\t\t\tvar attrs = config.attributes;\n\t\t\tif (attrs)\n\t\t\t\tfor(var prop in attrs)\n\t\t\t\t\thtml += \" \"+prop+\"='\"+attrs[prop]+\"'\";\n\t\t\thtml += \" />\";\n\t\t}\n\t\tvar icon = this.$renderIcon?this.$renderIcon(config):\"\";\n\t\thtml += icon;\n\n\t\tvar result = \"\";\n\t\t//label position, top or left\n\t\tif (top)\n\t\t\tresult = label+\"<div class='webix_el_box' style='width:\"+config.awidth+\"px; height:\"+config.aheight+\"px'>\"+html+\"</div>\";\n\t\telse\n\t\t\tresult = \"<div class='webix_el_box' style='width:\"+config.awidth+\"px; height:\"+config.aheight+\"px'>\"+label+html+\"</div>\";\n\n\n\t\t//bottom message width\n\t\tvar padding = config.awidth-inputWidth-$active.inputPadding*2;\n\t\t//bottom message text\n\t\tvar message = (config.invalid ? config.invalidMessage : \"\") || config.bottomLabel;\n\t\tif (message)\n\t\t\tresult +=  \"<div class='webix_inp_bottom_label'\"+(config.invalid?\"role='alert' aria-relevant='all'\":\"\")+\" style='width:\"+(inputWidth||config.awidth)+\"px;margin-left:\"+Math.max(padding,$active.inputPadding)+\"px;'>\"+message+\"</div>\";\n\n\t\treturn result;\n\t},\n\tdefaults:{\n\t\ttemplate:function(obj, common){\n\t\t\treturn common.$renderInput(obj);\n\t\t},\n\t\tlabel:\"\",\n\t\tlabelWidth:80\n\t},\n\ttype_setter:function(value){ return value; },\n\t_set_inner_size:false,\n\t_set_default_css:function(){},\n\t$setValue:function(value){\n\t\tthis.getInputNode().value = this._pattern(value);\n\t},\n\t$getValue:function(){\n\t\treturn this._pattern(this.getInputNode().value, false);\n\t},\n\tsetValueHere:function(v, data, details){\n\t\tif (details && details.symbol){\n\t\t\tconst s = details.symbol;\n\t\t\tlet value = this.getValue();\n\t\t\tlet last = value.substring(details.pos);\n\n\t\t\tvalue = value.substring(0, details.pos);\n\t\t\tvalue = value.substring(0, value.lastIndexOf(s)+s.length) + v;\n\n\t\t\tthis.setValue(value + last);\n\t\t\tsetSelectionRange(this.getInputNode(), value.length);\n\t\t} else\n\t\t\tthis.setValue(v);\n\t},\n\tsuggest_setter:function(value){\n\t\tif (value){\n\t\t\tassert(value !== true, \"suggest options can't be set as true, data need to be provided instead\");\n\n\t\t\tif (typeof value == \"string\"){\n\t\t\t\tconst attempt = $$(value);\n\t\t\t\tif (attempt) \n\t\t\t\t\treturn $$(value)._settings.id;\n\n\t\t\t\tvalue = { body: { url:value , dataFeed:value }};\n\t\t\t} else if(value.getItem)\n\t\t\t\tvalue = { body: { data:value }};\n\t\t\telse if (isArray(value))\n\t\t\t\tvalue = { body: { data: this._check_options(value) }};\n\t\t\telse if (!value.body)\n\t\t\t\tvalue.body = { };\n\n\t\t\textend(value, { view:\"suggest\" });\n\n\t\t\tconst view = ui(value);\n\t\t\tthis._destroy_with_me.push(view);\n\t\t\treturn view._settings.id;\n\t\t}\n\t\treturn false;\n\t}\n};\n\nconst view = protoUI(api, TextPattern, button.view);\nexport default {api, view};","import {uid, bind} from \"../webix/helpers\";\nimport {proto, ui} from \"../ui/core\";\n\nimport EventSystem from \"./eventsystem\";\nimport Destruction from \"./destruction\";\nimport DataMove from \"../core/datamove\";\nimport DataLoader from \"../core/dataloader\";\nimport MapCollection from \"../core/mapcollection\";\n\nimport Settings from \"../core/settings\";\n\nimport ValidateCollection from \"../core/validatecollection\";\n\nimport BindSource from \"../core/bindsource\";\nimport BaseBind from \"../core/basebind\";\nimport CollectionBind from \"../core/collectionbind\";\n\nimport {define} from \"../services\";\n\nconst DataCollection = proto({\n\tname:\"DataCollection\",\n\tisVisible:function(){ \n\t\tif (!this.data.order.length && !this.data._filter_order && !this._settings.dataFeed) return false;\n\t\treturn true; \n\t},\n\t$init:function(config){\n\t\tthis.data.provideApi(this, true);\n\t\tvar id = (config&&config.id)?config.id:uid();\n\t\tthis._settings.id =id;\n\t\tui.views[id] = this;\n\t\tthis.data.attachEvent(\"onStoreLoad\", bind(function(){\n\t\t\tthis.callEvent(\"onBindRequest\",[]);\n\t\t}, this));\n\t},\n\trefresh:function(){ this.callEvent(\"onBindRequest\",[]); }\n}, DataMove, CollectionBind, BindSource, ValidateCollection, DataLoader, MapCollection, EventSystem, BaseBind, Destruction, Settings);\n\ndefine(\"DataCollection\", DataCollection);\n\nexport default DataCollection;","import {protoUI, $$} from \"../ui/core\";\nimport {uid, bind} from \"../webix/helpers\";\n\nimport text from \"./text\";\nimport DataCollection from \"../core/datacollection\";\n\n\nconst api = {\n\tname:\"select\",\n\tdefaults:{\n\t\ttemplate:function(obj,common){\n\t\t\tconst id = \"x\"+uid();\n\t\t\tlet html = common._baseInputHTML(\"select\")+\"id='\"+id+\"' style='width:\"+common._get_input_width(obj)+\"px;'>\";\n\n\t\t\tconst optview = $$(obj.options);\n\t\t\tif (optview && optview.data && optview.data.each){\n\t\t\t\toptview.data.each(function(option){\n\t\t\t\t\thtml+=\"<option\"+((option.id == obj.value)?\" selected='true'\":\"\")+\" value='\"+option.id+\"'>\"+option.value+\"</option>\";\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst options = common._check_options(obj.options);\n\t\t\t\tfor (let i=0; i<options.length; i++)\n\t\t\t\t\thtml+=\"<option\"+((options[i].id == obj.value)?\" selected='true'\":\"\")+\" value='\"+options[i].id+\"'>\"+options[i].value+\"</option>\";\n\t\t\t}\n\t\t\thtml += \"</select>\";\n\t\t\treturn common.$renderInput(obj, html, id);\n\t\t}\n\t},\n\toptions_setter:function(value){\n\t\tif (value){\n\t\t\tif (typeof value ==\"string\"){\n\t\t\t\tconst collection = new DataCollection({url:value});\n\t\t\t\tcollection.data.attachEvent(\"onStoreLoad\", bind(this.refresh, this));\n\t\t\t\treturn collection;\n\t\t\t} else\n\t\t\t\treturn value;\n\t\t}\n\t},\n\t//get input element\n\tgetInputNode: function() {\n\t\treturn this._dataobj.getElementsByTagName(\"select\")[0];\n\t}\n};\n\nconst view = protoUI(api, text.view);\nexport default {api, view};","import {protoUI} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\nimport {uid} from \"../webix/helpers\";\nimport template from \"../webix/template\";\n\nimport text from \"./text\";\n\n\nconst api = {\n\tname:\"checkbox\",\n\tdefaults:{\n\t\tcheckValue:1,\n\t\tuncheckValue:0,\n\t\ttemplate:function(config, common) {\n\t\t\tvar id = \"x\"+uid();\n\t\t\tvar rightlabel = \"\";\n\t\t\tif (config.labelRight){\n\t\t\t\trightlabel = \"<label class='webix_label_right'>\"+config.labelRight+\"</label>\";\n\t\t\t\t//user clearly attempts to hide the label, help him\n\t\t\t\tif (config.labelWidth)\n\t\t\t\t\tconfig.label = config.label || \"&nbsp;\";\n\t\t\t}\n\t\t\tvar checked = (config.checkValue == config.value);\n\t\t\tvar margin = Math.floor((common._settings.aheight-16)/2);\n\t\t\tvar ch = common._baseInputHTML(\"input\")+\"style='margin-top:\"+margin+\"px;\"+(config.customCheckbox?\"display:none\":\"\")+\"' id='\"+id+\"' type='checkbox' \"+(checked?\"checked='1'\":\"\")+(config.labelRight?\" aria-label='\"+template.escape(config.labelRight)+\"'\":\"\")+\"/>\";\n\t\t\tvar className = \"webix_inp_checkbox_border webix_el_group webix_checkbox_\"+(checked?\"1\":\"0\");\n\t\t\tvar customCheckbox = config.customCheckbox || \"\";\n\t\t\tif(customCheckbox){\n\t\t\t\tcustomCheckbox = customCheckbox.replace(/(aria-checked=')\\w*(?=')/, \"$1\"+(config.value == config.checkValue?\"true\":\"false\"));\n\t\t\t\tcustomCheckbox = customCheckbox.replace(/(aria-label=')\\w*(?=')/, \"$1\"+template.escape(config.labelRight || config.label));\n\t\t\t\tcustomCheckbox = customCheckbox.replace(/(aria-invalid=')\\w*(?=')/, \"$1\"+(config.invalid?\"true\":\"false\"));\n\t\t\t}\n\t\t\tvar html = \"<div style='line-height:\"+common._settings.cheight+\"px' class='\"+className+\"'>\"+ch+customCheckbox+rightlabel+\"</div>\";\n\t\t\treturn common.$renderInput(config, html, id);\n\t\t}\n\t},\n\tcustomCheckbox_setter: function(value){\n\t\tif( value === true && $active.customCheckbox){\n\t\t\tvalue = \"<a role='presentation' onclick='javascript:void(0)'><button role='checkbox' aria-checked='false' aria-label='' type='button' aria-invalid='' class='webix_custom_checkbox'></button></a>\";\n\t\t}\n\t\treturn value;\n\t},\n\tblur: function(){\n\t\tvar input = this.getInputNode();\n\t\tif(input) input.blur();\n\t},\n\t_pattern :function(value){ return value; },\n\t_init_onchange: function(){},\n\t$setValue:function(value){\n\t\tvar isChecked = (value == this._settings.checkValue);\n\t\tvar input = this.$view.getElementsByTagName(\"input\")[0];\n\t\tvar parentNode = input?input.parentNode:null;\n\n\t\tif(parentNode && this._settings.customCheckbox){\n\t\t\tvar button = parentNode.getElementsByTagName(\"BUTTON\");\n\t\t\tif(button[0]) button[0].setAttribute(\"aria-checked\", isChecked?\"true\":\"false\");\n\t\t}\n\t\tif(parentNode){\n\t\t\tparentNode.className = parentNode.className.replace(/(webix_checkbox_)\\d/,\"$1\"+(isChecked?1:0));\n\t\t}\n\t\tinput.checked = isChecked;\n\t},\n\ttoggle:function(){\n\t\tvar value = (this.getValue() != this._settings.checkValue)?this._settings.checkValue:this._settings.uncheckValue;\n\t\tthis.setValue(value);\n\t},\n\tgetValue:function(){\n\t\tvar value = this._settings.value;\n\t\treturn  (value == this._settings.checkValue)?this._settings.checkValue:this._settings.uncheckValue;\n\t},\n\tgetInputNode: function() {\n\t\treturn this.$view.getElementsByTagName(this._settings.customCheckbox?\"button\":\"input\")[0];\n\t},\n\t$skin:function(){\n\t\ttext.api.$skin.call(this);\n\n\t\tthis.defaults.customCheckbox = !!$active.customCheckbox;\n\t}\n};\n\nconst view = protoUI(api, text.view);\nexport default {api, view};","import {protoUI} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\nimport {uid} from \"../webix/helpers\";\n\nimport template from \"../webix/template\";\nimport HTMLOptions from \"../core/htmloptions\";\n\nimport button from \"../views/button\";\nimport text from \"../views/text\";\n\nconst api = {\n\tname:\"radio\",\n\tdefaults:{\n\t\ttemplate: function(config,common) {\n\t\t\tcommon._check_options(config.options);\n\n\t\t\tconst options = common._filterOptions(config.options);\n\t\t\tconst active = common._getFirstActive();\n\t\t\tlet id, eachid, isChecked, isDisabled, label, tooltip, customRadio, optlabel, rd, input, focusable;\n\t\t\tlet html = [];\n\n\t\t\tfor (let i=0; i < options.length; i++) {\n\t\t\t\teachid = \"x\"+uid();\n\t\t\t\tid = id || eachid;\n\n\t\t\t\tif  (i && (options[i].newline || config.vertical))\n\t\t\t\t\thtml.push(\"<div class='webix_line_break'></div>\");\n\n\t\t\t\tisChecked = (options[i].id == config.value);\n\t\t\t\tfocusable = isChecked || (!config.value && options[i].id === active);\n\t\t\t\tisDisabled = !!options[i].disabled;\n\t\t\t\tlabel = options[i].value || \"\";\n\t\t\t\ttooltip = config.tooltip ? \" webix_t_id='\"+options[i].id+\"'\" : \"\";\n\t\t\t\t\n\t\t\t\tcustomRadio = config.customRadio|| \"\";\n\t\t\t\tif (customRadio){\n\t\t\t\t\toptlabel = (i === 0 ? config.label+\" \" : \"\")+label;\n\t\t\t\t\tcustomRadio = customRadio.replace(/(aria-label=')\\w*(?=')/, \"$1\"+template.escape(optlabel));\n\t\t\t\t\tcustomRadio = customRadio.replace(/(aria-checked=')\\w*(?=')/, \"$1\"+(isChecked?\"true\":\"false\"));\n\t\t\t\t\tcustomRadio = customRadio.replace(/(tabindex=')\\w*(?=')/, \"$1\"+(!isDisabled && focusable?\"0\":\"-1\"));\n\t\t\t\t\tcustomRadio = customRadio.replace(/(aria-invalid=')\\w*(?=')/, \"$1\"+(config.invalid?\"true\":\"false\"));\n\t\t\t\t\tcustomRadio = customRadio.replace(/(button_id=')\\w*(?=')/, \"$1\"+options[i].id);\n\t\t\t\t\tif (isDisabled)\n\t\t\t\t\t\tcustomRadio = customRadio.replace(\"role='radio'\", \"role='radio' webix_disabled='true'\");\n\t\t\t\t}\n\t\t\t\trd = common._baseInputHTML(\"input\")+\" name='\"+(config.name || config.id)+\"' type='radio' \"+(isChecked?\"checked='1'\":\"\")+\"tabindex=\"+(!isDisabled && focusable?\"0\":\"-1\")+\n\t\t\t\t\t\" value='\"+options[i].id+\"' id='\"+eachid+\"'\"+(isDisabled?\" disabled='true'\":\"\")+\" style='\"+(customRadio?\"display:none\":\"\")+\"' />\";\n\t\t\t\tinput = \"<div \"+/*@attr*/\"radio_id\"+\"='\"+options[i].id+\"' class='webix_inp_radio_border webix_radio_\"+(isChecked?\"1\":\"0\")+\"' role='presentation'>\"+rd+customRadio+\"</div>\";\n\n\t\t\t\tif (label)\n\t\t\t\t\tlabel = \"<label for='\"+eachid+\"' class='webix_label_right'>\" + label + \"</label>\";\n\n\t\t\t\thtml.push(\"<div class='webix_radio_option\"+(isDisabled?\" webix_disabled\":\"\")+\"' role='presentation'\"+tooltip+\">\"+input+label+\"</div>\");\n\t\t\t\t\n\t\t\t}\n\t\t\thtml = \"<div class='webix_el_group' role='radiogroup' style='margin-left:\"+(config.label?config.labelWidth:0)+\"px;'>\"+html.join(\"\")+\"</div>\";\n\t\t\t\n\t\t\treturn common.$renderInput(config, html, id);\n\t\t}\n\t},\n\trefresh:function(){\n\t\tthis.render();\n\t\tif (this._last_size && this.$getSize(0,0)[2] != this._last_size[1])\n\t\t\tthis.resize();\n\t},\n\t$getSize:function(dx, dy){\n\t\tvar size = button.api.$getSize.call(this, dx, dy);\n\t\tvar options = this._filterOptions(this._settings.options);\n\t\tif (options){\n\t\t\tvar count = this._settings.vertical?0:1;\n\t\t\tfor (var i=0; i < options.length; i++)\n\t\t\t\tif (this._settings.vertical || options[i].newline)\n\t\t\t\t\tcount++;\n\t\t\tsize[3] = size[2] = Math.max(size[2], (this._settings.optionHeight||25) * count+this._settings.inputPadding*2+ (this._settings.labelPosition == \"top\"?this._labelTopHeight:0));\n\t\t}\n\t\tvar heightInc = this.config.bottomPadding;\n\t\tif(heightInc){\n\t\t\tsize[2] += heightInc;\n\t\t\tsize[3] += heightInc;\n\t\t}\n\t\treturn size;\n\t},\n\t_getInputNode: function(){\n\t\treturn this._dataobj.getElementsByTagName(this._settings.customRadio ? \"button\" : \"input\");\n\t},\n\t$setValue:function(value){\n\t\tconst inp = this._dataobj.getElementsByTagName(\"input\");\n\t\tconst active = this._getFirstActive();\n\t\tlet id, focusable;\n\n\t\tfor (let i=0; i < inp.length; i++){\n\t\t\tid = inp[i].parentNode.getAttribute(/*@attr*/\"radio_id\");\n\t\t\tconst option = this.getOption(id);\n\n\t\t\tinp[i].checked = (id == value);\n\t\t\tfocusable = inp[i].checked || (!value && option.id === active);\n\t\t\tinp[i].setAttribute(\"tabindex\",(!option.disabled && focusable)?\"0\":\"-1\");\n\n\t\t\tconst parentNode = inp[i]?inp[i].parentNode:null;\n\t\t\tif (parentNode){\n\t\t\t\tparentNode.className = parentNode.className.replace(/(webix_radio_)\\d/,\"$1\"+(inp[i].checked?1:0));\n\t\t\t\tif (this._settings.customRadio){\n\t\t\t\t\tconst button = parentNode.getElementsByTagName(\"BUTTON\");\n\t\t\t\t\tif (button[0]){\n\t\t\t\t\t\tbutton[0].setAttribute(\"aria-checked\", inp[i].checked?\"true\":\"false\");\n\t\t\t\t\t\tbutton[0].setAttribute(\"tabindex\", (!option.disabled && focusable)?\"0\":\"-1\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tgetValue:function(){\n\t\treturn this._settings.value;\n\t},\n\tfocus: function(){ return this._focus(); },\n\tblur: function(){ this._blur(); },\n\tcustomRadio_setter: function(value){\n\t\tif(value === true && $active.customRadio)\n\t\t\tvalue = \"<a role='presentation' onclick='javascript:void(0)'><button type='button' class='webix_custom_radio' \"+/*@attr*/\"button_id='' role='radio' aria-checked='false' aria-label='' aria-invalid='' tabindex=''></button></a>\";\n\t\treturn value;\n\t},\n\t$skin:function(){\n\t\ttext.api.$skin.call(this);\n\n\t\tthis.defaults.customRadio = !!$active.customRadio;\n\t\tif ($active.optionHeight)\n\t\t\tthis.defaults.optionHeight = $active.optionHeight;\n\t}\n};\n\nconst view = protoUI(api, text.view, HTMLOptions);\nexport default {api, view};","import {protoUI, $$} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\nimport {isUndefined, isArray} from \"../webix/helpers\";\n\nimport i18n from \"../webix/i18n\";\nimport wDate from \"../core/date\";\n\nimport text from \"./text\";\n\n\nconst api = {\n\tname:\"datepicker\",\n\t$init:function(){\n\t\tthis.$ready.push(this._init_popup);\n\t},\n\tdefaults:{\n\t\ttemplate:function(obj, common){\n\t\t\tif(common._settings.type == \"time\"){\n\t\t\t\tcommon._settings.icon = common._settings.timeIcon;\n\t\t\t}\n\t\t\t//temporary remove obj.type [[DIRTY]]\n\t\t\tvar t = obj.type; obj.type = \"\";\n\t\t\tvar res = obj.editable?common.$renderInput(obj):common._render_div_block(obj, common);\n\t\t\tobj.type = t;\n\t\t\treturn res;\n\t\t},\n\t\tstringResult:false,\n\t\ttimepicker:false,\n\t\ticon:\"wxi-calendar\",\n\t\ticons: true,\n\t\ttimeIcon: \"wxi-clock\",\n\t\tseparator:\", \"\n\t},\n\t_onBlur:function(){\n\t\tconst text = this.getText();\n\t\tif (this._settings.text == text || (isUndefined(this._settings.text) && !text))\n\t\t\treturn;\n\n\t\tconst value = this._settings.editable ? this.getValue() : this.getPopup().getValue();\n\t\tthis.setValue(value||\"\");\n\t},\n\t$skin:function(){\n\t\ttext.api.$skin.call(this);\n\n\t\tthis.defaults.inputPadding = $active.inputPadding;\n\t\tthis.defaults.point = !$active.popupNoPoint;\n\t},\n\tgetPopup: function(){\n\t\treturn $$(this._settings.popup);\n\t},\n\t_init_popup:function(){ \n\t\tvar obj = this._settings;\n\t\tif (obj.suggest)\n\t\t\tobj.popup = obj.suggest;\n\t\telse if (!obj.popup){\n\t\t\tvar timepicker = this._settings.timepicker;\n\t\t\tobj.popup = obj.suggest = this.suggest_setter({\n\t\t\t\ttype:\"calendar\", point:this._settings.point===false?false:true, padding:0,\n\t\t\t\tbody: {\n\t\t\t\t\theight:240+(timepicker||this._settings.icons?30:0),\n\t\t\t\t\twidth:250,\n\t\t\t\t\tmultiselect: this._settings.multiselect, \n\t\t\t\t\ttimepicker: timepicker,\n\t\t\t\t\ttype: this._settings.type,\n\t\t\t\t\ticons: this._settings.icons,\n\t\t\t\t\ttimeIcon: this._settings.timeIcon\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tthis._init_once = function(){};\n\t},\n\t$render:function(obj){\n\t\tif (isUndefined(obj.value)) return;\n\t\tobj.value = this.$prepareValue(obj.value);\n\t\tthis.$setValue(obj.value);\n\t},\n\t$prepareValue:function(value){\n\t\tif (this._settings.multiselect){\n\t\t\tif (typeof value === \"string\")\n\t\t\t\tvalue = value.split(this._settings.separator);\n\t\t\telse if (value instanceof Date){\n\t\t\t\tvalue = [value];\n\t\t\t} else if (!value){\n\t\t\t\tvalue = [];\n\t\t\t}\n\n\t\t\tfor (var i = 0; i < value.length; i++){\n\t\t\t\tvalue[i] = this._prepareSingleValue(value[i]);\n\t\t\t}\n\n\t\t\treturn value;\n\t\t} else{ \n\t\t\treturn this._prepareSingleValue(value);\n\t\t}\n\t},\n\t_prepareSingleValue:function(value){\n\t\tvar type = this._settings.type;\n\t\tvar timeMode = type == \"time\";\n\n\t\t//setValue(\"1980-12-25\")\n\t\tif(!isNaN(parseFloat(value)))\n\t\t\tvalue = \"\"+value;\n\n\t\tif (typeof value==\"string\" && value){\n\t\t\tvar formatDate = null;\n\t\t\tif((type == \"month\" || type == \"year\") && this._formatDate){\n\t\t\t\tformatDate = this._formatDate;\n\t\t\t}\n\t\t\telse\n\t\t\t\tformatDate = (timeMode?i18n.parseTimeFormatDate:i18n.parseFormatDate);\n\t\t\tvalue = formatDate(value);\n\t\t}\n\n\t\tif (value){\n\t\t\t//time mode\n\t\t\tif(timeMode){\n\t\t\t\t//setValue([16,24])\n\t\t\t\tif(isArray(value)){\n\t\t\t\t\tvar time = new Date();\n\t\t\t\t\ttime.setHours(value[0]);\n\t\t\t\t\ttime.setMinutes(value[1]);\n\t\t\t\t\tvalue = time;\n\t\t\t\t}\n\t\t\t}\n\t\t\t//setValue(invalid date)\n\t\t\tif(isNaN(value.getTime()))\n\t\t\t\tvalue = \"\";\n\t\t}\n\n\t\treturn value;\n\t},\n\t_get_visible_text:function(value){\n\t\tif (this._settings.multiselect){\n\t\t\treturn []\n\t\t\t\t.concat(value)\n\t\t\t\t.map((function(a){ return this._get_visible_text_single(a); }).bind(this))\n\t\t\t\t.join(this.config.separator);\n\t\t} else\n\t\t\treturn this._get_visible_text_single(value);\n\t},\n\t_get_visible_text_single:function(value){\n\t\tvar timeMode = this._settings.type == \"time\";\n\t\tvar timepicker = this.config.timepicker;\n\t\tvar formatStr = this._formatStr||(timeMode?i18n.timeFormatStr:(timepicker?i18n.fullDateFormatStr:i18n.dateFormatStr));\n\t\treturn formatStr(value);\n\t},\n\t_set_visible_text:function(){\n\t\tvar node = this.getInputNode();\n\t\tif(node.value == undefined){\n\t\t\tnode.innerHTML = this._settings.text || this._get_div_placeholder();\n\t\t}\n\t\telse{\n\t\t\tnode.value = this._settings.text || \"\";\n\t\t}\n\t},\n\t$compareValue:function(oldvalue, value){\n\t\tif(!oldvalue && !value) return true;\n\t\treturn wDate.equal(oldvalue, value);\n\t},\n\t$setValue:function(value){\n\t\tthis._settings.text = (value?this._get_visible_text(value):\"\");\n\t\tthis._set_visible_text();\n\t},\n\tformat_setter:function(value){\n\t\tif(value){\n\t\t\tif (typeof value === \"function\")\n\t\t\t\tthis._formatStr = value;\n\t\t\telse {\n\t\t\t\tthis._formatStr = wDate.dateToStr(value);\n\t\t\t\tthis._formatDate = wDate.strToDate(value);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tthis._formatStr = this._formatDate = null;\n\t\treturn value;\n\t},\n\tgetInputNode: function(){\n\t\treturn this._settings.editable?this._dataobj.getElementsByTagName(\"input\")[0]:this._dataobj.getElementsByTagName(\"DIV\")[1];\n\t},\n\tgetValue:function(){\n\t\tif (this._settings.multiselect){\n\t\t\tvar value = this._settings.value;\n\t\t\tif (!value) return [];\n\n\t\t\tvar result = []\n\t\t\t\t.concat(value)\n\t\t\t\t.map((function(a){ return this._get_value_single(a); }).bind(this));\n\n\t\t\tif (this._settings.stringResult)\n\t\t\t\treturn result.join(this._settings.separator);\n\n\t\t\treturn result;\n\t\t}\n\n\t\treturn this._get_value_single(this._settings.value);\n\t},\n\t_get_value_single:function(value){\n\t\tvar type = this._settings.type;\n\t\t//time mode\n\t\tvar timeMode = (type == \"time\");\n\t\t//date and time mode\n\t\tvar timepicker = this.config.timepicker;\n\n\t\t//input was not rendered, we need to parse value from setValue method\n\t\tif (!this._rendered_input)\n\t\t\tvalue = this.$prepareValue(value) || null;\n\t\t//rendere and in edit mode\n\t\telse if (this._settings.editable){\n\t\t\tvar formatDate = this._formatDate||(timeMode?i18n.timeFormatDate:(timepicker?i18n.fullDateFormatDate:i18n.dateFormatDate));\n\t\t\tvalue = formatDate(this.getInputNode().value);\n\t\t}\n\n\t\t//return string from getValue\n\t\tif(this._settings.stringResult){\n\t\t\tvar formatStr =i18n.parseFormatStr;\n\t\t\tif(timeMode)\n\t\t\t\tformatStr = i18n.parseTimeFormatStr;\n\t\t\tif(this._formatStr && (type == \"month\" || type == \"year\")){\n\t\t\t\tformatStr = this._formatStr;\n\t\t\t}\n\n\t\t\tif(this._settings.multiselect)\n\t\t\t\treturn [].concat(value).map((function(a){ return a?formatStr(a):\"\"; }));\n\t\t\treturn (value?formatStr(value):\"\");\n\t\t}\n\t\t\n\t\treturn value||null;\n\t},\n\tgetText:function(){\n\t\tvar node = this.getInputNode();\n\t\treturn (node?(typeof node.value == \"undefined\" ? (this.getValue()?node.innerHTML:\"\") : node.value):\"\");\n\t}\n};\n\nconst view = protoUI(api, text.view);\nexport default {api, view};","import {protoUI} from \"../ui/core\";\nimport {isUndefined} from \"../webix/helpers\";\n\nimport datepicker from \"./datepicker\";\n\n\nconst api = {\n\tname:\"colorpicker\",\n\t$init:function(){\n\t\tthis.$ready.push(this._init_popup);\n\t},\n\tdefaults:{\n\t\ticon:true\n\t},\n\t_init_popup:function(){\n\t\tvar obj = this._settings;\n\t\tif (obj.suggest)\n\t\t\tobj.popup = obj.suggest;\n\t\telse if (!obj.popup)\n\t\t\tobj.popup = obj.suggest = this.suggest_setter({\n\t\t\t\ttype:\"colorboard\", height:200\n\t\t\t});\n\t\tthis._init_once = function(){};\n\t},\n\t$render:function(obj){\n\t\tif (isUndefined(obj.value)) return;\n\t\tobj.value = this.$prepareValue(obj.value);\n\t\tthis.$setValue(obj.value);\n\t},\n\tgetValue:function(){\n\t\tif (this._rendered_input && this._settings.editable)\n\t\t\treturn this.getInputNode().value;\n\t\telse\n\t\t\treturn this._settings.value;\n\t},\n\t$prepareValue:function(value){\n\t\tvalue = value ? value.toString(16) : \"\";\n\t\tif (value && value.charAt(0) != \"#\" && /^[0-9a-fA-F]+$/.test(value))\n\t\t\tvalue = \"#\" + value;\n\t\treturn value;\n\t},\n\t_getColorNode: function(){\n\t\treturn this.$view.getElementsByTagName(\"DIV\")[this._settings.editable?1:2];\n\t},\n\t_get_visible_text:function(value){\n\t\treturn value;\n\t},\n\t$compareValue:function(oldvalue, value){\n\t\treturn oldvalue == value;\n\t},\n\t$setValue:function(value){\n\t\tthis._getColorNode().style.backgroundColor = value;\n\t\tthis._settings.text = value;\n\n\t\tvar node = this.getInputNode();\n\t\tif(node.value == undefined)\n\t\t\tnode.innerHTML = value;\n\t\telse\n\t\t\tnode.value = value;\n\t},\n\t$renderIcon:function(){\n\t\tvar config = this.config;\n\t\treturn \"<div class=\\\"webix_input_icon\\\" style=\\\"background-color:\"+config.value+\";\\\"> </div>\";\n\t}\n};\n\nconst view = protoUI(api, datepicker.view);\nexport default {api, view};","import {protoUI, $$} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\nimport {isUndefined, bind} from \"../webix/helpers\";\nimport {assert} from \"../webix/debug\";\nimport {preventEvent} from \"../webix/html\";\n\nimport text from \"./text\";\n\n\nconst api = {\n\tname:\"richselect\",\n\tdefaults:{\n\t\ttemplate:function(obj,common){\n\t\t\treturn common._render_div_block(obj, common);\n\t\t},\n\t\tpopupWidth:200,\n\t\ticon: \"wxi-menu-down\"\n\t},\n\t_onBlur:function(){\n\t\tif (this._settings.text == this.getText() || (isUndefined(this._settings.text) && !this.getText()))\n\t\t\treturn;\n\n\t\tvar suggest = this.getPopup(),\n\t\t\tnodeValue = this.getInputNode().value,\n\t\t\tvalue = suggest.getSuggestion(nodeValue),\n\t\t\toldvalue = this.getValue();\n\n\t\t//non-empty value that differs from old value and matches filtering rule\n\t\tif (value && value !=oldvalue && !(nodeValue===\"\" && suggest.getItemText(value)!==\"\"))\n\t\t\tthis.setValue(value);\n\t\telse if(nodeValue===\"\")\n\t\t\tthis.setValue(\"\");\n\t\telse if(this._revertValue)\n\t\t\tthis._revertValue();\n\t},\n\tsuggest_setter:function(value){\n\t\treturn this.options_setter(value);\n\t},\n\toptions_setter:function(value){\n\t\tvalue = this._suggest_config ? this._suggest_config(value) : value;\n\t\tvar suggest = (this._settings.popup = this._settings.suggest = text.api.suggest_setter.call(this, value));\n\t\tvar list = $$(suggest).getList();\n\t\tif (list)\n\t\t\tlist.attachEvent(\"onAfterLoad\", bind(this._reset_value, this));\n\n\t\treturn suggest;\n\t},\n\tgetList: function(){\n\t\tvar suggest = $$(this._settings.suggest);\n\t\tassert(suggest, \"Input doesn't have a list\");\n\t\treturn suggest.getList();\n\t},\n\t_pattern :function(value){ return value; },\n\t_reset_value:function(){\n\t\tvar value = this._settings.value;\n\t\t//this._dataobj.firstChild - check that input is already rendered, as in IE11 it can be destroy during parent repainting\n\t\tif(!isUndefined(value) && !this.getPopup().isVisible() && !this._settings.text && this._dataobj.firstChild)\n\t\t\tthis.$setValue(value);\n\t},\n\t$skin:function(){\n\t\ttext.api.$skin.call(this);\n\n\t\tthis.defaults.inputPadding = $active.inputPadding;\n\t},\n\t$render:function(obj){\n\t\tif (isUndefined(obj.value)) return;\n\t\tthis.$setValue(obj.value);\n\t},\n\tgetInputNode: function(){\n\t\treturn this._dataobj.getElementsByTagName(\"DIV\")[1];\n\t},\n\tgetPopup: function(){\n\t\treturn $$(this._settings.popup);\n\t},\n\tgetText:function(){\n\t\tvar value = this._settings.value,\n\t\t\tnode = this.getInputNode();\n\t\tif(!node)\n\t\t\treturn value?this.getPopup().getItemText(value):\"\";\n\t\tif (typeof node.value == \"undefined\"){\n\t\t\tif (node.firstChild && node.firstChild.className === \"webix_placeholder\")\n\t\t\t\treturn \"\";\n\t\t\treturn node.innerHTML;\n\t\t}\n\t\treturn node.value;\n\t},\n\t$setValue:function(value){\n\t\tif (!this._rendered_input) return;\n\n\t\tvar text = value;\n\t\tvar popup = this.getPopup();\n\n\t\tif (popup)\n\t\t\ttext = this.getPopup().getItemText(value);\n\n\t\tif (!text && value && value.id){ //add new value\n\t\t\tconst popup = this.getPopup();\n\t\t\tconst list = popup.getList();\n\n\t\t\t// add new item only when item with such id doesn't exists yet\n\t\t\tconst exists = list.exists(value.id);\n\t\t\tif (!exists) list.add(value);\n\n\t\t\ttext = popup.getItemText(value.id);\n\n\t\t\t// in case of dynamic list, we can't add extra items\n\t\t\t// to not interfere with dynamic loading\n\t\t\tif (list._settings.dynamic && !exists)\n\t\t\t\tlist.remove(value.id);\n\n\t\t\tthis._settings.value = value.id;\n\t\t}\n\n\t\tvar node = this.getInputNode();\n\n\t\tif (isUndefined(node.value))\n\t\t\tnode.innerHTML = text || this._get_div_placeholder();\n\t\telse \n\t\t\tnode.value = text = text.replace(/<[^>]*>/g,\"\");\n\n\t\tthis._settings.text = text;\n\t},\n\tgetValue:function(){\n\t\treturn this._settings.value||\"\";\n\t},\n\t_ignoreLabelClick:function(ev){\n\t\tthis.focus();\n\t\tpreventEvent(ev);\n\t}\n};\n\nconst view = protoUI(api, text.view);\nexport default {api, view};","import {protoUI} from \"../ui/core\";\nimport {isUndefined} from \"../webix/helpers\";\n\nimport richselect from \"./richselect\";\n\n\nconst api = {\n\tname:\"combo\",\n\tgetInputNode:function(){\n\t\treturn this._dataobj.getElementsByTagName(\"input\")[0];\n\t},\n\t$render:function(obj){\n\t\tif (isUndefined(obj.value)) return;\n\t\tthis.$setValue(obj.value);\n\t},\n\t_revertValue:function(){\n\t\tif(!this._settings.editable){\n\t\t\tvar value = this.getValue();\n\t\t\tthis.$setValue(isUndefined(value)?\"\":value);\n\t\t}\n\t},\n\t_applyChanges:function(){\n\t\tvar input = this.getInputNode(),\n\t\t\tvalue = \"\",\n\t\t\tsuggest =  this.getPopup();\n\n\t\tif (input.value){\n\t\t\tvalue = this._settings.value;\n\t\t\tif(suggest.getItemText(value) != this.getText())\n\t\t\t\tvalue = suggest.getSuggestion()||value;\n\t\t}\n\t\tif (value != this._settings.value)\n\t\t\tthis.setValue(value, true);\n\t\telse\n\t\t\tthis.$setValue(value);\n\t},\n\t$compareValue:function(value){\n\t\tvar result = richselect.api.$compareValue.apply(this, arguments);\n\t\tif(result && value != this.getText())\n\t\t\tthis._revertValue();\n\t\treturn result;\n\t},\n\tdefaults:{\n\t\ttemplate:function(config, common){\n\t\t\treturn common.$renderInput(config).replace(/(<input)\\s*(?=\\w)/, \"$1\"+\" role='combobox'\");\n\t\t},\n\t\ticon: \"wxi-menu-down\"\n\t},\n\ton_click:{\n\t\t\"webix_inp_label\": function(e){this._ignoreLabelClick(e);},\n\t\t\"webix_inp_top_label\": function(e){this._ignoreLabelClick(e);}\n\t}\n};\n\nconst view = protoUI(api, richselect.view);\nexport default {api, view};","import {protoUI} from \"../ui/core\";\nimport {uid} from \"../webix/helpers\";\nimport {_event} from \"../webix/htmlevents\";\nimport template from \"../webix/template\";\n\nimport text from \"./text\";\nimport button from \"./button\";\n\nimport i18n from \"../webix/i18n\";\n\n\nconst api = {\n\tname:\"counter\",\n\tdefaults:{\n\t\ttemplate:function(config, common){\n\t\t\tvar value = config.value;\n\n\t\t\tvar id = \"x\"+uid();\n\t\t\tvar html = \"<div role='spinbutton' aria-label='\"+template.escape(config.label)+\"' aria-valuemin='\"+config.min+\"' aria-valuemax='\"+config.max+\"' aria-valuenow='\"+config.value+\"' class='webix_el_group' style='width:\"+common._get_input_width(config)+\"px'>\";\n\t\t\thtml +=  \"<button type='button' class='webix_inp_counter_prev' tabindex='-1' aria-label='\"+i18n.aria.decreaseValue+\"'>-</button>\";\n\t\t\thtml += common._baseInputHTML(\"input\")+\" id='\"+id+\"' type='text' class='webix_inp_counter_value' aria-live='assertive'\"+\" value='\"+value+\"'></input>\";\n\t\t\thtml += \"<button type='button' class='webix_inp_counter_next' tabindex='-1' aria-label='\"+i18n.aria.increaseValue+\"'>+</button></div>\";\n\t\t\treturn common.$renderInput(config, html, id);\n\t\t},\n\t\tmin:0,\n\t\tmax:Infinity,\n\t\tvalue:0,\n\t\tstep:1\n\t},\n\t$init:function(){\n\t\t_event(this.$view, \"keydown\", this._keyshift, {bind:this});\n\t},\n\t_keyshift:function(e){\n\t\tvar code = e.which || e.keyCode, c = this._settings, value = this.getValue();\n\n\t\tif(code>32 && code <41){\n\t\t\tif(code === 36) value = c.min;\n\t\t\telse if(code === 35) value = c.max === Infinity? 1000000 :c.max;\n\t\t\telse if(code === 33) this.next();\n\t\t\telse if(code === 34) this.prev();\n\t\t\telse value = value+(code === 37 || code ===40?-1:1);\n\t\t\t\n\t\t\tif(code>34 && value>=c.min && value<=c.max)\n\t\t\t\tthis.setValue(value);\n\t\t}\n\t},\n\t$setValue:function(value){\n\t\tthis.getInputNode().value = value;\n\t},\n\t$prepareValue:function(value){\n\t\tvalue = parseFloat(value);\n\t\treturn isNaN(value)?0:value;\n\t},\n\tvalue_setter:function(value){\n\t\treturn this.$prepareValue(value);\n\t},\n\tgetInputNode:function(){\n\t\treturn this._dataobj.getElementsByTagName(\"input\")[0];\n\t},\n\tgetValue:function(){\n\t\treturn  button.api.getValue.apply(this,arguments)*1;\n\t},\n\tnext:function(step){\n\t\tstep = 1*( step || this._settings.step );\n\t\tthis.shift(step);\n\t},\n\tprev:function(step){\n\t\tstep = (-1)*( step || this._settings.step );\n\t\tthis.shift(step);\n\t},\n\tshift:function(step){\n\t\tvar min = this._settings.min;\n\t\tvar max = this._settings.max;\n\n\t\tvar new_value = this.getValue() + step;\n\t\tif (new_value >= min && new_value <= max)\n\t\t\tthis.setValue(new_value);\n\t}\n};\n\nconst view = protoUI(api, text.view);\nexport default {api, view};","import {protoUI} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\n\nimport button from \"./button\";\n\n\nconst api = {\n\tname:\"icon\",\n\t$skin:function(){\n\t\tbutton.api.$skin.call(this);\n\n\t\tthis.defaults.height = $active.inputHeight;\n\t\tthis.defaults.width = $active.inputHeight;\n\t},\n\tdefaults:{\n\t\ttemplate:function(obj, view){\n\t\t\tlet min = Math.min(obj.awidth, obj.aheight);\n\t\t\tlet top = Math.round((view._content_height-obj.aheight)/2);\n\t\t\tlet inner = \"<button type='button' style='height:\"+min+\"px;width:\"+min+\"px;' class='webix_icon_button'>\"+\n                \"<span class='webix_icon \"+obj.icon+\"'></span></button>\";\n\n\t\t\treturn \"<div class='webix_el_box' style='width:\"+obj.awidth+\"px;height:\"+obj.aheight+\"px;line-height:\"+obj.aheight+\n\t\t\t\t\"px;margin-top:\"+top+\"px'>\"+inner+(obj.badge||obj.badge===0 ? \"<span class='webix_badge'>\"+obj.badge+\"</span>\":\"\")+\n\t\t\t\t\"</div>\";\n\t\t}\n\t},\n\t_set_inner_size:false,\n\t_set_default_css:function(){},\n\t$setValue:function(){}\n};\n\nconst view = protoUI(api, button.view);\nexport default {api, view};","import {protoUI} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\n\nimport text from \"./text\";\n\n\nconst api = {\n\tname:\"search\",\n\ton_click:{\n\t\t\"webix_input_icon\":function(e){\n\t\t\tthis.getInputNode().focus();\n\t\t\tthis.callEvent(\"onSearchIconClick\", [e]);\n\t\t}\n\t},\n\t$skin:function(){\n\t\ttext.api.$skin.call(this);\n\n\t\tthis.defaults.inputPadding = $active.inputPadding;\n\t},\n\tdefaults:{\n\t\ttype:\"text\",\n\t\ticon:\"wxi-search\"\n\t}\n};\n\nconst view = protoUI(api, text.view);\nexport default {api, view};","import {addCss, removeCss} from \"../webix/html\";\nimport {protoUI, $$} from \"../ui/core\";\nimport {once, uid} from \"../webix/helpers\";\nimport template from \"../webix/template\";\n\nimport HTMLOptions from \"../core/htmloptions\";\n\nimport text from \"./text\";\n\n\nconst api = {\n\tname:\"segmented\",\n\t$allowsClear:false,\n\t$init:function(){\n\t\tthis.attachEvent(\"onChange\", function(value){\n\t\t\tif (this._settings.multiview)\n\t\t\t\tthis._show_view(value);\n\t\t});\n\t\tthis.attachEvent(\"onAfterRender\", once(function(){\n\t\t\tif (this._settings.multiview && this._settings.value)\n\t\t\t\tthis._show_view(this._settings.value);\n\t\t}));\n\t},\n\t_show_view:function(value){\n\t\tvar top = this.getTopParentView();\n\t\tvar view = null;\n\n\t\t//get from local isolate\n\t\tif (top && top.$$)\n\t\t\tview = top.$$(value);\n\t\t//or check globally\n\t\tif (!view)\n\t\t\tview = $$(value);\n\n\t\tif(view && view.show)\n\t\t\tview.show();\n\t},\n\tdefaults:{\n\t\ttemplate:function(obj, common){\n\t\t\tcommon._check_options(obj.options);\n\n\t\t\tconst options = common._filterOptions(obj.options);\n\t\t\tconst width = common._get_input_width(obj);\n\t\t\tconst optionWidth = obj.optionWidth || Math.floor(width/options.length);\n\t\t\tlet html = \"<div style='width:\"+width+\"px' class='webix_all_segments' role='tablist' aria-label='\"+template.escape(obj.label)+\"'>\";\n\t\t\tlet tooltip, isDisabled;\n\n\t\t\tif (!obj.value)\n\t\t\t\tobj.value = common._getFirstActive(true);\n\n\t\t\tfor (var i=0; i<options.length; i++){\n\t\t\t\tisDisabled = !!options[i].disabled;\n\t\t\t\ttooltip = obj.tooltip ? \" webix_t_id='\"+options[i].id+\"'\" : \"\";\n\t\t\t\thtml += \"<button type='button' style='width:\"+(options[i].width || optionWidth)+\"px' role='tab' aria-selected='\"+(obj.value==options[i].id?\"true\":\"false\")+\n\t\t\t\t\t\"' tabindex='\"+(!isDisabled && obj.value==options[i].id?\"0\":\"-1\")+\"' class='\"+\"webix_segment_\"+((i==options.length-1)?\"N\":(i>0?1:0))+((obj.value==options[i].id)?\" webix_selected\":\"\")+\n\t\t\t\t\t(isDisabled?\" webix_disabled\":\"\")+\"' \"+(isDisabled?\"webix_disabled='true' \":\"\")+/*@attr*/\"button_id='\"+options[i].id+\"'\"+tooltip+\">\"+options[i].value+\"</button>\";\n\t\t\t}\n\t\t\t\n\t\t\treturn common.$renderInput(obj, html+\"</div>\", uid());\n\t\t}\n\t},\n\t_getInputNode:function(){\n\t\treturn this.$view.getElementsByTagName(\"BUTTON\");\n\t},\n\tfocus: function(){ return this._focus(); },\n\tblur: function(){ this._blur(); },\n\t$setValue:function(value){\n\t\tconst inputs = this._getInputNode();\n\t\tlet id;\n\n\t\tfor (let i=0; i<inputs.length; i++){\n\t\t\tid = inputs[i].getAttribute(/*@attr*/\"button_id\");\n\t\t\tconst option = this.getOption(id);\n\n\t\t\tinputs[i].setAttribute(\"aria-selected\", (value==id?\"true\":\"false\"));\n\t\t\tinputs[i].setAttribute(\"tabindex\", (!option.disabled && value==id?\"0\":\"-1\"));\n\t\t\tif (value == id)\n\t\t\t\taddCss(inputs[i], \"webix_selected\");\n\t\t\telse\n\t\t\t\tremoveCss(inputs[i], \"webix_selected\");\n\t\t}\n\t\t//refresh tabbar if the option is in the popup list\n\t\tconst popup = this.config.tabbarPopup;\n\t\tif(popup && $$(popup) && $$(popup).getBody().exists(value))\n\t\t\tthis.refresh();\n\t},\n\t$getValue:function(){\n\t\treturn this._settings.value||\"\";\n\t},\n\tgetValue:function(){\n\t\treturn this._settings.value;\n\t},\n\tgetInputNode:function(){\n\t\treturn null;\n\t},\n\t_set_inner_size:false\n};\n\nconst view = protoUI(api, text.view, HTMLOptions);\nexport default {api, view};","import {protoUI} from \"../ui/core\";\nimport {uid} from \"../webix/helpers\";\n\nimport text from \"./text\";\n\n\nconst api = {\n\tname:\"textarea\",\n\tdefaults:{\n\t\ttemplate:function(obj, common){ \n\t\t\tvar name = obj.name || obj.id;\n\t\t\tvar id = \"x\"+uid();\n\n\t\t\tvar html = common._baseInputHTML(\"textarea\")+\"style='width:\"+common._get_input_width(obj)+\"px;'\";\n\t\t\thtml +=\" id='\"+id+\"' name='\"+name+\"' class='webix_inp_textarea'>\"+common._pattern(obj.value)+\"</textarea>\";\n\n\t\t\treturn common.$renderInput(obj, html, id);\n\t\t},\n\t\tminHeight:60\n\t},\n\t$skin:function(){\n\t\ttext.api.$skin.call(this);\n\n\t\tthis.defaults.height = 0;\n\t},\n\t_skipSubmit: true,\n\t_getLabelHeight:function(top){\n\t\treturn top ? this._labelTopHeight-this._settings.inputPadding : \"\";\n\t},\n\t//get input element\n\tgetInputNode: function() {\n\t\treturn this._dataobj.getElementsByTagName(\"textarea\")[0];\n\t}\n};\n\nconst view = protoUI(api, text.view);\nexport default {api, view};","import {addCss, removeCss} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\n\nimport button from \"./button\";\n\n\nconst api = {\n\tname:\"toggle\",\n\t$allowsClear:true,\n\t$init:function(){\n\t\tthis.attachEvent(\"onItemClick\", function(){\n\t\t\tthis.toggle();\n\t\t});\n\t},\n\t$renderInput:function(obj){\n\t\treturn \"<button type='button' \"+(obj.popup?\"aria-haspopup='true'\":\"\")+\" class='webix_button'>\"+obj.label+\"</button>\";\n\t},\n\t$setValue:function(value){\n\t\tconst input = this.getInputNode();\n\t\tconst obj = this._settings;\n\t\tconst isPressed = (value && value != \"0\");\n\t\tconst text = (isPressed ? obj.onLabel : obj.offLabel) || obj.label;\n\t\tconst first = input.firstChild;\n\t\t\n\t\tinput.setAttribute(\"aria-pressed\", isPressed?\"true\":\"false\");\n\t\tinput.innerHTML = text;\n\n\t\t//icon or image button\n\t\tif (first && !!this._types[obj.type]){\n\t\t\tif (first.nodeName === \"SPAN\" && obj.onIcon && obj.offIcon && obj.onIcon!==obj.offIcon)\n\t\t\t\tfirst.className = first.className.replace((isPressed?obj.offIcon:obj.onIcon), (isPressed?obj.onIcon:obj.offIcon));\n\t\t\tinput.insertBefore(first, input.firstChild);\n\t\t}\n\t\t\n\t\tconst changeCss = isPressed ? addCss : removeCss;\n\t\tchangeCss(input.parentNode, \"webix_pressed\");\n\t},\n\ttoggle:function(){\n\t\tthis.setValue(!this.getValue());\n\t},\n\tgetValue:function(){\n\t\tvar value = this._settings.value;\n\t\treturn  (!value||value==\"0\")?0:1;\n\t},\n\tdefaults:{\n\t\ttemplate:function(obj, common){\n\t\t\tvar isPressed = (obj.value && obj.value != \"0\");\n\t\t\tvar css = isPressed ? \" webix_pressed\" : \"\";\n\n\t\t\tobj.label = (isPressed ? obj.onLabel : obj.offLabel) || obj.label;\n\t\t\tobj.icon = (isPressed ? obj.onIcon : obj.offIcon) || obj.icon;\n\t\t\t\n\t\t\tvar html =  \"<div class='webix_el_box\"+css+\"' style='width:\"+obj.awidth+\"px; height:\"+obj.aheight+\"px'>\"+common.$renderInput(obj, common)+\"</div>\";\n\t\t\thtml = html.replace(/(button)\\s*(?=\\w)/, \"$1\"+(\" aria-pressed='\"+(isPressed?\"true\":\"false\")+\"' \"));\n\t\t\tif (obj.badge||obj.badge===0)\n\t\t\t\thtml = html.replace(/<\\/div>$/, \"<span class='webix_badge'>\"+obj.badge+\"</span></div>\");\n\t\t\t\n\t\t\treturn html;\n\t\t}\n\t},\n\t_set_inner_size:false\n};\n\n\nconst view = protoUI(api, button.view);\nexport default {api, view};","import text from \"../views/text\";\nimport {protoUI, $$} from \"../ui/core\";\nimport {extend, _to_array} from \"../webix/helpers\";\n\n\nconst api = {\n\tname:\"multitext\",\n\t$cssName:\"text\",\n\tdefaults:{\n\t\ticon:\"wxi-plus-circle\",\n\t\ticonWidth:25,\n\t\tseparator:\", \"\n\t},\n\tgetValueHere:function(){\n\t\treturn text.api.getValue.call(this);\n\t},\n\tsetValueHere:function(value){\n\t\treturn text.api.$setValue.call(this, value);\n\t},\n\tgetValue:function(){\n\t\tif (this.config.mode == \"extra\") return this.getValueHere();\n\n\t\tif (this._full_value) \n\t\t\treturn this._full_value;\n\n\t\tvar values = [ this.getValueHere(this) ];\n\t\tfor (var i=0; i<this._subs.length; i++){\n\t\t\tvar seg = $$(this._subs[i]).getValueHere();\n\t\t\tif (seg) values.push(seg);\n\t\t}\n\t\treturn values.join(this.config.separator);\n\t},\n\t$setValue:function(value){\n\t\tvalue = value || \"\";\n\n\t\tif (this.config.mode == \"extra\") return this.setValueHere(value);\n\n\t\tthis._full_value = value;\n\t\tvar parts = value.split(this.config.separator);\n\t\tif (parts.length == this._subs.length+1){\n\t\t\tthis.setValueHere(parts[0]);\n\t\t\tfor (let i = 0; i < this._subs.length; i++)\n\t\t\t\t$$(this._subs[i]).setValueHere(parts[i+1]);\n\n\t\t\tthis._full_value = \"\";\n\t\t\treturn;\n\t\t}\n\n\t\tthis.removeSection();\n\t\tthis.setValueHere.call(this, parts[0]);\n\t\tfor (let i = 1; i<parts.length; i++){\n\t\t\tthis.addSection(parts[i]);\n\t\t}\n\t\tthis._full_value = \"\";\n\t},\n\t_subOnChange:function(){\n\t\tvar parent = this.config.master ? $$(this.config.master) : this;\n\t\tvar newvalue = parent.getValue();\n\t\tvar oldvalue = parent._settings.value;\n\t\tif (newvalue !== oldvalue){\n\t\t\tparent._settings.value = newvalue;\n\t\t\tparent.callEvent(\"onChange\", [newvalue, oldvalue]);\n\t\t}\n\t},\n\taddSection:function(text){\n\t\tvar config = this.config,\n\t\t\tnewConfig = {\n\t\t\t\tlabelWidth: config.labelWidth,\n\t\t\t\tinputWidth: config.inputWidth,\n\t\t\t\twidth: config.width,\n\t\t\t\tlabel: config.label ? \"&nbsp;\" : \"\",\n\t\t\t\tview: this.name,\n\t\t\t\tmode: \"extra\",\n\t\t\t\tvalue: text || \"\",\n\t\t\t\ticon: \"wxi-minus-circle\",\n\t\t\t\ttooltip: config.tooltip,\n\t\t\t\tsuggest: config.suggest || null,\n\t\t\t\tmaster: config.id\n\t\t\t};\n\n\t\textend(newConfig, config.subConfig||{},true);\n\n\t\tvar newone = this.getParentView().addView(newConfig);\n\t\t$$(newone).attachEvent(\"onChange\", this._subOnChange);\n\n\t\tthis._subs.push(newone);\n\t\tthis.callEvent(\"onSectionAdd\", [newone, this._subs.length]);\n\t\treturn newone;\n\t},\n\tremoveSection:function(id){\n\t\tvar parent = this.config.master ? $$(this.config.master) : this;\n\t\tfor (var i = parent._subs.length - 1; i >= 0; i--){\n\t\t\tvar section = parent._subs[i];\n\t\t\tif (!id || section == id){\n\t\t\t\tparent._subs.removeAt(i);\n\t\t\t\tthis.getParentView().removeView(section);\n\t\t\t\tparent.callEvent(\"onSectionRemove\", [section, i+1]);\n\t\t\t}\n\t\t}\n\t},\n\ton_click:{\n\t\t\"webix_input_icon\":function(){\n\t\t\tif (this.config.mode == \"extra\"){\n\t\t\t\tthis.removeSection(this.config.id);\n\t\t\t\tvar childs = this.getParentView().getChildViews();\n\t\t\t\tchilds[childs.length - 1].focus();\n\t\t\t\tthis._subOnChange();\n\t\t\t} else\n\t\t\t\t$$( this.addSection() ).focus();\n\n\t\t\treturn false;\n\t\t}\n\t},\n\t$init:function(){\n\t\tthis._subs = _to_array([]);\n\t\tthis.attachEvent(\"onKeyPress\", this._onKeyPress);\n\t},\n\t$render:function(obj){\n\t\tthis.$setValue(obj.value);\n\t},\n};\n\n\nconst view = protoUI(api,  text.view);\nexport default {api, view};","import base from \"../views/view\";\nimport PagingAbility from \"../core/pagingability\";\nimport DataMarks from \"../core/datamarks\";\nimport AutoTooltip from \"../core/autotooltip\";\nimport ValidateCollection from \"../core/validatecollection\";\nimport RenderStack from \"../core/renderstack\";\nimport DataLoader from \"../core/dataloader\";\nimport EventSystem from \"../core/eventsystem\";\nimport Settings from \"../core/settings\";\n\nimport {protoUI} from \"../ui/core\";\nimport {bind} from \"../webix/helpers\";\n\nconst api = {\n\tname:\"proto\",\n\t$init:function(){\n\t\tthis.data.provideApi(this, true);\n\t\tthis._dataobj = this._dataobj || this._contentobj;\n\t\t\n\t\t//render self , each time when data is updated\n\t\tthis.data.attachEvent(\"onStoreUpdated\",bind(function(){\n\t\t\tthis.render.apply(this,arguments);\n\t\t},this));\n\t},\n\t$setSize:function(){\n\t\tif (base.api.$setSize.apply(this, arguments))\n\t\t\tthis.render();\n\t},\n\t_id:/*@attr*/\"webix_item\",\n\ton_mouse_move:{\n\t},\n\ttype:{}\n};\n\n\nconst view = protoUI(api, PagingAbility, DataMarks, AutoTooltip, ValidateCollection, RenderStack, DataLoader, base.view, EventSystem, Settings);\nexport default {api, view};","import {addCss, createCss} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\nimport {bind, extend, isArray} from \"../webix/helpers\";\nimport template from \"../webix/template\";\n\nimport env from \"../webix/env\";\n\nimport base from \"../views/view\";\nimport proto from \"../views/proto\";\nimport VRenderStack from \"../core/vrenderstack\";\nimport CustomPrint from \"../core/customprint\";\nimport KeysNavigation from \"../core/keysnavigation\";\nimport DataMove from \"../core/datamove\";\nimport DragItem from \"../core/dragitem\";\nimport MouseEvents from \"../core/mouseevents\";\nimport SelectionModel from \"../core/selectionmodel\";\nimport Scrollable from \"../core/scrollable\";\nimport CopyPaste from \"../core/copypaste\";\n\nconst api = {\n\tname:\"list\",\n\t_listClassName : \"webix_list\",\n\t_itemClassName:\"webix_list_item\",\n\t$init:function(config){\n\t\taddCss(this._viewobj, this._listClassName + (((config.layout||this.defaults.layout) == \"x\")?\"-x\":\"\") );\n\t\tthis.data.provideApi(this,true);\n\n\t\tthis._auto_resize = bind(this._auto_resize, this);\n\t\tthis.data.attachEvent(\"onStoreUpdated\", this._auto_resize);\n\t\tthis.data.attachEvent(\"onSyncApply\", this._auto_resize);\n\t\tthis.attachEvent(\"onAfterRender\", this._correct_width_scroll);\n\n\t\tthis._viewobj.setAttribute(\"role\", \"listbox\");\n\t},\n\tdynamic_setter:function(value){\n\t\tif (value)\n\t\t\textend(this, VRenderStack, true);\n\t\treturn value;\n\t},\n\t$dragHTML:function(obj,e,context){\n\t\tlet html;\n\t\tif (this._settings.layout == \"y\" && this.type.width == \"auto\"){\n\t\t\tthis.type.width = this._content_width;\n\t\t\thtml = this._toHTML(obj);\n\t\t\tthis.type.width = \"auto\";\n\t\t} else html = this._toHTML(obj);\n\n\t\tif ( isArray(context.source) && context.source.length > 1 )\n\t\t\thtml = this._toMultipleHTML(html, context.source.length);\n\t\treturn html;\n\t},\n\tdefaults:{\n\t\tselect:false,\n\t\tscroll:true,\n\t\tlayout:\"y\",\n\t\tnavigation:true,\n\t\tdatafetch:50\n\t},\n\t_id:/*@attr*/\"webix_l_id\",\n\ton_click:{\n\t\twebix_list_item:function(e,id){\n\t\t\tif (this._settings.select){\n\t\t\t\tthis._no_animation = true;\n\t\t\t\tif (this._settings.select==\"multiselect\"  || this._settings.multiselect)\n\t\t\t\t\tthis.select(id, false, (e.ctrlKey || e.metaKey || (this._settings.multiselect == \"touch\")), e.shiftKey); \t//multiselection\n\t\t\t\telse\n\t\t\t\t\tthis.select(id);\n\t\t\t\tthis._no_animation = false;\n\t\t\t}\n\t\t}\n\t},\n\ton_dblclick:{\n\t},\n\tgetVisibleCount:function(){\n\t\treturn Math.floor(this._content_height / this._one_height());\n\t},\n\t_auto_resize:function(){\n\t\tif (this._settings.autoheight || this._settings.autowidth)\n\t\t\tthis.resize();\n\t},\n\t_auto_height_calc:function(count){\n\t\tvar value = this.data.$pagesize||this.count();\n\n\t\tthis._onoff_scroll(count && count < value, \"y\");\n\t\tif (this._settings.autoheight && value < (count||Infinity) ) \n\t\t\tcount = value;\n\t\tvar height = this._one_height() * count + (this.type.margin||0);\n\t\t//unitlist\n\t\tif(this.getUnits)\n\t\t\theight += this.getUnits().length*this.type.headerHeight;\n\n\t\treturn Math.max(height,this._settings.minHeight||0);\n\t},\n\t_one_height:function(){\n\t\treturn this.type.height + (this.type.margin||0);\n\t},\n\t_auto_width_calc:function(count){\n\t\tvar value = this.data.$pagesize||this.count();\n\n\t\tthis._onoff_scroll(count && count < value, \"x\");\n\t\tif (this._settings.autowidth && value < (count||Infinity) ) \n\t\t\tcount = value;\n\n\t\treturn (this.type.width * count); \n\t},\n\t_correct_width_scroll:function(){\n\t\tif (this._settings.layout == \"x\")\n\t\t\tthis._dataobj.style.width = (this.type.width != \"auto\") ? (this.type.width * this.count() + \"px\") : \"auto\";\n\t},\n\t$getSize:function(dx,dy){\n\t\tif (this._settings.layout == \"y\"){\n\t\t\tif (this.type.width!=\"auto\")\n\t\t\t\tthis._settings.width = this.type.width + (this._scroll_y?env.scrollSize:0);\n\t\t\tif (this._settings.yCount || this._settings.autoheight)\n\t\t\t\tthis._settings.height = this._auto_height_calc(this._settings.yCount)||1;\n\t\t}\n\t\telse {\n\t\t\tif (this.type.height!=\"auto\")\n\t\t\t\tthis._settings.height = this._one_height() + (this._scroll_x?env.scrollSize:0);\n\t\t\tif (this._settings.xCount || this._settings.autowidth)\n\t\t\t\tthis._settings.width = this._auto_width_calc(this._settings.xCount)||1;\n\t\t}\n\t\treturn base.api.$getSize.call(this, dx, dy);\n\t},\n\t$setSize:function(){\n\t\tbase.api.$setSize.apply(this, arguments);\n\t},\n\ttype:{\n\t\tcss:\"\",\n\t\twidthSize:function(obj, common){\n\t\t\treturn common.width+(common.width>-1?\"px\":\"\");\n\t\t},\n\t\theightSize:function(obj, common){\n\t\t\treturn common.height+(common.height>-1?\"px\":\"\");\n\t\t},\n\t\tclassname:function(obj, common, marks){\n\t\t\tvar css = \"webix_list_item\";\n\n\t\t\tif (common.css) css += \" \"+common.css;\n\t\t\tif (obj.disabled) css += \" webix_disabled\";\n\t\t\tif (obj.$css){\n\t\t\t\tif (typeof obj.$css == \"object\")\n\t\t\t\t\tobj.$css = createCss(obj.$css);\n\t\t\t\tcss += \" \"+obj.$css;\n\t\t\t}\n\t\t\tif (marks && marks.$css)\n\t\t\t\tcss += \" \"+marks.$css;\n\n\t\t\treturn css;\n\t\t},\n\t\taria:function(obj, common, marks){\n\t\t\treturn \"role=\\\"option\\\"\"+(marks && marks.webix_selected?\" aria-selected=\\\"true\\\" tabindex=\\\"0\\\"\":\" tabindex=\\\"-1\\\"\")+(obj.$count && obj.$template?\"aria-expanded=\\\"true\\\"\":\"\")+\n\t\t\t\t(obj.disabled?\" aria-disabled=\\\"true\\\" webix_disabled=\\\"true\\\"\":\"\");\n\t\t},\n\t\ttemplate:function(obj){\n\t\t\treturn (obj.icon?(\"<span class='webix_list_icon webix_icon \"+obj.icon+\"'></span>\"):\"\") + obj.value + (obj.badge||obj.badge===0?(\"<div class='webix_badge'>\"+obj.badge+\"</div>\"):\"\");\n\t\t},\n\t\twidth:\"auto\",\n\t\ttemplateStart:template(\"<div \"+/*@attr*/\"webix_l_id\"+\"=\\\"#id#\\\" class=\\\"{common.classname()}\\\" style=\\\"width:{common.widthSize()}; height:{common.heightSize()}; overflow:hidden;\\\" {common.aria()}>\"),\n\t\ttemplateEnd:template(\"</div>\")\n\t},\n\t$skin:function(){\n\t\tthis.type.height = $active.listItemHeight;\n\t},\n\tdisableItem:function(id){\n\t\tthis._set_item_disabled(id, true);\n\t},\n\tenableItem:function(id){\n\t\tthis._set_item_disabled(id, false);\n\t},\n\t_set_item_disabled(id, state){\n\t\tconst item = this.getItem(id);\n\t\tif (item){\n\t\t\titem.disabled = state;\n\t\t\tthis.refresh(id);\n\t\t}\n\t},\n\tisItemEnabled:function(id){\n\t\tconst item = this.getItem(id);\n\t\treturn item && !item.disabled;\n\t},\n\t_skip_item:function(id, prev, dir){\n\t\tif (!this.isItemEnabled(id)){\n\t\t\tid = this.getNextId(id, dir) || null;\n\t\t\treturn (id && id != prev)? this._skip_item(id, prev, dir) : prev;\n\t\t}\n\t\treturn id;\n\t}\n};\n\n\nconst view = protoUI(api,  CustomPrint, KeysNavigation, DataMove, DragItem, MouseEvents, SelectionModel, Scrollable, proto.view, CopyPaste);\nexport default {api, view};","import richselect from \"../views/richselect\";\nimport list from \"../views/list\";\n\nimport {protoUI, ui, $$} from \"../ui/core\";\nimport {isArray, extend} from \"../webix/helpers\";\n\nimport type from \"../webix/type\";\nimport template from \"../webix/template\";\nimport editors from \"../webix/editors\";\n\nconst api = {\n\tname:\"multiselect\",\n\t$cssName:\"richselect\",\n\tdefaults:{\n\t\tseparator:\",\"\n\t},\n\t_suggest_config:function(value){\n\t\tvar isobj = !isArray(value) && typeof value == \"object\" && !value.name; \n\t\tvar suggest = { view:\"checksuggest\", separator:this.config.separator, buttonText: this.config.buttonText, button: this.config.button };\n\n\t\tif (this._settings.optionWidth)\n\t\t\tsuggest.width = this._settings.optionWidth;\n\t\telse\n\t\t\tsuggest.fitMaster = true;\n\n\t\tif (isobj)\n\t\t\textend(suggest, value, true);\n\n\t\tvar view = ui(suggest);\n\t\tvar list = view.getList();\n\t\tif (typeof value == \"string\")\n\t\t\tlist.load(value);\n\t\telse if (!isobj)\n\t\t\tlist.parse(value);\n\n\t\tview.attachEvent(\"onShow\",function(){\n\t\t\tview.setValue($$(view._settings.master).config.value);\n\t\t});\n\n\t\treturn view;\n\t},\n\n\t$setValue:function(value){\n\t\tif (!this._rendered_input) return;\n\t\tvar popup = this.getPopup();\n\t\tvar text = \"\";\n\t\tif(popup){\n\t\t\ttext = popup.setValue(value);\n\t\t\tif(typeof text == \"object\"){\n\t\t\t\ttext = text.join(this.config.separator+\" \");\n\t\t\t}\n\n\t\t}\n\t\tthis._settings.text = text;\n\n\t\tvar node = this.getInputNode();\n\t\tnode.innerHTML = text || this._get_div_placeholder();\n\t},\n\tgetValue:function(){\n\t\treturn this._settings.value||\"\";\n\t},\n};\n\neditors.multiselect = extend({\n\tpopupType:\"multiselect\"\n}, editors.richselect);\n\ntype(list.view, {\n\tname:\"multilist\",\n\ttemplateStart:template(\"<div \"+/*@attr*/\"webix_l_id\"+\"=\\\"#!id#\\\" class=\\\"{common.classname()}\\\" style=\\\"width:{common.widthSize()}; height:{common.heightSize()}; overflow:hidden;\\\" {common.aria()}>\")\n}, \"default\");\n\ntype(list.view, {\n\tname:\"checklist\",\n\ttemplateStart:template(\"<div \"+/*@attr*/\"webix_l_id\"+\"=\\\"#!id#\\\" {common.aria()} class=\\\"{common.classname()}\\\" style=\\\"width:{common.widthSize()}; height:{common.heightSize()}; overflow:hidden; white-space:nowrap;\\\">{common.checkbox()}\"),\n\tcheckbox: function(obj){\n\t\tvar icon = (obj.$checked ? \"wxi-checkbox-marked\" : \"wxi-checkbox-blank\");\n\t\treturn \"<span role='checkbox' tabindex='-1' aria-checked='\"+(obj.$checked?\"true\":\"false\")+\"' class='webix_icon \"+icon+\"'></span>\";\n\t},\n\taria:function(obj){\n\t\treturn \"role='option' tabindex='-1' \"+(obj.$checked?\"aria-selected='true'\":\"\");\n\t},\n\ttemplate: template(\"#value#\")\n}, \"default\");\n\nconst view = protoUI(api,  richselect.view);\nexport default {api, view};","import richselect from \"../views/richselect\";\nimport {protoUI, ui, $$} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\nimport {_to_array, copy, isArray, extend, uid, delay, isUndefined} from \"../webix/helpers\";\nimport popup from \"../views/popup\";\nimport base from \"../views/view\";\nimport i18n from \"../webix/i18n\";\nimport {_event} from \"../webix/htmlevents\";\nimport template from \"../webix/template\";\n\n\nconst api = {\n\tname:\"multicombo\",\n\t$cssName:\"text\",\n\tdefaults:{\n\t\tkeepText: false,\n\t\tseparator:\",\",\n\t\ticon: false,\n\t\ticonWidth: 0,\n\t\ttagMode: true,\n\t\ttagTemplate: function(values){\n\t\t\treturn (values.length?values.length+\" item(s)\":\"\");\n\t\t},\n\t\ttemplate:function(obj,common){\n\t\t\treturn common._render_value_block(obj, common);\n\t\t}\n\t},\n\t$init:function(){\n\t\tthis.$view.className += \" webix_multicombo\";\n\n\t\tthis.attachEvent(\"onBeforeRender\",function(){\n\t\t\tif(!this._inputHeight)\n\t\t\t\tthis._inputHeight = $active.inputHeight;\n\t\t\treturn true;\n\t\t});\n\t\tthis.attachEvent(\"onAfterRender\", function(){\n\t\t\tthis._last_size = null;\n\t\t});\n\t},\n\n\ton_click: {\n\t\t\"webix_multicombo_delete\": function(e,view,node){\n\t\t\tvar value;\n\t\t\tif(!this._settings.readonly && node && (value = node.parentNode.getAttribute(\"optvalue\")))\n\t\t\t\tthis._removeValue(value);\n\t\t\treturn false;\n\t\t},\n\t\t\"webix_inp_label\": function(e){this._ignoreLabelClick(e);},\n\t\t\"webix_inp_top_label\": function(e){this._ignoreLabelClick(e);}\n\t},\n\t_onBlur:function(){\n\t\tvar value = this.getInputNode().value;\n\t\t//blurring caused by clicks in the suggest list cannot affect new values\n\t\tif(value && this._settings.newValues && new Date()-(this.getPopup()._click_stamp ||0)>100){\n\t\t\tthis._addNewValue(value);\n\t\t}\n\n\t\tif (!this._settings.keepText)\n\t\t\tthis._inputValue = \"\";\n\t\tthis.refresh();\n\t},\n\t_removeValue: function(value){\n\t\tvar values = this._settings.value;\n\t\tvar suggest = $$(this.config.suggest);\n\t\tif(typeof values == \"string\")\n\t\t\tvalues = values.split(this._settings.separator);\n\t\tvalues = _to_array(copy(values));\n\t\tvalues.remove(value);\n\n\t\tthis.setValue(values.join(this._settings.separator));\n\t\tif(suggest && suggest._settings.selectAll) {\n\t\t\tsuggest.getBody()._cells[0].setValue(0);\n\t\t}\n\t},\n\t_addValue: function(newValue){\n\t\tvar suggest = $$(this.config.suggest);\n\t\tvar list = suggest.getList();\n\t\tvar item = list.getItem(newValue);\n\n\t\tif(item){\n\t\t\tvar values = suggest.getValue();\n\t\t\tif(values && typeof values == \"string\")\n\t\t\t\tvalues = values.split(suggest.config.separator);\n\t\t\tvalues = _to_array(values||[]);\n\t\t\tif(values.find(newValue)<0){\n\t\t\t\tvalues.push(newValue);\n\t\t\t\tsuggest.setValue(values);\n\t\t\t\tthis.setValue(suggest.getValue());\n\t\t\t}\n\t\t}\n\t},\n\t_addNewValue: function(value){\n\t\tvar suggest = $$(this.config.suggest);\n\t\tvar list = suggest.getList();\n\t\tvar id;\n\t\tvalue = value.replace(/^\\s+|\\s+$/g,\"\");\n\n\t\tif(value){\n\t\t\tfor(var i in list.data.pull)\n\t\t\t\tif(suggest.getItemText(i) == value) id = i;\n\t\t}\n\n\t\tif(!id && value) id = list.add({id: value, value: value});\n\n\t\tthis._addValue(id);\n\t},\n\t_suggest_config:function(value){\n\t\tvar isObj = !isArray(value) && typeof value == \"object\" && !value.name,\n\t\t\tsuggest = { view:\"checksuggest\", separator:this.config.separator, buttonText: this.config.buttonText, button: this.config.button },\n\t\t\tcombo = this;\n\t\t\n\t\tif (isObj){\n\t\t\textend(suggest, value, true);\n\t\t}\n\t\tif (!suggest.width && this._settings.optionWidth){\n\t\t\textend(suggest, {width:this._settings.optionWidth, fitMaster: false}, true);\n\t\t}\n\t\tsuggest.width = suggest.fitMaster || isUndefined(suggest.fitMaster) ? 0 : suggest.width;\n\n\t\tvar view = ui(suggest);\n\t\tif(!suggest.width)\n\t\t\tview.$customWidth = function(){\n\t\t\t\tthis.config.width = combo._get_input_width(combo._settings);\n\t\t\t};\n\t\tview.attachEvent(\"onBeforeShow\",function(node,mode, point){\n\t\t\tif(this._settings.master){\n\t\t\t\tthis.setValue($$(this._settings.master).config.value);\n\n\t\t\t\tif($$(this._settings.master).getInputNode().value || this.isVisible()){\n\t\t\t\t\tthis.getList().refresh();\n\t\t\t\t\tthis._dont_unfilter = true;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tthis.getList().filter();\n\n\t\t\t\tif(node.tagName && node.tagName.toLowerCase() == \"input\"){\n\t\t\t\t\tpopup.api.show.apply(this, [node.parentNode,mode, point]);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t});\n\n\t\tvar list = view.getList();\n\t\tif (typeof value == \"string\")\n\t\t\tlist.load(value);\n\t\telse if (!isObj)\n\t\t\tlist.parse(value);\n\n\t\t//prevent default show-hide logicfunction(){\n\t\tview._suggest_after_filter = function(){};\n\n\t\treturn view;\n\t},\n\t_render_value_block:function(obj, common){\n\t\tvar id, input, inputAlign,inputStyle, inputValue, inputWidth,\n\t\t\theight, html, label, list, message, padding, readOnly,  width,\n\t\t\tbottomLabel = \"\",\n\t\t\ttop =  this._settings.labelPosition == \"top\";\n\n\t\tid = \"x\"+uid();\n\t\twidth = common._get_input_width(obj);\n\t\tinputAlign = obj.inputAlign || \"left\";\n\n\t\theight = this._inputHeight - 2*$active.inputPadding -2;\n\n\t\tinputValue = (this._inputValue||\"\");\n\t\tlist = \"<ul class='webix_multicombo_listbox' style='line-height:\"+height+\"px'></ul>\";\n\n\t\tinputWidth = Math.min(width,(common._inputWidth||7));\n\n\t\tinputStyle = \"width: \"+inputWidth+\"px;height:\"+height+\"px;max-width:\"+(width-20)+\"px\";\n\n\t\treadOnly = obj.readonly?\" readonly \":\"\";\n\t\tinput = \"<input id='\"+id+\"' role='combobox' aria-multiline='true' aria-label='\"+template.escape(obj.label)+\"' tabindex='0' type='text' class='webix_multicombo_input' \"+readOnly+\" style='\"+inputStyle+\"' value='\"+inputValue+\"'/>\";\n\t\thtml = \"<div class='webix_inp_static' onclick='' style='line-height:\"+height+\"px;width: \" + width + \"px;  text-align: \" + inputAlign + \";height:auto' >\"+list+input +\"</div>\";\n\n\t\tlabel = common.$renderLabel(obj,id);\n\n\t\tpadding = this._settings.awidth - width - $active.inputPadding*2;\n\t\tmessage = (obj.invalid ? obj.invalidMessage : \"\") || obj.bottomLabel;\n\t\tif (message)\n\t\t\tbottomLabel =  \"<div class='webix_inp_bottom_label' style='width:\"+width+\"px;margin-left:\"+Math.max(padding,$active.inputPadding)+\"px;'>\"+message+\"</div>\";\n\n\t\tif (top)\n\t\t\treturn label+\"<div class='webix_el_box' style='width:\"+this._settings.awidth+\"px; '>\"+html+bottomLabel+\"</div>\";\n\t\telse\n\t\t\treturn \"<div class='webix_el_box' style='width:\"+this._settings.awidth+\"px; min-height:\"+this._settings.aheight+\"px;'>\"+label+html+bottomLabel+\"</div>\";\n\t},\n\t_getValueListBox: function(){\n\t\treturn this._getBox().getElementsByTagName(\"UL\")[0];\n\t},\n\n\t_set_inner_size: function(){\n\t\tvar popup = this.getPopup();\n\t\tif(popup){\n\n\t\t\tvar textArr = (popup ? popup.setValue(this._settings.value) : null);\n\t\t\tif(popup._toMultiValue)\n\t\t\t\tthis._settings.value = popup._toMultiValue(this._settings.value);\n\t\t\tvar html = \"\";\n\t\t\tvar listbox = this._getValueListBox();\n\t\t\tvar text = textArr && textArr.length;\n\t\t\tif(text){\n\t\t\t\tvar height = this._inputHeight - 2*$active.inputPadding - 8;\n\t\t\t\tvar values = this._settings.value;\n\t\t\t\tif(typeof values == \"string\")\n\t\t\t\t\tvalues = values.split(this._settings.separator);\n\n\t\t\t\tif(this._settings.tagMode){\n\t\t\t\t\tfor(var i=0; i < textArr.length;i++){\n\t\t\t\t\t\tvar content = \"<span>\"+textArr[i]+\"</span><span class='webix_multicombo_delete' role='button' aria-label='\"+i18n.aria.removeItem+\"'>x</span>\";\n\t\t\t\t\t\thtml += \"<li class='webix_multicombo_value' style='line-height:\"+height+\"px;' optvalue='\"+ values[i]+\"'>\"+content+\"</li>\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\thtml += \"<li class='webix_multicombo_tag' style='line-height:\"+height+\"px;'><span>\"+this._settings.tagTemplate(values)+\"</span></li>\";\n\t\t\t\t}\n\n\t\t\t}\n\t\t\tlistbox.innerHTML = html;\n\t\t\t// reset placeholder\n\t\t\tvar inp = this.getInputNode();\n\t\t\tif(this._settings.placeholder){\n\t\t\t\tif(text){\n\t\t\t\t\tinp.placeholder = \"\";\n\t\t\t\t\tif(!inp.value && inp.offsetWidth > 20)\n\t\t\t\t\t\tinp.style.width = \"20px\";\n\t\t\t\t}\n\t\t\t\telse if(!inp.value){\n\t\t\t\t\tinp.placeholder = this._settings.placeholder;\n\t\t\t\t\tinp.style.width = this._get_input_width(this._settings)+\"px\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!this._settings.tagMode && listbox.firstChild)\n\t\t\t\tinp.style.width = this._getMultiComboInputWidth() +\"px\";\n\t\t}\n\t\tthis._resizeToContent();\n\t},\n\t_focusAtEnd: function(inputEl){\n\t\tinputEl = inputEl||this.getInputNode();\n\t\tif (inputEl){\n\t\t\tif(inputEl.value.length){\n\t\t\t\tif (inputEl.createTextRange){\n\t\t\t\t\tvar FieldRange = inputEl.createTextRange();\n\t\t\t\t\tFieldRange.moveStart(\"character\",inputEl.value.length);\n\t\t\t\t\tFieldRange.collapse();\n\t\t\t\t\tFieldRange.select();\n\t\t\t\t}else if (inputEl.selectionStart || inputEl.selectionStart == \"0\") {\n\t\t\t\t\tvar elemLen = inputEl.value.length;\n\t\t\t\t\tinputEl.selectionStart = elemLen;\n\t\t\t\t\tinputEl.selectionEnd = elemLen;\n\t\t\t\t\tinputEl.focus();\n\t\t\t\t}\n\t\t\t}else{\n\t\t\t\tinputEl.focus();\n\t\t\t}\n\t\t}\n\t},\n\t_resizeToContent: function(){\n\t\tvar top = this._settings.labelPosition == \"top\";\n\t\tvar inputDiv = this._getInputDiv();\n\t\tvar inputHeight = Math.max(inputDiv.offsetHeight+ 2*$active.inputPadding, this._inputHeight);\n\n\t\tif(top)\n\t\t\tinputHeight += this._labelTopHeight;\n\n\t\tinputHeight += this._settings.bottomPadding ||0;\n\n\t\tvar sizes = this.$getSize(0,0);\n\n\t\tif(inputHeight != sizes[2]){\n\t\t\tvar cHeight = inputDiv.offsetHeight + (top?this._labelTopHeight:0);\n\n\t\t\tvar topView =this.getTopParentView();\n\t\t\tclearTimeout(topView._template_resize_timer);\n\t\t\ttopView._template_resize_timer = delay(function(){\n\n\t\t\t\tvar calcHeight = cHeight + 2*$active.inputPadding;\n\t\t\t\tif (this.config.height != calcHeight){\n\t\t\t\t\tthis.config.height = calcHeight;\n\t\t\t\t\tthis.resize();\n\t\t\t\t}\n\n\t\t\t\tif(this._typing){\n\t\t\t\t\tthis._focusAtEnd(this.getInputNode());\n\t\t\t\t\tthis._typing = false;\n\t\t\t\t}\n\t\t\t\tif(this._enter){\n\t\t\t\t\tif(!this._settings.keepText)\n\t\t\t\t\t\tthis.getInputNode().value = \"\";\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.getInputNode().select();\n\t\t\t\t\tthis._enter = false;\n\t\t\t\t}\n\t\t\t\tif(this.getPopup().isVisible()||this._typing){\n\t\t\t\t\tthis.getPopup().show(this._getInputDiv());\n\t\t\t\t}\n\n\t\t\t}, this);\n\t\t}\n\t\tif(this._enter){\n\t\t\tthis.getInputNode().select();\n\t\t}\n\t},\n\t_getInputDiv: function(){\n\t\tvar parentNode = this._getBox();\n\t\tvar nodes = parentNode.childNodes;\n\t\tfor(var i=0; i < nodes.length; i++){\n\t\t\tif(nodes[i].className && nodes[i].className.indexOf(\"webix_inp_static\")!=-1)\n\t\t\t\treturn nodes[i];\n\t\t}\n\t\treturn parentNode;\n\t},\n\tgetInputNode: function(){\n\t\treturn this._getBox().getElementsByTagName(\"INPUT\")[0];\n\t},\n\t$setValue:function(){\n\t\tif (this._rendered_input)\n\t\t\tthis._set_inner_size();\n\t},\n\tgetValue:function(config){\n\t\tif(typeof config == \"object\" && config.options)\n\t\t\treturn this._getSelectedOptions();\n\n\t\tvar value = this._settings.value;\n\t\tif (!value) return \"\";\n\t\treturn (typeof value != \"string\"?value.join(this._settings.separator):value);\n\t},\n\tgetText:function(){\n\t\tvar value = this._settings.value;\n\t\tif(!value) return \"\";\n\t\t\n\t\tif(typeof value == \"string\")\n\t\t\tvalue = value.split(this._settings.separator);\n\n\t\tvar text = [];\n\t\tfor(var i = 0; i<value.length; i++)\n\t\t\ttext.push(this.getPopup().getItemText(value[i]));\n\t\treturn text.join(this._settings.separator);\n\t},\n\t_getSelectedOptions: function(){\n\t\tvar i, item, popup,\n\t\t\toptions = [],\n\t\t\tvalue = this._settings.value;\n\n\t\tif (!value) return [];\n\n\t\tif(typeof value == \"string\")\n\t\t\tvalue = value.split(this._settings.separator);\n\n\t\tpopup = this.getPopup();\n\n\t\tfor(i = 0; i < value.length; i++){\n\t\t\titem = popup.getList().getItem(value[i]) || (popup._valueHistory?popup._valueHistory[value[i]]:null);\n\t\t\tif(item)\n\t\t\t\toptions.push(item);\n\t\t}\n\n\t\treturn options;\n\t},\n\t$setSize:function(x,y){\n\t\tvar config = this._settings;\n\t\tif(base.api.$setSize.call(this,x,y)){\n\t\t\tif (!x || !y) return;\n\t\t\tif (config.labelPosition == \"top\"){\n\t\t\t\tconfig.labelWidth = 0;\n\t\t\t}\n\t\t\tthis.render();\n\t\t}\n\t},\n\t_calcInputWidth: function(value){\n\t\tvar tmp = document.createElement(\"span\");\n\t\ttmp.className = \"webix_multicombo_input\";\n\t\ttmp.style.visibility = \"visible\";\n\t\ttmp.style.height = \"0px\";\n\t\ttmp.innerHTML = value.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\");\n\t\tdocument.body.appendChild(tmp);\n\t\tvar width = tmp.offsetWidth+10;\n\t\tdocument.body.removeChild(tmp);\n\t\treturn width;\n\t},\n\t_getMultiComboInputWidth: function(){\n\t\tconst listbox = this._getValueListBox();\n\t\tconst width = listbox.offsetWidth - listbox.firstChild.offsetWidth;\n\t\treturn (width <= 25)? listbox.offsetWidth-12: width-15;\n\t},\n\t_init_onchange:function(){\n\t\t// input focus and focus styling\n\t\t_event(this._getBox(),\"click\",function(){\n\t\t\tthis.getInputNode().focus();\n\t\t},{bind:this});\n\t\t_event(this.getInputNode(),\"focus\",function(){\n\t\t\tif(this._getBox().className.indexOf(\"webix_focused\") == -1)\n\t\t\t\tthis._getBox().className += \" webix_focused\";\n\n\t\t},{bind:this});\n\t\t_event(this.getInputNode(),\"blur\",function(){\n\t\t\tthis._getBox().className = this._getBox().className.replace(\" webix_focused\",\"\");\n\t\t},{bind:this});\n\n\t\t// need for clear click (\"x\") in IE\n\t\t_event(this.getInputNode(),\"input\",function(){\n\t\t\tif(!this.getInputNode().value && this._inputValue){\n\t\t\t\tthis.getInputNode().style.width = \"20px\";\n\t\t\t\tthis._inputWidth = 20;\n\n\t\t\t\tthis._inputValue = \"\";\n\t\t\t\tthis._typing = true;\n\n\t\t\t\tthis.getPopup().show(this._getInputDiv());\n\t\t\t\tthis._resizeToContent();\n\t\t\t}\n\t\t},{bind:this});\n\t\t// resize\n\t\t_event(this.getInputNode(),\"keyup\",function(e){\n\t\t\tvar inp = this.getInputNode();\n\t\t\tvar calcWidth, width;\n\n\t\t\te = (e||event);\n\t\t\t// to show placeholder\n\t\t\tif(this._settings.placeholder && !this._settings.value && !inp.value)\n\t\t\t\twidth = this._get_input_width(this._settings);\n\t\t\telse{\n\t\t\t\twidth = calcWidth = this._calcInputWidth(inp.value);\n\t\t\t\tif(!this._settings.tagMode && this._getValueListBox().firstChild)\n\t\t\t\t\twidth = this._getMultiComboInputWidth();\n\t\t\t}\n\n\t\t\tinp.style.width = width +\"px\";\n\n\t\t\tif(calcWidth!=this._inputWidth){\n\t\t\t\tif(this._settings.keepText || e.keyCode !=13){\n\t\t\t\t\tthis._inputValue = inp.value;\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tthis._inputValue = false;\n\t\t\t\t}\n\t\t\t\tthis._typing = true;\n\n\t\t\t\tif(this._inputWidth)\n\t\t\t\t\tthis.getPopup().show(this._getInputDiv());\n\n\t\t\t\tthis._inputWidth = calcWidth||width;\n\t\t\t\tthis._resizeToContent();\n\t\t\t}\n\t\t\telse if(this._windowHeight != this.getPopup().$height){\n\t\t\t\tthis.getPopup().show(this._getInputDiv());\n\t\t\t}\n\n\t\t\tif(inp.value.indexOf(this._settings.separator) > -1 && this._settings.tagMode){\n\t\t\t\tvar newValue = inp.value.replace(this._settings.separator, \"\");\n\t\t\t\tif (newValue){\n\t\t\t\t\tif (this._settings.newValues){\n\t\t\t\t\t\tthis._enter = true;\n\t\t\t\t\t\tthis._addNewValue(newValue);\n\t\t\t\t\t}\t\n\t\t\t\t\telse{\n\t\t\t\t\t\tvar newId = this.getPopup().getItemId(newValue);\n\t\t\t\t\t\tif (newId)\n\t\t\t\t\t\t\tthis._addValue(newId);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(this._settings.keepText){\n\t\t\t\t\tthis._inputValue = newValue;\n\t\t\t\t\tinp.value = newValue;\n\t\t\t\t\tthis._enter = true;\n\t\t\t\t\tthis._typing = true;\n\t\t\t\t\tthis._resizeToContent();\n\t\t\t\t} else{\n\t\t\t\t\tinp.value = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},{bind:this});\n\n\t\t// remove the last value on Backspace click\n\t\t_event(this.getInputNode(),\"keydown\",function(e){\n\t\t\tthis._enter = false;\n\t\t\tif (this.isVisible()){\n\t\t\t\te = (e||event);\n\t\t\t\tvar node = this._getValueListBox().lastChild;\n\t\t\t\tthis._windowHeight = this.getPopup().$height;\n\t\t\t\tif(e.keyCode == 8 && node){\n\t\t\t\t\tif(!this.getInputNode().value && ((new Date()).valueOf() - (this._backspaceTime||0) > 100)){\n\t\t\t\t\t\tthis._typing = true;\n\t\t\t\t\t\tthis._removeValue(node.getAttribute(\"optvalue\"));\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tthis._backspaceTime = (new Date()).valueOf();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(e.keyCode == 13 || e.keyCode == 9){\n\t\t\t\t\tvar input = this.getInputNode();\n\t\t\t\t\tvar id = \"\";\n\t\t\t\t\tvar suggest = $$(this._settings.suggest);\n\t\t\t\t\tvar list = suggest.getList();\n\t\t\t\t\t// if no selected options\n\n\t\t\t\t\tif(!list.getSelectedId()){\n\t\t\t\t\t\tif (input.value)\n\t\t\t\t\t\t\tid = suggest.getSuggestion(input.value);\n\n\t\t\t\t\t\tif(this._settings.newValues){\n\t\t\t\t\t\t\tif(e.keyCode == 13)\n\t\t\t\t\t\t\t\tthis._enter = true;\n\t\t\t\t\t\t\tthis._addNewValue(input.value);\n\t\t\t\t\t\t\tif(this._settings.keepText)\n\t\t\t\t\t\t\t\tthis._inputValue = input.value;\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tinput.value = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if(id){\n\t\t\t\t\t\t\tif(e.keyCode == 9){\n\t\t\t\t\t\t\t\tthis._typing = false;\n\t\t\t\t\t\t\t\tthis._inputValue = \"\";\n\t\t\t\t\t\t\t\tthis._inputWidth = 10;\n\t\t\t\t\t\t\t\tinput.value = \"\";\n\t\t\t\t\t\t\t\tthis._addValue(id);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse{\n\t\t\t\t\t\t\t\tthis._enter = true;\n\t\t\t\t\t\t\t\tthis._addValue(id);\n\t\t\t\t\t\t\t\tif(this._settings.keepText)\n\t\t\t\t\t\t\t\t\tthis._inputValue = input.value;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tinput.value = \"\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t\tif(e.keyCode == 13){\n\t\t\t\t\t\tthis._enter = true;\n\t\t\t\t\t\tthis._typing = true;\n\t\t\t\t\t\tif(this._settings.keepText)\n\t\t\t\t\t\t\tthis._inputValue = input.value;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tinput.value = \"\";\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t},{bind:this});\n\t\t$$(this._settings.suggest).linkInput(this);\n\t}\n};\n\n\nconst view = protoUI(api,  richselect.view);\nexport default {api, view};","import text from \"../views/text\";\nimport {preventEvent, addCss, removeCss, pos as getPos, offset} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\nimport env from \"../webix/env\";\nimport {uid, bind, isArray, copy} from \"../webix/helpers\";\nimport {_event, event, eventRemove} from \"../webix/htmlevents\";\nimport template from \"../webix/template\";\n\n\n// #include ui/inputs.js\n\nconst api = {\n\tname:\"slider\",\n\t$touchCapture:true,\n\tdefaults:{\n\t\tmin:0,\n\t\tmax:100,\n\t\tvalue:50,\n\t\tstep:1,\n\t\ttitle:false,\n\t\tmoveTitle:true,\n\t\ttemplate:function(obj, common){\n\t\t\tvar id = common._handle_id = \"x\" +uid();\n\t\t\tvar html = \"\";\n\t\t\tvar title = \"<div class='webix_slider_title\"+(obj.moveTitle?\" webix_slider_move\":\"\")+\"'\"+(!obj.moveTitle && obj.vertical?(\" style='line-height:\"+(obj.aheight-obj.inputPadding*2)+\"px;'\"):\"\")+\">&nbsp;</div>\";\n\t\t\tvar left = \"<div class='webix_slider_left'>&nbsp;</div>\";\n\t\t\tvar right = \"<div class='webix_slider_right'></div>\";\n\t\t\tvar handle = \"<div class='webix_slider_handle' \"+/*@attr*/\"webix_disable_drag\"+\"='true' role='slider' aria-label='\"+obj.label+(obj.title?(\" \"+obj.title(obj)):\"\")+\"' aria-valuemax='\"+obj.max+\"' aria-valuemin='\"+obj.min+\"' aria-valuenow='\"+obj.value+\"' tabindex='0' id='\"+id+\"'>&nbsp;</div>\";\n\t\t\t\n\t\t\tif(obj.vertical) html =  \"<div class='webix_slider_box'>\"+right+left+handle+\"</div>\"+title;\n\t\t\telse html = title+\"<div class='webix_slider_box'>\"+left+right+handle+\"</div>\";\n\t\t\treturn common.$renderInput(obj, html, id);\n\t\t}\n\t},\n\ttype_setter:function(type){\n\t\tthis._viewobj.className += \" webix_slider_\"+type;\n\t},\n\ttitle_setter:function(value){\n\t\tif (typeof value == \"string\")\n\t\t\treturn template(value);\n\t\treturn value;\n\t},\n\t_get_slider_handle:function(){\n\t\treturn this.$view.querySelector(\".webix_slider_handle\");\n\t},\n\t_set_inner_size:function(){\n\t\tvar handle = this._get_slider_handle();\n\t\tvar config = this._settings;\n\n\t\tif(handle){ //view is rendered for sure\n\t\t\tvar size = config.vertical?this._content_height:this._get_input_width(config); //width or height\n\t\t\tvar value = config.value%config.step?(Math.round(config.value/config.step)*config.step):config.value;\n\t\t\tvar max = config.max - config.min;\n\t\t\t\n\t\t\tvalue =  Math.max(Math.min(value,config.max),config.min);\n\t\t\tvalue = config.vertical?(max-(value-config.min)):(value-config.min);\n\t\t\t\n\t\t\t//top or left\n\t\t\tvar corner1 = Math.ceil((size - 2 * this._sliderPadding) * value / max);\n\t\t\t//bottom or right\n\t\t\tvar corner2 = size - 2 * this._sliderPadding - corner1;\n\n\t\t\tvar cornerStr = config.vertical?\"top\":\"left\";\n\t\t\tvar sizeStr = config.vertical?\"height\":\"width\";\n\n\t\t\thandle.style[cornerStr] = this._sliderPadding + corner1 - this._sliderHandleWidth / 2 + \"px\";\n\t\t\thandle.parentNode.style[sizeStr] = size+\"px\";\n\n\t\t\t//1px border\n\t\t\tcorner2= Math.min(Math.max(corner2, 2 * this._sliderBorder), size - this._sliderPadding * 2 - 2 * this._sliderBorder);\n\t\t\tcorner1 = Math.min(Math.max(corner1, 2 * this._sliderBorder), size - this._sliderPadding * 2 - 2 * this._sliderBorder);\n\n\t\t\t//width for left/top and right/bottom bars\n\t\t\tvar part = handle.previousSibling;\n\t\t\tpart.style[sizeStr] = corner2 + \"px\";\n\t\t\tvar last = part.previousSibling;\n\t\t\tlast.style[sizeStr] = corner1 + \"px\";\n\n\t\t\tthis._set_title(handle, corner1, corner2, cornerStr);\n\t\t}\n\t},\n\t_set_title:function(handle, corner1, corner2, cornerStr){\n\t\tvar config = this._settings;\n\t\tif (this._settings.title){\n\t\t\tvar title = handle.parentNode[config.vertical?\"nextSibling\":\"previousSibling\"];\n\t\t\ttitle.innerHTML = this._settings.title(this._settings, this);\n\t\t\t\n\t\t\tif(this._settings.moveTitle){\n\t\t\t\tvar pos = 0;\n\t\t\t\tif(config.vertical) pos = corner1+2 * this._sliderBorder-this._sliderHandleWidth/2;\n\t\t\t\telse{\n\t\t\t\t\tvar half = title.clientWidth/2;\n\t\t\t\t\tvar pos1 = half>corner1 ? (half-corner1-2*this._sliderBorder): 0;//left/top text is to large\n\t\t\t\t\tvar pos2 = half>corner2 ? (half-corner2-2*this._sliderBorder-this._sliderHandleWidth/2): 0;//right/bottom text is too large\n\t\t\t\t\tpos = this._sliderPadding + corner1 - half + pos1 - pos2;\n\t\t\t\t}    \n\t\t\t\ttitle.style[cornerStr] = pos+ \"px\";\n\t\t\t}\n\t\t}\n\t},\n\t_set_value_now:function(){\n\t\tthis._get_slider_handle().setAttribute(\"aria-valuenow\", this._settings.value);\n\t},\n\trefresh:function(){\n\t\tvar handle =  this._get_slider_handle();\n\t\tif(handle){\n\t\t\tthis._set_value_now();\n\t\t\tif(this._settings.title)\n\t\t\t\thandle.setAttribute(\"aria-label\", this._settings.label+\" \"+this._settings.title(this._settings, this));\n\n\t\t\tthis._set_inner_size();\n\t\t}\n\t},\n\tvalue_setter:function(value){\n\t\treturn this.$prepareValue(value);\n\t},\n\t$setValue:function(){\n\t\tthis.refresh();\n\t},\n\t$getValue:function(){\n\t\treturn this._settings.value;\n\t},\n\t$prepareValue:function(value){\n\t\tvalue = parseFloat(value);\n\t\treturn isNaN(value)?0:value;\n\t},\n\t$init:function(config){\n\t\tif(env.touch)\n\t\t\tthis.attachEvent(\"onTouchStart\" , bind(this._on_mouse_down_start, this));\n\t\telse\n\t\t\t_event(this._viewobj, \"mousedown\", bind(this._on_mouse_down_start, this));\n\n\t\t_event( this.$view, \"keydown\", bind(this._handle_move_keyboard, this));\n\n\t\tif(config.vertical){\n\t\t\tconfig.height = config.height || $active.vSliderHeight;\n\t\t\tthis._viewobj.className += \" webix_slider_vertical\";\n\t\t\tthis._sliderPadding = $active.vSliderPadding;\n\t\t}\n\t},\n\t$skin: function(){\n\t\ttext.api.$skin.call(this);\n\n\t\tthis._sliderHandleWidth = $active.sliderHandleWidth; //8 - width of handle / 2\n\t\tthis._sliderPadding = $active.sliderPadding;//10 - padding of webix_slider_box ( 20 = 10*2 )\n\t\tthis._sliderBorder = $active.sliderBorder;//1px border\n\t},\n\t_handle_move_keyboard:function(e){\n\t\tvar code = e.keyCode, c = this._settings, value = c.value;\n\n\t\tif(code>32 && code <41){\n\t\t\tpreventEvent(e);\n\n\t\t\tvar trg = e.target || e.srcElement;\n\t\t\tvar match =  /webix_slider_handle_(\\d)/.exec(trg.className);\n\t\t\tthis._activeIndex = match?parseInt(match[1],10):-1;\n\t\t\tif(match)\n\t\t\t\tvalue = c.value[this._activeIndex];\n\n\t\t\tvalue = value<c.min ? c.min:(value>c.max ? c.max : value);\n\t\t\t\n\t\t\tif(code === 36) value = c.min;\n\t\t\telse if(code === 35) value = c.max;\n\t\t\telse{\n\t\t\t\tvar inc = (code === 37 || code ===40 || code === 34)?-1:1;\n\t\t\t\tif(code === 33 || code === 34 || c.step>1)\n\t\t\t\t\tinc = inc*c.step;\n\t\t\t\tvalue = value*1+inc;\n\t\t\t}\n\n\t\t\tif(match){\n\t\t\t\tvar other = c.value[this._activeIndex?0:1];\n\t\t\t\tvalue = ((this._activeIndex && value <= other) || (!this._activeIndex && value >= other )) ? other : value;\n\t\t\t}\n\n\t\t\tif(value>=c.min && value <=c.max){\n\t\t\t\tif(match){\n\t\t\t\t\tvar temp =[];\n\t\t\t\t\tfor(var i=0; i<c.value.length; i++)\n\t\t\t\t\t\ttemp[i] = i === this._activeIndex ? value : c.value[i];\n\t\t\t\t\tvalue = temp;\n\t\t\t\t}\n\t\t\t\tthis.setValue(value);\n\t\t\t\tthis._activeIndex = -1;\n\t\t\t}\n\t\t}\n\t},\n\t_on_mouse_down_start:function(e){\n\t\tif (this._handle_drag_events) return;\n\n\t\tvar trg = e.target || e.srcElement;\n\t\tif(this._mouse_down_process){\n\t\t\tthis._mouse_down_process(e);\n\t\t}\n\n\t\tvar value = this._settings.value;\n\t\tif(isArray(value))\n\t\t\tvalue = copy(value);\n\n\t\tif (trg.className.indexOf(\"webix_slider_handle\")!=-1){\n\t\t\tthis._start_value = value;\n\t\t\treturn this._start_handle_dnd.apply(this,arguments);\n\t\t} else if (trg.className.indexOf(\"webix_slider\") != -1){\n\t\t\tthis._start_value = value;\n\n\t\t\tthis._settings.value = this._get_value_from_event.apply(this,arguments);\n\n\t\t\tthis._start_handle_dnd(e);\n\t\t}\n\t},\n\t_start_handle_dnd:function(){\n\t\tif(env.touch){\n\t\t\tthis._handle_drag_events = [\n\t\t\t\tthis.attachEvent(\"onTouchMove\" , bind(this._handle_move_process, this)),\n\t\t\t\tthis.attachEvent(\"onTouchEnd\"  , bind(this._handle_move_stop, this))\n\t\t\t];\n\t\t}\n\t\telse\n\t\t\tthis._handle_drag_events = [\n\t\t\t\tevent(document.body, \"mousemove\", bind(this._handle_move_process, this)),\n\t\t\t\tevent(window, \"mouseup\", bind(this._handle_move_stop, this))\n\t\t\t];\n\t\taddCss(document.body,\"webix_noselect\");\n\t},\n\t_handle_move_stop:function(){\n\t\t//detach event handlers\n\t\tif(this._handle_drag_events){\n\t\t\tif(env.touch){\n\t\t\t\tthis.detachEvent(this._handle_drag_events[0]);\n\t\t\t\tthis.detachEvent(this._handle_drag_events[1]);\n\t\t\t}\n\t\t\telse{\n\t\t\t\teventRemove(this._handle_drag_events[0]);\n\t\t\t\teventRemove(this._handle_drag_events[1]);\n\t\t\t}\n\t\t\tthis._handle_drag_events = null;\n\t\t}\n\n\t\tremoveCss(document.body,\"webix_noselect\");\n\n\t\tvar value = this._settings.value;\n\n\t\tif(isArray(value))\n\t\t\tvalue = copy(value);\n\n\t\tthis._settings.value = this._start_value;\n\t\tthis.setValue(value);\n\n\t\tthis._get_slider_handle(this._activeIndex).focus();\n\t\tthis._activeIndex = -1;\n\t},\n\t_handle_move_process:function(){\n\t\tthis._settings.value = this._get_value_from_event.apply(this,arguments);\n\t\tthis.refresh();\n\t\tthis.callEvent(\"onSliderDrag\", []);\n\t},\n\t_get_value_from_event:function(event,touchContext){\n\t\t// this method takes 2 arguments in case of touch env\n\t\tvar pos = 0;\n\t\tvar ax = this._settings.vertical?\"y\":\"x\";\n\t\tif(env.touch)\n\t\t\tpos = touchContext?touchContext[ax]: event[ax];\n\t\telse\n\t\t\tpos = getPos(event)[ax];\n\t\treturn this._get_value_from_pos(pos);\n\t},\n\t_get_value_from_pos:function(pos){\n\t\tvar config = this._settings;\n\t\tvar max = config.max - config.min;\n\t\tvar ax = config.vertical?\"y\":\"x\";\n\n\t\t//top or left depending on slider type\n\t\tvar corner = offset(this._get_slider_handle().parentNode)[ax] + this._sliderPadding;\n\t\t//height or width depending on slider type\n\t\tvar size = (config.vertical?this._content_height:this._get_input_width(config))-2*this._sliderPadding;\n\n\t\tvar newvalue = (size?(pos-corner) * max / size:0);\n\t\tif(config.vertical)\n\t\t\tnewvalue = max-newvalue;\n\t\tnewvalue = Math.round((newvalue + 1*config.min)/config.step) * config.step;\n\t\treturn Math.max(Math.min(newvalue, config.max), config.min);\n\t},\n\t_init_onchange:function(){} //need not ui.text logic\n};\n\n\nconst view = protoUI(api,  text.view);\nexport default {api, view};","import slider from \"../views/slider\";\nimport {offset} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport {uid, isArray, isUndefined} from \"../webix/helpers\";\n\n\n// #include ui/slider.js\n\nconst api = {\n\tname:\"rangeslider\",\n\t$cssName:\"slider webix_rangeslider\",\n\tdefaults:{\n\t\tseparator: \",\",\n\t\tvalue: [20,80],\n\t\ttemplate:function(obj, common){\n\t\t\tvar id = \"x\" + uid();\n\t\t\tcommon._handle_id = [id+\"_0\",id+\"_1\"];\n\n\t\t\tvar aria = \"role='slider' aria-label='\"+obj.label+(obj.title?(\" \"+obj.title(obj)):\"\")+\"' aria-valuemax='\"+obj.max+\"' aria-valuemin='\"+obj.min+\"' tabindex='0'\";\n\t\t\tvar handles = \"<div class='webix_slider_handle webix_slider_handle_0' \"+/*@attr*/\"webix_disable_drag\"+\"='true' id='\"+common._handle_id[0]+\"' \"+aria+\" aria-valuenow='\"+obj.value[0]+\"'>&nbsp;</div>\";\n\t\t\thandles += \"<div class='webix_slider_handle webix_slider_handle_1' \"+/*@attr*/\"webix_disable_drag\"+\"='true' id='\"+common._handle_id[1]+\"' \"+aria+\" aria-valuenow='\"+obj.value[1]+\"'>&nbsp;</div>\";\n\n\t\t\tvar title = \"<div class='webix_slider_title\"+(obj.moveTitle?\" webix_slider_move\":\"\")+\"'\"+(!obj.moveTitle && obj.vertical?(\" style='line-height:\"+(obj.aheight-common._sliderPadding-obj.inputPadding*2)+\"px;'\"):\"\")+\">&nbsp;</div>\";\n\t\t\tif(obj.moveTitle)\n\t\t\t\ttitle = \"<div class='webix_slider_title_box'>\"+(title+title)+\"</div>\";\n\t\t\t\n\t\t\tvar parts = \"<div class='webix_slider_right'>&nbsp;</div><div class='webix_slider_left'></div>\";\n\t\t\tvar html = \"\";\n\t\t\tif(obj.vertical) html = \"<div class='webix_slider_box'>\"+parts+handles+\"</div>\"+title;\n\t\t\telse html = title+\"<div class='webix_slider_box'>\"+parts+handles+\"</div>\";\n\t\t\treturn common.$renderInput(obj, html, id);\n\t\t}\n\t},\n\t$prepareValue:function(value){\n\t\tif(!isArray(value)){\n\t\t\tvalue = (value||\"\").toString().split(this._settings.separator);\n\t\t}\n\t\tvalue[0] = parseFloat(value[0]);\n\t\tvalue[0] = isNaN(value[0])?0:value[0];\n\t\tif(value.length < 2)\n\t\t\tvalue[1] = value[0];\n\t\telse{\n\t\t\tvalue[1] = parseFloat(value[1]);\n\t\t\tvalue[1] = isNaN(value[1])?0:value[1];\n\t\t}\n\t\tif(value[0]>value[1]) [value[0], value[1]] = [value[1], value[0]];\n\t\treturn value;\n\t},\n\t_get_slider_handle:function(index){\n\t\tindex = index && index>=0?index:0;\n\t\treturn this.$view.querySelector(\".webix_slider_handle_\"+(index||0));\n\t},\n\t_get_left_pos: function(size,index){\n\t\tvar config, max, value;\n\n\t\tconfig = this._settings;\n\t\tmax = config.max - config.min;\n\t\tvalue = config.value[index]%config.step?(Math.round(config.value[index]/config.step)*config.step):config.value[index];\n\t\tvalue =  Math.max(Math.min(value,config.max),config.min);\n\t\treturn Math.ceil((size - this._sliderPadding*2) * (value-config.min) / max);\n\t},\n\t_set_left_pos:function(size, left, vertical){\n\t\tvar pos = this._sliderPadding + left - (this._sliderHandleWidth / 2 *(vertical?-1:1));\n\t\tpos = vertical? size-pos:pos;\n\t\treturn pos+\"px\";\n\t},\n\t_set_value_pos:function(size, left, length, vertical){\n\t\tvar pos = left+this._sliderPadding + 2 * this._sliderBorder;\n\t\tif(vertical) pos = size-pos-length;\n\t\treturn pos + \"px\";\n\t},\n\t_set_inner_size:function(){\n\t\tvar config, handle0, handle1,\n\t\t\tleft0, left1, max, length, parentBox,\n\t\t\tsizeStr, size, cornerStr;\n\n\t\thandle0 =this._get_slider_handle(0);\n\t\thandle1 = this._get_slider_handle(1);\n\t\tconfig = this._settings;\n\n\t\tif(!isArray(config.value)){\n\t\t\tthis.define(\"value\", config.value);\n\t\t}\n\n\t\tif (handle0){\n\t\t\tsizeStr = config.vertical?\"height\":\"width\";\n\t\t\tcornerStr = config.vertical?\"top\":\"left\";\n\t\t\t\n\t\t\tsize = config.vertical?this._content_height:this._get_input_width(config);\n\t\t\tmax = size - this._sliderPadding * 2 - 2 * this._sliderBorder;\n\t\t\t\n\t\t\tleft0 = this._get_left_pos(size, 0);\n\t\t\tleft1 = this._get_left_pos(size, 1);\n\t\t\tlength = left1 - left0;\n\n\t\t\thandle0.style[cornerStr] = this._set_left_pos(size, left0, config.vertical);\n\t\t\thandle1.style[cornerStr] = this._set_left_pos(size, left1, config.vertical);\n\t\t\t\n\t\t\tparentBox = handle0.parentNode;\n\t\t\tparentBox.style[sizeStr] = size+\"px\";\n\t\t\tparentBox.firstChild.style[sizeStr] = max + \"px\";\n\t\t\tparentBox.childNodes[1].style[sizeStr] = length + \"px\";\n\t\t\tparentBox.childNodes[1].style[cornerStr] = this._set_value_pos(size, left0, length, config.vertical);\n\n\t\t\tthis._set_title(handle0, [left0, left1], max, cornerStr);\n\t\t}\n\t},\n\t_title_hidden:0,\n\t_hide_title:function(title, index){\n\t\tif(!isUndefined(this._title_hidden))\n\t\t\ttitle[this._title_hidden].style.visibility = \"visible\";\n\t\tif(!isUndefined(index)){\n\t\t\ttitle[index].style.visibility = \"hidden\";\n\t\t\tthis._title_hidden = index;\n\t\t}\n\t},\n\t_set_title:function(handle0, left, max, cornerStr){\n\t\tvar config = this._settings;\n\t\tif (this._settings.title){\n\t\t\tvar box = handle0.parentNode;\n\t\t\tvar sibling = config.vertical?\"nextSibling\":\"previousSibling\";\n\n\t\t\tif(!config.moveTitle)\n\t\t\t\tbox[sibling].innerHTML = this._settings.title(this._settings, this);\n\t\t\telse{ //two independent titles\n\t\t\t\tvar title = box[sibling].childNodes;\n\t\t\t\tvar pos = [];\n\t\t\t\tfor(let i = 0; i<2; i++)\n\t\t\t\t\tpos.push(this._set_title_n(title[i], config.value[i], left[i], max, cornerStr, i));\n\n\t\t\t\t//correct for overlapping titles\n\t\t\t\tvar diff = config.vertical? (pos[0]-pos[1]-this._sliderHandleWidth) : (pos[1]-pos[0]);\n\t\t\t\tvar sizeStr  = config.vertical?\"clientHeight\":\"clientWidth\";\n\n\t\t\t\t\n\n\t\t\t\tif(title[0][sizeStr]/2+title[1][sizeStr]/2 > diff)\n\t\t\t\t\tthis._hide_title(title, isUndefined(this._activeIndex) ? 0 : (this._activeIndex ? 0 : 1));\n\t\t\t\telse\n\t\t\t\t\tthis._hide_title(title);\n\n\t\t\t\t//set position\n\t\t\t\tfor(let i = 0; i<2; i++)\n\t\t\t\t\ttitle[i].style[cornerStr] = pos[i]+ \"px\";\n\t\t\t}\n\t\t}\n\t},\n\t_set_title_n:function(title, value, left, max, cornerStr, index){\n\t\ttitle.innerHTML = this._settings.title({value:value}, this);\n\t\tvar half = title.clientWidth/2;\n\t\tvar pos = 0;\n\t\t\n\t\tif(this._settings.vertical)\n\t\t\tpos = max-left-this._sliderHandleWidth/2-(index?this._sliderPadding:0)+2 * this._sliderBorder;\n\t\telse{\n\t\t\tpos = left + this._sliderHandleWidth/2 + 2*this._sliderBorder - half;\n\t\t\tpos = (half>left) ? (half-left+pos): pos;//left/top text is to small\n\t\t\tpos = (index && half+left>max)?(pos-half+(max-left)):pos;//right/bottom text is too large\n\t\t}\n\t\treturn pos;\n\t},\n\t_set_value_now:function(){\n\t\tfor(var i=0; i<2; i++){\n\t\t\tthis._get_slider_handle(i).setAttribute(\"aria-valuenow\", this._settings.value[i]);\n\t\t}\n\t},\n\t_mouse_down_process: function(e){\n\t\tvar trg = e.target || e.srcElement;\n\t\tvar match =  /webix_slider_handle_(\\d)/.exec(trg.className);\n\t\tthis._activeIndex = match?parseInt(match[1],10):-1;\n\n\t\tif(match)\n\t\t\tthis._set_handle_active(this._activeIndex);\n\t},\n\t$compareValue:function(oldvalue, value){\n\t\tvalue = this.$prepareValue(value);\n\t\treturn oldvalue[0] === value[0] && oldvalue[1] === value[1];\n\t},\n\t$getValue:function(){\n\t\tvar value = this._settings.value;\n\t\treturn this._settings.stringResult?value.join(this._settings.separator):value;\n\t},\n\t_set_handle_active: function(index){\n\t\tvar hActive = this._get_slider_handle(index);\n\t\tvar h = this._get_slider_handle(1-index);\n\t\tif(hActive.className.indexOf(\"webix_slider_active\") == -1)\n\t\t\thActive.className += \" webix_slider_active\";\n\t\th.className = h.className.replace(\" webix_slider_active\",\"\");\n\t\thActive.focus();\n\t},\n\t_get_value_from_pos:function(pos){\n\t\tvar config = this._settings;\n\t\tvar value = config.value;\n\t\t//10 - padding of slider box\n\t\tvar max = config.max - config.min;\n\t\tvar ax = config.vertical?\"y\":\"x\";\n\n\t\tvar left = offset(this._get_slider_handle().parentNode)[ax];\n\t\tvar newvalue = Math.ceil((pos-left) * max / (config.vertical?this._content_height:this._get_input_width(config)));\n\t\tnewvalue = Math.round((newvalue + 1*config.min)/config.step) * config.step;\n\t\tif(config.vertical)\n\t\t\tnewvalue = max-newvalue;\n\n\t\tvar index = null;\n\t\tvar pos0 = offset(this._get_slider_handle(0))[ax];\n\t\tvar pos1 = offset(this._get_slider_handle(1))[ax];\n\n\t\tif(pos0==pos1 && (config.value[0] == config.min || config.value[0] == config.max) ){\n\t\t\tthis._activeIndex = index = (config.value[0] == config.min?1:0);\n\t\t\tthis._set_handle_active(index);\n\t\t}\n\t\telse{\n\t\t\tif(this._activeIndex >=0){\n\t\t\t\tindex = this._activeIndex;\n\t\t\t}else{\n\t\t\t\tif(pos0==pos1){\n\t\t\t\t\tindex = (pos < pos0?0:1);\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tvar dist0 = Math.abs(pos0-pos);\n\t\t\t\t\tvar dist1 = Math.abs(pos1-pos);\n\t\t\t\t\tindex = dist0<dist1?0:1;\n\t\t\t\t\tthis._activeIndex = index;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\n\t\tif(index){\n\t\t\tvalue[index] = Math.max(Math.min(newvalue, config.max), value[0]);\n\t\t}\n\t\telse{\n\t\t\tvalue[index] = Math.max(Math.min(newvalue, value[1]), config.min);\n\t\t}\n\n\t\treturn value;\n\t}\n};\n\n\nconst view = protoUI(api,  slider.view);\nexport default {api, view};","import checkbox from \"../views/checkbox\";\nimport {addCss, removeCss, getTextSize} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport {$active} from \"../webix/skin\";\nimport {uid} from \"../webix/helpers\";\n\n\nconst api = {\n\tname:\"switch\",\n\tdefaults:{\n\t\ttemplate:function (config, common) {\n\t\t\tcommon._calck_switch_size();\n\n\t\t\tvar id = config.name || \"x\"+uid();\n\t\t\tvar rightlabel = \"\";\n\t\t\tif (config.labelRight){\n\t\t\t\trightlabel = \"<label class='webix_label_right'>\"+config.labelRight+\"</label>\";\n\t\t\t\tif (config.labelWidth)\n\t\t\t\t\tconfig.label = config.label || \"&nbsp;\";\n\t\t\t}\n\t\t\tvar checked = (config.checkValue == config.value);\n\t\t\tvar aria = \"aria-label=\\\"\"+(config.label||config.labelRight||\"\")+\"\\\" role=\\\"checkbox\\\" tabindex=\\\"0\\\" aria-checked=\\\"\"+(checked?\"true\":\"false\")+\"\\\" \"+(config.readonly?\"aria-readonly='true'\":\"\")+\"\\\"\";\n\t\t\tvar html = \n\t\t\t\t\"<div class=\\\"webix_switch_box \"+(checked?\" webix_switch_on\":\"\")+\"\\\" style=\\\"width:\"+common._switchWidth+\"px\\\">\"+\n\t\t\t\t\t\"<span class=\\\"webix_switch_text\\\">\"+((checked?config.onLabel:config.offLabel)||\"\")+\"</span>\"+\n\t\t\t\t\t\"<button class=\\\"webix_switch_handle\\\" \"+aria+\" style=\\\"left:\"+(checked?common._switchWidth-common._switchHeight:0)+\"px;\\\">\"+\n\t\t\t\t\t\"<input  id=\\\"\"+id+\"\\\" class=\\\"webix_switch_toggle\\\" type=\\\"checkbox\\\" \"+(checked?\"checked\":\"\")+\"></button>\"+\n\t\t\t\t\"</div>\"+rightlabel;\n\n\t\t\treturn common.$renderInput(config, html, id);\n\t\t}\n\t},\n\t$skin:function(){\n\t\tcheckbox.api.$skin.call(this);\n\n\t\tthis._switchHeight = $active.switchHeight;\n\t\tthis._switchWidth = $active.switchWidth;\n\t},\n\t$setValue:function(value){\n\t\tvar config = this._settings;\n\t\tvar checked = (value == config.checkValue);\n\t\tvar box = this.$view.querySelector(\".webix_switch_box\");\n\n\t\tif(box){\n\t\t\tvar handle = box.childNodes[1];\n\t\t\tvar text = (checked?config.onLabel:config.offLabel)||\"\";\n\t\t\tif(checked)\n\t\t\t\taddCss(box, \"webix_switch_on\");\n\t\t\telse\n\t\t\t\tremoveCss(box, \"webix_switch_on\");\n\n\t\t\thandle.style.left = (checked?this._switchWidth-this._switchHeight:0)+\"px\";\n\t\t\thandle.firstChild.checked = checked;\n\t\t\thandle.setAttribute(\"aria-checked\", checked?\"true\":\"false\");\n\n\t\t\tif(text){\n\t\t\t\tbox.childNodes[0].innerHTML = text;\n\t\t\t}\n\t\t}\n\t},\n\t_calck_switch_size:function(){\n\t\tvar config = this._settings;\n\t\tif(config.onLabel || config.offLabel){\n\t\t\tvar onWidth = config.onLabel ? getTextSize(config.onLabel, \"webix_switch_text\").width : 0;\n\t\t\tvar offWidth = config.onLabel ? getTextSize(config.offLabel, \"webix_switch_text\").width : 0;\n\t\t\tthis._switchWidth = Math.max(onWidth, offWidth)+this._switchHeight;\n\t\t}\n\t},\n\ton_click:{\n\t\t\"webix_switch_box\":function(){\n\t\t\tif(!this._settings.readonly)\n\t\t\t\tthis.toggle();\n\t\t},\n\t\t\"webix_label_right\":function(){\n\t\t\tif(!this._settings.readonly)\n\t\t\t\tthis.toggle();\n\t\t}\n\t}\n};\n\n\nconst view = protoUI(api,  checkbox.view);\nexport default {api, view};","import {protoUI, ui, $$} from \"../ui/core\";\nimport UIManager from \"../core/uimanager\";\nimport {$active} from \"../webix/skin\";\nimport {extend} from \"../webix/helpers\";\nimport i18n from \"../webix/i18n\";\nimport template from \"../webix/template\";\n\nimport segmented from \"../views/segmented\";\n\nconst api = {\n\tname:\"tabbar\",\n\t$init:function(){\n\t\tthis.attachEvent(\"onKeyPress\", this._onKeyPress);\n\t},\n\t$skin:function(){\n\t\tvar skin = $active;\n\t\tvar defaults = this.defaults;\n\n\t\tdefaults.topOffset = skin.tabTopOffset||0;\n\t\tdefaults.tabOffset = (typeof skin.tabOffset != \"undefined\"?skin.tabOffset:10);\n\t\tdefaults.bottomOffset = skin.tabBottomOffset||0;\n\t\tdefaults.height = skin.tabbarHeight;\n\n\t\tdefaults.tabMargin = skin.tabMargin;\n\t\tdefaults.inputPadding = skin.inputPadding;\n\t\tdefaults.tabMinWidth = skin.tabMinWidth||100;\n\t\tdefaults.tabMoreWidth = skin.tabMoreWidth||40;\n\t\tdefaults.borderless = !skin.tabBorder;\n\t},\n\t_getTabbarSizes: function(){\n\n\t\tvar config = this._settings,\n\t\t\ti, len,\n\t\t\ttabs = this._filterOptions(config.options),\n\t\t\ttotalWidth = this._input_width - config.tabOffset*2,\n\t\t\tlimitWidth = config.optionWidth||config.tabMinWidth;\n\n\t\tlen = tabs.length;\n\n\t\tif(config.tabMinWidth && totalWidth/len < limitWidth){\n\t\t\treturn { max: (parseInt(totalWidth/limitWidth,10)||1)};\n\t\t}\n\n\n\t\tif(!config.optionWidth){\n\t\t\tfor(i=0;i< len; i++){\n\t\t\t\tif(tabs[i].width){\n\t\t\t\t\ttotalWidth -= tabs[i].width+(!i&&!config .type?config.tabMargin:0);\n\t\t\t\t\tlen--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {width: (len?totalWidth/len:config.tabMinWidth)};\n\t},\n\t_init_popup: function(){\n\t\tconst obj = this._settings;\n\t\tif (!obj.tabbarPopup){\n\t\t\tconst popupConfig = {\n\t\t\t\tview: \"popup\",\n\t\t\t\tautofocus:false,\n\t\t\t\twidth: (obj.popupWidth||200),\n\t\t\t\tbody:{\n\t\t\t\t\tview: \"list\",\n\t\t\t\t\tborderless: true,\n\t\t\t\t\tselect: true, navigation:true,\n\t\t\t\t\tcss: \"webix_tab_list\",\n\t\t\t\t\tautoheight: true, yCount: obj.yCount,\n\t\t\t\t\ttype:{\n\t\t\t\t\t\ttemplate: obj.popupTemplate\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst view = ui(popupConfig);\n\t\t\tconst list = view.getBody();\n\n\t\t\tview.attachEvent(\"onShow\", () => {\n\t\t\t\tlist.unselect();\n\t\t\t\tUIManager.setFocus(list);\n\n\t\t\t\tconst node = list.getItemNode(list.getFirstId());\n\t\t\t\tif (node)\n\t\t\t\t\tnode.focus();\n\t\t\t});\n\t\t\tlist.attachEvent(\"onItemClick\", (id) => this._popupInnerClick(id));\n\t\t\tlist.attachEvent(\"onEnter\", () => this._popupInnerClick());\n\n\t\t\tobj.tabbarPopup = view._settings.id;\n\t\t\tthis._destroy_with_me.push(view);\n\t\t}\n\t\tthis._init_popup = function(){};\n\t},\n\t_popupInnerClick(id){\n\t\tconst popup = $$(this._settings.tabbarPopup);\n\t\tid = id || popup.getBody().getSelectedId();\n\n\t\tif (id && this.callEvent(\"onBeforeTabClick\", [id])){\n\t\t\tthis.setValue(id);\n\t\t\tpopup.hide();\n\t\t\tthis.callEvent(\"onAfterTabClick\", [id]);\n\t\t\tthis.refresh();\n\t\t\tthis.focus();\n\t\t}\n\t\treturn false;\n\t},\n\tgetPopup: function(){\n\t\tthis._init_popup();\n\t\treturn $$(this._settings.tabbarPopup);\n\t},\n\tmoreTemplate_setter: template,\n\tpopupTemplate_setter: template,\n\tdefaults:{\n\t\tpopupWidth: 200,\n\t\tpopupTemplate: \"#value#\",\n\t\tyCount: 7,\n\t\tmoreTemplate: \"<span class=\\\"webix_icon wxi-dots\\\"></span>\",\n\t\ttemplate:function(obj,common) {\n\t\t\tcommon._check_options(obj.options);\n\n\t\t\tlet tabs = common._filterOptions(obj.options);\n\t\t\tlet contentWidth, html, leafWidth, resultHTML, style, sum, verticalOffset, width;\n\n\t\t\tif (!tabs.length){\n\t\t\t\thtml = \"<div class='webix_tab_filler' style='width:\"+common._input_width+\"px; border-right:0px;'></div>\";\n\t\t\t} else {\n\t\t\t\tif (!obj.value)\n\t\t\t\t\tobj.value = common._getFirstActive(true);\n\n\t\t\t\thtml = \"\";\n\t\t\t\tif (obj.tabOffset)\n\t\t\t\t\thtml += \"<div class='webix_tab_filler' style='width:\"+obj.tabOffset+\"px;'>&nbsp;</div>\";\n\t\t\t\tcontentWidth = common._input_width - obj.tabOffset*2-(!obj.type?(obj.tabMargin)*(tabs.length-1):0);\n\t\t\t\tverticalOffset = obj.topOffset+obj.bottomOffset;\n\n\t\t\t\tvar sizes = common._getTabbarSizes();\n\n\t\t\t\tif (sizes.max && sizes.max < tabs.length){\n\t\t\t\t\t//we need popup\n\t\t\t\t\tconst popup = common.getPopup();\n\t\t\t\t\tpopup.hide();\n\n\t\t\t\t\tconst body = (popup.getBody()||null);\n\t\t\t\t\tif(body){\n\t\t\t\t\t\tif (sizes.max){\n\t\t\t\t\t\t\tfor (let i=0, found=false; i < tabs.length && !found; i++)\n\t\t\t\t\t\t\t\tif(tabs[i].id== obj.value){\n\t\t\t\t\t\t\t\t\tfound = true;\n\t\t\t\t\t\t\t\t\tif((i+1) > sizes.max){\n\t\t\t\t\t\t\t\t\t\tlet selectedTab =  tabs.splice(i, 1);\n\t\t\t\t\t\t\t\t\t\tlet displayTabs = tabs.splice(0, sizes.max-1).concat(selectedTab);\n\t\t\t\t\t\t\t\t\t\ttabs = displayTabs.concat(tabs);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbody.clearAll();\n\t\t\t\t\t\t\tbody.parse(tabs.slice(sizes.max));\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tbody.clearAll();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (common._settings.tabbarPopup)\n\t\t\t\t\t$$(common._settings.tabbarPopup).hide();\n\n\t\t\t\tsum = obj.tabOffset;\n\t\t\t\tfor (let i=0, lastTab=false; (i<tabs.length) && !lastTab; i++) {\n\n\t\t\t\t\t// tab width\n\t\t\t\t\tif(sizes && sizes.max){\n\t\t\t\t\t\tif(sizes.max == (i + 1)){\n\t\t\t\t\t\t\tlastTab = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontentWidth = common._input_width - obj.tabOffset*2-(!obj.type&&(sizes.max>1)?(obj.tabMargin)*(sizes.max-1):0);\n\t\t\t\t\t\twidth = (contentWidth - obj.tabMoreWidth)/sizes.max ;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\twidth = sizes.width;\n\n\t\t\t\t\twidth = (tabs[i].width||obj.optionWidth||width);\n\n\t\t\t\t\tsum += width + (i&&!obj.type?obj.tabMargin:0);\n\n\t\t\t\t\tif(obj.tabMargin>0&&i&&!obj.type)\n\t\t\t\t\t\thtml += \"<div class='webix_tab_filler' style='width:\"+obj.tabMargin+\"px;'></div>\";\n\n\t\t\t\t\t// tab innerHTML\n\t\t\t\t\thtml += common._getTabHTML(tabs[i], width);\n\n\n\t\t\t\t\tif(lastTab){\n\t\t\t\t\t\thtml += \"<div role=\\\"button\\\" tabindex=\\\"0\\\" aria-label=\\\"\"+i18n.aria.showTabs+\"\\\" class=\\\"webix_tab_more_icon\\\" style=\\\"width:\"+obj.tabMoreWidth+\"px;\\\">\"+obj.moreTemplate(obj,common)+\"</div>\";\n\t\t\t\t\t\tsum += obj.tabMoreWidth;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\n\t\t\t\tleafWidth = common._content_width - sum;\n\n\t\t\t\tif (leafWidth>0 && !obj.type)\n\t\t\t\t\thtml += \"<div class='webix_tab_filler' style='width:\"+leafWidth+\"px;'>&nbsp;</div>\";\n\t\t\t}\n\n\t\t\tresultHTML = \"\";\n\n\t\t\t// consider top and bottom offset in tabs height (top tabbar)\n\t\t\tstyle = (verticalOffset&& !obj.type)?\"height:\"+(common._content_height-verticalOffset)+\"px\":\"\";\n\n\t\t\t//space above tabs (top tabbar)\n\t\t\tif(obj.topOffset && !obj.type)\n\t\t\t\tresultHTML += \"<div class='webix_before_all_tabs' style='width:100%;height:\"+obj.topOffset+\"px'></div>\";\n\n\t\t\t// tabs html\n\t\t\tresultHTML +=  \"<div style='\"+style+\"' role='tablist' class='webix_all_tabs \"+(obj.type?(\"webixtype_\"+obj.type):\"\")+\"'>\"+html+\"</div>\";\n\n\t\t\t//space below to tabs (top tabbar)\n\t\t\tif(obj.bottomOffset && !obj.type)\n\t\t\t\tresultHTML += \"<div class='webix_after_all_tabs' style='width:100%;height:\"+obj.bottomOffset+\"px'></div>\";\n\n\t\t\treturn resultHTML;\n\t\t}\n\t},\n\t_getInputNode:function(){\n\t\treturn this.$view.querySelectorAll(\".webix_item_tab\");\n\t},\n\t_getTabHTML: function(tab, width){\n\t\tvar\thtml,\n\t\t\tclassName = \"\",\n\t\t\ttooltip = \"\",\n\t\t\tisDisabled = !!tab.disabled,\n\t\t\tconfig = this.config;\n\n\t\tif (tab.id == config.value)\n\t\t\tclassName += \" webix_selected\";\n\n\t\tif (isDisabled)\n\t\t\tclassName += \" webix_disabled\";\n\n\t\tif (tab.css)\n\t\t\tclassName+=\" \"+tab.css;\n\n\t\tif (config.tooltip)\n\t\t\ttooltip = \" webix_t_id='\"+tab.id+\"'\";\n\n\t\twidth = (tab.width||width);\n\t\thtml = \"<div class=\\\"webix_item_tab\"+className+\"\\\" \"+/*@attr*/\"button_id=\\\"\"+tab.id+\"\\\" role=\\\"tab\\\" \"+\n\t\t\t\"aria-selected=\\\"\"+(tab.id== config.value?\"true\":\"false\")+\"\\\" tabindex=\\\"\"+(!isDisabled && tab.id==config.value?\"0\":\"-1\")+\n\t\t\t\"\\\" style=\\\"width:\"+width+\"px;\\\"\"+(isDisabled?\" webix_disabled=\\\"true\\\"\":\"\")+tooltip+\">\";\n\n\t\t// a tab title\n\t\tif(this._tabTemplate){\n\t\t\tvar calcHeight = this._content_height- config.inputPadding*2 - 2;\n\t\t\tvar height = this._content_height - 2;\n\t\t\tvar temp = extend({ cheight: calcHeight, aheight:height }, tab);\n\t\t\thtml+= this._tabTemplate(temp);\n\t\t}\n\t\telse {\n\t\t\tvar icon = tab.icon?(\"<span class='webix_icon \"+tab.icon+\"'></span> \"):\"\";\n\t\t\thtml+=icon + tab.value;\n\t\t}\n\n\t\tif (!isDisabled && (tab.close || config.close))\n\t\t\thtml+=\"<span role='button' tabindex='0' aria-label='\"+i18n.aria.closeTab+\"' class='webix_tab_close webix_icon wxi-close'></span>\";\n\n\t\thtml+=\"</div>\";\n\t\treturn html;\n\t},\n\t_getBox:function(){\n\t\treturn this._dataobj.firstChild;\n\t},\n\t_types:{\n\t\timage:\"<div class='webix_img_btn_top' style='height:#cheight#px;background-image:url(#image#);'><div class='webix_img_btn_text'>#value#</div></div>\",\n\t\ticon:\"<div class='webix_img_btn' style='line-height:#cheight#px;height:#cheight#px;'><span class='webix_icon_btn #icon#' style='max-width:#cheight#px;max-height:#cheight#px;'></span>#value#</div>\",\n\t\ticonTop:\"<div class='webix_img_btn_top' style='height:#cheight#px;width:100%;top:0px;text-align:center;'><span class='webix_icon #icon#'></span><div class='webix_img_btn_text'>#value#</div></div>\"\n\t},\n\ttype_setter:function(value){\n\t\tthis._settings.tabOffset = 0;\n\t\tif (this._types[value])\n\t\t\tthis._tabTemplate = template(this._types[value]);\n\t\treturn value;\n\t}\n};\n\n\nconst view = protoUI(api,  segmented.view);\nexport default {api, view};","import layout from \"../views/layout\";\nimport IdSpace from \"../core/idspace\";\nimport UIManager from \"../core/uimanager\";\nimport {protoUI} from \"../ui/core\";\nimport i18n from \"../webix/i18n\";\nimport {_event} from \"../webix/htmlevents\";\n\n\nconst api = {\n\tname: \"richtext\",\n\tdefaults:{\n\t\tlabel:\"\",\n\t\tlabelWidth:80,\n\t\tlabelPosition:\"left\"\n\t},\n\t$init: function() {\n\t\tthis._viewobj.className += \" webix_richtext\";\n\t\tthis.$ready.unshift(this._setLayout);\n\t},\n\tgetInputNode:function(){\n\t\treturn this.$view.querySelector(\".webix_richtext_editor\"); \n\t},\n\t_button:function(name){\n\t\treturn {\n\t\t\tview: \"toggle\",\n\t\t\ttype: \"icon\",\n\t\t\ticon: \"wxi-\"+name, name: name, id:name,\n\t\t\tlabel: i18n.richtext[name],\n\t\t\tautowidth: true, \n\t\t\taction:name,\n\t\t\tclick: this._add_data\n\t\t};\n\t},\n\t_setLayout: function() {\n\t\tvar top = this;\n\n\t\tvar editField = {\n\t\t\tview: \"template\",\n\t\t\tcss: \"webix_richtext_container\",\n\t\t\tborderless: true,\n\t\t\ttemplate: \"<div class='webix_richtext_editor' contenteditable='true'>\"+this.getValue()+\"</div>\",\n\t\t\ton: {\n\t\t\t\tonAfterRender: function() {\n\t\t\t\t\ttop._rendered_input = true;\n\t\t\t\t\ttop.refresh();\n\t\t\t\t\t_event( \n\t\t\t\t\t\ttop.getInputNode(),\n\t\t\t\t\t\t\"blur\",\n\t\t\t\t\t\tfunction(){\n\t\t\t\t\t\t\ttop._updateValue(this.innerHTML);\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t\t_event( \n\t\t\t\t\t\ttop.getInputNode(),\n\t\t\t\t\t\t\"keyup\",\n\t\t\t\t\t\tfunction(){\n\t\t\t\t\t\t\ttop._getselection();\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\tonClick: {\n\t\t\t\twebix_richtext_editor: function() {\n\t\t\t\t\ttop._getselection();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvar editorToolbar = {\n\t\t\tview: \"toolbar\",\n\t\t\tid:\"toolbar\",\n\t\t\telements: [\n\t\t\t\tthis._button(\"underline\"),\n\t\t\t\tthis._button(\"bold\"),\n\t\t\t\tthis._button(\"italic\"),\n\t\t\t\t{}\n\t\t\t]\n\t\t};\n\n\t\tvar rows = [\n\t\t\teditorToolbar,\n\t\t\teditField\n\t\t];\n\n\t\tif (this.config.labelPosition === \"top\" || !this.config.labelWidth){\n\t\t\teditorToolbar.elements.concat([\n\t\t\t\t{ view:\"label\", label: this.config.label, align:\"right\"},\n\t\t\t\t{ width:4 }\n\t\t\t]);\n\t\t\tthis.rows_setter(rows);\n\t\t} else {\n\t\t\tthis.config.borderless = true;\n\t\t\tthis.cols_setter([{ \n\t\t\t\ttemplate: (this.config.label || \" \"),\n\t\t\t\tcss: \"webix_richtext_inp_label\"+(this.config.required?\" webix_required\":\"\"),\n\t\t\t\tborderless: true,\n\t\t\t\twidth: this.config.labelWidth\n\t\t\t}, {\n\t\t\t\trows:rows\n\t\t\t}]);\n\t\t}\n\t},\n\t_getselection: function() {\n\t\tvar top = this;\n\t\tvar bar = top.$$(\"toolbar\");\n\t\tvar sel;\n\n\t\tbar.setValues({\n\t\t\titalic:false, underline:false, bold:false\n\t\t});\n\n\t\tif(window.getSelection) {\n\t\t\tsel = window.getSelection();\n\t\t} else {\n\t\t\tsel = document.selection.createRange();\n\t\t}\n\n\t\tfor (var i = 0; i < sel.rangeCount; ++i) {\n\t\t\tif (top.$view.contains(this.getInputNode())){\n\t\t\t\tif (document.queryCommandState(\"bold\")) {\n\t\t\t\t\ttop.$$(\"bold\").setValue(true);\n\t\t\t\t} \n\t\t\t\tif (document.queryCommandState(\"underline\")) {\n\t\t\t\t\ttop.$$(\"underline\").setValue(true);\n\t\t\t\t}\n\t\t\t\tif (document.queryCommandState(\"italic\")) {\n\t\t\t\t\ttop.$$(\"italic\").setValue(true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\trefresh: function() {\n\t\tif(this._rendered_input)\n\t\t\tthis.getInputNode().innerHTML = this.config.value || \"\";\n\t},\n\t_execCommandOnElement:function(commandName) {\n\t\tlet sel, selText;\n\n\t\tif (window.getSelection) {\n\t\t\tsel = window.getSelection();\n\t\t\tselText = sel.toString().length;\n\n\t\t\tconst input = this.getInputNode();\n\t\t\tif (!input.contains(sel.anchorNode) || !input.contains(sel.focusNode)) return;\n\t\t} else return; //ie8\n\n\t\tif(selText > 0) {\n\t\t\tfor (var i = 0; i < sel.rangeCount; ++i) {\n\t\t\t\tvar range = sel.getRangeAt(i);\n\t\t\t\tif (!sel.isCollapsed) {\n\t\t\t\t\tdocument.execCommand(commandName, false, \"\");\n\t\t\t\t} else {\n\t\t\t\t\tvar textValue = sel.focusNode.textContent;\n\t\t\t\t\tvar focusEl = sel.focusNode;\n\t\t\t\t\tvar focustext = sel.anchorOffset;\n\t\t\t\t\tvar wordBegining = textValue.substring(0, focustext).match(/[A-Za-z]*$/)[0];\n\t\t\t\t\tvar wordEnd = textValue.substring(focustext).match(/^[A-Za-z]*/)[0];\n\n\t\t\t\t\tvar startWord = focustext - wordBegining.length;\n\t\t\t\t\tvar endWord = focustext + wordEnd.length;\n\n\t\t\t\t\trange.setStart(focusEl, startWord);\n\t\t\t\t\trange.setEnd(focusEl, endWord);\n\t\t\t\t\tsel.removeAllRanges();\n\n\t\t\t\t\tsel.addRange(range);\n\t\t\t\t\tdocument.execCommand(commandName, false, \"\");\n\t\t\t\t}   \n\t\t\t}\n\t\t}\n\t},\n\t_add_data:function() {\n\t\tconst top = this.getTopParentView();\n\t\ttop._execCommandOnElement(this.config.action);\n\t},\n\tfocus: function() {\n\t\tif(!UIManager.canFocus(this))\n\t\t\treturn false;\n\n\t\tvar editableElement = this.getInputNode();\n\t\teditableElement.focus();\n\t},\n\t_updateValue: function(value){\n\t\tvar old = this.config.value;\n\t\tthis.config.value = value || \"\";\n\n\t\tif (old !== value)\n\t\t\tthis.callEvent(\"onChange\", [value, old]);\n\t},\n\tsetValue: function(value) {\n\t\tthis._updateValue(value);\n\t\tthis.refresh();\n\t},\n\tgetValue: function() {\n\t\tvar input = this.getInputNode();\n\t\tif (input)\n\t\t\tthis.config.value = this.getInputNode().innerHTML;\n\n\t\tvar value = this.config.value;\n\t\treturn value || (value ===0?\"0\":\"\");\n\t}\n};\n\n\nconst view = protoUI(api,  IdSpace, layout.view);\nexport default {api, view};","import {createCss, preventEvent, addCss, removeCss} from \"../webix/html\";\nimport {protoUI, $$} from \"../ui/core\";\nimport {extend, delay, uid, toNode, bind} from \"../webix/helpers\";\nimport {_event} from \"../webix/htmlevents\";\nimport {$name} from \"../webix/skin\";\n\nimport base from \"../views/view\";\nimport button from \"../views/button\";\nimport list from \"../views/list\";\nimport i18n from \"../webix/i18n\";\nimport type from \"../webix/type\";\n\nimport UploadDriver from \"../core/uploaddriver\";\nimport DataCollection from \"../core/datacollection\";\n\n\n/*\n\tUI:Uploader\n*/\n\n// #include ui/view.js\n// #include ui/list.js\n\n\ntype(list.view, {\n\tname:\"uploader\",\n\ttemplate:\"{common.removeIcon()}{common.percent()}<div style='float:right'>#sizetext#</div>{common.fileName()}\",\n\tpercent:function(obj){\n\t\tif (obj.status == \"transfer\")\n\t\t\treturn \"<div style='width:60px; text-align:center; float:right'>\"+obj.percent+\"%</div>\";\n\t\treturn \"<div class='webix_upload_\"+obj.status+\"'><span class='\" +\n\t\t\t(obj.status ==\"error\"?\"error_icon\":\"webix_icon wxi-check\")+\"'></span></div>\";\n\t},\n\tremoveIcon:function(){\n\t\treturn \"<div class='webix_remove_upload'><span class='cancel_icon'></span></div>\";\n\t},\n\tfileName:function(obj){\n\t\treturn \"<div style='text-overflow:ellipsis; white-space:nowrap; overflow:hidden; padding-right:8px;'>\"+obj.name+\"</div>\";\n\t},\n\ton_click:{\n\t\t\"webix_remove_upload\":function(ev, id){\n\t\t\t$$(this.config.uploader).files.remove(id);\n\t\t}\n\t}\n});\n\nconst api = {\n\tname:\"uploader\",\n\tdefaults:{\n\t\tautosend:true,\n\t\tmultiple:true,\n\t\tinputName:\"upload\"\n\t},\n\t$cssName:\"button webix_uploader\",\n\t$allowsClear:true,\n\ton_click:{\n\t\t//don't fire extra onItemClick events, visible button will do it\n\t\t\"webix_hidden_upload\":function(){ return false; }\n\t},\n\t//will be redefined by upload driver\n\tsend:function(){},\n\tfileDialog:function(){},\n\tstopUpload:function(){},\n\t$skin:function(){\n\t\tbutton.api.$skin.call(this);\n\n\t\tif($name == \"material\" || $name == \"mini\")\n\t\t\tthis.defaults.css = \"webix_primary\";\n\t},\n\n\t$init:function(){\n\t\tthis.files = new DataCollection();\n\t\tthis._destroy_with_me = [this.files];\n\t\textend(this, UploadDriver, true);\n\t},\n\t$setSize:function(x,y){\n\t\tif (base.api.$setSize.call(this,x,y)){\n\t\t\tthis.render();\n\t\t}\n\t},\n\tapiOnly_setter:function(value){\n\t\tdelay(this.render, this);\n\t\treturn (this.$apiOnly=value);\n\t},\n\t_add_files: function(files){\n\t\tfor (var i = 0; i < files.length; i++)\n\t\t\tthis.addFile(files[i]);\n\n\t},\n\tlink_setter:function(value){\n\t\tif (value)\n\t\t\tdelay(function(){\n\t\t\t\tvar view = $$(this._settings.link);\n\t\t\t\tif (!view){\n\t\t\t\t\tvar top = this.getTopParentView();\n\t\t\t\t\tif (top.$$)\n\t\t\t\t\t\tview = top.$$(this._settings.link);\n\t\t\t\t}\n\n\t\t\t\tif (view.sync && view.filter)\n\t\t\t\t\tview.sync(this.files);\n\t\t\t\telse if (view.setValues)\n\t\t\t\t\tthis.files.data.attachEvent(\"onStoreUpdated\", function(){\n\t\t\t\t\t\tview.setValues(this);\n\t\t\t\t\t});\n\t\t\t\tview._settings.uploader = this._settings.id;\n\t\t\t}, this);\n\t\treturn value;\n\t},\n\taddFile:function(name, size, type, extra){\n\t\tvar file = null;\n\t\tif (typeof name == \"object\"){\n\t\t\tfile = name;\n\t\t\tname = file.name;\n\t\t\tsize = file.size;\n\t\t}\n\n\t\tvar format = this._format_size(size);\n\t\ttype = type || name.split(\".\").pop();\n\n\t\tvar file_struct = {\n\t\t\tfile: file,\n\t\t\tname: name,\n\t\t\tid: uid(),\n\t\t\tsize: size,\n\t\t\tsizetext: format,\n\t\t\ttype: type,\n\t\t\tcontext: this._last_file_context,\n\t\t\tstatus: \"client\"\n\t\t};\n\n\t\tif (file && file.webkitRelativePath)\n\t\t\tfile_struct.name = file.webkitRelativePath;\n\n\t\tif (extra)\n\t\t\textend(file_struct, extra, true);\n\n\t\tif (this.callEvent(\"onBeforeFileAdd\", [file_struct])){\n\t\t\tif (!this._settings.multiple)\n\t\t\t\tthis.files.clearAll();\n\n\t\t\tvar id = this.files.add(file_struct);\n\t\t\tthis.callEvent(\"onAfterFileAdd\", [file_struct]);\n\t\t\tif (id && this._settings.autosend)\n\t\t\t\tthis.send(id);\n\t\t}\n\t\t\n\t\treturn file_struct;\n\t},\n\t\n\t_get_active_url:function(item){\n\t\tvar url = this._settings.upload;\n\t\tvar urldata = extend(item.urlData||{},this._settings.urlData||{});\n\t\tif (url && urldata){\n\t\t\tvar subline = [];\n\t\t\tfor (var key in urldata)\n\t\t\t\tsubline.push(encodeURIComponent(key)+\"=\"+encodeURIComponent(urldata[key]));\n\n\t\t\tif (subline.length)\n\t\t\t\turl += ((url.indexOf(\"?\") ==-1) ? \"?\" : \"&\") + subline.join(\"&\");\n\t\t}\n\t\treturn url;\n\t},\n\n\taddDropZone:function(id, hover_text){\n\t\tvar node = toNode(id);\n\t\tvar extra_css = \"\";\n\t\tif (hover_text)\n\t\t\textra_css = \" \"+createCss({ content:\"\\\"\"+hover_text+\"\\\"\" }, \":before\");\n\n\t\tvar fullcss = \"webix_drop_file\"+extra_css;\n\t\tvar timer = null;\n\n\t\t//web\n\t\t_event(node,\"dragover\", preventEvent);\n\t\t_event(node,\"dragover\", function(){\n\t\t\taddCss(node, fullcss, true);\n\t\t\tif (timer){\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = null;\n\t\t\t}\n\t\t});\n\t\t_event(node,\"dragleave\", function(){\n\t\t\t//when moving over html child elements\n\t\t\t//browser will issue dragleave and dragover events\n\t\t\t//ignore first one\n\t\t\ttimer = setTimeout(function(){\n\t\t\t\tremoveCss(node, fullcss);\n\t\t\t}, 150);\n\t\t});\n\n\t\t_event(node,\"drop\", bind(function(e){\n\t\t\tremoveCss(node, fullcss);\n\t\t\tthis.$drop(e);\n\t\t\treturn preventEvent(e);\n\t\t}, this));\n\t},\n\t\n\t_format_size: function(size) {\n\t\tvar index = 0;\n\t\twhile (size > 1024){\n\t\t\tindex++;\n\t\t\tsize = size/1024;\n\t\t}\n\t\treturn Math.round(size*100)/100+\" \"+i18n.fileSize[index];\n\t},\n\n\t_complete: function(id, response) {\n\t\tvar item = this.files.getItem(id);\n\n\t\textend(item, response, true);\n\t\titem.status = \"server\";\n\t\titem.progress = 100;\n\n\t\tthis.callEvent(\"onFileUpload\", [item, response]);\n\t\tthis.callEvent(\"onChange\", []);\n\t\tthis.files.updateItem(id);\n\t\t\n\t\tif (this.isUploaded())\n\t\t\tthis._upload_complete(response);\n\t},\n\t_upload_complete:function(response){\n\t\tthis.callEvent(\"onUploadComplete\", [response]);\n\t\tif (this._last_assigned_upload_callback){\n\t\t\tthis._last_assigned_upload_callback.call(this, response);\n\t\t\tthis._last_assigned_upload_callback = 0;\n\t\t}\n\t},\n\tisUploaded:function(){\n\t\tvar order = this.files.data.order;\n\t\tfor (var i=0; i<order.length; i++)\n\t\t\tif (this.files.getItem(order[i]).status != \"server\")\n\t\t\t\treturn false;\n\n\t\treturn true;\n\t},\n\t$onUploadComplete: function(){\n\n\t},\n\t$updateProgress: function(id, percent) {\n\t\tvar item = this.files.getItem(id);\n\t\titem.percent = Math.round(percent);\n\t\tthis.files.updateItem(id);\n\t},\n\tsetValue:function(value){\n\t\tif (typeof value == \"string\" && value)\n\t\t\tvalue = { value:value, status:\"server\" };\n\n\t\tthis.files.clearAll();\n\t\tif (value)\n\t\t\tthis.files.parse(value);\n\n\t\tthis.callEvent(\"onChange\", []);\n\t},\n\tgetValue:function(){\n\t\tvar data = [];\n\t\tthis.files.data.each(function(obj){\n\t\t\tif (obj.status == \"server\")\n\t\t\t\tdata.push(obj.value||obj.name);\n\t\t});\n\n\t\treturn data.join(\",\");\n\t}\n\n};\n\n\nconst view = protoUI(api,  button.view);\nexport default {api, view};","import popup from \"../views/popup\";\nimport UIManager from \"../core/uimanager\";\n\nimport {preventEvent} from \"../webix/html\";\nimport {protoUI, $$} from \"../ui/core\";\nimport {toFunctor, extend, copy, isUndefined, delay, bind, toNode} from \"../webix/helpers\";\nimport {_event} from \"../webix/htmlevents\";\nimport {callEvent} from \"../webix/customevents\";\nimport template from \"../webix/template\";\n\n\n// #include ui/window.js\n\nconst api = {\n\tname:\"suggest\",\n\tdefaults:{\n\t\tautofocus:false,\n\t\ttype:\"list\",\n\t\tkeyPressTimeout:1,\n\t\tbody:{\n\t\t\tyCount:10,\n\t\t\tautoheight:true,\n\t\t\tbody:true,\n\t\t\tselect:true,\n\t\t\tborderless:true,\n\t\t\tnavigation:true\n\t\t},\n\t\tfilter:function(item,value){\n\t\t\tif (item.value.toString().toLowerCase().indexOf(value.toLowerCase())===0) return true;\n\t\t\treturn false;\n\t\t}\n\t},\n\ttemplate_setter:template,\n\tfilter_setter:function(value){\n\t\treturn toFunctor(value, this.$scope);\n\t},\n\t_show_on_key_press:true,\n\t$init:function(obj){\n\t\tvar temp = {};\n\t\textend(temp, copy(this.defaults.body));\n\t\ttemp.view = obj.type || this.defaults.type;\n\n\t\tvar etemp = this._get_extendable_cell(temp);\n\t\tif (obj.body)\n\t\t\textend(etemp, obj.body, true);\n\n\t\tif (obj.data)\n\t\t\tetemp.data = obj.data;\n\t\tif (obj.url)\n\t\t\tetemp.url = obj.url;\n\t\tif (obj.datatype)\n\t\t\tetemp.datatype = obj.datatype;\n\n\t\tif (obj.id)\n\t\t\ttemp.id = temp.id || (obj.id+\"_\"+temp.view);\n\n\t\tobj.body = temp;\n\t\tthis.$ready.push(this._set_on_popup_click);\n\n\t\tthis.attachEvent(\"onShow\", function(){\n\t\t\tif (this._settings.master){\n\t\t\t\tvar master = $$(this._settings.master);\n\t\t\t\tif(master){\n\t\t\t\t\tvar node = master._getInputDiv ? master._getInputDiv() : master.getInputNode();\n\t\t\t\t\tnode.setAttribute(\"aria-expanded\", \"true\");\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t}\n\t\t\tthis._show_selection();\n\t\t});\n\t\tthis.attachEvent(\"onHide\", function(){\n\t\t\tif (this._settings.master){\n\t\t\t\tvar master = $$(this._settings.master);\n\t\t\t\tif(master){\n\t\t\t\t\tvar node = master._getInputDiv ? master._getInputDiv() : master.getInputNode();\n\t\t\t\t\tnode.setAttribute(\"aria-expanded\", \"false\");\n\t\t\t\t}\n\t\t\t\t\t\n\t\t\t}\n\t\t});\n\t\tthis._old_text = {};\n\t},\n\t_get_extendable_cell:function(obj){\n\t\treturn obj;\n\t},\n\t_get_details:function(){\n\t\treturn null;\n\t},\n\t_preselectMasterOption: function(data){\n\t\tlet node;\n\n\t\tif (data && this._settings.master){\n\t\t\tconst master = $$(this._settings.master);\n\t\t\tlet text = data.id ? this.getItemText(data.id) : (data.text||data.value);\n\n\t\t\tnode = master.getInputNode();\n\t\t\tif (node && master.$setValueHere)\n\t\t\t\tmaster.$setValueHere(text, data, this._get_details());\n\t\t\telse if (node){\n\t\t\t\tif(master.options_setter)\n\t\t\t\t\ttext = this.getItemText(data.id);\n\t\t\t\telse if(data.value)\n\t\t\t\t\ttext = master._get_visible_text ? master._get_visible_text(data.value) : data.value.toString();\n\n\t\t\t\tif (isUndefined(node.value))\n\t\t\t\t\tnode.innerHTML = text;\n\t\t\t\telse\n\t\t\t\t\tnode.value = text.replace(/<[^>]*>/g,\"\");\n\t\t\t}\n\t\t}\n\t\tnode = node || this._last_input_target;\n\t\tif(node)\n\t\t\tnode.focus();\n\t},\n\tsetMasterValue:function(data, refresh){\n\t\tvar text = data.id ? this.getItemText(data.id) : (data.text||data.value);\n\n\t\tif (this._settings.master){\n\t\t\tvar master = $$(this._settings.master);\n\t\t\tif (refresh && data.id)\n\t\t\t\tmaster.refresh();\n\t\t\telse if (master.options_setter)\n\t\t\t\tmaster.setValue(data.$empty?\"\":data.id);\n\t\t\telse if (master.setValueHere)\n\t\t\t\tmaster.setValueHere(text, data, this._get_details());\n\t\t\telse\n\t\t\t\tmaster.setValue(text);\n\t\t}\n\t\telse if (this._last_input_target && this._set_input_value)\n\t\t\tthis._set_input_value(text);\n\t\telse if (this._last_input_target)\n\t\t\tthis._last_input_target.value = text;\n\n\t\tif (!refresh){\n\t\t\tthis.hide();\n\t\t\tif (this._last_input_target)\n\t\t\t\tthis._last_input_target.focus();\n\t\t}\n\t\tthis.callEvent(\"onValueSuggest\", [data, text]);\n\t\tdelay(function(){\n\t\t\tcallEvent(\"onEditEnd\",[]);\n\t\t});\n\t},\n\tgetMasterValue:function(){\n\t\tif (this._settings.master)\n\t\t\treturn $$(this._settings.master).getValue();\n\t\treturn null;\n\t},\n\tgetItemId:function(text){\n\t\tvar list = this.getList();\n\t\tfor (var key in list.data.pull){\n\t\t\tvar obj = list.getItem(key);\n\t\t\tif (this._settings.filter.call(this, obj, text))\n\t\t\t\treturn obj.id;\n\t\t}\n\t},\n\tgetItemText:function(id){\n\t\tvar item = this.getList().getItem(id);\n\n\t\tif (!item)\n\t\t\treturn this._old_text[id] || \"\";\n\n\t\tif (this._settings.template)\n\t\t\treturn this._settings.template.call(this, item, this.type);\n\n\t\tif (this._settings.textValue)\n\t\t\treturn \"\"+item[this._settings.textValue]+\"\";\n\t\t\n\t\tvar type = this.getList().type;\n\t\tvar text = type.template.call(type, item, type);\n\n\t\treturn (this._old_text[id] = text);\n\t},\n\tgetSuggestion:function(text){\n\t\tvar id,\n\t\t\tlist = this.getList(),\n\t\t\torder = list.data.order;\n\n\t\tif (list.getSelectedId)\n\t\t\tid = list.getSelectedId();\n\n\t\tif (text && order.length && (!id || order.find(id) <0) ){\n\t\t\tid = order[0];\n\t\t\t//ensure that option really does match client-side filtering rules\n\t\t\tif (!list.config.dataFeed && !this.config.filter.call(this, list.data.pull[id], text)) return null;\n\t\t}\n\n\t\t//complex id in datatable\n\t\tif (id){\n\t\t\tif (typeof id == \"object\") id = id+\"\";\n\t\t\tif (list.getItem(id).$empty) return null;\n\t\t}\n\t\treturn id;\n\t},\n\tgetList:function(){\n\t\treturn this._body_cell;\n\t},\n\t_set_on_popup_click:function(){\n\t\tvar list = this.getList();\n\t\tvar type = this._settings.type;\n\n\t\tif (list.count){\n\t\t\tlist.attachEvent(\"onItemClick\", bind(function(item){\n\t\t\t\tthis.setMasterValue(list.getItem(item));\n\t\t\t}, this));\n\t\t\tlist.data.attachEvent(\"onstoreupdated\",bind(function(id, obj, mode){\n\t\t\t\tif (mode == \"delete\" && id == this.getMasterValue())\n\t\t\t\t\tthis.setMasterValue({ id:\"\", text:\"\" }, 1);\n\t\t\t\telse if (mode == \"update\" && id == this.getMasterValue()){\n\t\t\t\t\tthis.setMasterValue(obj, 1);\n\t\t\t\t}\n\t\t\t}, this));\n\t\t\tlist.data.attachEvent(\"onAfterFilter\", bind(this._suggest_after_filter, this));\n\t\t\tlist.data.attachEvent(\"onStoreLoad\", bind(this._suggest_after_filter, this));\n\t\t\tif (isUndefined(this._settings.fitMaster))\n\t\t\t\tthis._settings.fitMaster = true;\n\t\t} else if (type == \"calendar\"){\n\t\t\tlist.attachEvent(\"onDateSelect\", function(){\n\t\t\t\tthis.getParentView().setMasterValue({ value:list.getSelectedDate() }, list.config.multiselect);\n\t\t\t});\n\t\t\tlist.attachEvent(\"onTodaySet\", function(date){\n\t\t\t\tthis.getParentView().setMasterValue({ value:date});\n\t\t\t});\n\t\t\tlist.attachEvent(\"onDateClear\", function(date){\n\t\t\t\tthis.getParentView().setMasterValue({ value:date});\n\t\t\t});\n\t\t} else if (type == \"colorboard\"){\n\t\t\tlist.attachEvent(\"onItemClick\", function(value){\n\t\t\t\tthis.getParentView().setMasterValue({ value:value });\n\t\t\t});\n\t\t}\n\t},\n\tinput_setter: function(value) {\n\t\tthis.linkInput(value);\n\t\treturn 0;\n\t},\n\tlinkInput: function(input){\n\t\tvar node;\n\t\tif (input.getInputNode){\n\t\t\tnode = input.getInputNode();\n\t\t\tnode.webix_master_id = input._settings.id;\n\t\t} else\n\t\t\tnode = toNode(input);\n\n\t\t_event(node,\"keydown\",function(e){\n\t\t\tif ((node != document.body || this.isVisible()) && (input.config ? (!input.config.readonly) : (!node.getAttribute(\"readonly\"))))\n\t\t\t\tthis._suggestions(e);\n\t\t}, {bind:this});\n\t\t\n\t\tif(input._getInputDiv)\n\t\t\tnode = input._getInputDiv();\n\t\t\n\t\tnode.setAttribute(\"aria-autocomplete\", \"list\");\n\t\tnode.setAttribute(\"aria-expanded\", \"false\");\n\n\t\tif(node.tagName === \"DIV\"){\n\t\t\tnode.setAttribute(\"aria-live\", \"assertive\");\n\t\t\tnode.setAttribute(\"aria-atomic\", \"true\");\n\t\t}\n\n\t\tthis._non_ui_mode = true;\n\t},\n\t_suggestions: function(e){\n\t\te = (e||event);\n\t\tvar list = this.getList();\n\t\tvar trg = e.target||e.srcElement;\n\t\tif((trg == document.body && !this.isVisible()) || trg.className ==\"webix_clipbuffer\")\n\t\t\treturn;\n\n\t\tthis._last_input_target = trg;\n\t\tthis._settings.master = trg.webix_master_id;\n\n\t\tvar code = e.keyCode;\n\t\t//shift and ctrl\n\t\tif (code == 16 || code == 17) return;\n\n\t\t// tab - hide popup and do nothing\n\t\tif (code == 9)\n\t\t\treturn this._tab_key(e,list);\n\n\t\t// escape - hide popup\n\t\tif (code == 27)\n\t\t\treturn this._escape_key(e,list);\n\n\t\t// enter\n\t\tif (code == 13)\n\t\t\treturn this.$enterKey(e,list);\n\n\t\t// up/down/right/left are used for navigation\n\t\tif (this._navigate(e) && this.isVisible()){\n\t\t\tpreventEvent(e);\n\t\t\treturn false;\n\t\t}\n\n\t\tif (isUndefined(trg.value) && !trg.isContentEditable) return;\n\n\t\tif (this._last_delay)\n\t\t\tthis._last_delay = clearTimeout(this._last_delay);\n\n\t\tthis._last_delay = delay(function(){\n\t\t\t//focus moved to the different control, suggest is not necessary\n\t\t\tif (!this._non_ui_mode &&\n\t\t\t\t\tUIManager.getFocus() != $$(this._settings.master)) return;\n\n\t\t\tthis._resolve_popup = true;\n\t\t\t//spreadsheet use contentEditable div for cell highlighting\n\t\t\tvar val = trg.isContentEditable ? trg.innerText : trg.value;\n\n\t\t\tif (this._before_filtering)\n\t\t\t\tthis._before_filtering();\n\n\t\t\t// used to prevent showing popup when it was initialized\n\t\t\tif (list.config.dataFeed)\n\t\t\t\tlist.filter(\"value\", val);\n\t\t\telse if (list.filter){\n\t\t\t\tlist.filter(bind(function(item){\n\t\t\t\t\treturn this._settings.filter.call(this,item,val);\n\t\t\t\t}, this));\n\t\t\t}\n\t\t}, this, [], this._settings.keyPressTimeout);\n\t},\n\t_suggest_after_filter: function() {\n\t\tif (!this._resolve_popup) return true;\n\t\tthis._resolve_popup = false;\n\n\t\tvar list = this.getList();\n\t\t\n\t\t// filtering is complete\n\t\t// if there are as min 1 variant it must be shown, hidden otherwise\n\t\tif (list.count() >0){\n\t\t\tthis.adjust();\n\t\t\tif(!this.isVisible())\n\t\t\t\tthis._dont_unfilter = true;\n\t\t\tthis.show(this._last_input_target,null,true);\n\t\t\tthis._dont_unfilter = false;\n\t\t} else {\n\t\t\tthis.hide();\n\t\t\tthis._last_input_target = null;\n\t\t}\n\t},\n\n\tshow:function(node){\n\t\tif (!this.isVisible() || this._last_input_target != node){\n\t\t\tvar list = this.getList();\n\t\t\tif (list.filter && !this._dont_unfilter){\n\t\t\t\tlist.filter(\"\");\n\t\t\t}\n\n\t\t\tif (this.$customWidth){\n\t\t\t\tthis.$customWidth(node);\n\t\t\t}\n\t\t\telse if (node.tagName && this._settings.fitMaster){\n\t\t\t\tthis._settings.width = node.offsetWidth -2 ; //2 - borders\n\t\t\t}\n\n\t\t\tif (list._zoom_level)\n\t\t\t\tlist.render();\n\n\t\t\tthis.adjust();\n\n\t\t\t// needed to return focus\n\t\t\tif (node.tagName == \"INPUT\" || node.tagName == \"TEXTAREA\")\n\t\t\t\tthis._last_input_target = node;\n\t\t}\n\t\tpopup.api.show.apply(this, arguments);\n\t},\n\t_show_selection:function(list){\n\t\tlist = list||this.getList();\n\t\tvar value = this.getMasterValue();\n\n\t\tif( list.select && list.showItem ){\n\n\t\t\tif (value && list.exists && list.exists(value)){\n\t\t\t\tlist.select(value);\n\t\t\t\tlist.showItem(value);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tlist.unselect();\n\t\t\t\tlist.showItem(list.getFirstId());\n\t\t\t}\n\t\t}\n\t\telse if(list.setValue){\n\t\t\tif (this._settings.master)\n\t\t\t\tvalue = $$(this._settings.master).$prepareValue(value);\n\t\t\tlist.setValue(value);\n\t\t}\n\t},\n\t$enterKey:function(e, list){\n\t\tconst visible = this.isVisible();\n\t\tlet value;\n\t\tlet master;\n\n\t\tif (this._settings.master)\n\t\t\tmaster = $$(this._settings.master);\n\n\t\tif (master && master._settings.editable && master._applyChanges)\n\t\t\tmaster._applyChanges();\n\t\telse if (visible){\n\t\t\tif (list.count && list.count()){\n\t\t\t\tvalue = list.getSelectedId(false, true);\n\t\t\t\tif (list.count()==1 && list.getFirstId()!=value)\n\t\t\t\t\tvalue = list.getFirstId();\n\t\t\t\tif (value)\n\t\t\t\t\tvalue = list.getItem(value);\n\t\t\t}\n\t\t\telse if (list.getSelectedDate && list.getSelectedDate())\n\t\t\t\tvalue = { value:list.getSelectedDate() };\n\t\t\telse if (list.getValue && list.getValue())\n\t\t\t\tvalue = { value:list.getValue() };\n\t\t\t\n\t\t\tif (value)\n\t\t\t\tthis.setMasterValue(value);\n\t\t}\n\n\t\tif (visible)\n\t\t\tthis.hide();\n\t\telse if (this._show_on_key_press)\n\t\t\tthis.show(this._last_input_target);\n\t},\n\t_escape_key:function(){\n\t\treturn this.hide();\n\t},\n\t_tab_key:function(){\n\t\treturn this.hide();\n\t},\n\t/*! suggestions navigation: up/down buttons move selection\n\t *\t@param e\n\t *\t\tevent object\n\t **/\n\t_navigate: function(e) {\n\t\tvar list = this.getList();\n\t\tvar code = e.keyCode;\n\t\tvar data;\n\n\t\tif( list.moveSelection && code < 41 && code > 32 && !e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey) {\n\t\t\t// down and up arrows\n\t\t\tif (code === 40 || code === 38) {\n\t\t\t\tif (this._show_on_key_press && !this.isVisible())\n\t\t\t\t\tthis.show(this._last_input_target);\n\n\t\t\t\tlet dir = (code === 38) ? \"up\" : \"down\";\n\t\t\t\tlist.moveSelection(dir, false, false);\n\t\t\t}// other arrows\n\t\t\telse {\n\t\t\t\tif(list.count || (!list.count && !list.isVisible()))\n\t\t\t\t\treturn false;\n\n\t\t\t\tlet dir;\n\t\t\t\tif(code == 33) dir = \"pgup\";\n\t\t\t\tif(code == 34) dir = \"pgdown\";\n\t\t\t\tif(code == 35) dir = \"bottom\";\n\t\t\t\tif(code == 36) dir = \"top\";\n\t\t\t\tif(code == 37) dir = \"left\";\n\t\t\t\tif(code == 39) dir = \"right\";\n\n\t\t\t\tlist.moveSelection(dir, false, false);\n\t\t\t}\n\n\t\t\tif(list.count)\n\t\t\t\tdata = list.getSelectedItem();\n\t\t\telse if(list.getSelectedDate)\n\t\t\t\tdata = { value:list.getVisibleDate()};\n\t\t\telse if(list.getValue)\n\t\t\t\tdata = { value:list.getValue() };\n\n\t\t\tif (this.isVisible())\n\t\t\t\tthis._preselectMasterOption(data);\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\tgetValue:function(){\n\t\tvar list = this.getList();\n\t\tvar  value = (list.getValue ? list.getValue() : list.getSelectedId()) || \"\";\n\t\tvalue = value.id || value;\n\n\t\t// check empty\n\t\tif(list.getItem){\n\t\t\tvar item = list.getItem(value);\n\t\t\tif(item && item.$empty)\n\t\t\t\treturn \"\";\n\t\t}\n\t\treturn value;\n\t},\n\tsetValue:function(value){\n\t\tvar list = this.getList();\n\t\tif(value){\n\t\t\tif(list.exists(value)){\n\t\t\t\tlist.select(value);\n\t\t\t\tlist.showItem(value);\n\t\t\t}\n\t\t}else{\n\t\t\tlist.unselect();\n\t\t\tlist.showItem(list.getFirstId());\n\t\t}\n\t}\n};\n\n\nconst view = protoUI(api,  popup.view);\nexport default {api, view};","import suggest from \"../views/suggest\";\nimport {protoUI, $$} from \"../ui/core\";\nimport {delay, _to_array, bind, isArray} from \"../webix/helpers\";\nimport i18n from \"../webix/i18n\";\nimport {callEvent} from \"../webix/customevents\";\n\nconst api = {\n\tname:\"multisuggest\",\n\tdefaults:{\n\t\tseparator:\",\",\n\t\ttype:\"layout\",\n\t\tbutton:true,\n\t\twidth:0,\n\t\tfilter:function(item,value){\n\t\t\tvar itemText = this.getItemText(item.id);\n\t\t\treturn (itemText.toString().toLowerCase().indexOf(value.toLowerCase())>-1);\n\t\t},\n\t\tbody:{\n\t\t\trows:[\n\t\t\t\t{ view:\"list\", type:\"multilist\", borderless:true,  autoheight:true, yCount:5, multiselect:\"touch\", select:true,\n\t\t\t\t\ton:{\n\t\t\t\t\t\tonItemClick: function(id){\n\t\t\t\t\t\t\tvar popup = this.getParentView().getParentView();\n\t\t\t\t\t\t\tdelay(function(){\n\t\t\t\t\t\t\t\tpopup._toggleOption(id);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}},\n\t\t\t\t{ view:\"button\", click:function(){\n\t\t\t\t\tvar suggest = this.getParentView().getParentView();\n\t\t\t\t\tsuggest.hide();\n\t\t\t\t\tdelay(function(){\n\t\t\t\t\t\tcallEvent(\"onEditEnd\",[]);\n\t\t\t\t\t});\n\t\t\t\t}}\n\t\t\t]\n\t\t}\n\t},\n\n\t_toggleOption: function(id, ev, all){\n\t\tvar value = this.getValue();\n\t\tvar values = all || _to_array(value?this.getValue().split(this._settings.separator):[]);\n\t\tvar master = $$(this._settings.master);\n\t\t\n\t\tif(!all) {\n\t\t\tif(values.find(id)<0)\n\t\t\t\tvalues.push(id);\n\t\t\telse\n\t\t\t\tvalues.remove(id);\n\t\t}\n\n\t\tvar data = values.join(this._settings.separator);\n\t\tvar text = this.setValue(values).join(this._settings.separator);\n\t\tif(master)\n\t\t\tmaster.setValue(data);\n\t\telse if (this._last_input_target)\n\t\t\tthis._last_input_target.value = text;\n\n\t\tthis.callEvent(\"onValueSuggest\", [{id:data, text:text}]);\n\n\t\tif(ev){ //only for clicks in checksuggest\n\t\t\tvar checkbox = this.getList().getItemNode(id).getElementsByTagName(\"SPAN\");\n\t\t\tif(checkbox && checkbox.length) checkbox[0].focus();\n\t\t}\n\t},\n\t_get_extendable_cell:function(obj){\n\t\treturn obj.rows[0];\n\t},\n\t_set_on_popup_click:function(){\n\t\tvar button = this.getButton();\n\t\tvar text = (this._settings.button?(this._settings.buttonText || i18n.combo.select):0);\n\t\tif(button){\n\t\t\tif(text){\n\t\t\t\tbutton._settings.value = text;\n\t\t\t\tbutton.refresh();\n\t\t\t}\n\t\t\telse\n\t\t\t\tbutton.hide();\n\t\t}\n\t\tif (this._settings.selectAll)\n\t\t\treturn this.getBody().getChildViews()[0].show();\n\n\t\tvar list = this.getList();\n\t\t//for standalone suggests we need to have a normal show/hide logic\n\t\t//use a wrapper function, so it can later be cleared in multicombo\n\t\tlist.data.attachEvent(\"onAfterFilter\", bind(function(){\n\t\t\treturn this._suggest_after_filter();\n\t\t}, this));\n\t},\n\t_show_selection: function(){\n\t\tvar list = this.getList();\n\t\tvar value = this.getMasterValue();\n\t\tif(value){\n\t\t\tvalue = value.toString().split(this.config.separator);\n\t\t\tif (value[0]){\n\t\t\t\tfor (var i = 0; i < value.length; i++){\n\t\t\t\t\tif(list.exists(value[i]))\n\t\t\t\t\t\tlist.select(value[i], true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tgetButton:function(){\n\t\treturn this.getBody().getChildViews()[1];\n\t},\n\tgetList:function(){\n\t\treturn this.getBody().getChildViews()[0];\n\t},\n\tsetValue:function(value){\n\t\tvar text = [];\n\t\tvar list = this.getList();\n\t\tlist.unselect();\n\n\t\tif (value){\n\t\t\tif (!isArray(value))\n\t\t\t\tvalue = value.toString().split(this.config.separator);\n\n\t\t\tif (value[0]){\n\t\t\t\tfor (var i = 0; i < value.length; i++){\n\t\t\t\t\tif (list.getItem(value[i])){\n\t\t\t\t\t\tif(list.exists(value[i]))\n\t\t\t\t\t\t\tlist.select(value[i], true);\n\t\t\t\t\t\ttext.push(this.getItemText(value[i]));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._settings.value = value?value.join(this.config.separator):\"\";\n\t\treturn text;\n\t},\n\tgetValue:function(){\n\t\treturn this._settings.value;\n\t}\n};\n\n\nconst view = protoUI(api,  suggest.view);\nexport default {api, view};","import multisuggest from \"../views/multisuggest\";\nimport {protoUI, $$} from \"../ui/core\";\nimport {isArray, copy, delay} from \"../webix/helpers\";\nimport i18n from \"../webix/i18n\";\nimport {callEvent} from \"../webix/customevents\";\n\nconst api = {\n\tname:\"checksuggest\",\n\tdefaults:{\n\t\tbutton:false,\n\t\tselectAll: false,\n\t\tbody:{\n\t\t\trows:[\n\t\t\t\t{ view:\"checkbox\", hidden:true, customCheckbox:false, borderless: false, css:\"webix_checksuggest_select_all\", \n\t\t\t\t\tlabelRight:i18n.combo.selectAll, \n\t\t\t\t\tlabelWidth:0,\n\t\t\t\t\theight:28, inputHeight:20,\n\t\t\t\t\ton:{\n\t\t\t\t\t\tonItemClick: function(e){\n\t\t\t\t\t\t\tvar popup = this.getParentView().getParentView();\n\t\t\t\t\t\t\tvar check = popup.getList();\n\t\t\t\t\t\t\tvar values = check.data.order;\n\t\t\t\t\t\t\tfor(var i = 0; i < values.length; i++) {\n\t\t\t\t\t\t\t\tvar value = check.getItem(values[i]);\n\t\t\t\t\t\t\t\tvalue.$checked = this.getValue();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar result = this.getValue() ? [].concat(values) : [];\n\t\t\t\t\t\t\tpopup._toggleOption(values[0], e, result);\n\t\t\t\t\t\t\tcheck.refresh();\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonChange: function() {\n\t\t\t\t\t\t\tvar link = this.$view.querySelector(\"label\");\n\t\t\t\t\t\t\tvar locale = i18n.combo;\n\t\t\t\t\t\t\tlink.textContent = this.getValue() ? locale.unselectAll : locale.selectAll;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonAfterRender: function() {\n\t\t\t\t\t\t\tvar popup = this.getParentView().getParentView();\n\t\t\t\t\t\t\tthis.setValue(popup._is_all_selected()*1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}},\n\t\t\t\t{ view:\"list\",  css:\"webix_multilist\", borderless:true, autoheight:true, yCount:5,\n\t\t\t\t\ttype:\"checklist\",\n\t\t\t\t\ton:{\n\t\t\t\t\t\tonItemClick: function(id, e){\n\t\t\t\t\t\t\tvar item = this.getItem(id);\n\t\t\t\t\t\t\titem.$checked = item.$checked?0:1;\n\t\t\t\t\t\t\tthis.refresh(id);\n\t\t\t\t\t\t\tvar popup = this.getParentView().getParentView();\n\t\t\t\t\t\t\tpopup._click_stamp = new Date();\n\n\t\t\t\t\t\t\tpopup._toggleOption(id, e);\n\n\t\t\t\t\t\t\tif(popup.config.selectAll) {\n\t\t\t\t\t\t\t\tif (!item.$checked)\n\t\t\t\t\t\t\t\t\tpopup.getBody()._cells[0].setValue(0);\n\t\t\t\t\t\t\t\telse if(popup._is_all_selected())\n\t\t\t\t\t\t\t\t\tpopup.getBody()._cells[0].setValue(1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ view:\"button\", click:function(){\n\t\t\t\t\tvar suggest = this.getParentView().getParentView();\n\t\t\t\t\tsuggest.hide();\n\t\t\t\t\tdelay(function(){\n\t\t\t\t\t\tcallEvent(\"onEditEnd\",[]);\n\t\t\t\t\t});\n\t\t\t\t}}\n\t\t\t]\n\t\t}\n\t},\n\t_is_all_selected:function(){\n\t\tvar all = (this.getValue() || \"\").split(this.config.separator);\n\t\treturn (all.length === this.getList().count());\n\t},\n\t_get_extendable_cell:function(obj){\n\t\treturn obj.rows[1];\n\t},\n\tgetButton:function(){\n\t\treturn this.getBody().getChildViews()[2];\n\t},\n\tgetList:function(){\n\t\treturn this.getBody().getChildViews()[1];\n\t},\n\t$init: function(){\n\t\tthis._valueHistory = {};\n\t\tthis.$ready.push(this._onReady);\n\t},\n\t_onReady: function(){\n\t\tvar list = this.getList();\n\t\tif(list.config.dataFeed){\n\t\t\tvar suggest = this;\n\t\t\tlist.attachEvent(\"onAfterLoad\", function(){\n\t\t\t\tsuggest.setValue(suggest._settings.value);\n\t\t\t});\n\t\t\tlist.getItem = function(id){\n\t\t\t\treturn this.data.pull[id] || suggest._valueHistory[id];\n\t\t\t};\n\t\t}\n\t\t\n\t\tif(this.config.master && !this.config.selectAll)\n\t\t\tthis.getBody().getChildViews()[0].hide();\n\t},\n\t$enterKey: function(popup,list) {\n\t\tif (list.count && list.count()){\n\t\t\tif (popup.isVisible()) {\n\t\t\t\tvar value = list.getSelectedId(false, true);\n\t\t\t\tif(value){\n\t\t\t\t\tthis._toggleOption(value);\n\t\t\t\t}\n\t\t\t\tpopup.hide();\n\t\t\t} else {\n\t\t\t\tpopup.show(this._last_input_target);\n\t\t\t}\n\t\t} else {\n\t\t\tif (popup.isVisible())\n\t\t\t\tpopup.hide();\n\t\t}\n\t},\n\t_show_selection: function(){\n\t\tvar list = this.getList();\n\t\tif( list.select)\n\t\t\tlist.unselect();\n\t},\n\tsetValue:function(value){\n\t\tvar i,\n\t\t\tlist = this.getList(),\n\t\t\ttext = [],\n\t\t\tvalues = {},\n\t\t\tchanged = [];\n\n\t\tvalue = value || [];\n\n\t\tif (!isArray(value))\n\t\t\tvalue = value.toString().split(this.config.separator);\n\t\telse if(list.config.dataFeed)\n\t\t\tvalue = this._toMultiValue(value);\n\n\t\tfor ( i = 0; i < value.length; i++){\n\t\t\tvalues[value[i]] = 1;\n\t\t\tif(list.getItem(value[i])){\n\t\t\t\tif( this._valueHistory)\n\t\t\t\t\tthis._valueHistory[value[i]] = copy(list.getItem(value[i]));\n\t\t\t\ttext.push(this.getItemText(value[i]));\n\t\t\t}\n\t\t}\n\n\t\tlist.data.each(function(item){\n\t\t\tif(item.$checked){\n\t\t\t\tif(!values[item.id]){\n\t\t\t\t\titem.$checked = 0;\n\t\t\t\t\tchanged.push(item.id);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse{\n\t\t\t\tif(values[item.id]){\n\t\t\t\t\titem.$checked = 1;\n\t\t\t\t\tchanged.push(item.id);\n\t\t\t\t}\n\t\t\t}\n\n\t\t},this,true);\n\n\n\t\tfor( i=0; i < changed.length; i++ ){\n\t\t\tlist.refresh(changed[i]);\n\t\t}\n\t\tthis._settings.value = value.length?value.join(this.config.separator):\"\";\n\t\treturn text;\n\t},\n\tgetValue:function(){\n\t\treturn this._settings.value;\n\t},\n\t_preselectMasterOption: function(){\n\t\tvar node, master;\n\t\tif (this._settings.master){\n\t\t\tmaster = $$(this._settings.master);\n\t\t\tnode = master.getInputNode();\n\t\t}\n\t\tnode = node || this._last_input_target;\n\t\tif(node)\n\t\t\tnode.focus();\n\t},\n\t_toMultiValue: function(value){\n\t\tif(value && isArray(value)){\n\t\t\tvar values = [];\n\t\t\tfor(var i =0; i < value.length; i++){\n\t\t\t\tif(value[i].id){\n\t\t\t\t\tthis._valueHistory[value[i].id] = copy(value[i]);\n\t\t\t\t\tvalues.push(value[i].id);\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tvalues.push(value[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvalue = values;\n\t\t}\n\t\treturn value;\n\t}\n};\n\n\nconst view = protoUI(api,  multisuggest.view);\nexport default {api, view};","import suggest from \"../views/suggest\";\nimport {protoUI} from \"../ui/core\";\nimport {bind} from \"../webix/helpers\";\n\n\nconst api = {\n\tname:\"gridsuggest\",\n\tdefaults:{\n\t\ttype:\"datatable\",\n\t\tfitMaster:false,\n\t\twidth:0,\n\t\tbody:{\n\t\t\tnavigation:true,\n\t\t\tautoheight:true,\n\t\t\tautowidth:true,\n\t\t\tselect:true\n\t\t},\n\t\tfilter:function(item, value){\n\t\t\tvar text = this.config.template(item);\n\t\t\tif (text.toString().toLowerCase().indexOf(value.toLowerCase())===0) return true;\n\t\t\treturn false;\n\t\t}\n\t},\n\t$init:function(obj){\n\t\tif (!obj.body.columns)\n\t\t\tobj.body.autoConfig = true;\n\t\tif (!obj.template)\n\t\t\tobj.template = bind(this._getText, this);\n\t},\n\t_getText:function(item){\n\t\tvar grid = this.getBody();\n\t\tvar value = this.config.textValue || grid.config.columns[0].id;\n\t\treturn grid.getText(item.id, value);\n\t}\n};\n\n\nconst view = protoUI(api,  suggest.view);\nexport default {api, view};","import suggest from \"../views/suggest\";\nimport {protoUI} from \"../ui/core\";\n\n\nconst api = {\n\tname:\"datasuggest\",\n\tdefaults:{\n\t\ttype:\"dataview\",\n\t\tfitMaster:false,\n\t\twidth:0,\n\t\tbody:{\n\t\t\txCount:3,\n\t\t\tautoheight:true,\n\t\t\tselect:true\n\t\t}\n\t}\n};\n\n\nconst view = protoUI(api,  suggest.view);\nexport default {api, view};","import suggest from \"../views/suggest\";\nimport {getSelectionRange, setSelectionRange, preventEvent} from \"../webix/html\";\nimport {protoUI, $$} from \"../ui/core\";\n\n\nconst api = {\n\tname:\"mentionsuggest\",\n\tdefaults:{\n\t\tsymbol:\"@\",\n\t\tfilter:function(data, value){\n\t\t\tconst s = this._settings.symbol;\n\t\t\tvalue = value.substring(0, this._last_cursor_pos);\n\t\t\tif (value.indexOf(s) === -1) return false;\n\t\t\telse {\n\t\t\t\tvalue = value.substring(value.lastIndexOf(s)+s.length);\n\t\t\t\tif (value.length){\n\t\t\t\t\tconst text = data.id ? this.getItemText(data.id) : (data.text||data.value);\n\t\t\t\t\treturn text.toString().toLowerCase().indexOf(value.toLowerCase()) !== -1;\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t},\n\t$init:function(){\n\t\tthis.attachEvent(\"onValueSuggest\", this._before_filtering);\n\t},\n\t$enterKey:function(e){\n\t\tif (this.isVisible()){\n\t\t\tpreventEvent(e);\n\n\t\t\tlet master;\n\t\t\tif (this._settings.master)\n\t\t\t\tmaster = $$(this._settings.master);\n\n\t\t\tif (master && master.callEvent)\n\t\t\t\tmaster.callEvent(\"onEnter\");\n\t\t}\n\n\t\treturn suggest.api.$enterKey.apply(this, arguments);\n\t},\n\t_before_filtering:function(){\n\t\tif (this._last_input_target)\n\t\t\tthis._last_cursor_pos = getSelectionRange(this._last_input_target).start;\n\t},\n\t_get_details:function(){\n\t\treturn { pos:this._last_cursor_pos, symbol:this._settings.symbol };\n\t},\n\t_preselectMasterOption:function(){},\n\t_set_input_value:function(text){\n\t\tconst s = this._settings.symbol;\n\t\tlet value = this._last_input_target.value;\n\t\tlet last = value.substring(this._last_cursor_pos);\n\n\t\tvalue = value.substring(0, this._last_cursor_pos);\n\t\tvalue = value.substring(0, value.lastIndexOf(s)+s.length) + text;\n\n\t\tthis._last_input_target.value = value + last;\n\t\tsetSelectionRange(this._last_input_target, value.length);\n\t},\n\t_show_on_key_press:false\n};\n\n\nconst view = protoUI(api,  suggest.view);\nexport default {api, view};","import suggest from \"../views/suggest\";\nimport {protoUI, $$} from \"../ui/core\";\nimport {copy, bind} from \"../webix/helpers\";\n\n\nconst api = {\n\tname:\"daterangesuggest\",\n\tdefaults:{\n\t\ttype:\"daterange\",\n\t\tbody: {\n\t\t\tview:\"daterange\", icons:true, button:true, borderless:true\n\t\t}\n\t},\n\tgetValue:function(){\n\t\treturn this.getRange().getValue();\n\t},\n\tsetValue:function(value){\n\t\tthis.getRange().setValue(copy(value));\n\t},\n\tgetRange:function(){\n\t\treturn this.getBody();\n\t},\n\tgetButton:function(){\n\t\treturn this.getBody().getChildViews()[1].getChildViews()[1];\n\t},\n\t_setValue:function(value, hide){\n\t\tvar master = $$(this._settings.master);\n\n\t\tif(master){\n\t\t\tmaster.setValue(value);\n\t\t\tif(hide) this.hide();\n\t\t}\n\t\telse\n\t\t\tthis.setValue(value);\n\t},\n\t_set_on_popup_click:function(){\n\t\tvar range  = this.getRange();\n\t\trange.attachEvent(\"onAfterDateSelect\", bind(function(value) {this._setValue(value);}, this));\n\t\trange.attachEvent(\"onDateClear\", bind(function(value) {this._setValue(value);}, this));\n\t\trange.attachEvent(\"onTodaySet\", bind(function(value) {this._setValue(value);}, this));\n\t}\n};\n\n\nconst view = protoUI(api,  suggest.view);\nexport default {api, view};","import datepicker from \"../views/datepicker\";\nimport {protoUI, $$} from \"../ui/core\";\nimport {copy} from \"../webix/helpers\";\nimport i18n from \"../webix/i18n\";\n\n\nconst api = {\n\t$cssName:\"datepicker\",\n\tname:\"daterangepicker\",\n\t$init:function(config){\n\t\t//set non-empty initial value\n\t\tthis._settings.value = {};\n\t\t// other types are not implemented\n\t\tdelete config.type;\n\t\t// only start/end values can be selected\n\t\tdelete config.multiselect;\n\t},\n\tdefaults:{\n\t\tseparator:\" - \"\n\t},\n\t_init_popup:function(){\n\t\tvar obj = this._settings;\n\t\tif (obj.suggest)\n\t\t\tobj.popup = obj.suggest;\n\t\telse if (!obj.popup){\n\t\t\tobj.popup = obj.suggest = this.suggest_setter({\n\t\t\t\tview:\"daterangesuggest\", body:{\n\t\t\t\t\ttimepicker:obj.timepicker, calendarCount:obj.calendarCount, height:250+(obj.button || obj.icons?30:0)\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tthis._init_once = function(){};\n\t},\n\t$prepareValue:function(value){\n\t\tvalue = value || {};\n\t\tvalue.start = datepicker.api.$prepareValue.call(this, value.start?value.start:null);\n\t\tvalue.end = datepicker.api.$prepareValue.call(this, value.end?value.end:null);\n\n\t\tvar daterange = $$(this._settings.popup).getRange();\n\t\treturn copy(daterange._correct_value(value));\n\t},\n\t$compareValue:function(oldvalue, value){\n\t\tvar compare = datepicker.api.$compareValue;\n\t\tvar start = compare.call(this, oldvalue.start, value.start);\n\t\tvar end = compare.call(this, oldvalue.end, value.end);\n\n\t\treturn (start && end);\n\t},\n\t$setValue:function(value){\n\t\tvalue = value || {};\n\n\t\tthis._settings.text = (value.start?this._get_visible_text(value.start):\"\")+(value.end?(this._settings.separator + this._get_visible_text(value.end)):\"\");\n\t\tthis._set_visible_text();\n\t},\n\t$render:function(obj){\n\t\tobj.value = this.$prepareValue(obj.value);\n\t\tthis.$setValue(obj.value);\n\t},\n\tgetValue:function(){\n\t\tvar value = this._settings.value;\n\n\t\tif (!this._rendered_input)\n\t\t\tvalue = this.$prepareValue(value) || null;\n\t\telse if (this._settings.editable){\n\t\t\tvar formatDate = this._formatDate||i18n.dateFormatDate;\n\t\t\tlet iValue = (this.getInputNode().value||\"\").split(this._settings.separator);\n\t\t\tvalue = this._formatValue(formatDate, {start:iValue[0], end:iValue[1]});\n\t\t}\n\n\t\tif (this._settings.stringResult){\n\t\t\tvar formatStr = i18n.parseFormatStr;\n\t\t\treturn this._formatValue(formatStr, value);\n\t\t}\n\t\t\n\t\treturn value||null;\n\t},\n\t_formatValue:function(format, value){\n\t\tif(value.start) value.start = format(value.start);\n\t\tif(value.end) value.end = format(value.end);\n\t\treturn value;\n\t}\n};\n\n\nconst view = protoUI(api,  datepicker.view);\nexport default {api, view};","import EventSystem from \"../core/eventsystem\";\nimport Settings from \"../core/settings\";\nimport {addCss, preventEvent} from \"../webix/html\";\nimport {protoUI} from \"../ui/core\";\nimport env from \"../webix/env\";\nimport Touch from \"../core/touch\";\nimport {toNode, isUndefined} from \"../webix/helpers\";\nimport {_event, event} from \"../webix/htmlevents\";\n\n\nconst api = {\n\tname:\"vscroll\",\n\t$apiOnly:true,\n\tdefaults:{\n\t\tscroll:\"x\",\n\t\tscrollStep:40,\n\t\tscrollPos:0,\n\t\tscrollSize:18,\n\t\tscrollVisible:1,\n\t\tzoom:1\n\t},\n\t$init:function(config){\n\t\tvar dir = config.scroll||\"x\";\n\t\tvar node = this._viewobj = toNode(config.container);\n\t\tnode.className += \" webix_vscroll_\"+dir;\n\t\tnode.innerHTML=\"<div class='webix_vscroll_body'></div>\";\n\t\t_event(node,\"scroll\", this._onscroll,{bind:this});\n\n\t\tthis._last_set_size = 0;\n\t},\n\treset:function(){\n\t\tthis.config.scrollPos = 0;\n\t\tthis._viewobj[this.config.scroll == \"x\"?\"scrollLeft\":\"scrollTop\"] = 0;\n\t},\n\t_check_quantum:function(value){\n\t\tif (value>1500000){\n\t\t\tthis._settings.zoom = value/1000000;\n\t\t\tvalue = 1000000;\n\t\t} else {\n\t\t\tthis._settings.zoom = 1;\n\t\t}\n\t\treturn value;\n\t},\t\n\tscrollWidth_setter:function(value){\n\t\tvalue = this._check_quantum(value);\n\t\tthis._viewobj.firstChild.style.width = value+\"px\";\n\t\treturn value;\t\t\n\t},\n\tscrollHeight_setter:function(value){\n\t\tvalue = this._check_quantum(value);\n\t\tthis._viewobj.firstChild.style.height = value+\"px\";\n\t\treturn value;\n\t},\n\tsizeTo:function(value, top, bottom){\n\t\tvalue = value-(top||0)-(bottom||0);\n\n\t\tvar width = this._settings.scrollSize;\n\t\t//IEFix\n\t\t//IE doesn't react on scroll-click if it has not at least 1 px of visible content\n\t\tif (env.isIE && width)\n\t\t\twidth += 1;\n\t\tif (!width && this._settings.scrollVisible && !env.$customScroll){\n\t\t\tthis._viewobj.style.pointerEvents=\"none\";\n\t\t\twidth = 14;\n\t\t}\n\n\t\tif (!width){\n\t\t\tthis._viewobj.style.display = \"none\";\n\t\t} else {\n\t\t\tthis._viewobj.style.display = \"block\";\n\t\t\tif (top)\n\t\t\t\tthis._viewobj.style.marginTop = top+ \"px\";\n\t\t\tthis._viewobj.style[this._settings.scroll == \"x\"?\"width\":\"height\"] =  Math.max(0,value)+\"px\";\n\t\t\tthis._viewobj.style[this._settings.scroll == \"x\"?\"height\":\"width\"] = width+\"px\";\n\t\t}\n\n\t\tthis._last_set_size = value;\n\t},\n\tgetScroll:function(){\n\t\treturn Math.round(this._settings.scrollPos*this._settings.zoom);\n\t},\n\tgetSize:function(){\n\t\treturn Math.round((this._settings.scrollWidth||this._settings.scrollHeight)*this._settings.zoom);\n\t},\n\tscrollTo:function(value){\n\t\tif (value<0)\n\t\t\tvalue = 0;\n\t\tvar config = this._settings;\n\n\t\tvalue = value / config.zoom;\n\t\t//safety check for negative values\n\t\tif (value < 0) value = 0;\n\n\t\t//apply new position\n\t\tif (value != this._settings.scrollPos){\n\t\t\tthis._viewobj[config.scroll == \"x\"?\"scrollLeft\":\"scrollTop\"] = value;\n\t\t\tthis._onscroll_inner(value, true);\n\t\t\treturn true;\n\t\t}\n\t},\n\t_onscroll:function(){\t\n\t\tvar x = this._viewobj[this._settings.scroll == \"x\"?\"scrollLeft\":\"scrollTop\"];\n\t\tif (Math.floor(x) != Math.floor(this._settings.scrollPos))\n\t\t\tthis._onscroll_inner(x, false);\n\t},\n\t_onscroll_inner:function(value, api){\n\t\t//size of scroll area\n\t\tvar height = (this._settings.scrollWidth||this._settings.scrollHeight);\n\t\t//if we scrolled to the end of the area\n\t\tif (value >= height - this._last_set_size/(api?this._settings.zoom:1)) {\n\t\t\t//set value so the last row is visible\n\t\t\tvalue = Math.max(0, height - this._last_set_size/this._settings.zoom);\n\t\t}\n\t\t\n\t\tthis._settings.scrollPos = value || 0;\n\t\tthis.callEvent(\"onScroll\",[this.getScroll()]);\n\t},\n\tactiveArea:function(area, x_mode){\n\t\tthis._x_scroll_mode = x_mode;\n\t\t_event(area,(env.isIE8 ? \"mousewheel\" : \"wheel\"),this._on_wheel,{bind:this, passive:false});\n\t\tthis._add_touch_events(area);\n\t},\n\n\t_add_touch_events: function(area){\n\t\tif(!env.touch && window.navigator.pointerEnabled){\n\t\t\taddCss(area,\"webix_scroll_touch_ie\",true);\n\t\t\t_event(area, \"pointerdown\", function(e){\n\t\t\t\tif(e.pointerType == \"touch\" || e.pointerType == \"pen\"){\n\t\t\t\t\tthis._start_context = Touch._get_context_m(e);\n\t\t\t\t\tthis._start_scroll_pos = this.getScroll();\n\t\t\t\t}\n\t\t\t},{bind:this});\n\n\t\t\tevent(document.body, \"pointermove\", function(e){\n\t\t\t\tvar scroll;\n\t\t\t\tif(this._start_context){\n\t\t\t\t\tthis._current_context = Touch._get_context_m(e);\n\t\t\t\t\tif(this._settings.scroll == \"x\" ){\n\t\t\t\t\t\tscroll = this._current_context.x - this._start_context.x;\n\t\t\t\t\t}\n\t\t\t\t\telse if(this._settings.scroll == \"y\"){\n\t\t\t\t\t\tscroll = this._current_context.y - this._start_context.y;\n\t\t\t\t\t}\n\t\t\t\t\tif(scroll && Math.abs(scroll) > 5){\n\t\t\t\t\t\tthis.scrollTo(this._start_scroll_pos - scroll);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},{bind:this});\n\t\t\tevent(window, \"pointerup\", function(){\n\t\t\t\tif(this._start_context){\n\t\t\t\t\tthis._start_context = this._current_context = null;\n\t\t\t\t}\n\t\t\t},{bind:this});\n\t\t}\n\n\t},\n\t_on_wheel:function(e){\n\t\tvar dir = 0;\n\t\tvar step = e.deltaMode === 0 ? 30 : 1;\n\n\t\tif (env.isIE8)\n\t\t\tdir = e.detail = -e.wheelDelta / 30;\n\n\t\tif (e.deltaX && Math.abs(e.deltaX) > Math.abs(e.deltaY)){\n\t\t\t//x-scroll\n\t\t\tif (this._x_scroll_mode && this._settings.scrollVisible)\n\t\t\t\tdir = e.deltaX / step;\n\t\t} else {\n\t\t\t//y-scroll\n\t\t\tif (!this._x_scroll_mode && this._settings.scrollVisible){\n\t\t\t\tif (isUndefined(e.deltaY))\n\t\t\t\t\tdir = e.detail;\n\t\t\t\telse\n\t\t\t\t\tdir = e.deltaY / step;\n\t\t\t}\n\t\t}\n\n\t\t// Safari requires target preserving\n\t\t// (used in _check_rendered_cols of DataTable)\n\t\tif(env.isSafari)\n\t\t\tthis._scroll_trg = e.target|| e.srcElement;\n\n\t\tif (dir)\n\t\t\tif (this.scrollTo(this.getScroll() + dir*this._settings.scrollStep))\n\t\t\t\treturn preventEvent(e);\n\n\t}\n};\n\n\nconst view = protoUI(api, EventSystem, Settings);\nexport default {api, view};","import toolbar from \"../views/toolbar\";\nimport {protoUI} from \"../ui/core\";\n\n\nconst api = {\n\tname: \"excelbar\",\n\tdefaults:{\n\t\tpadding:0,\n\t\ttype:\"line\"\n\t},\n\t$init:function(config){\n\t\tconfig.cols = [\n\t\t\t{ view:\"tabbar\", options:[\"\"], optionWidth:200, borderless:true, on:{\n\t\t\t\tonaftertabclick:function(){\n\t\t\t\t\tthis.getParentView().callEvent(\"onExcelSheetSelect\", [this.getValue()]);\n\t\t\t\t}\n\t\t\t}}\n\t\t];\n\t},\n\tgetValue:function(){\n\t\treturn this.getInput().getValue();\n\t},\n\tsetValue:function(value){\n\t\treturn this.getInput().setValue(value);\n\t},\n\tgetInput:function(){\n\t\treturn this.getChildViews()[0];\n\t},\n\tsetSheets:function(sheets){\n\t\tvar input = this.getInput();\n\t\tinput.config.options = sheets;\n\t\tinput.refresh();\n\t}\n};\n\n\nconst view = protoUI(api,  toolbar.view);\nexport default {api, view};","import {create, _getClassName, offset, preventEvent} from \"../../webix/html\";\nimport {copy, extend, uid} from \"../../webix/helpers\";\nimport {_event} from \"../../webix/htmlevents\";\n\n\nconst Mixin = {\n\t_init_areaselect: function(){\n\t\tthis._arSelCheckKeys = true;\n\t\tthis._areaSelStorage = {};\n\t\tthis.define(\"select\",\"area\");\n\t\tthis.attachEvent(\"onAfterScroll\", function(){\n\t\t\tthis.refreshSelectArea();\n\t\t});\n\t\tthis.attachEvent(\"onAfterRender\", function(){\n\t\t\tthis.refreshSelectArea();\n\t\t\tthis._setTabindex();\n\t\t});\n\t\tthis.attachEvent(\"onColumnResize\", function(){\n\t\t\tthis.refreshSelectArea();\n\t\t});\n\t\tthis.attachEvent(\"onBeforeColumnHide\", function(column){\n\t\t\tthis._areaSelHiddenIndex = this.getColumnIndex(column);\n\t\t});\n\t\tthis.attachEvent(\"onAfterColumnHide\", function(){\n\t\t\tthis._excludeColumnFromAreas(this._areaSelHiddenIndex);\n\t\t});\n\n\t\tthis._bs_do_select = function(start, end, stopped, ev){\n\t\t\tif(start.row && end.row){\n\t\t\t\tif(stopped){\n\t\t\t\t\tthis.addSelectArea(start, end, true);\n\t\t\t\t\tthis._arSelCheckKeys = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\telse{\n\t\t\t\t\tif(this.callEvent(\"onAreaDrag\",[start, end, ev])){\n\t\t\t\t\t\tif(!this._activeAreaSName && this._arSelCheckKeys && !(this._settings.multiselect && ev && ev.ctrlKey) ){\n\t\t\t\t\t\t\tthis.removeSelectArea();\n\t\t\t\t\t\t\tthis._arSelCheckKeys = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tthis.attachEvent(\"onBeforeAreaAdd\", this._span_correct_range);\n\t\t_event(this._body, \"mousedown\", this._ars_down, {bind:this});\n\t},\n\t_block_sel_flag: true,\n\t_excludeColumnFromAreas: function(index){\n\t\tvar areas = this._areaSelStorage;\n\t\tfor(var a in areas){\n\t\t\tvar area = areas[a];\n\t\t\tif(this.getColumnIndex(area.start.column) <0 ){\n\t\t\t\tif(area.start.column == area.end.column)\n\t\t\t\t\tthis.removeSelectArea(area.name);\n\t\t\t\telse{\n\t\t\t\t\tlet id = this.columnId(index);\n\t\t\t\t\tif(id)\n\t\t\t\t\t\tthis._updateSelectArea(area.name,{row: area.start.row,column: id},null);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if(this.getColumnIndex(area.end.column) <0 ){\n\t\t\t\tlet id = this.columnId(index-1);\n\t\t\t\tif(id)\n\t\t\t\t\tthis._updateSelectArea(area.name,null,{row: area.end.row,column: id});\n\t\t\t}\n\t\t}\n\t},\n\t_extendAreaRange: function(id, area, mode, details){\n\t\tvar sci, eci, sri, eri, ci, ri, iri, ici;\n\t\t\n\t\tif (area){\n\t\t\tsci = this.getColumnIndex(area.start.column);\n\t\t\teci = this.getColumnIndex(area.end.column);\n\t\t\tsri = this.getIndexById(area.start.row);\n\t\t\teri = this.getIndexById(area.end.row);\n\t\t\tci = this.getColumnIndex(id.column);\n\t\t\tri = this.getIndexById(id.row);\n\t\t\t//start cell of area\n\t\t\tiri = this.getIndexById(area.init.row);\n\t\t\tici = this.getColumnIndex(area.init.column);\n\n\t\t\tif(sci > ci || mode == \"left\"){\n\t\t\t\tif(mode === \"left\" && details.ctrl) {\n\t\t\t\t\tsci = this._extendAreaToData(iri, sci, mode);\n\t\t\t\t\teci = ici;\n\t\t\t\t}\t\n\t\t\t\telse if(mode === \"left\" && eci > ici) eci--;\n\t\t\t\telse sci = ci;\n\t\t\t}\n\t\t\telse if(eci <= ci || mode == \"right\"){\n\t\t\t\tif(mode == \"right\" && details.ctrl){\n\t\t\t\t\teci = this._extendAreaToData(iri, eci, mode);\n\t\t\t\t\tsci = ici;\n\t\t\t\t}\n\t\t\t\telse if(mode == \"right\" && sci <ici) sci ++;\n\t\t\t\telse eci = ci;\n\t\t\t}\n\n\t\t\tif(sri > ri || mode ==\"up\"){\n\t\t\t\tif(mode ==\"up\" && details.ctrl) {\n\t\t\t\t\tsri = this._extendAreaToData(sri, ici, mode);\n\t\t\t\t\teri = iri;\n\t\t\t\t}\n\t\t\t\telse if(mode ==\"up\" && eri > iri ) eri--;\n\t\t\t\telse sri = ri;\n\t\t\t}\n\t\t\telse if(eri < ri || mode ==\"down\"){\n\t\t\t\tif(mode == \"down\" && details.ctrl) {\n\t\t\t\t\teri = this._extendAreaToData(eri, ici, mode);\n\t\t\t\t\tsri = iri;\n\t\t\t\t}\n\t\t\t\telse if(mode == \"down\" && sri <iri) sri++;\n\t\t\t\telse eri = ri;\n\t\t\t}\n\n\t\t\tvar start = { row: this.getIdByIndex(sri), column: this.columnId(sci) };\n\t\t\tvar end = { row: this.getIdByIndex(eri), column: this.columnId(eci) };\n\n\t\t\tif(this.callEvent(\"onBeforeBlockSelect\", [start, end, true])){\n\t\t\t\tthis._updateSelectArea(area.name, start, end);\n\t\t\t\tthis.callEvent(\"onSelectChange\", []);\n\t\t\t\tthis.callEvent(\"onAfterBlockSelect\", [start, end]);\n\t\t\t}\n\t\t}\n\t},\n\t_extendAreaToData:function(rind, cind, mode){\n\t\tvar columns = this.config.columns;\n\t\tvar order = this.data.order;\n\t\tvar item = this.data.pull[order[rind]];\n\t\tvar column = columns[cind].id;\n\t\tvar res = 0;\n\n\t\t//iterate columns\n\t\tif(mode == \"right\"){\n\t\t\tfor(let i = cind+1; i<columns.length; i++){\n\t\t\t\tif(item[columns[i].id]){ res = i; break; }\n\t\t\t\telse res = i;\n\t\t\t}\n\t\t}\n\t\telse if (mode ==\"left\"){\n\t\t\tfor(let i = cind-1; i>=0; i--){ //check ss\n\t\t\t\tif(item[columns[i].id]){ res = i; break;}\n\t\t\t}\n\t\t}\n\t\t//iterate data\t\n\t\telse if (mode == \"down\"){\n\t\t\tfor(let i = rind+1; i<order.length; i++){\n\t\t\t\tif(this.getItem(order[i])[column]){ res = i;break;}\n\t\t\t\telse res = i;\n\t\t\t}\n\t\t}\n\t\telse if(mode ==\"up\"){\n\t\t\tfor(let i = rind-1; i>=0; i--){\n\t\t\t\tif(this.getItem(order[i])[column]){ res = i;break;}\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\t_updateSelectArea: function(name, start, end, bsUpdate){\n\t\tvar area = this._areaSelStorage[name];\n\t\tif(!area)\n\t\t\treturn false;\n\t\tvar old = copy(area);\n\t\tvar range = { start:  start||area.start, end: end||area.end};\n\t\tthis._span_correct_range(range);\n\t\textend(area, range, true);\n\n\t\tthis.refreshSelectArea();\n\t\tthis._setTabindex(old);\n\t\tif(bsUpdate)\n\t\t\tthis.callEvent(\"onSelectChange\", []);\n\t},\n\tareaselect_setter:function(value){\n\t\tif(value){\n\t\t\tthis._init_areaselect();\n\t\t\tthis._init_areaselect = function(){};\n\t\t}\n\t\tthis.define(\"blockselect\",value);\n\t\treturn value;\n\t},\n\taddSelectArea: function(start, end, preserve, name, css, handle){\n\t\tvar i0, i1, j0, j1, temp;\n\t\ti0 = this.getIndexById(start.row);\n\t\ti1 = this.getIndexById(end.row);\n\n\t\tj0 = this.getColumnIndex(start.column);\n\t\tj1 = this.getColumnIndex(end.column);\n\n\n\t\tif (i0>i1){\n\t\t\ttemp = i0;\n\t\t\ti0 = i1;\n\t\t\ti1 = temp;\n\t\t}\n\n\t\tif (j0>j1){\n\t\t\ttemp = j0;\n\t\t\tj0 = j1;\n\t\t\tj1 = temp;\n\t\t}\n\n\t\tname = name || this._activeAreaSName || uid();\n\n\t\tthis._activeAreaSName= null;\n\n\t\tvar area = {\n\t\t\tstart: { row: this.getIdByIndex(i0), column: this.columnId(j0)},\n\t\t\tend:{ row: this.getIdByIndex(i1), column: this.columnId(j1)}\n\t\t};\n\n\t\tif(css)\n\t\t\tarea.css = css;\n\t\tif(handle || handle === false)\n\t\t\tarea.handle = handle;\n\n\t\tif(this._areaSelStorage[name]){\n\t\t\treturn this._updateSelectArea(name,area.start,area.end, true);\n\t\t}\n\t\telse{\n\t\t\tarea.handle = true;\n\t\t}\n\n\t\tarea.name = name;\n\n\t\tarea.init = area.start;\n\n\t\tif(this.callEvent(\"onBeforeAreaAdd\",[area])){\n\t\t\tthis._lastDefArea = name;\n\t\t\tif(!preserve)\n\t\t\t\tthis.removeSelectArea();\n\t\t\tthis._areaSelStorage[area.name] = area;\n\t\t\tthis._selected_areas.push(area);\n\t\t\tthis.refreshSelectArea();\n\t\t\tthis._setTabindex();\n\n\t\t\tthis.callEvent(\"onAfterAreaAdd\",[area]);\n\t\t\tthis.callEvent(\"onSelectChange\",[]);\n\t\t}\n\t},\n\t_renderSelectAreaBox: function(){\n\t\tvar box = create(\"DIV\");\n\t\tbox.className = \"webix_area_selection_layer\";\n\t\tbox.style.top = this._render_scroll_shift+\"px\";\n\t\treturn box;\n\t},\n\trefreshSelectArea: function(){\n\t\tvar xr, yr, name, range,\n\t\t\tr0, r1,\n\t\t\tcenter = null, left=null, right = null,\n\t\t\tprerender = this._settings.prerender;\n\n\t\tif(!this._render_full_rows)\n\t\t\treturn;\n\t\t// indexes of visible cols\n\t\txr = this._get_x_range(prerender);\n\t\t// indexes of visible rows\n\t\tyr = this._get_y_range(prerender === true);\n\n\t\tif (!this._rselect_box){\n\t\t\tthis._rselect_box = this._renderSelectAreaBox();\n\t\t\tthis._body.childNodes[1].appendChild(this._rselect_box);\n\t\t\tthis._rselect_box_left = this._renderSelectAreaBox();\n\t\t\tthis._body.childNodes[0].appendChild(this._rselect_box_left);\n\t\t\tthis._rselect_box_right = this._renderSelectAreaBox();\n\t\t\tthis._body.childNodes[2].appendChild(this._rselect_box_right);\n\t\t}\n\n\t\tthis._rselect_box.innerHTML = \"\";\n\t\tthis._rselect_box_left.innerHTML = \"\";\n\t\tthis._rselect_box_right.innerHTML = \"\";\n\n\t\tvar leftSplit = this._settings.leftSplit;\n\t\tvar rightSplit = this._settings.rightSplit;\n\n\t\tfor(name in this._areaSelStorage){\n\t\t\trange = this._areaSelStorage[name];\n\t\t\tvar ind = this._calcAreaSelectIndexes(range,xr,yr);\n\t\t\tif (ind === null){\n\t\t\t\tthis.removeSelectArea(name);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar startIndex = this.getColumnIndex(range.start.column);\n\t\t\tvar endIndex = this.getColumnIndex(range.end.column);\n\t\t\tif(ind.r0 <= ind.r1){\n\t\t\t\tif(this._settings.topSplit && r0>=this._settings.topSplit && r1< this._render_scroll_top)\n\t\t\t\t\treturn false;\n\t\t\t\tif(startIndex < leftSplit)\n\t\t\t\t\tleft = this._getSelectAreaCellPositions(ind.r0, startIndex, ind.r1, Math.min(endIndex,leftSplit-1));\n\t\t\t\tif(ind.c0<=ind.c1)\n\t\t\t\t\tcenter = this._getSelectAreaCellPositions(ind.r0, ind.c0, ind.r1, ind.c1);\n\t\t\t\tif(rightSplit && endIndex >= this._rightSplit)\n\t\t\t\t\tright = this._getSelectAreaCellPositions(ind.r0, Math.max(startIndex,this._rightSplit), ind.r1, endIndex);\n\n\t\t\t\tif(left || center || right)\n\t\t\t\t\tthis._setSelectAreaBorders(left,center,right, name, range.css, range.handle);\n\t\t\t}\n\t\t}\n\t},\n\t_calcAreaSelectIndexes: function(range, xr, yr){\n\t\tvar r0, r1, c0, c1;\n\n\t\tvar startIndex = this.getIndexById(range.start.row);\n\t\tvar endIndex = this.getIndexById(range.end.row);\n\n\t\tvar startColumn = this.getColumnIndex(range.start.column);\n\t\tvar endColumn = this.getColumnIndex(range.end.column);\n\n\t\t//return null for broken select areas\n\t\tif (startColumn === -1 || endColumn === -1)\n\t\t\treturn null;\n\t\tif (startIndex === -1 || endIndex === -1)\n\t\t\treturn null;\n\n\t\tr1 = Math.min(yr[1],endIndex);\n\t\tif(this._settings.topSplit){\n\t\t\tr0 = startIndex;\n\t\t\tif(r0 >= this._settings.topSplit)\n\t\t\t\tr0 = Math.max(yr[0]-this._settings.topSplit,startIndex);\n\t\t\tif(r1 >= this._settings.topSplit){\n\t\t\t\tvar endPos = this._cellPosition(this.getIdByIndex(endIndex),range.end.column);\n\t\t\t\tvar splitPos = this._cellPosition(this.getIdByIndex(this._settings.topSplit-1),range.end.column);\n\t\t\t\tif(splitPos.top+splitPos.height > (endPos.top+endPos.height))\n\t\t\t\t\tr1 = this._settings.topSplit-1;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t\tr0 = Math.max(yr[0],this.getIndexById(range.start.row));\n\n\t\tc0 = Math.max(xr[0],startColumn);\n\t\tc1 = Math.min(this._rightSplit?xr[1]-1:xr[1],endColumn);\n\n\t\treturn {r0: r0, r1: r1, c0: c0, c1: c1};\n\t},\n\t_getSelectAreaCellPositions: function(i0, j0, i1, j1){\n\t\tvar start = this._cellPosition(this.getIdByIndex(i0),this.columnId(j0));\n\t\tvar end = this._cellPosition(this.getIdByIndex(i1),this.columnId(j1));\n\t\treturn [start, end];\n\t},\n\t_setSelectAreaBorders: function(left, center, right, name,  css, handle){\n\n\t\tvar handleBox, handlePos,\n\t\t\tarea = this._areaSelStorage[name],\n\t\t\toffset = 0;\n\n\t\tif(this._settings.topSplit)\n\t\t\toffset = this._getTopSplitOffset(area.start, true);\n\n\t\t//include split in calcs\n\t\tvar renderArea = function(parentNode, start, end, skipLeft, skipRight){\n\t\t\tvar bName, height, width, top, left, hor,\n\t\t\t\tborders = {\"top\": 1, \"right\":1, \"bottom\": 1, \"left\": 1};\n\t\t\tif(skipLeft)\n\t\t\t\tdelete borders.left;\n\t\t\tif(skipRight)\n\t\t\t\tdelete borders.right;\n\t\t\theight = end.top - start.top + end.height-1;\n\t\t\twidth = end.left - start.left + end.width;\n\n\t\t\tfor(bName in borders){\n\t\t\t\ttop = start.top + offset;\n\n\t\t\t\tif(bName == \"bottom\")\n\t\t\t\t\ttop = end.top + end.height;\n\n\t\t\t\tleft = start.left;\n\t\t\t\tif(bName == \"right\"){\n\t\t\t\t\tleft = end.left+end.width;\n\t\t\t\t}\n\n\t\t\t\thor = (bName==\"top\"||bName ==\"bottom\");\n\n\t\t\t\tparentNode.appendChild(create(\"DIV\", {\n\t\t\t\t\t\"class\":\"webix_area_selection webix_area_selection_\"+bName+(css?\" \"+css:\"\") ,\n\t\t\t\t\t\"style\": \"left:\"+left+\"px;top:\"+top+\"px;\"+(hor?(\"width:\"+width+\"px;\"):(\"height:\"+(height-offset)+\"px;\")),\n\t\t\t\t\t/*@attr*/\"webix_area_name\": name\n\t\t\t\t}, \"\"));\n\t\t\t\tvar elem = parentNode.lastChild;\n\t\t\t\tif(bName == \"right\")\n\t\t\t\t\telem.style.left = left-elem.offsetWidth+\"px\";\n\t\t\t\tif(bName == \"bottom\")\n\t\t\t\t\telem.style.top = top-elem.offsetHeight+\"px\";\n\n\t\t\t\tif(offset){ //correct top split\n\t\t\t\t\tif(bName == \"top\")\n\t\t\t\t\t\telem.style.display = \"none\";\n\t\t\t\t\tif(end.height == offset && bName == \"bottom\")\n\t\t\t\t\t\telem.style.display = \"none\";\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif(right)\n\t\t\trenderArea(this._rselect_box_right, right[0], right[1],!!center,false);\n\t\tif(center)\n\t\t\trenderArea(this._rselect_box, center[0], center[1],!!left,!!right);\n\t\tif(left)\n\t\t\trenderArea(this._rselect_box_left, left[0], left[1],false,!!center);\n\t\t\n\t\tif(handle){\n\t\t\thandlePos = right?right[1]:(center?center[1]:left[1]);\n\t\t\thandleBox = right?this._rselect_box_right:(center?this._rselect_box:this._rselect_box_left);\n\t\t\thandleBox.appendChild(create(\"DIV\", {\n\t\t\t\t\"class\":\"webix_area_selection_handle\"+(css?\" \"+css:\"\") ,\n\t\t\t\t\"style\": \"left:\"+(handlePos.left+handlePos.width)+\"px;top:\"+(handlePos.top +handlePos.height)+\"px;\",\n\t\t\t\t/*@attr*/\"webix_area_name\": name\n\t\t\t}, \"\"));\n\n\t\t\t//correct top split\n\t\t\tif(offset && handlePos.height == offset)\n\t\t\t\thandleBox.lastChild.style.display = \"none\";\n\t\t}\n\n\t},\n\t_removeAreaNodes: function(name){\n\t\tif(name){\n\t\t\tvar removeNodes = function(parentNode){\n\t\t\t\tvar nodes = parentNode.childNodes;\n\t\t\t\tfor(var i = nodes.length-1; i>=0; i--){\n\t\t\t\t\tif(nodes[i].getAttribute(/*@attr*/\"webix_area_name\") == name){\n\t\t\t\t\t\tparentNode.removeChild(nodes[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tremoveNodes(this._rselect_box);\n\t\t\tremoveNodes(this._rselect_box_left);\n\t\t\tremoveNodes(this._rselect_box_right);\n\t\t}\n\t},\n\tremoveSelectArea: function(name){\n\t\tif(name && this._areaSelStorage[name]){\n\t\t\tif(this.callEvent(\"onBeforeAreaRemove\", [name])){\n\t\t\t\tthis._setTabindex(copy(this._areaSelStorage[name]), true);\n\t\t\t\tdelete this._areaSelStorage[name];\n\t\t\t\tthis._removeAreaNodes(name);\n\t\t\t\t//reconstruct selected areas\n\t\t\t\tthis._selected_areas = [];\n\t\t\t\tfor (var key in this._areaSelStorage)\n\t\t\t\t\tthis._selected_areas.push(this._areaSelStorage[key]);\n\n\t\t\t\tthis.callEvent(\"onAfterAreaRemove\", [name]);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor(var n in this._areaSelStorage)\n\t\t\t\tthis.removeSelectArea(n);\n\t\t}\n\t},\n\t_ars_down: function(e){\n\t\tvar src = e.target||e.srcElement;\n\t\tvar css = _getClassName(src);\n\t\tif(css && css.indexOf(\"webix_area_selection_handle\")!=-1){\n\t\t\tvar name = src.getAttribute(/*@attr*/\"webix_area_name\");\n\t\t\tthis._activeAreaSName = name;\n\t\t\t// show block selection\n\t\t\tvar area = this._areaSelStorage[name];\n\t\t\tvar pos0 = this._cellPosition(area.start.row,area.start.column);\n\t\t\tvar pos1 = this._cellPosition(area.end.row,area.end.column);\n\n\t\t\tvar prerender = this._settings.prerender;\n\n\t\t\tvar xCorrStart = this.getColumnIndex(area.start.column) < this._settings.leftSplit?0:this._left_width;\n\t\t\tvar xCorrEnd = this.getColumnIndex(area.end.column) < this._settings.leftSplit?0:this._left_width;\n\n\t\t\tthis._bs_ready = [pos0.left+1+xCorrStart-this._scrollLeft, pos0.top +1-(prerender?this._scrollTop:0),{\n\t\t\t\trow:area.start.row, column:area.start.column\n\t\t\t}];\n\t\t\tthis._bs_position = offset(this._body);\n\n\t\t\tthis._bs_start(e);\n\t\t\tthis._bs_progress = [pos1.left+1+xCorrEnd-this._scrollLeft, pos1.top +1-(prerender?this._scrollTop:0)];\n\t\t\tthis._bs_select(false, false, e);\n\t\t\t\n\t\t\treturn preventEvent(e);\n\t\t}\n\t},\n\tgetSelectArea: function(name){\n\t\treturn this._areaSelStorage[name||this._lastDefArea];\n\t},\n\tgetAllSelectAreas: function(){\n\t\treturn this._areaSelStorage;\n\t},\n\t_span_correct_range: function(range, inner_call){\n\t\tvar i, j, c0, c1, r0, r1,\n\t\t\tspan, spanR0,spanC0,\n\t\t\tminR0, minC0,maxR1, maxC1,\n\t\t\tchanged = false,\n\t\t\tstart = range.start,\n\t\t\tend = range.end;\n\n\t\tminR0 = r0 = this.getIndexById(start.row);\n\t\tminC0 = c0 = this.getColumnIndex(start.column);\n\t\tmaxR1 = r1 = this.getIndexById(end.row);\n\t\tmaxC1 = c1 = this.getColumnIndex(end.column);\n\n\t\tfor(i = r0; i <= r1; i++){\n\t\t\tvar item = this.getItem(this.getIdByIndex(i));\n\t\t\t//check rows\n\t\t\tif(item.$row && !inner_call){\n\t\t\t\tchanged = true;\n\t\t\t\tmaxC1 = this._columns.length-1;\n\t\t\t}\n\t\t\t//check spans\n\t\t\telse if (this.config.spans){\n\t\t\t\tfor(j = c0; j <= c1; j++){\n\t\t\t\t\tspan = this.getSpan(this.getIdByIndex(i), this.columnId(j));\n\t\t\t\t\tif(span){\n\t\t\t\t\t\tspanR0 = this.getIndexById(span[0]);\n\t\t\t\t\t\tspanC0 = this.getColumnIndex(span[1]);\n\t\t\t\t\t\tif(spanR0 < minR0){\n\t\t\t\t\t\t\tminR0 = spanR0;\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(spanC0 < minC0){\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\tminC0 = spanC0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(spanR0 + span[3]-1 > maxR1){\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\tmaxR1 = spanR0 + span[3]-1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(spanC0 + span[2]-1 > maxC1){\n\t\t\t\t\t\t\tchanged = true;\n\t\t\t\t\t\t\tmaxC1 = spanC0 + span[2]-1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(changed){\n\t\t\trange.start = {row: this.getIdByIndex(minR0), column:this.columnId(minC0)};\n\t\t\trange.end = {row: this.getIdByIndex(maxR1), column:this.columnId(maxC1)};\n\t\t\tthis._span_correct_range(range, true);\n\t\t}\n\t},\n\t_setTabindex:function(oldv, removeOnly){\n\t\tvar node;\n\t\tif(oldv){\n\t\t\tnode = this.getItemNode({row:oldv.start.row, column:oldv.start.column});\n\t\t\tif(node) node.removeAttribute(\"tabindex\");\n\t\t}\n\t\tif(!removeOnly && this._selected_areas.length){\n\t\t\tvar sel = this.getSelectedId(true)[0];\n\t\t\tnode = this.getItemNode(sel);\n\t\t\tif(node) node.setAttribute(\"tabindex\", \"1\");\n\t\t}\n\t}\n};\n\nexport default Mixin;","import {extend, bind} from \"../../webix/helpers\";\nimport {assert} from \"../../webix/debug\";\n\n\nconst Mixin = {\n\tfilterByAll:function(){\n\t\t//we need to use dynamic function creating\n\t\tvar server = false;\n\t\tthis.data.silent(function(){\n\t\t\tthis.filter();\n\t\t\tvar first = false;\n\t\t\tfor (var key in this._filter_elements){\n\t\t\t\tassert(key, \"empty column id for column with filtering\");\n\t\t\t\tif(!this.isColumnVisible(key))\n\t\t\t\t\tcontinue;\n\t\t\t\tvar record = this._filter_elements[key];\n\t\t\t\tvar originvalue = record[2].getValue(record[0]);\n\n\t\t\t\t//saving last filter value, for usage in getState\n\t\t\t\tvar inputvalue = originvalue;\n\t\t\t\tif (record[1].prepare)\n\t\t\t\t\tinputvalue = record[1].prepare.call(record[2], inputvalue, record[1], this);\n\n\t\t\t\t//preserve original value\n\t\t\t\trecord[1].value = originvalue;\n\t\t\t\tvar compare = record[1].compare;\n\n\t\t\t\tif (!this.callEvent(\"onBeforeFilter\",[key, inputvalue, record[1]])) continue;\n\t\t\t\tif(record[2].$server || server){ //if one of filters is server side, do not run any client side filters\n\t\t\t\t\tserver = true;\n\t\t\t\t} else {\n\t\t\t\t\tif (inputvalue === \"\") continue;\n\n\t\t\t\t\tif (compare){\n\t\t\t\t\t\tcompare = this._multi_compare(key, compare);\n\t\t\t\t\t\tthis.filter(bind(function(obj, value){\n\t\t\t\t\t\t\tif (!obj) return false;\n\t\t\t\t\t\t\treturn compare(obj[key], value, obj);\n\t\t\t\t\t\t},this), inputvalue, first);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.filter(key, inputvalue, first);\n\n\t\t\t\t\tfirst = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (server)\n\t\t\t\tthis._runServerFilter();\n\n\t\t}, this);\n\n\t\tif (!server){\n\t\t\tthis.refresh();\n\t\t\tthis.callEvent(\"onAfterFilter\",[]);\n\t\t}\n\t},\n\t_multi_compare: function(key, compare){\n\t\tvar column = this.getColumnConfig(key);\n\t\tvar separator = column ? column.optionslist : null;\n\n\t\t//default mode\n\t\tif (!separator) \n\t\t\treturn compare;\n\n\t\tif(typeof separator != \"string\")\n\t\t\tseparator = \",\";\n\n\t\treturn function(itemValue, inputValue, obj){\n\t\t\tif(!itemValue)\n\t\t\t\treturn false;\n\t\t\tvar ids = itemValue.toString().split(separator);\n\t\t\tfor (var i = 0; i < ids.length; i++) {\n\t\t\t\tif (compare(ids[i], inputValue, obj))\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t};\n\t},\n\tfilterMode_setter:function(mode){\n\t\treturn extend(this.data._filterMode, mode, true);\n\t},\n\tgetFilter:function(columnId){\n\t\tvar filter = this._filter_elements[columnId];\n\n\t\tif (filter && filter[2].getInputNode)\n\t\t\treturn filter[2].getInputNode(filter[0]);\n\t\treturn null;\n\t},\n\tregisterFilter:function(node, config, obj){\n\t\tthis._filter_elements[config.columnId] = [node, config, obj];\n\t},\n\tcollectValues:function(id, mode){\n\t\tlet values;\n\t\tlet obj = this.getColumnConfig(id);\n\t\tlet options = (mode && mode.visible) ? null : obj.collection;\n\n\t\tif (options)\n\t\t\tvalues = this._collectValues.call(options, \"id\", \"value\");\n\t\telse values = this._collectValues(obj.id, obj.id);\n\n\t\tlet result  = { values: values };\n\t\tthis.callEvent(\"onCollectValues\", [id, result]);\n\t\treturn result.values;\n\t},\n\t_collectValues:function(id, value){\n\t\tlet checks = { \"\" : true };\n\t\tlet values = [];\n\n\t\tthis.data.each(function(obj){\n\t\t\tlet test = obj ? obj[id] : \"\";\n\t\t\tif (test !== undefined && !checks[test]){\n\t\t\t\tchecks[test] = true;\n\t\t\t\tlet lineId = obj[id];\n\t\t\t\t//special handling for 0 values\n\t\t\t\t//convert to string to create a valid ID\n\t\t\t\tif (lineId === 0) lineId = \"0\";\n\t\t\t\tvalues.push({ id:lineId, value:obj[value] });\n\t\t\t}\n\t\t}, this, true);\n\n\t\tif (values.length){\n\t\t\tlet type = typeof values[0].value === \"string\" ? \"string\" : \"raw\";\n\t\t\tvalues.sort( this.data.sorting.create({ as:type, by:\"value\", dir:\"asc\" }) );\n\t\t}\n\t\treturn values;\n\t},\n\t_runServerFilter: function(){\n\t\tthis.loadNext(0, 0, 0, 0, 1).then((data) => {\n\t\t\tif (this.editStop)this.editStop();\n\t\t\tthis.clearAll(true);\n\t\t\tthis.parse(data);\n\t\t\tthis.callEvent(\"onAfterFilter\",[]);\n\t\t});\n\t}\n};\n\nexport default Mixin;","import {bind, extend, isUndefined} from \"../../webix/helpers\";\nimport {event} from \"../../webix/htmlevents\";\nimport {assert} from \"../../webix/debug\";\nimport SelectionModel from \"../../core/selectionmodel\";\nimport env from \"../../webix/env\";\n\nconst Mixin = {\n\thover_setter:function(value){\n\t\tif (value && !this._hover_initialized){\n\t\t\tthis._enable_mouse_move();\n\t\t\tthis.config.experimental = true;\n\n\t\t\tthis.attachEvent(\"onMouseMoving\", e => {\n\t\t\t\tlet pos = this.locate(e);\n\n\t\t\t\t// when we click inner html element, edge calls mousemove with incorrect e.target\n\t\t\t\tif(!pos && env.isEdge && e.relatedTarget)\n\t\t\t\t\tpos = this.locate(e.relatedTarget);\n\n\t\t\t\tconst row = pos ? pos.row : null;\n\n\t\t\t\tif (this._last_hover != row){\n\t\t\t\t\tif (this._last_hover)\n\t\t\t\t\t\tthis.removeRowCss(this._last_hover, this._settings.hover);\n\n\t\t\t\t\tthis._last_hover = row;\n\t\t\t\t\tif (this._last_hover)\n\t\t\t\t\t\tthis.addRowCss( this._last_hover, this._settings.hover );\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tevent(this.$view, \"mouseout\", e => {\n\t\t\t\tconst trg = e.target||e.srcElement;\n\n\t\t\t\t// inner html elements blinking in case of hover:true\n\t\t\t\t// ie and edge call mouseout when clicking inner html element\n\t\t\t\tif (this._last_hover && document.body.contains(trg)){\n\t\t\t\t\tconst pos = e.relatedTarget ? this.locate(e.relatedTarget) : null;\n\t\t\t\t\tif (!pos){\n\t\t\t\t\t\tthis.removeRowCss(this._last_hover, this._settings.hover);\n\t\t\t\t\t\tthis._last_hover = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis._hover_initialized = 1;\n\t\t}\n\t\treturn value;\n\t},\n\tselect_setter:function(value){\n\t\tif (!this.select && value){\n\t\t\textend(this, this._selections._commonselect, true);\n\t\t\tif (value === true)\n\t\t\t\tvalue = \"row\";\n\t\t\telse if (value == \"multiselect\"){\n\t\t\t\tvalue = \"row\";\n\t\t\t\tthis._settings.multiselect = true;\n\t\t\t}\n\t\t\tassert(this._selections[value], \"Unknown selection mode: \"+value);\n\t\t\textend(this, this._selections[value], true);\n\t\t}\n\t\treturn value;\n\t},\n\tgetSelectedId:function(mode){\n\t\treturn  mode?[]:\"\"; //dummy placeholder\n\t},\n\tgetSelectedItem:function(mode){\n\t\treturn SelectionModel.getSelectedItem.call(this, mode);\n\t},\n\t_selections:{\n\t\t//shared methods for all selection models\n\t\t_commonselect:{\n\t\t\t_select_css:\" webix_cell_select\",\n\t\t\t$init:function(){\n\t\t\t\tthis._reinit_selection();\n\n\t\t\t\tthis.on_click.webix_cell = bind(this._click_before_select, this);\n\n\t\t\t\t//temporary stab, actual handlers need to be created\n\t\t\t\tthis._data_cleared = this._data_filtered = function(){\n\t\t\t\t\tthis.unselect();\n\t\t\t\t};\n\n\t\t\t\tthis.data.attachEvent(\"onStoreUpdated\",bind(this._data_updated,this));\n\t\t\t\tthis.data.attachEvent(\"onSyncApply\", bind(this._data_synced, this));\n\t\t\t\tthis.data.attachEvent(\"onClearAll\", bind(this._data_cleared,this));\n\t\t\t\tthis.data.attachEvent(\"onAfterFilter\", bind(this._data_filtered,this));\n\t\t\t\tthis.data.attachEvent(\"onIdChange\", bind(this._id_changed,this));\n\n\t\t\t\tthis.$ready.push(SelectionModel._set_noselect);\n\t\t\t},\n\t\t\t_id_changed:function(oldid, newid){\n\t\t\t\tfor (let i=0; i<this._selected_rows.length; i++)\n\t\t\t\t\tif (this._selected_rows[i] == oldid)\n\t\t\t\t\t\tthis._selected_rows[i] = newid;\n\n\t\t\t\tfor (let i=0; i<this._selected_areas.length; i++){\n\t\t\t\t\tvar item = this._selected_areas[i];\n\t\t\t\t\tif (item.row == oldid){\n\t\t\t\t\t\toldid = this._select_key(item);\n\t\t\t\t\t\titem.row = newid;\n\t\t\t\t\t\tnewid = this._select_key(item);\n\t\t\t\t\t\titem.id = newid;\n\n\t\t\t\t\t\tdelete this._selected_pull[oldid];\n\t\t\t\t\t\tthis._selected_pull[newid] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_data_updated:function(id, obj, type){\n\t\t\t\tif (type == \"delete\") \n\t\t\t\t\tthis.unselect(id);\n\t\t\t},\n\t\t\t_data_synced:function(){\n\t\t\t\tfor (let i = this._selected_areas.length-1; i >=0 ; i--){\n\t\t\t\t\tvar row = this._selected_areas[i].row;\n\t\t\t\t\tif (!this.exists(row)){\n\t\t\t\t\t\tthis._selected_areas.splice(i,1);\n\t\t\t\t\t\tdelete this._selected_pull[row];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t_reinit_selection:function(){\n\t\t\t\t//list of selected areas\n\t\t\t\tthis._selected_areas=[];\n\t\t\t\t//key-value hash of selected areas, for fast search\n\t\t\t\tthis._selected_pull={};\n\t\t\t\t//used to track selected cell objects\n\t\t\t\tthis._selected_rows = [];\n\t\t\t},\n\t\t\tisSelected:function(id, column){\n\t\t\t\tvar key;\n\t\t\t\tif (!isUndefined(column))\n\t\t\t\t\tkey = this._select_key({ row:id, column: column});\n\t\t\t\telse \n\t\t\t\t\tkey = typeof id === \"object\"? this._select_key(id) : id;\n\n\t\t\t\treturn this._selected_pull[key];\n\t\t\t},\n\t\t\tgetSelectedId:function(asArray, plain){\n\t\t\t\tvar result;\n\n\t\t\t\t//if multiple selections was created - return array\n\t\t\t\t//in case of single selection, return value or array, when asArray parameter provided\n\t\t\t\tif (this._selected_areas.length > 1 || asArray){\n\t\t\t\t\tresult = [].concat(this._selected_areas);\n\t\t\t\t\tif (plain)\n\t\t\t\t\t\tfor (let i = 0; i < result.length; i++)\n\t\t\t\t\t\t\tresult[i]=result[i].id;\n\t\t\t\t} else {\n\t\t\t\t\tresult = this._selected_areas[0];\n\t\t\t\t\tif (plain && result)\n\t\t\t\t\t\treturn result.id;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\t_id_to_string:function(){\n\t\t\t\treturn this.row;\n\t\t\t},\n\t\t\t_select:function(data, preserve){\n\t\t\t\tvar key = this._select_key(data);\n\t\t\t\t//don't allow selection on unnamed columns\n\t\t\t\tif (key === null) return;\n\n\t\t\t\tif (preserve === -1)\n\t\t\t\t\treturn this._unselect(data);\n\n\t\t\t\tdata.id = key;\n\t\t\t\tdata.toString = this._id_to_string;\n\n\t\t\t\tif (!this.callEvent(\"onBeforeSelect\",[data, preserve])) return false;\n\n\t\t\t\t//ignore area, if it was already selected and\n\t\t\t\t// - we are preserving existing selection\n\t\t\t\t// - this is the only selected area\n\t\t\t\t// otherwise we need to clear other selected areas\n\t\t\t\tif (this._selected_pull[key] && (preserve || this._selected_areas.length == 1)) return;\n\n\t\t\t\tif (!preserve)\n\t\t\t\t\tthis._clear_selection();\n\n\t\t\t\tthis._selected_areas.push(data);\n\t\t\t\tthis._selected_pull[key] = true;\n\n\t\t\t\tthis.callEvent(\"onAfterSelect\",[data, preserve]);\n\n\t\t\t\t\n\t\t\t\tthis._finalize_select(this._post_select(data));\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\t_clear_selection:function(){\n\t\t\t\tif (!this._selected_areas.length) return false;\n\n\t\t\t\tfor (let i=0; i<this._selected_areas.length; i++){\n\t\t\t\t\tif (!this.callEvent(\"onBeforeUnSelect\", [this._selected_areas[i]])) return false;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tfor (let i=0; i<this._selected_rows.length; i++)\n\t\t\t\t\tthis.data.removeMark(this._selected_rows[i], \"webix_selected\");\n\t\t\t\t\n\t\t\t\tvar cols = this._settings.columns;\n\t\t\t\tif (cols)\n\t\t\t\t\tfor (let i = 0; i < cols.length; i++) {\n\t\t\t\t\t\tcols[i].$selected = null;\n\t\t\t\t\t}\n\n\t\t\t\tvar data = this._selected_areas;\n\t\t\t\tthis._reinit_selection();\n\t\t\t\tfor (let i=0; i<data.length; i++){\n\t\t\t\t\tthis.callEvent(\"onAfterUnSelect\", [data[i]]);\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tunselectAll:function(){\n\t\t\t\tthis.clearSelection();\n\t\t\t},\n\t\t\tselectAll:function(){\n\t\t\t\tthis.selectRange();\n\t\t\t},\n\t\t\tclearSelection:function(){\n\t\t\t\tif (this._clear_selection()){\n\t\t\t\t\tthis.callEvent(\"onSelectChange\",[]);\n\t\t\t\t\tthis.render();\n\t\t\t\t}\n\t\t\t},\n\t\t\t_unselect:function(data){\n\t\t\t\tvar key = this._select_key(data);\n\t\t\t\tif (!key && this._selected_areas.length){\n\t\t\t\t\tthis.clearSelection();\n\t\t\t\t\tthis.callEvent(\"onSelectChange\", []);\n\t\t\t\t}\n\n\t\t\t\t//ignore area, if it was already selected\n\t\t\t\tif (!this._selected_pull[key]) return;\n\n\t\t\t\tif (!this.callEvent(\"onBeforeUnSelect\",[data])) return false;\n\n\t\t\t\tfor (let i = 0; i < this._selected_areas.length; i++){\n\t\t\t\t\tif (this._selected_areas[i].id == key){\n\t\t\t\t\t\tthis._selected_areas.splice(i,1);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tdelete this._selected_pull[key];\n\n\t\t\t\tthis.callEvent(\"onAfterUnSelect\",[data]);\n\t\t\t\tthis._finalize_select(0, this._post_unselect(data));\n\t\t\t},\n\t\t\t_add_item_select:function(id){\n\t\t\t\tvar item = this.getItem(id);\n\t\t\t\treturn this.data.addMark(item.id, \"webix_selected\", 0, { $count : 0 }, true);\n\n\t\t\t},\n\t\t\t_finalize_select:function(id){\n\t\t\t\tif (id)\n\t\t\t\t\tthis._selected_rows.push(id);\n\t\t\t\tif (!this._silent_selection){\n\t\t\t\t\tthis.render();\n\t\t\t\t\tthis.callEvent(\"onSelectChange\",[]);\t\n\t\t\t\t}\n\t\t\t},\n\t\t\t_click_before_select:function(e, id){\n\t\t\t\tvar preserve = e.ctrlKey || e.metaKey || (this._settings.multiselect == \"touch\");\n\t\t\t\tvar range = e.shiftKey;\n\n\t\t\t\tif (!this._settings.multiselect && this._settings.select != \"multiselect\" && this._settings.select != \"area\")\n\t\t\t\t\tpreserve = range = false;\n\n\t\t\t\tif (range && this._selected_areas.length){\n\t\t\t\t\tvar last = this._selected_areas[this._selected_areas.length-1];\n\t\t\t\t\tthis._selectRange(id, last);\n\t\t\t\t} else {\n\t\t\t\t\tif (preserve && this._selected_pull[this._select_key(id)])\n\t\t\t\t\t\tthis._unselect(id);\n\t\t\t\t\telse\n\t\t\t\t\t\tthis._select({ row: id.row, column:id.column }, preserve);\n\t\t\t\t}\n\t\t\t},\n\t\t\t_mapSelection:function(callback, column, row){\n\t\t\t\tvar cols = this._settings.columns;\n\t\t\t\t//selected columns only\n\t\t\t\tif (column){\n\t\t\t\t\tvar temp = [];\n\t\t\t\t\tfor (let i=0; i<cols.length; i++)\n\t\t\t\t\t\tif (cols[i].$selected)\n\t\t\t\t\t\t\ttemp.push(cols[i]);\n\t\t\t\t\tcols = temp;\n\t\t\t\t}\n\n\t\t\t\tvar rows = this.data.order;\n\t\t\t\tvar row_ind = 0;\n\n\t\t\t\tfor (let i=0; i<rows.length; i++){\n\t\t\t\t\tvar item = this.getItem(rows[i]);\n\t\t\t\t\tif (!item) continue; //dyn loading, row is not available\n\t\t\t\t\tvar selection = this.data.getMark(item.id, \"webix_selected\");\n\t\t\t\t\tif (selection || column){\n\t\t\t\t\t\tvar col_ind = 0;\n\t\t\t\t\t\tfor (var j = 0; j < cols.length; j++){\n\t\t\t\t\t\t\tvar id = cols[j].id;\n\t\t\t\t\t\t\tif (row || column || selection[id]){\n\t\t\t\t\t\t\t\tif (callback)\n\t\t\t\t\t\t\t\t\titem[id] = callback(item[id], rows[i], id, row_ind, col_ind);\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\treturn {row:rows[i], column:id};\n\t\t\t\t\t\t\t\tcol_ind++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//use separate row counter, to count only selected rows\n\t\t\t\t\t\trow_ind++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, \n\n\t\trow : {\n\t\t\t_select_css:\" webix_row_select\",\n\t\t\t_select_key:function(data){ return data.row; },\n\t\t\tselect:function(row_id, preserve){\n\t\t\t\t//when we are using id from mouse events\n\t\t\t\tif (row_id) row_id = row_id.toString();\n\n\t\t\t\tassert(this.data.exists(row_id), \"Incorrect id in select command: \"+row_id);\n\t\t\t\tthis._select({ row:row_id }, preserve);\n\t\t\t},\n\t\t\t_post_select:function(data){\n\t\t\t\tthis._add_item_select(data.row).$row = true;\n\t\t\t\treturn data.row;\n\t\t\t},\n\t\t\tunselect:function(row_id){\n\t\t\t\tthis._unselect({row : row_id});\n\t\t\t},\n\t\t\t_post_unselect:function(data){\n\t\t\t\tthis.data.removeMark(data.row, \"webix_selected\", 0, 1);\n\t\t\t\treturn data.row;\n\t\t\t},\n\t\t\tmapSelection:function(callback){\n\t\t\t\treturn this._mapSelection(callback, false, true);\n\t\t\t},\n\t\t\t_selectRange:function(a,b){\n\t\t\t\treturn this.selectRange(a.row, b.row);\n\t\t\t},\n\t\t\tselectRange:function(row_id, end_row_id, preserve){\n\t\t\t\tif (isUndefined(preserve)) preserve = true;\n\n\t\t\t\tvar row_start_ind = row_id ? this.getIndexById(row_id) : 0;\n\t\t\t\tvar row_end_ind = end_row_id ? this.getIndexById(end_row_id) : this.data.order.length-1;\n\n\t\t\t\tif (row_start_ind>row_end_ind){\n\t\t\t\t\tvar temp = row_start_ind;\n\t\t\t\t\trow_start_ind = row_end_ind;\n\t\t\t\t\trow_end_ind = temp;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis._silent_selection = true;\n\t\t\t\tfor (let i=row_start_ind; i<=row_end_ind; i++){\n\t\t\t\t\tvar id = this.getIdByIndex(i);\n\t\t\t\t\tif (!id){\n\t\t\t\t\t\tif (row_id)\n\t\t\t\t\t\t\tthis.select(row_id);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tthis.select(id, preserve);\n\t\t\t\t}\n\n\t\t\t\tthis._silent_selection = false;\n\t\t\t\tthis._finalize_select();\n\t\t\t}\n\t\t},\n\n\t\tcell:{\n\t\t\t_select_key:function(data){\n\t\t\t\tif (!data.column) return null;\n\t\t\t\treturn data.row+\"_\"+data.column; \n\t\t\t},\n\t\t\tselect:function(row_id, column_id, preserve){\n\t\t\t\tassert(this.data.exists(row_id), \"Incorrect id in select command: \"+row_id);\n\t\t\t\tthis._select({row:row_id, column:column_id}, preserve);\n\t\t\t},\n\t\t\t_post_select:function(data){\n\t\t\t\tvar sel = this._add_item_select(data.row);\n\t\t\t\tsel.$count++;\n\t\t\t\tsel[data.column]=true;\n\t\t\t\treturn data.row;\n\t\t\t},\n\t\t\tunselect:function(row_id, column_id){\n\t\t\t\tthis._unselect({row:row_id, column:column_id});\n\t\t\t},\n\t\t\t_post_unselect:function(data){\n\t\t\t\tvar sel = this._add_item_select(data.row);\n\t\t\t\tsel.$count-- ;\n\t\t\t\tsel[data.column] = false;\n\t\t\t\tif (sel.$count<=0)\n\t\t\t\t\tthis.data.removeMark(data.row,\"webix_selected\");\n\t\t\t\treturn data.row;\n\t\t\t},\n\t\t\tmapSelection:function(callback){\n\t\t\t\treturn this._mapSelection(callback, false, false);\n\t\t\t},\n\t\t\t_selectRange:function(a,b){\n\t\t\t\treturn this.selectRange(a.row, a.column, b.row, b.column);\n\t\t\t},\n\n\t\t\tselectRange:function(row_id, column_id, end_row_id, end_column_id, preserve){\n\t\t\t\tif (isUndefined(preserve)) preserve = true;\n\n\t\t\t\tvar row_start_ind = row_id ? this.getIndexById(row_id) : 0;\n\t\t\t\tvar row_end_ind = end_row_id ? this.getIndexById(end_row_id) : this.data.order.length-1;\n\n\t\t\t\tvar col_start_ind = column_id ? this.getColumnIndex(column_id) : 0;\n\t\t\t\tvar col_end_ind = end_column_id ? this.getColumnIndex(end_column_id) : this._columns.length-1;\n\n\t\t\t\tif (row_start_ind>row_end_ind){\n\t\t\t\t\tlet temp = row_start_ind;\n\t\t\t\t\trow_start_ind = row_end_ind;\n\t\t\t\t\trow_end_ind = temp;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (col_start_ind>col_end_ind){\n\t\t\t\t\tlet temp = col_start_ind;\n\t\t\t\t\tcol_start_ind = col_end_ind;\n\t\t\t\t\tcol_end_ind = temp;\n\t\t\t\t}\n\n\t\t\t\tthis._silent_selection = true;\n\t\t\t\tfor (let i=row_start_ind; i<=row_end_ind; i++)\n\t\t\t\t\tfor (let j=col_start_ind; j<=col_end_ind; j++)\n\t\t\t\t\t\tthis.select(this.getIdByIndex(i), this.columnId(j), preserve);\n\t\t\t\tthis._silent_selection = false;\n\t\t\t\tthis._finalize_select();\n\t\t\t}\n\t\t},\n\n\t\tcolumn:{\n\t\t\t_select_css:\" webix_column_select\",\n\t\t\t_select_key:function(data){ return data.column; },\n\t\t\t_id_to_string:function(){\n\t\t\t\treturn this.column;\n\t\t\t},\n\t\t\t//returns box-like area, with ordered selection cells\n\t\t\tselect:function(column_id, preserve){\n\t\t\t\tthis._select({ column:column_id }, preserve);\n\t\t\t},\n\t\t\t_post_select:function(data){\n\t\t\t\tthis._settings.columns[this.getColumnIndex(data.column)].$selected = true;\n\t\t\t\tif (!this._silent_selection)\n\t\t\t\t\tthis._render_header_and_footer();\n\t\t\t},\n\t\t\tunselect:function(column_id){\n\t\t\t\tthis._unselect({column : column_id});\n\t\t\t},\n\t\t\t_post_unselect:function(data){\n\t\t\t\tthis._settings.columns[this.getColumnIndex(data.column)].$selected = null;\n\t\t\t\tthis._render_header_and_footer();\n\t\t\t},\n\t\t\tmapSelection:function(callback){\n\t\t\t\treturn this._mapSelection(callback, true, false);\n\t\t\t},\n\t\t\t_selectRange:function(a,b){\n\t\t\t\treturn this.selectRange(a.column, b.column);\n\t\t\t},\n\t\t\tselectRange:function(column_id, end_column_id, preserve){\n\t\t\t\tif (isUndefined(preserve)) preserve = true;\n\n\t\t\t\tvar column_start_ind = column_id ? this.getColumnIndex(column_id) : 0;\n\t\t\t\tvar column_end_ind = end_column_id ? this.getColumnIndex(end_column_id) : this._columns.length-1;\n\n\t\t\t\tif (column_start_ind>column_end_ind){\n\t\t\t\t\tvar temp = column_start_ind;\n\t\t\t\t\tcolumn_start_ind = column_end_ind;\n\t\t\t\t\tcolumn_end_ind = temp;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tthis._silent_selection = true;\n\t\t\t\tfor (let i=column_start_ind; i<=column_end_ind; i++)\n\t\t\t\t\tthis.select(this.columnId(i), preserve);\n\n\t\t\t\tthis._silent_selection = false;\n\n\t\t\t\tthis._render_header_and_footer();\n\t\t\t\tthis._finalize_select();\n\t\t\t},\n\t\t\t_data_synced:function(){\n\t\t\t\t//do nothing, as columns are not changed\n\t\t\t}\n\t\t},\n\t\tarea: {\n\t\t\t_select_key:function(data){\n\t\t\t\treturn data.row+\"_\"+data.column;\n\t\t\t},\n\t\t\tgetSelectedId: function(asArray){\n\t\t\t\tvar area = this.getSelectArea();\n\t\t\t\tvar result = [];\n\t\t\t\tif(area){\n\t\t\t\t\tif(asArray && ( area.start.row != area.end.row || area.start.column != area.end.column )){\n\t\t\t\t\t\tvar row_start_ind = this.getIndexById(area.start.row);\n\t\t\t\t\t\tvar row_end_ind = this.getIndexById(area.end.row);\n\t\t\t\t\t\t//filtering in process\n\t\t\t\t\t\tif(row_start_ind == -1 || row_end_ind == -1)\n\t\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t\tvar col_start_ind = this.getColumnIndex(area.start.column);\n\t\t\t\t\t\tvar col_end_ind = this.getColumnIndex(area.end.column);\n\n\t\t\t\t\t\tfor (let i=row_start_ind; i<=row_end_ind; i++)\n\t\t\t\t\t\t\tfor (var j=col_start_ind; j<=col_end_ind; j++)\n\t\t\t\t\t\t\t\tresult.push({row:this.getIdByIndex(i), column:this.columnId(j)});\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tresult.push(area.end);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn asArray?result:result[0];\n\t\t\t},\n\t\t\tunselect:function(){\n\t\t\t\tthis._unselect();\n\t\t\t},\n\t\t\t_unselect: function() {\n\t\t\t\tthis.removeSelectArea();\n\t\t\t\tthis.callEvent(\"onSelectChange\", []);\n\t\t\t},\n\t\t\tmapSelection:function(callback){\n\t\t\t\tvar select  = this.getSelectArea();\n\t\t\t\tif (select){\n\t\t\t\t\tvar sind = this.getColumnIndex(select.start.column);\n\t\t\t\t\tvar eind = this.getColumnIndex(select.end.column);\n\t\t\t\t\tvar srow = this.getIndexById(select.start.row);\n\t\t\t\t\tvar erow = this.getIndexById(select.end.row);\n\n\t\t\t\t\tfor (let i = srow; i <= erow; i++) {\n\t\t\t\t\t\tvar rid = this.data.order[i];\n\t\t\t\t\t\tvar item = this.getItem(rid);\n\t\t\t\t\t\tfor (var j = sind; j <= eind; j++) {\n\t\t\t\t\t\t\tvar cid = this._columns[j].id;\n\t\t\t\t\t\t\tif (callback)\n\t\t\t\t\t\t\t\titem[cid] = callback(item[cid], rid, cid, i-srow, j-sind);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\treturn { row:rid, column:cid };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tselect:function(row_id, column_id, preserve){\n\t\t\t\tassert(this.data.exists(row_id), \"Incorrect id in select command: \"+row_id);\n\t\t\t\tthis._select({row:row_id, column:column_id}, preserve);\n\t\t\t},\n\t\t\t_selectRange:function(id,last){\n\t\t\t\tthis._extendAreaRange(id, last);\n\t\t\t},\n\t\t\t_select: function(cell){\n\t\t\t\t//ctrl-selection is not supported yet, so ignoring the preserve flag\n\t\t\t\tthis.addSelectArea(cell,cell,false);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\t_data_synced:function(){\n\t\t\t\tif(this._selected_areas.length)\n\t\t\t\t\tthis.refreshSelectArea();\n\t\t\t}\n\t\t}\n\t}\n};\n\nexport default Mixin;","export const version=\"VERSION\";\nexport const name = \"core\";","import {errorMessage} from \"./common\";\n\nimport promise from \"../../thirdparty/promiz\";\nimport require from \"../../load/require\";\nimport env from \"../../webix/env\";\n\nimport {assert} from \"../../webix/debug\";\nimport {toNode} from \"../../webix/helpers\";\nimport {download} from \"../../webix/html\";\nimport {$$} from \"../../ui/core\";\n\nexport const toPNG = function(id, options){\n\tvar defer = promise.defer();\n\n\treturn require(env.cdn + \"/extras/html2canvas-1.0.min.js\").then(function(){\n\t\t//backward compatibility\n\t\tif (typeof options === \"string\") options = { filename: options };\n\t\toptions = options || {};\n\n\t\tvar view = $$(id);\n\t\tif (view && view.$exportView)\n\t\t\tview = view.$exportView(options);\n\t\tassert(view, errorMessage);\n\t\tif(!view) return defer.reject(errorMessage);\n\n\t\tvar node = view ? view.$view : toNode(id);\n\t\tvar filename = (options.filename||\"Data\")+\".png\";\n\n\t\twindow.html2canvas(node, {background:\"#fff\", logging:false, useCORS:true}).then(function(canvas) {\n\t\t\tvar callback = function(data){\n\t\t\t\tif(options.download !== false)\n\t\t\t\t\tdownload(data, filename);\n\t\t\t\tcanvas.remove();\n\t\t\t\tdefer.resolve(data);\n\t\t\t};\n\t\t\tif(canvas.msToBlob)\n\t\t\t\tcallback(canvas.msToBlob());\n\t\t\telse\n\t\t\t\tcanvas.toBlob(callback, \"image/png\");\n\t\t});\n\t\treturn defer;\n\t});\n};","import {errorMessage, getExportScheme, getExportData} from \"./common\";\n\nimport csv from \"../../webix/csv\";\nimport promise from \"../../thirdparty/promiz\";\n\nimport {download} from \"../../webix/html\";\nimport {$$} from \"../../ui/core\";\nimport {assert} from \"../../webix/debug\";\n\nexport const toCSV = function(id, options){\n\toptions = options || {};\n\n\tvar view = $$(id);\n\tif (view && view.$exportView)\n\t\tview = view.$exportView(options);\n\tassert(view, errorMessage);\n\tif(!view) return promise.reject(errorMessage);\n\n\toptions.export_mode = \"csv\";\n\toptions.filterHTML = true;\n\n\tvar scheme = getExportScheme(view, options);\n\tvar result = getExportData(view, options, scheme);\n\n\tvar data = getCsvData(result, scheme);\n\tvar filename =  (options.filename || \"Data\")+\".csv\";\n\n\tvar blob = new Blob([\"\\uFEFF\" + data], { type: \"text/csv\" });\n\tif(options.download !== false)\n\t\tdownload(blob, filename);\n\n\treturn promise.resolve(blob);\n};\n\nfunction getCsvData(data) {\n\treturn csv.stringify(data);\n}","import {callEvent} from \"./customevents\";\n\nexport function editStop(){\n\tcallEvent(\"onEditEnd\", []);\n}\n","import {create} from \"../webix/html\";\n\n/*submits values*/\nexport default function send(url, values, method, target){\n\tvar form = create(\"FORM\",{\n\t\t\"target\":(target||\"_self\"),\n\t\t\"action\":url,\n\t\t\"method\":(method||\"POST\")\n\t},\"\");\n\tfor (var k in values) {\n\t\tvar field = create(\"INPUT\",{\"type\":\"hidden\",\"name\": k,\"value\": values[k]},\"\");\n\t\tform.appendChild(field);\n\t}\n\tform.style.display = \"none\";\n\tdocument.body.appendChild(form);\n\tform.submit();\n\tdocument.body.removeChild(form);\n}"],"names":["global","window","queueId","queue","isRunningTask","nextTick","fn","setImmediate","importScripts","addEventListener","setTimeout","postMessage","Deferred","resolver","undefined","TypeError","_typeof","this","then","er","self","state","val","next","v","fire","_fn","_er","_d","d","resolve","reject","push","_handler","_value","handler","value","finish","type","i","length","p","e","thennable","ref","cb","ec","cn","cnt","call","source","data","all","arr","Array","done","reduce","map","r","race","defer","services","define","name","use","debug_mode","clone","f","_function","prototype","copy","target","esModern","Map","Set","WeakMap","WeakSet","method","arguments","isArray","from","RegExp","isDate","Date","bind","functor","object","apply","exec","code","execScript","eval","isUndefined","a","delay","obj","params","$destructed","ret","once","flag","base","force","$protoWait","_power_array","insertAt","defaults","extend","$init","_seed","valueOf","uid","toNode","node","document","getElementById","toFunctor","str","scope","replace","Object","toString","_to_array","array","removeAt","pos","len","splice","remove","find","each","master","filter","i18n","parseFormat","parseTimeFormat","stringify","result","origin","toJSON","parseFormatStr","JSON","EventSystem","_evs_events","_evs_handlers","_evs_map","blockEvent","_block","unblockEvent","mapEvent","on_setter","config","$scope","sub","indexOf","substr","attachEvent","callEvent","_event_master","toLowerCase","event_stack","return_value","$eventSource","id","unshift","t","detachEvent","hasEvent","stack","parent","evs","b","c","xml","_isValidXML","documentElement","getElementsByTagName","toObject","text","response","rawxml","fromString","getRecords","xpath","records","child","getDetails","tagToObject","getOptions","getInfo","assignTypes","size","getAttribute","path","XPathResult","nodeName","ownerDocument","res","col","evaluate","ANY_TYPE","temp","iterateNext","test","selectNodes","split","pop","k","tag","z","hasSubTags","nodeType","childNodes","attributes","tagName","nodeValue","firstChild","wholeText","xmlString","DOMParser","parseFromString","ActiveXObject","loadXML","json","parseDates","isodate","parse","key","collections","total_count","ajax","url","get","getXHR","count","XMLHttpRequest","_send","mode","success","error","promise","x","headers","_header","json_mode","found","FormData","encodeURIComponent","join","open","_sync","_response","responseType","setRequestHeader","onreadystatechange","readyState","is_error","status","responseText","_data","$callback","_timeout","timeout","send","responseXML","post","put","del","patch","sync","num","header","owner","proxy","$proxy","load","parts","ext","options","dataurl","save","u","console","log","operation","newid","processResult","view","update","_save_logic","query","mark","charAt","xhr","rest","GraphQL","variables","unbox","lkey","extra","makeCopy","init","$parse","binary","debug","graphql","jsarray","idColumn","html","createElement","innerHTML","env","strict","webix_strict","https","location","protocol","agent","navigator","userAgent","isMac","mobile","touch","isOpera","isIE","parseFloat","appVersion","isIE8","isEdge","isFF","isWebKit","isSafari","maxHTMLElementSize","isAndroid","isIEMobile","transform","transition","found_index","js_list","j","style","cssPrefix","jp","jsPrefix","transitionDuration","translate","transitionEnd","pointerevents","passiveEventListeners","opts","defineProperty","removeEventListener","svg","implementation","hasFeature","svganimation","_native_on_selectstart","_style_element","_style_cache","denySelect","onselectstart","stopEvent","allowSelect","index","previousSibling","createCss","rule","sufix","addStyle","group","setAttribute","appendChild","styleSheet","cssText","createTextNode","removeStyle","box","create","attrs","attr_name","className","getValue","parentNode","removeChild","insertBefore","before","rescue","locate","trg","event","srcElement","offset","elem","getBoundingClientRect","body","docElem","scrollTop","pageYOffset","scrollLeft","pageXOffset","clientTop","clientLeft","top","left","y","Math","round","width","offsetWidth","height","offsetHeight","parseInt","offsetTop","offsetLeft","offsetParent","posRelative","ev","offsetX","layerX","layerY","offsetY","touches","pageX","pageY","compatMode","clientX","clientY","preventEvent","preventDefault","returnValue","stopPropagation","cancelBubble","triggerEvent","createEventObject","fireEvent","createEvent","initEvent","dispatchEvent","addCss","check","removeCss","getTextSize","css","basewidth","max","download","filename","objUrl","msSaveBlob","URL","createObjectURL","link","href","click","revokeObjectURL","_getClassName","baseVal","setSelectionRange","start","end","focus","textRange","createTextRange","collapse","moveEnd","moveStart","select","getSelectionRange","selectionStart","selectionEnd","bookmark","selection","createRange","getBookmark","moveToBookmark","addMeta","item","content","htmltable","tr","rows","new_data","_webix_skip","td","getConfig","columns","_de_json","_get_attrs","el","attr","hash","_modules","require","module","callback","Promise","disabled","callback2","file","fullpath","onerror","calls","onload","rel","newScript","src","excel","_urlToOptions","reader","FileReader","parseData","readAsArrayBuffer","Uint8Array","String","fromCharCode","cdn","wb","XLS","read","cellStyles","cellDates","XLSX","sheets","Sheets","names","SheetNames","ranges","Workbook","Names","getSheet","sheetToArray","min","sheet","spans","styles","sizes","row","cell","range","utils","decode_range","xCorrection","s","yCorrection","nrow","encode_cell","ncell","math","dateFormatStr","merges","widths","wch","heights","hpx","details","DataDriver","csv","stringToArray","silentErrorMarker","AtomDataLoader","waitData","_settings","datatype","$ready","_load_when_ready","_ready_for_data","url_setter","data_setter","_fetch","_this","_onLoad","_onLoadError","driver","gen","_data_generation","_this2","generation","_syncData","_call_onready","_parse","parsed","record","setValues","_onLoadContinue","$onLoad","_this3","xhttp","_check_data_feed","dataFeed","_ignore_feed","loader","CodeParser","collapseNames","prefix","prop","expandNames","lastIndex","_cache","_csp_cache","newlines","quotes","slashes","escape","badChars","escapeChar","chr","template","teststr","temp_res","search","s1","s2","s3","_","common","sort","lastPos","addStr","n0","n1","slice","helpers","Function","empty","AtomRender","_toHTML","$empty","render","cfg","isVisible","_dataobj","_backbone_sync","refresh","pull","template_setter","AutoScroll","_auto_scroll","yScroll","xScroll","dragscroll","layout","_body","$view","sense","rowHeight","isNaN","reset","_auto_y_scroll","_auto_x_scroll","_auto_scroll_delay","_auto_scroll_column","headerRowHeight","bottom","scroll","getScrollState","topSplit","topSplitPos","_cellPosition","getIdByIndex","columnId","_auto_scrollTo","right","scrollTo","_events","_events_final_destructor","eventRemove","_event","inner","context","info","capture","passive","_webix_type_wait","types","baseType","codebase","top_views","_global_scope","_global_collection","_child_sizing_active","_responsive_exception","_responsive_tinkery","_freeze_resize","_parent_cell","_focus_time","_ui_creation","_edit_open_time","_final_destruction","destructors","_noselect_element","_modality","_wait_animate","views","ui","_ui_creator","top_node","multiset","container","_correctId","getChildViews","_body_cell","_deleteIds","$$","moving","body_child","$topView","_inner","getParentView","_view","setPosition","$apiOnly","_hidden","_container","_appendDom","destructor","_replace","_remove","_viewobj","fullscreen","position","_destructor_handler","skipResize","adjust","uis","current","_destroy_with_me","cols","cells","accordion","align","headerlayout","multiview","spacer","selfname","origins","proto","compilation","has_constructor","construct","def","$skin","_parseSettings","element","touchable","applyChanges","getNode","_focus_action","on_click","popup","readonly","show","getInputNode","TooltipControl","_tooltip_masters","_tooltip_exist","addTooltip","ctrl","Element","webix_tooltip","_tooltip","tooltip","_webix_tooltip_mm","_move_tooltip","_webix_tooltip_ml","_hide_tooltip","_drag_event","_click_event","getTooltip","_last","$tooltipOut","$tooltipIn","$tooltipMove","parentElement","clearTimeout","_before_show_delay","hide","getMaster","removeTooltip","tip","m","dx","dy","n","getPos","_uid","_namecount","freeze","trigger","any","resize","_force_resize","_each","logic","include","children","zIndex","zIndexBase","ready","_ready","_ready_code","doit","webix_ready","concat","UIManager","_hotkeys","_tab_time","_mouse_time","_controls","_inputs","_enable","_focus_click","_keypress","_focus_tab","getFocus","_focus_was_there","setFocus","only_api","tab","blur","_applyChanges","hasFocus","_focus","dont_clear","canFocus","_top_modal","querySelector","win","queryView","modal","isEnabled","_moveChildFocus","check_view","_is_child_of","_focus_logic","_translation_table","_keypress_timed","_isNumPad","which","keyCode","ctrlKey","shift","shiftKey","alt","altKey","meta","metaKey","codeid","_keycode","_key_press_timeout","keyPressTimeout","is_any","_check_keycode","dir","marker","$fmarker","activeElement","_tab_logic","_custom_tab_handler","_in_edit_mode","editNext","editStop","getTop","getNext","_inner_call","p_cells","getPrev","addHotKey","keys","pack","_parse_keys","letter","removeHotKey","func","_process_calls","temp_result","controls","toUpperCase","getState","gravity","collapsed","activeCell","_cells","setState","states","setValue","form","getFormView","_skipSubmit","editCancel","getTopParentView","_hide","Settings","property","_parseSeetingColl","_define","setter","coll","initial","settings","_mergeSettings","Destruction","_last_editor","$id","_destroy_child","_htmlmap","_htmlrows","_html","_contentobj","unbind","release","_popups","CollectionBind","_cursor","sel","getSelectedId","setCursor","_update_binds","getCursor","oldid","refreshCursor","getItem","_bind_update","format","getBranch","importData","defaultData","_bind_update_common","ValueBind","silent","pod","RecordBind","getValues","BindSource","_bind_hash","_bind_updated","_ignore_binds","_bind_specific_rules","saveBatch","_do_not_update_binds","setBindData","updateItem","add","getBindData","addBind","removeBind","clear","BaseBind","_initBindSource","_bind_ready","_bind_source","_bind_id","_bind_refresh_handler","_on_sync","old_render","_in_bind_processing","validate","values","setDirty","UIExtension","webix_view","api","$setNode","_recollect_elements","confirm","results","direction","_queryGoUp","_queryGoDown","_queryView","kids","base_id","hidden","_hidden_render","_hidden_hash","_disable_cover","disable","enable","removeAttribute","disabled_setter","container_setter","css_setter","id_setter","_prev_global_col","oldvalue","_elements","_translate_ids","$setSize","last","_last_size","$width","_content_width","_scroll_y","scrollSize","$height","_content_height","_scroll_x","flex","$getSize","minWidth","maxWidth","minHeight","maxHeight","animate_settings","animate","_show","_render_hidden_views","ui_to_render","_onKeyPress","role","hidden_setter","clientWidth","clientHeight","resizeChildren","protoUI","_set_inner","border_not_set","borderless","borderWidth","_borders","SingleRender","templateStart","templateEnd","customize","_visible","_alt_render","_disabled","w","innerWidth","h","innerHeight","positionX","positionY","display","AutoTooltip","tooltip_setter","_init_tooltip_once","_show_tooltip","_get_tooltip_data","Canvas","_canvas_labels","_canvas_series","series","_obj","devicePixelRatio","_prepareCanvas","title","_canvas","canvas_id","getCanvas","ctx","getContext","_webixDevicePixelRatio","scale","_resizeCanvas","renderText","renderTextAt","valign","clearCanvas","skipMap","areas","_getMapAreas","clearRect","floor","toggleCanvas","_toggleCanvas","showCanvas","hideCanvas","html_element","animation","subtype","animation_copy","_has_animation","isSupported","formLine","defAniPos","keepViews","nextSibling","breakLine","line","duration","timing","skew_options","scale_type","css_general","css_transition","css_transform","transitionEnded","tid","$active","$name","set","skin","material","topLayout","barHeight","tabbarHeight","sidebarTitleHeight","toolbarHeight","listItemHeight","inputHeight","buttonHeight","inputPadding","menuHeight","labelTopHeight","propertyItemHeight","timelineItemHeight","unitHeaderHeight","inputSpacing","sliderHandleWidth","sliderPadding","sliderBorder","vSliderPadding","vSliderHeight","switchHeight","switchWidth","layoutMargin","space","wide","clean","head","toolbar","layoutPadding","tabMargin","tabOffset","tabBottomOffset","tabTopOffset","tabBorder","customCheckbox","customRadio","sidebarMarkAll","popupNoPoint","borderlessPopup","popupPadding","dataPadding","calendarWeekHeaderHeight","padding","accordionType","optionHeight","organogramLineColor","timelineColor","mini","flat","compact","contrast","webix_skin","Touch","longTouchDelay","scrollDelay","deltaStep","speed","ellastic","fastClick","limit","_limited","mouse","down","_touchstart","move","_touchmove","up","_touchend","_fire_fast_event","_clear_artefacts","_scroll","_start_context","_current_context","_prev_context","_scroll_context","_scroll_mode","_scroll_node","_scroll_stat","_long_touched","_delta","_x_moment","_y_moment","_time","_css_button_remove","_long_touch_timer","_was_not_moved","_axis_x","_axis_y","_active_transion","_scroll_end","_get_matrix","delta","_get_delta","$scroll","nx","ny","cnx","_correct_minmax","px","cny","py","abs","adjustScroll","_set_matrix","_scroll_master","_sync_scroll","_set_scroll","_translate_event","click_event","_set_scroll_pos","_axis_check","_x","_y","_get_event_view","_init_scroller","prev","edx","edy","xv","yv","trans","tmatrix","matrix","getComputedStyle","WebKitCSSMatrix","MSCSSMatrix","_tmatrix","tkey","_sync_pos","allow","sqrt","_init_scroll_node","scroll_enabled","_create_scroll","dim","visibility","old","_long_move","_locate","_stop_old_scroll","_stop_scroll","scrollHeight","_is_scroll","$touchCapture","_long_touch","stop_mode","time","_get_sizes","locate_mode","active","_get_context","_get_context_m","setMouse","touchInit","radiusX","$touch","pointerEnabled","msPointerEnabled","DragControl","_drag_masters","addDrop","master_mode","webix_drop","_getCtrl","webix_master","unlink","_createTouchDrag","dragCtrl","_getActiveDragMaster","_getDragItemPos","createDrag","_drag_context","x_offset","y_offset","addDrag","webix_drag","_preStart","_active","_saved_event","_preStartFalse","destroyDrag","evobj","_start_pos","_webix_drag_mm","_startDrag","_webix_drag_mu","_clean_dom_after_drag","sendSignal","_moveDrag","_stopDrag","$drop","$dragOut","still_drag","customPos","$dragPos","_skip","elementFromPoint","Proxy","_checkLand","_landing","$dragIn","signal","dragCtl","drag_container","$dragCreate","_setDragOffset","$drag","_skipDropH","_skip_mark","$dragDestroy","_dropHTML","itemPos","Movable","move_setter","_headobj","elOffset","elPos","drag","Modality","_modal_set","_modal_cover","_previous_modality","overflow","_ignore_clicks","topmost","ResizeArea","resize_setter","_resizeHandlers","_renderResizeHandler","_rwHandle","rp","_wrDown","_showResizeFrame","_resizeFrame","_wsReady","_resizeHandlersMove","_wrMove","_resizeHandlersUp","_wrUp","progress","$resizeMove","_wsProgress","$resizeEnd","_bodyobj","_head_cell","toFront","_modal","close","popups","click_view","zIndex_setter","body_setter","new_view","old_view","isBody","borderTopWidth","borderBottomWidth","borderLeftWidth","borderRightWidth","point","relative","fin_x","fin_y","point_y","point_x","fit","autofit","nochange","delta_x","delta_y","delta_point","deltax","deltay","fixed","_checkFixedPosition","_set_point","_hide_point","_setPosition","_hide_timer","autofocus","_prev_focus","showpopup","_hide_single","_hide_sub_popups","_hiding_process","contains","_hide_callback","order","_inner_body_set","head_setter","icon","getBody","getHead","baseview","_topPositionCallback","headMinWidth","head_size","headHeight","self_size","ContextHelper","attachTo","on_context","_show_at_ui","_show_at_node","_area","setContext","area","_show_at","_show_on_mouse_out","master_setter","clipbuffer","_blur_id","_ctrl","_paste","_isSelectRange","getSelection","last_active","getEditor","CopyPaste","clipboard_setter","templateCopy","clipboard","_selected","insert","modify","custom","templateCopy_setter","CustomPrint","$customPrint","htmlOnly","_prePrint","tableData","_getTableArray","table","_getTableHTML","doc","docFooter","print","prerender","autoheight","xCount","nobreaks","_getPageWidth","Infinity","printPPI","printMargin","newTableStart","colnum","_getVisibleRange","_dx","tableArray","colrow","cellValue","_itemClassName","txt","$css","forEach","tableHTML","column","span","colspan","colSpan","rowspan","rowSpan","br","CustomScroll","scrollStep","_init_once","$customScroll","_last_active_node","_on_reconstruct","_enable_datatable","_custom_scroll_view","_get_datatable_sizes","_y_scroll","_scrollTop","_x_scroll","_scrollLeft","_mouse_in","_mouse_out","mapCells","_custom_scroll_mode","_mouse_wheel","_set_additional_handlers","_custom_scroll_size","_mouse_out_timed","_active_drag_area","_adjust_scroll","_scroll_drag_pos","_mouse_out_timer","scrollWidth","_scroll_x_node","_sx","_vx","trackBar","_bar_x","_create_bar","_scroll_y_node","_sy","_vy","_bar_y","_update_scroll","bar","_scroll_drag_enabled","_set_scroll_value","scrollX","getSize","_last_set_size","scrollY","_removeScroll","_webix_event_sc1","_webix_event_sc2","_webix_event_sc3","_scroll_drag_released","wheelDelta","toblock","detail","scrolledBy","touchpadMoveX","wheelDeltaX","wheelDeltaY","x_dir","pose","max_scroll","now","_scroll_drag","_scroll_drop","left_scroll","shift_left","top_scroll","shift_top","_resize_scroll","DataMarks","addRowCss","hasCss","getItemNode","addMark","removeMark","getMark","clearCss","clearMark","DataMove","sid","tindex","tobj","new_id","newId","_externalData","_next_move_index","nid","new_index","getIndexById","$blockRender","moveUp","step","moveDown","moveTop","moveBottom","newdata","$template","externalData","rules","isEmail","isNumber","isChecked","isNotEmpty","ValidateData","clearValidation","elements","_clear_invalid","failed","_validate_details","isHidden","validateHidden","validateDisabled","$obj","_validate","$all","complexData","subresult","subview","input","validator","required","_mark_invalid","_pull","dp","getOnly","DataProcessor","masterId","autoupdate","updateFromResponse","operationName","trackMove","_ignore","_after_init_call","_updates","store","_promise","_waitSave","_onStoreUpdated","_onDataMove","ignore","off","on","_copy_data","_save_inner","_scheme_serialize","$parent","_invalid","_check_unique","_sendData","targetid","webix_move_index","webix_move_id","webix_move_parent","one","_in_progress","triggerId","wait","marked","to_send","tosave","precise_url","_scheme_save","_updatesData","_proxy_on_save","saveAll","processed","_processResult","_processError","attachProgress","_innerProcessResult","getItemState","setItemState","exists","changeId","undoOnError","undo","removeUndo","finalResult","_get_stack_index","DataStore","setDriver","_marks","_filter_order","recs","_inner_parse","_scheme_group","_group_processing","_not_grouped_order","_scheme_sort","subload","marks","_removeMissed","_scheme_update","_scheme_init","delid","endpos","_render_change_id","changeTrack","_skip_refresh","getRange","to","$min","startOffset","$max","endOffset","getIndexRange","sindex","_move_inner","scheme","_scheme","$save","$change","$update","$serialize","$group","$sort","_scheme_export","$export","serialize","_make_full_copy","oldpull","branch","_filter_branch","_extraParser","_datadriver_child","_set_child_scheme","unsync","_sync_source","sync_logic","_skip_next_sync","_sync_events","_back_sync_handler","data_size","original_index","clearAll","soft","getNextId","getFirstId","getLastId","getPrevId","by","as","parameters","_sort_core","sorter","sorting","pre","$freeze","neworder","_filter_reset","preserve","_filter_core","first","match","_filterMode","_obj_array","_methodPush","provideApi","eventable","onbeforesort","onaftersort","onbeforeadd","onafteradd","onbeforedelete","onafterdelete","ondataupdate","list","old_css","current_css","ids","_dir","_by","DataLoader","_feed_last","_call_onclearall","_call_on_config","feed","_feed","_load_count","_feed_common","_feed_on_load","_feed_callback","filterValue","loadNext","datathrottle","datafetch","_throttle_request","_maybe_loading_already","removeMissed_setter","_init_dataprocessor","save_setter","waitSave","many","scheme_setter","dataFeed_setter","filtervalue","urldata","_this4","_ready_was_used","DataState","cols_n","fillspace","_hidden_column_order","_last_sorted","_last_order","_filter_elements","_dtable_fully_ready","any_filter","_hidden_column_hash","_hidden_split","leftSplit","rightSplit","hihash","hideColumn","hikey","reorder","getColumnConfig","refreshColumns","_setColumnWidth","_updateColsSizeSettings","getColumnIndex","_sort","filterByAll","contentid","contentId","_active_headers","unselect","_select","DragItem","_initHandlers","$dragMark","_auto_scroll_force","drag_setter","_inner_drag_only","_drag_pause","$dropAllow","_target_to_id","_define_index","_context_to_move","getBranchIndex","getParentId","hash_id","fragile","$dragHTML","_toMultipleHTML","multiple","_marked","_remove_css","_add_css","$dropHTML","_set_drop_area","DragOrder","_close_branches","_drag_order_stored_left","_drag_order_complex","$level","_init_drop_area","_drag_direction","ofs","_marked_item_id","_header_height","ot","nt","_id","Undo","_undoHistory","_undoCursor","undo_setter","_init_undo","_draggedItem","$index","_addToHistory","_deletedItem","$branch","oldId","action","_skipHistory","_skipCursorInc","ignoreUndo","_undoAction","parentId","create_suggest","linkInput","getLabel","editValue","label","editors","init_suggest","editor","suggest","boxobj","checked","$inline","collection","rec","isplain","destroy","getPopup","$popup","createPopup","pobj","_linked","popupType","popupInit","moveSelection","color","date","_is_string","stringResult","combo","_create_suggest","_shared_suggest","_suggest","showPopup","getList","_initial_value","showItem","_last_input_target","afterRender","sobj","getItemText","getSuggestion","richselect","password","icons","multiselect","button","EditAbility","editaction","_editors","onDblClick","_refocus_inline_editor","editable","_init_edit_events_once","_refocus_try","newnode","_locateInput","editable_setter","_changeEditorId","edit","_reset_active_editor","_component_specific_edit_init","_handle_live_edits","liveEdit","_set_new_value","_show_editor_form","realform","_get_editor_type","_init_editor","_live_edits_handler","_on_editor_change","$fixEditor","globalState","edit_open_time","getEditorValue","_get_edit_config","_addEditor","_sizeToCell","_locate_cell","_removeEditor","focusEditor","ed","_edit_stop","cancel","_editStop","_for_each_editor","inline","_get_new_value","validateEditor","getEditState","editor_next","_find_cell_next","_after_edit_next","new_value","FlexLayout","_fix_vertical_layout","_beforeResetBorders","_afterResetBorders","g","_sizes","_padding","_set_child_size","st","margin","_margin","paddingTop","paddingBottom","paddingLeft","paddingRight","flexBasis","flexGrow","whs","GroupMethods","sum","summ","some","string","GroupStore","ungroup","_ungroupLevel","_not_grouped_pull","level","changed","$footer","_unregisterItem","_fix_group_levels","_group_prop_accessor","acc","missing","_group_tree","groups","labels","missed","misGroup","$row","_map_group","_fill_pull","topbranch","current_id","ancestor","newitem","_formath","footer","$count","Group","HTMLOptions","customRadio_setter","_moveSelection","_getInputNode","_blur","inp","getOption","optionIndex","addOption","removeOption","_setNextVisible","_getFirstActive","_filterOptions","_setOptionState","field","hideOption","showOption","disableOption","enableOption","HtmlMap","_key","_map","_areas","addRect","points","userdata","_createMapArea","addPoly","shape","coords","extra_data","addSector","alpha0","alpha1","R","ky","PI","cos","sin","querySelectorAll","nodes","nod","coordsdis","IdSpace","_get_self","_run_inner_init_logic","_run_after_inner_init_logic","innerId","onitemclick","KeysNavigation","_set_focusable_item","_set_item_focus","_navigation_helper","navigation","selected","x_layout","_parent_menu","_hide_sub_menu","_skip_item","getSubMenu","_mouse_move_activation","navigation_setter","_global_nav_grid_hotkeys","MapCollection","_create_scheme_init","_scheme_init_order","_build_data_map","_process_field_map","_process_single_map","getSource","dateStr","parseFormatDate","_map_options","_create_collection","options_view","_bind_collection","_map_header_options","refreshFilter","_bind_template","optionslist","multi","separator","MouseEvents","_clickstamp","_dbl_sensetive","_item_clicked","_mouse_action_extend","onClick","onContext","onMouseMove","_onClick","on_dblclick","_onDblClick","_onContext","on_mouse_move","_enable_mouse_move","_mouse_move_enabled","_onMouse","_mouse_move_timer","stamp","_mouseEvent","_onMouseMove","_onMouseOut","mouseEventDelay","pair","vid","wid","w_view","NavigationButtons","_moveActive","_showNavItem","_navPanel","_renderPanel","_renderNavItems","_renderNavButtons","_setLinkEventHandler","bindId","_linkAttr","_showPanelBind","_prevNavButton","_nextNavButton","inc","_active_cell","setActiveIndex","items","linkAttr","_clearPanel","buttons","aria","prevTab","OverlayBox","showOverlay","message","_overlay","hideOverlay","PagingAbility","pager_setter","pager","ui_pager","_count_pager_total","check_pager_sizes","repeat","autosize","getVisibleCount","page","_count_pager_index","$pagesize","_pager","$master","setPage","getPage","getPager","ProgressBar","_progress","showProgress","hideProgress","incss","_progress_animate","_progressTimer","clearInterval","setInterval","_progress_hide","RenderStack","_call_onclick","item_setter","type_setter","_toHTMLObject","search_id","txmin","txmax","tymin","tymax","_setItemActive","cont","_renderobj","Scrollable","_one_time_scroll","scroll_setter","auto","_refresh_scroll","_touch_scroll","overflowX","overflowY","_onoff_scroll","scrollSpeed","SelectionModel","_data_updated","_data_loaded","_data_filtered","_select_check","_id_changed","_set_noselect","loadBranch","$selected","_select_mark","need_unselect","sname","_silent_selection","unselectAll","_refresh_selection","ename","selectAll","isSelected","as_array","getSelectedItem","_is_mass_selection","_toHex","toHex","number","rgbToHex","rgb","hexToDec","hex","toRgb","rgbArr","lastIndexOf","hsvToRgb","hi","q","rgbToHsv","r0","g0","b0","min0","max0","joinAttributes","SVG","xmlns","version","viewBox","_handlers","cp0","cp1","radius","angle0","angle1","definePath","_linePoints","setOpacity","rawColor","opacity","rgbColor","_curvePoints","getPath","getSector","lines","getCurve","getLine","p0","p1","getCircle","getRect","paddingX","paddingY","eventRadius","Line","draw","getPoints","renderer","_applyColor","_getLinePoints","graph","_drawItems","_drawEventItems","styleMap","lineColor","webix_area","minValue","maxValue","unitX","yNum","unitY","ceil","Area","BaseLine","itemCss","Bar","negativeColor","_getOrigin","evPoints","_getEventPoints","evItems","barWidth","originY","Pie","_defColorsCursor","_defColors","_getColor","colorsCount","sectors","getAngles","x0","y0","_context","a1","a0","ratios","_getRatios","_getTotalValue","prevSum","totalValue","Spline","Base","linePoints","_getControlPoints","p2","defaultsArea","SplineArea","Sparklines","linePath","areaPoints","itemPoints","getTemplate","customConfig","slConstructor","_template","getData","sparklines","delimiter","sep","_split_clip_data","_substr_count","tline","quoted","chunk","substring","reg","TablePaste","_sel_to_clip","_clip_to_sel","_get_sel_text","mapSelection","row_ind","newvalue","block","leftTop","col_ind","TreeAPI","openAll","eachSubItem","closeAll","_tree_check_uncheck","threeState","_tree_check_uncheck_3","isBranchOpen","getOpenItems","_repeat_set_state","tree","TreeClick","webix_tree_open","webix_tree_close","webix_tree_checkbox","TreeDataLoader","_sync_hierarchy","_feed_commonA","_sync_to_order","TreeDataMove","_check_branch_child","_remove_childs","target_parent","$child","copy_data","tbranch","sbranch","_set_level_rec","TreeRenderStack","_toHTMLItem","_toHTMLItemObject","_toHTMLLevel","leaves","_tree_branch_render_state","leafs","getNextSiblingId","_branch_render_supported","TreeStateCheckbox","_init_render_tree_state","updated","_setThirdState","threeState_setter","parents","checkedParents","_getAllLeaves","_setParentThirdState","_setCheckboxIndeterminate","chElem","indeterminate","itemId","checkedCount","unsureCount","needrender","eachChild","getChecked","_correctThreeState","checkItem","uncheckItem","_checkUncheckAll","checkAll","uncheckAll","TreeStore","showSubItems","filterMode_setter","filterMode","_filter_branch_rec","child_run","openParents","newsub","eachOpen","_change_branch_id","branches","getPrevSiblingId","getFirstChildId","isBranch","parse_name","pItem","pBranch","webix_kids","parent_branch","itemid","_sync_each_child","getTopRange","eachLeaf","bset","pid","refresh_parent","_rec_remove","_filter_removed","out","TreeTablePaste","TreeType","checkbox","nocheckbox","folder","UploadDriver","$render","_upload_area","files","_stop_file","input_config","tabindex","accept","directory","webkitdirectory","mozdirectory","_drop","_add_files","_upload_timer_click","fileDialog","_directoryEntry","isDirectory","_directoryDrop","isFile","addFile","createReader","readEntries","entries","dataTransfer","webkitGetAsEntry","_last_file_context","inputs","_last_assigned_upload_callback","upload","formData","append","inputName","globalData","_get_active_url","$updateProgress","loaded","total","aborted","_file_complete","complete","_upload_complete","_complete","percent","stopUpload","abort","ValidateCollection","_validate_init_once","rules_setter","Values","_inner_setValues","_is_form_dirty","_values","$allowsClear","isDirty","getDirtyValues","_inner_getValues","getCleanValues","markInvalid","invalidMessage","invalid","setBottomText","VirtualRenderStack","_render_visible_rows","_unrendered_area","ind","_render_delayed","_wait_for_render","_create_placeholder","viewport","_max","_from","_height","_filled","holder","holder_row","nextpoint","loading","delta2","loadahead","_top","VRenderStack","_in_touch_scroll","_footer","_run_load_next","cid","conf","errorMessage","getDataHelper","raw","getExportScheme","treeColumn","h_count","f_count","isTable","rawValues","isTree","treeLines","_columns","flatTree","flatKey","fill","fillMode","noExport","rawColumn","sourceColumn","_columns_pull","export_mode","exportType","exportFormat","hcell","getHeaderContent","diff","getExportData","filterHTML","htmlFilter","docHeader","_headers","treeline","plainOutput","_spans_pull","getSpan","trim","footers","_footers","font","getBlob","pdf","blob","Blob","getPdfData","addPDFDoc","orientation","pdfjs","Document","_export_font","threshold","promises","html2canvas","background","logging","useCORS","canvas","image","toDataURL","binary_string","atob","bytes","charCodeAt","Image","buffer","images","viewOptions","textBefore","addText","addPDFTable","textAfter","pageBreak","addPDFHeader","ft","textAlign","dataExport","pageNumber","of","pageCount","horder","docHeaderImage","err","img","getAutowidth","colWidths","tableOps","lineHeight","borderColor","backgroundColor","headerRows","headerOps","borderRightColor","borderBottomColor","footerOps","toExcel","$exportView","dataOnly","exportData","getSpans","WBProps","getExcelData","xls","write","bookType","bookSST","str2array","buf","ArrayBuffer","boolean","ws","C","cell_ref","stringValue","isFormula","SSF","cellStyle","getStyles","encode_range","getRowHeights","hpt","getColumnsWidths","wscols","getHeaderSpans","xc","yc","sc","sr","usercall","modalbox","modal_key","keyboard","lastModalbox","modality","cover","onkeydown","_createBox","ok","_boxStructure","onclick","_box","containerWidth","containerHeight","alertPopup","confirmPopup","boxPopup","box_params","expire","timers","hideAll","random","wDate","startOnMonday","toFixed","ms","weekStart","getDay","datePart","monthStart","setDate","yearStart","setMonth","dayStart","dateToStr","utc","getMonth","getDate","getFullYear","calendar","dayShort","dayFull","monthShort","monthFull","getHours","getMinutes","pm","am","getSeconds","getMilliseconds","getISOWeek","strToDate","mask","splt","monthShort_hash","monthFull_hash","UTC","ndate","nday","first_thursday","year_number","ordinal_date","getTime","getUTCISOWeek","_correctDate","d0","checkFunc","incorrect","setHours","getYear","setYear","setMinutes","setSeconds","setMilliseconds","timePart","getTimezoneOffset","equal","isHoliday","day","Number","decimalSize","groupSize","dot","decimalDelimiter","groupDelimiter","decimal","sign","decimalOptional","int_value","numToStr","setLocale","locale","locales","priceSettings","_price_format","price","_price_settings","intFormat","priceFormat","numberFormat","dateFormat","timeFormat","longDateFormat","fullDateFormat","fileSize","hours","minutes","today","PDFviewer","automaticZoom","actualSize","pageFit","pageWidth","pageHeight","enterPassword","passwordError","increaseValue","decreaseValue","navMonth","navYear","navDecade","monthFormat","yearFormat","hourFormat","minuteFormat","removeItem","pages","headermenu","openGroup","closeGroup","closeTab","showTabs","resetTreeMap","navTreeMap","nextTab","multitextSection","multitextextraSection","showChart","hideChart","resizeChart","richtext","underline","bold","italic","comments","confirmMessage","placeholder","moreComments","storage","local","localStorage","setItem","session","sessionStorage","cookie","domain","expires","toUTCString","getRaw","check_name","a_all_cookies","a_temp_cookie","cookie_value","unescape","cookies","papers","fits","modes","portrait","landscape","_getHeaderFooter","patterns","phone","card","exit","$html","viewConfig","_pos","_fullscreen","_getHeadConfig","_parent","getActiveId","replaceChild","addView","_setSizes","_clearValues","error_key","RemoteContext","_proxy","_queue","_url","_process","getApi","_getProxy","remote","$key","$vars","_proxy_call","_call","args","_deffer","_start_queue","_timer","_run_queue","defs","$sync","$args","request","_pack","$context","pr","payload","scripts","new_orientation","datafilter","textWaitDelay","trackCells","getHelper","uncheck","checkValue","uncheckValue","component","registerFilter","_comp_id","_on_key_down","_filter_timer","compare","_get_data","emptyOption","option","_on_change","_collectValues","collectValues","collect","serverFilter","$server","textFilter","serverSelectFilter","selectFilter","numberFilter","prepare","equality","intvalue","_greater","_lesser","_equal","dateFilter","reverse","dateFormatDate","restore","factory","configOnly","_restore","$layout","serializer","childs","movePortlet","_parse_cells","_layout_sizes","_responsive","isolate","rows_setter","_vertical_orientation","_collection","cols_setter","whiteSpace","_beforeRemoveView","target_id","_insertBeforeView","verticalAlign","newui","removeView","reconstruct","_hiddencells","_signal_hidden_cells","showBatch","visibleBatch","batch","$nospace","_parse_cells_ext_end","_fix_container_borders","_bubble_size","vertical","fixed_count","_master_size","_desired_size","responsive","_set_child_size_a","ps","_set_size_delta","_set_size_gravity","_responsive_hide","_responsive_width","_responsive_height","_responsive_marker","_responsive_show","responsiveCell","_responsive_cells","oldIndex","_next","_first","_parse_cells_ext","_parse_once","defined","_hasBorders","_render_borders","correction","viewA","structure_changed","_cleanlayout","maxlength","s_inner","s_next","contrstyle","contrpadding","_margin_set","_padding_set","calendarCount","_correct_value","_zoom_level","_types","skinConf","cheight","cwidth","rheight","rwidth","basecss","_steps","events","_isInRange","monthSelect","timepicker","_footer_row","_after_init","value_setter","_cals","showCalendar","_changeDateSilent","_related_date","getVisibleDate","addToRange","_add_date","_string_to_date","_icons","_icons_template","icons_template","itemplate","isOutside","tomorrow","yesterday","cals","_cals_hash","_on_date_select","zoom","_before_zoom","_month_change","oldzoom","_after_zoom","_getIndexById","_time_mode","_zoom_logic","_changeStep","_shift","year","month","_changeDate","_set_time","reldate","vis","richSelectFilter","$webix","getText","marginLeft","$noEmptyOption","richconfig","inputtype","inputConfig","serverRichSelectFilter","multiSelectFilter","serverMultiSelectFilter","multiComboFilter","tagMode","serverMultiComboFilter","datepickerFilter","columnGroup","closed","isOpened","showColumnBatch","firstRun","groupText","dateRangeFilter","daterange","serverDateRangeFilter","_detectScrollSize","div","setSkin","_fixHeight","aniset","cloneNode","ani","animateView","stateHandler","getHTML","currentStyle","currentState","newState","tempParent","fullScreen","fix","onrotate","_template_types","_correct_width_scroll","section","onClick_setter","_render_me","_not_render_me","_probably_render_me","src_setter","content_setter","setHTML","setContent","_template_resize_timer","_get_auto_height","_resizeChildren","cx","cy","desired_size","self_sizes","scroll_size","_native_scroll","showView","topPos","getIframe","getWindow","contentWindow","panelClass","newview","collapsed_setter","panel","_skin_render_collapse","_accLastChild","_afterOpen","_canCollapse","_headlabel","_headbutton","header_setter","headerAlt_setter","fixedHeight","_getHeaderSize","headerHeight","webix_accordionitem_header","_toggle","webix_accordionitem_header_v","_collapse","sibl","expand","_expand","$noresize","headerAlt","headerAltHeight","_last_set_header_size","headerSize","_last_size_y","_key_property","_dragobj","_originobj","border","cursor","_moveev","_onmove","_upev","_onup","_last_result","eventPos","_rsDown","_rsUp","_getResizeDir","_rs_started","_resizer_dir","_resizer_dim","marginRight","marginBottom","_getResizerCells","_rs_process","_rsLimit","_rsStart","cellOffset","posParent","_rs_progress","_resizeStick","resizearea","_rsEnd","_rsResizeHandler","cDiff","limits","limitSizes","totalSize","_rsGetDiffCellSizes","_rsGetLimitCellSizes","_getRsCell","_resizerStick","_rsGetCellSizes","cell_size","size1","size2","styleDim","align_setter","_x_align","_y_align","_p_align","marginTop","_back_queue","_ask_render","cell_id","view_id","_render_hash","_render_queue","_render_activation","subcell","baselayout","_in_animation","cells_setter","_getDirection","vx","animation_options","getTabbar","_next_cell","callback_original","fitBiggest","other","back","viewId","getMultiview","_init_tabview_handlers","tabs","tabbar","mview","_layout","_initLayout","_fix_after_view_add","layoutProp","layoutConfig","_setScroll","getLayout","_nextCell","_size","showNext","showPrev","getActiveIndex","layoutSizes","selfSizes","setActive","selfSize","layoutType","_init_drag_area","_refreshChildScrolls","_restore_scroll_state","markDropArea","_markerbox","isv","_removeEmptySource","childview","maxcount","_portlet_drop_target","_portlet_drop_mode","evObj","_getPortletTarget","_markPortletDrag","drop","erx","ery","autoplace","gridColumns","gridRows","gridRows_setter","_actual_rows","abslayout","_do_compact","_check_default_pos","_buildMatrix","_isFree","exceed","_reserveSpace","_silent","sx","sy","_markMatrix","_canMoveRight","mx","_canMoveLeft","_canMoveTop","_compact","_apply_new_grid","my","compacted","cross","moveView","cellWidth","cellHeight","_getActualSize","_isDragNode","sview","dashboard","_addDragMarker","_dragMarker","_getPosFromCoords","rx","ry","external","inpos","dash","gridlayout","fx","_origin_cells","subcount","_save_data","_fill_data","datalayout","_point_element","_form_classname","_form_vertical","onbeforetabclick","onaftertabclick","onchange","elementsConfig","_rec_apply_settings","nextsettings","_default_height","$cssName","label_setter","_body_view","_last_body_size","labelWidth","labelAlign","_inputPadding","_inputSpacing","_labelTopHeight","labelPosition","lw","bottomLabel","_invalidMessage","fieldset","_tagname","_attribute","_get_html_value","tagname","_get_value","radio","textarea","selectedIndex","_set_html_value","_set_value","firstElementChild","_default_values","_copy_inner_content","_parse_inputs","cant_clear","nameWidth","on_render","on_edit","webix_property_check","registerType","elements_setter","_idToLine","alter_type","_data_width","_clear","_props_dataset","els","weekHeader","monthHeader","weekNumber","skipEmptyWeeks","calendarHeader","DateHelper","minuteStep","timeIcon","timepickerHeight","dayTemplate","dayTemplate_setter","calendarHeader_setter","calendarTime_setter","_calendarTime","date_setter","maxDate_setter","minDate_setter","minTime_setter","parseTimeFormatDate","maxTime_setter","_ariaFocus","relatedTarget","_locate_day","_locate_date","_special_dates","_selected_days","minuteStep_setter","_zoom_in","_fixed","_getDateBoundaries","_rows","_content_padding","getSelectedDate","_keyshift","_set_date_bounds","days","_month","_start","_getColumnConfigSizes","bounds","_columnsHeight","_columnsWidth","columnsNumber","rowsNumber","icons_setter","_icons2","_zoom_size","_current_time","cpad","_week_template","_body_template","_timepicker_template","_changeZoomLevel","calendarTime","timeFormatStr","clock","tpl","range_date","week_template","calendarWeekHeader","day_index","blockDates_setter","_day_css","_checkDate","_selectedDay","sqSize","alabel","_getCalSizesString","_changeDateInternal","_update_zoom_level","_isBlocked","isBlocked","minHour","minTime","maxHour","maxTime","minMinute","maxMinute","blockTime","_setContent","_findActive","newdate","selectDate","blocked","minDate","maxDate","minYear","maxYear","_getTitle","_getContent","_zoom_start_date","setFullYear","_correctBlockedTime","sections","zlogic","_reserve_box_height","_reserve_box_width","timeColNum","enLocale","_timeHeaderTemplate","_timeButtonsTemplate","w2","_mode_selected","_selectDate","cind","rind","webix_cal_prev_button","webix_cal_next_button","webix_cal_day_disabled","webix_cal_outside","webix_cal_day","webix_cal_time","webix_range_time_start","webix_range_time_end","webix_cal_done","webix_cal_month_name","webix_cal_block","blockedDate","blockDates","palette","minLightness","maxLightness","_findIndex","pal","_getBox","$prepareValue","$setValue","_selectBox","_getSelectBox","lastChild","_initPalette","numToHex","hslToRgb","l","hue2rgb","colors","colorRows","colorStep","lightStep","colorRange","renderGrayBar","colCount","gray","lt","itemTpl","firstRow","renderRow","rowHtml","$renderInput","badge","awidth","aheight","_pattern","_set_default_css","_calc_size","hotkey_setter","control","_addElementHotKey","_get_class","webix_danger","webix_transparent","webix_primary","_set_inner_size","imageTop","iconTop","_findAllInputs","tagNames","_disabledTabIndex","$compareValue","_rendered_input","$getValue","_sqrt_2","autowidth","_calck_input_size","_input_width","inputWidth","_input_height","_inputHeight","bheight","dheight","handle","cssFloat","_handle_tab_click","opt","webix_all_segments","webix_all_tabs","webix_inp_counter_next","webix_inp_counter_prev","webix_input_icon","webix_inp_checkbox_border","toggle","webix_inp_checkbox_label","webix_inp_radio_border","webix_tab_more_icon","webix_tab_close","_check_options","_get_div_placeholder","nav_controls","TextPattern","pattern","format_setter","_custom_format","_on_key_pressed","_after_render","_getRawValue","_matchPattern","pattern_setter","_patternScheme","_init_validation","_pattern_chars","_pattern_allows","_property_stamp","chars","_pattern_scheme","_getCaretPos","_input_code","_fixCaretPos","rawIndex","rawLength","rchar","icode","nind","lind","_init_onchange","_onBlur","$renderIcon","addSection","relatedView_setter","relatedAction","viewid","relatedView","validateEvent_setter","bottomLabel_setter","bottomPadding","_getInvalidText","_restorePadding","heightInc","_get_input_width","iconWidth","_render_div_block","inputAlign","_baseInputHTML","$renderLabel","_getLabelHeight","div_start","setValueHere","symbol","suggest_setter","DataCollection","optview","options_setter","rightlabel","labelRight","ch","customCheckbox_setter","eachid","isDisabled","optlabel","rd","focusable","newline","_init_popup","_prepareSingleValue","timeMode","_formatDate","_get_visible_text","_get_visible_text_single","_formatStr","fullDateFormatStr","_set_visible_text","_get_value_single","timeFormatDate","fullDateFormatDate","formatStr","parseTimeFormatStr","_getColorNode","datepicker","popupWidth","_revertValue","_suggest_config","_reset_value","dynamic","_ignoreLabelClick","_show_view","optionWidth","tabbarPopup","isPressed","onLabel","offLabel","onIcon","offIcon","getValueHere","_full_value","_subs","seg","removeSection","_subOnChange","newConfig","subConfig","newone","_listClassName","_auto_resize","dynamic_setter","webix_list_item","_no_animation","_one_height","_auto_height_calc","getUnits","_auto_width_calc","yCount","widthSize","heightSize","classname","webix_selected","disableItem","_set_item_disabled","enableItem","isItemEnabled","isobj","buttonText","fitMaster","$checked","keepText","tagTemplate","_render_value_block","_removeValue","newValues","_click_stamp","_addNewValue","_inputValue","_addValue","newValue","isObj","$customWidth","_dont_unfilter","_suggest_after_filter","inputStyle","inputValue","readOnly","_inputWidth","_getValueListBox","textArr","_toMultiValue","listbox","_getMultiComboInputWidth","_resizeToContent","_focusAtEnd","inputEl","FieldRange","elemLen","inputDiv","_getInputDiv","cHeight","topView","calcHeight","_typing","_enter","_getSelectedOptions","_valueHistory","_calcInputWidth","tmp","calcWidth","_windowHeight","getItemId","_backspaceTime","moveTitle","_handle_id","title_setter","_get_slider_handle","corner1","_sliderPadding","corner2","cornerStr","sizeStr","_sliderHandleWidth","_sliderBorder","part","_set_title","half","pos1","pos2","_set_value_now","_on_mouse_down_start","_handle_move_keyboard","_activeIndex","_handle_drag_events","_mouse_down_process","_start_value","_start_handle_dnd","_get_value_from_event","_handle_move_process","_handle_move_stop","touchContext","ax","_get_value_from_pos","corner","handles","_get_left_pos","_set_left_pos","_set_value_pos","handle0","handle1","left0","left1","parentBox","_title_hidden","_hide_title","sibling","_set_title_n","_set_handle_active","hActive","pos0","slider","_calck_switch_size","_switchWidth","_switchHeight","onWidth","offWidth","topOffset","bottomOffset","tabMinWidth","tabMoreWidth","_getTabbarSizes","totalWidth","limitWidth","popupTemplate","_popupInnerClick","moreTemplate_setter","popupTemplate_setter","moreTemplate","leafWidth","resultHTML","verticalOffset","selectedTab","lastTab","_getTabHTML","_tabTemplate","segmented","_setLayout","_button","_add_data","editField","onAfterRender","_updateValue","_getselection","webix_richtext_editor","editorToolbar","rangeCount","queryCommandState","_execCommandOnElement","commandName","selText","anchorNode","focusNode","getRangeAt","isCollapsed","textValue","textContent","focusEl","focustext","anchorOffset","wordBegining","wordEnd","startWord","endWord","setStart","setEnd","removeAllRanges","addRange","execCommand","removeIcon","fileName","uploader","autosend","apiOnly_setter","link_setter","_format_size","file_struct","sizetext","webkitRelativePath","urlData","subline","addDropZone","hover_text","extra_css","fullcss","timer","isUploaded","$onUploadComplete","filter_setter","_show_on_key_press","etemp","_get_extendable_cell","_set_on_popup_click","_show_selection","_old_text","_get_details","_preselectMasterOption","$setValueHere","setMasterValue","_set_input_value","getMasterValue","input_setter","webix_master_id","_suggestions","_non_ui_mode","_tab_key","_escape_key","$enterKey","_navigate","isContentEditable","_last_delay","_resolve_popup","innerText","_before_filtering","visible","onItemClick","_toggleOption","getButton","onChange","_is_all_selected","_onReady","multisuggest","autoConfig","_getText","grid","_last_cursor_pos","_setValue","formatDate","iValue","_formatValue","getInput","setSheets","scrollPos","scrollVisible","_onscroll","_check_quantum","scrollWidth_setter","scrollHeight_setter","sizeTo","pointerEvents","getScroll","_onscroll_inner","activeArea","x_mode","_x_scroll_mode","_on_wheel","_add_touch_events","pointerType","_start_scroll_pos","deltaMode","deltaX","deltaY","_scroll_trg","Mixin","_init_areaselect","_arSelCheckKeys","_areaSelStorage","refreshSelectArea","_setTabindex","_areaSelHiddenIndex","_excludeColumnFromAreas","_bs_do_select","stopped","addSelectArea","_activeAreaSName","removeSelectArea","_span_correct_range","_ars_down","_block_sel_flag","_updateSelectArea","_extendAreaRange","sci","eci","sri","eri","ci","ri","iri","ici","_extendAreaToData","bsUpdate","areaselect_setter","i0","i1","j0","j1","_lastDefArea","_selected_areas","_renderSelectAreaBox","_render_scroll_shift","xr","yr","center","_render_full_rows","_get_x_range","_get_y_range","_rselect_box","_rselect_box_left","_rselect_box_right","_calcAreaSelectIndexes","startIndex","endIndex","r1","_render_scroll_top","_getSelectAreaCellPositions","c0","c1","_rightSplit","_setSelectAreaBorders","startColumn","endColumn","endPos","splitPos","handleBox","handlePos","_getTopSplitOffset","renderArea","skipLeft","skipRight","bName","hor","borders","_removeAreaNodes","removeNodes","xCorrStart","_left_width","xCorrEnd","_bs_ready","_bs_position","_bs_start","_bs_progress","_bs_select","getSelectArea","getAllSelectAreas","inner_call","spanR0","spanC0","minR0","minC0","maxR1","maxC1","oldv","removeOnly","server","isColumnVisible","originvalue","inputvalue","_multi_compare","_runServerFilter","itemValue","getFilter","checks","lineId","hover_setter","_hover_initialized","experimental","_last_hover","removeRowCss","hover","select_setter","_selections","_commonselect","_select_css","_reinit_selection","webix_cell","_click_before_select","_data_cleared","_data_synced","_selected_rows","_select_key","_selected_pull","asArray","plain","_id_to_string","_unselect","_clear_selection","_finalize_select","_post_select","clearSelection","selectRange","_post_unselect","_add_item_select","_selectRange","_mapSelection","$printView","_beforePrint","paper","_checkOptions","_print","canvases","destCtx","drawImage","_afterPrint","level_in","level_out","single","instance","_reinit","wrap","msToBlob","toBlob","getCsvData","fontName","TTFFont","alert","submit"],"mappings":"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"}