@cdmx/wappler_ag_grid 2.1.3 → 2.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.json +7 -0
- package/CHANGELOG.md +23 -1
- package/app_connect/components.hjson +6 -5
- package/dmx-ag-grid.js +37 -12
- package/package.json +5 -2
- package/tests/01-basic-render.html +106 -0
- package/tests/02-themes-locale.html +98 -0
- package/tests/03-editing.html +119 -0
- package/tests/04-selection.html +103 -0
- package/tests/05-action-buttons.html +97 -0
- package/tests/06-export.html +80 -0
- package/tests/07-import.html +80 -0
- package/tests/08-formatting.html +91 -0
- package/tests/09-grouping.html +74 -0
- package/tests/10-state-persistence.html +84 -0
- package/tests/11-layout.html +72 -0
- package/tests/12-methods.html +93 -0
- package/tests/13-flags-styles.html +374 -0
- package/tests/14-compact-view.html +112 -0
- package/tests/README.md +146 -0
- package/tests/data/sample-data.js +52 -0
- package/tests/dmxAppConnect/dmxAppConnect.js +10 -0
- package/tests/dmxAppConnect/dmxAppConnect.js.map +1 -0
- package/tests/index.html +107 -0
- package/tests/lib/common-head.html +30 -0
- package/tests/lib/page-template.js +54 -0
- package/tests/lib/run-collector.js +32 -0
- package/tests/lib/test-helpers.js +145 -0
- package/tests/lib/test-suite.css +178 -0
- package/tests/run-all-puppeteer.cjs +180 -0
- package/tests/run-all.cjs +144 -0
- package/tests/serve.cjs +66 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["init.js","core/polyfills.js","core/clone.js","core/equal.js","core/api.js","core/errors.js","core/events.js","core/fileUtils.js","appConnect.js","cordova.js","core/signal.js","core/signalProxy.js","core/scope.js","core/dom.js","core/parser.js","core/BaseComponent.js","core/pathToRegexp.js","core/hjson.js","core/flow.js","components/app.js","components/form.js","components/formElement.js","components/textarea.js","components/input.js","components/inputFile.js","components/inputFileMultiple.js","components/button.js","components/radio.js","components/radioGroup.js","components/checkbox.js","components/checkboxGroup.js","components/select.js","components/selectMultiple.js","components/value.js","components/repeat.js","components/repeatItem.js","components/fetch.js","components/serverconnect.js","components/serverconnectForm.js","components/if.js","components/datetime.js","components/apiAction.js","components/apiForm.js","components/array.js","components/group.js","components/flow.js","components/toggle.js","components/formData.js","attributes/bind.js","attributes/on.js","attributes/repeat.js","attributes/class.js","attributes/hide.js","attributes/show.js","attributes/html.js","attributes/text.js","attributes/style.js","formatters/global.js","actions/core.js","actions/collections.js","actions/console.js"],"names":["window","dmx","version","versions","config","throwErrors","mapping","form","input","textarea","select","noop","isset","v","undefined","array","a","Array","from","reIgnoreElement","rePrefixed","reExpression","reExpressionReplace","reToggleAttribute","reDashAlpha","reUppercase","__components","Object","create","__attributes","before","mounted","__formatters","boolean","global","string","number","object","any","__adapters","__actions","__startup","Set","Element","prototype","closest","s","i","matches","this","document","ownerDocument","querySelectorAll","el","length","item","parentElement","NodeList","forEach","queueMicrotask","callback","Promise","resolve","then","catch","e","setTimeout","Node","defineProperty","get","contains","toggleAttribute","name","force","hasAttribute","removeAttribute","setAttribute","toString","hasOwnProperty","typedArrayTags","tag","reFlags","isObject","value","cloneArrayBuffer","buffer","slice","result","constructor","byteLength","Uint8Array","set","cloneTypedArray","byteOffset","assign","key","clone","stack","existing","Map","view","regexp","imageData","Ctor","call","source","exec","lastIndex","target","copyMap","add","copySet","data","width","height","isArray","copyArray","proto","getPrototypeOf","isPlainObject","keys","getOwnPropertySymbols","symbols","j","symbolKey","copyObject","equalArrayBuffer","b","viewA","viewB","equalByTag","String","size","iteratorA","entries","iteratorB","nextA","next","nextB","done","entryA","entryB","equal","equalMaps","values","equalSets","equalTypedArrays","stacked","tagA","equalArrays","keysA","keysB","prop","ctorA","ctorB","equalObjects","createClass","parent","Cls","apply","arguments","__ready","ready","fn","addEventListener","once","Config","Component","parentComponent","extends","BaseComponent","initialData","attributes","methods","events","node","type","Attribute","hook","Formatter","Formatters","formatters","Adapter","Action","action","Actions","actions","Startup","promise","truncate","limit","trimmed","trim","describeNode","segments","visited","current","nodeType","depth","has","segment","tagName","toLowerCase","id","unshift","classList","classNames","filter","Boolean","join","siblings","children","child","index","indexOf","buildComponentPath","component","path","label","AppConnectError","Error","message","options","super","details","originalError","context","captureStackTrace","captureFn","ExpressionError","expression","attribute","nodePath","componentName","componentType","componentPath","description","FormatterError","formatter","hint","normalizeContext","scope","normalized","$node","createFormatterError","normalizedContext","errors","createExpressionError","messageParts","push","originalMessage","handleExpressionError","error","lastExpressionError","_captureExpressionError","captureErr","console","warn","recordOnComponent","logExpressionErrors","throwFormatterError","fallback","onFallback","callbackError","debounce","delay","handle","cb","clearTimeout","cancelAnimationFrame","requestAnimationFrame","throttle","args","keyCodes","bs","tab","enter","esc","space","left","up","right","down","delete","backspace","pause","capslock","escape","pageup","pagedown","end","home","arrowleft","arrowup","arrowright","arrowdown","insert","numlock","scrolllock","semicolon","comma","minus","period","slash","backquote","bracketleft","backslash","bracketright","quote","numpad0","numpad1","numpad2","numpad3","numpad4","numpad5","numpad6","numpad7","numpad8","numpad9","numpadmultiply","numpadadd","numpadsubstract","numpaddivide","f1","f2","f3","f4","f5","f6","f7","f8","f9","f10","f11","f12","digit0","digit1","digit2","digit3","digit4","digit5","digit6","digit7","digit8","digit9","keya","keyb","keyc","keyd","keye","keyf","keyg","keyh","keyi","keyj","keyk","keyl","keym","keyn","keyo","keyp","keyq","keyr","keyt","keyu","keyv","keyw","keyx","keyy","keyz","eventListener","eventType","handler","modifiers","timeout","listener","event","self","currentTarget","ctrl","ctrlKey","alt","altKey","shift","shiftKey","meta","metaKey","originalEvent","nsp","includes","MouseEvent","button","parseInt","button0","button1","button2","button3","button4","KeyboardEvent","keyVal","which","stop","stopPropagation","prevent","preventDefault","$data","pageX","pageY","x","clientX","y","clientY","WheelEvent","deltaX","deltaY","deltaZ","deltaMode","PointerEvent","pointerId","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","TouchEvent","touchMap","touch","identifier","screenX","screenY","touches","map","changedTouches","targetTouches","rotation","scale","location","repeat","code","CustomEvent","detail","replace","Dom7","capture","jQuery","passive","off","removeEventListener","fileUtils","fileReader","file","readAs","reject","reader","FileReader","onload","onerror","blobToArrayBuffer","blob","blobToBinaryString","blobToDataURL","blobToBase64String","dataURL","substring","arrayBufferToBlob","arrayBuffer","Blob","binaryStringToBlob","binary","bytes","c","charCodeAt","dataURLToBlob","parseDataURL","base64StringToBlob","base64String","atob","match","mediaType","base64","split","parseMediaType","subtype","suffix","parameters","reduce","obj","param","_wr","orig","history","rv","Event","dispatchEvent","pushState","replaceState","cloneRepeatValue","buildRepeatItem","entry","l","$key","$index","$value","onpopstate","state","title","documentElement","style","visibility","all","app","root","querySelector","App","err","extend","extended","deep","merge","parseDate","struct","offset","n","Date","k","UTC","d","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","setHours","setMinutes","setSeconds","setMilliseconds","hashCode","o","str","JSON","stringify","hash","Math","abs","randomizer","seed","repeatItems","items","escapeRegExp","val","validate","elements","dirty","checkValidity","validateReset","queue","task","nextTick","postMessage","requestUpdate","protocol","is","batches","batch","prev","Signal","_","toJSON","valueOf","computedSignal","Computed","f","$","r","Reactive","peek","defaults","async","equals","outerEffect","computed","empty","dispose","FX","run","clear","Effect","m","sync","effect","splice","unique","isNew","skip","effects","signal","traversal","t","nestedEffect","signalProxy","signals","Proxy","receiver","Reflect","startsWith","ok","deleteProperty","Scope","random","del","DataScope","selector","len","addClass","className","removeClass","remove","toggleClass","toggle","hasClass","attr","attrs","getAttribute","removeAttr","props","css","getComputedStyle","getPropertyValue","setProperty","each","append","appendChild","appendTo","detach","parentNode","removeChild","innerHTML","dom","getElementById","query","elem","createElement","walk","hasChildNodes","childNodes","getAttributes","specified","test","substr","argument","part","pos","fullName","oldNode","newNode","replaceChild","_CACHE","_OPERATORS","_ESCAPE_CHARS","_EXPRESSIONS","pow","_RESERVED","$this","Infinity","__dmxScope__","_SUPPORTED_TYPES","getType","lexer","token","start","ch","ch2","ch3","tokens","op","read","isQuote","readString","isDigid","readNumber","isAlpha","readIdent","testRegexp","readRegexp","isWhitespace","chars","isAlphaNum","isExpOperator","hex","fromCharCode","exponent","BigInt","Decimal","RegExp","parse","ctx","endsWith","innerExpression","callContext","parts","parseExpression","expect","sequence","expr","doParse","consume","exp","parseLogicalAnd","parseLogicalOr","parseConditional","parseBitwiseOr","parseBitwiseXor","parseBitwiseAnd","parseEquality","parseRelational","parseBitwiseShift","parseMultiplicative","parseAddictive","parseUnary","parsePrimary","arr","parseMember","parseCall","parseIndex","func","argsFn","hasContext","argCount","bufferSize","argsBuffer","baseLength","indexFn","method","bind","listeners","__disposables","__childDisposables","updatedProps","updateRequested","isInitialized","isDestroyed","oldValue","alwaysUpdate","$initialData","$parseAttributes","init","render","$customAttributes","dmxComponent","dmxRendered","destroy","$parse","find","found","beforeUpdate","update","updated","beforeDestroy","destroyed","defaultPrevented","$createChild","$addChild","debug","$removeChild","toUpperCase","__inChild","$parseTextNode","nodeValue","host","fragment","createDocumentFragment","textNode","createTextNode","$watch","grecaptcha","renderRecaptcha","findIndex","isComponent","__WAPPLER__","$update","idents","toKebabCase","opts","attrName","hasDefault","default","Number","isFinite","enum","Function","$event","$originalEvent","performUpdate","$type","$addBinding","evaluate","phase","hasErrorsApi","ExpressionErrorCtor","FormatterErrorCtor","strict","throwErrorsEnabled","log","lastExpressionErrorAt","now","$destroy","$destroyChildren","ignoreParents","pathToRegexp","compile","tokensToFunction","tokensToRegExp","DEFAULT_DELIMITER","PATH_REGEXP","res","defaultDelimiter","delimiter","whitelist","pathEscaped","escaped","group","modifier","optional","pattern","prefix","escapeGroup","escapeString","encode","encodeURIComponent","TypeError","flags","sensitive","concat","route","endToken","isEndDelimited","groups","regexpToRegexp","arrayToRegexp","stringToRegexp","Hjson","text","at","escapee","stripMultilineIndent","content","lines","minIndent","line","indentLength","sliceIndex","min","isPunctuatorChar","col","charAt","offs","peekNonWhitespace","idx","allowML","exitCh","mlString","uffff","triple","indent","skipIndent","keyname","nextChar","foundColon","firstNonWhitespace","white","tryParseNumber","stopAtNext","leadingZeros","testLeading","errorClosingHint","search","report","possibleErr","withoutBraces","isEol","commentStart","isTerminator","trimmedWs","nextSig","chfWs","num","chf","tfnns","checkTrailing","rootValue","Flow","_execStep","output","flow","_exec","_each","curr","steps","step","timerName","time","disabled","timeEnd","load","dispatchLoad","_parseQuery","querystring","p","decodeURIComponent","base","decodeURI","pathname","novalidate","submit","direct","_submit","reset","_reset","_validate","invalid","_submitHandler","_resetHandler","noValidate","elm","_formSubmit","execute","cancelable","_focusFirstInvalid","_formReset","HTMLFormElement","validity","valid","focus","_parseJsonForm","element","parseSteps","setValue","checked","selectedOptions","opt","org","re","reNumeric","p1","last","nextType","focused","validationMessage","_setValue","_focus","disable","_disable","changed","_inputHandler","_changeHandler","_invalidHandler","_focusHandler","_blurHandler","defaultValue","_form","activeElement","imageMaxWidth","imageMaxHeight","imageType","imageQuality","_imageTypes","png","jpeg","webp","_imageExtensions","_updateData","files","_resizeImage","blobUrl","URL","createObjectURL","img","Image","src","revokeObjectURL","ratio","needResize","newType","canvas","getContext","drawImage","toBlob","container","DataTransfer","newName","newFile","File","date","lastModified","lastModifiedDate","toISOString","dataUrl","_dataUrl","_resizeImages","loading","check","triggerEvent","_select","unchecked","defaultChecked","bubbles","radios","_mutationObserver","MutationObserver","mutationList","mutation","attributeName","_updateValue","addedNodes","ELEMENT_NODE","checkbox","observe","subtree","childList","attributeFilter","disconnect","_radios","radio","_checkboxes","selectedIndex","selectedValue","selectedText","optiontext","optionvalue","setSelectedIndex","_options","_updatingOptions","_renderOptions","option","selected","defaultSelected","textContent","_getValue","keyOrValue","maybeValue","baseValue","rerender","prevItems","childKeys","$template","firstChild","_rerender","_clear","RepeatItem","nextPos","_clone","aStart","bStart","aEnd","bEnd","outer","_moveChild","_insertChild","_removeChild","aLength","bLength","aNullable","sources","fill","moved","synced","keyIndex","seq","_lis","toRemove","toParse","cloneNode","$nodes","u","il","toDestroy","insertBefore","status","links","paging","headers","executing","uploading","processing","downloading","uploadProgress","position","percent","total","downloadProgress","lastError","response","url","params","dataType","noload","cache","ttl","credentials","abort","_abort","reload","_fetch","_resetData","unauthorized","forbidden","ratelimit","success","upload","ProgressEvent","download","_statusEvents","_loadHandler","_abortHandler","_errorHandler","_timeoutHandler","_downloadProgressHandler","_progressHandler","_uploadProgressHandler","_xhr","XMLHttpRequest","clearData","qs","_url","WebviewProxy","convertProxyUrl","created","FormData","open","setRequestHeader","header","withCredentials","serverconnect","csrf_token","send","_done","responseText","_parseHeaders","statusText","arrHeaders","getAllResponseHeaders","_parseLinkHeaders","linkHeader","rawLinks","hadParseIssue","linkMap","link","linkUrl","href","acc","chunk","info","attrMatch","attrValue","merged","rel","_parsePaging","page","pages","first","countHeader","lengthComputable","ceil","loaded","sockets","Socket","_refresh","_event","_socket","on","connected","emit","autosubmit","postData","_extendNode","watchValue","dmxExtraData","dmxExtraElements","_send","setMessage","errorDetail","condition","show","hide","_shown","_template","_show","_hide","template","datetime","interval","utc","_tick","_timeout","_animationFrame","_datetime","pad","year","getUTCFullYear","getFullYear","month","getUTCMonth","getMonth","day","getUTCDate","getDate","hours","getUTCHours","getHours","minutes","getUTCMinutes","getMinutes","seconds","getUTCSeconds","getSeconds","dateString","tz","count","newItem","_splice","_count","addUniq","_indexOf","insertAfter","replaceAt","removeAt","otherArray","concatUniq","otherArr","flatten","flattened","flat","flattenUniq","uniq","reverse","_reverse","sort","sortBy","direction","_sort","randomize","_randomize","hasSortBy","isDescending","comparator","_createComparator","rng","floor","temp","getter","_buildGetter","valueA","valueB","_compareValues","_resolvePath","running","preload","autorun","throwError","propagate","_run","runSub","_runSub","_flow","_load","_parse","_destroyed","fetch","_runFlow","$param","uncheck","_formdataHandler","formData","_appendData","isToggle","nodeName","dmxOn","startNode","createComment","endNode","fast","dmxClass","dmxHide","initial","display","priority","getPropertyPriority","dmxShow","dmxHtml","html","dmxText","dmxStyle","important","json","subflow","comment","wait","numeric","lower","upper","floating","rnd","round","triggerDownload","filename","body","click","confirm","else","prompt","alert","parentScope","parentOutput","$name","$number","$oddeven","outputFields","field","if","conditions","when","cases","loop","case","tryCatch","try","runJS","function","setGlobal","setSession","sessionStorage","setItem","getSession","getItem","removeSession","removeItem","setStorage","localStorage","getStorage","removeStorage","xhr","onabort","ontimeout","collection","overwrite","row","column","columns","keep","newRow","rename","toFill","rows","startAt","desc","collection1","collection2","matchAll","l2","row2","hasMatch","groupEnd"],"mappings":"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","file":"dmxAppConnect.js","sourcesContent":["window.dmx = {\r\n // Versions\r\n version: '2.2.4',\r\n versions: {},\r\n\r\n // Configuration Options\r\n config: {\r\n throwErrors: false,\r\n mapping: {\r\n 'form': 'form',\r\n 'button, input[type=button], input[type=submit], input[type=reset]': 'button',\r\n 'input[type=radio]': 'radio',\r\n 'input[type=checkbox]': 'checkbox',\r\n 'input[type=file][multiple]': 'input-file-multiple',\r\n 'input[type=file]': 'input-file',\r\n 'input': 'input',\r\n 'textarea': 'textarea',\r\n 'select[multiple]': 'select-multiple',\r\n 'select': 'select',\r\n '.checkbox-group': 'checkbox-group',\r\n '.radio-group': 'radio-group'\r\n },\r\n },\r\n\r\n noop: () => {},\r\n isset: (v) => v !== undefined,\r\n array: (a) => a != null ? Array.from(a) : [],\r\n\r\n // Global Regexp\r\n reIgnoreElement: /^(script|style)$/i,\r\n rePrefixed: /^dmx-/i,\r\n reExpression: /\\{\\{(.+?)\\}\\}/,\r\n reExpressionReplace: /\\{\\{(.+?)\\}\\}/g,\r\n reToggleAttribute: /^(checked|selected|disabled|required|hidden|async|autofocus|autoplay|default|defer|multiple|muted|novalidate|open|readonly|reversed|scoped)$/i,\r\n reDashAlpha: /-([a-z])/g,\r\n reUppercase: /[A-Z]/g,\r\n\r\n // Internal collections for registering components etc.\r\n __components: Object.create(null),\r\n __attributes: {\r\n before: Object.create(null),\r\n mounted: Object.create(null),\r\n },\r\n __formatters: {\r\n boolean: Object.create(null),\r\n global: Object.create(null),\r\n string: Object.create(null),\r\n number: Object.create(null),\r\n object: Object.create(null),\r\n array: Object.create(null),\r\n any: Object.create(null),\r\n },\r\n __adapters: Object.create(null),\r\n __actions: Object.create(null),\r\n __startup: new Set(),\r\n};\r\n","// Polyfills for older browsers\r\n// IE is not supported\r\n\r\n// https://caniuse.com/element-closest\r\nif (window.Element && !('closest' in Element.prototype)) {\r\n Element.prototype.closest = function (s) {\r\n let matches = (this.document || this.ownerDocument).querySelectorAll(s),\r\n i,\r\n el = this;\r\n do {\r\n i = matches.length;\r\n while (--i >= 0 && matches.item(i) !== el) {};\r\n } while ((i < 0) && (el = el.parentElement));\r\n return el;\r\n };\r\n}\r\n\r\n// https://caniuse.com/mdn-api_nodelist_foreach\r\nif (window.NodeList && !('forEach' in NodeList.prototype)) {\r\n NodeList.prototype.forEach = Array.prototype.forEach;\r\n}\r\n\r\n// https://caniuse.com/mdn-api_queuemicrotask\r\nif (typeof window.queueMicrotask !== 'function') {\r\n window.queueMicrotask = function (callback) {\r\n Promise.resolve().then(callback).catch(e => setTimeout(() => { throw e }));\r\n }\r\n}\r\n\r\n// https://caniuse.com/mdn-api_node_isconnected\r\nif (window.Node && !('isConnected' in Node.prototype)) {\r\n Object.defineProperty(Node.prototype, 'isConnected', {\r\n get: function () { return document.contains(this) }\r\n });\r\n}\r\n\r\n// https://caniuse.com/mdn-api_element_toggleattribute\r\nif (window.Element && !('toggleAttribute' in Element.prototype)) {\r\n Element.prototype.toggleAttribute = function (name, force) {\r\n if (this.hasAttribute(name)) {\r\n if (force !== true) this.removeAttribute(name);\r\n } else {\r\n if (force !== false) this.setAttribute(name, '');\r\n }\r\n }\r\n}","(function() {\r\n\r\n var toString = Object.prototype.toString;\r\n var hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\n var arrayBufferTag = '[object ArrayBuffer]';\r\n var booleanTag = '[object Boolean]';\r\n var dateTag = '[object Date]';\r\n var dataViewTag = '[object DataView]';\r\n var mapTag = '[object Map]';\r\n var numberTag = '[object Number]';\r\n var objectTag = '[object Object]';\r\n var regexpTag = '[object RegExp]';\r\n var setTag = '[object Set]';\r\n var stringTag = '[object String]';\r\n var imageDataTag = '[object ImageData]';\r\n\r\n var typedArrayTags = Object.create(null);\r\n [\r\n '[object Float32Array]',\r\n '[object Float64Array]',\r\n '[object Int8Array]',\r\n '[object Int16Array]',\r\n '[object Int32Array]',\r\n '[object Uint8Array]',\r\n '[object Uint8ClampedArray]',\r\n '[object Uint16Array]',\r\n '[object Uint32Array]',\r\n '[object BigInt64Array]',\r\n '[object BigUint64Array]'\r\n ].forEach(function(tag) {\r\n typedArrayTags[tag] = true;\r\n });\r\n\r\n var reFlags = /\\w*$/;\r\n\r\n function isObject(value) {\r\n return value !== null && typeof value === 'object';\r\n }\r\n\r\n function isPlainObject(value) {\r\n if (!isObject(value)) return false;\r\n var proto = Object.getPrototypeOf(value);\r\n return proto === Object.prototype || proto === null;\r\n }\r\n\r\n function cloneArrayBuffer(buffer) {\r\n if (typeof buffer.slice === 'function') {\r\n return buffer.slice(0);\r\n }\r\n var result = new buffer.constructor(buffer.byteLength);\r\n new Uint8Array(result).set(new Uint8Array(buffer));\r\n return result;\r\n }\r\n\r\n function cloneTypedArray(array) {\r\n var buffer = cloneArrayBuffer(array.buffer);\r\n return new array.constructor(buffer, array.byteOffset, array.length);\r\n }\r\n\r\n function cloneDataView(view) {\r\n return new view.constructor(cloneArrayBuffer(view.buffer), view.byteOffset, view.byteLength);\r\n }\r\n\r\n function cloneRegExp(regexp) {\r\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\r\n result.lastIndex = regexp.lastIndex;\r\n return result;\r\n }\r\n\r\n function cloneImageData(imageData) {\r\n var Ctor = imageData.constructor;\r\n return typeof Ctor === 'function' ? new Ctor(cloneTypedArray(imageData.data), imageData.width, imageData.height) : imageData;\r\n }\r\n\r\n function assign(result, key, value) {\r\n if (key === '__proto__') return;\r\n result[key] = value;\r\n }\r\n\r\n function copyObject(source, stack) {\r\n var target = {};\r\n stack.set(source, target);\r\n\r\n var keys = Object.keys(source);\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n assign(target, key, clone(source[key], stack));\r\n }\r\n\r\n if (Object.getOwnPropertySymbols) {\r\n var symbols = Object.getOwnPropertySymbols(source);\r\n for (var j = 0; j < symbols.length; j++) {\r\n var symbolKey = symbols[j];\r\n if (hasOwnProperty.call(source, symbolKey)) {\r\n target[symbolKey] = clone(source[symbolKey], stack);\r\n }\r\n }\r\n }\r\n\r\n return target;\r\n }\r\n\r\n function copyArray(source, stack) {\r\n var length = source.length;\r\n var target = new Array(length);\r\n stack.set(source, target);\r\n\r\n for (var i = 0; i < length; i++) {\r\n target[i] = clone(source[i], stack);\r\n }\r\n\r\n return target;\r\n }\r\n\r\n function copyMap(source, stack) {\r\n var target = new Map();\r\n stack.set(source, target);\r\n source.forEach(function(value, key) {\r\n target.set(key, clone(value, stack));\r\n });\r\n return target;\r\n }\r\n\r\n function copySet(source, stack) {\r\n var target = new Set();\r\n stack.set(source, target);\r\n source.forEach(function(value) {\r\n target.add(clone(value, stack));\r\n });\r\n return target;\r\n }\r\n\r\n function clone(value, stack) {\r\n if (!isObject(value)) {\r\n return value;\r\n }\r\n\r\n if (!stack) {\r\n stack = new Map();\r\n } else {\r\n var existing = stack.get(value);\r\n if (existing) {\r\n return existing;\r\n }\r\n }\r\n\r\n var tag = toString.call(value);\r\n\r\n if (tag === dataViewTag) {\r\n return cloneDataView(value);\r\n }\r\n\r\n if (tag === arrayBufferTag) {\r\n return cloneArrayBuffer(value);\r\n }\r\n\r\n if (tag === dateTag || tag === booleanTag) {\r\n return new value.constructor(+value);\r\n }\r\n\r\n if (tag === numberTag || tag === stringTag) {\r\n return new value.constructor(value);\r\n }\r\n\r\n if (tag === regexpTag) {\r\n return cloneRegExp(value);\r\n }\r\n\r\n if (tag === mapTag) {\r\n return copyMap(value, stack);\r\n }\r\n\r\n if (tag === setTag) {\r\n return copySet(value, stack);\r\n }\r\n\r\n if (tag === imageDataTag) {\r\n return cloneImageData(value);\r\n }\r\n\r\n if (typedArrayTags[tag]) {\r\n return cloneTypedArray(value);\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return copyArray(value, stack);\r\n }\r\n\r\n if (isPlainObject(value)) {\r\n return copyObject(value, stack);\r\n }\r\n\r\n stack.set(value, value);\r\n return value;\r\n }\r\n\r\n dmx.clone = clone;\r\n\r\n})();","(function() {\r\n\r\n var hasOwnProperty = Object.prototype.hasOwnProperty;\r\n var toString = Object.prototype.toString;\r\n\r\n var arrayBufferTag = '[object ArrayBuffer]';\r\n var booleanTag = '[object Boolean]';\r\n var dateTag = '[object Date]';\r\n var dataViewTag = '[object DataView]';\r\n var mapTag = '[object Map]';\r\n var numberTag = '[object Number]';\r\n var regexpTag = '[object RegExp]';\r\n var setTag = '[object Set]';\r\n var stringTag = '[object String]';\r\n\r\n var typedArrayTags = Object.create(null);\r\n [\r\n '[object Float32Array]',\r\n '[object Float64Array]',\r\n '[object Int8Array]',\r\n '[object Int16Array]',\r\n '[object Int32Array]',\r\n '[object Uint8Array]',\r\n '[object Uint8ClampedArray]',\r\n '[object Uint16Array]',\r\n '[object Uint32Array]',\r\n '[object BigInt64Array]',\r\n '[object BigUint64Array]'\r\n ].forEach(function(tag) {\r\n typedArrayTags[tag] = true;\r\n });\r\n\r\n function isObject(value) {\r\n return value !== null && typeof value === 'object';\r\n }\r\n\r\n function isTypedArray(value) {\r\n return typedArrayTags[toString.call(value)] === true;\r\n }\r\n\r\n function equalArrayBuffer(a, b) {\r\n if (a.byteLength !== b.byteLength) {\r\n return false;\r\n }\r\n var viewA = new Uint8Array(a);\r\n var viewB = new Uint8Array(b);\r\n for (var i = 0; i < viewA.length; i++) {\r\n if (viewA[i] !== viewB[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n function equalTypedArrays(a, b) {\r\n if (a.length !== b.length) {\r\n return false;\r\n }\r\n for (var i = 0; i < a.length; i++) {\r\n if (a[i] !== b[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n function equalArrays(a, b, stack) {\r\n if (a.length !== b.length) {\r\n return false;\r\n }\r\n for (var i = 0; i < a.length; i++) {\r\n if (!equal(a[i], b[i], stack)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n function equalObjects(a, b, stack) {\r\n var keysA = Object.keys(a);\r\n var keysB = Object.keys(b);\r\n if (keysA.length !== keysB.length) {\r\n return false;\r\n }\r\n\r\n for (var i = 0; i < keysA.length; i++) {\r\n var key = keysA[i];\r\n if (!hasOwnProperty.call(b, key)) {\r\n return false;\r\n }\r\n }\r\n\r\n for (var j = 0; j < keysA.length; j++) {\r\n var prop = keysA[j];\r\n if (!equal(a[prop], b[prop], stack)) {\r\n return false;\r\n }\r\n }\r\n\r\n var ctorA = a.constructor;\r\n var ctorB = b.constructor;\r\n if (ctorA !== ctorB && 'constructor' in a && 'constructor' in b) {\r\n if (!(typeof ctorA === 'function' && ctorA instanceof ctorA && typeof ctorB === 'function' && ctorB instanceof ctorB)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function equalMaps(a, b, stack) {\r\n if (a.size !== b.size) {\r\n return false;\r\n }\r\n\r\n var iteratorA = a.entries();\r\n var iteratorB = b.entries();\r\n while (true) {\r\n var nextA = iteratorA.next();\r\n var nextB = iteratorB.next();\r\n if (nextA.done && nextB.done) {\r\n return true;\r\n }\r\n if (nextA.done !== nextB.done) {\r\n return false;\r\n }\r\n var entryA = nextA.value;\r\n var entryB = nextB.value;\r\n if (!equal(entryA[0], entryB[0], stack) || !equal(entryA[1], entryB[1], stack)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n function equalSets(a, b, stack) {\r\n if (a.size !== b.size) {\r\n return false;\r\n }\r\n\r\n var iteratorA = a.values();\r\n var iteratorB = b.values();\r\n while (true) {\r\n var nextA = iteratorA.next();\r\n var nextB = iteratorB.next();\r\n if (nextA.done && nextB.done) {\r\n return true;\r\n }\r\n if (nextA.done !== nextB.done) {\r\n return false;\r\n }\r\n if (!equal(nextA.value, nextB.value, stack)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n function equalByTag(a, b, tag, stack) {\r\n switch (tag) {\r\n case dataViewTag:\r\n if (a.byteLength !== b.byteLength || a.byteOffset !== b.byteOffset) {\r\n return false;\r\n }\r\n return equalArrayBuffer(a.buffer, b.buffer);\r\n\r\n case arrayBufferTag:\r\n return equalArrayBuffer(a, b);\r\n\r\n case booleanTag:\r\n case dateTag:\r\n case numberTag:\r\n return +a === +b || (a != a && b != b);\r\n\r\n case regexpTag:\r\n case stringTag:\r\n return String(a) === String(b);\r\n\r\n case mapTag:\r\n return equalMaps(a, b, stack);\r\n\r\n case setTag:\r\n return equalSets(a, b, stack);\r\n }\r\n\r\n if (typedArrayTags[tag]) {\r\n return equalTypedArrays(a, b);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function equal(a, b, stack) {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (a == null || b == null) {\r\n return a != a && b != b;\r\n }\r\n\r\n if (!isObject(a) || !isObject(b)) {\r\n return a != a && b != b;\r\n }\r\n\r\n stack = stack || new Map();\r\n\r\n var stacked = stack.get(a);\r\n if (stacked && stacked === b) {\r\n return true;\r\n }\r\n stack.set(a, b);\r\n stack.set(b, a);\r\n\r\n var tagA = toString.call(a);\r\n var tagB = toString.call(b);\r\n\r\n if (tagA !== tagB) {\r\n return false;\r\n }\r\n\r\n if (tagA === '[object Array]') {\r\n return equalArrays(a, b, stack);\r\n }\r\n\r\n if (tagA === '[object Object]') {\r\n return equalObjects(a, b, stack);\r\n }\r\n\r\n return equalByTag(a, b, tagA, stack);\r\n }\r\n\r\n dmx.equal = equal;\r\n\r\n})();","// Create Class\r\ndmx.createClass = (proto, parent) => {\r\n const Cls = function () {\r\n if (proto.constructor) {\r\n proto.constructor.apply(this, arguments);\r\n }\r\n };\r\n\r\n if (parent && parent.prototype) {\r\n Cls.prototype = Object.create(parent.prototype);\r\n }\r\n\r\n Object.assign(Cls.prototype, proto);\r\n\r\n Cls.prototype.constructor = Cls;\r\n\r\n return Cls;\r\n};\r\n\r\ndmx.__ready = false;\r\ndmx.ready = (fn) => {\r\n if (dmx.__ready) {\r\n fn();\r\n return;\r\n }\r\n\r\n document.addEventListener('DOMContentLoaded', () => {\r\n dmx.__ready = true;\r\n fn();\r\n }, { once: true });\r\n};\r\n\r\n// Config\r\ndmx.Config = (config) => {\r\n Object.assign(dmx.config, config)\r\n};\r\n\r\n// Create/get component\r\ndmx.Component = (name, proto) => {\r\n if (proto) {\r\n const parentComponent = proto.extends ? dmx.Component(proto.extends) : dmx.BaseComponent;\r\n\r\n if (typeof proto.initialData != 'function') {\r\n proto.initialData = Object.assign({}, parentComponent.prototype.initialData, proto.initialData);\r\n }\r\n proto.attributes = Object.assign({}, parentComponent.prototype.attributes, proto.attributes);\r\n proto.methods = Object.assign({}, parentComponent.prototype.methods, proto.methods);\r\n proto.events = Object.assign({}, parentComponent.prototype.events, proto.events);\r\n\r\n if (!proto.hasOwnProperty('constructor')) {\r\n proto.constructor = function(node, parent) {\r\n parentComponent.call(this, node, parent);\r\n }\r\n }\r\n\r\n proto.type = name;\r\n\r\n const Component = dmx.createClass(proto, parentComponent);\r\n Component.extends = proto.extends;\r\n\r\n dmx.__components[name] = Component;\r\n }\r\n\r\n return dmx.__components[name];\r\n};\r\n\r\n// Create attribute\r\ndmx.Attribute = (name, hook, fn) => {\r\n if (!dmx.__attributes[hook]) {\r\n dmx.__attributes[hook] = Object.create(null);\r\n }\r\n dmx.__attributes[hook][name] = fn;\r\n};\r\n\r\n// Create/get formatter(s)\r\ndmx.Formatter = (type, name, fn) => {\r\n dmx.__formatters[type][name] = fn;\r\n}\r\ndmx.Formatters = (type, formatters) => {\r\n for (const name in formatters) {\r\n dmx.Formatter(type, name, formatters[name]);\r\n }\r\n};\r\n\r\n// Create/get adapter\r\ndmx.Adapter = (type, name, fn) => {\r\n if (!dmx.__adapters[type]) {\r\n dmx.__adapters[type] = Object.create(null);\r\n }\r\n if (fn) dmx.__adapters[type][name] = fn;\r\n return dmx.__adapters[type][name];\r\n};\r\n\r\n// Create action(s)\r\ndmx.Action = (name, action) => {\r\n dmx.__actions[name] = action;\r\n};\r\ndmx.Actions = (actions) => {\r\n for (const name in actions) {\r\n dmx.Action(name, actions[name]);\r\n }\r\n};\r\n\r\n// Startup\r\ndmx.Startup = (promise) => {\r\n dmx.__startup.add(promise)\r\n};","(() => {\r\n const MAX_EXPRESSION_PREVIEW = 160;\r\n const ELEMENT_NODE = 1;\r\n const TEXT_NODE = 3;\r\n\r\n function truncate(value, limit = MAX_EXPRESSION_PREVIEW) {\r\n if (typeof value !== 'string') {\r\n return value;\r\n }\r\n\r\n const trimmed = value.trim();\r\n return trimmed.length > limit ? trimmed.slice(0, limit - 3) + '...' : trimmed;\r\n }\r\n\r\n function describeNode(node) {\r\n if (!node || !node.ownerDocument) {\r\n return null;\r\n }\r\n\r\n const segments = [];\r\n const visited = new Set();\r\n const depthLimit = 10;\r\n let current = node.nodeType === ELEMENT_NODE ? node : node.parentElement;\r\n let depth = 0;\r\n\r\n while (current && current.nodeType === ELEMENT_NODE && depth < depthLimit) {\r\n if (visited.has(current)) {\r\n break;\r\n }\r\n\r\n visited.add(current);\r\n\r\n let segment = current.tagName ? current.tagName.toLowerCase() : 'unknown';\r\n\r\n if (current.id) {\r\n segment += `#${current.id}`;\r\n segments.unshift(segment);\r\n break;\r\n }\r\n\r\n if (current.classList && current.classList.length) {\r\n const classNames = Array.from(current.classList)\r\n .filter(Boolean)\r\n .slice(0, 2)\r\n .join('.');\r\n if (classNames) {\r\n segment += `.${classNames}`;\r\n }\r\n }\r\n\r\n const parent = current.parentElement;\r\n if (parent) {\r\n const siblings = Array.from(parent.children).filter(child => child.tagName === current.tagName);\r\n if (siblings.length > 1) {\r\n const index = siblings.indexOf(current);\r\n if (index >= 0) {\r\n segment += `:nth-of-type(${index + 1})`;\r\n }\r\n }\r\n }\r\n\r\n segments.unshift(segment);\r\n current = parent;\r\n depth++;\r\n }\r\n\r\n if (segments.length === 0) {\r\n return null;\r\n }\r\n\r\n if (node.nodeType === TEXT_NODE && segments.length) {\r\n segments[segments.length - 1] += '::text';\r\n }\r\n\r\n return segments.join(' > ');\r\n }\r\n\r\n function buildComponentPath(component) {\r\n if (!component) return null;\r\n\r\n const path = [];\r\n let current = component;\r\n let depth = 0;\r\n const limit = 10;\r\n\r\n while (current && depth < limit) {\r\n const label = current.name || current.type || (current.constructor && current.constructor.name) || 'component';\r\n path.unshift(label);\r\n current = current.parent;\r\n depth++;\r\n }\r\n\r\n return path.length ? path : null;\r\n }\r\n\r\n class AppConnectError extends Error {\r\n constructor(message, options = {}) {\r\n super(message);\r\n this.name = options.name || 'AppConnectError';\r\n this.details = options.details || {};\r\n this.originalError = options.originalError || null;\r\n this.component = options.component || null;\r\n this.context = options.context || null;\r\n\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, options.captureFn || this.constructor);\r\n }\r\n }\r\n }\r\n\r\n class ExpressionError extends AppConnectError {\r\n constructor(options) {\r\n super(options.message, {\r\n name: 'ExpressionError',\r\n details: {\r\n expression: options.expression,\r\n attribute: options.attribute,\r\n nodePath: options.nodePath,\r\n componentName: options.componentName,\r\n componentType: options.componentType,\r\n componentPath: options.componentPath,\r\n description: options.description,\r\n },\r\n originalError: options.originalError,\r\n component: options.component,\r\n context: options.context,\r\n captureFn: ExpressionError,\r\n });\r\n\r\n this.expression = options.expression;\r\n this.attribute = options.attribute;\r\n this.nodePath = options.nodePath;\r\n this.componentName = options.componentName;\r\n this.componentType = options.componentType;\r\n this.componentPath = options.componentPath;\r\n }\r\n }\r\n\r\n class FormatterError extends AppConnectError {\r\n constructor(options) {\r\n super(options.message, {\r\n name: 'FormatterError',\r\n details: {\r\n formatter: options.formatter,\r\n value: options.value,\r\n hint: options.hint,\r\n },\r\n originalError: options.originalError,\r\n context: options.context,\r\n captureFn: FormatterError,\r\n });\r\n\r\n this.formatter = options.formatter;\r\n this.value = options.value;\r\n this.hint = options.hint;\r\n }\r\n }\r\n\r\n function normalizeContext(scope, context = {}) {\r\n const normalized = Object.assign({}, context);\r\n\r\n if (!normalized.component && scope && scope.$node) {\r\n normalized.component = scope;\r\n }\r\n\r\n if (normalized.expression == null && typeof context.expression === 'string') {\r\n normalized.expression = context.expression;\r\n }\r\n\r\n return normalized;\r\n }\r\n\r\n function createExpressionError({ expression, scope, context = {}, originalError }) {\r\n const normalizedContext = normalizeContext(scope, context);\r\n const component = normalizedContext.component || null;\r\n const node = normalizedContext.node || (component && component.$node) || null;\r\n\r\n const messageParts = ['Expression error'];\r\n const componentName = component && component.name ? component.name : null;\r\n const componentType = component && component.type ? component.type : (component && component.constructor && component.constructor.name) || null;\r\n\r\n if (componentName) {\r\n messageParts.push(`in component \"${componentName}\"`);\r\n } else if (componentType) {\r\n messageParts.push(`in component <${componentType}>`);\r\n }\r\n\r\n if (normalizedContext.attribute) {\r\n messageParts.push(`for ${normalizedContext.attribute}`);\r\n }\r\n\r\n const nodePath = describeNode(node);\r\n if (nodePath) {\r\n messageParts.push(`at ${nodePath}`);\r\n }\r\n\r\n const originalMessage = originalError && originalError.message ? originalError.message : null;\r\n const message = originalMessage ? `${messageParts.join(' ')}: ${originalMessage}` : messageParts.join(' ');\r\n\r\n return new ExpressionError({\r\n message,\r\n expression: truncate(expression),\r\n attribute: normalizedContext.attribute || null,\r\n nodePath,\r\n componentName,\r\n componentType,\r\n componentPath: buildComponentPath(component),\r\n description: normalizedContext.description,\r\n originalError,\r\n component,\r\n context: normalizedContext,\r\n });\r\n }\r\n\r\n function createFormatterError({ formatter, message, value, hint, originalError, context = {} }) {\r\n const normalizedContext = normalizeContext(null, context);\r\n\r\n return new FormatterError({\r\n message,\r\n formatter,\r\n value,\r\n hint,\r\n originalError,\r\n context: normalizedContext,\r\n });\r\n }\r\n\r\n function throwFormatterError({ formatter, message, value, hint, fallback, originalError, context, onFallback }) {\r\n if (!(dmx && dmx.config)) {\r\n // No config available, behave like throw disabled and return fallback\r\n if (typeof onFallback === 'function') {\r\n try {\r\n onFallback();\r\n } catch (callbackError) {\r\n if (console && console.warn) {\r\n console.warn('Formatter fallback handler failed', callbackError);\r\n }\r\n }\r\n }\r\n return fallback;\r\n }\r\n\r\n const error = createFormatterError({\r\n formatter,\r\n message,\r\n value,\r\n hint,\r\n originalError,\r\n context,\r\n });\r\n\r\n if (dmx.config && dmx.config.throwErrors) {\r\n throw error;\r\n }\r\n\r\n if (typeof onFallback === 'function') {\r\n try {\r\n onFallback(error);\r\n } catch (callbackError) {\r\n if (console && console.warn) {\r\n console.warn('Formatter fallback handler failed', callbackError);\r\n }\r\n }\r\n }\r\n\r\n return fallback;\r\n }\r\n\r\n function recordOnComponent(error) {\r\n const component = error.component;\r\n\r\n if (!component) return;\r\n\r\n component.lastExpressionError = error;\r\n\r\n if (typeof component._captureExpressionError === 'function') {\r\n try {\r\n component._captureExpressionError(error);\r\n } catch (captureErr) {\r\n if (dmx.config && dmx.config.throwErrors) {\r\n throw captureErr;\r\n }\r\n if (console && console.warn) {\r\n console.warn('Error capturing expression error on component', captureErr);\r\n }\r\n }\r\n }\r\n }\r\n\r\n function handleExpressionError(error) {\r\n recordOnComponent(error);\r\n\r\n if (dmx.config && dmx.config.throwErrors) {\r\n throw error;\r\n }\r\n\r\n const shouldLogExpressionError = !(\r\n dmx &&\r\n dmx.config &&\r\n dmx.config.logExpressionErrors === false\r\n );\r\n\r\n if (shouldLogExpressionError && console && console.error) {\r\n if (error.details) {\r\n console.error(error.message, error.details, error.originalError || error);\r\n } else {\r\n console.error(error);\r\n }\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n dmx.errors = {\r\n AppConnectError,\r\n ExpressionError,\r\n describeNode,\r\n createExpressionError,\r\n handleExpressionError,\r\n FormatterError,\r\n createFormatterError,\r\n throwFormatterError,\r\n };\r\n})();\r\n","dmx.debounce = (fn, delay) => {\r\n let handle;\r\n\r\n return function () {\r\n const cb = () => {\r\n fn.apply(this, arguments);\r\n };\r\n\r\n if (delay) {\r\n clearTimeout(handle);\r\n handle = setTimeout(cb, delay);\r\n } else {\r\n cancelAnimationFrame(handle);\r\n handle = requestAnimationFrame(cb);\r\n }\r\n };\r\n};\r\n\r\ndmx.throttle = (fn, delay) => {\r\n let throttle = false,\r\n args;\r\n\r\n return function () {\r\n args = Array.from(arguments);\r\n\r\n if (!throttle) {\r\n const cb = () => {\r\n throttle = false;\r\n if (args) fn.apply(this, args);\r\n };\r\n\r\n fn.apply(this, args);\r\n\r\n args = undefined;\r\n throttle = true;\r\n\r\n if (delay) {\r\n setTimeout(cb, delay);\r\n } else {\r\n requestAnimationFrame(cb);\r\n }\r\n }\r\n };\r\n};\r\n\r\ndmx.keyCodes = {\r\n bs: 8,\r\n tab: 9,\r\n enter: 13,\r\n esc: 27,\r\n space: 32,\r\n left: 37,\r\n up: 38,\r\n right: 39,\r\n down: 40,\r\n delete: 46,\r\n\r\n backspace: 8,\r\n pause: 19,\r\n capslock: 20,\r\n escape: 27,\r\n pageup: 33,\r\n pagedown: 34,\r\n end: 35,\r\n home: 36,\r\n arrowleft: 37,\r\n arrowup: 38,\r\n arrowright: 39,\r\n arrowdown: 40,\r\n insert: 45,\r\n numlock: 144,\r\n scrolllock: 145,\r\n semicolon: 186,\r\n equal: 187,\r\n comma: 188,\r\n minus: 189,\r\n period: 190,\r\n slash: 191,\r\n backquote: 192,\r\n bracketleft: 219,\r\n backslash: 220,\r\n bracketright: 221,\r\n quote: 222,\r\n\r\n numpad0: 96,\r\n numpad1: 97,\r\n numpad2: 98,\r\n numpad3: 99,\r\n numpad4: 100,\r\n numpad5: 101,\r\n numpad6: 102,\r\n numpad7: 103,\r\n numpad8: 104,\r\n numpad9: 105,\r\n numpadmultiply: 106,\r\n numpadadd: 107,\r\n numpadsubstract: 109,\r\n numpaddivide: 111,\r\n\r\n f1: 112,\r\n f2: 113,\r\n f3: 114,\r\n f4: 115,\r\n f5: 116,\r\n f6: 117,\r\n f7: 118,\r\n f8: 119,\r\n f9: 120,\r\n f10: 121,\r\n f11: 122,\r\n f12: 123,\r\n\r\n digit0: 48,\r\n digit1: 49,\r\n digit2: 50,\r\n digit3: 51,\r\n digit4: 52,\r\n digit5: 53,\r\n digit6: 54,\r\n digit7: 55,\r\n digit8: 56,\r\n digit9: 57,\r\n\r\n keya: [65, 97],\r\n keyb: [66, 98],\r\n keyc: [67, 99],\r\n keyd: [68, 100],\r\n keye: [69, 101],\r\n keyf: [70, 102],\r\n keyg: [71, 103],\r\n keyh: [72, 104],\r\n keyi: [73, 105],\r\n keyj: [74, 106],\r\n keyk: [75, 107],\r\n keyl: [76, 108],\r\n keym: [77, 109],\r\n keyn: [78, 110],\r\n keyo: [79, 111],\r\n keyp: [80, 112],\r\n keyq: [81, 113],\r\n keyr: [82, 114],\r\n keys: [83, 115],\r\n keyt: [84, 116],\r\n keyu: [85, 117],\r\n keyv: [86, 118],\r\n keyw: [87, 119],\r\n keyx: [88, 120],\r\n keyy: [89, 121],\r\n keyz: [90, 122],\r\n};\r\n\r\ndmx.eventListener = function (target, eventType, handler, modifiers) {\r\n let timeout, throttle;\r\n\r\n const listener = function (event) {\r\n if (modifiers.self && event.target !== event.currentTarget) return;\r\n if (modifiers.ctrl && !event.ctrlKey) return;\r\n if (modifiers.alt && !event.altKey) return;\r\n if (modifiers.shift && !event.shiftKey) return;\r\n if (modifiers.meta && !event.metaKey) return;\r\n\r\n if ((event.originalEvent || event).nsp && !Object.keys(modifiers).includes((event.originalEvent || event).nsp)) {\r\n return;\r\n }\r\n\r\n if ((event.originalEvent || event) instanceof MouseEvent) {\r\n if (modifiers.button != null && event.button != (parseInt(modifiers.button, 10) || 0)) return;\r\n if (modifiers.button0 && event.button != 0) return;\r\n if (modifiers.button1 && event.button != 1) return;\r\n if (modifiers.button2 && event.button != 2) return;\r\n if (modifiers.button3 && event.button != 3) return;\r\n if (modifiers.button4 && event.button != 4) return;\r\n }\r\n\r\n if ((event.originalEvent || event) instanceof KeyboardEvent) {\r\n var keys = [];\r\n\r\n Object.keys(modifiers).forEach(function (key) {\r\n var keyVal = parseInt(key, 10);\r\n\r\n if (keyVal) {\r\n keys.push(keyVal);\r\n } else if (dmx.keyCodes[key]) {\r\n keys.push(dmx.keyCodes[key]);\r\n }\r\n });\r\n\r\n for (var i = 0; i < keys.length; i++) {\r\n if (Array.isArray(keys[i])) {\r\n if (!keys[i].includes(event.which)) return;\r\n } else if (event.which !== keys[i]) return;\r\n }\r\n }\r\n\r\n if (modifiers.stop) event.stopPropagation();\r\n if (modifiers.prevent) event.preventDefault();\r\n\r\n if (event.originalEvent) event = event.originalEvent;\r\n\r\n if (!event.$data) event.$data = {};\r\n if (event.type && event.$data.type == null) {\r\n event.$data.type = event.type;\r\n }\r\n\r\n if (event instanceof MouseEvent) {\r\n event.$data.altKey = event.altKey;\r\n event.$data.ctrlKey = event.ctrlKey;\r\n event.$data.metaKey = event.metaKey;\r\n event.$data.shiftKey = event.shiftKey;\r\n event.$data.pageX = event.pageX;\r\n event.$data.pageY = event.pageY;\r\n event.$data.x = event.x || event.clientX;\r\n event.$data.y = event.y || event.clientY;\r\n event.$data.button = event.button;\r\n }\r\n\r\n if (event instanceof WheelEvent) {\r\n event.$data.deltaX = event.deltaX;\r\n event.$data.deltaY = event.deltaY;\r\n event.$data.deltaZ = event.deltaZ;\r\n event.$data.deltaMode = event.deltaMode;\r\n }\r\n\r\n if (window.PointerEvent && event instanceof PointerEvent) {\r\n event.$data.pointerId = event.pointerId;\r\n event.$data.width = event.width;\r\n event.$data.height = event.height;\r\n event.$data.pressure = event.pressure;\r\n event.$data.tangentialPressure = event.tangentialPressure;\r\n event.$data.tiltX = event.tiltX;\r\n event.$data.tiltY = event.tiltY;\r\n event.$data.twist = event.twist;\r\n event.$data.pointerType = event.pointerType;\r\n event.$data.isPrimary = event.isPrimary;\r\n }\r\n\r\n if (window.TouchEvent && event instanceof TouchEvent) {\r\n const touchMap = (touch) => ({\r\n identifier: touch.identifier,\r\n screenX: touch.screenX,\r\n screenY: touch.screenY,\r\n clientX: touch.clientX,\r\n clientY: touch.clientY,\r\n pageX: touch.pageX,\r\n pageY: touch.pageY,\r\n });\r\n\r\n event.$data.altKey = event.altKey;\r\n event.$data.ctrlKey = event.ctrlKey;\r\n event.$data.metaKey = event.metaKey;\r\n event.$data.shiftKey = event.shiftKey;\r\n event.$data.touches = Array.from(event.touches).map(touchMap);\r\n event.$data.changedTouches = Array.from(event.changedTouches).map(touchMap);\r\n event.$data.targetTouches = Array.from(event.targetTouches).map(touchMap);\r\n event.$data.rotation = event.rotation;\r\n event.$data.scale = event.scale;\r\n }\r\n\r\n if (event instanceof KeyboardEvent) {\r\n event.$data.altKey = event.altKey;\r\n event.$data.ctrlKey = event.ctrlKey;\r\n event.$data.metaKey = event.metaKey;\r\n event.$data.shiftKey = event.shiftKey;\r\n event.$data.location = event.location;\r\n event.$data.repeat = event.repeat;\r\n event.$data.code = event.code;\r\n event.$data.key = event.key;\r\n }\r\n\r\n if (event instanceof CustomEvent) {\r\n event.$data.detail = event.detail;\r\n }\r\n\r\n if (modifiers.debounce) {\r\n clearTimeout(timeout);\r\n timeout = setTimeout(() => {\r\n handler.apply(this, arguments);\r\n }, parseInt(modifiers.debounce, 10) || 0);\r\n } else if (modifiers.throttle) {\r\n if (!throttle) {\r\n throttle = true;\r\n handler.apply(this, arguments);\r\n setTimeout(() => {\r\n throttle = false;\r\n }, parseInt(modifiers.throttle, 10) || 0);\r\n }\r\n } else {\r\n return handler.apply(this, arguments);\r\n }\r\n };\r\n\r\n modifiers = modifiers || {};\r\n\r\n // support multiple event systems\r\n const events = new Set();\r\n events.add(eventType);\r\n events.add(eventType.replace(/-/g, '.'));\r\n events.add(eventType.replace(/-/g, ':'));\r\n\r\n // attach event listener(s)\r\n for (const eventType of events) {\r\n if (window.Dom7 && target.nodeType === 1) {\r\n Dom7(target)[modifiers.once ? 'once' : 'on'](eventType.replace(/-/g, '.'), listener, !!modifiers.capture);\r\n } else if (window.jQuery && !modifiers.capture) {\r\n jQuery(target)[modifiers.once ? 'one' : 'on'](eventType.replace(/-/g, '.'), listener);\r\n } else {\r\n target.addEventListener(eventType, listener, {\r\n capture: !!modifiers.capture,\r\n once: !!modifiers.once,\r\n passive: !!modifiers.passive,\r\n });\r\n }\r\n }\r\n\r\n // return unsubscribe function\r\n return () => {\r\n for (const eventType of events) {\r\n if (window.Dom7 && target.nodeType === 1) {\r\n Dom7(target).off(eventType, listener, !!modifiers.capture);\r\n } else if (window.jQuery && !modifiers.capture) {\r\n jQuery(target).off(eventType, listener);\r\n } else {\r\n target.removeEventListener(eventType, listener, !!modifiers.capture);\r\n }\r\n }\r\n };\r\n};\r\n","dmx.fileUtils = {\r\n\r\n fileReader (file, readAs) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = () => reject(reader.error);\r\n reader[readAs](file);\r\n });\r\n },\r\n\r\n blobToArrayBuffer: function(blob) {\r\n return dmx.fileUtils.fileReader(blob, 'readAsArrayBuffer');\r\n },\r\n \r\n blobToBinaryString: function(blob) {\r\n return dmx.fileUtils.fileReader(blob, 'readAsBinaryString');\r\n },\r\n\r\n blobToDataURL: function(blob) {\r\n return dmx.fileUtils.fileReader(blob, 'readAsDataURL');\r\n },\r\n \r\n blobToBase64String: function(blob) {\r\n return dmx.fileUtils.fileReader(blob, 'readAsDataURL').then(dataURL =>\r\n dataURL.substring(dataURL.indexOf(',') + 1)\r\n );\r\n },\r\n\r\n arrayBufferToBlob: function(arrayBuffer, type) {\r\n return Promise.resolve(new Blob([arrayBuffer], { type }));\r\n },\r\n\r\n binaryStringToBlob: function(binary, type) {\r\n const bytes = Uint8Array.from(binary, c => c.charCodeAt(0));\r\n return Promise.resolve(new Blob([bytes], { type }));\r\n }, \r\n \r\n dataURLToBlob: function(dataURL) {\r\n const { data, type } = dmx.fileUtils.parseDataURL(dataURL);\r\n return dmx.fileUtils.base64StringToBlob(data, type);\r\n },\r\n\r\n base64StringToBlob: function(base64String, type) {\r\n const binary = window.atob(base64String);\r\n return dmx.fileUtils.binaryStringToBlob(binary, type);\r\n },\r\n\r\n parseDataURL: function(dataURL) {\r\n const match = dataURL.match(/^data:(.*?)(;base64)?,(.*)$/);\r\n return {\r\n mediaType: match[1],\r\n base64: !!match[2],\r\n data: match[3],\r\n type: match[1].split(';')[0],\r\n };\r\n },\r\n\r\n parseMediaType: function(mediaType) {\r\n const match = mediaType.match(/^([^/]+)\\/([^+;]+)(?:\\+([^;]+))?(?:;(.*))?$/);\r\n return {\r\n type: match[1],\r\n subtype: match[2],\r\n suffix: match[3],\r\n parameters: match[4] ? match[4].split(';').reduce((obj, param) => {\r\n const [key, value] = param.split('=');\r\n obj[key] = value;\r\n return obj;\r\n }, {}) : {},\r\n };\r\n },\r\n\r\n};\r\n\r\n\r\n","// Trigger event on pushState and replaceState\r\n// https://stackoverflow.com/questions/5129386/how-to-detect-when-history-pushstate-and-history-replacestate-are-used/25673911#25673911\r\n{\r\n const _wr = function(type) {\r\n const orig = history[type];\r\n\r\n return function() {\r\n const rv = orig.apply(this, arguments);\r\n const e = new Event(type.toLowerCase());\r\n e.arguments = arguments;\r\n window.dispatchEvent(e);\r\n return rv;\r\n };\r\n };\r\n\r\n history.pushState = _wr('pushState');\r\n history.replaceState = _wr('replaceState');\r\n}\r\n\r\nwindow.onpopstate = function(e) {\r\n if (e.state && e.state.title) {\r\n document.title = e.state.title;\r\n }\r\n};\r\n\r\ndocument.documentElement.style.visibility = 'hidden';\r\n\r\ndmx.ready(() => {\r\n // First execute all startup scripts that are registered\r\n const startup = Promise.all(dmx.__startup);\r\n\r\n // Now we can start App Connect\r\n startup.then(() => {\r\n if (dmx.app) {\r\n throw Error('App already running!');\r\n }\r\n\r\n history.replaceState({ title: document.title }, '');\r\n\r\n const root = document.querySelector(':root[dmx-app], [dmx-app], :root[is=\"dmx-app\"], [is=\"dmx-app\"]');\r\n\r\n if (!root) {\r\n throw Error('App root not found!');\r\n }\r\n\r\n const App = dmx.Component('app');\r\n\r\n dmx.app = new App(root, dmx.global);\r\n\r\n document.documentElement.style.visibility = '';\r\n }).catch((err) => {\r\n // Something went wrong, log error and show page\r\n console.error(err);\r\n document.documentElement.style.visibility = '';\r\n })\r\n});\r\n\r\ndmx.extend = function () {\r\n // Variables\r\n var extended = {};\r\n var deep = false;\r\n var i = 0;\r\n var length = arguments.length;\r\n\r\n // Check if a deep merge\r\n if ( Object.prototype.toString.call( arguments[0] ) === '[object Boolean]' ) {\r\n deep = arguments[0];\r\n i++;\r\n }\r\n\r\n // Merge the object into the extended object\r\n var merge = function (obj) {\r\n for ( var prop in obj ) {\r\n // Prototype polution protection\r\n if (prop == '__proto__') continue;\r\n\r\n if ( Object.prototype.hasOwnProperty.call( obj, prop ) ) {\r\n // If deep merge and property is an object, merge properties\r\n if ( deep && Object.prototype.toString.call(obj[prop]) === '[object Object]' ) {\r\n extended[prop] = dmx.extend( true, extended[prop], obj[prop] );\r\n } else {\r\n if (obj[prop] != null) {\r\n extended[prop] = obj[prop];\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n // Loop through each object and conduct a merge\r\n for ( ; i < length; i++ ) {\r\n var obj = arguments[i];\r\n merge(obj);\r\n }\r\n\r\n return extended;\r\n};\r\n\r\ndmx.parseDate = function(obj) {\r\n if (typeof obj == 'string') {\r\n var d, struct, offset = 0, n = [1,4,5,6,7,10,11];\r\n\r\n if (obj.toLowerCase() == 'now') {\r\n return new Date();\r\n }\r\n\r\n if ((struct = /^(\\d{4}|[+\\-]\\d{6})(?:-(\\d{2})(?:-(\\d{2}))?)?(?:[T ](\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:(Z)|([+\\-])(\\d{2})(?::(\\d{2}))?)?)?$/.exec(obj))) {\r\n for (var i = 0, k; (k = n[i]); ++i) {\r\n struct[k] = +struct[k] || 0;\r\n }\r\n\r\n struct[2] = (+struct[2] || 1) - 1;\r\n struct[3] = +struct[3] || 1;\r\n\r\n if (struct[8] === undefined) {\r\n return new Date(struct[1], struct[2], struct[3], struct[4], struct[5], struct[6], struct[7]);\r\n } else {\r\n if (struct[8] !== 'Z' && struct[9] !== undefined) {\r\n offset = struct[10] * 60 + struct[11];\r\n if (struct[9] === '+') offset = 0 - offset;\r\n }\r\n\r\n return new Date(Date.UTC(struct[1], struct[2], struct[3], struct[4], struct[5] + offset, struct[6], struct[7]));\r\n }\r\n } else if ((struct = /^(\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d{3}))?)?(?:(Z)|([+\\-])(\\d{2})(?::(\\d{2}))?)?$/.exec(obj))) {\r\n var d = new Date();\r\n if (struct[5] === 'Z') {\r\n d.setUTCHours(+struct[1] || 0);\r\n d.setUTCMinutes(+struct[2] || 0);\r\n d.setUTCSeconds(+struct[3] || 0);\r\n d.setUTCMilliseconds(+struct[4] || 0);\r\n } else {\r\n d.setHours(+struct[1] || 0);\r\n d.setMinutes(+struct[2] || 0);\r\n d.setSeconds(+struct[3] || 0);\r\n d.setMilliseconds(+struct[4] || 0);\r\n }\r\n return d;\r\n }\r\n\r\n return new Date(obj);\r\n } else if (typeof obj == 'number') {\r\n return new Date(obj * 1000);\r\n } else {\r\n return new Date('');\r\n }\r\n};\r\n\r\ndmx.hashCode = function(o) {\r\n if (o == null) return 0;\r\n var str = JSON.stringify(o);\r\n var i, hash = 0;\r\n for (i = 0; i < str.length; i++) {\r\n hash = ((hash << 5) - hash) + str.charCodeAt(i);\r\n hash = hash & hash;\r\n }\r\n return Math.abs(hash);\r\n};\r\n\r\ndmx.randomizer = function(seed) {\r\n seed = +seed || 0;\r\n return function() {\r\n seed = (seed * 9301 + 49297) % 233280;\r\n return seed / 233280;\r\n };\r\n};\r\n\r\ndmx.repeatItems = function(repeat) {\r\n const items = [];\r\n\r\n if (repeat) {\r\n if (typeof repeat == 'object') {\r\n if (Array.isArray(repeat)) {\r\n for (let i = 0, l = repeat.length; i < l; i++) {\r\n const value = cloneRepeatValue(repeat[i]);\r\n items.push(buildRepeatItem(value, i, i));\r\n }\r\n } else {\r\n let i = 0;\r\n for (const key in repeat) {\r\n if (Object.prototype.hasOwnProperty.call(repeat, key)) {\r\n const value = cloneRepeatValue(repeat[key]);\r\n items.push(buildRepeatItem(value, key, i));\r\n i++;\r\n }\r\n }\r\n }\r\n } else if (typeof repeat == 'number') {\r\n for (let n = 0; n < repeat; n++) {\r\n items.push({\r\n $key: String(n),\r\n $index: n,\r\n $value: n + 1\r\n });\r\n }\r\n }\r\n }\r\n\r\n return items;\r\n};\r\n\r\nfunction cloneRepeatValue(value) {\r\n if (!value || typeof value !== 'object') {\r\n return value;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return value.slice();\r\n }\r\n\r\n const proto = Object.getPrototypeOf(value);\r\n if (proto === Object.prototype || proto === null) {\r\n return Object.assign({}, value);\r\n }\r\n\r\n return dmx.clone(value);\r\n}\r\n\r\nfunction buildRepeatItem(value, key, index) {\r\n const entry = {};\r\n\r\n if (value && typeof value === 'object') {\r\n if (Array.isArray(value)) {\r\n for (let i = 0, l = value.length; i < l; i++) {\r\n entry[i] = value[i];\r\n }\r\n } else {\r\n Object.assign(entry, value);\r\n }\r\n }\r\n\r\n entry.$key = key;\r\n entry.$index = index;\r\n entry.$value = value;\r\n\r\n return entry;\r\n}\r\n\r\ndmx.escapeRegExp = function(val) {\r\n // https://github.com/benjamingr/RegExp.escape\r\n return val.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\r\n};\r\n\r\ndmx.validate = function(node) {\r\n if (node.tagName == 'FORM') {\r\n Array.from(node.elements).forEach(node => node.dirty = true);\r\n }\r\n\r\n return node.checkValidity();\r\n};\r\n\r\ndmx.validateReset = function(node) {\r\n // reset validation?\r\n};\r\n\r\n(() => {\r\n const queue = [];\r\n\r\n window.addEventListener('message', event => {\r\n const sameContext = event.source === window || event.source == null;\r\n if (sameContext && event.data === 'dmxNextTick' && queue.length) {\r\n event.stopPropagation();\r\n while (queue.length) {\r\n const task = queue.shift();\r\n task.fn.call(task.context);\r\n };\r\n }\r\n }, true);\r\n\r\n dmx.nextTick = (fn, context) => {\r\n queue.push({ fn, context });\r\n window.postMessage('dmxNextTick', '*');\r\n }\r\n})();\r\n\r\ndmx.requestUpdate = function() {\r\n console.warn('dmx.requestUpdate is deprecated.');\r\n};\r\n","// cordova init\r\n\r\nif (document.location.protocol == 'app:') { // cordova detection by checking protocol\r\n dmx.Startup(new Promise(resolve => document.addEventListener('deviceready', resolve)));\r\n}","(() => {\r\n /*! (c) Andrea Giammarchi */\r\n\r\n const {is} = Object;\r\n\r\n let batches;\r\n\r\n /**\r\n * Execute a callback that will not side-effect until its top-most batch is\r\n * completed.\r\n * @param {() => void} callback a function that batches changes to be notified\r\n * through signals.\r\n */\r\n const batch = callback => {\r\n const prev = batches;\r\n batches = prev || [];\r\n try {\r\n callback();\r\n if (!prev)\r\n for (const {value} of batches);\r\n }\r\n finally { batches = prev }\r\n };\r\n dmx.batch = batch;\r\n\r\n /**\r\n * A signal with a value property also exposed via toJSON, toString and valueOf.\r\n * When created via computed, the `value` property is **readonly**.\r\n * @template T\r\n */\r\n class Signal {\r\n constructor(value) {\r\n this._ = value;\r\n }\r\n\r\n /** @returns {T} */\r\n toJSON() { return this.value }\r\n\r\n /** @returns {string} */\r\n toString() { return String(this.value) }\r\n\r\n /** @returns {T} */\r\n valueOf() { return this.value }\r\n }\r\n dmx.Signal = Signal\r\n\r\n let computedSignal;\r\n /**\r\n * @template T\r\n * @extends {Signal<T>}\r\n */\r\n class Computed extends Signal {\r\n /**\r\n * @private\r\n * @type{Reactive<T>}\r\n */\r\n s\r\n /**\r\n * @param {(v: T) => T} _\r\n * @param {T} v\r\n * @param {{ equals?: Equals<T> }} o\r\n * @param {boolean} f\r\n */\r\n constructor(_, v, o, f) {\r\n super(_);\r\n this.f = f; // is effect?\r\n this.$ = true; // should update (\"value for money\")\r\n this.r = new Set; // related signals\r\n this.s = new Reactive(v, o); // signal\r\n }\r\n peek() { return this.s.peek() }\r\n get value() {\r\n if (this.$) {\r\n const prev = computedSignal;\r\n computedSignal = this;\r\n try { this.s.value = this._(this.s._) }\r\n finally {\r\n this.$ = false;\r\n computedSignal = prev;\r\n }\r\n }\r\n return this.s.value;\r\n }\r\n }\r\n\r\n const defaults = {async: false, equals: true};\r\n\r\n /**\r\n * Returns a read-only Signal that is invoked only when any of the internally\r\n * used signals, as in within the callback, is unknown or updated.\r\n * @type {<R, V, T = unknown extends V ? R : R|V>(fn: (v: T) => R, value?: V, options?: { equals?: Equals<T> }) => ComputedSignal<T>}\r\n */\r\n const computed = (fn, value, options = defaults) =>\r\n new Computed(fn, value, options, false);\r\n dmx.computed = computed;\r\n\r\n let outerEffect;\r\n const empty = [];\r\n const noop = () => {};\r\n const dispose = ({s}) => {\r\n if (typeof s._ === 'function')\r\n s._ = s._();\r\n };\r\n\r\n class FX extends Computed {\r\n constructor(_, v, o) {\r\n super(_, v, o, true);\r\n this.e = empty;\r\n }\r\n run() {\r\n this.$ = true;\r\n this.value;\r\n return this;\r\n }\r\n stop() {\r\n this._ = noop;\r\n for (const s of this.r) {\r\n // remove computed from related signals\r\n s.c.delete(this);\r\n }\r\n this.r.clear();\r\n this.s.c.clear();\r\n }\r\n }\r\n dmx.FX = FX\r\n\r\n class Effect extends FX {\r\n constructor(_, v, o) {\r\n super(_, v, o);\r\n this.i = 0; // index\r\n this.a = !!o.async; // async\r\n this.m = true; // microtask\r\n this.e = []; // effects\r\n // \"I am effects\" ^_^;;\r\n }\r\n get value() {\r\n this.a ? this.async() : this.sync();\r\n }\r\n async() {\r\n if (this.m) {\r\n this.m = false;\r\n queueMicrotask(() => {\r\n this.m = true;\r\n this.sync();\r\n });\r\n }\r\n }\r\n sync() {\r\n const prev = outerEffect;\r\n (outerEffect = this).i = 0;\r\n dispose(this);\r\n super.value;\r\n outerEffect = prev;\r\n }\r\n stop() {\r\n super.stop();\r\n dispose(this);\r\n for (const effect of this.e.splice(0))\r\n effect.stop();\r\n }\r\n }\r\n dmx.Effect = Effect\r\n\r\n /**\r\n * Invokes a function when any of its internal signals or computed values change.\r\n *\r\n * Returns a dispose callback.\r\n * @template T\r\n * @type {<T>(fn: (v: T) => T, value?: T, options?: { async?: boolean }) => () => void}\r\n */\r\n const effect = (callback, value, options = defaults) => {\r\n let unique;\r\n if (outerEffect) {\r\n const {i, e} = outerEffect;\r\n const isNew = i === e.length;\r\n // bottleneck:\r\n // there's literally no way to optimize this path *unless* the callback is\r\n // already a known one. however, latter case is not really common code so\r\n // the question is: should I optimize this more than this? 'cause I don't\r\n // think the amount of code needed to understand if a callback is *likely*\r\n // the same as before makes any sense + correctness would be trashed.\r\n if (isNew || e[i]._ !== callback) {\r\n if (!isNew) e[i].stop();\r\n e[i] = new Effect(callback, value, options).run();\r\n }\r\n unique = e[i];\r\n outerEffect.i++;\r\n }\r\n else\r\n unique = new Effect(callback, value, options).run();\r\n return () => { unique.stop() };\r\n };\r\n dmx.effect = effect;\r\n\r\n const skip = () => false;\r\n /**\r\n * @template T\r\n * @extends {Signal<T>}\r\n */\r\n class Reactive extends Signal {\r\n constructor(_, {equals}) {\r\n super(_)\r\n this.c = new Set; // computeds\r\n this.s = equals === true ? is : (equals || skip); // (don't) skip updates\r\n }\r\n /**\r\n * Allows to get signal.value without subscribing to updates in an effect\r\n * @returns {T}\r\n */\r\n peek() { return this._ }\r\n /** @returns {T} */\r\n get value() {\r\n if (computedSignal) {\r\n this.c.add(computedSignal);\r\n computedSignal.r.add(this);\r\n }\r\n return this._;\r\n }\r\n set value(_) {\r\n const prev = this._;\r\n if (this.s((this._ = _), prev)) {\r\n return;\r\n }\r\n\r\n if (!this.c.size) {\r\n return;\r\n }\r\n\r\n const queue = [this];\r\n const effects = [];\r\n\r\n for (let i = 0; i < queue.length; i++) {\r\n const signal = queue[i];\r\n for (const computed of signal.c) {\r\n if (computed.$ || !computed.r.has(signal)) {\r\n continue;\r\n }\r\n\r\n computed.r.clear();\r\n computed.$ = true;\r\n\r\n if (computed.f) {\r\n effects.push(computed);\r\n const traversal = [computed];\r\n for (let t = 0; t < traversal.length; t++) {\r\n const current = traversal[t];\r\n if (!current.e.length) {\r\n continue;\r\n }\r\n for (let k = 0; k < current.e.length; k++) {\r\n const nestedEffect = current.e[k];\r\n nestedEffect.r.clear();\r\n nestedEffect.$ = true;\r\n traversal.push(nestedEffect);\r\n }\r\n }\r\n } else {\r\n queue.push(computed.s);\r\n }\r\n }\r\n }\r\n\r\n if (!effects.length) {\r\n return;\r\n }\r\n\r\n if (batches) {\r\n for (let i = 0; i < effects.length; i++) {\r\n batches.push(effects[i]);\r\n }\r\n } else {\r\n for (let i = 0; i < effects.length; i++) {\r\n effects[i].value;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns a writable Signal that side-effects whenever its value gets updated.\r\n * @template T\r\n * @type {<T>(initialValue: T, options?: { equals?: Equals<T> }) => ReactiveSignal<T>}\r\n */\r\n const signal = (value, options = defaults) => new Reactive(value, options);\r\n dmx.signal = signal;\r\n\r\n /**\r\n * @template [T=any]\r\n * @typedef {boolean | ((prev: T, next: T) => boolean)} Equals\r\n */\r\n\r\n /**\r\n * @public\r\n * @template T\r\n * @typedef {Omit<Reactive<T>, '_'|'s'|'c'>} ReactiveSignal<T>\r\n */\r\n\r\n /**\r\n * @public\r\n * @template T\r\n * @typedef {Omit<Computed<T>, '$'|'s'|'f'|'r'|'_'>} ComputedSignal<T>\r\n */\r\n })();","dmx.signalProxy = function (o = {}) {\r\n const signals = new Map();\r\n const equals = (a, b) => {\r\n return dmx.equal(a, b);\r\n };\r\n\r\n return new Proxy(o, {\r\n has (target, prop) {\r\n // when checking for a prop, always return true\r\n return true;\r\n },\r\n\r\n get (target, prop, receiver) {\r\n const value = Reflect.get(target, prop, receiver);\r\n\r\n if (typeof value == 'function' || typeof prop != 'string' || prop.startsWith('_')) {\r\n // ignore private props\r\n return value;\r\n }\r\n\r\n if (!signals.has(prop)) {\r\n signals.set(prop, dmx.signal(value, { equals }));\r\n }\r\n\r\n return signals.get(prop).value;\r\n },\r\n\r\n set (target, prop, value, receiver) {\r\n const ok = Reflect.set(target, prop, value, receiver);\r\n\r\n if (ok) {\r\n if (signals.has(prop)) {\r\n signals.get(prop).value = value;\r\n }\r\n }\r\n\r\n return ok;\r\n },\r\n\r\n deleteProperty (target, prop) {\r\n const ok = Reflect.deleteProperty(target, prop);\r\n\r\n if (ok && signals.has(prop)) {\r\n signals.get(prop).value = undefined;\r\n }\r\n\r\n return ok;\r\n }\r\n });\r\n};","(() => {\r\n\r\n class Scope {\r\n\r\n constructor (initialData = {}, parent = null) {\r\n if (typeof initialData !== 'object') {\r\n initialData = { $value: initialData };\r\n }\r\n\r\n this.data = dmx.signalProxy();\r\n Object.assign(this.data, initialData);\r\n this.parent = parent;\r\n this.seed = Math.random();\r\n }\r\n\r\n get (name) {\r\n if (this.data[name] !== undefined) {\r\n return this.data[name];\r\n }\r\n\r\n if (this.parent) {\r\n if (name == 'parent') {\r\n return this.parent.data;\r\n }\r\n\r\n return this.parent.get(name);\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n set (name, value) {\r\n if (typeof name === 'object') {\r\n dmx.batch(() => {\r\n for (var prop in name) {\r\n if (name.hasOwnProperty(prop)) {\r\n this.set(prop, name[prop]);\r\n }\r\n }\r\n });\r\n } else {\r\n this.data[name] = value;\r\n }\r\n }\r\n\r\n del (name) {\r\n delete this.data[name];\r\n }\r\n\r\n }\r\n\r\n dmx.global = new Scope();\r\n dmx.DataScope = function (data, parent) {\r\n return new Scope(data, parent || dmx.global);\r\n };\r\n\r\n})();","(function() {\r\n\r\n var $ = function(selector) {\r\n if (!(this instanceof $)) {\r\n return new $(selector);\r\n }\r\n if (selector instanceof $) {\r\n return selector;\r\n }\r\n if (!selector) return this;\r\n var len = selector.length;\r\n if (selector.nodeType) {\r\n this[0] = selector;\r\n this.length = 1;\r\n } else if (typeof selector == 'string') {\r\n return $(document.querySelectorAll(selector));\r\n } else if (len) {\r\n for (var i = 0; i < len; i++) {\r\n if (selector[i] && selector[i].nodeType) {\r\n this[this.length] = selector[i];\r\n this.length++;\r\n }\r\n }\r\n }\r\n return this;\r\n };\r\n\r\n $.prototype = {\r\n constructor: $,\r\n length: 0,\r\n\r\n addClass: function(className) {\r\n for (var i = 0; i < this.length; i++) {\r\n this[i].classList.add(className);\r\n }\r\n return this;\r\n },\r\n\r\n removeClass: function(className) {\r\n for (var i = 0; i < this.length; i++) {\r\n this[i].classList.remove(className);\r\n }\r\n return this;\r\n },\r\n\r\n toggleClass: function(className) {\r\n for (var i = 0; i < this.length; i++) {\r\n this[i].classList.toggle(className);\r\n }\r\n return this;\r\n },\r\n\r\n hasClass: function(className) {\r\n if (!this[0]) return false;\r\n return this[0].classList.contains(className);\r\n },\r\n\r\n attr: function(attrs, value) {\r\n if (arguments.length === 1 && typeof attrs === 'string') {\r\n return this[0] && this[0].getAttribute(attrs);\r\n } else {\r\n for (var i = 0; i < this.length; i++) {\r\n if (arguments.length === 2) {\r\n this[i].setAttribute(attrs, value);\r\n } else {\r\n for (var attr in attrs) {\r\n if (attrs.hasOwnProperty(attr)) {\r\n this[i].setAttribute(attr, attrs[attr]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n removeAttr: function(attr) {\r\n for (var i = 0; i < this.length; i++) {\r\n this[i].removeAttribute(attr);\r\n }\r\n return this;\r\n },\r\n\r\n prop: function(props, value) {\r\n if (arguments.length === 1 && typeof props === 'string') {\r\n return this[0] && this[0][props];\r\n } else {\r\n for (var i = 0; i < this.length; i++) {\r\n if (arguments.length === 2) {\r\n this[i][props] = value;\r\n } else {\r\n for (var prop in props) {\r\n if (props.hasOwnProperty(prop)) {\r\n this[i][prop] = props[prop];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n css: function(props, value) {\r\n if (arguments.length === 1 && typeof props === 'string') {\r\n return this[0] && window.getComputedStyle(this[0], null).getPropertyValue(props);\r\n } else {\r\n for (var i = 0; i < this.length; i++) {\r\n if (arguments.length === 2) {\r\n this[i].style.setProperty(props, value);\r\n } else {\r\n for (var prop in props) {\r\n if (props.hasOwnProperty(prop)) {\r\n this[i].style.setProperty(prop, props[prop]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n each: function(callback, context) {\r\n if (!callback) return this;\r\n for (var i = 0; i < this.length; i++) {\r\n if (callback.call(context || this[i], i, this[i]) === false) {\r\n return this;\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n append: function() {\r\n for (var i = 0; i < arguments.length; i++) {\r\n var children = $(arguments[i]);\r\n\r\n for (var j = 0; j < children.length; j++) {\r\n this[0].appendChild(children[j]);\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n appendTo: function(parent) {\r\n $(parent).append(this);\r\n return this;\r\n },\r\n\r\n detach: function() {\r\n for (var i = 0; i < this.length; i++) {\r\n if (this[i].parentNode) {\r\n this[i].parentNode.removeChild(this[i]);\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n empty: function() {\r\n for (var i = 0; i < this.length; i++) {\r\n this[i].innerHTML = '';\r\n }\r\n return this;\r\n }\r\n };\r\n\r\n dmx.dom = {\r\n\r\n get: function(id) {\r\n return $(document.getElementById(id));\r\n },\r\n\r\n select: function(query) {\r\n return $(query);\r\n },\r\n\r\n create: function(tagName) {\r\n var elem = document.createElement(tagName);\r\n return $(elem);\r\n },\r\n\r\n contains: function(node) {\r\n return document.documentElement.contains(node);\r\n },\r\n\r\n walk: function(node, fn, context) {\r\n if (node) {\r\n if (fn.call(context, node) === false) {\r\n // stop going deeper when callback returns false\r\n return;\r\n } else if (node.hasChildNodes()) {\r\n for (const child of Array.from(node.childNodes)) {\r\n dmx.dom.walk(child, fn, context);\r\n }\r\n }\r\n }\r\n },\r\n\r\n getAttributes: function(node) {\r\n var attributes = [];\r\n\r\n if (node.nodeType == 1) {\r\n for (var i = 0; i < node.attributes.length; i++) {\r\n var attribute = node.attributes[i];\r\n\r\n if (attribute && attribute.specified && dmx.rePrefixed.test(attribute.name)) {\r\n var name = attribute.name.substr(4);\r\n var argument = null;\r\n var modifiers = {};\r\n\r\n name.split('.').forEach(function(part, i) {\r\n if (i === 0) {\r\n name = part;\r\n } else {\r\n var pos = part.indexOf(':');\r\n if (pos > 0) {\r\n modifiers[part.substr(0, pos)] = part.substr(pos + 1);\r\n } else {\r\n modifiers[part] = true;\r\n }\r\n }\r\n });\r\n\r\n var pos = name.indexOf(':');\r\n if (pos > 0) {\r\n argument = name.substr(pos + 1);\r\n name = name.substr(0, pos);\r\n }\r\n\r\n attributes.push({\r\n name: name,\r\n fullName: attribute.name,\r\n value: attribute.value,\r\n argument: argument,\r\n modifiers: modifiers\r\n });\r\n }\r\n }\r\n }\r\n\r\n return attributes;\r\n },\r\n\r\n remove: function(node) {\r\n if (Array.isArray(node)) {\r\n node.forEach(function(node) {\r\n dmx.dom.remove(node);\r\n });\r\n } else {\r\n node.remove()\r\n }\r\n },\r\n\r\n replace: function(oldNode, newNode) {\r\n if (oldNode.parentNode) {\r\n oldNode.parentNode.replaceChild(newNode, oldNode);\r\n }\r\n }\r\n\r\n };\r\n\r\n})();\r\n","dmx._CACHE = new Map();\r\n\r\ndmx._OPERATORS = new Map([\r\n ['{', 'L_CURLY'],\r\n ['}', 'R_CURLY'],\r\n ['[', 'L_BRACKET'],\r\n [']', 'R_BRACKET'],\r\n ['(', 'L_PAREN'],\r\n [')', 'R_PAREN'],\r\n ['.', 'PERIOD'],\r\n [',', 'COMMA'],\r\n [';', 'SEMI'], // not used\r\n [':', 'COLON'],\r\n ['?', 'QUESTION'],\r\n // Arithmetic operators\r\n ['-', 'ADDICTIVE'],\r\n ['+', 'ADDICTIVE'],\r\n ['*', 'MULTIPLICATIVE'],\r\n ['/', 'MULTIPLICATIVE'],\r\n ['%', 'MULTIPLICATIVE'],\r\n // Comparison operators\r\n ['===', 'EQUALITY'],\r\n ['!==', 'EQUALITY'],\r\n ['==', 'EQUALITY'],\r\n ['!=', 'EQUALITY'],\r\n ['<', 'RELATIONAL'],\r\n ['>', 'RELATIONAL'],\r\n ['<=', 'RELATIONAL'],\r\n ['>=', 'RELATIONAL'],\r\n ['in', 'RELATIONAL'],\r\n // Logical operators\r\n ['&&', 'LOGICAL_AND'],\r\n ['||', 'LOGICAL_OR'],\r\n ['!', 'LOGICAL_NOT'],\r\n // Bitwise operators\r\n ['&', 'BITWISE_AND'],\r\n ['|', 'BITWISE_OR'],\r\n ['^', 'BITWISE_XOR'],\r\n ['~', 'BITWISE_NOT'],\r\n ['<<', 'BITWISE_SHIFT'],\r\n ['>>', 'BITWISE_SHIFT'],\r\n ['>>>', 'BITWISE_SHIFT'],\r\n]);\r\n\r\ndmx._ESCAPE_CHARS = new Map([\r\n ['n', '\\n'],\r\n ['r', '\\r'],\r\n ['t', '\\t'],\r\n ['b', '\\b'],\r\n ['f', '\\f'],\r\n ['v', '\\v'],\r\n ['0', '\\0'],\r\n [\"'\", \"'\"],\r\n ['`', '`'],\r\n ['\"', '\"'],\r\n]);\r\n\r\ndmx._EXPRESSIONS = new Map([\r\n ['**', (a, b) => Math.pow(a(), b())],\r\n ['??', (a, b) => (a = a(), a == null ? b() : a)],\r\n ['in', (a, b) => a() in b()],\r\n ['?', (a, b, c) => (a() ? b() : c())],\r\n ['+', (a, b) => (a = a(), b = b(), a == null ? b : b == null ? a : a + b)],\r\n ['-', (a, b) => a() - b()],\r\n ['*', (a, b) => a() * b()],\r\n ['/', (a, b) => a() / b()],\r\n ['%', (a, b) => a() % b()],\r\n ['===', (a, b) => a() === b()],\r\n ['!==', (a, b) => a() !== b()],\r\n ['==', (a, b) => a() == b()],\r\n ['!=', (a, b) => a() != b()],\r\n ['<', (a, b) => a() < b()],\r\n ['>', (a, b) => a() > b()],\r\n ['<=', (a, b) => a() <= b()],\r\n ['>=', (a, b) => a() >= b()],\r\n ['&&', (a, b) => a() && b()],\r\n ['||', (a, b) => a() || b()],\r\n ['&', (a, b) => a() & b()],\r\n ['|', (a, b) => a() | b()],\r\n ['^', (a, b) => a() ^ b()],\r\n ['<<', (a, b) => a() << b()],\r\n ['>>', (a, b) => a() >> b()],\r\n ['>>>', (a, b) => a() >>> b()],\r\n ['~', (a) => ~a()],\r\n ['!', (a) => !a()],\r\n]);\r\n\r\ndmx._RESERVED = new Map([\r\n ['this', (scope) => () => scope && scope.$this != null ? scope.$this : scope.data],\r\n ['true', () => () => true],\r\n ['false', () => () => false],\r\n ['null', () => () => null],\r\n ['undefined', () => () => undefined],\r\n ['Infinity', () => () => Infinity],\r\n ['_', () => () => ({ __dmxScope__: true })],\r\n]);\r\n\r\ndmx._SUPPORTED_TYPES = new Map([\r\n ['Boolean', 'boolean'],\r\n ['Null', 'null'],\r\n ['Undefined', 'undefined'],\r\n ['Number', 'number'],\r\n ['BigInt', 'number'],\r\n ['Decimal', 'number'], // requires Decimal.js\r\n ['String', 'string'],\r\n ['Date', 'date'],\r\n ['RegExp', 'regexp'],\r\n ['Blob', 'blob'],\r\n ['File', 'file'],\r\n ['FileList', 'filelist'],\r\n ['ArrayBuffer', 'arraybuffer'],\r\n ['ImageBitmap', 'imagebitmap'],\r\n ['ImageData', 'imagedata'],\r\n ['Array', 'array'],\r\n ['Object', 'object'],\r\n ['Map', 'map'],\r\n ['Set', 'set'],\r\n ['DataView', 'array'],\r\n ['Int8Array', 'array'],\r\n ['Uint8Array', 'array'],\r\n ['Uint8ClampedArray', 'array'],\r\n ['Int16Array', 'array'],\r\n ['Uint16Array', 'array'],\r\n ['Int32Array', 'array'],\r\n ['Uint32Array', 'array'],\r\n ['Float32Array', 'array'],\r\n ['Float64Array', 'array'],\r\n ['BigInt64Array', 'array'],\r\n ['BigUint64Array', 'array'],\r\n]);\r\n\r\ndmx.getType = function (obj) {\r\n return dmx._SUPPORTED_TYPES.get(Object.prototype.toString.call(obj).slice(8, -1));\r\n};\r\n\r\ndmx.lexer = function (expression) {\r\n if (dmx._CACHE.has(expression)) {\r\n return dmx._CACHE.get(expression);\r\n }\r\n\r\n let tokens = [], token, name, start, index = 0, op = true, ch, ch2, ch3;\r\n\r\n while (index < expression.length) {\r\n start = index;\r\n\r\n ch = read();\r\n\r\n if (isQuote(ch)) {\r\n name = 'STRING';\r\n token = readString(ch);\r\n op = false;\r\n } else if ((isDigid(ch) || (is('.') && peek() && isDigid(peek()))) && op) {\r\n name = 'NUMBER';\r\n token = readNumber();\r\n op = false;\r\n } else if (isAlpha(ch) && op) {\r\n name = 'IDENT';\r\n token = readIdent();\r\n if (is('(')) {\r\n name = 'METHOD';\r\n }\r\n op = false;\r\n } else if (is('/') && op && (token == '(' || token == ',' || token == '?' || token == ':') && testRegexp()) {\r\n name = 'REGEXP';\r\n token = readRegexp();\r\n op = false;\r\n } else if (isWhitespace(ch)) {\r\n index++;\r\n continue;\r\n } else if ((ch3 = read(3)) && dmx._OPERATORS.has(ch3)) {\r\n name = dmx._OPERATORS.get(ch3);\r\n token = ch3;\r\n op = true;\r\n index += 3;\r\n } else if ((ch2 = read(2)) && dmx._OPERATORS.has(ch2)) {\r\n name = dmx._OPERATORS.get(ch2);\r\n token = ch2;\r\n op = true;\r\n index += 2;\r\n } else if (dmx._OPERATORS.has(ch)) {\r\n name = dmx._OPERATORS.get(ch);\r\n token = ch;\r\n op = true;\r\n index++;\r\n } else {\r\n throw new Error(`Unexpected token \"${ch}\" at index ${index} in expression: ${expression}`);\r\n }\r\n\r\n tokens.push({ name, index: start, value: token });\r\n }\r\n\r\n dmx._CACHE.set(expression, tokens);\r\n\r\n return tokens;\r\n\r\n function read (n) {\r\n return n > 1 ? expression.slice(index, index + n) : expression[index];\r\n }\r\n\r\n function peek (n = 1) {\r\n return index + n < expression.length ? expression[index + n] : false;\r\n }\r\n\r\n function is (chars) {\r\n return chars.includes(ch);\r\n }\r\n\r\n function isQuote (ch) {\r\n return ch == '\"' || ch == \"'\" || ch == '`';\r\n }\r\n\r\n function isDigid (ch) {\r\n return ch >= '0' && ch <= '9';\r\n }\r\n\r\n function isAlpha (ch) {\r\n return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch === '_' || ch === '$';\r\n }\r\n\r\n function isAlphaNum (ch) {\r\n return isAlpha(ch) || isDigid(ch);\r\n }\r\n\r\n function isWhitespace (ch) {\r\n return ch == ' ' || ch == '\\r' || ch == '\\t' || ch == '\\n' || ch == '\\v' || ch == '\\u00A0';\r\n }\r\n\r\n function isExpOperator (ch) {\r\n return ch == '-' || ch == '+' || isDigid(ch);\r\n }\r\n\r\n function readString (quote) {\r\n let escape = false, result = '';\r\n\r\n index++;\r\n\r\n while (index < expression.length) {\r\n ch = read();\r\n\r\n if (escape) {\r\n if (ch == 'u') {\r\n index++;\r\n const hex = read(4);\r\n if (!hex.match(/[\\da-f]{4}/i)) {\r\n throw new Error(`Invalid unicode escape [\\\\u${hex}] at index ${index} in expression: ${expression}`);\r\n }\r\n result += String.fromCharCode(parseInt(hex, 16));\r\n index += 4;\r\n } else {\r\n result += dmx._ESCAPE_CHARS.has(ch) ? dmx._ESCAPE_CHARS.get(ch) : ch;\r\n }\r\n\r\n escape = false;\r\n } else if (ch == '\\\\') {\r\n escape = true;\r\n } else if (ch == quote) {\r\n index++;\r\n if (quote == '`') {\r\n result = '{{' + result + '}}';\r\n }\r\n return result;\r\n } else {\r\n result += ch;\r\n }\r\n\r\n index++;\r\n }\r\n\r\n throw new Error(`Unterminated string in expression: ${expression}`);\r\n }\r\n\r\n function readNumber () {\r\n let result = '', exponent = false;\r\n\r\n while (index < expression.length) {\r\n ch = read();\r\n\r\n if (is('_') && peek() && isDigid(peek())) {\r\n index++;\r\n continue;\r\n }\r\n\r\n if ((is('.') && peek() && isDigid(peek())) || isDigid(ch)) {\r\n result += ch;\r\n } else {\r\n const next = peek();\r\n\r\n if (is('eE') && isExpOperator(next)) {\r\n result += 'e';\r\n exponent = true;\r\n } else if (isExpOperator(ch) && next && isDigid(next) && exponent) {\r\n result += ch;\r\n exponent = false;\r\n } else if (isExpOperator(ch) && (!next || !isDigid(next)) && exponent) {\r\n throw new Error(`Invalid exponent in expression: ${expression}`);\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n index++;\r\n }\r\n\r\n if (read() == 'n') {\r\n index++;\r\n return BigInt(result);\r\n }\r\n\r\n if (read() == 'm') {\r\n index++;\r\n if (window.Decimal) {\r\n return new Decimal(result);\r\n } else {\r\n console.warn('Decimal number in expression but library not found');\r\n }\r\n }\r\n\r\n return +result;\r\n }\r\n\r\n function readIdent () {\r\n let result = '';\r\n\r\n while (index < expression.length) {\r\n ch = read();\r\n\r\n if (isAlphaNum(ch)) {\r\n result += ch;\r\n } else {\r\n break;\r\n }\r\n\r\n index++;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function readRegexp () {\r\n let result = '', modifiers = '', escape = false;\r\n\r\n index++;\r\n\r\n while (index < expression.length) {\r\n ch = read();\r\n\r\n if (escape) {\r\n escape = false;\r\n } else if (ch == '\\\\') {\r\n escape = true;\r\n } else if (ch == '/') {\r\n index++;\r\n\r\n while ('ign'.includes(ch = read())) {\r\n modifiers += ch;\r\n index++;\r\n }\r\n\r\n return new RegExp(result, modifiers);\r\n }\r\n\r\n result += ch;\r\n index++;\r\n }\r\n\r\n throw new Error(`Unterminated regexp in expression: ${expression}`);\r\n }\r\n\r\n function testRegexp () {\r\n let i = index, ok = true;\r\n\r\n try {\r\n readRegexp();\r\n } catch (e) {\r\n ok = false;\r\n }\r\n\r\n index = i;\r\n ch = '/';\r\n\r\n return ok;\r\n }\r\n};\r\n\r\ndmx.parse = function (expression, scope = dmx.app, context) {\r\n if (typeof expression !== 'string') {\r\n return expression;\r\n }\r\n\r\n expression = expression.trim();\r\n\r\n const ctx = Object.assign({}, context || {});\r\n ctx.expression = ctx.expression || expression;\r\n if (!ctx.component && scope && scope.$node) {\r\n ctx.component = scope;\r\n }\r\n\r\n if (expression.includes('{{')) {\r\n if (expression.startsWith('{{') && expression.endsWith('}}') && !expression.slice(2).includes('{{')) {\r\n expression = expression.slice(2, -2);\r\n } else {\r\n return expression.replace(/{{(.+?)}}/g, (_, innerExpression) => {\r\n const result = dmx.parse(innerExpression, scope, ctx);\r\n return result == null ? '' : result;\r\n });\r\n }\r\n }\r\n\r\n if (!expression) return undefined;\r\n\r\n let tokens, callContext, result;\r\n\r\n try {\r\n tokens = Array.from(dmx.lexer(expression));\r\n result = doParse();\r\n } catch (e) {\r\n if (dmx.errors && dmx.errors.FormatterError && e instanceof dmx.errors.FormatterError) {\r\n throw e;\r\n }\r\n\r\n const error = dmx.errors && dmx.errors.createExpressionError\r\n ? dmx.errors.createExpressionError({\r\n expression,\r\n scope,\r\n context: ctx,\r\n originalError: e,\r\n })\r\n : e;\r\n\r\n if (dmx.errors && dmx.errors.handleExpressionError && error instanceof Error && error !== e) {\r\n return dmx.errors.handleExpressionError(error);\r\n }\r\n\r\n if (dmx.errors && dmx.errors.handleExpressionError) {\r\n return dmx.errors.handleExpressionError(\r\n dmx.errors.createExpressionError({\r\n expression,\r\n scope,\r\n context: ctx,\r\n originalError: e,\r\n })\r\n );\r\n }\r\n\r\n console.error('Error parsing expression:', expression, e);\r\n }\r\n\r\n return result;\r\n\r\n function read () {\r\n if (tokens.length === 0) {\r\n throw new Error(`Unexpected end of expression: ${expression}`);\r\n }\r\n\r\n return tokens[0];\r\n }\r\n\r\n function peek (e) {\r\n if (tokens.length > 0) {\r\n const token = tokens[0];\r\n\r\n if (!e || token.name == e) {\r\n return token;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function expect (e) {\r\n const token = peek(e);\r\n\r\n if (token) {\r\n tokens.shift();\r\n return token;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function consume (e) {\r\n if (!expect(e)) {\r\n throw new Error(`Expected ${e} at index ${tokens[0].index} in expression: ${expression}`);\r\n }\r\n }\r\n\r\n function fn (exp) {\r\n const args = Array.prototype.slice.call(arguments, 1);\r\n\r\n return () => {\r\n if (dmx._EXPRESSIONS.has(exp)) {\r\n return dmx._EXPRESSIONS.get(exp).apply(scope, args);\r\n }\r\n\r\n return exp;\r\n };\r\n }\r\n\r\n function doParse () {\r\n const parts = [];\r\n\r\n while (true) {\r\n if (tokens.length > 0 && !(peek('R_PAREN') || peek('R_BRACKET') || peek('R_CURLY') || peek('COMMA') || peek('SEMI'))) {\r\n parts.push(parseExpression());\r\n }\r\n\r\n if (!(expect('COMMA') || expect('SEMI'))) {\r\n return (parts.length === 1 ? parts[0] : sequence)();\r\n }\r\n }\r\n\r\n function sequence () {\r\n let result;\r\n\r\n for (let i = 0; i < parts.length; i++) {\r\n const expr = parts[i];\r\n if (expr) {\r\n result = expr();\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n }\r\n\r\n function parseExpression () {\r\n return parseConditional();\r\n }\r\n\r\n function parseConditional () {\r\n const a = parseLogicalOr();\r\n\r\n if (expect('QUESTION')) {\r\n const b = parseExpression();\r\n consume('COLON');\r\n const c = parseExpression();\r\n\r\n return fn('?', a, b, c);\r\n }\r\n\r\n return a;\r\n }\r\n\r\n function parseLogicalOr () {\r\n let a = parseLogicalAnd();\r\n\r\n while (expect('LOGICAL_OR')) {\r\n const b = parseLogicalAnd();\r\n a = fn('||', a, b);\r\n }\r\n\r\n return a;\r\n }\r\n\r\n function parseLogicalAnd () {\r\n let a = parseBitwiseOr();\r\n\r\n while (expect('LOGICAL_AND')) {\r\n const b = parseBitwiseOr();\r\n a = fn('&&', a, b);\r\n }\r\n\r\n return a;\r\n }\r\n\r\n function parseBitwiseOr () {\r\n let a = parseBitwiseXor();\r\n\r\n while (expect('BITWISE_OR')) {\r\n const b = parseBitwiseXor();\r\n a = fn('|', a, b);\r\n }\r\n\r\n return a;\r\n }\r\n\r\n function parseBitwiseXor () {\r\n let a = parseBitwiseAnd();\r\n\r\n while (expect('BITWISE_XOR')) {\r\n const b = parseBitwiseAnd();\r\n a = fn('^', a, b);\r\n }\r\n\r\n return a;\r\n }\r\n\r\n function parseBitwiseAnd () {\r\n let a = parseEquality();\r\n\r\n while (expect('BITWISE_AND')) {\r\n const b = parseEquality();\r\n a = fn('&', a, b);\r\n }\r\n\r\n return a;\r\n }\r\n\r\n function parseEquality () {\r\n let a = parseRelational(), b;\r\n\r\n if ((b = expect('EQUALITY'))) {\r\n const c = parseEquality();\r\n a = fn(b.value, a, c);\r\n }\r\n\r\n return a;\r\n }\r\n\r\n function parseRelational () {\r\n let a = parseBitwiseShift(), b;\r\n\r\n if ((b = expect('RELATIONAL'))) {\r\n const c = parseRelational();\r\n a = fn(b.value, a, c);\r\n }\r\n\r\n return a;\r\n }\r\n\r\n function parseBitwiseShift () {\r\n let a = parseAddictive(), b;\r\n\r\n if ((b = expect('BITWISE_SHIFT'))) {\r\n const c = parseBitwiseShift();\r\n a = fn(b.value, a, c);\r\n }\r\n\r\n return a;\r\n }\r\n\r\n function parseAddictive () {\r\n let a = parseMultiplicative(), b;\r\n\r\n while ((b = expect('ADDICTIVE'))) {\r\n const c = parseMultiplicative();\r\n a = fn(b.value, a, c);\r\n }\r\n\r\n return a;\r\n }\r\n\r\n function parseMultiplicative () {\r\n let a = parseUnary(), b;\r\n\r\n while ((b = expect('MULTIPLICATIVE'))) {\r\n const c = parseUnary();\r\n a = fn(b.value, a, c);\r\n }\r\n\r\n return a;\r\n }\r\n\r\n function parseUnary () {\r\n let a;\r\n\r\n if ((a = expect('ADDICTIVE'))) {\r\n if (a.value == '+') {\r\n return parsePrimary();\r\n } else {\r\n return fn(a.value, () => 0, parsePrimary());\r\n }\r\n } else if ((a = expect('LOGICAL_NOT'))) {\r\n return fn(a.value, parseUnary());\r\n } else if ((a = expect('BITWISE_NOT'))) {\r\n return fn(a.value, parseUnary());\r\n } else {\r\n return parsePrimary();\r\n }\r\n }\r\n\r\n function parsePrimary () {\r\n let result, next;\r\n\r\n if (expect('L_PAREN')) {\r\n result = parseExpression();\r\n consume('R_PAREN');\r\n } else if (expect('L_CURLY')) {\r\n const obj = {};\r\n\r\n if (read().name != 'R_CURLY') {\r\n do {\r\n const key = expect().value;\r\n consume('COLON');\r\n obj[key] = parseExpression()();\r\n } while (expect('COMMA'));\r\n }\r\n\r\n result = fn(obj);\r\n\r\n consume('R_CURLY');\r\n } else if (expect('L_BRACKET')) {\r\n const arr = [];\r\n\r\n if (read().name != 'R_BRACKET') {\r\n do {\r\n arr.push(parseExpression()());\r\n } while (expect('COMMA'));\r\n }\r\n\r\n result = fn(arr);\r\n\r\n consume('R_BRACKET');\r\n } else if (expect('PERIOD')) {\r\n result = peek() ? parseMember(fn(scope.data)) : fn(scope.data);\r\n } else {\r\n const token = expect();\r\n\r\n if (token === false) {\r\n throw new Error(`Unexpected end of expression: ${expression}`);\r\n }\r\n\r\n if (token.name == 'IDENT') {\r\n result = dmx._RESERVED.has(token.value) ? dmx._RESERVED.get(token.value)(scope) : () => scope.get(token.value);\r\n } else if (token.name == 'METHOD') {\r\n result = fn(dmx.__formatters.global[token.value] || (() => {\r\n console.warn(`Method \"${token.value}\" not found in expression: ${expression}`);\r\n return undefined;\r\n })\r\n );\r\n } else {\r\n result = () => token.value;\r\n }\r\n }\r\n\r\n while ((next = expect('L_PAREN') || expect('L_BRACKET') || expect('PERIOD'))) {\r\n if (next.value == '(') {\r\n result = parseCall(result, callContext);\r\n } else if (next.value == '[') {\r\n callContext = result;\r\n result = parseIndex(result, callContext);\r\n } else if (next.value == '.') {\r\n callContext = result;\r\n result = parseMember(result, callContext);\r\n } else {\r\n throw new Error(`Unexpected token \"${next.value}\" at index ${next.index} in expression: ${expression}`);\r\n }\r\n }\r\n\r\n callContext = null;\r\n\r\n return result;\r\n }\r\n\r\n function parseCall (func, context) {\r\n const argsFn = [];\r\n\r\n if (read().name != 'R_PAREN') {\r\n do {\r\n argsFn.push(parseExpression());\r\n } while (expect('COMMA'));\r\n }\r\n\r\n consume('R_PAREN');\r\n\r\n const hasContext = typeof context === 'function';\r\n const argCount = argsFn.length;\r\n const bufferSize = argCount + (hasContext ? 1 : 0);\r\n const argsBuffer = bufferSize > 0 ? new Array(bufferSize) : null;\r\n\r\n return () => {\r\n const target = func() || dmx.noop;\r\n const name = target && target.name ? target.name : '<anonymous>';\r\n\r\n if (!argsBuffer) {\r\n try {\r\n return target.call(scope);\r\n } catch (error) {\r\n if (dmx && dmx.config && dmx.config.throwErrors) {\r\n throw error;\r\n }\r\n\r\n if (console && console.warn) {\r\n console.warn(`Error calling method ${name} in expression: ${expression}`, error);\r\n }\r\n\r\n return undefined;\r\n }\r\n }\r\n\r\n let offset = 0;\r\n\r\n if (hasContext) {\r\n argsBuffer[offset++] = context();\r\n }\r\n\r\n for (let i = 0; i < argCount; i++) {\r\n argsBuffer[offset++] = argsFn[i]();\r\n }\r\n\r\n const baseLength = argsBuffer.length;\r\n argsBuffer.length = offset;\r\n\r\n try {\r\n return target.apply(scope, argsBuffer);\r\n } catch (error) {\r\n if (dmx && dmx.config && dmx.config.throwErrors) {\r\n throw error;\r\n }\r\n\r\n if (console && console.warn) {\r\n console.warn(`Error calling method ${name} in expression: ${expression}`, error);\r\n }\r\n\r\n return undefined;\r\n } finally {\r\n argsBuffer.length = baseLength;\r\n }\r\n };\r\n }\r\n\r\n function parseIndex (object) {\r\n const indexFn = parseExpression();\r\n\r\n consume('R_BRACKET');\r\n\r\n return () => {\r\n const obj = object();\r\n const index = indexFn();\r\n\r\n if (typeof obj != 'object' || obj == null) {\r\n return undefined;\r\n }\r\n\r\n if (obj.__dmxScope__) {\r\n return scope.get(index);\r\n }\r\n\r\n if (dmx.getType(obj) == 'map') {\r\n return obj.get(index);\r\n }\r\n\r\n return obj[index];\r\n };\r\n }\r\n\r\n function parseMember (object) {\r\n const token = expect();\r\n\r\n return () => {\r\n const obj = object();\r\n const type = dmx.getType(obj);\r\n\r\n if (token.name == 'METHOD') {\r\n const method = '__' + token.value;\r\n\r\n if (type == 'map' && typeof obj.get(method) == 'function') {\r\n return obj.get(method).bind(obj);\r\n }\r\n\r\n if (type == 'object' && typeof obj[method] == 'function') {\r\n return obj[method];\r\n }\r\n\r\n if (dmx.__formatters[type] && dmx.__formatters[type][token.value]) {\r\n return dmx.__formatters[type][token.value];\r\n }\r\n\r\n if (dmx.__formatters['any'] && dmx.__formatters['any'][token.value]) {\r\n return dmx.__formatters['any'][token.value];\r\n }\r\n\r\n return () => {\r\n if (obj != null) {\r\n console.warn(`Method \"${token.value}\" not found in expression: ${expression}`);\r\n }\r\n return undefined;\r\n };\r\n }\r\n\r\n if (obj && obj.__dmxScope__) {\r\n return scope.get(token.value);\r\n }\r\n\r\n if (type == 'map') {\r\n return obj.get(token.value);\r\n }\r\n\r\n return obj && typeof obj == 'object' && token.value in obj ? obj[token.value] : undefined;\r\n };\r\n }\r\n};","dmx.BaseComponent = dmx.createClass({\r\n constructor: function (node, parent) {\r\n this.$node = node;\r\n this.parent = parent;\r\n this.children = [];\r\n this.listeners = {};\r\n\r\n this.__disposables = [];\r\n this.__childDisposables = [];\r\n\r\n this.updatedProps = new Map();\r\n this.updateRequested = false;\r\n\r\n this.isInitialized = false;\r\n this.isDestroyed = false;\r\n\r\n this.props = new Proxy(\r\n {},\r\n {\r\n set: (target, prop, value, receiver) => {\r\n const oldValue = Reflect.get(target, prop, receiver);\r\n const ok = Reflect.set(target, prop, value, receiver);\r\n\r\n if (ok && this.isInitialized) {\r\n if ((this.attributes[prop] && this.attributes[prop].alwaysUpdate) || !dmx.equal(oldValue, value)) {\r\n this.requestUpdate(prop, oldValue);\r\n }\r\n }\r\n\r\n return ok;\r\n },\r\n }\r\n );\r\n\r\n this.data = dmx.signalProxy();\r\n this.seed = Math.random();\r\n\r\n this.name =\r\n node.getAttribute('id') ||\r\n node.getAttribute('name') ||\r\n (this.type && this.type.toLowerCase().replace(/^dmx-/, '')) ||\r\n '';\r\n this.name = this.name.replace(/[^\\w]/g, '');\r\n\r\n try {\r\n this.$initialData();\r\n this.$parseAttributes(node);\r\n\r\n // Bind methods from prototype to instance\r\n /* DO NOT BIND METHODS TO INSTANCE!!!\r\n if (this.methods && typeof this.methods === 'object') {\r\n Object.keys(this.methods).forEach((methodName) => {\r\n if (typeof this.methods[methodName] === 'function') {\r\n this[methodName] = this.methods[methodName].bind(this);\r\n }\r\n });\r\n }\r\n */\r\n\r\n this.init(node);\r\n if (this.render !== false) {\r\n this.render(node);\r\n }\r\n if (this.$node) {\r\n this.$customAttributes('mounted', this.$node);\r\n this.$node.dmxComponent = this;\r\n this.$node.dmxRendered = true;\r\n }\r\n this.isInitialized = true;\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n },\r\n\r\n tag: null,\r\n initialData: {},\r\n attributes: {},\r\n methods: {},\r\n events: {\r\n destroy: Event,\r\n },\r\n\r\n render: function (node) {\r\n if (this.$node) {\r\n this.$parse();\r\n }\r\n },\r\n\r\n parse: function (expression, context) {\r\n const ctx = Object.assign({}, context || {});\r\n ctx.component = ctx.component || this;\r\n if (ctx.expression == null) {\r\n ctx.expression = expression;\r\n }\r\n\r\n return dmx.parse(expression, this, ctx);\r\n },\r\n\r\n // find component based on name inside children\r\n find: function (name) {\r\n if (this.name == name) return this;\r\n\r\n for (var i = 0; i < this.children.length; i++) {\r\n var found = this.children[i].find(name);\r\n if (found) return found;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n init: dmx.noop,\r\n\r\n beforeUpdate: dmx.noop,\r\n update: dmx.noop,\r\n updated: dmx.noop,\r\n\r\n beforeDestroy: dmx.noop,\r\n destroy: dmx.noop,\r\n destroyed: dmx.noop,\r\n\r\n addEventListener: function (type, callback) {\r\n if (!(type in this.listeners)) {\r\n this.listeners[type] = new Set();\r\n }\r\n this.listeners[type].add(callback);\r\n },\r\n\r\n removeEventListener: function (type, callback) {\r\n if (!(type in this.listeners)) return;\r\n this.listeners[type].delete(callback);\r\n },\r\n\r\n dispatchEvent: function (event, props, data, nsp) {\r\n if (this.isDestroyed) return;\r\n\r\n if (typeof event == 'string') {\r\n var ComponentEvent = this.events[event] || CustomEvent;\r\n event = new ComponentEvent(event, props);\r\n }\r\n\r\n if (!(event.type in this.listeners)) return true;\r\n\r\n event.nsp = nsp;\r\n event.$data = data || {};\r\n for (let listener of this.listeners[event.type]) {\r\n if (listener.call(this, event) === false) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n return !event.defaultPrevented;\r\n },\r\n\r\n $createChild: function (name, node) {\r\n var Component = dmx.__components[name];\r\n var component = new Component(node, this);\r\n this.$addChild(component, component.name);\r\n },\r\n\r\n $addChild: function (child, name) {\r\n this.children.push(child);\r\n if (name) {\r\n if (this.data[name] && dmx.debug) {\r\n console.warn('Duplicate name \"' + name + '\" found, component not added to scope.');\r\n //return;\r\n }\r\n this.set(name, child.data);\r\n }\r\n },\r\n\r\n $removeChild: function (child) {\r\n // remove from children collection\r\n if (this.children.includes(child)) {\r\n this.children.splice(this.children.indexOf(child), 1);\r\n }\r\n // remove from data\r\n if (child.name && this.data[child.name]) {\r\n this.del(child.name);\r\n }\r\n },\r\n\r\n $customAttributes: function (hook, node, attributes) {\r\n const toCamelCase = (s) => s.replace(/-./g, (x) => x[1].toUpperCase());\r\n if (!attributes) attributes = dmx.dom.getAttributes(node);\r\n\r\n attributes.forEach((attr) => {\r\n if (node == this.$node) {\r\n if (attr.name == 'bind' && this.attributes[toCamelCase(attr.argument)]) {\r\n return;\r\n }\r\n\r\n if (attr.name == 'on' && this.events[attr.argument]) {\r\n return;\r\n }\r\n }\r\n\r\n if (dmx.__attributes[hook][attr.name]) {\r\n this.__inChild = node != this.$node;\r\n const dispose = dmx.__attributes[hook][attr.name].call(this, node, attr);\r\n if (dispose) {\r\n this[this.__inChild ? '__childDisposables' : '__disposables'].push(dispose);\r\n }\r\n }\r\n });\r\n\r\n this.__inChild = null;\r\n },\r\n\r\n $parseTextNode(node) {\r\n if (node.nodeType !== 3) return;\r\n\r\n if (dmx.reExpression.test(node.nodeValue)) {\r\n const host = node.parentElement || node;\r\n const parts = node.nodeValue\r\n .replace(dmx.reExpressionReplace, (_, expression) => {\r\n return `##split##${expression}##split##`;\r\n })\r\n .split('##split##');\r\n\r\n const fragment = document.createDocumentFragment();\r\n parts.forEach((part, i) => {\r\n const textNode = document.createTextNode(part);\r\n fragment.appendChild(textNode);\r\n\r\n if (i % 2) {\r\n const expression = part;\r\n this.$watch(expression, (value) => {\r\n textNode.nodeValue = value;\r\n }, {\r\n node: host,\r\n type: 'text',\r\n description: 'text content binding',\r\n });\r\n }\r\n });\r\n\r\n node.parentNode.replaceChild(fragment, node);\r\n }\r\n },\r\n\r\n $parse: function (node) {\r\n node = node || this.$node;\r\n\r\n if (!node) return;\r\n\r\n if (node.nodeType === 3) {\r\n return this.$parseTextNode(node);\r\n }\r\n\r\n if (node.nodeType !== 1) return;\r\n\r\n if (dmx.config.mapping) {\r\n Object.keys(dmx.config.mapping).forEach((map) => {\r\n dmx.array(node.querySelectorAll(map)).forEach((node) => {\r\n if (!node.hasAttribute('is')) {\r\n node.setAttribute('is', 'dmx-' + dmx.config.mapping[map]);\r\n }\r\n });\r\n });\r\n }\r\n\r\n dmx.dom.walk(\r\n node,\r\n function (node) {\r\n if (node == this.$node) {\r\n // skip current node\r\n return;\r\n }\r\n\r\n // Element Node\r\n if (node.nodeType === 1) {\r\n var tagName = node.tagName.toLowerCase();\r\n var attributes = dmx.dom.getAttributes(node);\r\n\r\n if (node.hasAttribute('is')) {\r\n tagName = node.getAttribute('is');\r\n }\r\n\r\n if (dmx.reIgnoreElement.test(tagName)) {\r\n // ignore element\r\n return false;\r\n }\r\n\r\n // Google reCAPTCHA support\r\n if (window.grecaptcha && node.classList.contains(\"g-recaptcha\")) {\r\n const renderRecaptcha = () => {\r\n if (node.querySelector('[name=\"g-recaptcha-response\"]')) return;\r\n if (typeof grecaptcha.render === 'function') {\r\n grecaptcha.render(node);\r\n } else if (console && typeof console.warn === 'function') {\r\n console.warn('grecaptcha.render is not available; skipping reCAPTCHA initialization');\r\n }\r\n };\r\n\r\n if (typeof grecaptcha.ready === 'function') {\r\n grecaptcha.ready(renderRecaptcha);\r\n } else {\r\n renderRecaptcha();\r\n }\r\n }\r\n\r\n this.$customAttributes('before', node, attributes);\r\n var idx = attributes.findIndex((attr) => attr.name === 'repeat');\r\n if (idx !== -1) return false;\r\n\r\n if (dmx.rePrefixed.test(tagName)) {\r\n tagName = tagName.replace(/^dmx-/i, '');\r\n\r\n if (tagName in dmx.__components) {\r\n node.isComponent = true;\r\n if (!node.dmxRendered) {\r\n this.$createChild(tagName, node);\r\n } else if (window.__WAPPLER__) {\r\n // This breaks some components in design view\r\n // causes flows to trigger constantly\r\n // components ofter have there own parsing and this breaks it\r\n if (node.dmxComponent && node.dmxComponent.$parse) {\r\n // for now ignode specific for flows with script tag\r\n if (!dmx.reIgnoreElement.test(node.tagName)) {\r\n node.dmxComponent.$parse();\r\n }\r\n }\r\n }\r\n return false;\r\n } else {\r\n console.warn('Unknown component found! ' + tagName);\r\n return;\r\n }\r\n }\r\n\r\n this.$customAttributes('mounted', node, attributes);\r\n }\r\n\r\n // Text Node\r\n if (node.nodeType === 3) {\r\n this.$parseTextNode(node);\r\n }\r\n },\r\n this\r\n );\r\n },\r\n\r\n $update: function (idents) {\r\n console.warn('Component.$update is deprecated.');\r\n },\r\n\r\n $parseAttributes: function (node) {\r\n const toKebabCase = (s) => s.replace(/[A-Z]/g, (c) => '-' + c.toLowerCase());\r\n\r\n if (!this.attributes) {\r\n return;\r\n }\r\n\r\n for (const name in this.attributes) {\r\n const opts = this.attributes[name];\r\n if (!opts) {\r\n continue;\r\n }\r\n const attrName = toKebabCase(name);\r\n\r\n const hasDefault = Object.prototype.hasOwnProperty.call(opts, 'default');\r\n let value = hasDefault ? dmx.clone(opts.default) : undefined;\r\n\r\n // static\r\n if (node.hasAttribute(attrName)) {\r\n if (opts.type === Boolean) {\r\n value = node.getAttribute(attrName) !== 'false';\r\n } else {\r\n value = node.getAttribute(attrName);\r\n\r\n if (opts.type === Number) {\r\n // Only set number is a valid number is given\r\n if (value && isFinite(Number(value))) {\r\n value = Number(value);\r\n }\r\n }\r\n\r\n if (opts.type === Object || opts.type === Array) {\r\n try {\r\n value = JSON.parse(value);\r\n } catch (err) {\r\n console.warn('Invalid attribute value, expected a JSON string got ' + value);\r\n }\r\n }\r\n\r\n if (opts.enum && !opts.enum.includes(value)) {\r\n value = hasDefault ? dmx.clone(opts.default) : value;\r\n }\r\n\r\n if (opts.validate && !opts.validate(value)) {\r\n value = hasDefault ? dmx.clone(opts.default) : value;\r\n }\r\n }\r\n\r\n this.props[name] = value;\r\n //opts.default = value;\r\n }\r\n\r\n // dynamic\r\n if (node.hasAttribute('dmx-bind:' + attrName)) {\r\n const expression = node.getAttribute('dmx-bind:' + attrName);\r\n\r\n this.$watch(expression, (value) => {\r\n if (value === undefined) {\r\n value = hasDefault ? dmx.clone(opts.default) : value;\r\n } else if (opts.type === Boolean) {\r\n value = !!value;\r\n } else {\r\n if (value != null) {\r\n if (opts.type === Number) {\r\n if (typeof value === 'string') {\r\n if (value && isFinite(Number(value))) {\r\n value = Number(value);\r\n } else {\r\n value = hasDefault ? dmx.clone(opts.default) : value;\r\n }\r\n } else if (typeof value !== 'number' || !isFinite(Number(value))) {\r\n value = hasDefault ? dmx.clone(opts.default) : value;\r\n }\r\n }\r\n\r\n if (opts.type === String) {\r\n value = String(value);\r\n }\r\n\r\n if (opts.type === Object && typeof value !== 'object') {\r\n value = hasDefault ? dmx.clone(opts.default) : value;\r\n }\r\n\r\n if (opts.type === Array) {\r\n value = Array.from(value);\r\n }\r\n }\r\n\r\n if (opts.enum && !opts.enum.includes(value)) {\r\n value = hasDefault ? dmx.clone(opts.default) : value;\r\n }\r\n\r\n if (opts.validate && !opts.validate(value)) {\r\n value = hasDefault ? dmx.clone(opts.default) : value;\r\n }\r\n }\r\n\r\n this.props[name] = value;\r\n }, {\r\n node,\r\n attribute: 'dmx-bind:' + attrName,\r\n type: 'attribute',\r\n });\r\n } else if (hasDefault || value !== undefined) {\r\n this.props[name] = value;\r\n }\r\n }\r\n\r\n for (const event in this.events) {\r\n if (node.hasAttribute('on' + event)) {\r\n this.__disposables.push(dmx.eventListener(this, event, Function('event', node.getAttribute('on' + event)), {}));\r\n }\r\n }\r\n\r\n dmx.dom.getAttributes(node).forEach((attr) => {\r\n if (attr.name == 'on' && this.events[attr.argument]) {\r\n this.__disposables.push(dmx.eventListener(\r\n this,\r\n attr.argument,\r\n (event) => {\r\n if (event.originalEvent) {\r\n event = event.originalEvent;\r\n }\r\n\r\n var returnValue = dmx.parse(\r\n attr.value,\r\n dmx.DataScope(\r\n {\r\n $event: event.$data,\r\n $originalEvent: event,\r\n },\r\n this\r\n ),\r\n {\r\n component: this,\r\n node,\r\n attribute: attr.fullName,\r\n type: 'event',\r\n description: `dmx-on:${attr.argument}`,\r\n }\r\n );\r\n\r\n return returnValue;\r\n },\r\n attr.modifiers\r\n ));\r\n }\r\n });\r\n },\r\n\r\n requestUpdate: function (prop, oldValue) {\r\n //console.log(`request Update ${this.name} (${prop}: ${oldValue} => ${this.prop})`);\r\n if (!this.performUpdate) return;\r\n\r\n if (!this.updatedProps.has(prop)) {\r\n this.updatedProps.set(prop, oldValue);\r\n }\r\n\r\n if (!this.updateRequested) {\r\n //console.log('queue Microtask', this.name, this.updateRequested);\r\n //queueMicrotask(() => {\r\n dmx.nextTick(() => {\r\n //console.log('exec Microtask', this.name, this.updateRequested);\r\n if (this.isDestroyed) return;\r\n this.updateRequested = false;\r\n this.performUpdate(this.updatedProps);\r\n this.updatedProps.clear();\r\n });\r\n }\r\n\r\n this.updateRequested = true;\r\n },\r\n\r\n $initialData: function () {\r\n Object.assign(\r\n this.data,\r\n { $type: this.type },\r\n typeof this.initialData == 'function' ? this.initialData() : this.initialData\r\n );\r\n\r\n Object.keys(this.methods).forEach(function (method) {\r\n var self = this;\r\n this.data['__' + method] = function () {\r\n return self.methods[method].apply(self, Array.prototype.slice.call(arguments, 1));\r\n };\r\n }, this);\r\n },\r\n\r\n // alias for $watch\r\n $addBinding: function (expression, cb) {\r\n this.$watch(expression, cb);\r\n },\r\n\r\n $watch: function (expression, cb, options) {\r\n const prop = this.__inChild ? '__childDisposables' : '__disposables';\r\n if (!this[prop]) this[prop] = [];\r\n let init = true;\r\n const context = Object.assign({ component: this, expression }, options || {});\r\n\r\n const evaluate = (phase) => {\r\n try {\r\n const value = this.parse(expression, context);\r\n return value;\r\n } catch (error) {\r\n const hasErrorsApi = dmx.errors && typeof dmx.errors === 'object';\r\n const ExpressionErrorCtor = hasErrorsApi && dmx.errors.ExpressionError;\r\n const FormatterErrorCtor = hasErrorsApi && dmx.errors.FormatterError;\r\n const isFormatterError = FormatterErrorCtor && error instanceof FormatterErrorCtor;\r\n\r\n if (isFormatterError) {\r\n throw error;\r\n }\r\n\r\n const isExpressionError = error && (error.name === 'ExpressionError' || (ExpressionErrorCtor && error instanceof ExpressionErrorCtor));\r\n\r\n if (!isExpressionError) {\r\n throw error;\r\n }\r\n\r\n const strict = options && options.strict;\r\n const throwErrorsEnabled = !!(dmx && dmx.config && dmx.config.throwErrors);\r\n\r\n if (strict || throwErrorsEnabled) {\r\n throw error;\r\n }\r\n\r\n if (typeof this._captureExpressionError === 'function') {\r\n try {\r\n this._captureExpressionError(error);\r\n } catch (captureErr) {\r\n if (console && console.warn) {\r\n console.warn('Failed to capture expression error', captureErr);\r\n }\r\n }\r\n }\r\n\r\n const shouldLogExpressionError = !(\r\n dmx &&\r\n dmx.config &&\r\n dmx.config.logExpressionErrors === false\r\n );\r\n\r\n if (shouldLogExpressionError && console && console.error && (!options || options.log !== false)) {\r\n console.error(error.message || error, error.details || error.originalError || undefined);\r\n }\r\n\r\n return undefined;\r\n }\r\n };\r\n\r\n this[prop].push(\r\n dmx.effect(() => {\r\n if (init) {\r\n cb.call(this, evaluate('init'));\r\n init = false;\r\n } else {\r\n const value = evaluate('update');\r\n queueMicrotask(() => {\r\n cb.call(this, value);\r\n });\r\n }\r\n })\r\n );\r\n },\r\n\r\n _captureExpressionError: function (error) {\r\n this.lastExpressionError = error;\r\n this.lastExpressionErrorAt = Date.now();\r\n },\r\n\r\n $destroy: function () {\r\n this.dispatchEvent('destroy');\r\n this.beforeDestroy();\r\n this.destroy();\r\n this.isDestroyed = true;\r\n if (this.parent && this.parent.$removeChild) {\r\n this.parent.$removeChild(this);\r\n }\r\n this.$destroyChildren();\r\n this.__disposables.forEach((dispose) => dispose());\r\n this.__disposables = [];\r\n if (this.$node) {\r\n this.$node.dmxComponent = null;\r\n this.$node = null;\r\n }\r\n this.parent = null;\r\n this.data = {};\r\n this.destroyed();\r\n },\r\n\r\n $destroyChildren: function () {\r\n Array.from(this.children).forEach((child) => {\r\n child.$destroy();\r\n });\r\n this.children = [];\r\n\r\n this.__childDisposables.forEach((dispose) => dispose());\r\n this.__childDisposables = [];\r\n },\r\n\r\n get: function (name, ignoreParents) {\r\n if (this.data[name] !== undefined) {\r\n return this.data[name];\r\n }\r\n\r\n if (this.parent && ignoreParents !== true) {\r\n if (name == 'parent') {\r\n return this.parent.data;\r\n }\r\n\r\n return this.parent.get(name);\r\n }\r\n\r\n return undefined;\r\n },\r\n\r\n add: function (name, value) {\r\n if (this.data[name]) {\r\n if (Array.isArray(this.data[name])) {\r\n this.data[name].push(value);\r\n } else {\r\n this.data[name] = [this.data[name], value];\r\n }\r\n } else {\r\n this.set(name, value);\r\n }\r\n },\r\n\r\n set: function (name, value) {\r\n if (typeof name == 'object') {\r\n dmx.batch(() => {\r\n for (var prop in name) {\r\n if (name.hasOwnProperty(prop)) {\r\n this.set(prop, name[prop]);\r\n }\r\n }\r\n });\r\n } else {\r\n this.data[name] = value;\r\n }\r\n },\r\n\r\n del: function (name) {\r\n delete this.data[name];\r\n },\r\n});\r\n","(function() {\r\n\r\n/**\r\n * Expose `pathToRegexp`.\r\n */\r\ndmx.pathToRegexp = pathToRegexp\r\ndmx.pathToRegexp.parse = parse\r\ndmx.pathToRegexp.compile = compile\r\ndmx.pathToRegexp.tokensToFunction = tokensToFunction\r\ndmx.pathToRegexp.tokensToRegExp = tokensToRegExp\r\n\r\n/**\r\n * Default configs.\r\n */\r\nvar DEFAULT_DELIMITER = '/'\r\n\r\n/**\r\n * The main path matching regexp utility.\r\n *\r\n * @type {RegExp}\r\n */\r\nvar PATH_REGEXP = new RegExp([\r\n // Match escaped characters that would otherwise appear in future matches.\r\n // This allows the user to escape special characters that won't transform.\r\n '(\\\\\\\\.)',\r\n // Match Express-style parameters and un-named parameters with a prefix\r\n // and optional suffixes. Matches appear as:\r\n //\r\n // \":test(\\\\d+)?\" => [\"test\", \"\\d+\", undefined, \"?\"]\r\n // \"(\\\\d+)\" => [undefined, undefined, \"\\d+\", undefined]\r\n '(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?'\r\n].join('|'), 'g')\r\n\r\n/**\r\n * Parse a string for the raw tokens.\r\n *\r\n * @param {string} str\r\n * @param {Object=} options\r\n * @return {!Array}\r\n */\r\nfunction parse (str, options) {\r\n var tokens = []\r\n var key = 0\r\n var index = 0\r\n var path = ''\r\n var defaultDelimiter = (options && options.delimiter) || DEFAULT_DELIMITER\r\n var whitelist = (options && options.whitelist) || undefined\r\n var pathEscaped = false\r\n var res\r\n\r\n while ((res = PATH_REGEXP.exec(str)) !== null) {\r\n var m = res[0]\r\n var escaped = res[1]\r\n var offset = res.index\r\n path += str.slice(index, offset)\r\n index = offset + m.length\r\n\r\n // Ignore already escaped sequences.\r\n if (escaped) {\r\n path += escaped[1]\r\n pathEscaped = true\r\n continue\r\n }\r\n\r\n var prev = ''\r\n var name = res[2]\r\n var capture = res[3]\r\n var group = res[4]\r\n var modifier = res[5]\r\n\r\n if (!pathEscaped && path.length) {\r\n var k = path.length - 1\r\n var c = path[k]\r\n var matches = whitelist ? whitelist.indexOf(c) > -1 : true\r\n\r\n if (matches) {\r\n prev = c\r\n path = path.slice(0, k)\r\n }\r\n }\r\n\r\n // Push the current path onto the tokens.\r\n if (path) {\r\n tokens.push(path)\r\n path = ''\r\n pathEscaped = false\r\n }\r\n\r\n var repeat = modifier === '+' || modifier === '*'\r\n var optional = modifier === '?' || modifier === '*'\r\n var pattern = capture || group\r\n var delimiter = prev || defaultDelimiter\r\n\r\n tokens.push({\r\n name: name || key++,\r\n prefix: prev,\r\n delimiter: delimiter,\r\n optional: optional,\r\n repeat: repeat,\r\n pattern: pattern\r\n ? escapeGroup(pattern)\r\n : '[^' + escapeString(delimiter === defaultDelimiter ? delimiter : (delimiter + defaultDelimiter)) + ']+?'\r\n })\r\n }\r\n\r\n // Push any remaining characters.\r\n if (path || index < str.length) {\r\n tokens.push(path + str.substr(index))\r\n }\r\n\r\n return tokens\r\n}\r\n\r\n/**\r\n * Compile a string to a template function for the path.\r\n *\r\n * @param {string} str\r\n * @param {Object=} options\r\n * @return {!function(Object=, Object=)}\r\n */\r\nfunction compile (str, options) {\r\n return tokensToFunction(parse(str, options))\r\n}\r\n\r\n/**\r\n * Expose a method for transforming tokens into the path function.\r\n */\r\nfunction tokensToFunction (tokens) {\r\n // Compile all the tokens into regexps.\r\n var matches = new Array(tokens.length)\r\n\r\n // Compile all the patterns before compilation.\r\n for (var i = 0; i < tokens.length; i++) {\r\n if (typeof tokens[i] === 'object') {\r\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$')\r\n }\r\n }\r\n\r\n return function (data, options) {\r\n var path = ''\r\n var encode = (options && options.encode) || encodeURIComponent\r\n\r\n for (var i = 0; i < tokens.length; i++) {\r\n var token = tokens[i]\r\n\r\n if (typeof token === 'string') {\r\n path += token\r\n continue\r\n }\r\n\r\n var value = data ? data[token.name] : undefined\r\n var segment\r\n\r\n if (Array.isArray(value)) {\r\n if (!token.repeat) {\r\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but got array')\r\n }\r\n\r\n if (value.length === 0) {\r\n if (token.optional) continue\r\n\r\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\r\n }\r\n\r\n for (var j = 0; j < value.length; j++) {\r\n segment = encode(value[j], token)\r\n\r\n if (!matches[i].test(segment)) {\r\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\"')\r\n }\r\n\r\n path += (j === 0 ? token.prefix : token.delimiter) + segment\r\n }\r\n\r\n continue\r\n }\r\n\r\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\r\n segment = encode(String(value), token)\r\n\r\n if (!matches[i].test(segment)) {\r\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but got \"' + segment + '\"')\r\n }\r\n\r\n path += token.prefix + segment\r\n continue\r\n }\r\n\r\n if (token.optional) continue\r\n\r\n throw new TypeError('Expected \"' + token.name + '\" to be ' + (token.repeat ? 'an array' : 'a string'))\r\n }\r\n\r\n return path\r\n }\r\n}\r\n\r\n/**\r\n * Escape a regular expression string.\r\n *\r\n * @param {string} str\r\n * @return {string}\r\n */\r\nfunction escapeString (str) {\r\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, '\\\\$1')\r\n}\r\n\r\n/**\r\n * Escape the capturing group by escaping special characters and meaning.\r\n *\r\n * @param {string} group\r\n * @return {string}\r\n */\r\nfunction escapeGroup (group) {\r\n return group.replace(/([=!:$/()])/g, '\\\\$1')\r\n}\r\n\r\n/**\r\n * Get the flags for a regexp from the options.\r\n *\r\n * @param {Object} options\r\n * @return {string}\r\n */\r\nfunction flags (options) {\r\n return options && options.sensitive ? '' : 'i'\r\n}\r\n\r\n/**\r\n * Pull out keys from a regexp.\r\n *\r\n * @param {!RegExp} path\r\n * @param {Array=} keys\r\n * @return {!RegExp}\r\n */\r\nfunction regexpToRegexp (path, keys) {\r\n if (!keys) return path\r\n\r\n // Use a negative lookahead to match only capturing groups.\r\n var groups = path.source.match(/\\((?!\\?)/g)\r\n\r\n if (groups) {\r\n for (var i = 0; i < groups.length; i++) {\r\n keys.push({\r\n name: i,\r\n prefix: null,\r\n delimiter: null,\r\n optional: false,\r\n repeat: false,\r\n pattern: null\r\n })\r\n }\r\n }\r\n\r\n return path\r\n}\r\n\r\n/**\r\n * Transform an array into a regexp.\r\n *\r\n * @param {!Array} path\r\n * @param {Array=} keys\r\n * @param {Object=} options\r\n * @return {!RegExp}\r\n */\r\nfunction arrayToRegexp (path, keys, options) {\r\n var parts = []\r\n\r\n for (var i = 0; i < path.length; i++) {\r\n parts.push(pathToRegexp(path[i], keys, options).source)\r\n }\r\n\r\n return new RegExp('(?:' + parts.join('|') + ')', flags(options))\r\n}\r\n\r\n/**\r\n * Create a path regexp from string input.\r\n *\r\n * @param {string} path\r\n * @param {Array=} keys\r\n * @param {Object=} options\r\n * @return {!RegExp}\r\n */\r\nfunction stringToRegexp (path, keys, options) {\r\n return tokensToRegExp(parse(path, options), keys, options)\r\n}\r\n\r\n/**\r\n * Expose a function for taking tokens and returning a RegExp.\r\n *\r\n * @param {!Array} tokens\r\n * @param {Array=} keys\r\n * @param {Object=} options\r\n * @return {!RegExp}\r\n */\r\nfunction tokensToRegExp (tokens, keys, options) {\r\n options = options || {}\r\n\r\n var strict = options.strict\r\n var start = options.start !== false\r\n var end = options.end !== false\r\n var delimiter = options.delimiter || DEFAULT_DELIMITER\r\n var endsWith = [].concat(options.endsWith || []).map(escapeString).concat('$').join('|')\r\n var route = start ? '^' : ''\r\n\r\n // Iterate over the tokens and create our regexp string.\r\n for (var i = 0; i < tokens.length; i++) {\r\n var token = tokens[i]\r\n\r\n if (typeof token === 'string') {\r\n route += escapeString(token)\r\n } else {\r\n var capture = token.repeat\r\n ? '(?:' + token.pattern + ')(?:' + escapeString(token.delimiter) + '(?:' + token.pattern + '))*'\r\n : token.pattern\r\n\r\n if (keys) keys.push(token)\r\n\r\n if (token.optional) {\r\n if (!token.prefix) {\r\n route += '(' + capture + ')?'\r\n } else {\r\n route += '(?:' + escapeString(token.prefix) + '(' + capture + '))?'\r\n }\r\n } else {\r\n route += escapeString(token.prefix) + '(' + capture + ')'\r\n }\r\n }\r\n }\r\n\r\n if (end) {\r\n if (!strict) route += '(?:' + escapeString(delimiter) + ')?'\r\n\r\n route += endsWith === '$' ? '$' : '(?=' + endsWith + ')'\r\n } else {\r\n var endToken = tokens[tokens.length - 1]\r\n var isEndDelimited = typeof endToken === 'string'\r\n ? endToken[endToken.length - 1] === delimiter\r\n : endToken === undefined\r\n\r\n if (!strict) route += '(?:' + escapeString(delimiter) + '(?=' + endsWith + '))?'\r\n if (!isEndDelimited) route += '(?=' + escapeString(delimiter) + '|' + endsWith + ')'\r\n }\r\n\r\n return new RegExp(route, flags(options))\r\n}\r\n\r\n/**\r\n * Normalize the given path string, returning a regular expression.\r\n *\r\n * An empty array can be passed in for the keys, which will hold the\r\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\r\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\r\n *\r\n * @param {(string|RegExp|Array)} path\r\n * @param {Array=} keys\r\n * @param {Object=} options\r\n * @return {!RegExp}\r\n */\r\nfunction pathToRegexp (path, keys, options) {\r\n if (path instanceof RegExp) {\r\n return regexpToRegexp(path, keys)\r\n }\r\n\r\n if (Array.isArray(path)) {\r\n return arrayToRegexp(/** @type {!Array} */ (path), keys, options)\r\n }\r\n\r\n return stringToRegexp(/** @type {string} */ (path), keys, options)\r\n}\r\n\r\n})();\r\n","if (!window.Hjson) {\r\n window.Hjson = {};\r\n\r\n window.Hjson.parse = function(source) {\r\n // only parse, stripped dsf and comment support\r\n\r\n var text;\r\n var at; // The index of the current character\r\n var ch; // The current character\r\n var escapee = {\r\n '\"': '\"',\r\n \"'\": \"'\",\r\n '\\\\': '\\\\',\r\n '/': '/',\r\n b: '\\b',\r\n f: '\\f',\r\n n: '\\n',\r\n r: '\\r',\r\n t: '\\t'\r\n };\r\n\r\n function stripMultilineIndent(content) {\r\n if (!content) return content;\r\n\r\n var lines = content.split('\\n');\r\n var minIndent = null;\r\n\r\n for (var i = 0; i < lines.length; i++) {\r\n var line = lines[i];\r\n if (!line.trim()) continue;\r\n\r\n var match = line.match(/^[ \\t]*/);\r\n var indentLength = match ? match[0].length : 0;\r\n\r\n if (minIndent === null || indentLength < minIndent) {\r\n minIndent = indentLength;\r\n }\r\n }\r\n\r\n if (!minIndent) return content;\r\n\r\n for (var j = 0; j < lines.length; j++) {\r\n var current = lines[j];\r\n if (!current.trim()) {\r\n lines[j] = '';\r\n continue;\r\n }\r\n var sliceIndex = Math.min(minIndent, current.length);\r\n lines[j] = current.slice(sliceIndex);\r\n }\r\n\r\n return lines.join('\\n');\r\n }\r\n\r\n function resetAt() {\r\n at = 0;\r\n ch = ' ';\r\n }\r\n\r\n function isPunctuatorChar(c) {\r\n return c === '{' || c === '}' || c === '[' || c === ']' || c === ',' || c === ':';\r\n }\r\n\r\n // Call error when something is wrong.\r\n function error(m) {\r\n var i, col=0, line=1;\r\n for (i = at-1; i > 0 && text[i] !== '\\n'; i--, col++) {}\r\n for (; i > 0; i--) if (text[i] === '\\n') line++;\r\n throw new Error(m + \" at line \" + line + \",\" + col + \" >>>\" + text.substr(at-col, 20) + \" ...\");\r\n }\r\n\r\n function next() {\r\n // get the next character.\r\n ch = text.charAt(at);\r\n at++;\r\n return ch;\r\n }\r\n\r\n function peek(offs) {\r\n // range check is not required\r\n return text.charAt(at + offs);\r\n }\r\n\r\n function peekNonWhitespace(offs) {\r\n var idx = offs || 0;\r\n var c = text.charAt(at + idx);\r\n\r\n while (c && c <= ' ' && c !== '\\n' && c !== '\\r') {\r\n idx++;\r\n c = text.charAt(at + idx);\r\n }\r\n\r\n return c;\r\n }\r\n\r\n function string(allowML) {\r\n // Parse a string value.\r\n // callers make sure that (ch === '\"' || ch === \"'\")\r\n var string = '';\r\n\r\n // When parsing for string values, we must look for \"/' and \\ characters.\r\n var exitCh = ch;\r\n while (next()) {\r\n if (ch === exitCh) {\r\n next();\r\n if (allowML && exitCh === \"'\" && ch === \"'\" && string.length === 0) {\r\n // ''' indicates a multiline string\r\n next();\r\n return mlString();\r\n } else return string;\r\n }\r\n if (ch === '\\\\') {\r\n next();\r\n if (ch === 'u') {\r\n var uffff = 0;\r\n for (var i = 0; i < 4; i++) {\r\n next();\r\n var c = ch.charCodeAt(0), hex;\r\n if (ch >= '0' && ch <= '9') hex = c - 48;\r\n else if (ch >= 'a' && ch <= 'f') hex = c - 97 + 0xa;\r\n else if (ch >= 'A' && ch <= 'F') hex = c - 65 + 0xa;\r\n else error(\"Bad \\\\u char \" + ch);\r\n uffff = uffff * 16 + hex;\r\n }\r\n string += String.fromCharCode(uffff);\r\n } else if (typeof escapee[ch] === 'string') {\r\n string += escapee[ch];\r\n } else break;\r\n } else if (ch === '\\n' || ch === '\\r') {\r\n error(\"Bad string containing newline\");\r\n } else {\r\n string += ch;\r\n }\r\n }\r\n error(\"Bad string\");\r\n }\r\n\r\n function mlString() {\r\n // Parse a multiline string value.\r\n var string = '', triple = 0;\r\n\r\n // we are at ''' +1 - get indent\r\n var indent = 0;\r\n for (;;) {\r\n var c=peek(-indent-5);\r\n if (!c || c === '\\n') break;\r\n indent++;\r\n }\r\n\r\n function skipIndent() {\r\n var skip = indent;\r\n while (ch && ch <= ' ' && ch !== '\\n' && skip-- > 0) next();\r\n }\r\n\r\n // skip white/to (newline)\r\n while (ch && ch <= ' ' && ch !== '\\n') next();\r\n if (ch === '\\n') { next(); skipIndent(); }\r\n\r\n // When parsing multiline string values, we must look for ' characters.\r\n for (;;) {\r\n if (!ch) {\r\n error(\"Bad multiline string\");\r\n } else if (ch === '\\'') {\r\n triple++;\r\n next();\r\n if (triple === 3) {\r\n string = stripMultilineIndent(string);\r\n if (string.slice(-1) === '\\n') string=string.slice(0, -1); // remove last EOL\r\n return string;\r\n } else continue;\r\n } else {\r\n while (triple > 0) {\r\n string += '\\'';\r\n triple--;\r\n }\r\n }\r\n if (ch === '\\n') {\r\n string += '\\n';\r\n next();\r\n skipIndent();\r\n } else {\r\n if (ch !== '\\r') string += ch;\r\n next();\r\n }\r\n }\r\n }\r\n\r\n function keyname() {\r\n // quotes for keys are optional in Hjson\r\n // unless they include {}[],: or whitespace.\r\n\r\n if (ch === '\"' || ch === \"'\") return string(false);\r\n\r\n var name = \"\", start = at, space = -1;\r\n for (;;) {\r\n if (ch === ':') {\r\n if (!name) error(\"Found ':' but no key name (for an empty key name use quotes)\");\r\n else if (space >=0 && space !== name.length) { at = start + space; error(\"Found whitespace in your key name (use quotes to include)\"); }\r\n return name;\r\n } else if (ch <= ' ') {\r\n if (!ch) error(\"Found EOF while looking for a key name (check your syntax)\");\r\n else {\r\n if (space < 0) space = name.length;\r\n var idx = 0;\r\n var foundColon = false;\r\n var firstNonWhitespace = null;\r\n var nextChar;\r\n while ((nextChar = text.charAt(at + idx))) {\r\n if (nextChar > ' ' || nextChar === '\\n' || nextChar === '\\r') {\r\n if (firstNonWhitespace === null && nextChar > ' ') {\r\n firstNonWhitespace = nextChar;\r\n }\r\n if (nextChar === ':') {\r\n foundColon = true;\r\n break;\r\n }\r\n if (nextChar === '\\n' || nextChar === '\\r' || isPunctuatorChar(nextChar)) {\r\n break;\r\n }\r\n }\r\n idx++;\r\n }\r\n if (!foundColon) {\r\n var errChar = firstNonWhitespace || nextChar || '';\r\n error(\"Expected ':' instead of '\" + errChar + \"'\");\r\n }\r\n }\r\n } else if (isPunctuatorChar(ch)) {\r\n error(\"Found '\" + ch + \"' where a key name was expected (check your syntax or use quotes if the key name includes {}[],: or whitespace)\");\r\n } else {\r\n name += ch;\r\n }\r\n next();\r\n }\r\n }\r\n\r\n function white() {\r\n while (ch) {\r\n // Skip whitespace.\r\n while (ch && ch <= ' ') next();\r\n // Hjson allows comments\r\n if (ch === '#' || ch === '/' && peek(0) === '/') {\r\n while (ch && ch !== '\\n' && ch !== ']' && ch !== '}') next();\r\n } else if (ch === '/' && peek(0) === '*') {\r\n next(); next();\r\n while (ch && !(ch === '*' && peek(0) === '/')) next();\r\n if (ch) { next(); next(); }\r\n } else break;\r\n }\r\n }\r\n\r\n function tfnns() {\r\n // Hjson strings can be quoteless\r\n // returns string, true, false, or null.\r\n var value = ch;\r\n if (isPunctuatorChar(ch))\r\n error(\"Found a punctuator character '\" + ch + \"' when expecting a quoteless string (check your syntax)\");\r\n\r\n for(;;) {\r\n next();\r\n var isWhitespace = ch && ch <= ' ' && ch !== '\\n' && ch !== '\\r';\r\n // (detection of ml strings was moved to string())\r\n var isEol = ch === '\\r' || ch === '\\n' || ch === '';\r\n var commentStart = ch === '/' && (peek(0) === '/' || peek(0) === '*');\r\n if (commentStart && peek(0) === '/' && value.length) {\r\n var prevChar = value.charAt(value.length - 1);\r\n if (prevChar === ':') commentStart = false;\r\n }\r\n\r\n var isTerminator =\r\n isEol ||\r\n ch === ',' || ch === '}' || ch === ']' ||\r\n ch === '#' ||\r\n commentStart;\r\n if (isWhitespace) {\r\n var trimmedWs = value.trim();\r\n if (!trimmedWs) {\r\n value = trimmedWs;\r\n continue;\r\n }\r\n\r\n var nextSig = peekNonWhitespace(0);\r\n if (trimmedWs === \"true\" || trimmedWs === \"false\" || trimmedWs === \"null\") {\r\n if (!nextSig || nextSig === ',' || nextSig === '}' || nextSig === ']' || nextSig === '#' || nextSig === '/' || nextSig === '\\n' || nextSig === '\\r') {\r\n if (trimmedWs === \"true\") return true;\r\n if (trimmedWs === \"false\") return false;\r\n return null;\r\n }\r\n }\r\n\r\n var chfWs = trimmedWs[0];\r\n var isNumberCandidate = chfWs === '-' || chfWs >= '0' && chfWs <= '9';\r\n if (isNumberCandidate) {\r\n var num = tryParseNumber(trimmedWs, true);\r\n if (num !== undefined) return num;\r\n if (!nextSig || nextSig === ',' || nextSig === '}' || nextSig === ']' || nextSig === '#' || nextSig === '/' || nextSig === '\\n' || nextSig === '\\r') {\r\n return trimmedWs;\r\n }\r\n }\r\n\r\n value += ch;\r\n continue;\r\n }\r\n\r\n if (isTerminator) {\r\n // this tests for the case of {true|false|null|num}\r\n // followed by { ',' | '}' | ']' | '#' | '//' | '/*' }\r\n // which needs to be parsed as the specified value\r\n var trimmed = value.trim();\r\n var chf = trimmed[0];\r\n switch (chf) {\r\n case 'f': if (trimmed === \"false\") return false; break;\r\n case 'n': if (trimmed === \"null\") return null; break;\r\n case 't': if (trimmed === \"true\") return true; break;\r\n default:\r\n if (chf === '-' || chf >= '0' && chf <= '9') {\r\n var n = tryParseNumber(trimmed, true);\r\n if (n !== undefined) return n;\r\n }\r\n }\r\n return trimmed;\r\n }\r\n value += ch;\r\n }\r\n }\r\n\r\n function tryParseNumber(text, stopAtNext) {\r\n // try to parse a number\r\n\r\n var number, string = '', leadingZeros = 0, testLeading = true;\r\n var at = 0;\r\n var ch;\r\n function next() {\r\n ch = text.charAt(at);\r\n at++;\r\n return ch;\r\n }\r\n\r\n next();\r\n if (ch === '-') {\r\n string = '-';\r\n next();\r\n }\r\n while (ch >= '0' && ch <= '9') {\r\n if (testLeading) {\r\n if (ch == '0') leadingZeros++;\r\n else testLeading = false;\r\n }\r\n string += ch;\r\n next();\r\n }\r\n if (testLeading) leadingZeros--; // single 0 is allowed\r\n if (ch === '.') {\r\n string += '.';\r\n while (next() && ch >= '0' && ch <= '9')\r\n string += ch;\r\n }\r\n if (ch === 'e' || ch === 'E') {\r\n string += ch;\r\n next();\r\n if (ch === '-' || ch === '+') {\r\n string += ch;\r\n next();\r\n }\r\n while (ch >= '0' && ch <= '9') {\r\n string += ch;\r\n next();\r\n }\r\n }\r\n\r\n // skip white/to (newline)\r\n while (ch && ch <= ' ') next();\r\n\r\n if (stopAtNext) {\r\n // end scan if we find a punctuator character like ,}] or a comment\r\n if (ch === ',' || ch === '}' || ch === ']' ||\r\n ch === '#' || ch === '/' && (text[at] === '/' || text[at] === '*')) ch = 0;\r\n }\r\n\r\n number = +string;\r\n if (ch || leadingZeros || !isFinite(number)) return undefined;\r\n else return number;\r\n }\r\n\r\n function errorClosingHint(value) {\r\n function search(value, ch) {\r\n var i, k, length, res;\r\n switch (typeof value) {\r\n case 'string':\r\n if (value.indexOf(ch) >= 0) res = value;\r\n break;\r\n case 'object':\r\n if (Object.prototype.toString.apply(value) === '[object Array]') {\r\n for (i = 0, length = value.length; i < length; i++) {\r\n res=search(value[i], ch) || res;\r\n }\r\n } else {\r\n for (k in value) {\r\n if (!Object.prototype.hasOwnProperty.call(value, k)) continue;\r\n res=search(value[k], ch) || res;\r\n }\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n function report(ch) {\r\n var possibleErr=search(value, ch);\r\n if (possibleErr) {\r\n return \"found '\"+ch+\"' in a string value, your mistake could be with:\\n\"+\r\n \" > \"+possibleErr+\"\\n\"+\r\n \" (unquoted strings contain everything up to the next line!)\";\r\n } else return \"\";\r\n }\r\n\r\n return report('}') || report(']');\r\n }\r\n\r\n function array() {\r\n // Parse an array value.\r\n // assuming ch === '['\r\n\r\n var array = [];\r\n try {\r\n next();\r\n white();\r\n if (ch === ']') {\r\n next();\r\n return array; // empty array\r\n }\r\n\r\n while (ch) {\r\n array.push(value());\r\n white();\r\n // in Hjson the comma is optional and trailing commas are allowed\r\n // note that we do not keep comments before the , if there are any\r\n if (ch === ',') { next(); white(); }\r\n if (ch === ']') {\r\n next();\r\n return array;\r\n }\r\n white();\r\n }\r\n\r\n error(\"End of input while parsing an array (missing ']')\");\r\n } catch (e) {\r\n e.hint=e.hint||errorClosingHint(array);\r\n throw e;\r\n }\r\n }\r\n\r\n function object(withoutBraces) {\r\n // Parse an object value.\r\n\r\n var key = \"\", object = {};\r\n\r\n try {\r\n if (!withoutBraces) {\r\n // assuming ch === '{'\r\n next();\r\n }\r\n\r\n white();\r\n if (ch === '}' && !withoutBraces) {\r\n next();\r\n return object; // empty object\r\n }\r\n while (ch) {\r\n key = keyname();\r\n white();\r\n if (ch !== ':') error(\"Expected ':' instead of '\" + ch + \"'\");\r\n next();\r\n // duplicate keys overwrite the previous value\r\n object[key] = value();\r\n white();\r\n // in Hjson the comma is optional and trailing commas are allowed\r\n // note that we do not keep comments before the , if there are any\r\n if (ch === ',') { next(); white(); }\r\n if (ch === '}' && !withoutBraces) {\r\n next();\r\n return object;\r\n }\r\n white();\r\n }\r\n\r\n if (withoutBraces) return object;\r\n else error(\"End of input while parsing an object (missing '}')\");\r\n } catch (e) {\r\n e.hint=e.hint||errorClosingHint(object);\r\n throw e;\r\n }\r\n }\r\n\r\n function value() {\r\n // Parse a Hjson value. It could be an object, an array, a string, a number or a word.\r\n\r\n white();\r\n switch (ch) {\r\n case '{': return object();\r\n case '[': return array();\r\n case \"'\":\r\n case '\"': return string(true);\r\n default: return tfnns();\r\n }\r\n }\r\n\r\n function checkTrailing(v) {\r\n white();\r\n if (ch) error(\"Syntax error, found trailing characters\");\r\n return v;\r\n }\r\n\r\n function rootValue() {\r\n white();\r\n switch (ch) {\r\n case '{': return checkTrailing(object());\r\n case '[': return checkTrailing(array());\r\n default: return checkTrailing(value());\r\n }\r\n }\r\n\r\n if (typeof source!==\"string\") throw new Error(\"source is not a string\");\r\n text = source;\r\n resetAt();\r\n return rootValue();\r\n };\r\n}","dmx.Flow = dmx.createClass({\r\n constructor: function (parent) {\r\n if (!(this instanceof dmx.Flow)) {\r\n return new dmx.Flow(parent);\r\n }\r\n\r\n if (!window.Promise) {\r\n console.warn('Promises are not supported, flows can not be used');\r\n }\r\n\r\n this._execStep = this._execStep.bind(this);\r\n\r\n this.scope = new dmx.DataScope({}, parent);\r\n this.output = {};\r\n },\r\n\r\n run: function (flow) {\r\n this.output = {};\r\n\r\n return this._exec(flow.exec || flow).then(() => {\r\n if (dmx.debug) {\r\n console.debug('finished', this.output);\r\n }\r\n return this.output;\r\n });\r\n },\r\n\r\n _each: function (arr, fn) {\r\n return Promise.resolve(arr).then((arr) => {\r\n arr = Array.isArray(arr) ? arr : [arr];\r\n\r\n return arr\r\n .reduce((prev, curr, i) => {\r\n return prev.then(() => {\r\n return fn(curr, i, arr.length).then((result) => {\r\n if (result) {\r\n arr[i] = result;\r\n }\r\n });\r\n });\r\n }, Promise.resolve())\r\n .then(() => {\r\n return arr;\r\n });\r\n });\r\n },\r\n\r\n _exec: function (flow) {\r\n if (flow.steps) {\r\n var promise = this._each(flow.steps, this._execStep);\r\n\r\n if (flow.catch) {\r\n promise.catch((err) => {\r\n return this._each(flow.catch, self._execStep);\r\n });\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n return this._each(flow, this._execStep);\r\n },\r\n\r\n _execStep: function (step) {\r\n for (let name in step) {\r\n if (step.hasOwnProperty(name) && dmx.__actions[name]) {\r\n const action = dmx.__actions[name].bind(this);\r\n const options = step[name];\r\n const timerName = name + Date.now();\r\n\r\n if (dmx.debug) {\r\n console.debug('exec action', name, options);\r\n console.time(timerName);\r\n }\r\n\r\n if (options.disabled) {\r\n return Promise.resolve();\r\n }\r\n\r\n return Promise.resolve(action(options)).then((output) => {\r\n if (dmx.debug) {\r\n console.debug('finished exec action', name, options);\r\n console.timeEnd(timerName);\r\n }\r\n\r\n if (options.name) {\r\n if (dmx.debug) {\r\n console.debug('set data', options.name, output);\r\n }\r\n\r\n this.scope.set(options.name, output);\r\n\r\n if (options.output) {\r\n if (dmx.debug) {\r\n console.debug('set output', options.name, output);\r\n }\r\n this.output[options.name] = output;\r\n }\r\n }\r\n });\r\n } else {\r\n throw new Error('Action ' + name + ' was not found.');\r\n }\r\n }\r\n },\r\n\r\n parse: function (value) {\r\n if (value == null) return value;\r\n\r\n value = value.valueOf();\r\n\r\n if (typeof value == 'object') {\r\n var obj = value.slice ? [] : {};\r\n\r\n for (var key in value) {\r\n if (value.hasOwnProperty(key)) {\r\n obj[key] = this.parse(value[key]);\r\n }\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n if (typeof value == 'string' && value.indexOf('{{') != -1) {\r\n return dmx.parse(value, this.scope);\r\n }\r\n\r\n return value;\r\n },\r\n});\r\n\r\ndmx.Flow.run = function (flow, data) {\r\n var instance = new dmx.Flow(data);\r\n return instance.run(flow);\r\n};\r\n","dmx.Component(\"app\", {\r\n\r\n initialData: {\r\n query: {},\r\n },\r\n\r\n events: {\r\n ready: Event,\r\n load: Event,\r\n },\r\n\r\n init () {\r\n this.dispatchLoad = this.dispatchEvent.bind(this, \"load\");\r\n this._parseQuery = this._parseQuery.bind(this);\r\n\r\n // is this remove needed?\r\n window.addEventListener(\"load\", this.dispatchLoad, { once: true });\r\n window.addEventListener(\"load\", this._parseQuery);\r\n window.addEventListener(\"popstate\", this._parseQuery);\r\n window.addEventListener(\"pushstate\", this._parseQuery);\r\n window.addEventListener(\"replacestate\", this._parseQuery);\r\n\r\n this._parseQuery();\r\n\r\n queueMicrotask(() => this.dispatchEvent(\"ready\"));\r\n },\r\n\r\n destroy () {\r\n window.removeEventListener(\"load\", this.dispatchLoad);\r\n window.removeEventListener(\"load\", this._parseQuery);\r\n window.removeEventListener(\"popstate\", this._parseQuery);\r\n window.removeEventListener(\"pushstate\", this._parseQuery);\r\n window.removeEventListener(\"replacestate\", this._parseQuery);\r\n },\r\n\r\n _parseQuery () {\r\n let querystring = \"\";\r\n\r\n if (window.location.search) {\r\n querystring = window.location.search.slice(1);\r\n } else if (window.location.hash.indexOf(\"?\")) {\r\n querystring = window.location.hash.slice(\r\n window.location.hash.indexOf(\"?\") + 1\r\n );\r\n if (querystring.indexOf(\"#\") > 0) {\r\n querystring = querystring.slice(0, querystring.indexOf(\"#\"));\r\n }\r\n }\r\n\r\n let query = querystring.split(\"&\").reduce(function (query, part) {\r\n var p = part.replace(/\\+/g, \" \").split(\"=\");\r\n if (p[0]) {\r\n query[decodeURIComponent(p[0])] = decodeURIComponent(p[1] || \"\");\r\n }\r\n return query;\r\n }, {});\r\n\r\n let base = document.querySelector('meta[name=\"ac:base\"]');\r\n let route = document.querySelector('meta[name=\"ac:route\"]');\r\n if (route && route.content) {\r\n let keys = [];\r\n let path = route.content;\r\n\r\n if (base && base.content) {\r\n path = base.content.replace(/\\/$/, \"\") + path;\r\n }\r\n\r\n let re = dmx.pathToRegexp(path, keys, { end: false });\r\n let match = re.exec(decodeURI(window.location.pathname));\r\n\r\n if (match) {\r\n keys.forEach(function (key, index) {\r\n query[key.name] = match[index + 1];\r\n });\r\n }\r\n }\r\n\r\n this.set(\"query\", query);\r\n },\r\n\r\n});\r\n","dmx.Component('form', {\r\n\r\n attributes: {\r\n novalidate: {\r\n type: Boolean,\r\n default: false\r\n },\r\n },\r\n\r\n methods: {\r\n submit (direct) {\r\n this._submit(direct);\r\n },\r\n\r\n reset () {\r\n this._reset();\r\n },\r\n\r\n validate () {\r\n this._validate();\r\n },\r\n },\r\n\r\n events: {\r\n invalid: Event,\r\n submit: Event,\r\n },\r\n\r\n init (node) {\r\n this._submitHandler = this._submitHandler.bind(this);\r\n this._resetHandler = this._resetHandler.bind(this);\r\n\r\n node.noValidate = true;\r\n node.addEventListener('submit', this._submitHandler);\r\n node.addEventListener('reset', this._resetHandler);\r\n\r\n if (window.grecaptcha && this.$node.querySelector('.g-recaptcha[data-size=\"invisible\"]')) {\r\n node.querySelectorAll('.g-recaptcha').forEach((elm) => {\r\n elm.setAttribute('data-callback', '___cb' + String(this.seed).slice(2));\r\n });\r\n }\r\n },\r\n\r\n destroy () {\r\n this.$node.removeEventListener('submit', this._submitHandler);\r\n this.$node.removeEventListener('reset', this._resetHandler);\r\n },\r\n\r\n _submitHandler (event) {\r\n event.preventDefault();\r\n this._submit();\r\n },\r\n\r\n _resetHandler (event) {\r\n // remove this when validation is rewritten\r\n if (dmx.validateReset) dmx.validateReset(this.$node);\r\n if (window.grecaptcha && this.$node.querySelector('.g-recaptcha')) {\r\n if (typeof grecaptcha.reset === 'function') {\r\n grecaptcha.reset();\r\n }\r\n }\r\n },\r\n\r\n _submit (direct) {\r\n if (direct) {\r\n return this._formSubmit();\r\n }\r\n\r\n if (this.props.novalidate || this._validate()) {\r\n if (window.grecaptcha && this.$node.querySelector('.g-recaptcha[data-size=\"invisible\"]') && typeof grecaptcha.execute === 'function') {\r\n window['___cb' + String(this.seed).slice(2)] = () => {\r\n if (this.dispatchEvent('submit', { cancelable: true })) {\r\n this._formSubmit();\r\n }\r\n };\r\n grecaptcha.execute();\r\n } else {\r\n if (this.dispatchEvent('submit', { cancelable: true })) {\r\n this._formSubmit();\r\n }\r\n }\r\n } else {\r\n this.dispatchEvent('invalid');\r\n this._focusFirstInvalid();\r\n }\r\n },\r\n\r\n _reset () {\r\n this._formReset();\r\n },\r\n\r\n _validate () {\r\n if (dmx.validate) return dmx.validate(this.$node);\r\n Array.from(this.$node.elements).forEach(node => node.dirty = true);\r\n return this.$node.checkValidity();\r\n },\r\n\r\n _formSubmit () {\r\n HTMLFormElement.prototype.submit.call(this.$node);\r\n },\r\n\r\n _formReset () {\r\n HTMLFormElement.prototype.reset.call(this.$node);\r\n },\r\n\r\n _focusFirstInvalid () {\r\n const elm = Array.from(this.$node.elements).find(elm => !elm.validity.valid);\r\n if (elm) elm.focus();\r\n },\r\n\r\n _parseJsonForm () {\r\n const result = {};\r\n\r\n for (const element of this.$node.elements) {\r\n if (element.name && !element.disabled) {\r\n const steps = parseSteps(element.name.replace(/\\[\\]$/, \"\"));\r\n let context = result;\r\n\r\n for (const step of steps) {\r\n const type = element.type;\r\n\r\n if (type == \"number\") {\r\n if (element.value) {\r\n context = setValue(\r\n context,\r\n step,\r\n context[step.key],\r\n +element.value\r\n );\r\n }\r\n } else if (type == \"radio\" || type == \"checkbox\") {\r\n if (element.getAttribute(\"value\")) {\r\n if (element.checked) {\r\n context = setValue(\r\n context,\r\n step,\r\n context[step.key],\r\n element.value\r\n );\r\n }\r\n } else {\r\n context = setValue(\r\n context,\r\n step,\r\n context[step.key],\r\n element.checked\r\n );\r\n }\r\n } else if (type == \"select-multiple\") {\r\n context = setValue(\r\n context,\r\n step,\r\n context[step.key],\r\n Array.from(element.selectedOptions).map((opt) => opt.value)\r\n );\r\n } else {\r\n context = setValue(context, step, context[step.key], element.value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n\r\n function parseSteps(name) {\r\n const steps = [],\r\n org = name;\r\n const re = /^\\[([^\\]]*)\\]/;\r\n const reNumeric = /^\\d+$/;\r\n\r\n name = name.replace(/^([^\\[]+)/, (m, p1) => {\r\n steps.push({ type: \"object\", key: p1 });\r\n return \"\";\r\n });\r\n\r\n if (!name) {\r\n steps[0].last = true;\r\n return steps;\r\n }\r\n\r\n while (name) {\r\n if (re.test(name)) {\r\n name = name.replace(re, (m, p1) => {\r\n if (!p1) {\r\n steps[steps.length - 1].append = true;\r\n } else if (reNumeric.test(p1)) {\r\n steps.push({ type: \"array\", key: +p1 });\r\n } else {\r\n steps.push({ type: \"object\", key: p1 });\r\n }\r\n\r\n return \"\";\r\n });\r\n\r\n continue;\r\n }\r\n\r\n return { type: \"object\", key: org, last: true };\r\n }\r\n\r\n for (let i = 0, n = steps.length; i < n; i++) {\r\n const step = steps[i];\r\n\r\n if (i + 1 < n) step.nextType = steps[i + 1].type;\r\n else step.last = true;\r\n }\r\n\r\n return steps;\r\n }\r\n\r\n function setValue(context, step, current, value) {\r\n if (step.last) {\r\n if (current === undefined) {\r\n context[step.key] = step.append ? [value] : value;\r\n } else if (Array.isArray(current)) {\r\n context[step.key].push(value);\r\n } else if (typeof current == \"object\") {\r\n return setValue(\r\n current,\r\n { type: \"object\", key: \"\", last: true },\r\n current[\"\"],\r\n value\r\n );\r\n } else {\r\n context[step.key] = [current, value];\r\n }\r\n\r\n return context;\r\n }\r\n\r\n if (current === undefined) {\r\n return (context[step.key] = step.nextType == \"array\" ? [] : {});\r\n } else if (Array.isArray(current)) {\r\n if (step.nextType == \"array\") return current;\r\n const obj = {};\r\n for (let i = 0, n = current.length; i < n; i++) {\r\n if (current[i] !== undefined) obj[i] = current[i];\r\n }\r\n return (context[step.key] = obj);\r\n } else if (typeof current == \"object\") {\r\n return context[step.key];\r\n }\r\n\r\n return (context[step.key] = { \"\": current });\r\n }\r\n },\r\n\r\n});\r\n","dmx.Component('form-element', {\r\n\r\n initialData: {\r\n disabled: false,\r\n focused: false,\r\n invalid: false,\r\n validationMessage: '',\r\n value: '',\r\n },\r\n\r\n attributes: {\r\n value: {\r\n type: String,\r\n default: '',\r\n alwaysUpdate: true,\r\n },\r\n\r\n disabled: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n\r\n methods: {\r\n setValue (value) {\r\n this._setValue(value);\r\n },\r\n\r\n focus () {\r\n this._focus();\r\n },\r\n\r\n disable (disable) {\r\n this._disable(disable);\r\n },\r\n\r\n validate () {\r\n this._validate();\r\n },\r\n },\r\n\r\n events: {\r\n updated: Event,\r\n changed: Event,\r\n },\r\n\r\n init (node) {\r\n this._inputHandler = this._inputHandler.bind(this);\r\n this._changeHandler = this._changeHandler.bind(this);\r\n this._invalidHandler = this._invalidHandler.bind(this);\r\n this._resetHandler = this._resetHandler.bind(this);\r\n this._focusHandler = this._focusHandler.bind(this);\r\n this._blurHandler = this._blurHandler.bind(this);\r\n\r\n node.value = this.props.value || '';\r\n node.defaultValue = node.value ;\r\n \r\n node.addEventListener('input', this._inputHandler);\r\n node.addEventListener('change', this._changeHandler);\r\n node.addEventListener('invalid', this._invalidHandler);\r\n node.addEventListener('focus', this._focusHandler);\r\n node.addEventListener('blur', this._blurHandler);\r\n \r\n if (node.form) {\r\n this._form = node.form;\r\n this._form.addEventListener('reset', this._resetHandler);\r\n }\r\n\r\n if (this.props.disabled) {\r\n this._disable(this.props.disabled);\r\n }\r\n \r\n this.set('value', this.props.value);\r\n if (this.$node === document.activeElement) {\r\n this.set('focused', true);\r\n }\r\n },\r\n\r\n destroy () {\r\n this.$node.removeEventListener('input', this._inputHandler);\r\n this.$node.removeEventListener('change', this._changeHandler);\r\n this.$node.removeEventListener('invalid', this._invalidHandler);\r\n this.$node.removeEventListener('focus', this._focusHandler);\r\n this.$node.removeEventListener('blur', this._blurHandler);\r\n if (this._form) {\r\n this._form.removeEventListener('reset', this._resetHandler);\r\n this._form = null;\r\n }\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n if (updatedProps.has('value')) {\r\n this._setValue(this.props.value, true);\r\n }\r\n\r\n if (updatedProps.has('disabled')) {\r\n this._disable(this.props.disabled);\r\n }\r\n },\r\n\r\n _setValue (value, defaultValue) {\r\n this.$node.value = value || '';\r\n if (defaultValue) this.$node.defaultValue = value || '';\r\n if (this.data.value !== this.$node.value) {\r\n this.set('value', this.$node.value);\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n }\r\n },\r\n\r\n _focus () {\r\n this.$node.focus();\r\n },\r\n\r\n _disable (disable) {\r\n this.$node.disabled = disable;\r\n this.set('disabled', this.$node.disabled);\r\n },\r\n\r\n _validate () {\r\n dmx.validate(this.$node);\r\n\r\n if (this.$node.dirty) {\r\n this.set({\r\n invalid: !this.$node.validity.valid,\r\n validationMessage: this.$node.validationMessage,\r\n });\r\n }\r\n },\r\n\r\n _inputHandler (event) {\r\n if (this.$node.dirty) this._validate();\r\n\r\n dmx.nextTick(() => {\r\n if (!this.$node) return;\r\n if (this.data.value !== this.$node.value) {\r\n this.set('value', this.$node.value);\r\n if (event) this.dispatchEvent('changed');\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n }\r\n });\r\n },\r\n\r\n _changeHandler (event) {\r\n if (this.$node.dirty) this._validate();\r\n\r\n dmx.nextTick(() => {\r\n if (!this.$node) return;\r\n if (this.data.value !== this.$node.value) {\r\n this.set('value', this.$node.value);\r\n if (event) this.dispatchEvent('changed');\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n }\r\n });\r\n },\r\n\r\n _invalidHandler (event) {\r\n this.set({\r\n invalid: !this.$node.validity.valid,\r\n validationMessage: this.$node.validationMessage,\r\n });\r\n },\r\n\r\n _resetHandler (event) {\r\n if (!this.$node) return;\r\n this.$node.dirty = false;\r\n this.set({\r\n invalid: false,\r\n validationMessage: '',\r\n });\r\n this._changeHandler(event);\r\n },\r\n\r\n _focusHandler (event) {\r\n this.set('focused', true);\r\n },\r\n\r\n _blurHandler (event) {\r\n this.set('focused', false);\r\n },\r\n\r\n});\r\n","dmx.Component('textarea', {\r\n\r\n extends: 'form-element',\r\n\r\n init (node) {\r\n if (!this.props.value) {\r\n const value = this.$node.value;\r\n this.props.value = value.includes('{{') ? this.parse(value) : value;\r\n }\r\n\r\n dmx.Component('form-element').prototype.init.call(this, node);\r\n },\r\n\r\n});\r\n","dmx.Component('input', { extends: 'form-element' });\r\n","dmx.Component('input-file', {\r\n\r\n extends: 'form-element',\r\n\r\n attributes: {\r\n imageMaxWidth: {\r\n type: Number,\r\n default: null,\r\n },\r\n\r\n imageMaxHeight: {\r\n type: Number,\r\n default: null,\r\n },\r\n\r\n imageType: {\r\n type: String,\r\n default: null, // defaults to original image format\r\n enum: ['png', 'jpeg', 'webp'],\r\n },\r\n\r\n imageQuality: {\r\n type: Number,\r\n default: null,\r\n },\r\n },\r\n\r\n initialData: {\r\n file: null,\r\n },\r\n\r\n _imageTypes: {\r\n png: 'image/png', \r\n jpeg: 'image/jpeg',\r\n webp: 'image/webp',\r\n 'image/png': 'image/png',\r\n 'image/jpeg': 'image/jpeg',\r\n 'image/webp': 'image/webp',\r\n },\r\n\r\n _imageExtensions: {\r\n 'image/png': 'png',\r\n 'image/jpeg': 'jpg',\r\n 'image/webp': 'webp',\r\n },\r\n\r\n _setValue (value) {\r\n console.warn('Can not set value of a file input!');\r\n },\r\n\r\n _changeHandler (event) {\r\n dmx.Component('form-element').prototype._changeHandler.call(this, event);\r\n\r\n this._updateData();\r\n \r\n if (this.$node.files.length && (this.props.imageMaxWidth || this.props.imageMaxHeight || this.props.imageType)) {\r\n this._resizeImage();\r\n }\r\n },\r\n\r\n _resizeImage () {\r\n const file = this.$node.files[0];\r\n\r\n if (file && file.type.startsWith('image/')) {\r\n const blobUrl = URL.createObjectURL(file);\r\n const img = new Image();\r\n img.src = blobUrl;\r\n img.onerror = () => URL.revokeObjectURL(blobUrl);\r\n img.onload = () => {\r\n URL.revokeObjectURL(blobUrl);\r\n\r\n const { imageMaxWidth, imageMaxHeight, imageType, imageQuality } = this.props;\r\n\r\n let width = img.width;\r\n let height = img.height;\r\n let ratio = width / height;\r\n let needResize = false;\r\n\r\n if (imageMaxWidth && width > imageMaxWidth) {\r\n width = imageMaxWidth;\r\n height = ~~(width / ratio);\r\n needResize = true;\r\n }\r\n\r\n if (imageMaxHeight && height > imageMaxHeight) {\r\n height = imageMaxHeight;\r\n width = ~~(height * ratio);\r\n needResize = true;\r\n }\r\n\r\n const newType = imageType ? this._imageTypes[imageType] : file.type;\r\n\r\n if (newType !== file.type || needResize) {\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d');\r\n \r\n canvas.width = width;\r\n canvas.height = height;\r\n \r\n ctx.drawImage(img, 0, 0, width, height);\r\n \r\n canvas.toBlob(blob => {\r\n if (blob == null) {\r\n return console.error('Could not resize image!');\r\n }\r\n const container = new DataTransfer();\r\n const newName = file.name.replace(/\\.\\w+$/, '.' + this._imageExtensions[blob.type]);\r\n const newFile = new File([blob], newName, { type: blob.type });\r\n container.items.add(newFile);\r\n this.$node.files = container.files;\r\n this._updateData();\r\n }, newType, imageQuality ? imageQuality / 100 : undefined);\r\n }\r\n };\r\n }\r\n },\r\n\r\n _updateData () {\r\n let data = null;\r\n \r\n if (this.$node.files.length) {\r\n const self = this;\r\n const file = this.$node.files[0];\r\n\r\n data = {\r\n date: (file.lastModified ? new Date(file.lastModified) : file.lastModifiedDate).toISOString(),\r\n name: file.name,\r\n size: file.size,\r\n type: file.type,\r\n get dataUrl () {\r\n if (!file._dataUrl) {\r\n dmx.fileUtils.blobToDataURL(file).then(dataUrl => {\r\n file._dataUrl = dataUrl;\r\n self.set('file', Object.assign({}, data, { dataUrl }));\r\n }).catch(error => {\r\n console.error(error);\r\n });\r\n }\r\n\r\n return null;\r\n },\r\n };\r\n }\r\n\r\n this.set('file', data);\r\n }\r\n\r\n});\r\n","dmx.Component('input-file-multiple', {\r\n\r\n extends: 'form-element',\r\n\r\n attributes: {\r\n imageMaxWidth: {\r\n type: Number,\r\n default: null,\r\n },\r\n\r\n imageMaxHeight: {\r\n type: Number,\r\n default: null,\r\n },\r\n\r\n imageType: {\r\n type: String,\r\n default: null, // defaults to original image format\r\n enum: ['png', 'jpeg', 'webp'],\r\n },\r\n\r\n imageQuality: {\r\n type: Number,\r\n default: null,\r\n },\r\n },\r\n\r\n initialData: {\r\n files: [],\r\n },\r\n\r\n _imageTypes: {\r\n png: 'image/png', \r\n jpeg: 'image/jpeg',\r\n webp: 'image/webp',\r\n 'image/png': 'image/png',\r\n 'image/jpeg': 'image/jpeg',\r\n 'image/webp': 'image/webp',\r\n },\r\n\r\n _imageExtensions: {\r\n 'image/png': 'png',\r\n 'image/jpeg': 'jpg',\r\n 'image/webp': 'webp',\r\n },\r\n\r\n _setValue (value) {\r\n console.warn('Can not set value of a file input!');\r\n },\r\n\r\n _changeHandler (event) {\r\n dmx.Component('form-element').prototype._changeHandler.call(this, event);\r\n\r\n this._updateData();\r\n\r\n if (this.$node.files.length && (this.props.imageMaxWidth || this.props.imageMaxHeight || this.props.imageType)) {\r\n this._resizeImages();\r\n }\r\n },\r\n\r\n _resizeImages () {\r\n const files = Array.from(this.$node.files);\r\n\r\n Promise.all(files.map(file => {\r\n return new Promise(resolve => {\r\n if (!file.type.startsWith('image/')) {\r\n resolve(file);\r\n return;\r\n }\r\n\r\n const blobUrl = URL.createObjectURL(file);\r\n const img = new Image();\r\n img.src = blobUrl;\r\n img.onerror = () => URL.revokeObjectURL(blobUrl);\r\n img.onload = () => {\r\n URL.revokeObjectURL(blobUrl);\r\n\r\n const { imageMaxWidth, imageMaxHeight, imageType, imageQuality } = this.props;\r\n\r\n let width = img.width;\r\n let height = img.height;\r\n let ratio = width / height;\r\n let needResize = false;\r\n\r\n if (imageMaxWidth && width > imageMaxWidth) {\r\n width = imageMaxWidth;\r\n height = ~~(width / ratio);\r\n needResize = true;\r\n }\r\n\r\n if (imageMaxHeight && height > imageMaxHeight) {\r\n height = imageMaxHeight;\r\n width = ~~(height * ratio);\r\n needResize = true;\r\n }\r\n\r\n const newType = imageType ? this._imageTypes[imageType] : file.type;\r\n \r\n if (newType !== file.type || needResize) {\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d');\r\n \r\n canvas.width = width;\r\n canvas.height = height;\r\n \r\n ctx.drawImage(img, 0, 0, width, height);\r\n \r\n canvas.toBlob(blob => {\r\n if (blob == null) {\r\n return console.error('Could not resize image!');\r\n }\r\n const newName = file.name.replace(/\\.\\w+$/, '.' + this._imageExtensions[blob.type]);\r\n const newFile = new File([blob], newName, { type: blob.type });\r\n resolve(newFile);\r\n }, newType, imageQuality ? imageQuality / 100 : undefined);\r\n } else {\r\n resolve(file);\r\n }\r\n };\r\n });\r\n })).then(files => {\r\n const container = new DataTransfer();\r\n for (let file of files) {\r\n container.items.add(file);\r\n }\r\n this.$node.files = container.files;\r\n this._updateData();\r\n });\r\n },\r\n\r\n _updateData () {\r\n let files = [];\r\n \r\n if (this.$node.files.length) {\r\n const self = this;\r\n\r\n files = Array.from(this.$node.files).map((file, index) => {\r\n const data = {\r\n date: (file.lastModified ? new Date(file.lastModified) : file.lastModifiedDate).toISOString(),\r\n name: file.name,\r\n size: file.size,\r\n type: file.type,\r\n get dataUrl () {\r\n if (!file._dataUrl) {\r\n loading = true;\r\n dmx.fileUtils.blobToDataURL(file).then(dataUrl => {\r\n file._dataUrl = dataUrl;\r\n files = dmx.clone(files);\r\n files[index].dataUrl = dataUrl;\r\n self.set('files', files);\r\n }).catch(error => {\r\n console.error(error);\r\n });\r\n }\r\n\r\n return null;\r\n },\r\n };\r\n\r\n return data;\r\n });\r\n }\r\n\r\n this.set('files', files);\r\n },\r\n\r\n});\r\n","dmx.Component('button', {\r\n\r\n extends: 'form-element',\r\n\r\n attributes: {\r\n type: {\r\n type: String,\r\n default: 'button',\r\n enum: ['button', 'reset', 'submit'],\r\n },\r\n },\r\n\r\n init (node) {\r\n dmx.Component('form-element').prototype.init.call(this, node);\r\n \r\n node.type = this.props.type;\r\n },\r\n\r\n});\r\n","dmx.Component('radio', {\r\n\r\n extends: 'form-element',\r\n\r\n initialData: {\r\n checked: false,\r\n },\r\n\r\n attributes: {\r\n checked: {\r\n type: Boolean,\r\n default: false,\r\n alwaysUpdate: true,\r\n },\r\n },\r\n\r\n methods: {\r\n select (check, triggerEvent) {\r\n this._select(check);\r\n if (triggerEvent) {\r\n dmx.nextTick(() => {\r\n this.dispatchEvent('changed');\r\n this.dispatchEvent(this.$node.checked ? 'checked' : 'unchecked');\r\n });\r\n }\r\n },\r\n },\r\n\r\n events: {\r\n checked: Event,\r\n unchecked: Event,\r\n },\r\n\r\n init (node) {\r\n dmx.Component('form-element').prototype.init.call(this, node);\r\n\r\n node.type = 'radio';\r\n node.checked = this.props.checked;\r\n node.defaultChecked = this.props.checked;\r\n\r\n if (this.props.checked) {\r\n this.set('checked', true);\r\n }\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n dmx.Component('form-element').prototype.performUpdate.call(this, updatedProps);\r\n\r\n if (updatedProps.has('checked')) {\r\n if (this.$node.checked != this.props.checked) {\r\n this.$node.defaultChecked = this.props.checked;\r\n this.$node.checked = this.props.checked;\r\n this.set('checked', this.props.checked);\r\n this.$node.dispatchEvent(new Event('radio', { bubbles: true }));\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n }\r\n }\r\n\r\n if (updatedProps.has('value')) {\r\n this.$node.value = this.props.value;\r\n this.$node.dispatchEvent(new Event('change', { bubbles: true }));\r\n }\r\n },\r\n\r\n _select (check) {\r\n this.$node.checked = (check !== false);\r\n this.set('checked', this.$node.checked);\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n },\r\n\r\n _changeHandler (event) {\r\n if (this.$node.dirty) this._validate();\r\n\r\n\r\n dmx.nextTick(() => {\r\n if (!this.$node) return;\r\n this.set('checked', this.$node.checked);\r\n this.dispatchEvent('changed');\r\n this.dispatchEvent(this.$node.checked ? 'checked' : 'unchecked');\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n\r\n // trigger change on other radios with the same name and same form\r\n if (this.$node.checked) {\r\n const radios = document.querySelectorAll(`input[type=radio][name=\"${this.$node.name}\"]`);\r\n for (const elem of radios) {\r\n if (elem == this.$node || elem.form != this.$node.form) continue;\r\n if (elem.type == 'radio' && elem.name == this.$node.name) {\r\n elem.dispatchEvent(new Event('change', { bubbles: true }));\r\n }\r\n }\r\n }\r\n });\r\n },\r\n\r\n});\r\n","dmx.Component('radio-group', {\r\n\r\n initialData: {\r\n value: null,\r\n },\r\n\r\n attributes: {\r\n value: {\r\n type: String,\r\n default: null,\r\n alwaysUpdate: true,\r\n },\r\n },\r\n\r\n methods: {\r\n setValue (value) {\r\n this._setValue(value);\r\n },\r\n },\r\n\r\n events: {\r\n updated: Event,\r\n },\r\n\r\n init (node) {\r\n this._changeHandler = this._changeHandler.bind(this);\r\n\r\n node.addEventListener('change', this._changeHandler);\r\n node.addEventListener('radio', this._changeHandler);\r\n },\r\n\r\n render (node) {\r\n this.$parse();\r\n\r\n requestAnimationFrame(() => {\r\n this._setValue(this.props.value, true);\r\n });\r\n\r\n this._mutationObserver = new MutationObserver((mutationList) => {\r\n let value = this.props.value;\r\n if (value == null) value = '';\r\n value = value.toString();\r\n\r\n for (let mutation of mutationList) {\r\n if (mutation.type == 'attributes' && mutation.attributeName == 'value') {\r\n if (mutation.target.tagName === 'INPUT' && mutation.target.type === 'radio') {\r\n mutation.target.checked = mutation.target.value == value;\r\n mutation.target.defaultChecked = mutation.target.checked;\r\n mutation.target.dispatchEvent(new Event('change', { bubbles: true }));\r\n requestAnimationFrame(() => {\r\n this._updateValue();\r\n });\r\n }\r\n }\r\n\r\n for (let node of mutation.addedNodes) {\r\n if (node.nodeType !== Node.ELEMENT_NODE) continue;\r\n\r\n requestAnimationFrame(() => {\r\n if (node.tagName === 'INPUT' && node.type === 'radio') {\r\n node.checked = node.value == value;\r\n node.defaultChecked = node.checked;\r\n } else {\r\n node.querySelectorAll('input[type=radio]').forEach(checkbox => {\r\n checkbox.checked = node.value == value;\r\n checkbox.defaultChecked = checkbox.checked;\r\n });\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n this._updateValue();\r\n });\r\n });\r\n }\r\n }\r\n });\r\n\r\n this._mutationObserver.observe(node, { subtree: true, childList: true, attributes: true, attributeFilter: ['value'] });\r\n },\r\n\r\n destroy () {\r\n if (this._mutationObserver) {\r\n this._mutationObserver.disconnect();\r\n this._mutationObserver = null;\r\n }\r\n this.$node.removeEventListener('change', this._changeHandler);\r\n this.$node.removeEventListener('radio', this._changeHandler);\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n if (updatedProps.has('value')) {\r\n this._setValue(this.props.value, true);\r\n }\r\n },\r\n\r\n _setValue (value, defaultValue) {\r\n if (value != null) {\r\n value = value.toString();\r\n\r\n this._radios().forEach(radio => {\r\n radio.checked = radio.value == value;\r\n if (defaultValue) radio.defaultChecked = radio.checked;\r\n radio.dispatchEvent(new Event('change', { bubbles: true }));\r\n });\r\n\r\n this._updateValue();\r\n }\r\n },\r\n\r\n _updateValue () {\r\n const value = this._radios().filter(radio => !radio.disabled && radio.checked).map(radio => radio.value);\r\n\r\n if (!dmx.equal(this.data.value, value[0])) {\r\n this.set('value', value[0] || null);\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n }\r\n },\r\n\r\n _radios () {\r\n return Array.from(this.$node.querySelectorAll('input[type=radio]'));\r\n },\r\n\r\n _changeHandler (event) {\r\n this._updateValue();\r\n },\r\n\r\n});\r\n","dmx.Component('checkbox', {\r\n\r\n extends: 'form-element',\r\n\r\n initialData: {\r\n checked: false,\r\n },\r\n\r\n attributes: {\r\n checked: {\r\n type: Boolean,\r\n default: false,\r\n alwaysUpdate: true,\r\n },\r\n },\r\n\r\n methods: {\r\n select (check, triggerEvent) {\r\n this._select(check);\r\n if (triggerEvent) {\r\n dmx.nextTick(() => {\r\n this.dispatchEvent('changed');\r\n this.dispatchEvent(this.$node.checked ? 'checked' : 'unchecked');\r\n });\r\n }\r\n },\r\n },\r\n\r\n events: {\r\n checked: Event,\r\n unchecked: Event,\r\n },\r\n\r\n init (node) {\r\n dmx.Component('form-element').prototype.init.call(this, node);\r\n\r\n node.type = 'checkbox';\r\n node.checked = this.props.checked;\r\n node.defaultChecked = this.props.checked;\r\n\r\n if (this.props.checked) {\r\n this.set('checked', true);\r\n }\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n dmx.Component('form-element').prototype.performUpdate.call(this, updatedProps);\r\n\r\n if (updatedProps.has('checked')) {\r\n if (this.$node.checked != this.props.checked) {\r\n this.$node.defaultChecked = this.props.checked;\r\n this.$node.checked = this.props.checked;\r\n this.set('checked', this.props.checked);\r\n this.$node.dispatchEvent(new Event('checkbox', { bubbles: true }));\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n }\r\n }\r\n },\r\n\r\n _select (check) {\r\n this.$node.checked = (check !== false);\r\n this.set('checked', this.$node.checked);\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n },\r\n\r\n _changeHandler (event) {\r\n if (this.$node.dirty) this._validate();\r\n\r\n dmx.nextTick(() => {\r\n if (!this.$node) return;\r\n this.set('checked', this.$node.checked);\r\n this.dispatchEvent('changed');\r\n if (event.type != 'reset') {\r\n this.dispatchEvent(this.$node.checked ? 'checked' : 'unchecked');\r\n }\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n });\r\n },\r\n\r\n});\r\n","dmx.Component('checkbox-group', {\r\n\r\n initialData: {\r\n value: [],\r\n },\r\n\r\n attributes: {\r\n value: {\r\n type: Array,\r\n default: [],\r\n alwaysUpdate: true,\r\n },\r\n },\r\n\r\n methods: {\r\n setValue (value) {\r\n this._setValue(value);\r\n },\r\n },\r\n\r\n events: {\r\n updated: Event,\r\n },\r\n\r\n init (node) {\r\n this._changeHandler = this._changeHandler.bind(this);\r\n\r\n node.addEventListener('change', this._changeHandler);\r\n node.addEventListener('checkbox', this._changeHandler);\r\n },\r\n\r\n render (node) {\r\n this.$parse();\r\n\r\n this._setValue(this.props.value, true);\r\n\r\n this._mutationObserver = new MutationObserver((mutationList) => {\r\n let value = this.props.value;\r\n if (value == null) value = [];\r\n if (!Array.isArray(value)) value = [value];\r\n value = value.map(v => v.toString());\r\n\r\n for (let mutation of mutationList) {\r\n for (let node of mutation.addedNodes) {\r\n if (node.nodeType !== Node.ELEMENT_NODE) continue;\r\n\r\n requestAnimationFrame(() => {\r\n if (node.tagName === 'INPUT' && node.type === 'checkbox') {\r\n node.checked = value.includes(node.value);\r\n node.defaultChecked = node.checked;\r\n } else {\r\n node.querySelectorAll('input[type=checkbox]').forEach(checkbox => {\r\n checkbox.checked = value.includes(checkbox.value);\r\n checkbox.defaultChecked = checkbox.checked;\r\n });\r\n }\r\n\r\n requestAnimationFrame(() => {\r\n this._updateValue();\r\n });\r\n });\r\n }\r\n }\r\n });\r\n\r\n this._mutationObserver.observe(node, { subtree: true, childList: true });\r\n },\r\n\r\n destroy () {\r\n if (this._mutationObserver) {\r\n this._mutationObserver.disconnect();\r\n this._mutationObserver = null;\r\n }\r\n this.$node.removeEventListener('change', this._changeHandler);\r\n this.$node.removeEventListener('checkbox', this._changeHandler);\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n if (updatedProps.has('value')) {\r\n this._setValue(this.props.value, true);\r\n }\r\n },\r\n\r\n _setValue (value, defaultValue) {\r\n if (value == null) value = [];\r\n if (!Array.isArray(value)) value = [value];\r\n value = value.map(v => v.toString());\r\n\r\n this._checkboxes().forEach(checkbox => {\r\n checkbox.checked = value.includes(checkbox.value);\r\n if (defaultValue) checkbox.defaultChecked = checkbox.checked;\r\n });\r\n\r\n this._updateValue();\r\n },\r\n\r\n _updateValue () {\r\n const value = this._checkboxes().filter(checkbox => !checkbox.disabled && checkbox.checked).map(checkbox => checkbox.value);\r\n\r\n if (!dmx.equal(this.data.value, value)) {\r\n this.set('value', value);\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n }\r\n },\r\n\r\n _checkboxes () {\r\n return Array.from(this.$node.querySelectorAll('input[type=checkbox]'));\r\n },\r\n\r\n _changeHandler (event) {\r\n this._updateValue();\r\n },\r\n\r\n});\r\n","dmx.Component('select', {\r\n\r\n extends: 'form-element',\r\n\r\n initialData: {\r\n selectedIndex: -1,\r\n selectedValue: '',\r\n selectedText: '',\r\n },\r\n\r\n attributes: {\r\n options: {\r\n type: [Array, Object, Number],\r\n default: null,\r\n },\r\n\r\n optiontext: {\r\n type: String,\r\n default: '$value',\r\n },\r\n\r\n optionvalue: {\r\n type: String,\r\n default: '$value',\r\n },\r\n },\r\n\r\n methods: {\r\n setSelectedIndex (index) {\r\n this.$node.selectedIndex = index;\r\n this._updateValue();\r\n },\r\n },\r\n\r\n init (node) {\r\n this._options = [];\r\n\r\n if (!this.props.value) {\r\n this.props.value = this.$node.value;\r\n this._updateValue();\r\n }\r\n\r\n this._mutationObserver = new MutationObserver((a) => {\r\n if (!this._updatingOptions) {\r\n this._updateValue();\r\n }\r\n });\r\n this._mutationObserver.observe(this.$node, { subtree: true, childList: true });\r\n\r\n dmx.Component('form-element').prototype.init.call(this, node);\r\n },\r\n\r\n render (node) {\r\n this.$parse();\r\n this._renderOptions();\r\n let value = this.props.value;\r\n if (value == null) value = '';\r\n Array.from(this.$node.options).forEach(option => {\r\n option.toggleAttribute('selected', (option.value == value));\r\n option.selected = (option.value == value);\r\n option.defaultSelected = option.selected;\r\n });\r\n this._updateValue();\r\n },\r\n\r\n destroy () {\r\n if (this._mutationObserver) {\r\n this._mutationObserver.disconnect();\r\n this._mutationObserver = null;\r\n }\r\n dmx.Component('form-element').prototype.destroy.call(this);\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n dmx.Component('form-element').prototype.performUpdate.call(this, updatedProps);\r\n\r\n if (updatedProps.has('options') || updatedProps.has('optiontext') || updatedProps.has('optionvalue')) {\r\n this._renderOptions();\r\n }\r\n },\r\n\r\n _setValue (value, defaultValue) {\r\n if (value == null) value = '';\r\n value = value.toString();\r\n\r\n\r\n if (defaultValue) {\r\n Array.from(this.$node.options).forEach(option => {\r\n option.toggleAttribute('selected', option.value == value);\r\n option.defaultSelected = option.selected;\r\n });\r\n } else {\r\n const selectedIndex = Array.from(this.$node.options).findIndex(option => option.value == value);\r\n this.$node.selectedIndex = selectedIndex;\r\n }\r\n\r\n this._updateValue();\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n },\r\n\r\n _updateValue () {\r\n const selectedIndex = this.$node.selectedIndex;\r\n const selected = this.$node.options[selectedIndex] || { value: '', text: '' };\r\n\r\n this.set({\r\n selectedIndex: selectedIndex,\r\n selectedValue: selected.value,\r\n selectedText: selected.text,\r\n value: selected.value,\r\n });\r\n },\r\n\r\n _renderOptions () {\r\n this._options.forEach(option => option.remove());\r\n this._options = [];\r\n\r\n if (this.props.options) {\r\n this._updatingOptions = true;\r\n dmx.repeatItems(this.props.options).forEach(option => {\r\n const node = document.createElement('option');\r\n node.value = dmx.parse(this.props.optionvalue, dmx.DataScope(option, this));\r\n node.textContent = dmx.parse(this.props.optiontext, dmx.DataScope(option, this));\r\n if (node.value == this.props.value) node.selected = true;\r\n node.defaultSelected = node.selected;\r\n this.$node.append(node);\r\n this._options.push(node);\r\n });\r\n this._updatingOptions = false;\r\n }\r\n\r\n this._updateValue();\r\n },\r\n\r\n _inputHandler (event) {\r\n // do nothing\r\n },\r\n\r\n _changeHandler (event) {\r\n if (this.$node.dirty) {\r\n this._validate();\r\n }\r\n\r\n dmx.nextTick(() => {\r\n if (this.data.selectedIndex !== this.$node.selectedIndex) {\r\n this._updateValue();\r\n this.dispatchEvent('changed');\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n }\r\n });\r\n },\r\n\r\n});\r\n","dmx.Component('select-multiple', {\r\n\r\n extends: 'select',\r\n\r\n initialData: {\r\n value: [],\r\n },\r\n\r\n attributes: {\r\n value: {\r\n type: Array,\r\n default: null,\r\n alwaysUpdate: true,\r\n },\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n dmx.Component('select').prototype.performUpdate.call(this, updatedProps);\r\n\r\n if (updatedProps.has('value')) {\r\n this._setValue(this.props.value, true);\r\n }\r\n },\r\n\r\n _setValue (value, defaultValue) {\r\n if (value == null) value = '';\r\n if (!Array.isArray(value)) value = [value];\r\n value = value.map(v => v.toString());\r\n\r\n Array.from(this.$node.options).forEach(option => {\r\n const selected = value.includes(option.value);\r\n if (defaultValue) {\r\n option.toggleAttribute('selected', selected);\r\n option.defaultSelected = option.selected;\r\n } else {\r\n option.selected = selected;\r\n }\r\n });\r\n\r\n this._updateValue();\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n },\r\n\r\n _getValue () {\r\n return Array.from(this.$node.selectedOptions).map(option => option.value);\r\n },\r\n\r\n _updateValue () {\r\n const value = this._getValue(); //Array.from(this.$node.options).filter(option => option.selected).map(option => option.value);\r\n\r\n dmx.batch(() => {\r\n dmx.Component('select').prototype._updateValue.call(this);\r\n this.set('value', value);\r\n });\r\n },\r\n\r\n _changeHandler (event) {\r\n if (this.$node.dirty) this._validate();\r\n\r\n dmx.nextTick(() => {\r\n if (this.data.selectedIndex !== this.$node.selectedIndex || !dmx.equal(this.data.value, this._getValue())) {\r\n this._updateValue();\r\n this.dispatchEvent('changed');\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n }\r\n });\r\n },\r\n\r\n});\r\n","dmx.Component('value', {\r\n\r\n initialData: {\r\n value: null,\r\n },\r\n\r\n attributes: {\r\n value: {\r\n default: null,\r\n },\r\n },\r\n\r\n methods: {\r\n setValue (value) {\r\n return this._updateValue(value);\r\n },\r\n\r\n set (keyOrValue, maybeValue) {\r\n if (arguments.length > 1) {\r\n if (keyOrValue === 'value') {\r\n return this._updateValue(maybeValue);\r\n }\r\n\r\n if (keyOrValue && keyOrValue.startsWith('value.')) {\r\n const path = keyOrValue.split('.').slice(1);\r\n const baseValue = this.data.value;\r\n const updated = dmx.clone(baseValue || {});\r\n let target = updated;\r\n\r\n for (let i = 0; i < path.length - 1; i++) {\r\n const segment = path[i];\r\n if (typeof target[segment] !== 'object' || target[segment] == null) {\r\n target[segment] = {};\r\n }\r\n target = target[segment];\r\n }\r\n\r\n target[path[path.length - 1]] = maybeValue;\r\n return this._updateValue(updated);\r\n }\r\n\r\n return dmx.BaseComponent.prototype.set.call(this, keyOrValue, maybeValue);\r\n }\r\n\r\n return this._updateValue(keyOrValue);\r\n },\r\n },\r\n\r\n events: {\r\n updated: Event,\r\n },\r\n\r\n render: false,\r\n\r\n init (node) {\r\n this._updateValue(this.props.value);\r\n },\r\n\r\n _updateValue (value) {\r\n const current = this.data.value;\r\n\r\n if (current !== value) {\r\n dmx.BaseComponent.prototype.set.call(this, 'value', value);\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n }\r\n\r\n return this.data.value;\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n if (updatedProps.has('value')) {\r\n this._updateValue(this.props.value);\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n }\r\n },\r\n\r\n});","dmx.Component(\"repeat\", {\r\n\r\n initialData: {\r\n items: [],\r\n },\r\n\r\n attributes: {\r\n repeat: {\r\n type: [Array, Object, Number],\r\n default: null,\r\n },\r\n\r\n key: {\r\n type: String,\r\n default: \"\",\r\n },\r\n\r\n rerender: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n\r\n events: {\r\n update: Event,\r\n updated: Event,\r\n },\r\n\r\n render: false,\r\n\r\n init (node) {\r\n this.prevItems = [];\r\n this.childKeys = new Map();\r\n this.$template = document.createDocumentFragment();\r\n while (this.$node.hasChildNodes()) {\r\n this.$template.appendChild(this.$node.firstChild);\r\n }\r\n if (this.props.repeat) {\r\n this.performUpdate(new Map([['repeat', undefined]]));\r\n }\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n if (updatedProps.has(\"key\")) this._rerender = true;\r\n if (!updatedProps.has(\"repeat\")) return;\r\n\r\n this.dispatchEvent(\"update\");\r\n\r\n if (this.props.rerender || this._rerender) {\r\n this._rerender = false;\r\n this._clear();\r\n }\r\n\r\n var RepeatItem = dmx.Component(\"repeat-item\");\r\n var repeat = dmx.clone(this.props.repeat);\r\n var items = dmx.repeatItems(repeat);\r\n\r\n if (items.length) {\r\n if (\r\n !this.props.rerender &&\r\n this.props.key &&\r\n items[0].hasOwnProperty(this.props.key) &&\r\n this.prevItems.length\r\n ) {\r\n // keyed repeater (https://github.com/localvoid/kivi/blob/master/lib/vnode.ts#L1320-L1513)\r\n var key = this.props.key;\r\n var a = this.prevItems;\r\n var b = this._clone(items);\r\n var aStart = 0;\r\n var bStart = 0;\r\n var aEnd = a.length - 1;\r\n var bEnd = b.length - 1;\r\n var i, j, nextPos;\r\n\r\n outer: while (true) {\r\n // remove same keys from start\r\n while (a[aStart][key] === b[bStart][key]) {\r\n this.childKeys.get(b[bStart][key]).set(b[bStart]);\r\n aStart++;\r\n bStart++;\r\n if (aStart > aEnd || bStart > bEnd) {\r\n break outer;\r\n }\r\n }\r\n\r\n // remove same keys at end\r\n while (a[aEnd][key] === b[bEnd][key]) {\r\n this.childKeys.get(b[bEnd][key]).set(b[bEnd]);\r\n aEnd--;\r\n bEnd--;\r\n if (aStart > aEnd || bStart > bEnd) {\r\n break outer;\r\n }\r\n }\r\n\r\n // move from right to left\r\n if (a[aEnd][key] === b[bStart][key]) {\r\n this.childKeys.get(b[bStart][key]).set(b[bStart]);\r\n this._moveChild(b[bStart][key], a[aStart][key]);\r\n aEnd--;\r\n bStart++;\r\n if (aStart > aEnd || bStart > bEnd) {\r\n break;\r\n }\r\n continue;\r\n }\r\n\r\n // move from left to right\r\n if (a[aStart][key] === b[bEnd][key]) {\r\n nextPos = bEnd + 1;\r\n this.childKeys.get(b[bEnd][key]).set(b[bEnd]);\r\n this._moveChild(b[bEnd][key], b[nextPos] && b[nextPos][key]);\r\n aStart++;\r\n bEnd--;\r\n if (aStart > aEnd || bStart > bEnd) {\r\n break;\r\n }\r\n continue;\r\n }\r\n\r\n break;\r\n }\r\n\r\n if (aStart > aEnd) {\r\n // insert rest from b\r\n nextPos = bEnd + 1;\r\n while (bStart <= bEnd) {\r\n this._insertChild(b[bStart++], b[nextPos] && b[nextPos][key]);\r\n }\r\n } else if (bStart > bEnd) {\r\n // remove rest from a\r\n while (aStart <= aEnd) {\r\n this._removeChild(a[aStart++][key]);\r\n }\r\n } else {\r\n var aLength = aEnd - aStart + 1;\r\n var bLength = bEnd - bStart + 1;\r\n var aNullable = a;\r\n var sources = new Array(bLength).fill(-1);\r\n\r\n var moved = false;\r\n var pos = 0;\r\n var synced = 0;\r\n\r\n if (bLength <= 4 || aLength * bLength <= 16) {\r\n for (i = aStart; i <= aEnd; i++) {\r\n if (synced < bLength) {\r\n for (j = bStart; j <= bEnd; j++) {\r\n if (a[i][key] === b[j][key]) {\r\n sources[j - bStart] = i;\r\n\r\n if (pos > j) {\r\n moved = true;\r\n } else {\r\n pos = j;\r\n }\r\n\r\n this.childKeys.get(b[j][key]).set(b[j]);\r\n\r\n synced++;\r\n aNullable[i] = null;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n var keyIndex = {};\r\n\r\n for (i = bStart; i <= bEnd; i++) {\r\n keyIndex[b[i][key]] = i;\r\n }\r\n\r\n for (i = aStart; i <= aEnd; i++) {\r\n if (synced < bLength) {\r\n j = keyIndex[a[i][key]];\r\n\r\n if (j !== undefined) {\r\n sources[j - bStart] = i;\r\n\r\n if (pos > j) {\r\n moved = true;\r\n } else {\r\n pos = j;\r\n }\r\n\r\n this.childKeys.get(b[j][key]).set(b[j]);\r\n\r\n synced++;\r\n aNullable[i] = null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (aLength === a.length && synced === 0) {\r\n this._clear();\r\n while (bStart < bLength) {\r\n this._insertChild(b[bStart++], null);\r\n }\r\n } else {\r\n i = aLength - synced;\r\n while (i > 0) {\r\n if (aNullable[aStart] !== null) {\r\n this._removeChild(a[aStart][key]);\r\n i--;\r\n }\r\n aStart++;\r\n }\r\n\r\n if (moved) {\r\n var seq = this._lis(sources);\r\n j = seq.length - 1;\r\n for (i = bLength - 1; i >= 0; i--) {\r\n if (sources[i] === -1) {\r\n pos = i + bStart;\r\n nextPos = pos + 1;\r\n this._insertChild(b[pos], b[nextPos] && b[nextPos][key]);\r\n } else {\r\n if (j < 0 || i !== seq[j]) {\r\n pos = i + bStart;\r\n nextPos = pos + 1;\r\n this._moveChild(b[pos][key], b[nextPos] && b[nextPos][key]);\r\n } else {\r\n j--;\r\n }\r\n }\r\n }\r\n } else if (synced !== bLength) {\r\n for (i = bLength - 1; i >= 0; i--) {\r\n if (sources[i] === -1) {\r\n pos = i + bStart;\r\n nextPos = pos + 1;\r\n this._insertChild(b[pos], b[nextPos] && b[nextPos][key]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n if (this.children.length > items.length) {\r\n // remove some children\r\n const toRemove = this.children.splice(items.length);\r\n for (const child of toRemove) {\r\n child.$destroy();\r\n }\r\n }\r\n\r\n if (this.children.length) {\r\n // update existing children\r\n dmx.batch(() => {\r\n this.children.forEach((child, i) => {\r\n for (const key in child.data) {\r\n // remove old data that is not in new data\r\n if (!items[i][key] && child.data[key]) {\r\n // Do not remove registered child components\r\n if (!child.data[key].$type) {\r\n delete child.data[key];\r\n }\r\n }\r\n }\r\n child.set(items[i]);\r\n });\r\n });\r\n }\r\n\r\n if (items.length > this.children.length) {\r\n // add new children\r\n const fragment = document.createDocumentFragment();\r\n const toParse = new Set();\r\n\r\n for (var i = this.children.length; i < items.length; i++) {\r\n var child = new RepeatItem(\r\n this.$template.cloneNode(true),\r\n this,\r\n items[i]\r\n );\r\n for (const node of child.$nodes) {\r\n fragment.appendChild(node);\r\n }\r\n toParse.add(child);\r\n this.children.push(child);\r\n }\r\n\r\n this.$node.appendChild(fragment);\r\n\r\n for (const child of toParse) {\r\n for (const node of child.$nodes) {\r\n child.$parse(node);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n this._clear();\r\n }\r\n\r\n if (this.props.key) {\r\n // store prevItems for keyed diffing\r\n this.prevItems = [];\r\n for (const item of items) {\r\n this.prevItems.push({ [this.props.key]: item[this.props.key] } );\r\n }\r\n dmx.batch(() => {\r\n for (let child of this.children) {\r\n this.childKeys.set(child.data[this.props.key], child);\r\n }\r\n });\r\n }\r\n\r\n //this.set('items', items);\r\n this.set(\r\n \"items\",\r\n this.children.map((child) => child.data)\r\n );\r\n\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n },\r\n\r\n _lis (a) {\r\n var p = a.slice(0);\r\n var result = [];\r\n result.push(0);\r\n var u, v;\r\n\r\n for (var i = 0, il = a.length; i < il; i++) {\r\n if (a[i] === -1) {\r\n continue;\r\n }\r\n\r\n var j = result[result.length - 1];\r\n if (a[j] < a[i]) {\r\n p[i] = j;\r\n result.push(i);\r\n continue;\r\n }\r\n\r\n u = 0;\r\n v = result.length - 1;\r\n\r\n while (u < v) {\r\n var c = ((u + v) / 2) | 0;\r\n if (a[result[c]] < a[i]) {\r\n u = c + 1;\r\n } else {\r\n v = c;\r\n }\r\n }\r\n\r\n if (a[i] < a[result[u]]) {\r\n if (u > 0) {\r\n p[i] = result[u - 1];\r\n }\r\n result[u] = i;\r\n }\r\n }\r\n\r\n u = result.length;\r\n v = result[u - 1];\r\n\r\n while (u-- > 0) {\r\n result[u] = v;\r\n v = p[v];\r\n }\r\n\r\n return result;\r\n },\r\n\r\n _clear () {\r\n this.prevItems = [];\r\n this.childKeys.clear();\r\n this.$node.innerHTML = '';\r\n const toDestroy = this.children.splice(0);\r\n for (const child of toDestroy) {\r\n child.$destroy();\r\n }\r\n },\r\n\r\n _insertChild (data, before) {\r\n var RepeatItem = dmx.Component(\"repeat-item\");\r\n var child = new RepeatItem(this.$template.cloneNode(true), this, data);\r\n\r\n for (const node of child.$nodes) {\r\n if (!before) {\r\n this.$node.appendChild(node);\r\n } else {\r\n if (this.childKeys.has(before)) {\r\n this.$node.insertBefore(node, this.childKeys.get(before).$nodes[0]);\r\n } else {\r\n console.warn(\r\n \"(insert) can not insert node before key \" + before + \"!\"\r\n );\r\n }\r\n }\r\n\r\n child.$parse(node);\r\n }\r\n\r\n this.childKeys.set(data[this.props.key], child);\r\n this.children.push(child);\r\n },\r\n\r\n _moveChild (key, before) {\r\n var child = this.childKeys.get(key);\r\n\r\n if (child) {\r\n if (this.childKeys.has(before)) {\r\n for (const node of child.$nodes) {\r\n this.$node.insertBefore(node, this.childKeys.get(before).$nodes[0]);\r\n }\r\n } else {\r\n for (const node of child.$nodes) {\r\n this.$node.appendChild(node);\r\n }\r\n }\r\n } else {\r\n console.warn(\"(move) child with key \" + key + \" not found!\");\r\n }\r\n },\r\n\r\n _removeChild (key) {\r\n var child = this.childKeys.get(key);\r\n if (child) {\r\n child.$destroy();\r\n this.children.splice(this.children.indexOf(child), 1);\r\n this.childKeys.delete(key);\r\n } else {\r\n console.warn(\"(remove) child with key \" + key + \" not found!\");\r\n }\r\n },\r\n\r\n _clone (o) {\r\n return dmx.clone(o);\r\n },\r\n});\r\n","dmx.Component(\"repeat-item\", {\r\n\r\n constructor: function (fragment, parent, data, name) {\r\n this.parent = parent;\r\n this.children = [];\r\n this.listeners = {};\r\n this.props = {};\r\n\r\n this.__disposables = [];\r\n this.__childDisposables = [];\r\n\r\n this.updatedProps = new Map();\r\n this.updateRequested = false;\r\n\r\n this.isInitialized = true;\r\n this.isDestroyed = false;\r\n\r\n this.data = dmx.signalProxy(data);\r\n this.seed = parent.seed;\r\n\r\n this.name = name || \"repeatItem\";\r\n this.$nodes = [];\r\n for (var i = 0; i < fragment.childNodes.length; i++) {\r\n this.$nodes.push(fragment.childNodes[i]);\r\n }\r\n },\r\n\r\n destroy () {\r\n for (const node of this.$nodes) {\r\n if (this.parent && this.parent.props && this.parent.props.key) {\r\n const event = new Event('remove', { cancelable: true });\r\n \r\n if (node.dispatchEvent(event)) {\r\n dmx.dom.remove(node);\r\n }\r\n } else {\r\n node.remove();\r\n }\r\n }\r\n },\r\n});\r\n","dmx.Component('fetch', {\r\n\r\n initialData: {\r\n status: 0,\r\n data: null,\r\n links: {},\r\n paging: {},\r\n headers: {},\r\n state: {\r\n executing: false,\r\n uploading: false,\r\n processing: false,\r\n downloading: false,\r\n },\r\n uploadProgress: {\r\n position: 0,\r\n percent: 0,\r\n total: 0,\r\n },\r\n downloadProgress: {\r\n position: 0,\r\n percent: 0,\r\n total: 0,\r\n },\r\n lastError: {\r\n status: 0,\r\n message: '',\r\n response: null,\r\n },\r\n },\r\n\r\n attributes: {\r\n timeout: {\r\n type: Number,\r\n default: 0,\r\n },\r\n\r\n method: {\r\n type: String,\r\n default: 'GET',\r\n },\r\n\r\n prefix: {\r\n type: String,\r\n default: '',\r\n },\r\n\r\n url: {\r\n type: String,\r\n default: '',\r\n },\r\n\r\n params: {\r\n type: Object,\r\n default: {},\r\n },\r\n\r\n headers: {\r\n type: Object,\r\n default: {},\r\n },\r\n\r\n data: {\r\n type: Object,\r\n default: {},\r\n },\r\n\r\n dataType: {\r\n type: String,\r\n default: 'auto',\r\n enum: ['auto', 'json', 'text'],\r\n },\r\n\r\n noload: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n\r\n cache: {\r\n type: String,\r\n default: '',\r\n },\r\n\r\n ttl: {\r\n // cache ttl in seconds (default 1 day)\r\n type: Number,\r\n default: 86400,\r\n },\r\n\r\n credentials: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n\r\n methods: {\r\n abort () {\r\n this._abort();\r\n },\r\n\r\n load (params, reload) {\r\n const options = {};\r\n if (params) options.params = params;\r\n if (reload) options.ttl = 0;\r\n this._fetch(options);\r\n },\r\n\r\n reset () {\r\n this._abort();\r\n this._resetData(true);\r\n },\r\n },\r\n\r\n events: {\r\n start: Event,\r\n done: Event,\r\n error: Event,\r\n invalid: Event,\r\n unauthorized: Event,\r\n forbidden: Event,\r\n ratelimit: Event,\r\n abort: Event,\r\n success: Event,\r\n upload: ProgressEvent,\r\n download: ProgressEvent,\r\n },\r\n\r\n _statusEvents: {\r\n 200: 'success',\r\n 400: 'invalid',\r\n 401: 'unauthorized',\r\n 403: 'forbidden',\r\n 429: 'ratelimit',\r\n },\r\n\r\n render: false,\r\n\r\n init (node) {\r\n this._fetch = dmx.debounce(this._fetch.bind(this));\r\n\r\n this._loadHandler = this._loadHandler.bind(this);\r\n this._abortHandler = this._abortHandler.bind(this);\r\n this._errorHandler = this._errorHandler.bind(this);\r\n this._timeoutHandler = this._timeoutHandler.bind(this);\r\n this._downloadProgressHandler = this._progressHandler.bind(this, 'download');\r\n this._uploadProgressHandler = this._progressHandler.bind(this, 'upload');\r\n\r\n this._xhr = new XMLHttpRequest();\r\n this._xhr.addEventListener('load', this._loadHandler);\r\n this._xhr.addEventListener('abort', this._abortHandler);\r\n this._xhr.addEventListener('error', this._errorHandler);\r\n this._xhr.addEventListener('timeout', this._timeoutHandler);\r\n this._xhr.addEventListener('progress', this._downloadProgressHandler);\r\n this._xhr.upload.addEventListener('progress', this._uploadProgressHandler);\r\n\r\n if (!this.props.noload && this.props.url) {\r\n this._fetch();\r\n }\r\n },\r\n\r\n destroy () {\r\n if (this._xhr) {\r\n this._xhr.removeEventListener('load', this._loadHandler);\r\n this._xhr.removeEventListener('abort', this._abortHandler);\r\n this._xhr.removeEventListener('error', this._errorHandler);\r\n this._xhr.removeEventListener('timeout', this._timeoutHandler);\r\n this._xhr.removeEventListener('progress', this._downloadProgressHandler);\r\n if (this._xhr.upload) {\r\n this._xhr.upload.removeEventListener('progress', this._uploadProgressHandler);\r\n }\r\n this._xhr.abort();\r\n this._xhr = null;\r\n }\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n if (!this.props.noload && this.props.url) {\r\n // if url or params are changed\r\n if (updatedProps.has('url') || updatedProps.has('params')) {\r\n this._fetch();\r\n }\r\n }\r\n },\r\n\r\n // TODO: deprecate this, use JSON or expression instead\r\n $parseAttributes (node) {\r\n dmx.BaseComponent.prototype.$parseAttributes.call(this, node);\r\n\r\n dmx.dom.getAttributes(node).forEach(({ name, argument, value }) => {\r\n if (argument && value && ['param', 'header'].includes(name)) {\r\n this.$watch(value, value => {\r\n this.props[name + 's'] = Object.assign({}, this.props[name + 's'], { [argument]: value });\r\n }, {\r\n node,\r\n attribute: `dmx-${name}:${argument}`,\r\n type: 'attribute',\r\n description: `dmx-fetch ${name} binding`,\r\n });\r\n }\r\n\r\n if (argument && value && name == 'data') {\r\n this.$watch(value, value => {\r\n this.props.data = Object.assign({}, this.props.data, { [argument]: value });\r\n }, {\r\n node,\r\n attribute: `dmx-data:${argument}`,\r\n type: 'attribute',\r\n description: 'dmx-fetch data binding',\r\n });\r\n }\r\n });\r\n },\r\n\r\n _abort () {\r\n if (this._xhr) {\r\n this._xhr.abort();\r\n }\r\n },\r\n\r\n _resetData (clearData) {\r\n const data = {\r\n status: 0,\r\n headers: {},\r\n state: {\r\n executing: false,\r\n uploading: false,\r\n processing: false,\r\n downloading: false,\r\n },\r\n uploadProgress: {\r\n position: 0,\r\n total: 0,\r\n percent: 0,\r\n },\r\n downloadProgress: {\r\n position: 0,\r\n total: 0,\r\n percent: 0,\r\n },\r\n lastError: {\r\n status: 0,\r\n message: \"\",\r\n response: null,\r\n },\r\n };\r\n\r\n if (clearData) {\r\n data.data = null;\r\n }\r\n\r\n this.set(data);\r\n },\r\n\r\n _fetch (options) {\r\n this._abort();\r\n\r\n options = dmx.extend(true, this.props, options || {});\r\n\r\n let qs = Object.keys(options.params)\r\n .filter(key => options.params[key] != null)\r\n .map(key => {\r\n let value = options.params[key];\r\n if (typeof value === 'string' && value.startsWith('{{')) {\r\n value = this.parse(value);\r\n }\r\n return encodeURIComponent(key) + '=' + encodeURIComponent(value);\r\n })\r\n .join('&');\r\n\r\n this._resetData();\r\n this.dispatchEvent('start');\r\n\r\n this._url = options.url;\r\n\r\n if (options.prefix) {\r\n this._url = options.prefix.replace(/\\/$/, '') + '/' + this._url.replace(/^\\//, '');\r\n }\r\n\r\n if (qs) {\r\n this._url += (this._url.includes('?') ? '&' : '?') + qs;\r\n }\r\n\r\n if (window.WebviewProxy) {\r\n // Cordova webview proxy plugin\r\n this._url = window.WebviewProxy.convertProxyUrl(this._url);\r\n }\r\n\r\n if (this.props.cache) {\r\n const cache = this.parse(`${this.props.cache}.data[\"${this._url}\"]`);\r\n if (cache) {\r\n if (Date.now() - cache.created >= options.ttl * 1000) {\r\n this.parse(`${this.props.cache}.remove(\"${this._url}\")`);\r\n } else {\r\n this.set({\r\n headers: cache.headers || {},\r\n paging: cache.paging || {},\r\n links: cache.links || {},\r\n data: cache.data,\r\n });\r\n\r\n this.dispatchEvent('success');\r\n this.dispatchEvent('done');\r\n\r\n this.$node.dispatchEvent(new CustomEvent('xhrsuccess', {\r\n bubbles: true,\r\n detail: { source: this.name, status: this._xhr.status, response: response }\r\n }));\r\n\r\n return;\r\n }\r\n }\r\n }\r\n\r\n this.set('state', {\r\n executing: true,\r\n uploading: false,\r\n processing: false,\r\n downloading: false,\r\n });\r\n\r\n let data = null;\r\n let method = this.props.method.toUpperCase();\r\n\r\n if (method !== 'GET') {\r\n if (this.props.dataType === 'text') {\r\n data = this.props.data.toString();\r\n } else if (this.props.dataType === 'json') {\r\n data = JSON.stringify(this.props.data);\r\n } else {\r\n if (method === 'POST') {\r\n data = new FormData();\r\n\r\n Object.keys(this.props.data).forEach(key => {\r\n let value = this.props.data[key];\r\n\r\n if (Array.isArray(value)) {\r\n if (!/\\[\\]$/.text(value)) key += '[]';\r\n value.forEach(val => data.append(key, val));\r\n } else {\r\n data.set(key, value);\r\n }\r\n });\r\n } else {\r\n data = this.props.data.toString();\r\n }\r\n }\r\n }\r\n\r\n this._xhr.open(method, this._url);\r\n this._xhr.timeout = options.timeout * 1000;\r\n if (this.props.dataType === 'json' || this.props.dataType === 'text') {\r\n this._xhr.setRequestHeader('Content-Type', 'application/' + this.props.dataType);\r\n }\r\n for (const header in this.props.headers) {\r\n this._xhr.setRequestHeader(header, this.props.headers[header]);\r\n }\r\n this._xhr.setRequestHeader('accept', 'application/json');\r\n if (this.props.credentials) {\r\n this._xhr.withCredentials = true;\r\n }\r\n\r\n if (this.serverconnect && method !== 'GET') {\r\n const csrf_token = document.querySelector('meta[name=\"csrf-token\"]');\r\n if (csrf_token) {\r\n this._xhr.setRequestHeader('X-CSRF-Token', csrf_token.content);\r\n }\r\n }\r\n\r\n try {\r\n this._xhr.send(data);\r\n } catch (err) {\r\n this._done(err);\r\n }\r\n },\r\n\r\n _done (err) {\r\n this._resetData();\r\n\r\n if (err) {\r\n this.set('lastError', {\r\n status: 0,\r\n message: err.message,\r\n response: null,\r\n });\r\n\r\n this.dispatchEvent('error');\r\n this.dispatchEvent('done');\r\n\r\n this.$node.dispatchEvent(new CustomEvent('xhrerror', {\r\n bubbles: true,\r\n detail: { source: this.name, status: this._xhr.status, response: err.message }\r\n }));\r\n\r\n return;\r\n }\r\n\r\n let response = this._xhr.responseText;\r\n\r\n try {\r\n response = JSON.parse(response);\r\n } catch (err) {\r\n if (this._xhr.status < 400) {\r\n this.set('lastError', {\r\n status: 0,\r\n message: 'Response was not valid JSON',\r\n response: response,\r\n });\r\n\r\n this.dispatchEvent('error');\r\n this.dispatchEvent('done');\r\n\r\n this.$node.dispatchEvent(new CustomEvent('xhrerror', {\r\n bubbles: true,\r\n detail: { source: this.name, status: this._xhr.status, response: 'Invalid JSON: ' + response }\r\n }));\r\n\r\n return;\r\n }\r\n }\r\n\r\n this._parseHeaders();\r\n\r\n if (this._xhr.status < 400) {\r\n this.set({\r\n status: this._xhr.status,\r\n data: response,\r\n });\r\n\r\n this.dispatchEvent('success');\r\n this.dispatchEvent('done');\r\n\r\n if (this.props.cache) {\r\n this.parse(`${this.props.cache}.set(\"${this._url}\", { headers: headers, paging: paging, links: links, data: data, created: ${Date.now()} })`)\r\n }\r\n\r\n this.$node.dispatchEvent(new CustomEvent('xhrsuccess', {\r\n bubbles: true,\r\n detail: { source: this.name, status: this._xhr.status, response: response }\r\n }));\r\n\r\n return;\r\n }\r\n\r\n this.set({\r\n status: this._xhr.status,\r\n lastError: {\r\n status: this._xhr.status,\r\n message: this._xhr.statusText,\r\n response: response,\r\n }\r\n });\r\n\r\n this.dispatchEvent(this._statusEvents[this._xhr.status] || 'error');\r\n this.dispatchEvent('done');\r\n\r\n this.$node.dispatchEvent(new CustomEvent('xhr' + (this._statusEvents[this._xhr.status] || 'error'), {\r\n bubbles: true,\r\n detail: { source: this.name, status: this._xhr.status, response: response }\r\n }));\r\n },\r\n\r\n _parseHeaders() {\r\n try {\r\n const strHeaders = this._xhr.getAllResponseHeaders();\r\n const arrHeaders = strHeaders.trim().split(/[\\r\\n]+/);\r\n\r\n this.set('headers', arrHeaders.reduce((headers, line) => {\r\n const parts = line.split(': ');\r\n const name = parts.shift();\r\n const value = parts.join(': ');\r\n\r\n headers[name] = value;\r\n\r\n return headers;\r\n }, {}));\r\n } catch (err) {\r\n console.warn('Error parsing response headers', err);\r\n return;\r\n }\r\n\r\n this._parseLinkHeaders();\r\n },\r\n\r\n _parseLinkHeaders () {\r\n try {\r\n const headers = this.data && this.data.headers ? this.data.headers : {};\r\n const linkHeader = Object.keys(headers).find(header => header.toLowerCase() === 'link');\r\n\r\n if (linkHeader) {\r\n const rawLinks = headers[linkHeader];\r\n if (typeof rawLinks !== 'string' || !rawLinks.trim()) {\r\n this.set('links', {});\r\n } else {\r\n let hadParseIssue = false;\r\n const parsedLinks = rawLinks.split(/,\\s*</).map(link => {\r\n try {\r\n const match = link.match(/<?([^>]*)>(.*)/);\r\n if (!match) {\r\n hadParseIssue = true;\r\n return null;\r\n }\r\n\r\n const linkUrl = new URL(match[1], window.location && window.location.href ? window.location.href : undefined);\r\n const parts = (match[2] || '').split(';').map(part => part.trim()).filter(Boolean);\r\n const qs = linkUrl.search.slice(1).split('&').filter(Boolean).reduce((acc, chunk) => {\r\n const p = chunk.split('=');\r\n const key = decodeURIComponent(p[0] || '');\r\n if (!key) return acc;\r\n acc[key] = decodeURIComponent(p[1] || '');\r\n return acc;\r\n }, {});\r\n\r\n const info = parts.reduce((acc, part) => {\r\n const attrMatch = part.match(/^(.*)=(.*)$/);\r\n if (!attrMatch) {\r\n hadParseIssue = true;\r\n return acc;\r\n }\r\n const attrName = attrMatch[1].replace(/^rel$/i, 'rel').trim();\r\n const attrValue = attrMatch[2].replace(/^\"|\"$/g, '').trim();\r\n acc[attrName] = attrValue;\r\n return acc;\r\n }, {});\r\n\r\n const merged = Object.assign({}, qs, info);\r\n merged.url = linkUrl.toString();\r\n return merged;\r\n } catch (err) {\r\n console.warn('Error parsing link header part', err);\r\n hadParseIssue = true;\r\n return null;\r\n }\r\n }).filter(link => link && link.rel);\r\n\r\n const linkMap = parsedLinks.reduce((acc, link) => {\r\n link.rel.split(/\\s+/).filter(Boolean).forEach(rel => {\r\n acc[rel] = Object.assign({}, link, { rel });\r\n });\r\n return acc;\r\n }, {});\r\n\r\n this.set('links', linkMap);\r\n\r\n if (hadParseIssue) {\r\n console.warn('Error parsing link header', rawLinks);\r\n }\r\n }\r\n } else {\r\n this.set('links', {});\r\n }\r\n } catch (err) {\r\n console.warn('Error parsing link header', err);\r\n return;\r\n }\r\n\r\n this._parsePaging();\r\n },\r\n\r\n _parsePaging () {\r\n try {\r\n const paging = {\r\n page: 1,\r\n pages: 1,\r\n items: 0,\r\n has: {\r\n first: false,\r\n prev: false,\r\n next: false,\r\n last: false,\r\n },\r\n };\r\n\r\n const { first, prev, next, last } = this.data.links;\r\n\r\n if (prev || next) {\r\n if (last && last.page) {\r\n paging.pages = +last.page;\r\n } else if (prev && prev.page) {\r\n paging.pages = +prev.page + 1;\r\n }\r\n\r\n const countHeader = Object.keys(this.data.headers).find(header => {\r\n header = header.toLowerCase();\r\n return header === 'x-total' || header === 'x-count' || header === 'x-total-count';\r\n });\r\n\r\n if (countHeader) {\r\n paging.items = +this.data.headers[countHeader];\r\n }\r\n\r\n if (prev && prev.page) {\r\n paging.page = +prev.page + 1;\r\n } else if (next && next.page) {\r\n paging.page = +next.page - 1;\r\n }\r\n\r\n paging.has = {\r\n first: !!first,\r\n prev: !!prev,\r\n next: !!next,\r\n last: !!last,\r\n };\r\n }\r\n\r\n this.set('paging', paging);\r\n } catch (err) {\r\n console.warn('Error parsing paging', err);\r\n }\r\n },\r\n\r\n _loadHandler (event) {\r\n this._done();\r\n },\r\n\r\n _abortHandler (event) {\r\n this._resetData();\r\n this.dispatchEvent('abort');\r\n this.dispatchEvent('done');\r\n\r\n this.$node.dispatchEvent(new CustomEvent('xhrabort', {\r\n bubbles: true,\r\n detail: { source: this.name, status: 0, response: null }\r\n }));\r\n },\r\n\r\n _errorHandler (event) {\r\n this._done(Error('Failed to execute'));\r\n },\r\n\r\n _timeoutHandler (event) {\r\n this._done(Error('Execution timeout'));\r\n },\r\n\r\n _progressHandler (type, event) {\r\n const percent = event.lengthComputable ? Math.ceil(event.loaded * 100 / event.total) : 0;\r\n\r\n this.set({\r\n state: {\r\n executing: true,\r\n uploading: type === 'upload' && percent < 100,\r\n processing: type === 'upload' && percent === 100,\r\n downloading: type === 'download',\r\n },\r\n [type + 'Progress']: {\r\n position: event.loaded,\r\n total: event.total,\r\n percent: percent,\r\n },\r\n });\r\n\r\n this.dispatchEvent(type, {\r\n lengthComputable: event.lengthComputable,\r\n loaded: event.loaded,\r\n total: event.total,\r\n });\r\n },\r\n\r\n});\r\n","dmx.Component('serverconnect', {\r\n\r\n extends: 'fetch',\r\n\r\n attributes: {\r\n sockets: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n\r\n init (node) {\r\n this.serverconnect = true;\r\n \r\n if (this.props.sockets && dmx.Socket) {\r\n this._refresh = this._refresh.bind(this);\r\n this._event = this.props.url.replace(/^(.*?)api\\//, '')\r\n this._socket = dmx.Socket('/api');\r\n this._socket.on(this._event, this._refresh);\r\n }\r\n\r\n dmx.Component('fetch').prototype.init.call(this, node);\r\n },\r\n\r\n destroy () {\r\n if (this._socket) {\r\n this._socket.off(this._event, this._refresh);\r\n }\r\n\r\n dmx.Component('fetch').prototype.destroy.call(this);\r\n },\r\n\r\n _fetch (options) {\r\n if (this._socket && this._socket.connected) {\r\n this._refresh(options && options.params);\r\n } else {\r\n dmx.Component('fetch').prototype._fetch.call(this, options);\r\n }\r\n },\r\n\r\n _refresh (params) {\r\n params = dmx.extend(true, {}, this.props.params, params || {});\r\n\r\n this.dispatchEvent('start');\r\n this.set('state', {\r\n executing: true,\r\n uploading: false,\r\n processing: true,\r\n downloading: false,\r\n });\r\n\r\n this._socket.emit(this._event, params, response => {\r\n this.set({\r\n status: response.status,\r\n data: response.data,\r\n state: {\r\n executing: false,\r\n uploading: false,\r\n processing: false,\r\n downloading: false,\r\n },\r\n });\r\n\r\n this.dispatchEvent(this._statusEvents[response.status] || 'error');\r\n this.dispatchEvent('done');\r\n });\r\n },\r\n\r\n});\r\n","dmx.Component('serverconnect-form', {\r\n\r\n extends: 'form',\r\n\r\n initialData: {\r\n status: 0,\r\n data: null,\r\n headers: {},\r\n state: {\r\n executing: false,\r\n uploading: false,\r\n processing: false,\r\n downloading: false,\r\n },\r\n uploadProgress: {\r\n position: 0,\r\n total: 0,\r\n percent: 0,\r\n },\r\n downloadProgress: {\r\n position: 0,\r\n total: 0,\r\n percent: 0,\r\n },\r\n lastError: {\r\n status: 0,\r\n message: '',\r\n response: null,\r\n },\r\n },\r\n\r\n attributes: {\r\n timeout: {\r\n type: Number,\r\n default: 0,\r\n },\r\n\r\n autosubmit: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n\r\n params: {\r\n type: Object,\r\n default: {},\r\n },\r\n\r\n headers: {\r\n type: Object,\r\n default: {},\r\n },\r\n\r\n postData: {\r\n type: String,\r\n default: 'form',\r\n },\r\n\r\n credentials: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n\r\n prefix: {\r\n type: String,\r\n default: '',\r\n },\r\n },\r\n\r\n methods: {\r\n abort () {\r\n this._abort();\r\n },\r\n\r\n reset (clearData) {\r\n this._reset();\r\n\r\n if (clearData) {\r\n this._abort();\r\n this._resetData(true);\r\n }\r\n }\r\n },\r\n\r\n events: {\r\n start: Event, // when starting an ajax call\r\n done: Event, // when ajax call completed (success and error)\r\n error: Event, // server error or javascript error (json parse or network transport) or timeout error\r\n unauthorized: Event, // 401 status from server\r\n forbidden: Event, // 403 status from server\r\n ratelimit: Event, // 429 status from server\r\n abort: Event, // ajax call was aborted\r\n success: Event, // successful ajax call,\r\n upload: ProgressEvent, // on upload progress\r\n download: ProgressEvent, // on download progress\r\n },\r\n\r\n init (node) {\r\n dmx.Component('form').prototype.init.call(this, node);\r\n\r\n this._loadHandler = this._loadHandler.bind(this);\r\n this._abortHandler = this._abortHandler.bind(this);\r\n this._errorHandler = this._errorHandler.bind(this);\r\n this._timeoutHandler = this._timeoutHandler.bind(this);\r\n this._downloadProgressHandler = this._progressHandler.bind(this, 'download');\r\n this._uploadProgressHandler = this._progressHandler.bind(this, 'upload');\r\n\r\n this._xhr = new XMLHttpRequest();\r\n this._xhr.addEventListener('load', this._loadHandler);\r\n this._xhr.addEventListener('abort', this._abortHandler);\r\n this._xhr.addEventListener('error', this._errorHandler);\r\n this._xhr.addEventListener('timeout', this._timeoutHandler);\r\n this._xhr.addEventListener('progress', this._downloadProgressHandler);\r\n this._xhr.upload.addEventListener('progress', this._uploadProgressHandler);\r\n\r\n this._extendNode(node);\r\n\r\n if (this.props.autosubmit) {\r\n dmx.nextTick(() => this._submit());\r\n }\r\n },\r\n\r\n destroy () {\r\n dmx.Component('form').prototype.destroy.call(this);\r\n\r\n if (this._xhr) {\r\n this._xhr.removeEventListener('load', this._loadHandler);\r\n this._xhr.removeEventListener('abort', this._abortHandler);\r\n this._xhr.removeEventListener('error', this._errorHandler);\r\n this._xhr.removeEventListener('timeout', this._timeoutHandler);\r\n this._xhr.removeEventListener('progress', this._downloadProgressHandler);\r\n if (this._xhr.upload) {\r\n this._xhr.upload.removeEventListener('progress', this._uploadProgressHandler);\r\n }\r\n this._xhr = null;\r\n }\r\n },\r\n\r\n // TODO: deprecate this, use JSON or expression instead\r\n $parseAttributes (node) {\r\n dmx.BaseComponent.prototype.$parseAttributes.call(this, node);\r\n\r\n dmx.dom.getAttributes(node).forEach((attr) => {\r\n const { name, argument, value } = attr;\r\n if (argument && value && ['param', 'header'].includes(name)) {\r\n this.$watch(value, (watchValue) => {\r\n this.props[name + 's'] = Object.assign({}, this.props[name + 's'], { [argument]: watchValue });\r\n }, {\r\n node,\r\n attribute: attr.fullName,\r\n type: 'attribute',\r\n description: `dmx-${name}:${argument}`,\r\n });\r\n }\r\n });\r\n },\r\n\r\n _statusEvents: {\r\n 200: 'success',\r\n 400: 'invalid',\r\n 401: 'unauthorized',\r\n 403: 'forbidden',\r\n 429: 'ratelimit',\r\n },\r\n\r\n _extendNode (node) {\r\n node.dmxExtraData = {};\r\n node.dmxExtraElements = [];\r\n },\r\n\r\n _abort () {\r\n if (this._xhr) {\r\n this._xhr.abort();\r\n }\r\n },\r\n\r\n _resetData (clearData) {\r\n const data = {\r\n status: 0,\r\n headers: {},\r\n state: {\r\n executing: false,\r\n uploading: false,\r\n processing: false,\r\n downloading: false,\r\n },\r\n uploadProgress: {\r\n position: 0,\r\n total: 0,\r\n percent: 0,\r\n },\r\n downloadProgress: {\r\n position: 0,\r\n total: 0,\r\n percent: 0,\r\n },\r\n lastError: {\r\n status: 0,\r\n message: \"\",\r\n response: null,\r\n },\r\n };\r\n\r\n if (clearData) {\r\n data.data = null;\r\n }\r\n\r\n this.set(data);\r\n },\r\n\r\n _formSubmit () {\r\n this._send();\r\n },\r\n\r\n _send () {\r\n // abort any previous request\r\n this._abort();\r\n\r\n const method = this.$node.method.toUpperCase();\r\n let action = this.$node.action;\r\n\r\n if (this.props.prefix) {\r\n action = this.props.prefix.replace(/\\/$/, '') + '/' + action.replace(/^\\//, '');\r\n }\r\n\r\n let data = null;\r\n\r\n let qs = Object.keys(this.props.params)\r\n .filter(key => this.props.params[key] != null)\r\n .map(key => {\r\n let value = this.props.params[key];\r\n if (typeof value === 'string' && value.startsWith('{{')) {\r\n value = this.parse(value);\r\n }\r\n return encodeURIComponent(key) + '=' + encodeURIComponent(value);\r\n })\r\n .join('&');\r\n\r\n if (method === 'GET') {\r\n if (qs.length) qs += '&';\r\n\r\n qs += Array.from(this.$node.elements)\r\n .filter(element => !element.disabled && ((element.type !== 'radio' && element.type !== 'checkbox') || element.checked))\r\n .map(element => encodeURIComponent(element.name) + '=' + encodeURIComponent(element.value))\r\n .join('&');\r\n } else if (this.props.postData === 'json') {\r\n data = this._parseJsonForm();\r\n\r\n if (this.$node.dmxExtraData) {\r\n Object.assign(data, this.$node.dmxExtraData);\r\n }\r\n\r\n data = JSON.stringify(data);\r\n } else {\r\n data = new FormData(this.$node);\r\n\r\n if (this.$node.dmxExtraData) {\r\n for (let key in this.$node.dmxExtraData) {\r\n let value = this.$node.dmxExtraData[key];\r\n\r\n if (Array.isArray(value)) {\r\n if (!/\\[\\]$/.test(key)) key += '[]';\r\n value.forEach(value => data.append(key, value));\r\n } else {\r\n data.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._resetData();\r\n this.dispatchEvent('start');\r\n\r\n this.set('state', {\r\n executing: true,\r\n uploading: false,\r\n processing: false,\r\n downloading: false,\r\n });\r\n\r\n let url = action;\r\n\r\n if (qs) {\r\n url += (url.includes('?') ? '&' : '?') + qs;\r\n }\r\n\r\n if (window.WebviewProxy) {\r\n // Cordova webview proxy plugin\r\n url = window.WebviewProxy.convertProxyUrl(url);\r\n }\r\n\r\n this._xhr.open(method, url);\r\n this._xhr.timeout = this.props.timeout * 1000;\r\n if (this.props.postData === 'json') {\r\n this._xhr.setRequestHeader('Content-Type', 'application/json');\r\n }\r\n for (const header in this.props.headers) {\r\n this._xhr.setRequestHeader(header, this.props.headers[header]);\r\n }\r\n this._xhr.setRequestHeader('accept', 'application/json');\r\n if (this.props.credentials) {\r\n this._xhr.withCredentials = true;\r\n }\r\n\r\n const csrf_token = document.querySelector('meta[name=\"csrf-token\"]');\r\n if (csrf_token) {\r\n this._xhr.setRequestHeader('X-CSRF-Token', csrf_token.content);\r\n }\r\n\r\n try {\r\n this._xhr.send(data);\r\n } catch (err) {\r\n this._done(err);\r\n }\r\n },\r\n\r\n _done (err) {\r\n this._resetData();\r\n\r\n if (err) {\r\n this.set('lastError', {\r\n status: 0,\r\n message: err.message,\r\n response: null,\r\n });\r\n\r\n this.dispatchEvent('error');\r\n this.dispatchEvent('done');\r\n\r\n this.$node.dispatchEvent(new CustomEvent('xhrerror', {\r\n bubbles: true,\r\n detail: { source: this.name, status: this._xhr.status, response: err.message }\r\n }));\r\n\r\n return;\r\n }\r\n\r\n let response = this._xhr.responseText;\r\n\r\n try {\r\n response = JSON.parse(response);\r\n } catch (err) {\r\n if (this._xhr.status < 400) {\r\n this.set('lastError', {\r\n status: 0,\r\n message: 'Response was not valid JSON',\r\n response: response,\r\n });\r\n\r\n this.dispatchEvent('error');\r\n this.dispatchEvent('done');\r\n\r\n this.$node.dispatchEvent(new CustomEvent('xhrerror', {\r\n bubbles: true,\r\n detail: { source: this.name, status: this._xhr.status, response: 'Invalid JSON: ' + response }\r\n }));\r\n\r\n return;\r\n }\r\n }\r\n\r\n try {\r\n const strHeaders = this._xhr.getAllResponseHeaders();\r\n const arrHeaders = strHeaders.trim().split(/[\\r\\n]+/);\r\n\r\n this.set('headers', arrHeaders.reduce((headers, line) => {\r\n const parts = line.split(': ');\r\n const name = parts.shift();\r\n const value = parts.join(': ');\r\n\r\n headers[name] = value;\r\n\r\n return headers;\r\n }, {}));\r\n } catch (err) {\r\n console.warn('Error parsing response headers', err);\r\n }\r\n\r\n // reset form validation\r\n if (dmx.validateReset) dmx.validateReset(this.$node);\r\n if (window.grecaptcha && this.$node.querySelector('.g-recaptcha')) {\r\n grecaptcha.reset();\r\n }\r\n\r\n if (this._xhr.status < 400) {\r\n this.set({\r\n status: this._xhr.status,\r\n data: response,\r\n });\r\n\r\n this.dispatchEvent('success');\r\n this.dispatchEvent('done');\r\n\r\n this.$node.dispatchEvent(new CustomEvent('xhrsuccess', {\r\n bubbles: true,\r\n detail: { source: this.name, status: this._xhr.status, response: response }\r\n }));\r\n\r\n return;\r\n }\r\n\r\n this.set({\r\n status: this._xhr.status,\r\n lastError: {\r\n status: this._xhr.status,\r\n message: this._xhr.statusText,\r\n response: response,\r\n }\r\n });\r\n\r\n if (this._xhr.status === 400) {\r\n this.dispatchEvent('invalid');\r\n\r\n // server-side validation error\r\n if (response.form && dmx.validate.setMessage) {\r\n for (const name in response.form) {\r\n const element = this.$node.querySelector(`[name=\"${name}\"]`);\r\n if (element) {\r\n const message = response.form[name];\r\n dmx.validate.setMessage(element, message);\r\n }\r\n }\r\n } else if (dmx.debug) {\r\n // console warning for debug purpose\r\n console.warn('400 error, no form errors in response.', response);\r\n }\r\n } else if (this._xhr.status === 401) {\r\n this.dispatchEvent('unauthorized');\r\n } else if (this._xhr.status === 403) {\r\n this.dispatchEvent('forbidden');\r\n } else if (this._xhr.status === 429) {\r\n this.dispatchEvent('ratelimit');\r\n } else {\r\n this.dispatchEvent('error');\r\n }\r\n\r\n this.dispatchEvent('done');\r\n\r\n const errorDetail = err ? err.message : response;\r\n\r\n this.$node.dispatchEvent(new CustomEvent('xhr' + (this._statusEvents[this._xhr.status] || 'error'), {\r\n bubbles: true,\r\n detail: { source: this.name, status: this._xhr.status, response: errorDetail }\r\n }));\r\n },\r\n\r\n _loadHandler (event) {\r\n this._done();\r\n },\r\n\r\n _abortHandler (event) {\r\n this._resetData();\r\n this.dispatchEvent('abort');\r\n this.dispatchEvent('done');\r\n\r\n this.$node.dispatchEvent(new CustomEvent('xhrabort', {\r\n bubbles: true,\r\n detail: { source: this.name, status: 0, response: null }\r\n }));\r\n },\r\n\r\n _errorHandler (event) {\r\n this._done(Error('Failed to execute'));\r\n },\r\n\r\n _timeoutHandler (event) {\r\n this._done(Error('Execution timeout'));\r\n },\r\n\r\n _progressHandler (type, event) {\r\n const percent = event.lengthComputable ? Math.ceil(event.loaded * 100 / event.total) : 0;\r\n\r\n this.set({\r\n state: {\r\n executing: true,\r\n uploading: type === 'upload' && percent < 100,\r\n processing: type === 'upload' && percent === 100,\r\n downloading: type === 'download',\r\n },\r\n [type + 'Progress']: {\r\n position: event.loaded,\r\n total: event.total,\r\n percent: percent,\r\n },\r\n });\r\n\r\n this.dispatchEvent(type, {\r\n lengthComputable: event.lengthComputable,\r\n loaded: event.loaded,\r\n total: event.total,\r\n });\r\n },\r\n\r\n});\r\n","dmx.Component('if', {\r\n\r\n attributes: {\r\n condition: {\r\n type: Boolean,\r\n default: false\r\n },\r\n },\r\n\r\n events: {\r\n show: Event,\r\n hide: Event,\r\n },\r\n\r\n init (node) {\r\n this._shown = false;\r\n this._template = document.createDocumentFragment();\r\n\r\n while (node.firstChild) {\r\n this._template.appendChild(node.firstChild);\r\n }\r\n },\r\n\r\n render (node) {\r\n if (this.props.condition) {\r\n this._show();\r\n }\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n this.props.condition ? this._show() : this._hide();\r\n },\r\n\r\n destroy () {\r\n this._template = null;\r\n },\r\n\r\n _show () {\r\n if (this._shown) return;\r\n\r\n const template = this._template.cloneNode(true);\r\n this.$node.appendChild(template);\r\n this.$parse();\r\n this.dispatchEvent('show');\r\n this._shown = true;\r\n },\r\n\r\n _hide () {\r\n if (!this._shown) return;\r\n\r\n if (this.effects) {\r\n this.effects.forEach((effect) => effect());\r\n this.effects = null;\r\n }\r\n\r\n Array.from(this.$node.childNodes).forEach(node => {\r\n const event = new Event('remove', { cancelable: true });\r\n if (node.dispatchEvent(event)) node.remove();\r\n });\r\n \r\n this.$destroyChildren();\r\n this.dispatchEvent('hide');\r\n this._shown = false;\r\n }\r\n});\r\n","dmx.Component('datetime', {\r\n\r\n initialData: {\r\n datetime: null,\r\n },\r\n\r\n attributes: {\r\n interval: {\r\n type: String,\r\n default: 'seconds',\r\n enum: ['seconds', 'minutes', 'hours', 'days']\r\n },\r\n\r\n utc: {\r\n type: Boolean,\r\n default: false\r\n },\r\n },\r\n\r\n init () {\r\n this._tick = this._tick.bind(this);\r\n this._tick();\r\n },\r\n\r\n destroy () {\r\n if (this._timeout) clearTimeout(this._timeout);\r\n if (this._animationFrame) cancelAnimationFrame(this._animationFrame);\r\n },\r\n\r\n _tick () {\r\n this.set('datetime', this._datetime());\r\n\r\n switch (this.props.interval) {\r\n case 'seconds': return this._timeout = setTimeout(this._tick, 1000);\r\n case 'minutes': return this._timeout = setTimeout(this._tick, 60000);\r\n case 'hours': return this._timeout = setTimeout(this._tick, 3600000);\r\n case 'days': return this._timeout = setTimeout(this._tick, 86400000);\r\n default: return this._animationFrame = requestAnimationFrame(this._tick);\r\n }\r\n },\r\n\r\n _datetime () {\r\n const now = new Date();\r\n const pad = (n, d) => ('0000' + n).slice(-d);\r\n const utc = this.props.utc;\r\n \r\n const year = utc ? now.getUTCFullYear() : now.getFullYear();\r\n const month = (utc ? now.getUTCMonth() : now.getMonth()) + 1;\r\n const day = utc ? now.getUTCDate() : now.getDate();\r\n const hours = utc ? now.getUTCHours() : now.getHours();\r\n const minutes = utc ? now.getUTCMinutes() : now.getMinutes();\r\n const seconds = utc ? now.getUTCSeconds() : now.getSeconds();\r\n\r\n const dateString = pad(year, 4) + '-' + pad(month, 2) + '-' + pad(day, 2);\r\n const tz = utc ? 'Z' : '';\r\n\r\n switch (this.props.interval) {\r\n case 'days': return dateString + 'T00:00:00' + tz;\r\n case 'hours': return dateString + 'T' + pad(hours, 2) + ':00:00' + tz;\r\n case 'minutes': return dateString + 'T' + pad(hours, 2) + ':' + pad(minutes, 2) + ':00' + tz;\r\n }\r\n\r\n return dateString + 'T' + pad(hours, 2) + ':' + pad(minutes, 2) + ':' + pad(seconds, 2) + tz;\r\n },\r\n\r\n});\r\n","dmx.Component('api-action', { extends: 'fetch' });\r\n","dmx.Component('api-form', { extends: 'serverconnect-form' });\r\n","dmx.Component(\"array\", {\r\n\r\n initialData: {\r\n items: [],\r\n count: 0,\r\n },\r\n\r\n attributes: {\r\n items: {\r\n type: Array,\r\n default: [],\r\n },\r\n },\r\n\r\n events: {\r\n updated: Event,\r\n },\r\n\r\n methods: {\r\n add (newItem) {\r\n this._splice(this._count(), 0, newItem);\r\n },\r\n\r\n addUniq (newItem) {\r\n // Only add when not exists\r\n if (this._indexOf(newItem) == -1) {\r\n this._splice(this._count(), 0, newItem);\r\n }\r\n },\r\n\r\n insert (index, newItem) {\r\n this._splice(index, 0, newItem);\r\n },\r\n\r\n insertBefore (item, newItem) {\r\n const index = this._indexOf(item);\r\n if (index != -1) {\r\n this._splice(index, 0, newItem);\r\n }\r\n },\r\n\r\n insertAfter (item, newItem) {\r\n const index = this._indexOf(item);\r\n if (index != -1) {\r\n this._splice(index + 1, 0, newItem);\r\n }\r\n },\r\n\r\n replace (item, newItem) {\r\n const index = this._indexOf(item);\r\n if (index != -1) {\r\n this._splice(index, 1, newItem);\r\n }\r\n },\r\n\r\n replaceAt (index, newItem) {\r\n this._splice(index, 1, newItem);\r\n },\r\n\r\n remove (item) {\r\n const index = this._indexOf(item);\r\n if (index != -1) {\r\n this._splice(index, 1);\r\n }\r\n },\r\n\r\n removeAt (index) {\r\n this._splice(index, 1);\r\n },\r\n\r\n concat (otherArray) {\r\n const arr = dmx.clone(this.data.items);\r\n arr.push(...dmx.array(otherArray));\r\n this._updateData(arr);\r\n },\r\n\r\n concatUniq (otherArray) {\r\n const arr = dmx.clone(this.data.items);\r\n const otherArr = dmx.array(otherArray);\r\n for (const item of otherArr) {\r\n if (arr.indexOf(item) == -1) {\r\n arr.push(item);\r\n }\r\n }\r\n this._updateData(arr);\r\n },\r\n\r\n flatten (depth = 1) {\r\n const arr = dmx.clone(this.data.items);\r\n const flattened = arr.flat(depth);\r\n this._updateData(flattened);\r\n },\r\n\r\n flattenUniq (depth = 1) {\r\n const arr = dmx.clone(this.data.items);\r\n const flattened = arr.flat(depth);\r\n const uniq = [];\r\n for (const item of flattened) {\r\n if (uniq.indexOf(item) == -1) {\r\n uniq.push(item);\r\n }\r\n }\r\n this._updateData(uniq);\r\n },\r\n\r\n reverse () {\r\n this._reverse();\r\n },\r\n\r\n sort (sortBy, direction) {\r\n this._sort(sortBy, direction);\r\n },\r\n\r\n randomize () {\r\n this._randomize();\r\n },\r\n\r\n empty () {\r\n this._updateData([]);\r\n },\r\n },\r\n\r\n render: false,\r\n\r\n init () {\r\n const arr = dmx.array(this.props.items);\r\n\r\n this.set({\r\n items: arr,\r\n count: arr.length,\r\n });\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n if (updatedProps.has(\"items\")) {\r\n this._updateData(dmx.array(this.props.items));\r\n }\r\n },\r\n\r\n _count () {\r\n return this.data.items.length;\r\n },\r\n\r\n _indexOf (item) {\r\n return this.data.items.indexOf(item);\r\n },\r\n\r\n _splice (index, remove, item) {\r\n const arr = dmx.clone(this.data.items);\r\n\r\n if (item !== undefined) {\r\n arr.splice(index, remove, item);\r\n } else {\r\n arr.splice(index, remove);\r\n }\r\n\r\n this._updateData(arr);\r\n },\r\n\r\n _reverse () {\r\n const arr = dmx.clone(this.data.items);\r\n arr.reverse();\r\n this._updateData(arr);\r\n },\r\n\r\n _sort (sortBy, direction) {\r\n const arr = dmx.clone(this.data.items);\r\n const hasSortBy = sortBy !== undefined && sortBy !== null;\r\n const isDescending = typeof direction === 'string' && direction.toLowerCase() === 'desc';\r\n\r\n if (!hasSortBy) {\r\n arr.sort();\r\n if (isDescending) {\r\n arr.reverse();\r\n }\r\n } else {\r\n const comparator = this._createComparator(sortBy, isDescending);\r\n arr.sort(comparator);\r\n }\r\n\r\n this._updateData(arr);\r\n },\r\n\r\n _randomize () {\r\n const arr = dmx.clone(this.data.items);\r\n\r\n if (arr.length < 2) {\r\n this._updateData(arr);\r\n return;\r\n }\r\n\r\n const rng = dmx.randomizer(Date.now() + Math.random());\r\n for (let i = arr.length - 1; i > 0; i--) {\r\n const j = Math.floor(rng() * (i + 1));\r\n const temp = arr[i];\r\n arr[i] = arr[j];\r\n arr[j] = temp;\r\n }\r\n\r\n this._updateData(arr);\r\n },\r\n\r\n _createComparator (sortBy, isDescending) {\r\n if (typeof sortBy === 'function') {\r\n return isDescending\r\n ? (a, b) => sortBy(b, a)\r\n : sortBy;\r\n }\r\n\r\n const getter = this._buildGetter(sortBy);\r\n return (a, b) => {\r\n const valueA = getter(a);\r\n const valueB = getter(b);\r\n return this._compareValues(valueA, valueB, isDescending);\r\n };\r\n },\r\n\r\n _buildGetter (sortBy) {\r\n if (Array.isArray(sortBy) && sortBy.length) {\r\n return (item) => this._resolvePath(item, sortBy);\r\n }\r\n\r\n if (typeof sortBy === 'string' && sortBy.length) {\r\n const segments = sortBy.split('.');\r\n return (item) => this._resolvePath(item, segments);\r\n }\r\n\r\n return (item) => item;\r\n },\r\n\r\n _resolvePath (item, segments) {\r\n return segments.reduce((value, segment) => {\r\n if (value == null) {\r\n return undefined;\r\n }\r\n return value[segment];\r\n }, item);\r\n },\r\n\r\n _compareValues (a, b, isDescending) {\r\n if (a === b) return 0;\r\n\r\n if (a == null) return isDescending ? 1 : -1;\r\n if (b == null) return isDescending ? -1 : 1;\r\n\r\n if (a > b) return isDescending ? -1 : 1;\r\n if (a < b) return isDescending ? 1 : -1;\r\n\r\n return 0;\r\n },\r\n\r\n _updateData (arr) {\r\n if (!dmx.equal(this.data.items, arr)) {\r\n this.set({\r\n items: arr,\r\n count: arr.length,\r\n });\r\n\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n }\r\n },\r\n\r\n});\r\n","dmx.Component('group', {});\r\n","dmx.Component('flow', {\r\n\r\n initialData: {\r\n data: null,\r\n running: false,\r\n lastError: null,\r\n },\r\n\r\n attributes: {\r\n src: {\r\n type: String,\r\n default: null,\r\n },\r\n\r\n flow: {\r\n type: [Array, Object],\r\n default: null,\r\n },\r\n\r\n preload: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n\r\n autorun: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n\r\n params: {\r\n type: Object,\r\n default: {},\r\n },\r\n },\r\n\r\n methods: {\r\n run (param, throwError) {\r\n const propagate = throwError === undefined ? true : throwError;\r\n return this._run(param, propagate);\r\n },\r\n\r\n runSub (param) {\r\n return this._runSub(param);\r\n },\r\n },\r\n\r\n events: {\r\n start: Event,\r\n done: Event,\r\n error: Event,\r\n },\r\n\r\n render: false,\r\n\r\n init (node) {\r\n if (this.props.flow) {\r\n // Flow definition provided via attribute (for testing/dynamic flows)\r\n this._flow = this.props.flow;\r\n if (this.props.autorun) this._run();\r\n } else if (this.props.src) {\r\n if (this.props.preload || this.props.autorun) {\r\n this._load(this.props.src, this.props.autorun).catch(console.error);\r\n }\r\n } else {\r\n try {\r\n this._flow = this._parse(node.textContent);\r\n if (this.props.autorun) this._run();\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }\r\n },\r\n\r\n destroy () {\r\n this._destroyed = true;\r\n },\r\n\r\n // TODO: deprecate this, use JSON or expression instead\r\n $parseAttributes (node) {\r\n dmx.BaseComponent.prototype.$parseAttributes.call(this, node);\r\n\r\n dmx.dom.getAttributes(node).forEach(({ name, argument, value }) => {\r\n if (argument && value && name == 'param') {\r\n this.$watch(value, value => {\r\n this.props.params = Object.assign({}, this.props.params, { [argument]: value });\r\n }, {\r\n node,\r\n attribute: `dmx-param:${argument}`,\r\n type: 'attribute',\r\n description: 'dmx-flow param binding',\r\n });\r\n }\r\n });\r\n },\r\n\r\n _load (url, run) {\r\n return fetch(url).then(response => {\r\n if (!response.ok || response.status >= 400) {\r\n throw Error(`Could not load flow ${this.name}, status ${response.status} ${response.statusText}`);\r\n }\r\n\r\n return response.text()\r\n }).then(text => {\r\n this._flow = this._parse(text);\r\n if (run) this._run();\r\n });\r\n },\r\n\r\n _parse (str) {\r\n return (window.Hjson ? Hjson : JSON).parse(str);\r\n },\r\n\r\n _runSub (param) {\r\n if (!this._flow) {\r\n if (this.props.src) {\r\n return this._load(this.props.src).then(() => {\r\n this._runFlow(param);\r\n });\r\n }\r\n\r\n throw Error('No flow');\r\n }\r\n\r\n return this._runFlow(param);\r\n },\r\n\r\n _run (param, throwError = true) {\r\n if (!this._flow) {\r\n if (this.props.src) {\r\n return this._load(this.props.src).then(() => {\r\n this._run(param, throwError);\r\n }).catch(console.error);\r\n }\r\n\r\n console.warn(`Flow ${this.name} is missing.`);\r\n return;\r\n }\r\n\r\n if (this.data.running) {\r\n console.info(`Can't run flow ${this.name} when a previous run didn't finish.`);\r\n return;\r\n }\r\n\r\n this.set({\r\n running: true,\r\n lastError: null,\r\n });\r\n\r\n this.dispatchEvent('start');\r\n\r\n if (dmx.debug) {\r\n console.debug(`Running flow ${this.name} with params`, param);\r\n console.time(`Flow ${this.name}`);\r\n }\r\n return this._runFlow(param).then(data => {\r\n if (dmx.debug) {\r\n console.debug(`Flow ${this.name} finished`, data);\r\n console.timeEnd(`Flow ${this.name}`);\r\n }\r\n this.set({\r\n running: false,\r\n data: data\r\n });\r\n\r\n this.dispatchEvent('done');\r\n\r\n return data;\r\n }).catch(err => {\r\n this.set({\r\n running: false,\r\n lastError: err && err.message,\r\n });\r\n\r\n this.dispatchEvent('error');\r\n\r\n if (throwError) {\r\n throw err;\r\n }\r\n })\r\n },\r\n\r\n _runFlow (param) {\r\n return dmx.Flow.run(this._flow, dmx.DataScope({\r\n $param: Object.assign({}, this.props.params, param),\r\n }, this));\r\n },\r\n\r\n});\r\n","dmx.Component('toggle', {\r\n\r\n initialData: {\r\n checked: false,\r\n },\r\n\r\n attributes: {\r\n checked: {\r\n type: Boolean,\r\n default: false,\r\n },\r\n },\r\n\r\n methods: {\r\n check () {\r\n this.props.checked = true;\r\n },\r\n\r\n uncheck () {\r\n this.props.checked = false;\r\n },\r\n\r\n toggle () {\r\n this.props.checked = !this.data.checked;\r\n }\r\n },\r\n\r\n events: {\r\n updated: Event,\r\n },\r\n\r\n render: false,\r\n\r\n init (node) {\r\n this.set('checked', this.props.checked);\r\n },\r\n\r\n performUpdate (updatedProps) {\r\n if (updatedProps.has('checked')) {\r\n this.set('checked', this.props.checked);\r\n dmx.nextTick(() => this.dispatchEvent(\"updated\"));\r\n }\r\n },\r\n\r\n});\r\n","dmx.Component('form-data', {\r\n\r\n attributes: {\r\n name: {\r\n type: String,\r\n default: 'data',\r\n },\r\n\r\n data: {\r\n type: [Array, Object], // can be anything\r\n default: null,\r\n },\r\n },\r\n\r\n init (node) {\r\n this._formdataHandler = this._formdataHandler.bind(this);\r\n this._form = node.closest('form');\r\n\r\n if (this._form) {\r\n this._form.addEventListener('formdata', this._formdataHandler);\r\n }\r\n },\r\n\r\n destroy () {\r\n if (this._form) {\r\n this._form.removeEventListener('formdata', this._formdataHandler);\r\n }\r\n },\r\n\r\n _formdataHandler (event) {\r\n const formData = event.formData;\r\n const data = this.props.data;\r\n\r\n this._appendData(formData, data, this.props.name);\r\n },\r\n\r\n _appendData (formData, data, prefix = '') {\r\n if (data === null) {\r\n return;\r\n }\r\n\r\n if (Array.isArray(data)) {\r\n data.forEach((value, index) => {\r\n this._appendData(formData, value, `${prefix}[${index}]`);\r\n });\r\n return;\r\n }\r\n\r\n if (typeof data === 'object') {\r\n Object.keys(data).forEach(key => {\r\n this._appendData(formData, data[key], `${prefix}[${key}]`);\r\n });\r\n return;\r\n }\r\n\r\n formData.append(prefix, data);\r\n },\r\n\r\n});","dmx.Attribute(\"bind\", \"mounted\", function (node, attr) {\r\n const name = attr.argument;\r\n const isToggle = dmx.reToggleAttribute.test(name);\r\n\r\n this.$watch(attr.value, value => {\r\n if (isToggle) {\r\n if (value) {\r\n node.setAttribute(name, \"\");\r\n } else if (node.hasAttribute(name)) {\r\n node.removeAttribute(name);\r\n }\r\n } else {\r\n if (name === \"style\" && typeof value === \"object\") {\r\n return Object.assign(node.style, value);\r\n }\r\n\r\n if (value == null) {\r\n return node.removeAttribute(name);\r\n }\r\n\r\n node.setAttribute(name, value);\r\n\r\n if (name === \"src\") {\r\n if (node.nodeName === \"VIDEO\" || node.nodeName === \"AUDIO\") {\r\n node.load();\r\n } else if (node.nodeName === \"SOURCE\" && node.parentNode) {\r\n node.parentNode.load();\r\n }\r\n }\r\n }\r\n }, {\r\n node,\r\n attribute: attr.fullName,\r\n type: 'attribute',\r\n description: `dmx-bind:${name}`,\r\n });\r\n});\r\n","dmx.Attribute(\"on\", \"mounted\", function (node, attr) {\r\n if (!node.dmxOn) {\r\n node.dmxOn = {\r\n component: this,\r\n };\r\n }\r\n\r\n node.dmxOn[attr.argument] = true;\r\n\r\n return dmx.eventListener(node, attr.argument, function (event) {\r\n // jQuery event\r\n if (event.originalEvent) event = event.originalEvent;\r\n\r\n const scope = dmx.DataScope({\r\n $event: event.$data,\r\n event,\r\n $originalEvent: event,\r\n }, node.dmxOn.component);\r\n\r\n scope.$this = this;\r\n\r\n const retValue = dmx.parse(attr.value, scope, {\r\n component: node.dmxOn.component,\r\n node,\r\n attribute: attr.fullName,\r\n type: 'event',\r\n description: `dmx-on:${attr.argument}`,\r\n });\r\n\r\n return retValue;\r\n }, attr.modifiers);\r\n});\r\n","dmx.Attribute('repeat', 'before', function (node, attr) {\r\n const startNode = document.createComment('start ' + attr.fullName + '=' + attr.value);\r\n const endNode = document.createComment('end ' + attr.fullName + '=' + attr.value);\r\n const template = document.createDocumentFragment();\r\n const RepeatItem = dmx.Component('repeat-item');\r\n\r\n node.parentNode.replaceChild(endNode, node);\r\n endNode.parentNode.insertBefore(startNode, endNode);\r\n node.removeAttribute(attr.fullName);\r\n\r\n template.append(node);\r\n\r\n let children = [];\r\n\r\n this.$watch(attr.value, repeat => {\r\n const items = dmx.repeatItems(repeat);\r\n\r\n if (items.length > 10000) {\r\n console.warn('More than 10000 repeat items, we limit the result!');\r\n //items.splice(10000, items.length);\r\n items.length = 10000;\r\n }\r\n\r\n if (attr.modifiers.fast) {\r\n if (children.length > items.length) {\r\n // destroy children\r\n children.splice(items.length).forEach(child => child.$destroy());\r\n }\r\n\r\n if (children.length) {\r\n // update existing children\r\n children.forEach((child, i) => child.set(items[i]));\r\n }\r\n\r\n if (items.length > children.length) {\r\n // add new children\r\n const fragment = document.createDocumentFragment();\r\n const toParse = new Set();\r\n\r\n items.slice(children.length).forEach(item => {\r\n const child = new RepeatItem(template.cloneNode(true), this, item);\r\n\r\n fragment.appendChild(child.$nodes[0]);\r\n //comment.parentNode.insertBefore(child.$nodes[0], comment);\r\n //child.$parse(child.$nodes[0]);\r\n toParse.add(child);\r\n\r\n children.push(child);\r\n this.$addChild(child);\r\n });\r\n\r\n if (endNode.parentNode) {\r\n endNode.parentNode.insertBefore(fragment, endNode);\r\n }\r\n\r\n for (const child of toParse) {\r\n child.$parse(child.$nodes[0]);\r\n }\r\n\r\n if (attr.argument) {\r\n this.set(attr.argument, items);\r\n }\r\n }\r\n } else {\r\n const fragment = document.createDocumentFragment();\r\n const toParse = new Set();\r\n\r\n children.splice(0).forEach(child => child.$destroy());\r\n\r\n for (const item of items) {\r\n const child = new RepeatItem(template.cloneNode(true), this, item);\r\n\r\n fragment.append(child.$nodes[0]);\r\n //endNode.parentNode.insertBefore(child.$nodes[0], endNode);\r\n //child.$parse(child.$nodes[0]);\r\n toParse.add(child);\r\n\r\n children.push(child);\r\n this.$addChild(child);\r\n }\r\n\r\n if (endNode.parentNode) {\r\n endNode.parentNode.insertBefore(fragment, endNode);\r\n }\r\n\r\n for (const child of toParse) {\r\n child.$parse(child.$nodes[0]);\r\n }\r\n\r\n if (attr.argument) {\r\n this.set(attr.argument, items);\r\n }\r\n }\r\n }, {\r\n node: endNode.parentNode || node.parentNode || node,\r\n attribute: attr.fullName,\r\n type: 'attribute',\r\n description: 'dmx-repeat',\r\n });\r\n});\r\n","dmx.Attribute(\"class\", \"mounted\", function (node, attr) {\r\n if (!node.dmxClass) {\r\n node.dmxClass = {\r\n component: this,\r\n };\r\n }\r\n\r\n this.$watch(attr.value, toggle => {\r\n node.dmxClass[attr.argument] = toggle;\r\n node.classList[toggle ? \"add\" : \"remove\"](attr.argument);\r\n }, {\r\n node,\r\n attribute: attr.fullName,\r\n type: 'attribute',\r\n description: `dmx-class:${attr.argument}`,\r\n });\r\n});\r\n","dmx.Attribute(\"hide\", \"mounted\", function (node, attr) {\r\n if (node.dmxHide) return;\r\n\r\n node.dmxHide = {\r\n component: this,\r\n initial: {\r\n display: node.style.getPropertyValue(\"display\"),\r\n priority: node.style.getPropertyPriority(\"display\"),\r\n },\r\n hide: null,\r\n };\r\n\r\n this.$watch(attr.value, hide => {\r\n node.dmxHide.hide = hide;\r\n\r\n const { initial } = node.dmxHide;\r\n const display = hide ? 'none' : initial.display;\r\n const priority = hide ? 'important' : initial.priority;\r\n\r\n node.style.setProperty('display', display, priority);\r\n }, {\r\n node,\r\n attribute: attr.fullName,\r\n type: 'attribute',\r\n description: 'dmx-hide',\r\n });\r\n});\r\n","dmx.Attribute('show', 'mounted', function(node, attr) {\r\n if (node.dmxShow) return;\r\n\r\n node.dmxShow = {\r\n component: this,\r\n initial: {\r\n display: node.style.getPropertyValue('display'),\r\n priority: node.style.getPropertyPriority('display'),\r\n },\r\n show: null,\r\n };\r\n\r\n this.$watch(attr.value, show => {\r\n node.dmxShow.show = show;\r\n\r\n const { initial } = node.dmxShow;\r\n const display = show ? initial.display : 'none';\r\n const priority = show ? initial.priority : 'important';\r\n\r\n node.style.setProperty('display', display, priority);\r\n }, {\r\n node,\r\n attribute: attr.fullName,\r\n type: 'attribute',\r\n description: 'dmx-show',\r\n });\r\n});\r\n","dmx.Attribute(\"html\", \"mounted\", function (node, attr) {\r\n if (node.dmxHtml) return;\r\n\r\n node.dmxHtml = {\r\n component: this,\r\n };\r\n\r\n this.$watch(attr.value, html => {\r\n node.innerHTML = html != null ? String(html) : \"\";\r\n }, {\r\n node,\r\n attribute: attr.fullName,\r\n type: 'attribute',\r\n description: 'dmx-html',\r\n });\r\n});\r\n","dmx.Attribute(\"text\", \"mounted\", function (node, attr) {\r\n if (node.dmxText) return;\r\n\r\n node.dmxText = {\r\n component: this,\r\n };\r\n\r\n this.$watch(attr.value, text => {\r\n const normalized = text != null ? String(text) : \"\";\r\n node.textContent = normalized;\r\n }, {\r\n node,\r\n attribute: attr.fullName,\r\n type: 'attribute',\r\n description: 'dmx-text',\r\n });\r\n});\r\n","dmx.Attribute(\"style\", \"mounted\", function (node, attr) {\r\n if (!node.dmxStyle) {\r\n node.dmxStyle = {\r\n component: this,\r\n };\r\n }\r\n\r\n const important = attr.modifiers.important ? \"important\" : \"\";\r\n\r\n this.$watch(attr.value, value => {\r\n node.dmxStyle[attr.argument] = value;\r\n if (value != null) {\r\n node.style.setProperty(attr.argument, value, important);\r\n }\r\n }, {\r\n node,\r\n attribute: attr.fullName,\r\n type: 'attribute',\r\n description: `dmx-style:${attr.argument}`,\r\n });\r\n});\r\n","dmx.Formatters('global', {\r\n\r\n // json(obj:Any):String\r\n json: function(obj) {\r\n return JSON.stringify(obj);\r\n },\r\n\r\n // log(obj:Any):Any\r\n log: function(obj) {\r\n console.log(obj);\r\n return obj;\r\n },\r\n\r\n // run(flow:Any, param:Any):Undefined\r\n run: function(flow, param) {\r\n var scope = dmx.DataScope({\r\n $param: param\r\n }, this);\r\n\r\n dmx.Flow.run(flow, scope);\r\n }\r\n\r\n});\r\n","dmx.Actions({\r\n\r\n subflow (options) {\r\n const subflow = this.parse(options.flow);\r\n const param = this.parse(options.param);\r\n\r\n return this.parse(subflow + \".runSub(\" + JSON.stringify(param) + \")\");\r\n },\r\n\r\n comment (options) {\r\n if (dmx.debug) {\r\n console.debug(options.message);\r\n }\r\n },\r\n\r\n wait (options) {\r\n let delay = this.parse(options.delay);\r\n\r\n if (typeof delay === \"string\" && delay.trim() !== \"\") {\r\n const numeric = Number(delay.trim());\r\n delay = Number.isFinite(numeric) ? numeric : delay;\r\n }\r\n\r\n if (typeof delay !== \"number\" || !Number.isFinite(delay)) {\r\n throw new Error(\"wait: Invalid delay\");\r\n }\r\n\r\n return new Promise((resolve) => {\r\n setTimeout(resolve, delay);\r\n });\r\n },\r\n\r\n now (options) {\r\n return new Date().toISOString();\r\n },\r\n\r\n random (options) {\r\n let lower = this.parse(options.lower);\r\n let upper = this.parse(options.upper);\r\n let floating = !!this.parse(options.floating);\r\n\r\n if (typeof lower != \"number\" || !isFinite(lower)) {\r\n lower = 0;\r\n }\r\n\r\n if (typeof upper != \"number\" || !isFinite(upper)) {\r\n upper = 1;\r\n }\r\n\r\n let rnd = lower + Math.random() * (upper - lower);\r\n\r\n if (!floating && Math.floor(lower) == lower && Math.floor(upper) == upper) {\r\n rnd = Math.round(rnd);\r\n }\r\n\r\n return rnd;\r\n },\r\n\r\n triggerDownload (options) {\r\n const url = this.parse(options.url);\r\n const filename = this.parse(options.filename) || \"\";\r\n\r\n if (typeof url != \"string\") {\r\n throw new Error(\"download: Invalid url\");\r\n }\r\n\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = filename;\r\n document.body.appendChild(a);\r\n a.click();\r\n a.remove();\r\n\r\n return true;\r\n },\r\n\r\n confirm (options) {\r\n const message = this.parse(options.message);\r\n\r\n if (typeof message != \"string\") {\r\n throw new Error(\"confirm: Invalid message\");\r\n }\r\n\r\n const result = confirm(message);\r\n\r\n if (result) {\r\n if (options.then) {\r\n return this._exec(options.then).then(() => result);\r\n }\r\n } else if (options.else) {\r\n return this._exec(options.else).then(() => result);\r\n }\r\n\r\n return result;\r\n },\r\n\r\n prompt (options) {\r\n const message = this.parse(options.message);\r\n\r\n if (typeof message != \"string\") {\r\n throw new Error(\"prompt: Invalid message\");\r\n }\r\n\r\n return prompt(message);\r\n },\r\n\r\n alert (options) {\r\n const message = this.parse(options.message);\r\n\r\n if (typeof message != \"string\") {\r\n throw new Error(\"alert: Invalid message\");\r\n }\r\n\r\n return alert(message);\r\n },\r\n\r\n repeat (options) {\r\n let items = dmx.clone(this.parse(options.repeat));\r\n\r\n if (!items) return;\r\n\r\n if (typeof items == \"boolean\") {\r\n items = items ? [0] : [];\r\n } else if (typeof items == \"string\") {\r\n items = items.split(/\\s*,\\s*/);\r\n } else if (typeof items == \"number\") {\r\n var arr = [];\r\n for (var i = 0; i < items; i++) {\r\n arr.push(i + 1);\r\n }\r\n items = arr;\r\n }\r\n\r\n if (typeof items != \"object\") {\r\n throw new Error(\"repeat: data is not repeatable\");\r\n }\r\n\r\n const parentScope = this.scope;\r\n const parentOutput = this.output;\r\n return this._each(items, (value, index) => {\r\n this.scope = new dmx.DataScope(\r\n Object.assign(\r\n {\r\n $value: value,\r\n $index: index,\r\n $name: index,\r\n $key: index,\r\n $number: index + 1,\r\n $oddeven: index % 2,\r\n },\r\n value\r\n ),\r\n parentScope\r\n );\r\n\r\n this.output = {};\r\n\r\n if (Array.isArray(options.outputFields) && value instanceof Object) {\r\n options.outputFields.forEach((field) => {\r\n this.output[field] = value[field];\r\n });\r\n }\r\n\r\n return this._exec(options.exec).then(() => {\r\n var output = this.output;\r\n this.scope = parentScope;\r\n this.output = parentOutput;\r\n return output;\r\n });\r\n });\r\n },\r\n\r\n condition (options) {\r\n const result = !!this.parse(options.if);\r\n\r\n if (result) {\r\n if (options.then) {\r\n return this._exec(options.then).then(() => result);\r\n }\r\n } else if (options.else) {\r\n return this._exec(options.else).then(() => result);\r\n }\r\n\r\n return result;\r\n },\r\n\r\n conditions (options) {\r\n if (Array.isArray(options.conditions)) {\r\n for (let i = 0; i < options.conditions.length; i++) {\r\n const condition = options.conditions[i];\r\n\r\n if (this.parse(condition.when)) {\r\n return this._exec(condition.then);\r\n }\r\n }\r\n }\r\n },\r\n\r\n select (options) {\r\n const expression = this.parse(options.expression);\r\n\r\n if (Array.isArray(options.cases)) {\r\n for (let i = 0; i < options.cases.length; i++) {\r\n const item = options.cases[i];\r\n\r\n if (this.parse(item.value) == expression) {\r\n return this._exec(item.exec);\r\n }\r\n }\r\n }\r\n },\r\n\r\n group (options) {\r\n if (options.name) {\r\n const parentOutput = this.output;\r\n this.output = {};\r\n\r\n return this._exec(options.exec).then(() => {\r\n var output = this.output;\r\n this.output = parentOutput;\r\n return output;\r\n });\r\n }\r\n\r\n return this._exec(options.exec);\r\n },\r\n\r\n while (options) {\r\n const loop = () => {\r\n return new Promise((resolve) => {\r\n if (!this.parse(options.condition)) return resolve();\r\n this._exec(options.exec).then(loop).then(resolve);\r\n });\r\n };\r\n\r\n return loop();\r\n },\r\n\r\n switch (options) {\r\n /*\r\n {\r\n switch: {\r\n expression: \"{{myVar}}\",\r\n cases: [\r\n { case: 1, exec: { console.log: { message: \"Case 1\" }}}\r\n { case: 2, exec: { console.log: { message: \"Case 2\" }}}\r\n { case: 3, exec: { console.log: { message: \"Case 3\" }}}\r\n ],\r\n default: { console.log: { message: \"Default Case\" }}\r\n }\r\n }\r\n */\r\n const expression = this.parse(options.expression);\r\n for (let i = 0; i < options.cases.length; i++) {\r\n if (this.parse(options.cases[i].case) === expression) {\r\n return this._exec(options.cases[i].exec);\r\n }\r\n }\r\n if (options.default) {\r\n return this._exec(options.default);\r\n }\r\n },\r\n\r\n tryCatch (options) {\r\n return Promise.resolve(this._exec(options.try)).catch(() => {\r\n return this._exec(options.catch);\r\n });\r\n },\r\n\r\n run (options) {\r\n if (!options.action) {\r\n throw new Error(\"run: missing action\");\r\n }\r\n\r\n return this.parse(options.action);\r\n },\r\n\r\n runJS (options) {\r\n if (!options.function) {\r\n throw new Error(\"runJS: missing function\");\r\n }\r\n\r\n const func = this.parse(options.function);\r\n const args = this.parse(options.args);\r\n\r\n return window[func].apply(null, args);\r\n },\r\n\r\n assign (options) {\r\n return this.parse(options.value);\r\n },\r\n\r\n setGlobal (options) {\r\n const key = this.parse(options.key);\r\n const value = this.parse(options.value);\r\n\r\n if (typeof key != \"string\") {\r\n throw new Error(\"setGlobal: key must be a string\");\r\n }\r\n\r\n dmx.global.set(key, value);\r\n\r\n return value;\r\n },\r\n\r\n setSession (options) {\r\n const key = this.parse(options.key);\r\n const value = this.parse(options.value);\r\n\r\n if (typeof key != \"string\") {\r\n throw new Error(\"setSession: key must be a string\");\r\n }\r\n\r\n sessionStorage.setItem(key, JSON.stringify(value));\r\n\r\n return value;\r\n },\r\n\r\n getSession (options) {\r\n const key = this.parse(options.key);\r\n\r\n if (typeof key != \"string\") {\r\n throw new Error(\"getSession: key must be a string\");\r\n }\r\n\r\n return JSON.parse(sessionStorage.getItem(key));\r\n },\r\n\r\n removeSession (options) {\r\n const key = this.parse(options.key);\r\n\r\n if (typeof key != \"string\") {\r\n throw new Error(\"removeSession: key must be a string\");\r\n }\r\n\r\n sessionStorage.removeItem(key);\r\n\r\n return true;\r\n },\r\n\r\n setStorage (options) {\r\n const key = this.parse(options.key);\r\n const value = this.parse(options.value);\r\n\r\n if (typeof key != \"string\") {\r\n throw new Error(\"setStorage: key must be a string\");\r\n }\r\n\r\n localStorage.setItem(key, JSON.stringify(value));\r\n\r\n return value;\r\n },\r\n\r\n getStorage (options) {\r\n const key = this.parse(options.key);\r\n\r\n if (typeof key != \"string\") {\r\n throw new Error(\"getStorage: key must be a string\");\r\n }\r\n\r\n const value = localStorage.getItem(key);\r\n\r\n if (value == null) {\r\n return null;\r\n }\r\n\r\n return JSON.parse(value);\r\n },\r\n\r\n removeStorage (options) {\r\n const key = this.parse(options.key);\r\n\r\n if (typeof key != \"string\") {\r\n throw new Error(\"removeStorage: key must be a string\");\r\n }\r\n\r\n localStorage.removeItem(key);\r\n\r\n return true;\r\n },\r\n\r\n fetch (options) {\r\n let url = this.parse(options.url);\r\n let method = this.parse(options.method);\r\n let timeout = this.parse(options.timeout);\r\n let dataType = this.parse(options.dataType);\r\n let data = this.parse(options.data);\r\n let params = this.parse(options.params);\r\n let headers = this.parse(options.headers);\r\n let credentials = this.parse(options.credentials);\r\n let body = null;\r\n\r\n if (typeof url != \"string\") {\r\n throw new Error(\"fetch: invalid url \" + url);\r\n }\r\n\r\n if (![\"GET\", \"POST\", \"PUT\", \"DELETE\"].includes(method)) {\r\n //throw new Error('fetch: invalid method ' + method);\r\n method = \"GET\";\r\n }\r\n\r\n if (![\"auto\", \"json\", \"text\"].includes(dataType)) {\r\n dataType = \"auto\";\r\n }\r\n\r\n if (typeof timeout != \"number\") {\r\n timeout = 0;\r\n }\r\n\r\n if (!headers) {\r\n headers = {};\r\n }\r\n\r\n if (typeof params == \"object\") {\r\n for (var param in params) {\r\n if (params.hasOwnProperty(param) && params[param] != null) {\r\n url +=\r\n (url.indexOf(\"?\") != -1 ? \"&\" : \"?\") +\r\n encodeURIComponent(param) +\r\n \"=\" +\r\n encodeURIComponent(params[param]);\r\n }\r\n }\r\n }\r\n\r\n if (method != \"GET\") {\r\n if (dataType == \"text\") {\r\n if (!headers[\"Content-Type\"]) {\r\n headers[\"Content-Type\"] = \"application/text\";\r\n }\r\n body = data.toString();\r\n } else if (dataType == \"json\") {\r\n if (!headers[\"Content-Type\"]) {\r\n headers[\"Content-Type\"] = \"application/json\";\r\n }\r\n body = JSON.stringify(data);\r\n } else {\r\n if (method == \"POST\") {\r\n body = new FormData();\r\n\r\n if (typeof data == \"object\" && !Array.isArray(data)) {\r\n for (var key in data) {\r\n if (data.hasOwnProperty(key)) {\r\n var value = data[key];\r\n\r\n if (Array.isArray(value)) {\r\n if (!/\\[\\]$/.test(key)) {\r\n key += \"[]\";\r\n }\r\n for (var i in value) {\r\n if (value.hasOwnProperty(i)) {\r\n body.append(key, value[i]);\r\n }\r\n }\r\n } else {\r\n body.set(key, value);\r\n }\r\n }\r\n }\r\n }\r\n } else if (data) {\r\n if (!headers[\"Content-Type\"]) {\r\n headers[\"Content-Type\"] = \"application/text\";\r\n }\r\n body = data.toString();\r\n }\r\n }\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n var xhr = new XMLHttpRequest();\r\n\r\n xhr.onerror = reject;\r\n xhr.onabort = reject;\r\n xhr.ontimeout = reject;\r\n xhr.onload = function () {\r\n var response = xhr.responseText;\r\n var headers = (function (raw) {\r\n var arr = raw.trim().split(/[\\r\\n]+/);\r\n\r\n return arr.reduce(function (headers, line) {\r\n var parts = line.split(\": \");\r\n var header = parts.shift();\r\n var value = parts.join(\": \");\r\n\r\n headers[header.toLowerCase()] = value;\r\n\r\n return headers;\r\n }, {});\r\n })(xhr.getAllResponseHeaders());\r\n\r\n if (/^application\\/json/.test(headers[\"content-type\"])) {\r\n response = JSON.parse(response);\r\n }\r\n\r\n resolve({\r\n status: xhr.status,\r\n headers: headers,\r\n data: response,\r\n });\r\n };\r\n\r\n xhr.open(method, url);\r\n\r\n xhr.timeout = timeout * 1000;\r\n\r\n for (var header in headers) {\r\n if (headers.hasOwnProperty(header)) {\r\n xhr.setRequestHeader(header, headers[header]);\r\n }\r\n }\r\n\r\n if (credentials) {\r\n xhr.withCredentials = true;\r\n }\r\n\r\n xhr.send(body);\r\n });\r\n },\r\n});\r\n\r\n// aliasses\r\ndmx.__actions[\"setValue\"] = dmx.__actions[\"assign\"];\r\ndmx.__actions[\"api\"] = dmx.__actions[\"fetch\"];\r\ndmx.__actions[\"api.send\"] = dmx.__actions[\"fetch\"];\r\ndmx.__actions[\"serverConnect\"] = dmx.__actions[\"fetch\"];\r\n","dmx.Actions({\r\n /**\r\n * Add new columns to the collection\r\n * @param {Object} options\r\n * @param {Object[]} options.collection - The collection\r\n * @param {Object.<string,*>} options.add - Object with column name as key and the value\r\n * @param {boolean} [options.overwrite=false] - Overwrite existing columns\r\n * @returns {Object[]} - New collection\r\n */\r\n 'collections.addColumns': function(options) {\r\n var collection = this.parse(options.collection);\r\n var add = options.add;\r\n var overwrite = !!this.parse(options.overwrite);\r\n\r\n if (!collection.length) return [];\r\n\r\n var output = [];\r\n\r\n for (var i = 0, l = collection.length; i < l; i++) {\r\n var row = dmx.clone(collection[i]);\r\n\r\n for (var column in add) {\r\n if (add.hasOwnProperty(column)) {\r\n var scope = new dmx.DataScope(row, this.scope);\r\n\r\n if (overwrite || row[column] == null) {\r\n row[column] = dmx.parse(add[column], scope);\r\n }\r\n }\r\n }\r\n\r\n output.push(row);\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Remove entire specified columns from the collection\r\n * @param {Object} options\r\n * @param {Object[]} options.collection - The collection\r\n * @param {string[]} options.columns - The columns\r\n * @param {boolean} [options.keep=false] - Keep or remove the columns\r\n * @returns {Object[]} - New collection\r\n */\r\n 'collections.filterColumns': function(options) {\r\n var collection = this.parse(options.collection);\r\n var columns = this.parse(options.columns);\r\n var keep = !!this.parse(options.keep);\r\n\r\n if (!collection.length) return [];\r\n\r\n var output = [];\r\n\r\n for (var i = 0, l = collection.length; i < l; i++) {\r\n var row = collection[i];\r\n var newRow = {};\r\n\r\n for (var column in row) {\r\n if (row.hasOwnProperty(column)) {\r\n if (columns.includes(column)) {\r\n if (keep) {\r\n newRow[column] = dmx.clone(row[column]);\r\n }\r\n } else if (!keep) {\r\n newRow[column] = dmx.clone(row[column]);\r\n }\r\n }\r\n }\r\n\r\n output.push(newRow);\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Rename columns in the collection\r\n * @param {Object} options\r\n * @param {Object[]} options.collection - The collection\r\n * @param {Object.<string,string>} options.rename - Object with old name as key and new name as value\r\n * @returns {Object[]} - New collection\r\n */\r\n 'collections.renameColumns': function(options) {\r\n var collection = this.parse(options.collection);\r\n var rename = this.parse(options.rename);\r\n\r\n if (!collection.length) return [];\r\n\r\n var output = [];\r\n\r\n for (var i = 0, l = collection.length; i < l; i++) {\r\n var row = collection[i];\r\n var newRow = {};\r\n\r\n for (var column in row) {\r\n if (row.hasOwnProperty(column)) {\r\n newRow[rename[column] || column] = dmx.clone(row[column]);\r\n }\r\n }\r\n\r\n output.push(newRow);\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Fills empty rows with the row above's value\r\n * @param {Object} options\r\n * @param {Object[]} options.collection - The collection\r\n * @param {string[]} options.columns - The columns to fill\r\n * @returns {Object[]} - New collection\r\n */\r\n 'collections.fillDown': function(options) {\r\n var collection = this.parse(options.collection);\r\n var columns = this.parse(options.columns);\r\n\r\n if (!collection.length) return [];\r\n\r\n var output = [];\r\n var toFill = {};\r\n\r\n for (var i = 0, l = columns.length; i < l; i++) {\r\n toFill[columns[i]] = null;\r\n }\r\n\r\n for (var i = 0, l = collection.length; i < l; i++) {\r\n var row = dmx.clone(collection[i]);\r\n\r\n for (var column in toFill) {\r\n if (toFill.hasOwnProperty(column)) {\r\n if (row[column] == null) {\r\n row[column] = toFill[column];\r\n } else {\r\n toFill[column] = row[column];\r\n }\r\n }\r\n }\r\n\r\n output.push(row);\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Add new rows to the collection\r\n * @param {Object} options\r\n * @param {Object[]} options.collection - The collection\r\n * @param {Object[]} options.rows - The rows to add\r\n * @returns {Object[]} - New collection\r\n */\r\n 'collections.addRows': function(options) {\r\n var collection = this.parse(options.collection);\r\n var rows = this.parse(options.rows);\r\n\r\n return dmx.clone(collection).concat(dmx.clone(rows));\r\n },\r\n\r\n /**\r\n * Add row numbers to the collection\r\n * @param {Object} options\r\n * @param {Object[]} options.collection - The collection\r\n * @param {string} options.column - The name for the column\r\n * @param {number} options.startAt - The row number to start with\r\n * @param {boolean} [options.desc=false] - Order descending\r\n * @returns {Object[]} - New collection\r\n */\r\n 'collections.addRowNumbers': function(options) {\r\n var collection = this.parse(options.collection);\r\n var column = this.parse(options.column);\r\n var startAt = this.parse(options.startAt);\r\n var desc = !!this.parse(options.desc);\r\n\r\n var output = [];\r\n\r\n for (var i = 0, l = collection.length; i < l; i++) {\r\n var row = dmx.clone(collection[i]);\r\n row[column] = desc ? l + startAt - i : startAt + i;\r\n output.push(row);\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Join two collections (Left join)\r\n * @param {Object} options\r\n * @param {Object[]} options.collection1 - Left collection\r\n * @param {Object[]} options.collection2 - Right collection\r\n * @param {Object.<string,string>} options.matches - Columns to match\r\n * @param {boolean} [options.matchAll=false] - Match columns using AND instead of OR\r\n * @returns {Object[]} - New collection\r\n */\r\n 'colections.join': function(options) {\r\n var collection1 = this.parse(options.collection1);\r\n var collection2 = this.parse(options.collection2);\r\n var matches = this.parse(options.matches);\r\n var matchAll = !!this.parse(options.matchAll);\r\n\r\n var output = [];\r\n\r\n for (var i = 0, l = collection1.length; i < l; i++) {\r\n var row = dmx.clone(collection1[i]);\r\n\r\n for (var j = 0, l2 = collection2.length; j < l2; j++) {\r\n var row2 = collection2[j];\r\n var hasMatch = false;\r\n\r\n for (var match in matches) {\r\n if (matches.hasOwnProperty(match)) {\r\n if (row[match] == row2[matches[match]]) {\r\n hasMatch = true;\r\n if (!matchAll) break;\r\n } else if (matchAll) {\r\n hasMatch = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (hasMatch) {\r\n for (var column in row2) {\r\n if (row2.hasOwnProperty(column)) {\r\n // TODO duplicate row from collection1 when multiple matches exist in collection2\r\n // TODO check for duplicate column names\r\n row[column] = dmx.clone(row2[column]);\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n output.push(row);\r\n }\r\n\r\n return output;\r\n },\r\n\r\n /**\r\n * Normalize all rows, add missing columns with NULL value\r\n * @param {Object} options\r\n * @param {Object[]} options.collection - The collection\r\n * @returns {Object[]} - New collection\r\n */\r\n 'collections.mormalize': function(options) {\r\n var collection = this.parse(options.collection);\r\n\r\n var columns = [];\r\n var output = [];\r\n\r\n // first collect all columns from collection\r\n for (var i = 0, l = collection.length; i < l; i++) {\r\n for (var column in collection[i]) {\r\n if (collection[i].hasOwnProperty(column)) {\r\n if (columns.indexOf(column) == -1) {\r\n columns.push(column);\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (var i = 0, l = collection.length; i < l; i++) {\r\n var row = {};\r\n\r\n for (var j = 0, l2 = columns.length; j < l2; j++) {\r\n var column = columns[j];\r\n var hasValue = collection[i].hasOwnProperty(column);\r\n var value = hasValue ? dmx.clone(collection[i][column]) : null;\r\n row[column] = value != null ? value : null;\r\n }\r\n\r\n output.push(row);\r\n }\r\n\r\n return output;\r\n }\r\n\r\n});","dmx.Actions({\r\n\r\n 'console.log': function(options) {\r\n console.log(this.parse(options.message));\r\n },\r\n\r\n 'console.info': function(options) {\r\n console.info(this.parse(options.message));\r\n },\r\n\r\n 'console.warn': function(options) {\r\n console.warn(this.parse(options.message));\r\n },\r\n\r\n 'console.error': function(options) {\r\n console.error(this.parse(options.message));\r\n },\r\n\r\n 'console.count': function(options) {\r\n console.count(this.parse(options.label));\r\n },\r\n\r\n 'console.time': function(options) {\r\n console.time(this.parse(options.label));\r\n },\r\n\r\n 'console.timeEnd': function(options) {\r\n console.timeEnd(this.parse(options.label));\r\n },\r\n\r\n 'console.group': function(options) {\r\n console.group();\r\n },\r\n\r\n 'console.groupEnd': function(options) {\r\n console.groupEnd();\r\n },\r\n\r\n 'console.clear': function(options) {\r\n console.clear();\r\n }\r\n\r\n});"]}
|