{ "version": 3, "sources": ["../../node_modules/imba1/src/imba/imba.imba1", "../../node_modules/imba1/src/imba/scheduler.imba1", "../../node_modules/imba1/src/imba/dom/manager.imba1", "../../node_modules/imba1/src/imba/dom/pointer.imba1", "../../node_modules/imba1/src/imba/dom/event-manager.imba1", "../../node_modules/imba1/src/imba/dom/tag.imba1", "../../node_modules/imba1/src/imba/dom/html.imba1", "../../node_modules/imba1/src/imba/dom/touch.imba1", "../../node_modules/imba1/src/imba/dom/event.imba1", "../../node_modules/imba1/src/imba/dom/reconciler.imba1", "../../node_modules/imba1/src/imba/dom/index.imba1", "../../node_modules/imba1/src/imba/index.imba1", "../../node_modules/imba1/imba.imba1", "../../embed/src/util/css.imba1", "../../embed/src/util/icons.imba1", "../../embed/src/util/mousetrap.js", "../../embed/src/util/shortcuts.imba1", "../../node_modules/popper.js/src/utils/isBrowser.js", "../../node_modules/popper.js/src/utils/debounce.js", "../../node_modules/popper.js/src/utils/isFunction.js", "../../node_modules/popper.js/src/utils/getStyleComputedProperty.js", "../../node_modules/popper.js/src/utils/getParentNode.js", "../../node_modules/popper.js/src/utils/getScrollParent.js", "../../node_modules/popper.js/src/utils/getReferenceNode.js", "../../node_modules/popper.js/src/utils/isIE.js", "../../node_modules/popper.js/src/utils/getOffsetParent.js", "../../node_modules/popper.js/src/utils/isOffsetContainer.js", "../../node_modules/popper.js/src/utils/getRoot.js", "../../node_modules/popper.js/src/utils/findCommonOffsetParent.js", "../../node_modules/popper.js/src/utils/getScroll.js", "../../node_modules/popper.js/src/utils/includeScroll.js", "../../node_modules/popper.js/src/utils/getBordersSize.js", "../../node_modules/popper.js/src/utils/getWindowSizes.js", "../../node_modules/popper.js/src/utils/getClientRect.js", "../../node_modules/popper.js/src/utils/getBoundingClientRect.js", "../../node_modules/popper.js/src/utils/getOffsetRectRelativeToArbitraryNode.js", "../../node_modules/popper.js/src/utils/getViewportOffsetRectRelativeToArtbitraryNode.js", "../../node_modules/popper.js/src/utils/isFixed.js", "../../node_modules/popper.js/src/utils/getFixedPositionOffsetParent.js", "../../node_modules/popper.js/src/utils/getBoundaries.js", "../../node_modules/popper.js/src/utils/computeAutoPlacement.js", "../../node_modules/popper.js/src/utils/getReferenceOffsets.js", "../../node_modules/popper.js/src/utils/getOuterSizes.js", "../../node_modules/popper.js/src/utils/getOppositePlacement.js", "../../node_modules/popper.js/src/utils/getPopperOffsets.js", "../../node_modules/popper.js/src/utils/find.js", "../../node_modules/popper.js/src/utils/findIndex.js", "../../node_modules/popper.js/src/utils/runModifiers.js", "../../node_modules/popper.js/src/methods/update.js", "../../node_modules/popper.js/src/utils/isModifierEnabled.js", "../../node_modules/popper.js/src/utils/getSupportedPropertyName.js", "../../node_modules/popper.js/src/methods/destroy.js", "../../node_modules/popper.js/src/utils/getWindow.js", "../../node_modules/popper.js/src/utils/setupEventListeners.js", "../../node_modules/popper.js/src/methods/enableEventListeners.js", "../../node_modules/popper.js/src/utils/removeEventListeners.js", "../../node_modules/popper.js/src/methods/disableEventListeners.js", "../../node_modules/popper.js/src/utils/isNumeric.js", "../../node_modules/popper.js/src/utils/setStyles.js", "../../node_modules/popper.js/src/utils/setAttributes.js", "../../node_modules/popper.js/src/modifiers/applyStyle.js", "../../node_modules/popper.js/src/utils/getRoundedOffsets.js", "../../node_modules/popper.js/src/modifiers/computeStyle.js", "../../node_modules/popper.js/src/utils/isModifierRequired.js", "../../node_modules/popper.js/src/modifiers/arrow.js", "../../node_modules/popper.js/src/utils/getOppositeVariation.js", "../../node_modules/popper.js/src/methods/placements.js", "../../node_modules/popper.js/src/utils/clockwise.js", "../../node_modules/popper.js/src/modifiers/flip.js", "../../node_modules/popper.js/src/modifiers/keepTogether.js", "../../node_modules/popper.js/src/modifiers/offset.js", "../../node_modules/popper.js/src/modifiers/preventOverflow.js", "../../node_modules/popper.js/src/modifiers/shift.js", "../../node_modules/popper.js/src/modifiers/hide.js", "../../node_modules/popper.js/src/modifiers/inner.js", "../../node_modules/popper.js/src/modifiers/index.js", "../../node_modules/popper.js/src/methods/defaults.js", "../../node_modules/popper.js/src/index.js", "../../node_modules/tippy.js/src/browser.ts", "../../node_modules/tippy.js/src/props.ts", "../../node_modules/tippy.js/src/ponyfills.ts", "../../node_modules/tippy.js/src/constants.ts", "../../node_modules/tippy.js/src/bindGlobalEventListeners.ts", "../../node_modules/tippy.js/src/reference.ts", "../../node_modules/tippy.js/src/utils.ts", "../../node_modules/tippy.js/src/popper.ts", "../../node_modules/tippy.js/src/createTippy.ts", "../../node_modules/tippy.js/src/group.ts", "../../node_modules/tippy.js/src/index.ts", "../../node_modules/tippy.js/src/css.ts", "../../node_modules/tippy.js/build/all.js", "../../embed/src/util/tooltips.imba1", "../../node_modules/msgpack-lite/lib/buffer-global.js", "../../node_modules/isarray/index.js", "../../node_modules/msgpack-lite/lib/bufferish-array.js", "../../node_modules/msgpack-lite/lib/bufferish-buffer.js", "../../node_modules/msgpack-lite/lib/bufferish-uint8array.js", "../../node_modules/msgpack-lite/lib/buffer-lite.js", "../../node_modules/msgpack-lite/lib/bufferish-proto.js", "../../node_modules/msgpack-lite/lib/bufferish.js", "../../node_modules/msgpack-lite/lib/ext-buffer.js", "../../node_modules/msgpack-lite/lib/ext-packer.js", "../../node_modules/int64-buffer/int64-buffer.js", "../../node_modules/ieee754/index.js", "../../node_modules/msgpack-lite/lib/write-uint8.js", "../../node_modules/msgpack-lite/lib/write-token.js", "../../node_modules/msgpack-lite/lib/write-type.js", "../../node_modules/msgpack-lite/lib/codec-base.js", "../../node_modules/msgpack-lite/lib/write-core.js", "../../node_modules/msgpack-lite/lib/flex-buffer.js", "../../node_modules/msgpack-lite/lib/encode-buffer.js", "../../node_modules/msgpack-lite/lib/encode.js", "../../node_modules/msgpack-lite/lib/ext-unpacker.js", "../../node_modules/msgpack-lite/lib/read-format.js", "../../node_modules/msgpack-lite/lib/read-token.js", "../../node_modules/msgpack-lite/lib/read-core.js", "../../node_modules/msgpack-lite/lib/decode-buffer.js", "../../node_modules/msgpack-lite/lib/decode.js", "../../node_modules/event-lite/event-lite.js", "../../node_modules/msgpack-lite/lib/encoder.js", "../../node_modules/msgpack-lite/lib/decoder.js", "../../node_modules/msgpack-lite/lib/ext.js", "../../node_modules/msgpack-lite/lib/codec.js", "../../node_modules/msgpack-lite/lib/browser.js", "../../embed/src/util/index.imba1", "../../embed/src/protocol.imba1", "../../embed/src/core/StreamBuffer.imba1", "../../embed/src/models.imba1", "../../node_modules/ms/index.js", "../../node_modules/debug/src/debug.js", "../../node_modules/debug/src/browser.js", "../../embed/src/util/Logger.imba1", "../../embed/src/util/LongPromise.imba1", "../../embed/src/util/UserAgent.imba1", "../../embed/src/util/StoreWrapper.imba1", "../../embed/src/util/Analytics.imba1", "../../node_modules/uxa1/src/Menu.imba1", "../../node_modules/uxa1/src/Popover.imba1", "../../node_modules/uxa1/src/Snackbar.imba1", "../../node_modules/uxa1/src/Stack.imba1", "../../node_modules/uxa1/src/Icon.imba1", "../../node_modules/uxa1/src/MenuItem.imba1", "../../node_modules/uxa1/src/Button.imba1", "../../node_modules/uxa1/src/TextField.imba1", "../../node_modules/uxa1/src/ListItem.imba1", "../../node_modules/uxa1/src/Form.imba1", "../../node_modules/uxa1/src/Queue.imba1", "../../node_modules/uxa1/src/Indicator.imba1", "../../node_modules/uxa1/src/Dialog.imba1", "../../node_modules/uxa1/src/Tile.imba1", "../../node_modules/uxa1/src/Actionable.imba1", "../../node_modules/uxa1/node_modules/marked/lib/marked.js", "../../node_modules/uxa1/src/index.imba1", "../../embed/src/legacy/AuthenticationDialog.imba1", "../../embed/src/legacy/NotificationDialog.imba1", "../../embed/src/util/Delay.imba1", "../../embed/src/api.imba1", "../../embed/src/core/Container.imba1", "../../node_modules/es-module-lexer/dist/lexer.cjs", "../../embed/utils.imba", "../../embed/src/util/List.imba1", "../../embed/src/widgets/widgets.imba1", "../../embed/src/widgets/WidgetOptions.imba1", "../../embed/src/core/Struct.imba1", "../../embed/src/widgets/browser/helpers.imba1", "../../embed/src/util/path.js", "../../embed/src/widgets/browser/styleProcessor.imba1", "../../embed/src/widgets/browser/PlayerPage.imba1", "../../embed/src/core/StreamAction.imba1", "../../embed/src/widgets/widget.imba1", "../../node_modules/wildemitter/wildemitter.js", "../../node_modules/hark/hark.js", "../../embed/src/views/RecDoneDialog.imba1", "../../node_modules/waveform-data/lib/segment.js", "../../node_modules/waveform-data/lib/point.js", "../../node_modules/waveform-data/lib/core.js", "../../node_modules/waveform-data/lib/adapters/arraybuffer.js", "../../node_modules/waveform-data/lib/adapters/object.js", "../../node_modules/waveform-data/lib/adapters/index.js", "../../node_modules/waveform-data/waveform-data.js", "../../node_modules/inline-worker/index.js", "../../node_modules/waveform-data/lib/builders/audiodecoder.js", "../../node_modules/waveform-data/lib/builders/webaudio.js", "../../node_modules/waveform-data/webaudio.js", "../../embed/src/util/AudioManager.imba1", "../../embed/src/util/MediaRecording.imba1", "../../embed/src/core/Recording.imba1", "../../embed/src/util/TimelineCues.imba1", "../../embed/src/tracking.imba1", "../../embed/src/core/Timeline.imba1", "../../embed/src/core/StreamSyncer.imba1", "../../embed/src/core/Pointer.imba1", "../../embed/src/core/Stream.imba1", "../../embed/src/views/LocalBranchDialog.imba1", "../../embed/src/Branch.imba1", "../../embed/src/views/PaneTab.imba1", "../../embed/src/widgets/PaneView.imba1", "../../embed/src/core/Dimensions.imba1", "../../embed/src/widgets/PaneWidget.imba1", "../../embed/src/util/TextModel.imba1", "../../node_modules/marked/lib/marked.js", "../../embed/src/views/Theme.imba1", "../../embed/src/monaco/imba1/adapters.imba1", "../../embed/src/monaco/imba1/workerManager.imba1", "../../embed/src/monaco/imba1/mode.imba1", "../../embed/src/monaco/imba1/index.imba1", "../../node_modules/imba/program.imba.js", "../../embed/src/monaco/imba2/index.imba", "../../embed/src/monaco/sql.js", "../../embed/src/monaco/go.js", "../../embed/src/monaco/kotlin.js", "../../embed/src/monaco/swift.js", "../../embed/src/monaco/php.js", "../../embed/src/monaco/json.js", "../../embed/src/monaco/cpp.js", "../../embed/src/monaco/csharp.js", "../../embed/src/monaco/yaml.js", "../../embed/src/monaco/rust.js", "../../embed/src/monaco/markdown.js", "../../embed/src/monaco/ruby.js", "../../embed/src/monaco/css.js", "../../embed/src/monaco/python.js", "../../embed/src/monaco/html.js", "../../embed/src/monaco/less.js", "../../embed/src/monaco/xml.js", "../../embed/src/monaco/java.js", "../../embed/src/monaco/svelte/index.imba", "../../embed/src/monaco/vue.imba1", "../../embed/src/monaco/scss.imba1", "../../embed/src/monaco/javascript.imba1", "../../embed/src/editor.imba1", "../../embed/src/util/strings.imba1", "../../embed/src/widgets/FileWidget.imba1", "../../embed/src/widgets/AgentWidget.imba1", "../../embed/src/widgets/PointerWidget.imba1", "../../embed/src/widgets/LayoutWidget.imba1", "../../embed/src/widgets/ConsoleWidget.imba1", "../../embed/src/widgets/simulator/stylesheet.imba1", "../../embed/src/widgets/simulator/differ.imba1", "../../embed/src/widgets/simulator/player.imba1", "../../embed/src/util/ScrimbaGesture.imba1", "../../embed/src/util/WindowGesture.imba1", "../../embed/src/util/LayoutGesture.imba1", "../../embed/src/widgets/SimulatorView.imba1", "../../embed/src/util/Action.imba1", "../../embed/src/widgets/SimulatorWidget.imba1", "../../embed/src/widgets/InspectorWidget.imba1", "../../embed/src/widgets/browser/History.imba1", "../../embed/src/util/ContentEditable.imba1", "../../embed/src/legacy/SpinKit.imba1", "../../embed/src/views/BrowserConfigurationDialog.imba1", "../../embed/src/widgets/BrowserWidget.imba1", "../../embed/src/widgets/EditorWidget.imba1", "../../embed/src/widgets/index.imba1", "../../embed/src/monaco/imbaActions.imba1", "../../embed/src/views/EditorView.imba1", "../../embed/src/views/PointerView.imba1", "../../embed/src/views/InterfaceView.imba1", "../../embed/src/views/TimelineCanvas.imba1", "../../embed/src/views/BrushupView.imba1", "../../embed/src/views/Notification.imba1", "../../embed/src/views/DependencyAddDialog.imba1", "../../embed/src/legacy/CastDialog.imba1", "../../embed/src/util/filereader.imba1", "../../embed/src/views/SpaceMenu.imba1", "../../embed/src/views/MediaRecordingStats.imba1", "../../embed/src/views/RecDialog.imba1", "../../embed/src/views/SaveDialog.imba1", "../../embed/src/views/PublishDialog.imba1", "../../embed/src/views/NewFileDialog.imba1", "../../embed/src/legacy/CastCreateDialog.imba1", "../../embed/src/views/AskDialog.imba1", "../../embed/src/views/SidebarPanel.imba1", "../../embed/src/views/ExplorerView.imba1", "../../embed/src/views/DependenciesPanel.imba1", "../../embed/src/views/WidgetPanel.imba1", "../../embed/src/views/SlidesPanel.imba1", "../../embed/src/views/BranchesPanel.imba1", "../../embed/src/views/SidebarView.imba1", "../../embed/src/views/TitlebarView.imba1", "../../embed/src/views/TimelineMenu.imba1", "../../embed/src/views/GraphView.imba1", "../../embed/src/views/SpaceControls.imba1", "../../node_modules/player.js/dist/player-0.1.0.js", "../../embed/src/views/SpaceView.imba1", "../../embed/src/core/Client.imba1", "../../embed/src/core/Cursor.imba1", "../../embed/src/util/PointerTracker.imba1", "../../embed/src/widgets/DirWidget.imba1", "../../embed/src/widgets/SlideWidget.imba1", "../../embed/src/util/anim.js", "../../embed/src/util/SlideAnimator.imba1", "../../embed/src/views/SlidesView.imba1", "../../embed/src/widgets/SlidesWidget.imba1", "../../embed/src/widgets/SidebarWidget.imba1", "../../embed/src/widgets/ExplorerPanel.imba1", "../../embed/src/widgets/DependenciesPanel.imba1", "../../embed/src/actions.imba1", "../../embed/src/space.imba1", "../../embed/src/index.imba1", "../../embed/src/monaco/imba2/adapter.imba", "../../embed/src/monaco/imba2/client.imba", "entry:embed/src/monaco/imba2/worker.imba?as=webworker", "../../embed/src/monaco/imba2/grammar.imba", "entry:embed/src/monaco/svelte/worker.imba?as=webworker", "../../embed/src/monaco/svelte/client.imba"], "sourcesContent": ["/*\nImba is the namespace for all runtime related utilities\n@namespace\n*/\n\nvar Imba = {VERSION: '1.5.5'};\n\n\nImba.createElementFactory = function (){\n\treturn function() { return true; };\n};\n\nImba.createTagScope = function (){\n\treturn Imba;\n};\n\n/*\n\nLight wrapper around native setTimeout that expects the block / function\nas last argument (instead of first). It also triggers an event to Imba\nafter the timeout to let schedulers update (to rerender etc) afterwards.\n\n*/\n\nImba.setTimeout = function (delay,block){\n\treturn setTimeout(function() {\n\t\tblock();\n\t\treturn Imba.commit();\n\t},delay);\n};\n\n/*\n\nLight wrapper around native setInterval that expects the block / function\nas last argument (instead of first). It also triggers an event to Imba\nafter every interval to let schedulers update (to rerender etc) afterwards.\n\n*/\n\nImba.setInterval = function (interval,block){\n\treturn setInterval(function() {\n\t\tblock();\n\t\treturn Imba.commit();\n\t},interval);\n};\n\n/*\nClear interval with specified id\n*/\n\nImba.clearInterval = function (id){\n\treturn clearInterval(id);\n};\n\n/*\nClear timeout with specified id\n*/\n\nImba.clearTimeout = function (id){\n\treturn clearTimeout(id);\n};\n\n\nImba.subclass = function (obj,sup){\n\tfor (let k in sup){\n\t\tlet v;\n\t\tv = sup[k];if (sup.hasOwnProperty(k)) { obj[k] = v };\n\t};\n\t\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n\treturn obj;\n};\n\n/*\nLightweight method for making an object iterable in imbas for/in loops.\nIf the compiler cannot say for certain that a target in a for loop is an\narray, it will cache the iterable version before looping.\n\n```imba\n# this is the whole method\ndef Imba.iterable o\n\treturn o ? (o:toArray ? o.toArray : o) : []\n\nclass CustomIterable\n\tdef toArray\n\t\t[1,2,3]\n\n# will return [2,4,6]\nfor x in CustomIterable.new\n\tx * 2\n\n```\n*/\n\nImba.iterable = function (o){\n\treturn o ? ((o.toArray ? o.toArray() : o)) : [];\n};\n\n/*\nCoerces a value into a promise. If value is array it will\ncall `Promise.all(value)`, or if it is not a promise it will\nwrap the value in `Promise.resolve(value)`. Used for experimental\nawait syntax.\n@return {Promise}\n*/\n\nImba.await = function (value){\n\tif (value instanceof Array) {\n\t\tconsole.warn(\"await (Array) is deprecated - use await Promise.all(Array)\");\n\t\treturn Promise.all(value);\n\t} else if (value && value.then) {\n\t\treturn value;\n\t} else {\n\t\treturn Promise.resolve(value);\n\t};\n};\n\nvar dashRegex = /-./g;\nvar setterCache = {};\n\nImba.toCamelCase = function (str){\n\tif (str.indexOf('-') >= 0) {\n\t\treturn str.replace(dashRegex,function(m) { return m.charAt(1).toUpperCase(); });\n\t} else {\n\t\treturn str;\n\t};\n};\n\nImba.toSetter = function (str){\n\treturn setterCache[str] || (setterCache[str] = Imba.toCamelCase('set-' + str));\n};\n\nImba.indexOf = function (a,b){\n\treturn (b && b.indexOf) ? b.indexOf(a) : [].indexOf.call(a,b);\n};\n\nImba.len = function (a){\n\treturn a && ((a.len instanceof Function) ? a.len.call(a) : a.length) || 0;\n};\n\nImba.prop = function (scope,name,opts){\n\tif (scope.defineProperty) {\n\t\treturn scope.defineProperty(name,opts);\n\t};\n\treturn;\n};\n\nImba.attr = function (scope,name,opts){\n\tif(opts === undefined) opts = {};\n\tif (scope.defineAttribute) {\n\t\treturn scope.defineAttribute(name,opts);\n\t};\n\t\n\tlet getName = Imba.toCamelCase(name);\n\tlet setName = Imba.toCamelCase('set-' + name);\n\tlet proto = scope.prototype;\n\t\n\tif (opts.dom) {\n\t\tproto[getName] = function() { return this.dom()[name]; };\n\t\tproto[setName] = function(value) {\n\t\t\tif (value != this[name]()) {\n\t\t\t\tthis.dom()[name] = value;\n\t\t\t};\n\t\t\treturn this;\n\t\t};\n\t} else {\n\t\tproto[getName] = function() { return this.getAttribute(name); };\n\t\tproto[setName] = function(value) {\n\t\t\tthis.setAttribute(name,value);\n\t\t\treturn this;\n\t\t};\n\t};\n\treturn;\n};\n\nImba.propDidSet = function (object,property,val,prev){\n\tlet fn = property.watch;\n\tif (fn instanceof Function) {\n\t\tfn.call(object,val,prev,property);\n\t} else if ((typeof fn=='string'||fn instanceof String) && object[fn]) {\n\t\tobject[fn](val,prev,property);\n\t};\n\treturn;\n};\n\n\n// Basic events\nvar emit__ = function(event,args,node) {\n\t// var node = cbs[event]\n\tvar prev,cb,ret;\n\t\n\twhile ((prev = node) && (node = node.next)){\n\t\tif (cb = node.listener) {\n\t\t\tif (node.path && cb[node.path]) {\n\t\t\t\tret = args ? cb[node.path].apply(cb,args) : cb[node.path]();\n\t\t\t} else {\n\t\t\t\t// check if it is a method?\n\t\t\t\tret = args ? cb.apply(node,args) : cb.call(node);\n\t\t\t};\n\t\t};\n\t\t\n\t\tif (node.times && --node.times <= 0) {\n\t\t\tprev.next = node.next;\n\t\t\tnode.listener = null;\n\t\t};\n\t};\n\treturn;\n};\n\n// method for registering a listener on object\nImba.listen = function (obj,event,listener,path){\n\tvar cbs,list,tail;\n\tcbs = obj.__listeners__ || (obj.__listeners__ = {});\n\tlist = cbs[event] || (cbs[event] = {});\n\ttail = list.tail || (list.tail = (list.next = {}));\n\ttail.listener = listener;\n\ttail.path = path;\n\tlist.tail = tail.next = {};\n\treturn tail;\n};\n\n// register a listener once\nImba.once = function (obj,event,listener){\n\tvar tail = Imba.listen(obj,event,listener);\n\ttail.times = 1;\n\treturn tail;\n};\n\n// remove a listener\nImba.unlisten = function (obj,event,cb,meth){\n\tvar node,prev;\n\tvar meta = obj.__listeners__;\n\tif (!meta) { return };\n\t\n\tif (node = meta[event]) {\n\t\twhile ((prev = node) && (node = node.next)){\n\t\t\tif (node == cb || node.listener == cb) {\n\t\t\t\tprev.next = node.next;\n\t\t\t\t// check for correct path as well?\n\t\t\t\tnode.listener = null;\n\t\t\t\tbreak;\n\t\t\t};\n\t\t};\n\t};\n\treturn;\n};\n\n// emit event\nImba.emit = function (obj,event,params){\n\tvar cb;\n\tif (cb = obj.__listeners__) {\n\t\tif (cb[event]) { emit__(event,params,cb[event]) };\n\t\tif (cb.all) { emit__(event,[event,params],cb.all) }; // and event != 'all'\n\t};\n\treturn;\n};\n\nImba.observeProperty = function (observer,key,trigger,target,prev){\n\tif (prev && typeof prev == 'object') {\n\t\tImba.unlisten(prev,'all',observer,trigger);\n\t};\n\tif (target && typeof target == 'object') {\n\t\tImba.listen(target,'all',observer,trigger);\n\t};\n\treturn this;\n};\n\nmodule.exports = Imba;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require(\"./imba\");\n\nvar requestAnimationFrame; // very simple raf polyfill\nvar cancelAnimationFrame;\n\nif (false) {};\n\nif (true) {\n\tcancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitRequestAnimationFrame;\n\trequestAnimationFrame = window.requestAnimationFrame;\n\trequestAnimationFrame || (requestAnimationFrame = window.webkitRequestAnimationFrame);\n\trequestAnimationFrame || (requestAnimationFrame = window.mozRequestAnimationFrame);\n\trequestAnimationFrame || (requestAnimationFrame = function(blk) { return setTimeout(blk,1000 / 60); });\n};\n\nfunction Ticker(){\n\tvar self = this;\n\tself._queue = [];\n\tself._stage = -1;\n\tself._scheduled = false;\n\tself._ticker = function(e) {\n\t\tself._scheduled = false;\n\t\treturn self.tick(e);\n\t};\n\tself;\n};\n\nTicker.prototype.stage = function(v){ return this._stage; }\nTicker.prototype.setStage = function(v){ this._stage = v; return this; };\nTicker.prototype.queue = function(v){ return this._queue; }\nTicker.prototype.setQueue = function(v){ this._queue = v; return this; };\n\nTicker.prototype.add = function (item,force){\n\tif (force || this._queue.indexOf(item) == -1) {\n\t\tthis._queue.push(item);\n\t};\n\t\n\tif (!this._scheduled) { return this.schedule() };\n};\n\nTicker.prototype.tick = function (timestamp){\n\tvar items = this._queue;\n\tif (!this._ts) { this._ts = timestamp };\n\tthis._dt = timestamp - this._ts;\n\tthis._ts = timestamp;\n\tthis._queue = [];\n\tthis._stage = 1;\n\tthis.before();\n\tif (items.length) {\n\t\tfor (let i = 0, ary = iter$(items), len = ary.length, item; i < len; i++) {\n\t\t\titem = ary[i];\n\t\t\tif (item instanceof Function) {\n\t\t\t\titem(this._dt,this);\n\t\t\t} else if (item.tick) {\n\t\t\t\titem.tick(this._dt,this);\n\t\t\t};\n\t\t};\n\t};\n\tthis._stage = 2;\n\tthis.after();\n\tthis._stage = this._scheduled ? 0 : (-1);\n\treturn this;\n};\n\nTicker.prototype.schedule = function (){\n\tif (!this._scheduled) {\n\t\tthis._scheduled = true;\n\t\tif (this._stage == -1) {\n\t\t\tthis._stage = 0;\n\t\t};\n\t\trequestAnimationFrame(this._ticker);\n\t};\n\treturn this;\n};\n\nTicker.prototype.before = function (){\n\treturn this;\n};\n\nTicker.prototype.after = function (){\n\tif (Imba.TagManager) {\n\t\tImba.TagManager.refresh();\n\t};\n\treturn this;\n};\n\nImba.TICKER = new Ticker();\nImba.SCHEDULERS = [];\n\nImba.ticker = function (){\n\treturn Imba.TICKER;\n};\n\nImba.requestAnimationFrame = function (callback){\n\treturn requestAnimationFrame(callback);\n};\n\nImba.cancelAnimationFrame = function (id){\n\treturn cancelAnimationFrame(id);\n};\n\n// should add an Imba.run / setImmediate that\n// pushes listener onto the tick-queue with times - once\n\nvar commitQueue = 0;\n\nImba.commit = function (params){\n\tcommitQueue++;\n\t// Imba.TagManager.refresh\n\tImba.emit(Imba,'commit',(params != undefined) ? [params] : undefined);\n\tif (--commitQueue == 0) {\n\t\tImba.TagManager && Imba.TagManager.refresh();\n\t};\n\treturn;\n};\n\n/*\n\nInstances of Imba.Scheduler manages when to call `tick()` on their target,\nat a specified framerate or when certain events occur. Root-nodes in your\napplications will usually have a scheduler to make sure they rerender when\nsomething changes. It is also possible to make inner components use their\nown schedulers to control when they render.\n\n@iname scheduler\n\n*/\n\nImba.Scheduler = function Scheduler(target){\n\tvar self = this;\n\tself._id = counter++;\n\tself._target = target;\n\tself._marked = false;\n\tself._active = false;\n\tself._marker = function() { return self.mark(); };\n\tself._ticker = function(e) { return self.tick(e); };\n\t\n\tself._dt = 0;\n\tself._frame = {};\n\tself._scheduled = false;\n\tself._timestamp = 0;\n\tself._ticks = 0;\n\tself._flushes = 0;\n\t\n\tself.onevent = self.onevent.bind(self);\n\tself;\n};\n\nvar counter = 0;\n\nImba.Scheduler.event = function (e){\n\treturn Imba.emit(Imba,'event',e);\n};\n\n/*\n\tCreate a new Imba.Scheduler for specified target\n\t@return {Imba.Scheduler}\n\t*/\n\nImba.Scheduler.prototype.__raf = {watch: 'rafDidSet',name: 'raf'};\nImba.Scheduler.prototype.raf = function(v){ return this._raf; }\nImba.Scheduler.prototype.setRaf = function(v){\n\tvar a = this.raf();\n\tif(v != a) { this._raf = v; }\n\tif(v != a) { this.rafDidSet && this.rafDidSet(v,a,this.__raf) }\n\treturn this;\n};\nImba.Scheduler.prototype.__interval = {watch: 'intervalDidSet',name: 'interval'};\nImba.Scheduler.prototype.interval = function(v){ return this._interval; }\nImba.Scheduler.prototype.setInterval = function(v){\n\tvar a = this.interval();\n\tif(v != a) { this._interval = v; }\n\tif(v != a) { this.intervalDidSet && this.intervalDidSet(v,a,this.__interval) }\n\treturn this;\n};\nImba.Scheduler.prototype.__events = {watch: 'eventsDidSet',name: 'events'};\nImba.Scheduler.prototype.events = function(v){ return this._events; }\nImba.Scheduler.prototype.setEvents = function(v){\n\tvar a = this.events();\n\tif(v != a) { this._events = v; }\n\tif(v != a) { this.eventsDidSet && this.eventsDidSet(v,a,this.__events) }\n\treturn this;\n};\nImba.Scheduler.prototype.marked = function(v){ return this._marked; }\nImba.Scheduler.prototype.setMarked = function(v){ this._marked = v; return this; };\n\nImba.Scheduler.prototype.rafDidSet = function (bool){\n\tif (bool && this._active) this.requestTick();\n\treturn this;\n};\n\nImba.Scheduler.prototype.intervalDidSet = function (time){\n\tclearInterval(this._intervalId);\n\tthis._intervalId = null;\n\tif (time && this._active) {\n\t\tthis._intervalId = setInterval(this.oninterval.bind(this),time);\n\t};\n\treturn this;\n};\n\nImba.Scheduler.prototype.eventsDidSet = function (new$,prev){\n\tif (this._active && new$ && !prev) {\n\t\treturn Imba.listen(Imba,'commit',this,'onevent');\n\t} else if (!(new$) && prev) {\n\t\treturn Imba.unlisten(Imba,'commit',this,'onevent');\n\t};\n};\n\n/*\n\tCheck whether the current scheduler is active or not\n\t@return {bool}\n\t*/\n\nImba.Scheduler.prototype.active = function (){\n\treturn this._active;\n};\n\n/*\n\tDelta time between the two last ticks\n\t@return {Number}\n\t*/\n\nImba.Scheduler.prototype.dt = function (){\n\treturn this._dt;\n};\n\n/*\n\tConfigure the scheduler\n\t@return {self}\n\t*/\n\nImba.Scheduler.prototype.configure = function (options){\n\tvar v_;\n\tif(options === undefined) options = {};\n\tif (options.raf != undefined) { (this.setRaf(v_ = options.raf),v_) };\n\tif (options.interval != undefined) { (this.setInterval(v_ = options.interval),v_) };\n\tif (options.events != undefined) { (this.setEvents(v_ = options.events),v_) };\n\treturn this;\n};\n\n/*\n\tMark the scheduler as dirty. This will make sure that\n\tthe scheduler calls `target.tick` on the next frame\n\t@return {self}\n\t*/\n\nImba.Scheduler.prototype.mark = function (){\n\tthis._marked = true;\n\tif (!this._scheduled) {\n\t\tthis.requestTick();\n\t};\n\treturn this;\n};\n\n/*\n\tInstantly trigger target.tick and mark scheduler as clean (not dirty/marked).\n\tThis is called implicitly from tick, but can also be called manually if you\n\treally want to force a tick without waiting for the next frame.\n\t@return {self}\n\t*/\n\nImba.Scheduler.prototype.flush = function (){\n\tthis._flushes++;\n\tthis._target.tick(this);\n\tthis._marked = false;\n\treturn this;\n};\n\n/*\n\t@fixme this expects raf to run at 60 fps \n\n\tCalled automatically on every frame while the scheduler is active.\n\tIt will only call `target.tick` if the scheduler is marked dirty,\n\tor when according to @fps setting.\n\n\tIf you have set up a scheduler with an fps of 1, tick will still be\n\tcalled every frame, but `target.tick` will only be called once every\n\tsecond, and it will *make sure* each `target.tick` happens in separate\n\tseconds according to Date. So if you have a node that renders a clock\n\tbased on Date.now (or something similar), you can schedule it with 1fps,\n\tnever needing to worry about two ticks happening within the same second.\n\tThe same goes for 4fps, 10fps etc.\n\n\t@protected\n\t@return {self}\n\t*/\n\nImba.Scheduler.prototype.tick = function (delta,ticker){\n\tthis._ticks++;\n\tthis._dt = delta;\n\t\n\tif (ticker) {\n\t\tthis._scheduled = false;\n\t};\n\t\n\tthis.flush();\n\t\n\tif (this._raf && this._active) {\n\t\tthis.requestTick();\n\t};\n\treturn this;\n};\n\nImba.Scheduler.prototype.requestTick = function (){\n\tif (!this._scheduled) {\n\t\tthis._scheduled = true;\n\t\tImba.TICKER.add(this);\n\t};\n\treturn this;\n};\n\n/*\n\tStart the scheduler if it is not already active.\n\t**While active**, the scheduler will override `target.commit`\n\tto do nothing. By default Imba.tag#commit calls render, so\n\tthat rendering is cascaded through to children when rendering\n\ta node. When a scheduler is active (for a node), Imba disables\n\tthis automatic rendering.\n\t*/\n\nImba.Scheduler.prototype.activate = function (immediate){\n\tif(immediate === undefined) immediate = true;\n\tif (!this._active) {\n\t\tthis._active = true;\n\t\tthis._commit = this._target.commit;\n\t\tthis._target.commit = function() { return this; };\n\t\tthis._target && this._target.flag && this._target.flag('scheduled_');\n\t\tImba.SCHEDULERS.push(this);\n\t\t\n\t\tif (this._events) {\n\t\t\tImba.listen(Imba,'commit',this,'onevent');\n\t\t};\n\t\t\n\t\tif (this._interval && !this._intervalId) {\n\t\t\tthis._intervalId = setInterval(this.oninterval.bind(this),this._interval);\n\t\t};\n\t\t\n\t\tif (immediate) {\n\t\t\tthis.tick(0);\n\t\t} else if (this._raf) {\n\t\t\tthis.requestTick();\n\t\t};\n\t};\n\treturn this;\n};\n\n/*\n\tStop the scheduler if it is active.\n\t*/\n\nImba.Scheduler.prototype.deactivate = function (){\n\tif (this._active) {\n\t\tthis._active = false;\n\t\tthis._target.commit = this._commit;\n\t\tlet idx = Imba.SCHEDULERS.indexOf(this);\n\t\tif (idx >= 0) {\n\t\t\tImba.SCHEDULERS.splice(idx,1);\n\t\t};\n\t\t\n\t\tif (this._events) {\n\t\t\tImba.unlisten(Imba,'commit',this,'onevent');\n\t\t};\n\t\t\n\t\tif (this._intervalId) {\n\t\t\tclearInterval(this._intervalId);\n\t\t\tthis._intervalId = null;\n\t\t};\n\t\t\n\t\tthis._target && this._target.unflag && this._target.unflag('scheduled_');\n\t};\n\treturn this;\n};\n\nImba.Scheduler.prototype.track = function (){\n\treturn this._marker;\n};\n\nImba.Scheduler.prototype.oninterval = function (){\n\tthis.tick();\n\tImba.TagManager.refresh();\n\treturn this;\n};\n\nImba.Scheduler.prototype.onevent = function (event){\n\tif (!this._events || this._marked) { return this };\n\t\n\tif (this._events instanceof Function) {\n\t\tif (this._events(event,this)) this.mark();\n\t} else if (this._events instanceof Array) {\n\t\tif (this._events.indexOf((event && event.type) || event) >= 0) {\n\t\t\tthis.mark();\n\t\t};\n\t} else {\n\t\tthis.mark();\n\t};\n\treturn this;\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require(\"../imba\");\n\nImba.TagManagerClass = function TagManagerClass(){\n\tthis._inserts = 0;\n\tthis._removes = 0;\n\tthis._mounted = [];\n\tthis._mountables = 0;\n\tthis._unmountables = 0;\n\tthis._unmounting = 0;\n\tthis;\n};\n\nImba.TagManagerClass.prototype.mounted = function (){\n\treturn this._mounted;\n};\n\nImba.TagManagerClass.prototype.insert = function (node,parent){\n\tthis._inserts++;\n\tif (node && node.mount) { this.regMountable(node) };\n\t// unless node.FLAGS & Imba.TAG_MOUNTABLE\n\t// \tnode.FLAGS |= Imba.TAG_MOUNTABLE\n\t// \t@mountables++\n\treturn;\n};\n\nImba.TagManagerClass.prototype.remove = function (node,parent){\n\treturn this._removes++;\n};\n\n\nImba.TagManagerClass.prototype.changes = function (){\n\treturn this._inserts + this._removes;\n};\n\nImba.TagManagerClass.prototype.mount = function (node){\n\treturn;\n};\n\nImba.TagManagerClass.prototype.refresh = function (force){\n\tif(force === undefined) force = false;\n\tif (false) {};\n\tif (!force && this.changes() == 0) { return };\n\t// console.time('resolveMounts')\n\tif ((this._inserts && this._mountables > this._mounted.length) || force) {\n\t\tthis.tryMount();\n\t};\n\t\n\tif ((this._removes || force) && this._mounted.length) {\n\t\tthis.tryUnmount();\n\t};\n\t// console.timeEnd('resolveMounts')\n\tthis._inserts = 0;\n\tthis._removes = 0;\n\treturn this;\n};\n\nImba.TagManagerClass.prototype.unmount = function (node){\n\treturn this;\n};\n\nImba.TagManagerClass.prototype.regMountable = function (node){\n\tif (!(node.FLAGS & Imba.TAG_MOUNTABLE)) {\n\t\tnode.FLAGS |= Imba.TAG_MOUNTABLE;\n\t\treturn this._mountables++;\n\t};\n};\n\n\nImba.TagManagerClass.prototype.tryMount = function (){\n\tvar count = 0;\n\tvar root = document.body;\n\tvar items = root.querySelectorAll('.__mount');\n\t// what if we end up creating additional mountables by mounting?\n\tfor (let i = 0, ary = iter$(items), len = ary.length, el; i < len; i++) {\n\t\tel = ary[i];\n\t\tif (el && el._tag) {\n\t\t\tif (this._mounted.indexOf(el._tag) == -1) {\n\t\t\t\tthis.mountNode(el._tag);\n\t\t\t};\n\t\t};\n\t};\n\treturn this;\n};\n\nImba.TagManagerClass.prototype.mountNode = function (node){\n\tif (this._mounted.indexOf(node) == -1) {\n\t\tthis.regMountable(node);\n\t\tthis._mounted.push(node);\n\t\t\n\t\tnode.FLAGS |= Imba.TAG_MOUNTED;\n\t\tif (node.mount) { node.mount() };\n\t\t// Mark all parents as mountable for faster unmount\n\t\t// let el = node.dom:parentNode\n\t\t// while el and el.@tag and !el.@tag:mount and !(el.@tag.FLAGS & Imba.TAG_MOUNTABLE)\n\t\t// \tel.@tag.FLAGS |= Imba.TAG_MOUNTABLE\n\t\t// \tel = el:parentNode\n\t};\n\treturn;\n};\n\nImba.TagManagerClass.prototype.tryUnmount = function (){\n\tthis._unmounting++;\n\t\n\tvar unmount = [];\n\tvar root = document.body;\n\tfor (let i = 0, items = iter$(this._mounted), len = items.length, item; i < len; i++) {\n\t\titem = items[i];\n\t\tif (!item) { continue; };\n\t\tif (!document.documentElement.contains(item._dom)) {\n\t\t\tunmount.push(item);\n\t\t\tthis._mounted[i] = null;\n\t\t};\n\t};\n\t\n\tthis._unmounting--;\n\t\n\tif (unmount.length) {\n\t\tthis._mounted = this._mounted.filter(function(item) { return item && unmount.indexOf(item) == -1; });\n\t\tfor (let i = 0, len = unmount.length, item; i < len; i++) {\n\t\t\titem = unmount[i];\n\t\t\titem.FLAGS = item.FLAGS & ~Imba.TAG_MOUNTED;\n\t\t\tif (item.unmount && item._dom) {\n\t\t\t\titem.unmount();\n\t\t\t} else if (item._scheduler) {\n\t\t\t\titem.unschedule();\n\t\t\t};\n\t\t};\n\t};\n\treturn this;\n};\n", "var Imba = require(\"../imba\");\n\nImba.Pointer = function Pointer(){\n\tthis._button = -1;\n\tthis._event = {x: 0,y: 0,type: 'uninitialized'};\n\treturn this;\n};\n\nImba.Pointer.prototype.button = function (){\n\treturn this._button;\n};\n\nImba.Pointer.prototype.touch = function (){\n\treturn this._touch;\n};\n\nImba.Pointer.prototype.update = function (e){\n\tthis._event = e;\n\tthis._dirty = true;\n\treturn this;\n};\n\n// this is just for regular mouse now\nImba.Pointer.prototype.process = function (){\n\tvar e1 = this._event;\n\t\n\tif (this._dirty) {\n\t\tthis._prevEvent = e1;\n\t\tthis._dirty = false;\n\t\t\n\t\t// button should only change on mousedown etc\n\t\tif (e1.type == 'mousedown') {\n\t\t\tthis._button = e1.button;\n\t\t\t\n\t\t\tif ((this._touch && this._button != 0)) {\n\t\t\t\treturn;\n\t\t\t};\n\t\t\t\n\t\t\t// cancel the previous touch\n\t\t\tif (this._touch) { this._touch.cancel() };\n\t\t\tthis._touch = new Imba.Touch(e1,this);\n\t\t\tthis._touch.mousedown(e1,e1);\n\t\t} else if (e1.type == 'mousemove') {\n\t\t\tif (this._touch) { this._touch.mousemove(e1,e1) };\n\t\t} else if (e1.type == 'mouseup') {\n\t\t\tthis._button = -1;\n\t\t\t\n\t\t\tif (this._touch && this._touch.button() == e1.button) {\n\t\t\t\tthis._touch.mouseup(e1,e1);\n\t\t\t\tthis._touch = null;\n\t\t\t};\n\t\t\t// trigger pointerup\n\t\t};\n\t} else if (this._touch) {\n\t\tthis._touch.idle();\n\t};\n\treturn this;\n};\n\nImba.Pointer.prototype.x = function (){\n\treturn this._event.x;\n};\nImba.Pointer.prototype.y = function (){\n\treturn this._event.y;\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require(\"../imba\");\nrequire(\"./pointer\");\n\nvar native$ = [\n\t'keydown','keyup','keypress',\n\t'textInput','input','change','submit',\n\t'focusin','focusout','focus','blur',\n\t'contextmenu','selectstart','dblclick','selectionchange',\n\t'mousewheel','wheel','scroll',\n\t'beforecopy','copy','beforepaste','paste','beforecut','cut',\n\t'dragstart','drag','dragend','dragenter','dragover','dragleave','dragexit','drop',\n\t'mouseup','mousedown','mouseenter','mouseleave','mouseout','mouseover','mousemove',\n\t'transitionstart','transitionend','transitioncancel',\n\t'animationstart','animationiteration','animationend'\n];\n\n/*\n\nManager for listening to and delegating events in Imba. A single instance\nis always created by Imba (as `Imba.Events`), which handles and delegates all\nevents at the very root of the document. Imba does not capture all events\nby default, so if you want to make sure exotic or custom DOMEvents are delegated\nin Imba you will need to register them in `Imba.Events.register(myCustomEventName)`\n\n@iname manager\n\n*/\n\nImba.EventManager = function EventManager(node,pars){\n\tvar self = this;\n\tif(!pars||pars.constructor !== Object) pars = {};\n\tvar events = pars.events !== undefined ? pars.events : [];\n\tself._shimFocusEvents = true && window.netscape && node.onfocusin === undefined;\n\tself.setRoot(node);\n\tself.setListeners([]);\n\tself.setDelegators({});\n\tself.setDelegator(function(e) {\n\t\tself.delegate(e);\n\t\treturn true;\n\t});\n\t\n\tfor (let i = 0, items = iter$(events), len = items.length; i < len; i++) {\n\t\tself.register(items[i]);\n\t};\n\t\n\treturn self;\n};\n\nImba.EventManager.prototype.root = function(v){ return this._root; }\nImba.EventManager.prototype.setRoot = function(v){ this._root = v; return this; };\nImba.EventManager.prototype.count = function(v){ return this._count; }\nImba.EventManager.prototype.setCount = function(v){ this._count = v; return this; };\nImba.EventManager.prototype.__enabled = {'default': false,watch: 'enabledDidSet',name: 'enabled'};\nImba.EventManager.prototype.enabled = function(v){ return this._enabled; }\nImba.EventManager.prototype.setEnabled = function(v){\n\tvar a = this.enabled();\n\tif(v != a) { this._enabled = v; }\n\tif(v != a) { this.enabledDidSet && this.enabledDidSet(v,a,this.__enabled) }\n\treturn this;\n}\nImba.EventManager.prototype._enabled = false;\nImba.EventManager.prototype.listeners = function(v){ return this._listeners; }\nImba.EventManager.prototype.setListeners = function(v){ this._listeners = v; return this; };\nImba.EventManager.prototype.delegators = function(v){ return this._delegators; }\nImba.EventManager.prototype.setDelegators = function(v){ this._delegators = v; return this; };\nImba.EventManager.prototype.delegator = function(v){ return this._delegator; }\nImba.EventManager.prototype.setDelegator = function(v){ this._delegator = v; return this; };\n\nvar initialBind = [];\n\nImba.EventManager.prototype.enabledDidSet = function (bool){\n\tbool ? this.onenable() : this.ondisable();\n\treturn this;\n};\n\nImba.EventManager.bind = function (name){\n\tif (Imba.Events) {\n\t\treturn Imba.Events.autoregister(name);\n\t} else if (initialBind.indexOf(name) == -1 && native$.indexOf(name) >= 0) {\n\t\treturn initialBind.push(name);\n\t};\n};\n\nImba.EventManager.activate = function (){\n\tvar Imba_;\n\tif (Imba.Events) { return Imba.Events };\n\tImba.Events = new Imba.EventManager(Imba.document(),{events: []});\n\tif (!true) {};\n\t\n\tImba.POINTER || (Imba.POINTER = new Imba.Pointer());\n\t\n\tvar hasTouchEvents = window && window.ontouchstart !== undefined;\n\t\n\tif (hasTouchEvents) {\n\t\tImba.Events.listen('touchstart',function(e) {\n\t\t\treturn Imba.Touch.ontouchstart(e);\n\t\t});\n\t\t\n\t\tImba.Events.listen('touchmove',function(e) {\n\t\t\treturn Imba.Touch.ontouchmove(e);\n\t\t});\n\t\t\n\t\tImba.Events.listen('touchend',function(e) {\n\t\t\treturn Imba.Touch.ontouchend(e);\n\t\t});\n\t\t\n\t\tImba.Events.listen('touchcancel',function(e) {\n\t\t\treturn Imba.Touch.ontouchcancel(e);\n\t\t});\n\t};\n\t\n\tImba.Events.register('click',function(e) {\n\t\t// Only for main mousebutton, no?\n\t\tif ((e.timeStamp - Imba.Touch.LastTimestamp) > Imba.Touch.TapTimeout) {\n\t\t\te._imbaSimulatedTap = true;\n\t\t\tvar tap = new Imba.Event(e);\n\t\t\ttap.setType('tap');\n\t\t\ttap.process();\n\t\t\tif (tap._responder && tap.defaultPrevented) {\n\t\t\t\treturn e.preventDefault();\n\t\t\t};\n\t\t};\n\t\t// delegate the real click event\n\t\treturn Imba.Events.delegate(e);\n\t});\n\t\n\tImba.Events.listen('mousedown',function(e) {\n\t\tif ((e.timeStamp - Imba.Touch.LastTimestamp) > Imba.Touch.TapTimeout) {\n\t\t\tif (Imba.POINTER) { return Imba.POINTER.update(e).process() };\n\t\t};\n\t});\n\t\n\tImba.Events.listen('mouseup',function(e) {\n\t\tif ((e.timeStamp - Imba.Touch.LastTimestamp) > Imba.Touch.TapTimeout) {\n\t\t\tif (Imba.POINTER) { return Imba.POINTER.update(e).process() };\n\t\t};\n\t});\n\t\n\tImba.Events.register(['mousedown','mouseup']);\n\tImba.Events.register(initialBind);\n\tImba.Events.setEnabled(true);\n\treturn Imba.Events;\n};\n\n\n/*\n\n\tTell the current EventManager to intercept and handle event of a certain name.\n\tBy default, Imba.Events will register interceptors for: *keydown*, *keyup*, \n\t*keypress*, *textInput*, *input*, *change*, *submit*, *focusin*, *focusout*, \n\t*blur*, *contextmenu*, *dblclick*, *mousewheel*, *wheel*\n\n\t*/\n\nImba.EventManager.prototype.register = function (name,handler){\n\tif(handler === undefined) handler = true;\n\tif (name instanceof Array) {\n\t\tfor (let i = 0, items = iter$(name), len = items.length; i < len; i++) {\n\t\t\tthis.register(items[i],handler);\n\t\t};\n\t\treturn this;\n\t};\n\t\n\tif (this.delegators()[name]) { return this };\n\t\n\t// console.log(\"register for event {name}\")\n\tvar fn = this.delegators()[name] = (handler instanceof Function) ? handler : this.delegator();\n\tif (this.enabled()) { return this.root().addEventListener(name,fn,true) };\n};\n\nImba.EventManager.prototype.autoregister = function (name){\n\tif (native$.indexOf(name) == -1) { return this };\n\treturn this.register(name);\n};\n\nImba.EventManager.prototype.listen = function (name,handler,capture){\n\tif(capture === undefined) capture = true;\n\tthis.listeners().push([name,handler,capture]);\n\tif (this.enabled()) { this.root().addEventListener(name,handler,capture) };\n\treturn this;\n};\n\nImba.EventManager.prototype.delegate = function (e){\n\tvar event = Imba.Event.wrap(e);\n\tevent.process();\n\tif (this._shimFocusEvents) {\n\t\tif (e.type == 'focus') {\n\t\t\tImba.Event.wrap(e).setType('focusin').process();\n\t\t} else if (e.type == 'blur') {\n\t\t\tImba.Event.wrap(e).setType('focusout').process();\n\t\t};\n\t};\n\treturn this;\n};\n\n/*\n\n\tCreate a new Imba.Event\n\n\t*/\n\nImba.EventManager.prototype.create = function (type,target,pars){\n\tif(!pars||pars.constructor !== Object) pars = {};\n\tvar data = pars.data !== undefined ? pars.data : null;\n\tvar source = pars.source !== undefined ? pars.source : null;\n\tvar event = Imba.Event.wrap({type: type,target: target});\n\tif (data != undefined) { (event.setData(data),data) };\n\tif (source) { (event.setSource(source),source) };\n\treturn event;\n};\n\n/*\n\n\tTrigger / process an Imba.Event.\n\n\t*/\n\nImba.EventManager.prototype.trigger = function (){\n\treturn this.create.apply(this,arguments).process();\n};\n\nImba.EventManager.prototype.onenable = function (){\n\tfor (let o = this.delegators(), handler, i = 0, keys = Object.keys(o), l = keys.length, name; i < l; i++){\n\t\tname = keys[i];handler = o[name];this.root().addEventListener(name,handler,true);\n\t};\n\t\n\tfor (let i = 0, items = iter$(this.listeners()), len = items.length, item; i < len; i++) {\n\t\titem = items[i];\n\t\tthis.root().addEventListener(item[0],item[1],item[2]);\n\t};\n\t\n\tif (true) {\n\t\twindow.addEventListener('hashchange',Imba.commit);\n\t\twindow.addEventListener('popstate',Imba.commit);\n\t};\n\treturn this;\n};\n\nImba.EventManager.prototype.ondisable = function (){\n\tfor (let o = this.delegators(), handler, i = 0, keys = Object.keys(o), l = keys.length, name; i < l; i++){\n\t\tname = keys[i];handler = o[name];this.root().removeEventListener(name,handler,true);\n\t};\n\t\n\tfor (let i = 0, items = iter$(this.listeners()), len = items.length, item; i < len; i++) {\n\t\titem = items[i];\n\t\tthis.root().removeEventListener(item[0],item[1],item[2]);\n\t};\n\t\n\tif (true) {\n\t\twindow.removeEventListener('hashchange',Imba.commit);\n\t\twindow.removeEventListener('popstate',Imba.commit);\n\t};\n\t\n\treturn this;\n};\n", "function idx$(a,b){\n\treturn (b && b.indexOf) ? b.indexOf(a) : [].indexOf.call(a,b);\n};\n// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require(\"../imba\");\n\n// externs;\n\n\nImba.CSSKeyMap = {};\n\nImba.TAG_BUILT = 1;\nImba.TAG_SETUP = 2;\nImba.TAG_MOUNTING = 4;\nImba.TAG_MOUNTED = 8;\nImba.TAG_SCHEDULED = 16;\nImba.TAG_AWAKENED = 32;\nImba.TAG_MOUNTABLE = 64;\nImba.TAG_AUTOCLASS_GLOBALS = true;\nImba.TAG_AUTOCLASS_LOCALS = true;\nImba.TAG_AUTOCLASS_SVG = true;\n\n/*\nGet the current document\n*/\n\nImba.document = function (){\n\treturn window.document;\n};\n\n/*\nGet the body element wrapped in an Imba.Tag\n*/\n\nImba.root = function (){\n\treturn Imba.getTagForDom(Imba.document().body);\n};\n\nImba.static = function (items,typ,nr){\n\titems._type = typ;\n\titems.static = nr;\n\treturn items;\n};\n\n/*\n\n*/\n\nImba.mount = function (node,into){\n\tinto || (into = Imba.document().body);\n\tinto.appendChild(node.dom());\n\tImba.TagManager.insert(node,into);\n\tnode.scheduler().configure({events: true}).activate(false);\n\tImba.TagManager.refresh();\n\treturn node;\n};\n\n\nImba.createTextNode = function (node){\n\tif (node && node.nodeType == 3) {\n\t\treturn node;\n\t};\n\treturn Imba.document().createTextNode(node);\n};\n\n\nfunction Imba2TagProxy(node){\n\tthis._target = node;\n\tthis._cache = {};\n\treturn this;\n};\n\nImba2TagProxy.build = function (node){\n\treturn new Proxy(node,new this(node));\n};\n\nImba2TagProxy.prototype.setter = function (key,receiver){\n\tvar self = this;\n\treturn function(value,mods) {\n\t\t// console.log 'setting!!',key,value,@target\n\t\tself._target[key] = value;\n\t\treturn receiver;\n\t};\n};\n\nImba2TagProxy.prototype.get = function (target,key,receiver){\n\tlet cache = (target.V1CACHE || (target.V1CACHE = {}));\n\t\n\tif (cache[key]) {\n\t\treturn cache[key];\n\t};\n\t\n\tif (key == 'dom') {\n\t\treturn cache[key] = function() { return target; };\n\t};\n\tif (key == 'tag') {\n\t\treturn cache[key] = function() { return target; };\n\t};\n\t\n\tif (key == '_tag' || key == '_dom' || key == '_slot_') {\n\t\treturn target;\n\t};\n\t\n\tif (key == 'end') {\n\t\t// console.log target\n\t\treturn cache[key] = function() {\n\t\t\ttarget.end$();\n\t\t\treturn receiver;\n\t\t};\n\t};\n\t\n\tif (key.match(/^set[A-Z]/)) {\n\t\tlet name = key[3].toLowerCase() + key.slice(4);\n\t\treturn cache[key] = this.setter(name,receiver);\n\t} else {\n\t\tif (target[key] instanceof Function) {\n\t\t\treturn target[key];\n\t\t} else {\n\t\t\treturn cache[key] = function() {\n\t\t\t\treturn target[key];\n\t\t\t};\n\t\t};\n\t};\n\t\n\treturn null;\n};\n\n\n\n\n/*\nThis is the baseclass that all tags in imba inherit from.\n@iname node\n*/\n\nImba.Tag = function Tag(dom,ctx){\n\tthis.setDom(dom);\n\tthis.$ = TagCache.build(this);\n\tthis.$up = this._owner_ = ctx;\n\tthis._tree_ = null;\n\tthis.FLAGS = 0;\n\tthis.build();\n\tthis;\n};\n\n\nImba.Tag.buildNode = function (){\n\tvar dom = Imba.document().createElement(this._nodeType || 'div');\n\tif (this._classes) {\n\t\tvar cls = this._classes.join(\" \");\n\t\tif (cls) { dom.className = cls };\n\t};\n\treturn dom;\n};\n\nImba.Tag.createNode = function (){\n\tvar proto = (this._protoDom || (this._protoDom = this.buildNode()));\n\treturn proto.cloneNode(false);\n};\n\nImba.Tag.build = function (ctx){\n\treturn new this(this.createNode(),ctx);\n};\n\nImba.Tag.dom = function (){\n\treturn this._protoDom || (this._protoDom = this.buildNode());\n};\n\nImba.Tag.end = function (){\n\treturn this.commit(0);\n};\n\n/*\n\tCalled when a tag type is being subclassed.\n\t*/\n\nImba.Tag.inherit = function (child){\n\tchild._protoDom = null;\n\t\n\tif (this._nodeType) {\n\t\tchild._nodeType = this._nodeType;\n\t\tchild._classes = this._classes.slice();\n\t\t\n\t\tif (child._flagName) {\n\t\t\treturn child._classes.push(child._flagName);\n\t\t};\n\t} else {\n\t\tchild._nodeType = child._name;\n\t\tchild._flagName = null;\n\t\treturn child._classes = [];\n\t};\n};\n\n/*\n\tInternal method called after a tag class has\n\tbeen declared or extended.\n\t\n\t@private\n\t*/\n\nImba.Tag.prototype.optimizeTagStructure = function (){\n\tif (!true) {};\n\tvar ctor = this.constructor;\n\tlet keys = Object.keys(this);\n\t\n\tif (keys.indexOf('mount') >= 0) {\n\t\tif (ctor._classes && ctor._classes.indexOf('__mount') == -1) {\n\t\t\tctor._classes.push('__mount');\n\t\t};\n\t\t\n\t\tif (ctor._protoDom) {\n\t\t\tctor._protoDom.classList.add('__mount');\n\t\t};\n\t};\n\t\n\tfor (let i = 0, items = iter$(keys), len = items.length, key; i < len; i++) {\n\t\tkey = items[i];\n\t\tif ((/^on/).test(key)) { Imba.EventManager.bind(key.slice(2)) };\n\t};\n\treturn this;\n};\n\n\nImba.attr(Imba.Tag,'accesskey');\nImba.attr(Imba.Tag,'autocapitalize');\nImba.attr(Imba.Tag,'contenteditable');\nImba.attr(Imba.Tag,'contextmenu');\nImba.attr(Imba.Tag,'dir');\nImba.attr(Imba.Tag,'draggable');\nImba.attr(Imba.Tag,'dropzone');\nImba.attr(Imba.Tag,'hidden');\nImba.attr(Imba.Tag,'inputmode');\nImba.attr(Imba.Tag,'itemid');\nImba.attr(Imba.Tag,'itemprop');\nImba.attr(Imba.Tag,'itemref');\nImba.attr(Imba.Tag,'itemscope');\nImba.attr(Imba.Tag,'itemtype');\nImba.attr(Imba.Tag,'lang');\nImba.attr(Imba.Tag,'name');\nImba.attr(Imba.Tag,'role');\nImba.attr(Imba.Tag,'slot');\nImba.attr(Imba.Tag,'spellcheck');\nImba.attr(Imba.Tag,'tabindex');\nImba.Tag.prototype.title = function(v){ return this.getAttribute('title'); }\nImba.Tag.prototype.setTitle = function(v){ this.setAttribute('title',v); return this; };\nImba.attr(Imba.Tag,'translate');\n\nImba.Tag.prototype.dom = function (){\n\treturn this._dom;\n};\n\nImba.Tag.prototype.setDom = function (dom){\n\tdom._tag = this;\n\tthis._dom = this._slot_ = dom;\n\treturn this;\n};\n\nImba.Tag.prototype.ref = function (){\n\treturn this._ref;\n};\n\nImba.Tag.prototype.root = function (){\n\treturn this._owner_ ? this._owner_.root() : this;\n};\n\n/*\n\tSetting references for tags like\n\t`<div@header>` will compile to `tag('div').ref_('header',this).end()`\n\tBy default it adds the reference as a className to the tag.\n\n\t@return {self}\n\t@private\n\t*/\n\nImba.Tag.prototype.ref_ = function (ref){\n\tthis.flag(this._ref = ref);\n\treturn this;\n};\n\n/*\n\tSet the data object for node\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.setData = function (data){\n\tthis._data = data;\n\treturn this;\n};\n\n/*\n\tGet the data object for node\n\t*/\n\nImba.Tag.prototype.data = function (){\n\treturn this._data;\n};\n\n\nImba.Tag.prototype.bindData = function (target,path,args){\n\treturn this.setData(args ? target[path].apply(target,args) : target[path]);\n};\n\n/*\n\tSet inner html of node\n\t*/\n\nImba.Tag.prototype.setHtml = function (html){\n\tif (this.html() != html) {\n\t\tthis._dom.innerHTML = html;\n\t};\n\treturn this;\n};\n\n/*\n\tGet inner html of node\n\t*/\n\nImba.Tag.prototype.html = function (){\n\treturn this._dom.innerHTML;\n};\n\nImba.Tag.prototype.on$ = function (slot,handler,context){\n\tlet handlers = this._on_ || (this._on_ = []);\n\tlet prev = handlers[slot];\n\t// self-bound handlers\n\tif (slot < 0) {\n\t\tif (prev == undefined) {\n\t\t\tslot = handlers[slot] = handlers.length;\n\t\t} else {\n\t\t\tslot = prev;\n\t\t};\n\t\tprev = handlers[slot];\n\t};\n\t\n\thandlers[slot] = handler;\n\tif (prev) {\n\t\thandler.state = prev.state;\n\t} else {\n\t\thandler.state = {context: context};\n\t\tif (true) { Imba.EventManager.bind(handler[0]) };\n\t};\n\treturn this;\n};\n\n\nImba.Tag.prototype.setId = function (id){\n\tif (id != null) {\n\t\tthis.dom().id = id;\n\t};\n\treturn this;\n};\n\nImba.Tag.prototype.id = function (){\n\treturn this.dom().id;\n};\n\n/*\n\tAdds a new attribute or changes the value of an existing attribute\n\ton the specified tag. If the value is null or false, the attribute\n\twill be removed.\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.setAttribute = function (name,value){\n\tvar old = this.dom().getAttribute(name);\n\t\n\tif (old == value) {\n\t\tvalue;\n\t} else if (value != null && value !== false) {\n\t\tthis.dom().setAttribute(name,value);\n\t} else {\n\t\tthis.dom().removeAttribute(name);\n\t};\n\treturn this;\n};\n\nImba.Tag.prototype.setNestedAttr = function (ns,name,value,modifiers){\n\tif (this[ns + 'SetAttribute']) {\n\t\tthis[ns + 'SetAttribute'](name,value,modifiers);\n\t} else {\n\t\tthis.setAttributeNS(ns,name,value);\n\t};\n\treturn this;\n};\n\nImba.Tag.prototype.setAttributeNS = function (ns,name,value){\n\tvar old = this.getAttributeNS(ns,name);\n\t\n\tif (old != value) {\n\t\tif (value != null && value !== false) {\n\t\t\tthis.dom().setAttributeNS(ns,name,value);\n\t\t} else {\n\t\t\tthis.dom().removeAttributeNS(ns,name);\n\t\t};\n\t};\n\treturn this;\n};\n\n\n/*\n\tremoves an attribute from the specified tag\n\t*/\n\nImba.Tag.prototype.removeAttribute = function (name){\n\treturn this.dom().removeAttribute(name);\n};\n\n/*\n\treturns the value of an attribute on the tag.\n\tIf the given attribute does not exist, the value returned\n\twill either be null or \"\" (the empty string)\n\t*/\n\nImba.Tag.prototype.getAttribute = function (name){\n\treturn this.dom().getAttribute(name);\n};\n\n\nImba.Tag.prototype.getAttributeNS = function (ns,name){\n\treturn this.dom().getAttributeNS(ns,name);\n};\n\n\nImba.Tag.prototype.set = function (key,value,mods){\n\tlet setter = Imba.toSetter(key);\n\tif (this[setter] instanceof Function) {\n\t\tthis[setter](value,mods);\n\t} else {\n\t\tthis._dom.setAttribute(key,value);\n\t};\n\treturn this;\n};\n\n\nImba.Tag.prototype.get = function (key){\n\treturn this._dom.getAttribute(key);\n};\n\n/*\n\tOverride this to provide special wrapping etc.\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.setContent = function (content,type){\n\tthis.setChildren(content,type);\n\treturn this;\n};\n\n/*\n\tSet the children of node. type param is optional,\n\tand should only be used by Imba when compiling tag trees. \n\t@return {self}\n\t*/\n\nImba.Tag.prototype.setChildren = function (nodes,type){\n\t// overridden on client by reconciler\n\tthis._tree_ = nodes;\n\treturn this;\n};\n\n/*\n\tSet the template that will render the content of node.\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.setTemplate = function (template){\n\tif (!this._template) {\n\t\tif (this.render == Imba.Tag.prototype.render) {\n\t\t\tthis.render = this.renderTemplate; // do setChildren(renderTemplate)\n\t\t};\n\t};\n\t\n\tthis.template = this._template = template;\n\treturn this;\n};\n\nImba.Tag.prototype.template = function (){\n\treturn null;\n};\n\n/*\n\tIf no custom render-method is defined, and the node\n\thas a template, this method will be used to render\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.renderTemplate = function (){\n\tvar body = this.template();\n\tif (body != this) { this.setChildren(body) };\n\treturn this;\n};\n\n\n/*\n\tRemove specified child from current node.\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.removeChild = function (child){\n\tvar par = this.dom();\n\tvar el = child._slot_ || child;\n\tif (el && el.parentNode == par) {\n\t\tImba.TagManager.remove(el._tag || el,this);\n\t\tpar.removeChild(el);\n\t};\n\treturn this;\n};\n\n/*\n\tRemove all content inside node\n\t*/\n\nImba.Tag.prototype.removeAllChildren = function (){\n\tif (this._dom.firstChild) {\n\t\tvar el;\n\t\twhile (el = this._dom.firstChild){\n\t\t\ttrue && Imba.TagManager.remove(el._tag || el,this);\n\t\t\tthis._dom.removeChild(el);\n\t\t};\n\t};\n\tthis._tree_ = this._text_ = null;\n\treturn this;\n};\n\n/*\n\tAppend a single item (node or string) to the current node.\n\tIf supplied item is a string it will automatically. This is used\n\tby Imba internally, but will practically never be used explicitly.\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.appendChild = function (node){\n\tif ((typeof node=='string'||node instanceof String)) {\n\t\tthis.dom().appendChild(Imba.document().createTextNode(node));\n\t} else if (node) {\n\t\tthis.dom().appendChild(node._slot_ || node);\n\t\tImba.TagManager.insert(node._tag || node,this);\n\t\t// FIXME ensure these are not called for text nodes\n\t};\n\treturn this;\n};\n\n/*\n\tInsert a node into the current node (self), before another.\n\tThe relative node must be a child of current node. \n\t*/\n\nImba.Tag.prototype.insertBefore = function (node,rel){\n\tif ((typeof node=='string'||node instanceof String)) {\n\t\tnode = Imba.document().createTextNode(node);\n\t};\n\t\n\tif (node && rel) {\n\t\tthis.dom().insertBefore((node._slot_ || node),(rel._slot_ || rel));\n\t\tImba.TagManager.insert(node._tag || node,this);\n\t\t// FIXME ensure these are not called for text nodes\n\t};\n\treturn this;\n};\n\nImba.Tag.prototype.detachFromParent = function (){\n\tif (this._slot_ == this._dom) {\n\t\tthis._slot_ = (this._dom._placeholder_ || (this._dom._placeholder_ = Imba.document().createComment(\"node\")));\n\t\tthis._slot_._tag || (this._slot_._tag = this);\n\t\t\n\t\tif (this._dom.parentNode) {\n\t\t\tImba.TagManager.remove(this,this._dom.parentNode);\n\t\t\tthis._dom.parentNode.replaceChild(this._slot_,this._dom);\n\t\t};\n\t};\n\treturn this;\n};\n\nImba.Tag.prototype.attachToParent = function (){\n\tif (this._slot_ != this._dom) {\n\t\tlet prev = this._slot_;\n\t\tthis._slot_ = this._dom;\n\t\tif (prev && prev.parentNode) {\n\t\t\tImba.TagManager.insert(this);\n\t\t\tprev.parentNode.replaceChild(this._dom,prev);\n\t\t};\n\t};\n\t\n\treturn this;\n};\n\n/*\n\tRemove node from the dom tree\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.orphanize = function (){\n\tvar par;\n\tif (par = this.parent()) { par.removeChild(this) };\n\treturn this;\n};\n\n/*\n\tGet text of node. Uses textContent behind the scenes (not innerText)\n\t[https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent]()\n\t@return {string} inner text of node\n\t*/\n\nImba.Tag.prototype.text = function (v){\n\treturn this._dom.textContent;\n};\n\n/*\n\tSet text of node. Uses textContent behind the scenes (not innerText)\n\t[https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent]()\n\t*/\n\nImba.Tag.prototype.setText = function (txt){\n\tthis._tree_ = txt;\n\tthis._dom.textContent = (txt == null || this.text() === false) ? '' : txt;\n\tthis;\n\treturn this;\n};\n\n\n/*\n\tMethod for getting and setting data-attributes. When called with zero\n\targuments it will return the actual dataset for the tag.\n\n\t\tvar node = <div data-name='hello'>\n\t\t# get the whole dataset\n\t\tnode.dataset # {name: 'hello'}\n\t\t# get a single value\n\t\tnode.dataset('name') # 'hello'\n\t\t# set a single value\n\t\tnode.dataset('name','newname') # self\n\n\n\t*/\n\nImba.Tag.prototype.dataset = function (key,val){\n\tif (key instanceof Object) {\n\t\tfor (let v, i = 0, keys = Object.keys(key), l = keys.length, k; i < l; i++){\n\t\t\tk = keys[i];v = key[k];this.dataset(k,v);\n\t\t};\n\t\treturn this;\n\t};\n\t\n\tif (arguments.length == 2) {\n\t\tthis.setAttribute((\"data-\" + key),val);\n\t\treturn this;\n\t};\n\t\n\tif (key) {\n\t\treturn this.getAttribute((\"data-\" + key));\n\t};\n\t\n\tvar dataset = this.dom().dataset;\n\t\n\tif (!dataset) {\n\t\tdataset = {};\n\t\tfor (let i = 0, items = iter$(this.dom().attributes), len = items.length, atr; i < len; i++) {\n\t\t\tatr = items[i];\n\t\t\tif (atr.name.substr(0,5) == 'data-') {\n\t\t\t\tdataset[Imba.toCamelCase(atr.name.slice(5))] = atr.value;\n\t\t\t};\n\t\t};\n\t};\n\t\n\treturn dataset;\n};\n\n/*\n\tEmpty placeholder. Override to implement custom render behaviour.\n\tWorks much like the familiar render-method in React.\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.render = function (){\n\treturn this;\n};\n\n/*\n\tCalled implicitly while tag is initializing. No initial props\n\twill have been set at this point.\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.build = function (){\n\treturn this;\n};\n\n/*\n\tCalled once, implicitly through Imba.Tag#end. All initial props\n\tand children will have been set before setup is called.\n\tsetContent.\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.setup = function (){\n\treturn this;\n};\n\n/*\n\tCalled implicitly through Imba.Tag#end, for tags that are part of\n\ta tag tree (that are rendered several times).\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.commit = function (){\n\tif (this.beforeRender() !== false) this.render();\n\treturn this;\n};\n\nImba.Tag.prototype.beforeRender = function (){\n\treturn this;\n};\n\n/*\n\n\tCalled by the tag-scheduler (if this tag is scheduled)\n\tBy default it will call this.render. Do not override unless\n\tyou really understand it.\n\n\t*/\n\nImba.Tag.prototype.tick = function (){\n\tif (this.beforeRender() !== false) this.render();\n\treturn this;\n};\n\n/*\n\t\n\tA very important method that you will practically never manually.\n\tThe tag syntax of Imba compiles to a chain of setters, which always\n\tends with .end. `<a.large>` compiles to `tag('a').flag('large').end()`\n\t\n\tYou are highly adviced to not override its behaviour. The first time\n\tend is called it will mark the tag as initialized and call Imba.Tag#setup,\n\tand call Imba.Tag#commit every time.\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.end = function (){\n\tthis.setup();\n\tthis.commit(0);\n\tthis.end = Imba.Tag.end;\n\treturn this;\n};\n\n// called on <self> to check if self is called from other places\nImba.Tag.prototype.$open = function (context){\n\tif (context != this._context_) {\n\t\tthis._tree_ = null;\n\t\tthis._context_ = context;\n\t};\n\treturn this;\n};\n\n/*\n\tThis is called instead of Imba.Tag#end for `<self>` tag chains.\n\tDefaults to noop\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.synced = function (){\n\treturn this;\n};\n\n// called when the node is awakened in the dom - either automatically\n// upon attachment to the dom-tree, or the first time imba needs the\n// tag for a domnode that has been rendered on the server\nImba.Tag.prototype.awaken = function (){\n\treturn this;\n};\n\n/*\n\tList of flags for this node. \n\t*/\n\nImba.Tag.prototype.flags = function (){\n\treturn this._dom.classList;\n};\n\n/*\n\tAdd speficied flag to current node.\n\tIf a second argument is supplied, it will be coerced into a Boolean,\n\tand used to indicate whether we should remove the flag instead.\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.flag = function (name,toggler){\n\t// it is most natural to treat a second undefined argument as a no-switch\n\t// so we need to check the arguments-length\n\tif (arguments.length == 2) {\n\t\tif (this._dom.classList.contains(name) != !!toggler) {\n\t\t\tthis._dom.classList.toggle(name);\n\t\t};\n\t} else {\n\t\t// firefox will trigger a change if adding existing class\n\t\tif (!this._dom.classList.contains(name)) { this._dom.classList.add(name) };\n\t};\n\treturn this;\n};\n\n/*\n\tRemove specified flag from node\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.unflag = function (name){\n\tthis._dom.classList.remove(name);\n\treturn this;\n};\n\n/*\n\tToggle specified flag on node\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.toggleFlag = function (name){\n\tthis._dom.classList.toggle(name);\n\treturn this;\n};\n\n/*\n\tCheck whether current node has specified flag\n\t@return {bool}\n\t*/\n\nImba.Tag.prototype.hasFlag = function (name){\n\treturn this._dom.classList.contains(name);\n};\n\n\nImba.Tag.prototype.flagIf = function (flag,bool){\n\tvar f = this._flags_ || (this._flags_ = {});\n\tlet prev = f[flag];\n\t\n\tif (bool && !prev) {\n\t\tthis._dom.classList.add(flag);\n\t\tf[flag] = true;\n\t} else if (prev && !bool) {\n\t\tthis._dom.classList.remove(flag);\n\t\tf[flag] = false;\n\t};\n\t\n\treturn this;\n};\n\n/*\n\tSet/update a named flag. It remembers the previous\n\tvalue of the flag, and removes it before setting the new value.\n\n\t\tnode.setFlag('type','todo')\n\t\tnode.setFlag('type','project')\n\t\t# todo is removed, project is added.\n\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.setFlag = function (name,value){\n\tlet flags = this._namedFlags_ || (this._namedFlags_ = {});\n\tlet prev = flags[name];\n\tif (prev != value) {\n\t\tif (prev) { this.unflag(prev) };\n\t\tif (value) { this.flag(value) };\n\t\tflags[name] = value;\n\t};\n\treturn this;\n};\n\n\n/*\n\tGet the scheduler for this node. A new scheduler will be created\n\tif it does not already exist.\n\n\t@return {Imba.Scheduler}\n\t*/\n\nImba.Tag.prototype.scheduler = function (){\n\treturn (this._scheduler == null) ? (this._scheduler = new Imba.Scheduler(this)) : this._scheduler;\n};\n\n/*\n\n\tShorthand to start scheduling a node. The method will basically\n\tproxy the arguments through to scheduler.configure, and then\n\tactivate the scheduler.\n\t\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.schedule = function (options){\n\tif(options === undefined) options = {events: true};\n\tthis.scheduler().configure(options).activate();\n\treturn this;\n};\n\n/*\n\tShorthand for deactivating scheduler (if tag has one).\n\t@deprecated\n\t*/\n\nImba.Tag.prototype.unschedule = function (){\n\tif (this._scheduler) { this.scheduler().deactivate() };\n\treturn this;\n};\n\n\n/*\n\tGet the parent of current node\n\t@return {Imba.Tag} \n\t*/\n\nImba.Tag.prototype.parent = function (){\n\treturn Imba.getTagForDom(this.dom().parentNode);\n};\n\n/*\n\tGet the children of node\n\t@return {Imba.Tag[]}\n\t*/\n\nImba.Tag.prototype.children = function (sel){\n\tlet res = [];\n\tfor (let i = 0, items = iter$(this._dom.children), len = items.length, item; i < len; i++) {\n\t\titem = items[i];\n\t\tres.push(item._tag || Imba.getTagForDom(item));\n\t};\n\treturn res;\n};\n\nImba.Tag.prototype.querySelector = function (q){\n\treturn Imba.getTagForDom(this._dom.querySelector(q));\n};\n\nImba.Tag.prototype.querySelectorAll = function (q){\n\tvar items = [];\n\tfor (let i = 0, ary = iter$(this._dom.querySelectorAll(q)), len = ary.length; i < len; i++) {\n\t\titems.push(Imba.getTagForDom(ary[i]));\n\t};\n\treturn items;\n};\n\n/*\n\tCheck if this node matches a selector\n\t@return {Boolean}\n\t*/\n\nImba.Tag.prototype.matches = function (sel){\n\tvar fn;\n\tif (sel instanceof Function) {\n\t\treturn sel(this);\n\t};\n\t\n\tif (sel.query instanceof Function) { sel = sel.query() };\n\tif (fn = (this._dom.matches || this._dom.matchesSelector || this._dom.webkitMatchesSelector || this._dom.msMatchesSelector || this._dom.mozMatchesSelector)) {\n\t\treturn fn.call(this._dom,sel);\n\t};\n};\n\n/*\n\tGet the first element matching supplied selector / filter\n\ttraversing upwards, but including the node itself.\n\t@return {Imba.Tag}\n\t*/\n\nImba.Tag.prototype.closest = function (sel){\n\treturn Imba.getTagForDom(this._dom.closest(sel));\n};\n\n/*\n\tCheck if node contains other node\n\t@return {Boolean} \n\t*/\n\nImba.Tag.prototype.contains = function (node){\n\treturn this.dom().contains(node._dom || node);\n};\n\n\n/*\n\tShorthand for console.log on elements\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.log = function (){\n\tvar $0 = arguments, i = $0.length;\n\tvar args = new Array(i>0 ? i : 0);\n\twhile(i>0) args[i-1] = $0[--i];\n\targs.unshift(console);\n\tFunction.prototype.call.apply(console.log,args);\n\treturn this;\n};\n\nImba.Tag.prototype.css = function (key,val,mod){\n\tif (key instanceof Object) {\n\t\tfor (let v, i = 0, keys = Object.keys(key), l = keys.length, k; i < l; i++){\n\t\t\tk = keys[i];v = key[k];this.css(k,v);\n\t\t};\n\t\treturn this;\n\t};\n\t\n\tvar name = Imba.CSSKeyMap[key] || key;\n\t\n\tif (val == null) {\n\t\tthis.dom().style.removeProperty(name);\n\t} else if (val == undefined && arguments.length == 1) {\n\t\treturn this.dom().style[name];\n\t} else if (name.match(/^--/)) {\n\t\tthis.dom().style.setProperty(name,val);\n\t} else {\n\t\tif ((typeof val=='number'||val instanceof Number) && (name.match(/width|height|left|right|top|bottom/) || (mod && mod.px))) {\n\t\t\tthis.dom().style[name] = val + \"px\";\n\t\t} else {\n\t\t\tthis.dom().style[name] = val;\n\t\t};\n\t};\n\treturn this;\n};\n\nImba.Tag.prototype.setStyle = function (style){\n\treturn this.setAttribute('style',style);\n};\n\nImba.Tag.prototype.style = function (){\n\treturn this.getAttribute('style');\n};\n\n/*\n\tTrigger an event from current node. Dispatched through the Imba event manager.\n\tTo dispatch actual dom events, use dom.dispatchEvent instead.\n\n\t@return {Imba.Event}\n\t*/\n\nImba.Tag.prototype.trigger = function (name,data){\n\tif(data === undefined) data = {};\n\treturn true && Imba.Events.trigger(name,this,{data: data});\n};\n\n/*\n\tFocus on current node\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.focus = function (){\n\tthis.dom().focus();\n\treturn this;\n};\n\n/*\n\tRemove focus from current node\n\t@return {self}\n\t*/\n\nImba.Tag.prototype.blur = function (){\n\tthis.dom().blur();\n\treturn this;\n};\n\nImba.Tag.prototype.toString = function (){\n\treturn this.dom().outerHTML;\n};\n\n\nImba.Tag.prototype.initialize = Imba.Tag;\n\nImba.SVGTag = function SVGTag(){ return Imba.Tag.apply(this,arguments) };\n\nsubclass$(Imba.SVGTag,Imba.Tag);\nImba.SVGTag.namespaceURI = function (){\n\treturn \"http://www.w3.org/2000/svg\";\n};\n\nImba.SVGTag.buildNode = function (){\n\tvar dom = Imba.document().createElementNS(this.namespaceURI(),this._nodeType);\n\tif (this._classes) {\n\t\tvar cls = this._classes.join(\" \");\n\t\tif (cls) { dom.className.baseVal = cls };\n\t};\n\treturn dom;\n};\n\nImba.SVGTag.inherit = function (child){\n\tchild._protoDom = null;\n\t\n\tif (this == Imba.SVGTag) {\n\t\tchild._nodeType = child._name;\n\t\treturn child._classes = [];\n\t} else {\n\t\tchild._nodeType = this._nodeType;\n\t\tvar classes = (this._classes || []).slice(0);\n\t\tif (Imba.TAG_AUTOCLASS_SVG && child._flagName) {\n\t\t\tclasses.push(child._flagName);\n\t\t};\n\t\treturn child._classes = classes;\n\t};\n};\n\n\nImba.HTML_TAGS = \"a abbr address area article aside audio b base bdi bdo big blockquote body br button canvas caption cite code col colgroup data datalist dd del details dfn div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 head header hr html i iframe img input ins kbd keygen label legend li link main map mark menu menuitem meta meter nav noscript object ol optgroup option output p param pre progress q rp rt ruby s samp script section select small source span strong style sub summary sup table tbody td textarea tfoot th thead time title tr track u ul var video wbr\".split(\" \");\nImba.HTML_TAGS_UNSAFE = \"article aside header section\".split(\" \");\n\nImba.HTML_ATTRS = {\n\ta: \"href target hreflang media download rel type ping referrerpolicy\",\n\taudio: \"autoplay controls crossorigin loop muted preload src\",\n\tarea: \"alt coords download href hreflang ping referrerpolicy rel shape target\",\n\tbase: \"href target\",\n\tvideo: \"autoplay buffered controls crossorigin height loop muted preload poster src width playsinline\",\n\tfieldset: \"disabled form name\",\n\tform: \"method action enctype autocomplete target\",\n\tbutton: \"autofocus type form formaction formenctype formmethod formnovalidate formtarget value name\",\n\tembed: \"height src type width\",\n\tinput: \"accept disabled form list max maxlength min minlength pattern required size step type\",\n\tlabel: \"accesskey for form\",\n\timg: \"alt src srcset crossorigin decoding height importance intrinsicsize ismap referrerpolicy sizes width usemap\",\n\tlink: \"rel type href media\",\n\tiframe: \"allow allowfullscreen allowpaymentrequest height importance name referrerpolicy sandbox src srcdoc width frameborder align longdesc scrolling\",\n\tmeta: \"property content charset desc http-equiv color-scheme name scheme\",\n\tmap: \"name\",\n\toptgroup: \"label\",\n\toption: \"label\",\n\toutput: \"for form\",\n\tobject: \"type data width height\",\n\tparam: \"name type value valuetype\",\n\tprogress: \"max\",\n\tscript: \"src type async defer crossorigin integrity nonce language nomodule\",\n\tselect: \"size form multiple\",\n\tsource: \"sizes src srcset type media\",\n\ttextarea: \"rows cols minlength maxlength form wrap\",\n\ttrack: \"default kind label src srclang\",\n\ttd: \"colspan rowspan headers\",\n\tth: \"colspan rowspan\"\n};\n\n\nImba.HTML_PROPS = {\n\tinput: \"autofocus autocomplete autocapitalize autocorrect value placeholder required disabled multiple checked readOnly spellcheck\",\n\ttextarea: \"autofocus autocomplete autocapitalize autocorrect value placeholder required disabled multiple checked readOnly spellcheck\",\n\tform: \"novalidate\",\n\tfieldset: \"disabled\",\n\tbutton: \"disabled\",\n\tselect: \"autofocus disabled required readOnly multiple\",\n\toption: \"disabled selected value\",\n\toptgroup: \"disabled\",\n\tprogress: \"value\",\n\tfieldset: \"disabled\",\n\tcanvas: \"width height\"\n};\n\nvar extender = function(obj,sup) {\n\tfor (let v, i = 0, keys = Object.keys(sup), l = keys.length, k; i < l; i++){\n\t\tk = keys[i];v = sup[k];(obj[k] == null) ? (obj[k] = v) : obj[k];\n\t};\n\t\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.constructor = obj;\n\tif (sup.inherit) { sup.inherit(obj) };\n\treturn obj;\n};\n\n\n\nfunction Tag(){\n\treturn function(dom,ctx) {\n\t\tthis.initialize(dom,ctx);\n\t\treturn this;\n\t};\n};\n\nImba.Tags = function Tags(){\n\tthis;\n};\n\nImba.Tags.prototype.__clone = function (ns){\n\tvar clone = Object.create(this);\n\tclone._parent = this;\n\treturn clone;\n};\n\nImba.Tags.prototype.ns = function (name){\n\treturn this['_' + name.toUpperCase()] || this.defineNamespace(name);\n};\n\nImba.Tags.prototype.defineNamespace = function (name){\n\tvar clone = Object.create(this);\n\tclone._parent = this;\n\tclone._ns = name;\n\tthis['_' + name.toUpperCase()] = clone;\n\treturn clone;\n};\n\nImba.Tags.prototype.baseType = function (name,ns){\n\treturn (idx$(name,Imba.HTML_TAGS) >= 0) ? 'element' : 'div';\n};\n\nImba.Tags.prototype.defineTag = function (o,fullName,supr,body){\n\tvar _classes_;\n\tif(body==undefined && typeof supr == 'function') body = supr,supr = '';\n\tif(supr==undefined) supr = '';\n\tif (body && body._nodeType) {\n\t\tsupr = body;\n\t\tbody = null;\n\t};\n\t\n\tif (this[fullName]) {\n\t\tconsole.log(\"tag already exists?\",fullName);\n\t};\n\t\n\t// if it is namespaced\n\tvar ns;\n\tvar name = fullName;\n\tlet nsidx = name.indexOf(':');\n\tif (nsidx >= 0) {\n\t\tns = fullName.substr(0,nsidx);\n\t\tname = fullName.substr(nsidx + 1);\n\t\tif (ns == 'svg' && !supr) {\n\t\t\tsupr = 'svg:element';\n\t\t};\n\t};\n\t\n\tsupr || (supr = this.baseType(fullName));\n\t\n\tlet supertype = ((typeof supr=='string'||supr instanceof String)) ? this.findTagType(supr) : supr;\n\tlet tagtype = Tag();\n\t\n\ttagtype._name = name;\n\ttagtype._flagName = null;\n\t\n\tif (name[0] == '#') {\n\t\tImba.SINGLETONS[name.slice(1)] = tagtype;\n\t\tthis[name] = tagtype;\n\t} else if (name[0] == name[0].toUpperCase()) {\n\t\tif (Imba.TAG_AUTOCLASS_LOCALS) {\n\t\t\ttagtype._flagName = name;\n\t\t};\n\t} else {\n\t\tif (Imba.TAG_AUTOCLASS_GLOBALS) {\n\t\t\ttagtype._flagName = \"_\" + fullName.replace(/[_\\:]/g,'-');\n\t\t};\n\t\tthis[fullName] = tagtype;\n\t};\n\t\n\textender(tagtype,supertype);\n\t\n\tif ((o && o.scope && o.scope.flags())) {\n\t\t(_classes_ = tagtype._classes).push.apply(_classes_,o.scope.flags());\n\t};\n\t\n\tif (body) {\n\t\tbody.call(tagtype,tagtype,tagtype.TAGS || this);\n\t\tif (tagtype.defined) { tagtype.defined() };\n\t\tthis.optimizeTag(tagtype);\n\t};\n\treturn tagtype;\n};\n\nImba.Tags.prototype.extendTag = function (o,name,supr,body){\n\tif(body==undefined && typeof supr == 'function') body = supr,supr = '';\n\tif(supr==undefined) supr = '';\n\tvar klass = (((typeof name=='string'||name instanceof String)) ? this.findTagType(name) : name);\n\t// allow for private tags here as well?\n\tif (body) { body && body.call(klass,klass,klass.prototype) };\n\tif (klass.extended) { klass.extended() };\n\tthis.optimizeTag(klass);\n\treturn klass;\n};\n\nImba.Tags.prototype.optimizeTag = function (tagtype){\n\tvar prototype_;\n\treturn (prototype_ = tagtype.prototype) && prototype_.optimizeTagStructure && prototype_.optimizeTagStructure();\n};\n\nImba.Tags.prototype.findTagType = function (type){\n\tvar attrs, props;\n\tif (!type) {\n\t\tthrow (\"Expected a valid tag but got falsy type, did you forget to export it?\");\n\t};\n\t\n\tlet klass = this[type];\n\tif (!klass) {\n\t\tif (type.substr(0,4) == 'svg:') {\n\t\t\tklass = this.defineTag(null,type,'svg:element');\n\t\t} else if (Imba.HTML_TAGS.indexOf(type) >= 0) {\n\t\t\tklass = this.defineTag(null,type,'element');\n\t\t\t\n\t\t\tif (attrs = Imba.HTML_ATTRS[type]) {\n\t\t\t\tfor (let i = 0, items = iter$(attrs.split(\" \")), len = items.length; i < len; i++) {\n\t\t\t\t\tImba.attr(klass,items[i]);\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\tif (props = Imba.HTML_PROPS[type]) {\n\t\t\t\tfor (let i = 0, items = iter$(props.split(\" \")), len = items.length; i < len; i++) {\n\t\t\t\t\tImba.attr(klass,items[i],{dom: true});\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n\t\n\treturn klass;\n};\n\nImba.createElement = function (name,ctx,ref,pref){\n\tvar type = name;\n\tvar parent;\n\tvar node;\n\tif (name instanceof Function) {\n\t\ttype = name;\n\t} else {\n\t\tif (ENV_DEBUG) {\n\t\t\tif (!Imba.TAGS.findTagType(name)) { throw ((\"cannot find tag-type \" + name)) };\n\t\t};\n\t\ttype = Imba.TAGS.findTagType(name);\n\t};\n\t\n\tif (ctx instanceof TagMap) {\n\t\tparent = ctx.par$;\n\t} else if (pref instanceof Imba.Tag) {\n\t\tparent = pref;\n\t} else {\n\t\tparent = (ctx && pref != undefined) ? ctx[pref] : ((ctx && ctx._tag || ctx));\n\t};\n\t\n\tif (type == null && globalThis && globalThis.imba) {\n\t\tnode = globalThis.imba.document.createElement(name);\n\t\tnode = Imba2TagProxy.build(node);\n\t\t// node['init$']() if node['init$']\n\t} else {\n\t\tnode = type.build(parent);\n\t};\n\t\n\tif (ctx instanceof TagMap) {\n\t\tctx.i$++;\n\t\tnode.$key = ref;\n\t};\n\t\n\tif (ctx && ref != undefined) {\n\t\tctx[ref] = node;\n\t};\n\t\n\treturn node;\n};\n\nImba.createElementFactory = function (ns){\n\tif (!ns) { return Imba.createElement };\n\t\n\treturn function(name,ctx,ref,pref) {\n\t\tvar node = Imba.createElement(name,ctx,ref,pref);\n\t\tnode._dom.classList.add('_' + ns);\n\t\treturn node;\n\t};\n};\n\nImba.createTagScope = function (ns){\n\treturn new TagScope(ns);\n};\n\nImba.createTagCache = function (owner){\n\tvar item = [];\n\titem._tag = owner;\n\treturn item;\n};\n\nImba.createTagMap = function (ctx,ref,pref){\n\tvar par = ((pref != undefined) ? pref : ctx._tag);\n\tvar node = new TagMap(ctx,ref,par);\n\tctx[ref] = node;\n\treturn node;\n};\n\nImba.createTagList = function (ctx,ref,pref){\n\tvar node = [];\n\tnode._type = 4;\n\tnode._tag = ((pref != undefined) ? pref : ctx._tag);\n\tctx[ref] = node;\n\treturn node;\n};\n\nImba.createTagLoopResult = function (ctx,ref,pref){\n\tvar node = [];\n\tnode._type = 5;\n\tnode.cache = {i$: 0};\n\treturn node;\n};\n\n// use array instead?\nfunction TagCache(owner){\n\tthis._tag = owner;\n\tthis;\n};\nTagCache.build = function (owner){\n\tvar item = [];\n\titem._tag = owner;\n\treturn item;\n};\n\n\n\nfunction TagMap(cache,ref,par){\n\tthis.cache$ = cache;\n\tthis.key$ = ref;\n\tthis.par$ = par;\n\tthis.i$ = 0;\n};\n\nTagMap.prototype.$iter = function (){\n\tvar item = [];\n\titem._type = 5;\n\titem.cache = this;\n\treturn item;\n};\n\nTagMap.prototype.$prune = function (items){\n\tlet cache = this.cache$;\n\tlet key = this.key$;\n\tlet clone = new TagMap(cache,key,this.par$);\n\tfor (let i = 0, ary = iter$(items), len = ary.length, item; i < len; i++) {\n\t\titem = ary[i];\n\t\tclone[item.key$] = item;\n\t};\n\tclone.i$ = items.length;\n\treturn cache[key] = clone;\n};\n\nfunction TagScope(ns){\n\tthis._ns = ns;\n\tthis._flags = ns ? ['_' + ns] : [];\n};\n\nTagScope.prototype.ns = function(v){ return this._ns; }\nTagScope.prototype.setNs = function(v){ this._ns = v; return this; };\nTagScope.prototype.flags = function(v){ return this._flags; }\nTagScope.prototype.setFlags = function(v){ this._flags = v; return this; };\n\nTagScope.prototype.defineTag = function (name,supr,body){\n\tif(body==undefined && typeof supr == 'function') body = supr,supr = '';\n\tif(supr==undefined) supr = '';\n\treturn Imba.TAGS.defineTag({scope: this},name,supr,body);\n};\n\nTagScope.prototype.extendTag = function (name,body){\n\treturn Imba.TAGS.extendTag({scope: this},name,body);\n};\n\nImba.TagMap = TagMap;\nImba.TagCache = TagCache;\nImba.SINGLETONS = {};\nImba.TAGS = new Imba.Tags();\nImba.TAGS.element = Imba.TAGS.htmlelement = Imba.Tag;\nImba.TAGS['svg:element'] = Imba.SVGTag;\n\nImba.attr(Imba.Tag,'is');\n\nImba.defineTag = function (name,supr,body){\n\tif(body==undefined && typeof supr == 'function') body = supr,supr = '';\n\tif(supr==undefined) supr = '';\n\treturn Imba.TAGS.defineTag({},name,supr,body);\n};\n\nImba.extendTag = function (name,body){\n\treturn Imba.TAGS.extendTag({},name,body);\n};\n\nImba.getTagSingleton = function (id){\n\tvar klass;\n\tvar dom,node;\n\t\n\tif (klass = Imba.SINGLETONS[id]) {\n\t\tif (klass && klass.Instance) { return klass.Instance };\n\t\t\n\t\t// no instance - check for element\n\t\tif (dom = Imba.document().getElementById(id)) {\n\t\t\t// we have a live instance - when finding it through a selector we should awake it, no?\n\t\t\t// console.log('creating the singleton from existing node in dom?',id,type)\n\t\t\tnode = klass.Instance = new klass(dom);\n\t\t\tnode.awaken(dom); // should only awaken\n\t\t\treturn node;\n\t\t};\n\t\t\n\t\tdom = klass.createNode();\n\t\tdom.id = id;\n\t\tnode = klass.Instance = new klass(dom);\n\t\tnode.end().awaken(dom);\n\t\treturn node;\n\t} else if (dom = Imba.document().getElementById(id)) {\n\t\treturn Imba.getTagForDom(dom);\n\t};\n};\n\nvar svgSupport = typeof SVGElement !== 'undefined';\n\n// shuold be phased out\nImba.getTagForDom = function (dom){\n\tif (!dom) { return null };\n\tif (dom._dom) { return dom };\n\tif (dom._tag) { return dom._tag };\n\tif (!dom.nodeName) { return null };\n\t\n\tvar name = dom.nodeName.toLowerCase();\n\tvar type = name;\n\tvar ns = Imba.TAGS;\n\t\n\tif (dom.id && Imba.SINGLETONS[dom.id]) {\n\t\treturn Imba.getTagSingleton(dom.id);\n\t};\n\t\n\tif (svgSupport && (dom instanceof SVGElement)) {\n\t\ttype = ns.findTagType(\"svg:\" + name);\n\t} else if (Imba.HTML_TAGS.indexOf(name) >= 0) {\n\t\ttype = ns.findTagType(name);\n\t} else {\n\t\ttype = Imba.Tag;\n\t};\n\t\n\treturn new type(dom,null).awaken(dom);\n};\n\n\nif (true && false && document) {\n\tvar styles = window.getComputedStyle(document.documentElement,'');\n\t\n\tfor (let i = 0, items = iter$(styles), len = items.length, prefixed; i < len; i++) {\n\t\tprefixed = items[i];\n\t\tvar unprefixed = prefixed.replace(/^-(webkit|ms|moz|o|blink)-/,'');\n\t\tvar camelCase = unprefixed.replace(/-(\\w)/g,function(m,a) { return a.toUpperCase(); });\n\t\t\n\t\t// if there exists an unprefixed version -- always use this\n\t\tif (prefixed != unprefixed) {\n\t\t\tif (styles.hasOwnProperty(unprefixed)) { continue; };\n\t\t};\n\t\t\n\t\t// register the prefixes\n\t\tImba.CSSKeyMap[unprefixed] = Imba.CSSKeyMap[camelCase] = prefixed;\n\t};\n\t\n\t// Ovverride classList\n\tif (!document.documentElement.classList) {\n\t\tImba.createTagScope(/*SCOPEID*/).extendTag('element', function(tag){\n\t\t\t\n\t\t\ttag.prototype.hasFlag = function (ref){\n\t\t\t\treturn new RegExp('(^|\\\\s)' + ref + '(\\\\s|$)').test(this._dom.className);\n\t\t\t};\n\t\t\t\n\t\t\ttag.prototype.addFlag = function (ref){\n\t\t\t\tif (this.hasFlag(ref)) { return this };\n\t\t\t\tthis._dom.className += (this._dom.className ? ' ' : '') + ref;\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\t\n\t\t\ttag.prototype.unflag = function (ref){\n\t\t\t\tif (!this.hasFlag(ref)) { return this };\n\t\t\t\tvar regex = new RegExp('(^|\\\\s)*' + ref + '(\\\\s|$)*','g');\n\t\t\t\tthis._dom.className = this._dom.className.replace(regex,'');\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\t\n\t\t\ttag.prototype.toggleFlag = function (ref){\n\t\t\t\treturn this.hasFlag(ref) ? this.unflag(ref) : this.flag(ref);\n\t\t\t};\n\t\t\t\n\t\t\ttag.prototype.flag = function (ref,bool){\n\t\t\t\tif (arguments.length == 2 && !!bool === false) {\n\t\t\t\t\treturn this.unflag(ref);\n\t\t\t\t};\n\t\t\t\treturn this.addFlag(ref);\n\t\t\t};\n\t\t});\n\t};\n};\n\nImba.Tag;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require(\"../imba\");\n\nImba.createTagScope(/*SCOPEID*/).defineTag('fragment', 'element', function(tag){\n\ttag.createNode = function (){\n\t\treturn Imba.document().createDocumentFragment();\n\t};\n});\n\nImba.createTagScope(/*SCOPEID*/).extendTag('html', function(tag){\n\ttag.prototype.parent = function (){\n\t\treturn null;\n\t};\n});\n\nImba.createTagScope(/*SCOPEID*/).extendTag('canvas', function(tag){\n\ttag.prototype.context = function (type){\n\t\tif(type === undefined) type = '2d';\n\t\treturn this.dom().getContext(type);\n\t};\n});\n\nfunction DataProxy(node,path,args){\n\tthis._node = node;\n\tthis._path = path;\n\tthis._args = args;\n\tif (this._args) { this._setter = Imba.toSetter(this._path) };\n};\n\nDataProxy.bind = function (receiver,data,path,args){\n\tlet proxy = receiver._data || (receiver._data = new this(receiver,path,args));\n\tproxy.bind(data,path,args);\n\treturn receiver;\n};\n\nDataProxy.prototype.bind = function (data,key,args){\n\tif (data != this._data) {\n\t\tthis._data = data;\n\t};\n\treturn this;\n};\n\nDataProxy.prototype.getFormValue = function (){\n\treturn this._setter ? this._data[this._path]() : this._data[this._path];\n};\n\nDataProxy.prototype.setFormValue = function (value){\n\treturn this._setter ? this._data[this._setter](value) : ((this._data[this._path] = value));\n};\n\n\nvar isArray = function(val) {\n\treturn val && val.splice && val.sort;\n};\n\nvar isSimilarArray = function(a,b) {\n\tlet l = a.length,i = 0;\n\tif (l != b.length) { return false };\n\twhile (i++ < l){\n\t\tif (a[i] != b[i]) { return false };\n\t};\n\treturn true;\n};\n\nImba.createTagScope(/*SCOPEID*/).extendTag('input', function(tag){\n\ttag.prototype.lazy = function(v){ return this._lazy; }\n\ttag.prototype.setLazy = function(v){ this._lazy = v; return this; };\n\ttag.prototype.number = function(v){ return this._number; }\n\ttag.prototype.setNumber = function(v){ this._number = v; return this; };\n\t\n\ttag.prototype.bindData = function (target,path,args){\n\t\tDataProxy.bind(this,target,path,args);\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.checked = function (){\n\t\treturn this._dom.checked;\n\t};\n\t\n\ttag.prototype.setChecked = function (value){\n\t\tif (!!value != this._dom.checked) {\n\t\t\tthis._dom.checked = !!value;\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.setValue = function (value,source){\n\t\tif (this._localValue == undefined || source == undefined) {\n\t\t\tthis.dom().value = this._value = value;\n\t\t\tthis._localValue = undefined;\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.setType = function (value){\n\t\tthis.dom().type = this._type = value;\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.value = function (){\n\t\tlet val = this._dom.value;\n\t\treturn (this._number && val) ? parseFloat(val) : val;\n\t};\n\t\n\ttag.prototype.oninput = function (e){\n\t\tlet val = this._dom.value;\n\t\tthis._localValue = val;\n\t\tif (this._data && !(this.lazy()) && this.type() != 'radio' && this.type() != 'checkbox') {\n\t\t\tthis._data.setFormValue(this.value(),this);\n\t\t};\n\t\treturn;\n\t};\n\t\n\ttag.prototype.onchange = function (e){\n\t\tthis._modelValue = this._localValue = undefined;\n\t\tif (!(this.data())) { return };\n\t\t\n\t\tif (this.type() == 'radio' || this.type() == 'checkbox') {\n\t\t\tlet checked = this.checked();\n\t\t\tlet mval = this._data.getFormValue(this);\n\t\t\tlet dval = (this._value != undefined) ? this._value : this.value();\n\t\t\t\n\t\t\tif (this.type() == 'radio') {\n\t\t\t\treturn this._data.setFormValue(dval,this);\n\t\t\t} else if (this.dom().value == 'on' || this.dom().value == undefined) {\n\t\t\t\treturn this._data.setFormValue(!!checked,this);\n\t\t\t} else if (isArray(mval)) {\n\t\t\t\tlet idx = mval.indexOf(dval);\n\t\t\t\tif (checked && idx == -1) {\n\t\t\t\t\treturn mval.push(dval);\n\t\t\t\t} else if (!checked && idx >= 0) {\n\t\t\t\t\treturn mval.splice(idx,1);\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn this._data.setFormValue(dval,this);\n\t\t\t};\n\t\t} else {\n\t\t\treturn this._data.setFormValue(this.value());\n\t\t};\n\t};\n\t\n\ttag.prototype.onblur = function (e){\n\t\treturn this._localValue = undefined;\n\t};\n\t\n\t// overriding end directly for performance\n\ttag.prototype.end = function (){\n\t\tif (this._localValue !== undefined || !this._data) {\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\tlet mval = this._data.getFormValue(this);\n\t\tif (mval === this._modelValue) { return this };\n\t\tif (!isArray(mval)) { this._modelValue = mval };\n\t\t\n\t\tif (this.type() == 'radio' || this.type() == 'checkbox') {\n\t\t\tlet dval = this._value;\n\t\t\tlet checked = isArray(mval) ? (\n\t\t\t\tmval.indexOf(dval) >= 0\n\t\t\t) : ((this.dom().value == 'on' || this.dom().value == undefined) ? (\n\t\t\t\t!!mval\n\t\t\t) : (\n\t\t\t\tmval == this._value\n\t\t\t));\n\t\t\t\n\t\t\tthis.setChecked(checked);\n\t\t} else {\n\t\t\tthis._dom.value = mval;\n\t\t};\n\t\treturn this;\n\t};\n});\n\nImba.createTagScope(/*SCOPEID*/).extendTag('textarea', function(tag){\n\ttag.prototype.lazy = function(v){ return this._lazy; }\n\ttag.prototype.setLazy = function(v){ this._lazy = v; return this; };\n\t\n\ttag.prototype.bindData = function (target,path,args){\n\t\tDataProxy.bind(this,target,path,args);\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.setValue = function (value,source){\n\t\tif (this._localValue == undefined || source == undefined) {\n\t\t\tthis.dom().value = value;\n\t\t\tthis._localValue = undefined;\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.oninput = function (e){\n\t\tlet val = this._dom.value;\n\t\tthis._localValue = val;\n\t\tif (this._data && !(this.lazy())) { return this._data.setFormValue(this.value(),this) };\n\t};\n\t\n\ttag.prototype.onchange = function (e){\n\t\tthis._localValue = undefined;\n\t\tif (this._data) { return this._data.setFormValue(this.value(),this) };\n\t};\n\t\n\ttag.prototype.onblur = function (e){\n\t\treturn this._localValue = undefined;\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tif (this._localValue != undefined || !this._data) { return };\n\t\tif (this._data) {\n\t\t\tlet dval = this._data.getFormValue(this);\n\t\t\tthis._dom.value = (dval != undefined) ? dval : '';\n\t\t};\n\t\treturn this;\n\t};\n});\n\nImba.createTagScope(/*SCOPEID*/).extendTag('option', function(tag){\n\ttag.prototype.setValue = function (value){\n\t\tif (value != this._value) {\n\t\t\tthis.dom().value = this._value = value;\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.value = function (){\n\t\treturn this._value || this.dom().value;\n\t};\n});\n\nImba.createTagScope(/*SCOPEID*/).extendTag('select', function(tag){\n\ttag.prototype.bindData = function (target,path,args){\n\t\tDataProxy.bind(this,target,path,args);\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.setValue = function (value,syncing){\n\t\tlet prev = this._value;\n\t\tthis._value = value;\n\t\tif (!syncing) { this.syncValue(value) };\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.syncValue = function (value){\n\t\tlet prev = this._syncValue;\n\t\t// check if value has changed\n\t\tif (this.multiple() && (value instanceof Array)) {\n\t\t\tif ((prev instanceof Array) && isSimilarArray(prev,value)) {\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\t// create a copy for syncValue\n\t\t\tvalue = value.slice();\n\t\t};\n\t\t\n\t\tthis._syncValue = value;\n\t\t// support array for multiple?\n\t\tif (typeof value == 'object') {\n\t\t\tlet mult = this.multiple() && (value instanceof Array);\n\t\t\t\n\t\t\tfor (let i = 0, items = iter$(this.dom().options), len = items.length, opt; i < len; i++) {\n\t\t\t\topt = items[i];\n\t\t\t\tlet oval = (opt._tag ? opt._tag.value() : opt.value);\n\t\t\t\tif (mult) {\n\t\t\t\t\topt.selected = value.indexOf(oval) >= 0;\n\t\t\t\t} else if (value == oval) {\n\t\t\t\t\tthis.dom().selectedIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t};\n\t\t\t};\n\t\t} else {\n\t\t\tthis.dom().value = value;\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.value = function (){\n\t\tif (this.multiple()) {\n\t\t\tlet res = [];\n\t\t\tfor (let i = 0, items = iter$(this.dom().selectedOptions), len = items.length, option; i < len; i++) {\n\t\t\t\toption = items[i];\n\t\t\t\tres.push(option._tag ? option._tag.value() : option.value);\n\t\t\t};\n\t\t\treturn res;\n\t\t} else {\n\t\t\tlet opt = this.dom().selectedOptions[0];\n\t\t\treturn opt ? ((opt._tag ? opt._tag.value() : opt.value)) : null;\n\t\t};\n\t};\n\t\n\ttag.prototype.onchange = function (e){\n\t\tif (this._data) { return this._data.setFormValue(this.value(),this) };\n\t};\n\t\n\ttag.prototype.end = function (){\n\t\tif (this._data) {\n\t\t\tthis.setValue(this._data.getFormValue(this),1);\n\t\t};\n\t\t\n\t\tif (this._value != this._syncValue) {\n\t\t\tthis.syncValue(this._value);\n\t\t};\n\t\treturn this;\n\t};\n});\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require(\"../imba\");\n\n// Imba.Touch\n// Began\tA finger touched the screen.\n// Moved\tA finger moved on the screen.\n// Stationary\tA finger is touching the screen but hasn't moved.\n// Ended\tA finger was lifted from the screen. This is the final phase of a touch.\n// Canceled The system cancelled tracking for the touch.\n\n/*\nConsolidates mouse and touch events. Touch objects persist across a touch,\nfrom touchstart until end/cancel. When a touch starts, it will traverse\ndown from the innermost target, until it finds a node that responds to\nontouchstart. Unless the touch is explicitly redirected, the touch will\ncall ontouchmove and ontouchend / ontouchcancel on the responder when appropriate.\n\n\ttag draggable\n\t\t# called when a touch starts\n\t\tdef ontouchstart touch\n\t\t\tflag 'dragging'\n\t\t\tself\n\t\t\n\t\t# called when touch moves - same touch object\n\t\tdef ontouchmove touch\n\t\t\t# move the node with touch\n\t\t\tcss top: touch.dy, left: touch.dx\n\t\t\n\t\t# called when touch ends\n\t\tdef ontouchend touch\n\t\t\tunflag 'dragging'\n\n@iname touch\n*/\n\nImba.Touch = function Touch(event,pointer){\n\t// @native = false\n\tthis.setEvent(event);\n\tthis.setData({});\n\tthis.setActive(true);\n\tthis._button = event && event.button || 0;\n\tthis._suppress = false; // deprecated\n\tthis._captured = false;\n\tthis.setBubble(false);\n\tpointer = pointer;\n\tthis.setUpdates(0);\n\treturn this;\n};\n\nImba.Touch.LastTimestamp = 0;\nImba.Touch.TapTimeout = 50;\n\n// var lastNativeTouchTimeout = 50\n\nvar touches = [];\nvar count = 0;\nvar identifiers = {};\n\nImba.Touch.count = function (){\n\treturn count;\n};\n\nImba.Touch.lookup = function (item){\n\treturn item && (item.__touch__ || identifiers[item.identifier]);\n};\n\nImba.Touch.release = function (item,touch){\n\tvar v_, $1;\n\t(((v_ = identifiers[item.identifier]),delete identifiers[item.identifier], v_));\n\t((($1 = item.__touch__),delete item.__touch__, $1));\n\treturn;\n};\n\nImba.Touch.ontouchstart = function (e){\n\tfor (let i = 0, items = iter$(e.changedTouches), len = items.length, t; i < len; i++) {\n\t\tt = items[i];\n\t\tif (this.lookup(t)) { continue; };\n\t\tvar touch = identifiers[t.identifier] = new this(e); // (e)\n\t\tt.__touch__ = touch;\n\t\ttouches.push(touch);\n\t\tcount++;\n\t\ttouch.touchstart(e,t);\n\t};\n\treturn this;\n};\n\nImba.Touch.ontouchmove = function (e){\n\tvar touch;\n\tfor (let i = 0, items = iter$(e.changedTouches), len = items.length, t; i < len; i++) {\n\t\tt = items[i];\n\t\tif (touch = this.lookup(t)) {\n\t\t\ttouch.touchmove(e,t);\n\t\t};\n\t};\n\t\n\treturn this;\n};\n\nImba.Touch.ontouchend = function (e){\n\tvar touch;\n\tfor (let i = 0, items = iter$(e.changedTouches), len = items.length, t; i < len; i++) {\n\t\tt = items[i];\n\t\tif (touch = this.lookup(t)) {\n\t\t\ttouch.touchend(e,t);\n\t\t\tthis.release(t,touch);\n\t\t\tcount--;\n\t\t};\n\t};\n\t\n\t// e.preventDefault\n\t// not always supported!\n\t// touches = touches.filter(||)\n\treturn this;\n};\n\nImba.Touch.ontouchcancel = function (e){\n\tvar touch;\n\tfor (let i = 0, items = iter$(e.changedTouches), len = items.length, t; i < len; i++) {\n\t\tt = items[i];\n\t\tif (touch = this.lookup(t)) {\n\t\t\ttouch.touchcancel(e,t);\n\t\t\tthis.release(t,touch);\n\t\t\tcount--;\n\t\t};\n\t};\n\treturn this;\n};\n\nImba.Touch.onmousedown = function (e){\n\treturn this;\n};\n\nImba.Touch.onmousemove = function (e){\n\treturn this;\n};\n\nImba.Touch.onmouseup = function (e){\n\treturn this;\n};\n\n\nImba.Touch.prototype.phase = function(v){ return this._phase; }\nImba.Touch.prototype.setPhase = function(v){ this._phase = v; return this; };\nImba.Touch.prototype.active = function(v){ return this._active; }\nImba.Touch.prototype.setActive = function(v){ this._active = v; return this; };\nImba.Touch.prototype.event = function(v){ return this._event; }\nImba.Touch.prototype.setEvent = function(v){ this._event = v; return this; };\nImba.Touch.prototype.pointer = function(v){ return this._pointer; }\nImba.Touch.prototype.setPointer = function(v){ this._pointer = v; return this; };\nImba.Touch.prototype.target = function(v){ return this._target; }\nImba.Touch.prototype.setTarget = function(v){ this._target = v; return this; };\nImba.Touch.prototype.handler = function(v){ return this._handler; }\nImba.Touch.prototype.setHandler = function(v){ this._handler = v; return this; };\nImba.Touch.prototype.updates = function(v){ return this._updates; }\nImba.Touch.prototype.setUpdates = function(v){ this._updates = v; return this; };\nImba.Touch.prototype.suppress = function(v){ return this._suppress; }\nImba.Touch.prototype.setSuppress = function(v){ this._suppress = v; return this; };\nImba.Touch.prototype.data = function(v){ return this._data; }\nImba.Touch.prototype.setData = function(v){ this._data = v; return this; };\nImba.Touch.prototype.__bubble = {chainable: true,name: 'bubble'};\nImba.Touch.prototype.bubble = function(v){ return v !== undefined ? (this.setBubble(v),this) : this._bubble; }\nImba.Touch.prototype.setBubble = function(v){ this._bubble = v; return this; };\nImba.Touch.prototype.timestamp = function(v){ return this._timestamp; }\nImba.Touch.prototype.setTimestamp = function(v){ this._timestamp = v; return this; };\n\nImba.Touch.prototype.gestures = function(v){ return this._gestures; }\nImba.Touch.prototype.setGestures = function(v){ this._gestures = v; return this; };\n\n/*\n\t@internal\n\t@constructor\n\t*/\n\nImba.Touch.prototype.capture = function (){\n\tthis._captured = true;\n\tthis._event && this._event.stopPropagation();\n\tif (!this._selblocker) {\n\t\tthis._selblocker = function(e) { return e.preventDefault(); };\n\t\tImba.document().addEventListener('selectstart',this._selblocker,true);\n\t};\n\treturn this;\n};\n\nImba.Touch.prototype.isCaptured = function (){\n\treturn !!this._captured;\n};\n\n/*\n\tExtend the touch with a plugin / gesture. \n\tAll events (touchstart,move etc) for the touch\n\twill be triggered on the plugins in the order they\n\tare added.\n\t*/\n\nImba.Touch.prototype.extend = function (plugin){\n\t// console.log \"added gesture!!!\"\n\tthis._gestures || (this._gestures = []);\n\tthis._gestures.push(plugin);\n\treturn this;\n};\n\n/*\n\tRedirect touch to specified target. ontouchstart will always be\n\tcalled on the new target.\n\t@return {Number}\n\t*/\n\nImba.Touch.prototype.redirect = function (target){\n\tthis._redirect = target;\n\treturn this;\n};\n\n/*\n\tSuppress the default behaviour. Will call preventDefault for\n\tall native events that are part of the touch.\n\t*/\n\nImba.Touch.prototype.suppress = function (){\n\t// collision with the suppress property\n\tthis._active = false;\n\t\n\treturn this;\n};\n\nImba.Touch.prototype.setSuppress = function (value){\n\tconsole.warn('Imba.Touch#suppress= is deprecated');\n\tthis._supress = value;\n\tthis;\n\treturn this;\n};\n\nImba.Touch.prototype.touchstart = function (e,t){\n\tthis._event = e;\n\tthis._touch = t;\n\tthis._button = 0;\n\tthis._x = t.clientX;\n\tthis._y = t.clientY;\n\tthis.began();\n\tthis.update();\n\tif (e && this.isCaptured()) { e.preventDefault() };\n\treturn this;\n};\n\nImba.Touch.prototype.touchmove = function (e,t){\n\tthis._event = e;\n\tthis._x = t.clientX;\n\tthis._y = t.clientY;\n\tthis.update();\n\tif (e && this.isCaptured()) { e.preventDefault() };\n\treturn this;\n};\n\nImba.Touch.prototype.touchend = function (e,t){\n\tthis._event = e;\n\tthis._x = t.clientX;\n\tthis._y = t.clientY;\n\tthis.ended();\n\t\n\tImba.Touch.LastTimestamp = e.timeStamp;\n\t\n\tif (this._maxdr < 20) {\n\t\tvar tap = new Imba.Event(e);\n\t\ttap.setType('tap');\n\t\ttap.process();\n\t};\n\t\n\tif (e && this.isCaptured()) {\n\t\te.preventDefault();\n\t};\n\t\n\treturn this;\n};\n\nImba.Touch.prototype.touchcancel = function (e,t){\n\treturn this.cancel();\n};\n\nImba.Touch.prototype.mousedown = function (e,t){\n\tvar self = this;\n\tself._event = e;\n\tself._button = e.button;\n\tself._x = t.clientX;\n\tself._y = t.clientY;\n\tself.began();\n\tself.update();\n\tself._mousemove = function(e) { return self.mousemove(e,e); };\n\tImba.document().addEventListener('mousemove',self._mousemove,true);\n\treturn self;\n};\n\nImba.Touch.prototype.mousemove = function (e,t){\n\tthis._x = t.clientX;\n\tthis._y = t.clientY;\n\tthis._event = e;\n\tif (this.isCaptured()) { e.preventDefault() };\n\tthis.update();\n\tthis.move();\n\treturn this;\n};\n\nImba.Touch.prototype.mouseup = function (e,t){\n\tthis._x = t.clientX;\n\tthis._y = t.clientY;\n\tthis.ended();\n\treturn this;\n};\n\nImba.Touch.prototype.idle = function (){\n\treturn this.update();\n};\n\nImba.Touch.prototype.began = function (){\n\tthis._timestamp = Date.now();\n\tthis._maxdr = this._dr = 0;\n\tthis._x0 = this._x;\n\tthis._y0 = this._y;\n\t\n\tvar dom = this.event().target;\n\tvar node = null;\n\t\n\tthis._sourceTarget = dom && Imba.getTagForDom(dom);\n\t\n\twhile (dom){\n\t\tnode = Imba.getTagForDom(dom);\n\t\tif (node && node.ontouchstart) {\n\t\t\tthis._bubble = false;\n\t\t\tthis.setTarget(node);\n\t\t\tthis.target().ontouchstart(this);\n\t\t\tif (!this._bubble) { break; };\n\t\t};\n\t\tdom = dom.parentNode;\n\t};\n\t\n\tthis._updates++;\n\treturn this;\n};\n\nImba.Touch.prototype.update = function (){\n\tvar target_;\n\tif (!this._active || this._cancelled) { return this };\n\t\n\tvar dr = Math.sqrt(this.dx() * this.dx() + this.dy() * this.dy());\n\tif (dr > this._dr) { this._maxdr = dr };\n\tthis._dr = dr;\n\t\n\t// catching a touch-redirect?!?\n\tif (this._redirect) {\n\t\tif (this._target && this._target.ontouchcancel) {\n\t\t\tthis._target.ontouchcancel(this);\n\t\t};\n\t\tthis.setTarget(this._redirect);\n\t\tthis._redirect = null;\n\t\tif (this.target().ontouchstart) { this.target().ontouchstart(this) };\n\t\tif (this._redirect) { return this.update() }; // possibly redirecting again\n\t};\n\t\n\t\n\tthis._updates++;\n\tif (this._gestures) {\n\t\tfor (let i = 0, items = iter$(this._gestures), len = items.length; i < len; i++) {\n\t\t\titems[i].ontouchupdate(this);\n\t\t};\n\t};\n\t\n\t(target_ = this.target()) && target_.ontouchupdate && target_.ontouchupdate(this);\n\tif (this._redirect) this.update();\n\treturn this;\n};\n\nImba.Touch.prototype.move = function (){\n\tvar target_;\n\tif (!this._active || this._cancelled) { return this };\n\t\n\tif (this._gestures) {\n\t\tfor (let i = 0, items = iter$(this._gestures), len = items.length, g; i < len; i++) {\n\t\t\tg = items[i];\n\t\t\tif (g.ontouchmove) { g.ontouchmove(this,this._event) };\n\t\t};\n\t};\n\t\n\t(target_ = this.target()) && target_.ontouchmove && target_.ontouchmove(this,this._event);\n\treturn this;\n};\n\nImba.Touch.prototype.ended = function (){\n\tvar target_;\n\tif (!this._active || this._cancelled) { return this };\n\t\n\tthis._updates++;\n\t\n\tif (this._gestures) {\n\t\tfor (let i = 0, items = iter$(this._gestures), len = items.length; i < len; i++) {\n\t\t\titems[i].ontouchend(this);\n\t\t};\n\t};\n\t\n\t(target_ = this.target()) && target_.ontouchend && target_.ontouchend(this);\n\tthis.cleanup_();\n\treturn this;\n};\n\nImba.Touch.prototype.cancel = function (){\n\tif (!this._cancelled) {\n\t\tthis._cancelled = true;\n\t\tthis.cancelled();\n\t\tthis.cleanup_();\n\t};\n\treturn this;\n};\n\nImba.Touch.prototype.cancelled = function (){\n\tvar target_;\n\tif (!this._active) { return this };\n\t\n\tthis._cancelled = true;\n\tthis._updates++;\n\t\n\tif (this._gestures) {\n\t\tfor (let i = 0, items = iter$(this._gestures), len = items.length, g; i < len; i++) {\n\t\t\tg = items[i];\n\t\t\tif (g.ontouchcancel) { g.ontouchcancel(this) };\n\t\t};\n\t};\n\t\n\t(target_ = this.target()) && target_.ontouchcancel && target_.ontouchcancel(this);\n\treturn this;\n};\n\nImba.Touch.prototype.cleanup_ = function (){\n\tif (this._mousemove) {\n\t\tImba.document().removeEventListener('mousemove',this._mousemove,true);\n\t\tthis._mousemove = null;\n\t};\n\t\n\tif (this._selblocker) {\n\t\tImba.document().removeEventListener('selectstart',this._selblocker,true);\n\t\tthis._selblocker = null;\n\t};\n\t\n\treturn this;\n};\n\n/*\n\tThe absolute distance the touch has moved from starting position \n\t@return {Number}\n\t*/\n\nImba.Touch.prototype.dr = function (){\n\treturn this._dr;\n};\n\n/*\n\tThe distance the touch has moved horizontally\n\t@return {Number}\n\t*/\n\nImba.Touch.prototype.dx = function (){\n\treturn this._x - this._x0;\n};\n\n/*\n\tThe distance the touch has moved vertically\n\t@return {Number}\n\t*/\n\nImba.Touch.prototype.dy = function (){\n\treturn this._y - this._y0;\n};\n\n/*\n\tInitial horizontal position of touch\n\t@return {Number}\n\t*/\n\nImba.Touch.prototype.x0 = function (){\n\treturn this._x0;\n};\n\n/*\n\tInitial vertical position of touch\n\t@return {Number}\n\t*/\n\nImba.Touch.prototype.y0 = function (){\n\treturn this._y0;\n};\n\n/*\n\tHorizontal position of touch\n\t@return {Number}\n\t*/\n\nImba.Touch.prototype.x = function (){\n\treturn this._x;\n};\n\n/*\n\tVertical position of touch\n\t@return {Number}\n\t*/\n\nImba.Touch.prototype.y = function (){\n\treturn this._y;\n};\n\n/*\n\tHorizontal position of touch relative to target\n\t@return {Number}\n\t*/\n\nImba.Touch.prototype.tx = function (){\n\tthis._targetBox || (this._targetBox = this._target.dom().getBoundingClientRect());\n\treturn this._x - this._targetBox.left;\n};\n\n/*\n\tVertical position of touch relative to target\n\t@return {Number}\n\t*/\n\nImba.Touch.prototype.ty = function (){\n\tthis._targetBox || (this._targetBox = this._target.dom().getBoundingClientRect());\n\treturn this._y - this._targetBox.top;\n};\n\n/*\n\tButton pressed in this touch. Native touches defaults to left-click (0)\n\t@return {Number}\n\t*/\n\nImba.Touch.prototype.button = function (){\n\treturn this._button;\n}; // @pointer ? @pointer.button : 0\n\nImba.Touch.prototype.sourceTarget = function (){\n\treturn this._sourceTarget;\n};\n\nImba.Touch.prototype.elapsed = function (){\n\treturn Date.now() - this._timestamp;\n};\n\n\nImba.TouchGesture = function TouchGesture(){ };\n\nImba.TouchGesture.prototype.__active = {'default': false,name: 'active'};\nImba.TouchGesture.prototype.active = function(v){ return this._active; }\nImba.TouchGesture.prototype.setActive = function(v){ this._active = v; return this; }\nImba.TouchGesture.prototype._active = false;\n\nImba.TouchGesture.prototype.ontouchstart = function (e){\n\treturn this;\n};\n\nImba.TouchGesture.prototype.ontouchupdate = function (e){\n\treturn this;\n};\n\nImba.TouchGesture.prototype.ontouchend = function (e){\n\treturn this;\n};\n\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require(\"../imba\");\n\nvar keyCodes = {\n\tesc: 27,\n\ttab: 9,\n\tenter: 13,\n\tspace: 32,\n\tup: 38,\n\tdown: 40\n};\n\nvar el = Imba.Tag.prototype;\nel.stopModifier = function (e){\n\treturn e.stop() || true;\n};\nel.preventModifier = function (e){\n\treturn e.prevent() || true;\n};\nel.silenceModifier = function (e){\n\treturn e.silence() || true;\n};\nel.bubbleModifier = function (e){\n\treturn e.bubble(true) || true;\n};\nel.ctrlModifier = function (e){\n\treturn e.event().ctrlKey == true;\n};\nel.altModifier = function (e){\n\treturn e.event().altKey == true;\n};\nel.shiftModifier = function (e){\n\treturn e.event().shiftKey == true;\n};\nel.metaModifier = function (e){\n\treturn e.event().metaKey == true;\n};\nel.keyModifier = function (key,e){\n\treturn e.keyCode() ? ((e.keyCode() == key)) : true;\n};\nel.delModifier = function (e){\n\treturn e.keyCode() ? ((e.keyCode() == 8 || e.keyCode() == 46)) : true;\n};\nel.selfModifier = function (e){\n\treturn e.event().target == this._dom;\n};\nel.leftModifier = function (e){\n\treturn (e.button() != undefined) ? ((e.button() === 0)) : el.keyModifier(37,e);\n};\nel.rightModifier = function (e){\n\treturn (e.button() != undefined) ? ((e.button() === 2)) : el.keyModifier(39,e);\n};\nel.middleModifier = function (e){\n\treturn (e.button() != undefined) ? ((e.button() === 1)) : true;\n};\n\nel.getHandler = function (str,event){\n\tif (this[str]) {\n\t\treturn this;\n\t};\n\tif (this._owner_ && this._owner_.getHandler) {\n\t\treturn this._owner_.getHandler(str,event);\n\t};\n};\n\n/*\nImba handles all events in the dom through a single manager,\nlistening at the root of your document. If Imba finds a tag\nthat listens to a certain event, the event will be wrapped \nin an `Imba.Event`, which normalizes some of the quirks and \nbrowser differences.\n\n@iname event\n*/\n\nImba.Event = function Event(e){\n\tthis.setEvent(e);\n\tthis._bubble = true;\n};\n\n/* reference to the native event */\n\nImba.Event.prototype.event = function(v){ return this._event; }\nImba.Event.prototype.setEvent = function(v){ this._event = v; return this; };\n\nImba.Event.prototype.prefix = function(v){ return this._prefix; }\nImba.Event.prototype.setPrefix = function(v){ this._prefix = v; return this; };\n\nImba.Event.prototype.source = function(v){ return this._source; }\nImba.Event.prototype.setSource = function(v){ this._source = v; return this; };\n\nImba.Event.prototype.data = function(v){ return this._data; }\nImba.Event.prototype.setData = function(v){ this._data = v; return this; };\n\nImba.Event.prototype.responder = function(v){ return this._responder; }\nImba.Event.prototype.setResponder = function(v){ this._responder = v; return this; };\n\nImba.Event.wrap = function (e){\n\treturn new this(e);\n};\n\nImba.Event.prototype.setType = function (type){\n\tthis._type = type;\n\tthis;\n\treturn this;\n};\n\n/*\n\t@return {String} The name of the event (case-insensitive)\n\t*/\n\nImba.Event.prototype.type = function (){\n\treturn this._type || this.event().type;\n};\nImba.Event.prototype.native = function (){\n\treturn this._event;\n};\n\nImba.Event.prototype.name = function (){\n\treturn this._name || (this._name = this.type().toLowerCase().replace(/\\:/g,''));\n};\n\n// mimc getset\nImba.Event.prototype.bubble = function (v){\n\tif (v != undefined) {\n\t\tthis.setBubble(v);\n\t\treturn this;\n\t};\n\treturn this._bubble;\n};\n\nImba.Event.prototype.setBubble = function (v){\n\tthis._bubble = v;\n\treturn this;\n};\n\n/*\n\tPrevents further propagation of the current event.\n\t@return {self}\n\t*/\n\nImba.Event.prototype.stop = function (){\n\tthis.setBubble(false);\n\treturn this;\n};\n\nImba.Event.prototype.stopPropagation = function (){\n\treturn this.stop();\n};\nImba.Event.prototype.halt = function (){\n\treturn this.stop();\n};\n\n// migrate from cancel to prevent\nImba.Event.prototype.prevent = function (){\n\tif (this.event().preventDefault) {\n\t\tthis.event().preventDefault();\n\t} else {\n\t\tthis.event().defaultPrevented = true;\n\t};\n\tthis.defaultPrevented = true;\n\treturn this;\n};\n\nImba.Event.prototype.preventDefault = function (){\n\tconsole.warn(\"Event#preventDefault is deprecated - use Event#prevent\");\n\treturn this.prevent();\n};\n\n/*\n\tIndicates whether or not event.cancel has been called.\n\n\t@return {Boolean}\n\t*/\n\nImba.Event.prototype.isPrevented = function (){\n\treturn this.event() && this.event().defaultPrevented;\n};\n\n/*\n\tCancel the event (if cancelable). In the case of native events it\n\twill call `preventDefault` on the wrapped event object.\n\t@return {self}\n\t*/\n\nImba.Event.prototype.cancel = function (){\n\tconsole.warn(\"Event#cancel is deprecated - use Event#prevent\");\n\treturn this.prevent();\n};\n\nImba.Event.prototype.silence = function (){\n\tthis._silenced = true;\n\treturn this;\n};\n\nImba.Event.prototype.isSilenced = function (){\n\treturn !!this._silenced;\n};\n\n/*\n\tA reference to the initial target of the event.\n\t*/\n\nImba.Event.prototype.target = function (){\n\treturn Imba.getTagForDom(this.event()._target || this.event().target);\n};\n\n/*\n\tA reference to the object responding to the event.\n\t*/\n\nImba.Event.prototype.responder = function (){\n\treturn this._responder;\n};\n\n/*\n\tRedirect the event to new target\n\t*/\n\nImba.Event.prototype.redirect = function (node){\n\tthis._redirect = node;\n\treturn this;\n};\n\nImba.Event.prototype.processHandlers = function (node,handlers){\n\tlet i = 1;\n\tlet l = handlers.length;\n\tlet bubble = this._bubble;\n\tlet state = handlers.state || (handlers.state = {});\n\tlet result;\n\t\n\tif (bubble) {\n\t\tthis._bubble = 1;\n\t};\n\t\n\twhile (i < l){\n\t\tlet isMod = false;\n\t\tlet handler = handlers[i++];\n\t\tlet params = null;\n\t\tlet context = node;\n\t\tlet checkSpecial = false;\n\t\t\n\t\tif (handler instanceof Array) {\n\t\t\tparams = handler.slice(1);\n\t\t\tcheckSpecial = true;\n\t\t\thandler = handler[0];\n\t\t};\n\t\t\n\t\tif (typeof handler == 'string') {\n\t\t\tif (keyCodes[handler]) {\n\t\t\t\tparams = [keyCodes[handler]];\n\t\t\t\thandler = 'key';\n\t\t\t};\n\t\t\t\n\t\t\tlet mod = handler + 'Modifier';\n\t\t\t\n\t\t\tif (node[mod]) {\n\t\t\t\tisMod = true;\n\t\t\t\tparams = (params || []).concat([this,state]);\n\t\t\t\thandler = node[mod];\n\t\t\t};\n\t\t};\n\t\t\n\t\t// if it is still a string - call getHandler on\n\t\t// ancestor of node to see if we get a handler for this name\n\t\tif (typeof handler == 'string') {\n\t\t\tlet el = node;\n\t\t\tlet fn = null;\n\t\t\tlet ctx = state.context;\n\t\t\t\n\t\t\tif (ctx) {\n\t\t\t\tif (ctx.getHandler instanceof Function) {\n\t\t\t\t\tctx = ctx.getHandler(handler,this);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (ctx[handler] instanceof Function) {\n\t\t\t\t\thandler = fn = ctx[handler];\n\t\t\t\t\tcontext = ctx;\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\tif (!fn) {\n\t\t\t\tconsole.warn((\"event \" + this.type() + \": could not find '\" + handler + \"' in context\"),ctx);\n\t\t\t};\n\t\t\t\n\t\t\t// while el and (!fn or !(fn isa Function))\n\t\t\t// \tif fn = el.getHandler(handler)\n\t\t\t// \t\tif fn[handler] isa Function\n\t\t\t// \t\t\thandler = fn[handler]\n\t\t\t// \t\t\tcontext = fn\n\t\t\t// \t\telif fn isa Function\n\t\t\t// \t\t\thandler = fn\n\t\t\t// \t\t\tcontext = el\n\t\t\t// \telse\n\t\t\t// \t\tel = el.parent\n\t\t};\n\t\t\n\t\tif (handler instanceof Function) {\n\t\t\t// what if we actually call stop inside function?\n\t\t\t// do we still want to continue the chain?\n\t\t\t\n\t\t\t// loop through special variables from params?\n\t\t\t\n\t\t\tif (checkSpecial) {\n\t\t\t\t// replacing special params\n\t\t\t\tfor (let i = 0, items = iter$(params), len = items.length, param; i < len; i++) {\n\t\t\t\t\tparam = items[i];\n\t\t\t\t\tif (typeof param == 'string' && param[0] == '~' && param[1] == '$') {\n\t\t\t\t\t\tlet name = param.slice(2);\n\t\t\t\t\t\tif (name == 'event') {\n\t\t\t\t\t\t\tparams[i] = this;\n\t\t\t\t\t\t} else if (this[name] instanceof Function) {\n\t\t\t\t\t\t\tparams[i] = this[name]();\n\t\t\t\t\t\t} else if (node[name] instanceof Function) {\n\t\t\t\t\t\t\tparams[i] = node[name]();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.warn((\"Missing special handler $\" + name));\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\tlet res = handler.apply(context,params || [this]);\n\t\t\t\n\t\t\tif (!isMod) {\n\t\t\t\tthis._responder || (this._responder = node);\n\t\t\t};\n\t\t\t\n\t\t\tif (res == false) {\n\t\t\t\t// console.log \"returned false - breaking\"\n\t\t\t\tbreak;\n\t\t\t};\n\t\t\t\n\t\t\tif (res && !this._silenced && (res.then instanceof Function)) {\n\t\t\t\tres.then(Imba.commit);\n\t\t\t};\n\t\t};\n\t};\n\t\n\t// if we havent stopped or dealt with bubble while handling\n\tif (this._bubble === 1) {\n\t\tthis._bubble = bubble;\n\t};\n\t\n\treturn null;\n};\n\nImba.Event.prototype.process = function (){\n\tvar name = this.name();\n\tvar meth = (\"on\" + (this._prefix || '') + name);\n\tvar args = null;\n\tvar domtarget = this.event()._target || this.event().target;\n\tvar domnode = domtarget._responder || domtarget;\n\t// @todo need to stop infinite redirect-rules here\n\tvar result;\n\tvar handlers;\n\t\n\twhile (domnode){\n\t\tthis._redirect = null;\n\t\tlet node = domnode._dom ? domnode : domnode._tag;\n\t\t\n\t\tif (node) {\n\t\t\tif (handlers = node._on_) {\n\t\t\t\tfor (let i = 0, items = iter$(handlers), len = items.length, handler; i < len; i++) {\n\t\t\t\t\thandler = items[i];\n\t\t\t\t\tif (!handler) { continue; };\n\t\t\t\t\tlet hname = handler[0];\n\t\t\t\t\tif (name == handler[0] && this.bubble()) {\n\t\t\t\t\t\tthis.processHandlers(node,handler);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tif (!(this.bubble())) { break; };\n\t\t\t};\n\t\t\t\n\t\t\tif (this.bubble() && (node[meth] instanceof Function)) {\n\t\t\t\tthis._responder || (this._responder = node);\n\t\t\t\tthis._silenced = false;\n\t\t\t\tresult = args ? node[meth].apply(node,args) : node[meth](this,this.data());\n\t\t\t};\n\t\t\t\n\t\t\tif (node.onevent) {\n\t\t\t\tnode.onevent(this);\n\t\t\t};\n\t\t};\n\t\t\n\t\t// add node.nextEventResponder as a separate method here?\n\t\tif (!(this.bubble() && (domnode = (this._redirect || (node ? node.parent() : domnode.parentNode))))) {\n\t\t\tbreak;\n\t\t};\n\t};\n\t\n\tthis.processed();\n\t\n\t// if a handler returns a promise, notify schedulers\n\t// about this after promise has finished processing\n\tif (result && (result.then instanceof Function)) {\n\t\tresult.then(this.processed.bind(this));\n\t};\n\treturn this;\n};\n\n\nImba.Event.prototype.processed = function (){\n\tif (!this._silenced && this._responder) {\n\t\tImba.emit(Imba,'event',[this]);\n\t\tImba.commit(this.event());\n\t};\n\treturn this;\n};\n\n/*\n\tReturn the x/left coordinate of the mouse / pointer for this event\n\t@return {Number} x coordinate of mouse / pointer for event\n\t*/\n\nImba.Event.prototype.x = function (){\n\treturn this.native().x;\n};\n\n/*\n\tReturn the y/top coordinate of the mouse / pointer for this event\n\t@return {Number} y coordinate of mouse / pointer for event\n\t*/\n\nImba.Event.prototype.y = function (){\n\treturn this.native().y;\n};\n\nImba.Event.prototype.button = function (){\n\treturn this.native().button;\n};\nImba.Event.prototype.keyCode = function (){\n\treturn this.native().keyCode;\n};\nImba.Event.prototype.ctrl = function (){\n\treturn this.native().ctrlKey;\n};\nImba.Event.prototype.alt = function (){\n\treturn this.native().altKey;\n};\nImba.Event.prototype.shift = function (){\n\treturn this.native().shiftKey;\n};\nImba.Event.prototype.meta = function (){\n\treturn this.native().metaKey;\n};\nImba.Event.prototype.key = function (){\n\treturn this.native().key;\n};\n\n/*\n\tReturns a Number representing a system and implementation\n\tdependent numeric code identifying the unmodified value of the\n\tpressed key; this is usually the same as keyCode.\n\n\tFor mouse-events, the returned value indicates which button was\n\tpressed on the mouse to trigger the event.\n\n\t@return {Number}\n\t*/\n\nImba.Event.prototype.which = function (){\n\treturn this.event().which;\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar self = {};\n// externs;\n\nvar Imba = require(\"../imba\");\n\nvar removeNested = function(root,node,caret) {\n\t// if node/nodes isa String\n\t// \twe need to use the caret to remove elements\n\t// \tfor now we will simply not support this\n\tif (node instanceof Array) {\n\t\tfor (let i = 0, items = iter$(node), len = items.length; i < len; i++) {\n\t\t\tremoveNested(root,items[i],caret);\n\t\t};\n\t} else if (node && node._slot_) {\n\t\troot.removeChild(node);\n\t} else if (node != null) {\n\t\t// what if this is not null?!?!?\n\t\t// take a chance and remove a text-elementng\n\t\tlet next = caret ? caret.nextSibling : root._dom.firstChild;\n\t\tif ((next instanceof Text) && next.textContent == node) {\n\t\t\troot.removeChild(next);\n\t\t} else {\n\t\t\tthrow 'cannot remove string';\n\t\t};\n\t};\n\t\n\treturn caret;\n};\n\nvar appendNested = function(root,node) {\n\tif (node instanceof Array) {\n\t\tlet i = 0;\n\t\tlet c = node.taglen;\n\t\tlet k = (c != null) ? ((node.domlen = c)) : node.length;\n\t\twhile (i < k){\n\t\t\tappendNested(root,node[i++]);\n\t\t};\n\t} else if (node && node._dom) {\n\t\troot.appendChild(node);\n\t} else if (node != null && node !== false) {\n\t\troot.appendChild(Imba.createTextNode(node));\n\t};\n\t\n\treturn;\n};\n\n\n// insert nodes before a certain node\n// does not need to return any tail, as before\n// will still be correct there\n// before must be an actual domnode\nvar insertNestedBefore = function(root,node,before) {\n\tif (node instanceof Array) {\n\t\tlet i = 0;\n\t\tlet c = node.taglen;\n\t\tlet k = (c != null) ? ((node.domlen = c)) : node.length;\n\t\twhile (i < k){\n\t\t\tinsertNestedBefore(root,node[i++],before);\n\t\t};\n\t} else if (node && node._dom) {\n\t\troot.insertBefore(node,before);\n\t} else if (node != null && node !== false) {\n\t\troot.insertBefore(Imba.createTextNode(node),before);\n\t};\n\t\n\treturn before;\n};\n\n// after must be an actual domnode\nself.insertNestedAfter = function (root,node,after){\n\tvar before = after ? after.nextSibling : root._dom.firstChild;\n\t\n\tif (before) {\n\t\tinsertNestedBefore(root,node,before);\n\t\treturn before.previousSibling;\n\t} else {\n\t\tappendNested(root,node);\n\t\treturn root._dom.lastChild;\n\t};\n};\n\nvar reconcileCollectionChanges = function(root,new$,old,caret) {\n\t\n\tvar newLen = new$.length;\n\tvar lastNew = new$[newLen - 1];\n\t\n\t// This re-order algorithm is based on the following principle:\n\t// \n\t// We build a \"chain\" which shows which items are already sorted.\n\t// If we're going from [1, 2, 3] -> [2, 1, 3], the tree looks like:\n\t//\n\t// \t3 -> 0 (idx)\n\t// \t2 -> -1 (idx)\n\t// \t1 -> -1 (idx)\n\t//\n\t// This tells us that we have two chains of ordered items:\n\t// \n\t// \t(1, 3) and (2)\n\t// \n\t// The optimal re-ordering then becomes to keep the longest chain intact,\n\t// and move all the other items.\n\t\n\tvar newPosition = [];\n\t\n\t// The tree/graph itself\n\tvar prevChain = [];\n\t// The length of the chain\n\tvar lengthChain = [];\n\t\n\t// Keep track of the longest chain\n\tvar maxChainLength = 0;\n\tvar maxChainEnd = 0;\n\t\n\tvar hasTextNodes = false;\n\tvar newPos;\n\t\n\tfor (let idx = 0, items = iter$(old), len = items.length, node; idx < len; idx++) {\n\t\t// special case for Text nodes\n\t\tnode = items[idx];\n\t\tif (node && node.nodeType == 3) {\n\t\t\tnewPos = new$.indexOf(node.textContent);\n\t\t\tif (newPos >= 0) { new$[newPos] = node };\n\t\t\thasTextNodes = true;\n\t\t} else {\n\t\t\tnewPos = new$.indexOf(node);\n\t\t};\n\t\t\n\t\tnewPosition.push(newPos);\n\t\t\n\t\tif (newPos == -1) {\n\t\t\troot.removeChild(node);\n\t\t\tprevChain.push(-1);\n\t\t\tlengthChain.push(-1);\n\t\t\tcontinue;\n\t\t};\n\t\t\n\t\tvar prevIdx = newPosition.length - 2;\n\t\t\n\t\t// Build the chain:\n\t\twhile (prevIdx >= 0){\n\t\t\tif (newPosition[prevIdx] == -1) {\n\t\t\t\tprevIdx--;\n\t\t\t} else if (newPos > newPosition[prevIdx]) {\n\t\t\t\t// Yay, we're bigger than the previous!\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\t// Nope, let's walk back the chain\n\t\t\t\tprevIdx = prevChain[prevIdx];\n\t\t\t};\n\t\t};\n\t\t\n\t\tprevChain.push(prevIdx);\n\t\t\n\t\tvar currLength = (prevIdx == -1) ? 0 : (lengthChain[prevIdx] + 1);\n\t\t\n\t\tif (currLength > maxChainLength) {\n\t\t\tmaxChainLength = currLength;\n\t\t\tmaxChainEnd = idx;\n\t\t};\n\t\t\n\t\tlengthChain.push(currLength);\n\t};\n\t\n\tvar stickyNodes = [];\n\t\n\t// Now we can walk the longest chain backwards and mark them as \"sticky\",\n\t// which implies that they should not be moved\n\tvar cursor = newPosition.length - 1;\n\twhile (cursor >= 0){\n\t\tif (cursor == maxChainEnd && newPosition[cursor] != -1) {\n\t\t\tstickyNodes[newPosition[cursor]] = true;\n\t\t\tmaxChainEnd = prevChain[maxChainEnd];\n\t\t};\n\t\t\n\t\tcursor -= 1;\n\t};\n\t\n\t// possible to do this in reversed order instead?\n\tfor (let idx = 0, items = iter$(new$), len = items.length, node; idx < len; idx++) {\n\t\tnode = items[idx];\n\t\tif (!stickyNodes[idx]) {\n\t\t\t// create textnode for string, and update the array\n\t\t\tif (!(node && node._dom)) {\n\t\t\t\tnode = new$[idx] = Imba.createTextNode(node);\n\t\t\t};\n\t\t\t\n\t\t\tvar after = new$[idx - 1];\n\t\t\tself.insertNestedAfter(root,node,(after && after._slot_ || after || caret));\n\t\t};\n\t\t\n\t\tcaret = node._slot_ || (caret && caret.nextSibling || root._dom.firstChild);\n\t};\n\t\n\t// should trust that the last item in new list is the caret\n\treturn lastNew && lastNew._slot_ || caret;\n};\n\n\n// expects a flat non-sparse array of nodes in both new and old, always\nvar reconcileCollection = function(root,new$,old,caret) {\n\tvar k = new$.length;\n\tvar i = k;\n\tvar last = new$[k - 1];\n\t\n\t\n\tif (k == old.length && new$[0] === old[0]) {\n\t\t// running through to compare\n\t\twhile (i--){\n\t\t\tif (new$[i] !== old[i]) { break; };\n\t\t};\n\t};\n\t\n\tif (i == -1) {\n\t\treturn last && last._slot_ || last || caret;\n\t} else {\n\t\treturn reconcileCollectionChanges(root,new$,old,caret);\n\t};\n};\n\n// TYPE 5 - we know that we are dealing with a single array of\n// keyed tags - and root has no other children\nvar reconcileLoop = function(root,new$,old,caret) {\n\tvar nl = new$.length;\n\tvar ol = old.length;\n\tvar cl = new$.cache.i$; // cache-length\n\tvar i = 0,d = nl - ol;\n\t\n\t// TODO support caret\n\t\n\t// find the first index that is different\n\twhile (i < ol && i < nl && new$[i] === old[i]){\n\t\ti++;\n\t};\n\t\n\t// conditionally prune cache\n\tif (cl > 1000 && (cl - nl) > 500) {\n\t\tnew$.cache.$prune(new$);\n\t};\n\t\n\tif (d > 0 && i == ol) {\n\t\t// added at end\n\t\twhile (i < nl){\n\t\t\troot.appendChild(new$[i++]);\n\t\t};\n\t\treturn;\n\t} else if (d > 0) {\n\t\tlet i1 = nl;\n\t\twhile (i1 > i && new$[i1 - 1] === old[i1 - 1 - d]){\n\t\t\ti1--;\n\t\t};\n\t\t\n\t\tif (d == (i1 - i)) {\n\t\t\tlet before = old[i]._slot_;\n\t\t\twhile (i < i1){\n\t\t\t\troot.insertBefore(new$[i++],before);\n\t\t\t};\n\t\t\treturn;\n\t\t};\n\t} else if (d < 0 && i == nl) {\n\t\t// removed at end\n\t\twhile (i < ol){\n\t\t\troot.removeChild(old[i++]);\n\t\t};\n\t\treturn;\n\t} else if (d < 0) {\n\t\tlet i1 = ol;\n\t\twhile (i1 > i && new$[i1 - 1 + d] === old[i1 - 1]){\n\t\t\ti1--;\n\t\t};\n\t\t\n\t\tif (d == (i - i1)) {\n\t\t\twhile (i < i1){\n\t\t\t\troot.removeChild(old[i++]);\n\t\t\t};\n\t\t\treturn;\n\t\t};\n\t} else if (i == nl) {\n\t\treturn;\n\t};\n\t\n\treturn reconcileCollectionChanges(root,new$,old,caret);\n};\n\n// expects a flat non-sparse array of nodes in both new and old, always\nvar reconcileIndexedArray = function(root,array,old,caret) {\n\tvar newLen = array.taglen;\n\tvar prevLen = array.domlen || 0;\n\tvar last = newLen ? array[newLen - 1] : null;\n\t// console.log \"reconcile optimized array(!)\",caret,newLen,prevLen,array\n\t\n\tif (prevLen > newLen) {\n\t\twhile (prevLen > newLen){\n\t\t\tvar item = array[--prevLen];\n\t\t\troot.removeChild(item._slot_);\n\t\t};\n\t} else if (newLen > prevLen) {\n\t\t// find the item to insert before\n\t\tlet prevLast = prevLen ? array[prevLen - 1]._slot_ : caret;\n\t\tlet before = prevLast ? prevLast.nextSibling : root._dom.firstChild;\n\t\t\n\t\twhile (prevLen < newLen){\n\t\t\tlet node = array[prevLen++];\n\t\t\tbefore ? root.insertBefore(node._slot_,before) : root.appendChild(node._slot_);\n\t\t};\n\t};\n\t\n\tarray.domlen = newLen;\n\treturn last ? last._slot_ : caret;\n};\n\n\n// the general reconciler that respects conditions etc\n// caret is the current node we want to insert things after\nvar reconcileNested = function(root,new$,old,caret) {\n\t\n\t// var skipnew = new == null or new === false or new === true\n\tvar newIsNull = new$ == null || new$ === false;\n\tvar oldIsNull = old == null || old === false;\n\t\n\t\n\tif (new$ === old) {\n\t\t// remember that the caret must be an actual dom element\n\t\t// we should instead move the actual caret? - trust\n\t\tif (newIsNull) {\n\t\t\treturn caret;\n\t\t} else if (new$._slot_) {\n\t\t\treturn new$._slot_;\n\t\t} else if ((new$ instanceof Array) && new$.taglen != null) {\n\t\t\treturn reconcileIndexedArray(root,new$,old,caret);\n\t\t} else {\n\t\t\treturn caret ? caret.nextSibling : root._dom.firstChild;\n\t\t};\n\t} else if (new$ instanceof Array) {\n\t\tif (old instanceof Array) {\n\t\t\t// look for slot instead?\n\t\t\tlet typ = new$.static;\n\t\t\tif (typ || old.static) {\n\t\t\t\t// if the static is not nested - we could get a hint from compiler\n\t\t\t\t// and just skip it\n\t\t\t\tif (typ == old.static) { // should also include a reference?\n\t\t\t\t\tfor (let i = 0, items = iter$(new$), len = items.length; i < len; i++) {\n\t\t\t\t\t\t// this is where we could do the triple equal directly\n\t\t\t\t\t\tcaret = reconcileNested(root,items[i],old[i],caret);\n\t\t\t\t\t};\n\t\t\t\t\treturn caret;\n\t\t\t\t} else {\n\t\t\t\t\tremoveNested(root,old,caret);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// if they are not the same we continue through to the default\n\t\t\t} else {\n\t\t\t\t// Could use optimized loop if we know that it only consists of nodes\n\t\t\t\treturn reconcileCollection(root,new$,old,caret);\n\t\t\t};\n\t\t} else if (!oldIsNull) {\n\t\t\tif (old._slot_) {\n\t\t\t\troot.removeChild(old);\n\t\t\t} else {\n\t\t\t\t// old was a string-like object?\n\t\t\t\troot.removeChild(caret ? caret.nextSibling : root._dom.firstChild);\n\t\t\t};\n\t\t};\n\t\t\n\t\treturn self.insertNestedAfter(root,new$,caret);\n\t\t// remove old\n\t} else if (!newIsNull && new$._slot_) {\n\t\tif (!oldIsNull) { removeNested(root,old,caret) };\n\t\treturn self.insertNestedAfter(root,new$,caret);\n\t} else if (newIsNull) {\n\t\tif (!oldIsNull) { removeNested(root,old,caret) };\n\t\treturn caret;\n\t} else {\n\t\t// if old did not exist we need to add a new directly\n\t\tlet nextNode;\n\t\t// if old was array or imbatag we need to remove it and then add\n\t\tif (old instanceof Array) {\n\t\t\tremoveNested(root,old,caret);\n\t\t} else if (old && old._slot_) {\n\t\t\troot.removeChild(old);\n\t\t} else if (!oldIsNull) {\n\t\t\t// ...\n\t\t\tnextNode = caret ? caret.nextSibling : root._dom.firstChild;\n\t\t\tif ((nextNode instanceof Text) && nextNode.textContent != new$) {\n\t\t\t\tnextNode.textContent = new$;\n\t\t\t\treturn nextNode;\n\t\t\t};\n\t\t};\n\t\t\n\t\t// now add the textnode\n\t\treturn self.insertNestedAfter(root,new$,caret);\n\t};\n};\n\n\nImba.createTagScope(/*SCOPEID*/).extendTag('element', function(tag){\n\t\n\t// 1 - static shape - unknown content\n\t// 2 - static shape and static children\n\t// 3 - single item\n\t// 4 - optimized array - only length will change\n\t// 5 - optimized collection\n\t// 6 - text only\n\t\n\ttag.prototype.setChildren = function (new$,typ){\n\t\t// if typeof new == 'string'\n\t\t// \treturn self.text = new\n\t\tvar old = this._tree_;\n\t\t\n\t\tif (new$ === old && (!(new$) || new$.taglen == undefined)) {\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\tif (!old && typ != 3) {\n\t\t\tthis.removeAllChildren();\n\t\t\tappendNested(this,new$);\n\t\t} else if (typ == 1) {\n\t\t\tlet caret = null;\n\t\t\tfor (let i = 0, items = iter$(new$), len = items.length; i < len; i++) {\n\t\t\t\tcaret = reconcileNested(this,items[i],old[i],caret);\n\t\t\t};\n\t\t} else if (typ == 2) {\n\t\t\treturn this;\n\t\t} else if (typ == 3) {\n\t\t\tlet ntyp = typeof new$;\n\t\t\t\n\t\t\tif (ntyp != 'object') {\n\t\t\t\treturn this.setText(new$);\n\t\t\t};\n\t\t\t\n\t\t\tif (new$ && new$._dom) {\n\t\t\t\tthis.removeAllChildren();\n\t\t\t\tthis.appendChild(new$);\n\t\t\t} else if (new$ instanceof Array) {\n\t\t\t\tif (new$._type == 5 && old && old._type == 5) {\n\t\t\t\t\treconcileLoop(this,new$,old,null);\n\t\t\t\t} else if (old instanceof Array) {\n\t\t\t\t\treconcileNested(this,new$,old,null);\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeAllChildren();\n\t\t\t\t\tappendNested(this,new$);\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn this.setText(new$);\n\t\t\t};\n\t\t} else if (typ == 4) {\n\t\t\treconcileIndexedArray(this,new$,old,null);\n\t\t} else if (typ == 5) {\n\t\t\treconcileLoop(this,new$,old,null);\n\t\t} else if ((new$ instanceof Array) && (old instanceof Array)) {\n\t\t\treconcileNested(this,new$,old,null);\n\t\t} else {\n\t\t\t// what if text?\n\t\t\tthis.removeAllChildren();\n\t\t\tappendNested(this,new$);\n\t\t};\n\t\t\n\t\tthis._tree_ = new$;\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.content = function (){\n\t\treturn this._content || this.children().toArray();\n\t};\n\t\n\ttag.prototype.setText = function (text){\n\t\tif (text != this._tree_) {\n\t\t\tvar val = (text === null || text === false) ? '' : text;\n\t\t\t(this._text_ || this._dom).textContent = val;\n\t\t\tthis._text_ || (this._text_ = this._dom.firstChild);\n\t\t\tthis._tree_ = text;\n\t\t};\n\t\treturn this;\n\t};\n});\n\n// alias setContent to setChildren\nvar proto = Imba.Tag.prototype;\nproto.setContent = proto.setChildren;\n\n// optimization for setText\nvar apple = typeof navigator != 'undefined' && (navigator.vendor || '').indexOf('Apple') == 0;\nif (apple) {\n\tproto.setText = function (text){\n\t\tif (text != this._tree_) {\n\t\t\tthis._dom.textContent = ((text === null || text === false) ? '' : text);\n\t\t\tthis._tree_ = text;\n\t\t};\n\t\treturn this;\n\t};\n};\n", "var Imba = require(\"../imba\");\n\nrequire('./manager');\nrequire('./event-manager');\n\nImba.TagManager = new Imba.TagManagerClass();\n\nrequire('./tag');\nrequire('./html');\nrequire('./pointer');\nrequire('./touch');\nrequire('./event');\n\nif (true) {\n\trequire('./reconciler');\n};\n\nif (false) {};\n", "var Imba = require(\"./imba\");\nvar activate = false;\nvar ns = ((typeof window !== 'undefined') ? window : (((typeof global !== 'undefined') ? global : null)));\n\nif (ns && ns.Imba) {\n\tconsole.warn((\"Imba v\" + (ns.Imba.VERSION) + \" is already loaded.\"));\n\tImba = ns.Imba;\n} else if (ns) {\n\tns.Imba = Imba;\n\tactivate = true;\n\tif (ns.define && ns.define.amd) {\n\t\tns.define(\"imba\",[],function() { return Imba; });\n\t};\n};\n\nmodule.exports = Imba;\n\nif (!false) {\n\trequire('./scheduler');\n\trequire('./dom/index');\n\t\n\tif (activate) {\n\t\tImba.EventManager.activate();\n\t};\n};\n\nif (false) {};\n", "module.exports = require(\"./src/imba/index.imba1\");\n", "var Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/);\n\nfunction CSSVariables(target,options){\n\tif(options === undefined) options = {};\n\tthis._target = target;\n\tthis._vars = {};\n\tthis._changed = {};\n\tthis;\n};\n\nexports.CSSVariables = CSSVariables; // export class \nCSSVariables.prototype.get = function (key){\n\treturn this._vars[key];\n};\n\nCSSVariables.prototype.set = function (key,value){\n\tif (key instanceof Object) {\n\t\tfor (let v, i = 0, keys = Object.keys(key), l = keys.length, k; i < l; i++){\n\t\t\tk = keys[i];v = key[k];this.set(k,v);\n\t\t};\n\t\treturn this._target;\n\t};\n\t\n\tlet prev = this._vars[key];\n\t\n\tif (prev == value) {\n\t\treturn this._target;\n\t};\n\t\n\tthis._vars[key] = value;\n\tthis._changed[key] = true;\n\tthis._target.dom().style.setProperty((\"--\" + key),value);\n\treturn this._target;\n};\n\n_1.extendTag('element', function(tag){\n\ttag.prototype.cssvars = function (){\n\t\treturn this._cssvars || (this._cssvars = new CSSVariables(this));\n\t};\n\t\n\ttag.prototype.cssvarsSetAttribute = function (key,value){\n\t\tthis.cssvars().set(key,value);\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.domsync = function (value,prev,schema){\n\t\tvar var_, flag_;\n\t\tlet name = schema.name;\n\t\tlet unit = schema.unit;\n\t\tif (schema.var) {\n\t\t\tlet cssname = ((typeof (var_ = schema.var)=='string'||var_ instanceof String)) ? schema.var : name;\n\t\t\tthis.cssvars().set(cssname,unit ? ((value + unit)) : value);\n\t\t};\n\t\tif (schema.flag) {\n\t\t\tif ((typeof value=='string'||value instanceof String)) {\n\t\t\t\tthis.setFlag((\"$\" + name),value);\n\t\t\t} else if ((typeof (flag_ = schema.flag)=='string'||flag_ instanceof String)) {\n\t\t\t\tthis.flag(schema.flag,!!value);\n\t\t\t} else {\n\t\t\t\tthis.flag(name,!!value);\n\t\t\t};\n\t\t};\n\t\treturn this;\n\t};\n});\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/);\nvar feather = require('./feather.json');\n\n_1.extendTag('element', function(tag){\n\t\n\ttag.prototype.setIcon = function (icon,mods){\n\t\tif(mods === undefined) mods = {};\n\t\tif (icon != this._icon) {\n\t\t\tthis._icon = icon;\n\t\t\tlet parts = icon.split(\".\");\n\t\t\tif (feather[parts[0]]) {\n\t\t\t\tthis.flag('svg');\n\t\t\t\tfor (let i = 0, items = iter$(parts), len = items.length; i < len; i++) {\n\t\t\t\t\tthis.setFlag((\"if\" + i),items[i]);\n\t\t\t\t};\n\t\t\t\tlet html = (\"<svg class='feather \" + parts.join(\" \") + \"' viewBox='0 0 24 24'>\" + (feather[parts[0]]) + \"</svg>\");\n\t\t\t\tif (mods.double) {\n\t\t\t\t\thtml = (\"<svg class='feather \" + parts.join(\" \") + \" backdrop' viewBox='0 0 24 24'>\" + (feather[parts[0]]) + \"</svg>\" + html);\n\t\t\t\t};\n\t\t\t\tthis.dom().innerHTML = html;\n\t\t\t} else if (mods.svg) {\n\t\t\t\tthis.setSvg(icon);\n\t\t\t\tthis.flag('svg');\n\t\t\t} else {\n\t\t\t\tthis.dataset({micon: icon});\n\t\t\t};\n\t\t};\n\t\treturn this;\n\t};\n});\n", "/*global define:false */\n/**\n * Copyright 2012-2017 Craig Campbell\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Mousetrap is a simple keyboard shortcut library for Javascript with\n * no external dependencies\n *\n * @version 1.6.1\n * @url craig.is/killing/mice\n */\n(function(window, document, undefined) {\n\n // Check if mousetrap is used inside browser, if not, return\n if (!window) {\n return;\n }\n\n /**\n * mapping of special keycodes to their corresponding keys\n *\n * everything in this dictionary cannot use keypress events\n * so it has to be here to map to the correct keycodes for\n * keyup/keydown events\n *\n * @type {Object}\n */\n var _MAP = {\n 8: 'backspace',\n 9: 'tab',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 20: 'capslock',\n 27: 'esc',\n 32: 'space',\n 33: 'pageup',\n 34: 'pagedown',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 45: 'ins',\n 46: 'del',\n 91: 'meta',\n 93: 'meta',\n 224: 'meta'\n };\n\n /**\n * mapping for special characters so they can support\n *\n * this dictionary is only used incase you want to bind a\n * keyup or keydown event to one of these keys\n *\n * @type {Object}\n */\n var _KEYCODE_MAP = {\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111 : '/',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: '\\''\n };\n\n /**\n * this is a mapping of keys that require shift on a US keypad\n * back to the non shift equivelents\n *\n * this is so you can use keyup events with these keys\n *\n * note that this will only work reliably on US keyboards\n *\n * @type {Object}\n */\n var _SHIFT_MAP = {\n '~': '`',\n '!': '1',\n '@': '2',\n '#': '3',\n '$': '4',\n '%': '5',\n '^': '6',\n '&': '7',\n '*': '8',\n '(': '9',\n ')': '0',\n '_': '-',\n '+': '=',\n ':': ';',\n '\\\"': '\\'',\n '<': ',',\n '>': '.',\n '?': '/',\n '|': '\\\\'\n };\n\n /**\n * this is a list of special strings you can use to map\n * to modifier keys when you specify your keyboard shortcuts\n *\n * @type {Object}\n */\n var _SPECIAL_ALIASES = {\n 'option': 'alt',\n 'command': 'meta',\n 'return': 'enter',\n 'escape': 'esc',\n 'plus': '+',\n 'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'\n };\n\n /**\n * variable to store the flipped version of _MAP from above\n * needed to check if we should use keypress or not when no action\n * is specified\n *\n * @type {Object|undefined}\n */\n var _REVERSE_MAP;\n\n /**\n * loop through the f keys, f1 to f19 and add them to the map\n * programatically\n */\n for (var i = 1; i < 20; ++i) {\n _MAP[111 + i] = 'f' + i;\n }\n\n /**\n * loop through to map numbers on the numeric keypad\n */\n for (i = 0; i <= 9; ++i) {\n\n // This needs to use a string cause otherwise since 0 is falsey\n // mousetrap will never fire for numpad 0 pressed as part of a keydown\n // event.\n //\n // @see https://github.com/ccampbell/mousetrap/pull/258\n _MAP[i + 96] = i.toString();\n }\n\n /**\n * cross browser add event method\n *\n * @param {Element|HTMLDocument} object\n * @param {string} type\n * @param {Function} callback\n * @returns void\n */\n function _addEvent(object, type, callback) {\n if (object.addEventListener) {\n object.addEventListener(type, callback, false);\n return;\n }\n\n object.attachEvent('on' + type, callback);\n }\n\n function _removeEvent(object, type, callback) {\n if (object.removeEventListener) {\n object.removeEventListener(type, callback, false);\n return;\n }\n\n object.detachEvent('on' + type, callback);\n }\n\n /**\n * takes the event and returns the key character\n *\n * @param {Event} e\n * @return {string}\n */\n function _characterFromEvent(e) {\n\n // for keypress events we should return the character as is\n if (e.type == 'keypress') {\n var character = String.fromCharCode(e.which);\n\n // if the shift key is not pressed then it is safe to assume\n // that we want the character to be lowercase. this means if\n // you accidentally have caps lock on then your key bindings\n // will continue to work\n //\n // the only side effect that might not be desired is if you\n // bind something like 'A' cause you want to trigger an\n // event when capital A is pressed caps lock will no longer\n // trigger the event. shift+a will though.\n if (!e.shiftKey) {\n character = character.toLowerCase();\n }\n\n return character;\n }\n\n // for non keypress events the special maps are needed\n if (_MAP[e.which]) {\n return _MAP[e.which];\n }\n\n if (_KEYCODE_MAP[e.which]) {\n return _KEYCODE_MAP[e.which];\n }\n\n // if it is not in the special map\n\n // with keydown and keyup events the character seems to always\n // come in as an uppercase character whether you are pressing shift\n // or not. we should make sure it is always lowercase for comparisons\n return String.fromCharCode(e.which).toLowerCase();\n }\n\n /**\n * checks if two arrays are equal\n *\n * @param {Array} modifiers1\n * @param {Array} modifiers2\n * @returns {boolean}\n */\n function _modifiersMatch(modifiers1, modifiers2) {\n return modifiers1.sort().join(',') === modifiers2.sort().join(',');\n }\n\n /**\n * takes a key event and figures out what the modifiers are\n *\n * @param {Event} e\n * @returns {Array}\n */\n function _eventModifiers(e) {\n var modifiers = [];\n\n if (e.shiftKey) {\n modifiers.push('shift');\n }\n\n if (e.altKey) {\n modifiers.push('alt');\n }\n\n if (e.ctrlKey) {\n modifiers.push('ctrl');\n }\n\n if (e.metaKey) {\n modifiers.push('meta');\n }\n\n return modifiers;\n }\n\n /**\n * prevents default for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _preventDefault(e) {\n if (e.preventDefault) {\n e.preventDefault();\n return;\n }\n\n e.returnValue = false;\n }\n\n /**\n * stops propogation for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _stopPropagation(e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n return;\n }\n\n e.cancelBubble = true;\n }\n\n /**\n * determines if the keycode specified is a modifier key or not\n *\n * @param {string} key\n * @returns {boolean}\n */\n function _isModifier(key) {\n return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';\n }\n\n /**\n * reverses the map lookup so that we can look for specific keys\n * to see what can and can't use keypress\n *\n * @return {Object}\n */\n function _getReverseMap() {\n if (!_REVERSE_MAP) {\n _REVERSE_MAP = {};\n for (var key in _MAP) {\n\n // pull out the numeric keypad from here cause keypress should\n // be able to detect the keys from the character\n if (key > 95 && key < 112) {\n continue;\n }\n\n if (_MAP.hasOwnProperty(key)) {\n _REVERSE_MAP[_MAP[key]] = key;\n }\n }\n }\n return _REVERSE_MAP;\n }\n\n /**\n * picks the best action based on the key combination\n *\n * @param {string} key - character for key\n * @param {Array} modifiers\n * @param {string=} action passed in\n */\n function _pickBestAction(key, modifiers, action) {\n\n // if no action was picked in we should try to pick the one\n // that we think would work best for this key\n if (!action) {\n action = _getReverseMap()[key] ? 'keydown' : 'keypress';\n }\n\n // modifier keys don't work as expected with keypress,\n // switch to keydown\n if (action == 'keypress' && modifiers.length) {\n action = 'keydown';\n }\n\n return action;\n }\n\n /**\n * Converts from a string key combination to an array\n *\n * @param {string} combination like \"command+shift+l\"\n * @return {Array}\n */\n function _keysFromString(combination) {\n if (combination === '+') {\n return ['+'];\n }\n\n combination = combination.replace(/\\+{2}/g, '+plus');\n return combination.split('+');\n }\n\n /**\n * Gets info for a specific key combination\n *\n * @param {string} combination key combination (\"command+s\" or \"a\" or \"*\")\n * @param {string=} action\n * @returns {Object}\n */\n function _getKeyInfo(combination, action) {\n var keys;\n var key;\n var i;\n var modifiers = [];\n\n // take the keys from this pattern and figure out what the actual\n // pattern is all about\n keys = _keysFromString(combination);\n\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n\n // normalize key names\n if (_SPECIAL_ALIASES[key]) {\n key = _SPECIAL_ALIASES[key];\n }\n\n // if this is not a keypress event then we should\n // be smart about using shift keys\n // this will only work for US keyboards however\n if (action && action != 'keypress' && _SHIFT_MAP[key]) {\n key = _SHIFT_MAP[key];\n modifiers.push('shift');\n }\n\n // if this key is a modifier then add it to the list of modifiers\n if (_isModifier(key)) {\n modifiers.push(key);\n }\n }\n\n // depending on what the key combination is\n // we will try to pick the best event for it\n action = _pickBestAction(key, modifiers, action);\n\n return {\n key: key,\n modifiers: modifiers,\n action: action\n };\n }\n\n function _belongsTo(element, ancestor) {\n if (element === null || element === document) {\n return false;\n }\n\n if (element === ancestor) {\n return true;\n }\n\n return _belongsTo(element.parentNode, ancestor);\n }\n\n function Mousetrap(targetElement) {\n var self = this;\n\n targetElement = targetElement || document;\n\n if (!(self instanceof Mousetrap)) {\n return new Mousetrap(targetElement);\n }\n\n /**\n * element to attach key events to\n *\n * @type {Element}\n */\n self.target = targetElement;\n\n /**\n * a list of all the callbacks setup via Mousetrap.bind()\n *\n * @type {Object}\n */\n self._callbacks = {};\n\n /**\n * direct map of string combinations to callbacks used for trigger()\n *\n * @type {Object}\n */\n self._directMap = {};\n\n /**\n * keeps track of what level each sequence is at since multiple\n * sequences can start out with the same sequence\n *\n * @type {Object}\n */\n var _sequenceLevels = {};\n\n /**\n * variable to store the setTimeout call\n *\n * @type {null|number}\n */\n var _resetTimer;\n\n /**\n * temporary state where we will ignore the next keyup\n *\n * @type {boolean|string}\n */\n var _ignoreNextKeyup = false;\n\n /**\n * temporary state where we will ignore the next keypress\n *\n * @type {boolean}\n */\n var _ignoreNextKeypress = false;\n\n /**\n * are we currently inside of a sequence?\n * type of action (\"keyup\" or \"keydown\" or \"keypress\") or false\n *\n * @type {boolean|string}\n */\n var _nextExpectedAction = false;\n\n /**\n * resets all sequence counters except for the ones passed in\n *\n * @param {Object} doNotReset\n * @returns void\n */\n function _resetSequences(doNotReset) {\n doNotReset = doNotReset || {};\n\n var activeSequences = false,\n key;\n\n for (key in _sequenceLevels) {\n if (doNotReset[key]) {\n activeSequences = true;\n continue;\n }\n _sequenceLevels[key] = 0;\n }\n\n if (!activeSequences) {\n _nextExpectedAction = false;\n }\n }\n\n /**\n * finds all callbacks that match based on the keycode, modifiers,\n * and action\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event|Object} e\n * @param {string=} sequenceName - name of the sequence we are looking for\n * @param {string=} combination\n * @param {number=} level\n * @returns {Array}\n */\n function _getMatches(character, modifiers, e, sequenceName, combination, level) {\n var i;\n var callback;\n var matches = [];\n var action = e.type;\n\n // if there are no events related to this keycode\n if (!self._callbacks[character]) {\n return [];\n }\n\n // if a modifier key is coming up on its own we should allow it\n if (action == 'keyup' && _isModifier(character)) {\n modifiers = [character];\n }\n\n // loop through all callbacks for the key that was pressed\n // and see if any of them match\n for (i = 0; i < self._callbacks[character].length; ++i) {\n callback = self._callbacks[character][i];\n\n // if a sequence name is not specified, but this is a sequence at\n // the wrong level then move onto the next match\n if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) {\n continue;\n }\n\n // if the action we are looking for doesn't match the action we got\n // then we should keep going\n if (action != callback.action) {\n continue;\n }\n\n // if this is a keypress event and the meta key and control key\n // are not pressed that means that we need to only look at the\n // character, otherwise check the modifiers as well\n //\n // chrome will not fire a keypress if meta or control is down\n // safari will fire a keypress if meta or meta+shift is down\n // firefox will fire a keypress if meta or control is down\n if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) {\n\n // when you bind a combination or sequence a second time it\n // should overwrite the first one. if a sequenceName or\n // combination is specified in this call it does just that\n //\n // @todo make deleting its own method?\n var deleteCombo = !sequenceName && callback.combo == combination;\n var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level;\n if (deleteCombo || deleteSequence) {\n self._callbacks[character].splice(i, 1);\n }\n\n matches.push(callback);\n }\n }\n\n return matches;\n }\n\n /**\n * actually calls the callback function\n *\n * if your callback function returns false this will use the jquery\n * convention - prevent default and stop propogation on the event\n *\n * @param {Function} callback\n * @param {Event} e\n * @returns void\n */\n function _fireCallback(callback, e, combo, sequence) {\n\n // if this event should not happen stop here\n if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) {\n return;\n }\n\n if (callback(e, combo) === false) {\n _preventDefault(e);\n _stopPropagation(e);\n }\n }\n\n /**\n * handles a character key event\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event} e\n * @returns void\n */\n self._handleKey = function(character, modifiers, e) {\n var callbacks = _getMatches(character, modifiers, e);\n var i;\n var doNotReset = {};\n var maxLevel = 0;\n var processedSequenceCallback = false;\n\n // Calculate the maxLevel for sequences so we can only execute the longest callback sequence\n for (i = 0; i < callbacks.length; ++i) {\n if (callbacks[i].seq) {\n maxLevel = Math.max(maxLevel, callbacks[i].level);\n }\n }\n\n // loop through matching callbacks for this key event\n for (i = 0; i < callbacks.length; ++i) {\n\n // fire for all sequence callbacks\n // this is because if for example you have multiple sequences\n // bound such as \"g i\" and \"g t\" they both need to fire the\n // callback for matching g cause otherwise you can only ever\n // match the first one\n if (callbacks[i].seq) {\n\n // only fire callbacks for the maxLevel to prevent\n // subsequences from also firing\n //\n // for example 'a option b' should not cause 'option b' to fire\n // even though 'option b' is part of the other sequence\n //\n // any sequences that do not match here will be discarded\n // below by the _resetSequences call\n if (callbacks[i].level != maxLevel) {\n continue;\n }\n\n processedSequenceCallback = true;\n\n // keep a list of which sequences were matches for later\n doNotReset[callbacks[i].seq] = 1;\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq);\n continue;\n }\n\n // if there were no sequence matches but we are still here\n // that means this is a regular match so we should fire that\n if (!processedSequenceCallback) {\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo);\n }\n }\n\n // if the key you pressed matches the type of sequence without\n // being a modifier (ie \"keyup\" or \"keypress\") then we should\n // reset all sequences that were not matched by this event\n //\n // this is so, for example, if you have the sequence \"h a t\" and you\n // type \"h e a r t\" it does not match. in this case the \"e\" will\n // cause the sequence to reset\n //\n // modifier keys are ignored because you can have a sequence\n // that contains modifiers such as \"enter ctrl+space\" and in most\n // cases the modifier key will be pressed before the next key\n //\n // also if you have a sequence such as \"ctrl+b a\" then pressing the\n // \"b\" key will trigger a \"keypress\" and a \"keydown\"\n //\n // the \"keydown\" is expected when there is a modifier, but the\n // \"keypress\" ends up matching the _nextExpectedAction since it occurs\n // after and that causes the sequence to reset\n //\n // we ignore keypresses in a sequence that directly follow a keydown\n // for the same character\n var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress;\n if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) {\n _resetSequences(doNotReset);\n }\n\n _ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown';\n };\n\n /**\n * handles a keydown event\n *\n * @param {Event} e\n * @returns void\n */\n function _handleKeyEvent(e) {\n\n // normalize e.which for key events\n // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion\n if (typeof e.which !== 'number') {\n e.which = e.keyCode;\n }\n\n var character = _characterFromEvent(e);\n\n // no character found then stop\n if (!character) {\n return;\n }\n\n // need to use === for the character check because the character can be 0\n if (e.type == 'keyup' && _ignoreNextKeyup === character) {\n _ignoreNextKeyup = false;\n return;\n }\n\n self.handleKey(character, _eventModifiers(e), e);\n }\n\n /**\n * called to set a 1 second timeout on the specified sequence\n *\n * this is so after each key press in the sequence you have 1 second\n * to press the next key before you have to start over\n *\n * @returns void\n */\n function _resetSequenceTimer() {\n clearTimeout(_resetTimer);\n _resetTimer = setTimeout(_resetSequences, 1000);\n }\n\n /**\n * binds a key sequence to an event\n *\n * @param {string} combo - combo specified in bind call\n * @param {Array} keys\n * @param {Function} callback\n * @param {string=} action\n * @returns void\n */\n function _bindSequence(combo, keys, callback, action) {\n\n // start off by adding a sequence level record for this combination\n // and setting the level to 0\n _sequenceLevels[combo] = 0;\n\n /**\n * callback to increase the sequence level for this sequence and reset\n * all other sequences that were active\n *\n * @param {string} nextAction\n * @returns {Function}\n */\n function _increaseSequence(nextAction) {\n return function() {\n _nextExpectedAction = nextAction;\n ++_sequenceLevels[combo];\n _resetSequenceTimer();\n };\n }\n\n /**\n * wraps the specified callback inside of another function in order\n * to reset all sequence counters as soon as this sequence is done\n *\n * @param {Event} e\n * @returns void\n */\n function _callbackAndReset(e) {\n _fireCallback(callback, e, combo);\n\n // we should ignore the next key up if the action is key down\n // or keypress. this is so if you finish a sequence and\n // release the key the final key will not trigger a keyup\n if (action !== 'keyup') {\n _ignoreNextKeyup = _characterFromEvent(e);\n }\n\n // weird race condition if a sequence ends with the key\n // another sequence begins with\n setTimeout(_resetSequences, 10);\n }\n\n // loop through keys one at a time and bind the appropriate callback\n // function. for any key leading up to the final one it should\n // increase the sequence. after the final, it should reset all sequences\n //\n // if an action is specified in the original bind call then that will\n // be used throughout. otherwise we will pass the action that the\n // next key in the sequence should match. this allows a sequence\n // to mix and match keypress and keydown events depending on which\n // ones are better suited to the key provided\n for (var i = 0; i < keys.length; ++i) {\n var isFinal = i + 1 === keys.length;\n var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);\n _bindSingle(keys[i], wrappedCallback, action, combo, i);\n }\n }\n\n /**\n * binds a single keyboard combination\n *\n * @param {string} combination\n * @param {Function} callback\n * @param {string=} action\n * @param {string=} sequenceName - name of sequence if part of sequence\n * @param {number=} level - what part of the sequence the command is\n * @returns void\n */\n function _bindSingle(combination, callback, action, sequenceName, level) {\n\n // store a direct mapped reference for use with Mousetrap.trigger\n self._directMap[combination + ':' + action] = callback;\n\n // make sure multiple spaces in a row become a single space\n combination = combination.replace(/\\s+/g, ' ');\n\n var sequence = combination.split(' ');\n var info;\n\n // if this pattern is a sequence of keys then run through this method\n // to reprocess each pattern one key at a time\n if (sequence.length > 1) {\n _bindSequence(combination, sequence, callback, action);\n return;\n }\n\n info = _getKeyInfo(combination, action);\n\n // make sure to initialize array if this is the first time\n // a callback is added for this key\n self._callbacks[info.key] = self._callbacks[info.key] || [];\n\n // remove an existing match if there is one\n _getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level);\n\n // add this call back to the array\n // if it is a sequence put it at the beginning\n // if not put it at the end\n //\n // this is important because the way these are processed expects\n // the sequence ones to come first\n self._callbacks[info.key][sequenceName ? 'unshift' : 'push']({\n callback: callback,\n modifiers: info.modifiers,\n action: info.action,\n seq: sequenceName,\n level: level,\n combo: combination\n });\n }\n\n /**\n * binds multiple combinations to the same callback\n *\n * @param {Array} combinations\n * @param {Function} callback\n * @param {string|undefined} action\n * @returns void\n */\n self._bindMultiple = function(combinations, callback, action) {\n for (var i = 0; i < combinations.length; ++i) {\n _bindSingle(combinations[i], callback, action);\n }\n };\n\n self.enable = function(){\n _addEvent(targetElement, 'keypress', _handleKeyEvent);\n _addEvent(targetElement, 'keydown', _handleKeyEvent);\n _addEvent(targetElement, 'keyup', _handleKeyEvent);\n }\n\n self.disable = function(){\n _removeEvent(targetElement, 'keypress', _handleKeyEvent);\n _removeEvent(targetElement, 'keydown', _handleKeyEvent);\n _removeEvent(targetElement, 'keyup', _handleKeyEvent);\n }\n\n self.enable();\n }\n\n /**\n * binds an event to mousetrap\n *\n * can be a single key, a combination of keys separated with +,\n * an array of keys, or a sequence of keys separated by spaces\n *\n * be sure to list the modifier keys first to make sure that the\n * correct key ends up getting bound (the last key in the pattern)\n *\n * @param {string|Array} keys\n * @param {Function} callback\n * @param {string=} action - 'keypress', 'keydown', or 'keyup'\n * @returns void\n */\n Mousetrap.prototype.bind = function(keys, callback, action) {\n var self = this;\n keys = keys instanceof Array ? keys : [keys];\n self._bindMultiple.call(self, keys, callback, action);\n return self;\n };\n\n /**\n * unbinds an event to mousetrap\n *\n * the unbinding sets the callback function of the specified key combo\n * to an empty function and deletes the corresponding key in the\n * _directMap dict.\n *\n * TODO: actually remove this from the _callbacks dictionary instead\n * of binding an empty function\n *\n * the keycombo+action has to be exactly the same as\n * it was defined in the bind method\n *\n * @param {string|Array} keys\n * @param {string} action\n * @returns void\n */\n Mousetrap.prototype.unbind = function(keys, action) {\n var self = this;\n return self.bind.call(self, keys, function() {}, action);\n };\n\n /**\n * triggers an event that has already been bound\n *\n * @param {string} keys\n * @param {string=} action\n * @returns void\n */\n Mousetrap.prototype.trigger = function(keys, action) {\n var self = this;\n if (self._directMap[keys + ':' + action]) {\n self._directMap[keys + ':' + action]({}, keys);\n }\n return self;\n };\n\n /**\n * resets the library back to its initial state. this is useful\n * if you want to clear out the current keyboard shortcuts and bind\n * new ones - for example if you switch to another page\n *\n * @returns void\n */\n Mousetrap.prototype.reset = function() {\n var self = this;\n self._callbacks = {};\n self._directMap = {};\n return self;\n };\n\n /**\n * should we stop this event before firing off callbacks\n *\n * @param {Event} e\n * @param {Element} element\n * @return {boolean}\n */\n Mousetrap.prototype.stopCallback = function(e, element) {\n var self = this;\n\n // if the element has the class \"mousetrap\" then no need to stop\n if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {\n return false;\n }\n\n if (_belongsTo(element, self.target)) {\n return false;\n }\n\n // stop for input, select, and textarea\n return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable;\n };\n\n /**\n * exposes _handleKey publicly so it can be overwritten by extensions\n */\n Mousetrap.prototype.handleKey = function() {\n var self = this;\n return self._handleKey.apply(self, arguments);\n };\n\n /**\n * allow custom key mappings\n */\n Mousetrap.addKeycodes = function(object) {\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n _MAP[key] = object[key];\n }\n }\n _REVERSE_MAP = null;\n };\n\n /**\n * Init the global mousetrap functions\n *\n * This method is needed to allow the global mousetrap functions to work\n * now that mousetrap is a constructor function.\n */\n Mousetrap.init = function() {\n var documentMousetrap = Mousetrap(document);\n for (var method in documentMousetrap) {\n if (method.charAt(0) !== '_') {\n Mousetrap[method] = (function(method) {\n return function() {\n return documentMousetrap[method].apply(documentMousetrap, arguments);\n };\n } (method));\n }\n }\n };\n\n Mousetrap.init();\n\n // expose mousetrap to the global object\n window.Mousetrap = Mousetrap;\n\n // expose as a common js module\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Mousetrap;\n }\n\n // expose mousetrap as an AMD module\n if (typeof define === 'function' && define.amd) {\n define(function() {\n return Mousetrap;\n });\n }\n}) (typeof window !== 'undefined' ? window : null, typeof window !== 'undefined' ? document : null);\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nfunction len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nvar Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/);\nvar KeyLabels = {\n\tesc: '\u238B',\n\tenter: '\u23CE',\n\tshift: '\u21E7',\n\tcommand: '\u2318',\n\toption: '\u2325',\n\talt: '\u2387',\n\tdel: '\u2326',\n\tbackspace: '\u232B'\n};\n\nvar Globals = {\n\t\"command+1\": true,\n\t\"command+2\": true,\n\t\"command+3\": true,\n\t\"command+4\": true,\n\t\"command+5\": true,\n\t\"command+6\": true,\n\t\"command+7\": true,\n\t\"command+8\": true,\n\t\"command+9\": true,\n\t\"command+0\": true,\n\t\"command+n\": true,\n\t\"command+f\": true,\n\t\"command+k\": true,\n\t\"command+j\": true,\n\t\"command+s\": true,\n\t\"command+r\": true,\n\t\"ctrl+s\": true,\n\t\"ctrl+r\": true,\n\t\"esc\": true,\n\t\"shift+command+f\": true\n};\n\nvar Mousetrap = require('./mousetrap');\n\nMousetrap.prototype.stopCallback = function(e,el,combo) {\n\t// def stopCallbackz e,el,combo\n\t// Mousetrap:prototype:stopCallback = do |e,el,combo|\n\t// if the element has the class \"mousetrap\" then no need to stop\n\t// console.log \"stop callback?\",e,el,combo\n\t\n\tif (el.closest('.no-mousetrap')) {\n\t\treturn true;\n\t};\n\t\n\tif ((' ' + el.className + ' ').indexOf(' mousetrap ') > -1) {\n\t\treturn false;\n\t};\n\t\n\tif (e.mousetrappable) {\n\t\t// console.log \"is trappable!\",e\n\t\treturn false;\n\t};\n\t\n\tif (Globals[combo]) {\n\t\treturn false;\n\t};\n\t\n\tif (el.tagName == 'INPUT' && (combo == 'down' || combo == 'up')) {\n\t\treturn false;\n\t};\n\t\n\tif (el.tagName == 'INPUT' || el.tagName == 'SELECT' || el.tagName == 'TEXTAREA') {\n\t\treturn true;\n\t};\n\t\n\tif (el.contentEditable && (el.contentEditable == 'true' || el.contentEditable == 'plaintext-only' || el.closest('.editable'))) {\n\t\treturn true;\n\t};\n};\n\nvar manager = exports.manager = {\n\t_combos: {'*': {}},\n\t_identifiers: {},\n\t_labels: {},\n\t\n\tregister: function(key,mods){\n\t\tif(mods === undefined) mods = {};\n\t\tif (!this._combos[key]) {\n\t\t\tthis._combos[key] = true;\n\t\t\tthis._handler || (this._handler = this.handle.bind(this));\n\t\t\tMousetrap.bind(key,this._handler);\n\t\t};\n\t\tif (mods.global) {\n\t\t\tGlobals[key] = true;\n\t\t};\n\t\treturn this;\n\t},\n\t\n\tcomboIdentifier: function(combo){\n\t\treturn this._identifiers[combo] || (this._identifiers[combo] = 'shortcut-' + combo.replace(/\\+/g,'_').replace(/\\ /g,'-').replace(/\\*/g,'all'));\n\t},\n\t\n\tshortcutHTML: function(combo){\n\t\treturn (\"<u>\" + this.comboLabel(combo).split(\" \").join(\"</u><u>\") + \"</u>\").replace('<u>/</u>','<span>or</span>');\n\t},\n\t\n\tcomboLabel: function(combo){\n\t\treturn this._labels[combo] || (this._labels[combo] = combo.split(\" \").map(function(v) {\n\t\t\treturn v.split(\"+\").map(function(v) { return KeyLabels[v] || v.toUpperCase(); }).join(\"\");\n\t\t}).join(\" \"));\n\t},\n\t\n\thandle: function(e,combo){\n\t\t// console.log \"handle combo\",e,e:target\n\t\tlet identifier = this.comboIdentifier(combo);\n\t\t// let receivers = Array.from(document.getElementsByClassName(identifier))\n\t\tlet receivers = Array.from(document.querySelectorAll('.' + identifier + ',.shortcut-all'));\n\t\t\n\t\tif (len$(receivers) > 1) {\n\t\t\treceivers = receivers.reverse().filter(function(r) { return !r.closest('.hiding'); });\n\t\t\t// console.log \"multiple receivers\",receivers\n\t\t};\n\t\t\n\t\tfor (let i = 0, items = iter$(receivers), len = items.length, receiver; i < len; i++) {\n\t\t\treceiver = items[i];\n\t\t\tlet params = receiver._tag.shortcut();\n\t\t\tlet data = Object.assign({},params,{combo: combo,event: e,receivers: receivers});\n\t\t\tlet beforeevent = receiver._tag.trigger('beforeshortcut',data);\n\t\t\t\n\t\t\tif (beforeevent.isPrevented()) {\n\t\t\t\t// console.log \"continue shortcut handling!\"\n\t\t\t\tcontinue;\n\t\t\t};\n\t\t\t\n\t\t\t\n\t\t\tif (receiver._tag && receiver._tag.onshortcut) {\n\t\t\t\te.preventDefault();\n\t\t\t\treceiver._tag.onshortcut(e,combo);\n\t\t\t} else if (receiver.matches('input,.markour')) {\n\t\t\t\t// should still check various rules?\n\t\t\t\te.preventDefault();\n\t\t\t\treceiver._tag.focus();\n\t\t\t} else {\n\t\t\t\tif (params.within && !receiver.parentNode.contains(document.activeElement)) {\n\t\t\t\t\t// console.log \"shortcut is within\",document:activeElement,receiver\n\t\t\t\t\tcontinue;\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif ((/command|cmd|ctrl|shift/).test(combo) || params.prevent) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tlet exec = receiver._tag.trigger('exec',data);\n\t\t\t\tif (!exec.responder()) {\n\t\t\t\t\treceiver.click();\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (exec.responder() && params.bubble && exec.bubble()) {\n\t\t\t\t\t// console.log \"allow bubbling through!!\",receiver\n\t\t\t\t\tcontinue;\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// track most shortcut events\n\t\t\t\t// unless combo in ['left','right','up','down']\n\t\t\t\t// \tGSAPI.analytics.sendEvent('Shortcut',combo)\n\t\t\t};\n\t\t\tbreak;\n\t\t};\n\t\treturn this;\n\t}\n};\n\n\n\n_1.extendTag('element', function(tag){\n\t\n\ttag.prototype.shortcut = function (){\n\t\treturn this._shortcut || (this._shortcut = {});\n\t};\n\t\n\ttag.prototype.setShortcut = function (value,mods){\n\t\tif(mods === undefined) mods = {};\n\t\tif (value != this.shortcut().value) {\n\t\t\tObject.assign(this.shortcut(),mods,{value: value});\n\t\t\t\n\t\t\tvalue = value.replace(/mod/g,(this.api() && this.api().ua().isMac()) ? 'command' : 'ctrl');\n\t\t\t\n\t\t\tif (value.indexOf('command') >= 0 && this.api() && !this.api().ua().isMac()) {\n\t\t\t\tvalue = value.replace(/command/g,'ctrl');\n\t\t\t};\n\t\t\t\n\t\t\tlet labels = [];\n\t\t\tfor (let i = 0, items = iter$(value.split('|')), len = items.length, combo; i < len; i++) {\n\t\t\t\tcombo = items[i];\n\t\t\t\tmanager.register(combo,mods);\n\t\t\t\tthis.flag(manager.comboIdentifier(combo));\n\t\t\t\tlabels.push(manager.comboLabel(combo));\n\t\t\t\tif (mods.global) {\n\t\t\t\t\tGlobals[combo] = true;\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\tvar label = this._shortcutLabel = labels.join(\" / \");\n\t\t\tthis.dom().dataset.shortcut = label;\n\t\t\tthis._shortcutHTML = (\"<u>\" + label.split(\" \").join(\"</u><u>\") + \"</u>\").replace('<u>/</u>','<span>or</span>');\n\t\t\t\n\t\t\tif (this._tip && this._tip.indexOf('KEY') >= 0) {\n\t\t\t\tthis.setTipContent(this._tip.replace(\"KEY\",this._shortcutHTML));\n\t\t\t};\n\t\t};\n\t\t\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.shortcutSetAttribute = function (key,value){\n\t\tthis.shortcut()[key] = value;\n\t\treturn this;\n\t};\n});\n\n_1.defineTag('shortcut');\n", "export default typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n", "import isBrowser from './isBrowser';\n\nconst timeoutDuration = (function(){\n const longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (let i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}());\n\nexport function microtaskDebounce(fn) {\n let called = false\n return () => {\n if (called) {\n return\n }\n called = true\n window.Promise.resolve().then(() => {\n called = false\n fn()\n })\n }\n}\n\nexport function taskDebounce(fn) {\n let scheduled = false;\n return () => {\n if (!scheduled) {\n scheduled = true;\n setTimeout(() => {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nconst supportsMicroTasks = isBrowser && window.Promise\n\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nexport default (supportsMicroTasks\n ? microtaskDebounce\n : taskDebounce);\n", "/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nexport default function isFunction(functionToCheck) {\n const getType = {};\n return (\n functionToCheck &&\n getType.toString.call(functionToCheck) === '[object Function]'\n );\n}\n", "/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nexport default function getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n const window = element.ownerDocument.defaultView;\n const css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n", "/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nexport default function getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n", "import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nexport default function getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body\n case '#document':\n return element.body\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n const { overflow, overflowX, overflowY } = getStyleComputedProperty(element);\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n", "/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nexport default function getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n", "import isBrowser from './isBrowser';\n\nconst isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nconst isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nexport default function isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n", "import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nexport default function getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n const noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n let offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n const nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (\n ['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 &&\n getStyleComputedProperty(offsetParent, 'position') === 'static'\n ) {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n", "import getOffsetParent from './getOffsetParent';\n\nexport default function isOffsetContainer(element) {\n const { nodeName } = element;\n if (nodeName === 'BODY') {\n return false;\n }\n return (\n nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element\n );\n}\n", "/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nexport default function getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n", "import isOffsetContainer from './isOffsetContainer';\nimport getRoot from './getRoot';\nimport getOffsetParent from './getOffsetParent';\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nexport default function findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n const order =\n element1.compareDocumentPosition(element2) &\n Node.DOCUMENT_POSITION_FOLLOWING;\n const start = order ? element1 : element2;\n const end = order ? element2 : element1;\n\n // Get common ancestor container\n const range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n const { commonAncestorContainer } = range;\n\n // Both nodes are inside #document\n if (\n (element1 !== commonAncestorContainer &&\n element2 !== commonAncestorContainer) ||\n start.contains(end)\n ) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n const element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n", "/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nexport default function getScroll(element, side = 'top') {\n const upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n const nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n const html = element.ownerDocument.documentElement;\n const scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n", "import getScroll from './getScroll';\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nexport default function includeScroll(rect, element, subtract = false) {\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n const modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n", "/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nexport default function getBordersSize(styles, axis) {\n const sideA = axis === 'x' ? 'Left' : 'Top';\n const sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return (\n parseFloat(styles[`border${sideA}Width`]) +\n parseFloat(styles[`border${sideB}Width`])\n );\n}\n", "import isIE from './isIE';\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(\n body[`offset${axis}`],\n body[`scroll${axis}`],\n html[`client${axis}`],\n html[`offset${axis}`],\n html[`scroll${axis}`],\n isIE(10)\n ? (parseInt(html[`offset${axis}`]) + \n parseInt(computedStyle[`margin${axis === 'Height' ? 'Top' : 'Left'}`]) + \n parseInt(computedStyle[`margin${axis === 'Height' ? 'Bottom' : 'Right'}`]))\n : 0 \n );\n}\n\nexport default function getWindowSizes(document) {\n const body = document.body;\n const html = document.documentElement;\n const computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle),\n };\n}\n", "/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nexport default function getClientRect(offsets) {\n return {\n ...offsets,\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height,\n };\n}\n", "import getStyleComputedProperty from './getStyleComputedProperty';\nimport getBordersSize from './getBordersSize';\nimport getWindowSizes from './getWindowSizes';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\nimport isIE from './isIE';\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nexport default function getBoundingClientRect(element) {\n let rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n const scrollTop = getScroll(element, 'top');\n const scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n }\n else {\n rect = element.getBoundingClientRect();\n }\n }\n catch(e){}\n\n const result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top,\n };\n\n // subtract scrollbar size from sizes\n const sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n const width =\n sizes.width || element.clientWidth || result.width;\n const height =\n sizes.height || element.clientHeight || result.height;\n\n let horizScrollbar = element.offsetWidth - width;\n let vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n const styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n", "import getStyleComputedProperty from './getStyleComputedProperty';\nimport includeScroll from './includeScroll';\nimport getScrollParent from './getScrollParent';\nimport getBoundingClientRect from './getBoundingClientRect';\nimport runIsIE from './isIE';\nimport getClientRect from './getClientRect';\n\nexport default function getOffsetRectRelativeToArbitraryNode(children, parent, fixedPosition = false) {\n const isIE10 = runIsIE(10);\n const isHTML = parent.nodeName === 'HTML';\n const childrenRect = getBoundingClientRect(children);\n const parentRect = getBoundingClientRect(parent);\n const scrollParent = getScrollParent(children);\n\n const styles = getStyleComputedProperty(parent);\n const borderTopWidth = parseFloat(styles.borderTopWidth);\n const borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if(fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n let offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height,\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n const marginTop = parseFloat(styles.marginTop);\n const marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (\n isIE10 && !fixedPosition\n ? parent.contains(scrollParent)\n : parent === scrollParent && scrollParent.nodeName !== 'BODY'\n ) {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n", "import getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getScroll from './getScroll';\nimport getClientRect from './getClientRect';\n\nexport default function getViewportOffsetRectRelativeToArtbitraryNode(element, excludeScroll = false) {\n const html = element.ownerDocument.documentElement;\n const relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n const width = Math.max(html.clientWidth, window.innerWidth || 0);\n const height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n const scrollTop = !excludeScroll ? getScroll(html) : 0;\n const scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n const offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width,\n height,\n };\n\n return getClientRect(offset);\n}\n", "import getStyleComputedProperty from './getStyleComputedProperty';\nimport getParentNode from './getParentNode';\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nexport default function isFixed(element) {\n const nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n const parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n", "import getStyleComputedProperty from './getStyleComputedProperty';\nimport isIE from './isIE';\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nexport default function getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n let el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n\n}\n", "import getScrollParent from './getScrollParent';\nimport getParentNode from './getParentNode';\nimport getReferenceNode from './getReferenceNode';\nimport findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getViewportOffsetRectRelativeToArtbitraryNode from './getViewportOffsetRectRelativeToArtbitraryNode';\nimport getWindowSizes from './getWindowSizes';\nimport isFixed from './isFixed';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nexport default function getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement,\n fixedPosition = false\n) {\n // NOTE: 1 DOM access here\n\n let boundaries = { top: 0, left: 0 };\n const offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport' ) {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n }\n\n else {\n // Handle other cases based on DOM element used as boundaries\n let boundariesNode;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n const offsets = getOffsetRectRelativeToArbitraryNode(\n boundariesNode,\n offsetParent,\n fixedPosition\n );\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n const { height, width } = getWindowSizes(popper.ownerDocument);\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n const isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0; \n boundaries.top += isPaddingNumber ? padding : padding.top || 0; \n boundaries.right -= isPaddingNumber ? padding : padding.right || 0; \n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; \n\n return boundaries;\n}\n", "import getBoundaries from '../utils/getBoundaries';\n\nfunction getArea({ width, height }) {\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeAutoPlacement(\n placement,\n refRect,\n popper,\n reference,\n boundariesElement,\n padding = 0\n) {\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n const boundaries = getBoundaries(\n popper,\n reference,\n padding,\n boundariesElement\n );\n\n const rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top,\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height,\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom,\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height,\n },\n };\n\n const sortedAreas = Object.keys(rects)\n .map(key => ({\n key,\n ...rects[key],\n area: getArea(rects[key]),\n }))\n .sort((a, b) => b.area - a.area);\n\n const filteredAreas = sortedAreas.filter(\n ({ width, height }) =>\n width >= popper.clientWidth && height >= popper.clientHeight\n );\n\n const computedPlacement = filteredAreas.length > 0\n ? filteredAreas[0].key\n : sortedAreas[0].key;\n\n const variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? `-${variation}` : '');\n}\n", "import findCommonOffsetParent from './findCommonOffsetParent';\nimport getOffsetRectRelativeToArbitraryNode from './getOffsetRectRelativeToArbitraryNode';\nimport getFixedPositionOffsetParent from './getFixedPositionOffsetParent';\nimport getReferenceNode from './getReferenceNode';\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nexport default function getReferenceOffsets(state, popper, reference, fixedPosition = null) {\n const commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n", "/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nexport default function getOuterSizes(element) {\n const window = element.ownerDocument.defaultView;\n const styles = window.getComputedStyle(element);\n const x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n const y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n const result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x,\n };\n return result;\n}\n", "/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nexport default function getOppositePlacement(placement) {\n const hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, matched => hash[matched]);\n}\n", "import getOuterSizes from './getOuterSizes';\nimport getOppositePlacement from './getOppositePlacement';\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nexport default function getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n const popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n const popperOffsets = {\n width: popperRect.width,\n height: popperRect.height,\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n const isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n const mainSide = isHoriz ? 'top' : 'left';\n const secondarySide = isHoriz ? 'left' : 'top';\n const measurement = isHoriz ? 'height' : 'width';\n const secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] =\n referenceOffsets[mainSide] +\n referenceOffsets[measurement] / 2 -\n popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] =\n referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] =\n referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n", "/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n", "import find from './find';\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nexport default function findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(cur => cur[prop] === value);\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n const match = find(arr, obj => obj[prop] === value);\n return arr.indexOf(match);\n}\n", "import isFunction from './isFunction';\nimport findIndex from './findIndex';\nimport getClientRect from '../utils/getClientRect';\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nexport default function runModifiers(modifiers, data, ends) {\n const modifiersToRun = ends === undefined\n ? modifiers\n : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(modifier => {\n if (modifier['function']) { // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n const fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n", "import computeAutoPlacement from '../utils/computeAutoPlacement';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nexport default function update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n let data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {},\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(\n this.state,\n this.popper,\n this.reference,\n this.options.positionFixed\n );\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(\n this.options.placement,\n data.offsets.reference,\n this.popper,\n this.reference,\n this.options.modifiers.flip.boundariesElement,\n this.options.modifiers.flip.padding\n );\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(\n this.popper,\n data.offsets.reference,\n data.placement\n );\n\n data.offsets.popper.position = this.options.positionFixed\n ? 'fixed'\n : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n", "/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nexport default function isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(\n ({ name, enabled }) => enabled && name === modifierName\n );\n}\n", "/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nexport default function getSupportedPropertyName(property) {\n const prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n const upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (let i = 0; i < prefixes.length; i++) {\n const prefix = prefixes[i];\n const toCheck = prefix ? `${prefix}${upperProp}` : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n", "import isModifierEnabled from '../utils/isModifierEnabled';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nexport default function destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n", "/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nexport default function getWindow(element) {\n const ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n", "import getScrollParent from './getScrollParent';\nimport getWindow from './getWindow';\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n const isBody = scrollParent.nodeName === 'BODY';\n const target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(\n getScrollParent(target.parentNode),\n event,\n callback,\n scrollParents\n );\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function setupEventListeners(\n reference,\n options,\n state,\n updateBound\n) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n const scrollElement = getScrollParent(reference);\n attachToScrollParents(\n scrollElement,\n 'scroll',\n state.updateBound,\n state.scrollParents\n );\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n", "import setupEventListeners from '../utils/setupEventListeners';\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nexport default function enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(\n this.reference,\n this.options,\n this.state,\n this.scheduleUpdate\n );\n }\n}\n", "import getWindow from './getWindow';\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nexport default function removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(target => {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n", "import removeEventListeners from '../utils/removeEventListeners';\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nexport default function disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n", "/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nexport default function isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n", "import isNumeric from './isNumeric';\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setStyles(element, styles) {\n Object.keys(styles).forEach(prop => {\n let unit = '';\n // add unit if the value is numeric and is one of the following\n if (\n ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !==\n -1 &&\n isNumeric(styles[prop])\n ) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n", "/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nexport default function setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function(prop) {\n const value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n", "import setStyles from '../utils/setStyles';\nimport setAttributes from '../utils/setAttributes';\nimport getReferenceOffsets from '../utils/getReferenceOffsets';\nimport computeAutoPlacement from '../utils/computeAutoPlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nexport default function applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nexport function applyStyleOnLoad(\n reference,\n popper,\n options,\n modifierOptions,\n state\n) {\n // compute reference element offsets\n const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n const placement = computeAutoPlacement(\n options.placement,\n referenceOffsets,\n popper,\n reference,\n options.modifiers.flip.boundariesElement,\n options.modifiers.flip.padding\n );\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n", "/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nexport default function getRoundedOffsets(data, shouldRound) {\n const { popper, reference } = data.offsets;\n const { round, floor } = Math;\n const noRound = v => v;\n \n const referenceWidth = round(reference.width);\n const popperWidth = round(popper.width);\n \n const isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n const isVariation = data.placement.indexOf('-') !== -1;\n const sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n const bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n const horizontalToInteger = !shouldRound\n ? noRound\n : isVertical || isVariation || sameWidthParity\n ? round\n : floor;\n const verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(\n bothOddWidth && !isVariation && shouldRound\n ? popper.left - 1\n : popper.left\n ),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right),\n };\n}\n", "import getSupportedPropertyName from '../utils/getSupportedPropertyName';\nimport find from '../utils/find';\nimport getOffsetParent from '../utils/getOffsetParent';\nimport getBoundingClientRect from '../utils/getBoundingClientRect';\nimport getRoundedOffsets from '../utils/getRoundedOffsets';\nimport isBrowser from '../utils/isBrowser';\n\nconst isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function computeStyle(data, options) {\n const { x, y } = options;\n const { popper } = data.offsets;\n\n // Remove this legacy support in Popper.js v2\n const legacyGpuAccelerationOption = find(\n data.instance.modifiers,\n modifier => modifier.name === 'applyStyle'\n ).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn(\n 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'\n );\n }\n const gpuAcceleration =\n legacyGpuAccelerationOption !== undefined\n ? legacyGpuAccelerationOption\n : options.gpuAcceleration;\n\n const offsetParent = getOffsetParent(data.instance.popper);\n const offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n const styles = {\n position: popper.position,\n };\n\n const offsets = getRoundedOffsets(\n data,\n window.devicePixelRatio < 2 || !isFirefox\n );\n\n const sideA = x === 'bottom' ? 'top' : 'bottom';\n const sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n const prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n let left, top;\n if (sideA === 'bottom') {\n // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`;\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n const invertTop = sideA === 'bottom' ? -1 : 1;\n const invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = `${sideA}, ${sideB}`;\n }\n\n // Attributes\n const attributes = {\n 'x-placement': data.placement,\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = { ...attributes, ...data.attributes };\n data.styles = { ...styles, ...data.styles };\n data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles };\n\n return data;\n}\n", "import find from './find';\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nexport default function isModifierRequired(\n modifiers,\n requestingName,\n requestedName\n) {\n const requesting = find(modifiers, ({ name }) => name === requestingName);\n\n const isRequired =\n !!requesting &&\n modifiers.some(modifier => {\n return (\n modifier.name === requestedName &&\n modifier.enabled &&\n modifier.order < requesting.order\n );\n });\n\n if (!isRequired) {\n const requesting = `\\`${requestingName}\\``;\n const requested = `\\`${requestedName}\\``;\n console.warn(\n `${requested} modifier is required by ${requesting} modifier in order to work, be sure to include it before ${requesting}!`\n );\n }\n return isRequired;\n}\n", "import getClientRect from '../utils/getClientRect';\nimport getOuterSizes from '../utils/getOuterSizes';\nimport isModifierRequired from '../utils/isModifierRequired';\nimport getStyleComputedProperty from '../utils/getStyleComputedProperty';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function arrow(data, options) {\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n let arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn(\n 'WARNING: `arrow.element` must be child of its popper element!'\n );\n return data;\n }\n }\n\n const placement = data.placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n const len = isVertical ? 'height' : 'width';\n const sideCapitalized = isVertical ? 'Top' : 'Left';\n const side = sideCapitalized.toLowerCase();\n const altSide = isVertical ? 'left' : 'top';\n const opSide = isVertical ? 'bottom' : 'right';\n const arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -=\n popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] +=\n reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n const center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n const css = getStyleComputedProperty(data.instance.popper);\n const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`]);\n const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`]);\n let sideValue =\n center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = {\n [side]: Math.round(sideValue),\n [altSide]: '', // make sure to unset any eventual altSide value from the DOM node\n };\n\n return data;\n}\n", "/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nexport default function getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n", "/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nexport default [\n 'auto-start',\n 'auto',\n 'auto-end',\n 'top-start',\n 'top',\n 'top-end',\n 'right-start',\n 'right',\n 'right-end',\n 'bottom-end',\n 'bottom',\n 'bottom-start',\n 'left-end',\n 'left',\n 'left-start',\n];\n", "import placements from '../methods/placements';\n\n// Get rid of `auto` `auto-start` and `auto-end`\nconst validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nexport default function clockwise(placement, counter = false) {\n const index = validPlacements.indexOf(placement);\n const arr = validPlacements\n .slice(index + 1)\n .concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n", "import getOppositePlacement from '../utils/getOppositePlacement';\nimport getOppositeVariation from '../utils/getOppositeVariation';\nimport getPopperOffsets from '../utils/getPopperOffsets';\nimport runModifiers from '../utils/runModifiers';\nimport getBoundaries from '../utils/getBoundaries';\nimport isModifierEnabled from '../utils/isModifierEnabled';\nimport clockwise from '../utils/clockwise';\n\nconst BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise',\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n options.boundariesElement,\n data.positionFixed\n );\n\n let placement = data.placement.split('-')[0];\n let placementOpposite = getOppositePlacement(placement);\n let variation = data.placement.split('-')[1] || '';\n\n let flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach((step, index) => {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n const popperOffsets = data.offsets.popper;\n const refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n const floor = Math.floor;\n const overlapsRef =\n (placement === 'left' &&\n floor(popperOffsets.right) > floor(refOffsets.left)) ||\n (placement === 'right' &&\n floor(popperOffsets.left) < floor(refOffsets.right)) ||\n (placement === 'top' &&\n floor(popperOffsets.bottom) > floor(refOffsets.top)) ||\n (placement === 'bottom' &&\n floor(popperOffsets.top) < floor(refOffsets.bottom));\n\n const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n const overflowsBottom =\n floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n const overflowsBoundaries =\n (placement === 'left' && overflowsLeft) ||\n (placement === 'right' && overflowsRight) ||\n (placement === 'top' && overflowsTop) ||\n (placement === 'bottom' && overflowsBottom);\n\n // flip the variation if required\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n const flippedVariationByRef =\n !!options.flipVariations &&\n ((isVertical && variation === 'start' && overflowsLeft) ||\n (isVertical && variation === 'end' && overflowsRight) ||\n (!isVertical && variation === 'start' && overflowsTop) ||\n (!isVertical && variation === 'end' && overflowsBottom));\n\n // flips variation if popper content overflows boundaries\n const flippedVariationByContent =\n !!options.flipVariationsByContent &&\n ((isVertical && variation === 'start' && overflowsRight) ||\n (isVertical && variation === 'end' && overflowsLeft) ||\n (!isVertical && variation === 'start' && overflowsBottom) ||\n (!isVertical && variation === 'end' && overflowsTop));\n\n const flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = {\n ...data.offsets.popper,\n ...getPopperOffsets(\n data.instance.popper,\n data.offsets.reference,\n data.placement\n ),\n };\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n", "/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function keepTogether(data) {\n const { popper, reference } = data.offsets;\n const placement = data.placement.split('-')[0];\n const floor = Math.floor;\n const isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n const side = isVertical ? 'right' : 'bottom';\n const opSide = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] =\n floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n", "import isNumeric from '../utils/isNumeric';\nimport getClientRect from '../utils/getClientRect';\nimport find from '../utils/find';\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nexport function toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n const split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n const value = +split[1];\n const unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n let element;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n const rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n let size;\n if (unit === 'vh') {\n size = Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n );\n } else {\n size = Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n );\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nexport function parseOffset(\n offset,\n popperOffsets,\n referenceOffsets,\n basePlacement\n) {\n const offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n const fragments = offset.split(/(\\+|\\-)/).map(frag => frag.trim());\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n const divider = fragments.indexOf(\n find(fragments, frag => frag.search(/,|\\s/) !== -1)\n );\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn(\n 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.'\n );\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n const splitRegex = /\\s*,\\s*|\\s+/;\n let ops = divider !== -1\n ? [\n fragments\n .slice(0, divider)\n .concat([fragments[divider].split(splitRegex)[0]]),\n [fragments[divider].split(splitRegex)[1]].concat(\n fragments.slice(divider + 1)\n ),\n ]\n : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map((op, index) => {\n // Most of the units rely on the orientation of the popper\n const measurement = (index === 1 ? !useHeight : useHeight)\n ? 'height'\n : 'width';\n let mergeWithPrevious = false;\n return (\n op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce((a, b) => {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(str => toValue(str, measurement, popperOffsets, referenceOffsets))\n );\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach((op, index) => {\n op.forEach((frag, index2) => {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nexport default function offset(data, { offset }) {\n const { placement, offsets: { popper, reference } } = data;\n const basePlacement = placement.split('-')[0];\n\n let offsets;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n", "import getOffsetParent from '../utils/getOffsetParent';\nimport getBoundaries from '../utils/getBoundaries';\nimport getSupportedPropertyName from '../utils/getSupportedPropertyName';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function preventOverflow(data, options) {\n let boundariesElement =\n options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n const transformProp = getSupportedPropertyName('transform');\n const popperStyles = data.instance.popper.style; // assignment to help minification\n const { top, left, [transformProp]: transform } = popperStyles;\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n const boundaries = getBoundaries(\n data.instance.popper,\n data.instance.reference,\n options.padding,\n boundariesElement,\n data.positionFixed\n );\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n const order = options.priority;\n let popper = data.offsets.popper;\n\n const check = {\n primary(placement) {\n let value = popper[placement];\n if (\n popper[placement] < boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return { [placement]: value };\n },\n secondary(placement) {\n const mainSide = placement === 'right' ? 'left' : 'top';\n let value = popper[mainSide];\n if (\n popper[placement] > boundaries[placement] &&\n !options.escapeWithReference\n ) {\n value = Math.min(\n popper[mainSide],\n boundaries[placement] -\n (placement === 'right' ? popper.width : popper.height)\n );\n }\n return { [mainSide]: value };\n },\n };\n\n order.forEach(placement => {\n const side =\n ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = { ...popper, ...check[side](placement) };\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n", "/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function shift(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n const { reference, popper } = data.offsets;\n const isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n const side = isVertical ? 'left' : 'top';\n const measurement = isVertical ? 'width' : 'height';\n\n const shiftOffsets = {\n start: { [side]: reference[side] },\n end: {\n [side]: reference[side] + reference[measurement] - popper[measurement],\n },\n };\n\n data.offsets.popper = { ...popper, ...shiftOffsets[shiftvariation] };\n }\n\n return data;\n}\n", "import isModifierRequired from '../utils/isModifierRequired';\nimport find from '../utils/find';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n const refRect = data.offsets.reference;\n const bound = find(\n data.instance.modifiers,\n modifier => modifier.name === 'preventOverflow'\n ).boundaries;\n\n if (\n refRect.bottom < bound.top ||\n refRect.left > bound.right ||\n refRect.top > bound.bottom ||\n refRect.right < bound.left\n ) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n", "import getClientRect from '../utils/getClientRect';\nimport getOppositePlacement from '../utils/getOppositePlacement';\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nexport default function inner(data) {\n const placement = data.placement;\n const basePlacement = placement.split('-')[0];\n const { popper, reference } = data.offsets;\n const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] =\n reference[basePlacement] -\n (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n", "import applyStyle, { applyStyleOnLoad } from './applyStyle';\nimport computeStyle from './computeStyle';\nimport arrow from './arrow';\nimport flip from './flip';\nimport keepTogether from './keepTogether';\nimport offset from './offset';\nimport preventOverflow from './preventOverflow';\nimport shift from './shift';\nimport hide from './hide';\nimport inner from './inner';\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nexport default {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.<br />\n * It will read the variation of the `placement` property.<br />\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift,\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.<br />\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.<br />\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.<br />\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0,\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.<br />\n * We can say it has \"escaped the boundaries\" \u2014 or just \"escaped\".<br />\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent',\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether,\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]',\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false,\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner,\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide,\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right',\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined,\n },\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n", "import modifiers from '../modifiers/index';\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nexport default {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: () => {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.<br />\n * By default, it is set to no-op.<br />\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: () => {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers,\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n", "// Utils\nimport debounce from './utils/debounce';\nimport isFunction from './utils/isFunction';\n\n// Methods\nimport update from './methods/update';\nimport destroy from './methods/destroy';\nimport enableEventListeners from './methods/enableEventListeners';\nimport disableEventListeners from './methods/disableEventListeners';\nimport Defaults from './methods/defaults';\nimport placements from './methods/placements';\n\nexport default class Popper {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n constructor(reference, popper, options = {}) {\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = { ...Popper.Defaults, ...options };\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: [],\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys({\n ...Popper.Defaults.modifiers,\n ...options.modifiers,\n }).forEach(name => {\n this.options.modifiers[name] = {\n // If it's a built-in modifier, use it as base\n ...(Popper.Defaults.modifiers[name] || {}),\n // If there are custom options, override and merge with default ones\n ...(options.modifiers ? options.modifiers[name] : {}),\n };\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers)\n .map(name => ({\n name,\n ...this.options.modifiers[name],\n }))\n // sort the modifiers by order\n .sort((a, b) => a.order - b.order);\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(modifierOptions => {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(\n this.reference,\n this.popper,\n this.options,\n modifierOptions,\n this.state\n );\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n const eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n update() {\n return update.call(this);\n }\n destroy() {\n return destroy.call(this);\n }\n enableEventListeners() {\n return enableEventListeners.call(this);\n }\n disableEventListeners() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n scheduleUpdate = () => requestAnimationFrame(this.update);\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\n\n static placements = placements;\n\n static Defaults = Defaults;\n}\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n", "export const isBrowser =\n typeof window !== 'undefined' && typeof document !== 'undefined'\n\nconst ua = isBrowser ? navigator.userAgent : ''\n\nexport const isIE = /MSIE |Trident\\//.test(ua)\nexport const isUCBrowser = /UCBrowser\\//.test(ua)\nexport const isIOS =\n isBrowser &&\n /iPhone|iPad|iPod/.test(navigator.platform) &&\n !(window as any).MSStream\n", "import { Props } from './types'\n\nexport const defaultProps: Props = {\n a11y: true,\n allowHTML: true,\n animateFill: true,\n animation: 'shift-away',\n appendTo: () => document.body,\n aria: 'describedby',\n arrow: false,\n arrowType: 'sharp',\n boundary: 'scrollParent',\n content: '',\n delay: 0,\n distance: 10,\n duration: [325, 275],\n flip: true,\n flipBehavior: 'flip',\n flipOnUpdate: false,\n followCursor: false,\n hideOnClick: true,\n ignoreAttributes: false,\n inertia: false,\n interactive: false,\n interactiveBorder: 2,\n interactiveDebounce: 0,\n lazy: true,\n maxWidth: 350,\n multiple: false,\n offset: 0,\n onHidden() {},\n onHide() {},\n onMount() {},\n onShow() {},\n onShown() {},\n onTrigger() {},\n placement: 'top',\n popperOptions: {},\n role: 'tooltip',\n showOnInit: false,\n size: 'regular',\n sticky: false,\n target: '',\n theme: 'dark',\n touch: true,\n touchHold: false,\n trigger: 'mouseenter focus',\n triggerTarget: null,\n updateDuration: 0,\n wait: null,\n zIndex: 9999,\n}\n\n/**\n * If the set() method encounters one of these, the popperInstance must be\n * recreated\n */\nexport const POPPER_INSTANCE_DEPENDENCIES: Array<keyof Props> = [\n 'arrow',\n 'arrowType',\n 'boundary',\n 'distance',\n 'flip',\n 'flipBehavior',\n 'flipOnUpdate',\n 'offset',\n 'placement',\n 'popperOptions',\n]\n", "import { isBrowser } from './browser'\n\nconst elementProto: Record<string, any> = isBrowser ? Element.prototype : {}\n\nexport const matches =\n elementProto.matches ||\n elementProto.matchesSelector ||\n elementProto.webkitMatchesSelector ||\n elementProto.mozMatchesSelector ||\n elementProto.msMatchesSelector\n\n/**\n * Ponyfill for Array.from - converts iterable values to an array\n */\nexport function arrayFrom(value: ArrayLike<any>): any[] {\n return [].slice.call(value)\n}\n\n/**\n * Ponyfill for Element.prototype.closest\n */\nexport function closest(element: Element, selector: string): Element | null {\n return closestCallback(element, (el: Element) => matches.call(el, selector))\n}\n\n/**\n * Works like Element.prototype.closest, but uses a callback instead\n */\nexport function closestCallback(\n element: Element | null,\n callback: Function,\n): Element | null {\n while (element) {\n if (callback(element)) {\n return element\n }\n\n element = element.parentElement\n }\n\n return null\n}\n", "// Passive event listener config\nexport const PASSIVE = { passive: true }\n\n// Popper `preventOverflow` padding\nexport const PADDING = 4\n\n// Popper attributes\n// In Popper v2 these will be `data-*` instead of `x-*` to adhere to HTML5 spec\nexport const PLACEMENT_ATTRIBUTE = 'x-placement'\nexport const OUT_OF_BOUNDARIES_ATTRIBUTE = 'x-out-of-boundaries'\n\n// Classes\nexport const IOS_CLASS = `__NAMESPACE_PREFIX__-iOS`\nexport const ACTIVE_CLASS = `__NAMESPACE_PREFIX__-active`\nexport const POPPER_CLASS = `__NAMESPACE_PREFIX__-popper`\nexport const TOOLTIP_CLASS = `__NAMESPACE_PREFIX__-tooltip`\nexport const CONTENT_CLASS = `__NAMESPACE_PREFIX__-content`\nexport const BACKDROP_CLASS = `__NAMESPACE_PREFIX__-backdrop`\nexport const ARROW_CLASS = `__NAMESPACE_PREFIX__-arrow`\nexport const ROUND_ARROW_CLASS = `__NAMESPACE_PREFIX__-roundarrow`\n\n// Selectors\nexport const POPPER_SELECTOR = `.${POPPER_CLASS}`\nexport const TOOLTIP_SELECTOR = `.${TOOLTIP_CLASS}`\nexport const CONTENT_SELECTOR = `.${CONTENT_CLASS}`\nexport const BACKDROP_SELECTOR = `.${BACKDROP_CLASS}`\nexport const ARROW_SELECTOR = `.${ARROW_CLASS}`\nexport const ROUND_ARROW_SELECTOR = `.${ROUND_ARROW_CLASS}`\n", "import { isIOS } from './browser'\nimport { PASSIVE, IOS_CLASS } from './constants'\n\nexport let isUsingTouch = false\n\nexport function onDocumentTouch(): void {\n if (isUsingTouch) {\n return\n }\n\n isUsingTouch = true\n\n if (isIOS) {\n document.body.classList.add(IOS_CLASS)\n }\n\n if (window.performance) {\n document.addEventListener('mousemove', onDocumentMouseMove)\n }\n}\n\nlet lastMouseMoveTime = 0\nexport function onDocumentMouseMove(): void {\n const now = performance.now()\n\n // Chrome 60+ is 1 mousemove per animation frame, use 20ms time difference\n if (now - lastMouseMoveTime < 20) {\n isUsingTouch = false\n\n document.removeEventListener('mousemove', onDocumentMouseMove)\n\n if (!isIOS) {\n document.body.classList.remove(IOS_CLASS)\n }\n }\n\n lastMouseMoveTime = now\n}\n\nexport function onWindowBlur(): void {\n const { activeElement }: { activeElement: any } = document\n\n if (activeElement && activeElement.blur && activeElement._tippy) {\n activeElement.blur()\n }\n}\n\n/**\n * Adds the needed global event listeners\n */\nexport default function bindGlobalEventListeners(): void {\n document.addEventListener('touchstart', onDocumentTouch, PASSIVE)\n window.addEventListener('blur', onWindowBlur)\n}\n", "import { Props, VirtualReference, ReferenceElement } from './types'\nimport { defaultProps } from './props'\n\nconst keys = Object.keys(defaultProps)\n\n/**\n * Returns an object of optional props from data-tippy-* attributes\n */\nexport function getDataAttributeOptions(\n reference: ReferenceElement | VirtualReference,\n): Props {\n return keys.reduce((acc: any, key) => {\n const valueAsString = (\n reference.getAttribute(`data-tippy-${key}`) || ''\n ).trim()\n\n if (!valueAsString) {\n return acc\n }\n\n if (key === 'content') {\n acc[key] = valueAsString\n } else {\n try {\n acc[key] = JSON.parse(valueAsString)\n } catch (e) {\n acc[key] = valueAsString\n }\n }\n\n return acc\n }, {})\n}\n\n/**\n * Polyfills the virtual reference (plain object) with Element.prototype props\n * Mutating because DOM elements are mutated, adds `_tippy` property\n */\nexport function polyfillElementPrototypeProperties(\n virtualReference: VirtualReference & Record<string, any>,\n): void {\n const polyfills: Record<string, any> = {\n isVirtual: true,\n attributes: virtualReference.attributes || {},\n contains() {},\n setAttribute(key: string, value: any) {\n virtualReference.attributes[key] = value\n },\n getAttribute(key: string) {\n return virtualReference.attributes[key]\n },\n removeAttribute(key: string) {\n delete virtualReference.attributes[key]\n },\n hasAttribute(key: string) {\n return key in virtualReference.attributes\n },\n addEventListener() {},\n removeEventListener() {},\n classList: {\n classNames: {},\n add(key: string) {\n virtualReference.classList.classNames[key] = true\n },\n remove(key: string) {\n delete virtualReference.classList.classNames[key]\n },\n contains(key: string) {\n return key in virtualReference.classList.classNames\n },\n },\n }\n\n for (const key in polyfills) {\n virtualReference[key] = polyfills[key]\n }\n}\n", "import {\n Options,\n Props,\n ReferenceElement,\n Targets,\n VirtualReference,\n} from './types'\nimport { arrayFrom, matches } from './ponyfills'\nimport { isUCBrowser } from './browser'\nimport { getDataAttributeOptions } from './reference'\nimport { POPPER_SELECTOR } from './constants'\n\n/**\n * Determines if a value is a \"bare\" virtual element (before mutations done\n * by `polyfillElementPrototypeProperties()`). JSDOM elements show up as\n * [object Object], we can check if the value is \"element-like\" if it has\n * `addEventListener`\n */\nexport function isBareVirtualElement(value: any): boolean {\n return (\n {}.toString.call(value) === '[object Object]' && !value.addEventListener\n )\n}\n\n/**\n * Determines if the value is a reference element\n */\nexport function isReferenceElement(value: any): value is ReferenceElement {\n return !!value._tippy && !matches.call(value, POPPER_SELECTOR)\n}\n\n/**\n * Safe .hasOwnProperty check, for prototype-less objects\n */\nexport function hasOwnProperty(obj: object, key: string): boolean {\n return {}.hasOwnProperty.call(obj, key)\n}\n\n/**\n * Returns an array of elements based on the value\n */\nexport function getArrayOfElements(value: Targets): Element[] {\n if (isSingular(value)) {\n // TODO: VirtualReference is not compatible to type Element\n return [value as Element]\n }\n\n if (value instanceof NodeList) {\n return arrayFrom(value)\n }\n\n if (Array.isArray(value)) {\n return value\n }\n\n try {\n return arrayFrom(document.querySelectorAll(value))\n } catch (e) {\n return []\n }\n}\n\n/**\n * Returns a value at a given index depending on if it's an array or number\n */\nexport function getValue(value: any, index: number, defaultValue: any): any {\n if (Array.isArray(value)) {\n const v = value[index]\n return v == null ? defaultValue : v\n }\n\n return value\n}\n\n/**\n * Debounce utility. To avoid bloating bundle size, we're only passing 1\n * argument here, a more generic function would pass all arguments. Only\n * `onMouseMove` uses this which takes the event object for now.\n */\nexport function debounce<T>(\n fn: (arg: T) => void,\n ms: number,\n): (arg: T) => void {\n // Avoid wrapping in `setTimeout` if ms is 0 anyway\n if (ms === 0) {\n return fn\n }\n\n let timeout: any\n\n return (arg): void => {\n clearTimeout(timeout)\n timeout = setTimeout((): void => {\n fn(arg)\n }, ms)\n }\n}\n\n/**\n * Prevents errors from being thrown while accessing nested modifier objects\n * in `popperOptions`\n */\nexport function getModifier(obj: any, key: string): any {\n return obj && obj.modifiers && obj.modifiers[key]\n}\n\n/**\n * Determines if an array or string includes a value\n */\nexport function includes(a: any[] | string, b: any): boolean {\n return a.indexOf(b) > -1\n}\n\n/**\n * Determines if the value is a real element\n */\nexport function isRealElement(value: any): value is Element {\n return value instanceof Element\n}\n\n/**\n * Determines if the value is singular-like\n */\nexport function isSingular(value: any): value is VirtualReference | Element {\n return !!(value && hasOwnProperty(value, 'isVirtual')) || isRealElement(value)\n}\n\n/**\n * Firefox extensions don't allow setting .innerHTML directly, this will trick it\n */\nexport function innerHTML(): 'innerHTML' {\n return 'innerHTML'\n}\n\n/**\n * Evaluates a function if one, or returns the value\n */\nexport function invokeWithArgsOrReturn(value: any, args: any[]): any {\n return typeof value === 'function' ? value.apply(null, args) : value\n}\n\n/**\n * Sets a popperInstance `flip` modifier's enabled state\n */\nexport function setFlipModifierEnabled(modifiers: any[], value: any): void {\n modifiers.filter(m => m.name === 'flip')[0].enabled = value\n}\n\n/**\n * Determines if an element can receive focus\n * Always returns true for virtual objects\n */\nexport function canReceiveFocus(element: Element | VirtualReference): boolean {\n return isRealElement(element)\n ? matches.call(\n element,\n 'a[href],area[href],button,details,input,textarea,select,iframe,[tabindex]',\n ) && !element.hasAttribute('disabled')\n : true\n}\n\n/**\n * Returns a new `div` element\n */\nexport function div(): HTMLDivElement {\n return document.createElement('div')\n}\n\n/**\n * Applies a transition duration to a list of elements\n */\nexport function setTransitionDuration(\n els: (HTMLDivElement | null)[],\n value: number,\n): void {\n els.forEach(el => {\n if (el) {\n el.style.transitionDuration = `${value}ms`\n }\n })\n}\n\n/**\n * Sets the visibility state to elements so they can begin to transition\n */\nexport function setVisibilityState(\n els: (HTMLDivElement | null)[],\n state: 'visible' | 'hidden',\n): void {\n els.forEach(el => {\n if (el) {\n el.setAttribute('data-state', state)\n }\n })\n}\n\n/**\n * Evaluates the props object by merging data attributes and\n * disabling conflicting options where necessary\n */\nexport function evaluateProps(\n reference: ReferenceElement | VirtualReference,\n props: Props,\n): Props {\n const out = {\n ...props,\n content: invokeWithArgsOrReturn(props.content, [reference]),\n ...(props.ignoreAttributes ? {} : getDataAttributeOptions(reference)),\n }\n\n if (out.arrow || isUCBrowser) {\n out.animateFill = false\n }\n\n return out\n}\n\n/**\n * Validates an object of options with the valid default props object\n */\nexport function validateOptions(options: Options, defaultProps: Props): void {\n Object.keys(options).forEach(option => {\n if (!hasOwnProperty(defaultProps, option)) {\n throw new Error(`[tippy]: \\`${option}\\` is not a valid option`)\n }\n })\n}\n", "import {\n PopperElement,\n Props,\n PopperChildren,\n HideAllOptions,\n BasicPlacement,\n} from './types'\nimport { arrayFrom } from './ponyfills'\nimport { innerHTML, div, isReferenceElement, isRealElement } from './utils'\nimport { isUCBrowser } from './browser'\nimport {\n POPPER_CLASS,\n TOOLTIP_CLASS,\n BACKDROP_CLASS,\n CONTENT_CLASS,\n ARROW_CLASS,\n ROUND_ARROW_CLASS,\n POPPER_SELECTOR,\n TOOLTIP_SELECTOR,\n BACKDROP_SELECTOR,\n CONTENT_SELECTOR,\n ARROW_SELECTOR,\n ROUND_ARROW_SELECTOR,\n PLACEMENT_ATTRIBUTE,\n} from './constants'\n\n/**\n * Sets the innerHTML of an element\n */\nexport function setInnerHTML(element: Element, html: string | Element): void {\n element[innerHTML()] = isRealElement(html) ? html[innerHTML()] : html\n}\n\n/**\n * Sets the content of a tooltip\n */\nexport function setContent(\n contentEl: PopperChildren['content'],\n props: Props,\n): void {\n if (isRealElement(props.content)) {\n setInnerHTML(contentEl, '')\n contentEl.appendChild(props.content)\n } else if (typeof props.content !== 'function') {\n const key: 'innerHTML' | 'textContent' = props.allowHTML\n ? 'innerHTML'\n : 'textContent'\n contentEl[key] = props.content\n }\n}\n\n/**\n * Returns the child elements of a popper element\n */\nexport function getChildren(popper: PopperElement): PopperChildren {\n return {\n tooltip: popper.querySelector(TOOLTIP_SELECTOR) as HTMLDivElement,\n backdrop: popper.querySelector(BACKDROP_SELECTOR),\n content: popper.querySelector(CONTENT_SELECTOR) as HTMLDivElement,\n arrow:\n popper.querySelector(ARROW_SELECTOR) ||\n popper.querySelector(ROUND_ARROW_SELECTOR),\n }\n}\n\n/**\n * Adds `data-inertia` attribute\n */\nexport function addInertia(tooltip: PopperChildren['tooltip']): void {\n tooltip.setAttribute('data-inertia', '')\n}\n\n/**\n * Removes `data-inertia` attribute\n */\nexport function removeInertia(tooltip: PopperChildren['tooltip']): void {\n tooltip.removeAttribute('data-inertia')\n}\n\n/**\n * Creates an arrow element and returns it\n */\nexport function createArrowElement(\n arrowType: Props['arrowType'],\n): HTMLDivElement {\n const arrow = div()\n if (arrowType === 'round') {\n arrow.className = ROUND_ARROW_CLASS\n setInnerHTML(\n arrow,\n '<svg viewBox=\"0 0 18 7\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 7s2.021-.015 5.253-4.218C6.584 1.051 7.797.007 9 0c1.203-.007 2.416 1.035 3.761 2.782C16.012 7.005 18 7 18 7H0z\"/></svg>',\n )\n } else {\n arrow.className = ARROW_CLASS\n }\n return arrow\n}\n\n/**\n * Creates a backdrop element and returns it\n */\nexport function createBackdropElement(): HTMLDivElement {\n const backdrop = div()\n backdrop.className = BACKDROP_CLASS\n backdrop.setAttribute('data-state', 'hidden')\n return backdrop\n}\n\n/**\n * Adds interactive-related attributes\n */\nexport function addInteractive(\n popper: PopperElement,\n tooltip: PopperChildren['tooltip'],\n): void {\n popper.setAttribute('tabindex', '-1')\n tooltip.setAttribute('data-interactive', '')\n}\n\n/**\n * Removes interactive-related attributes\n */\nexport function removeInteractive(\n popper: PopperElement,\n tooltip: PopperChildren['tooltip'],\n): void {\n popper.removeAttribute('tabindex')\n tooltip.removeAttribute('data-interactive')\n}\n\n/**\n * Add/remove transitionend listener from tooltip\n */\nexport function updateTransitionEndListener(\n tooltip: PopperChildren['tooltip'],\n action: 'add' | 'remove',\n listener: (event: TransitionEvent) => void,\n): void {\n // UC Browser hasn't adopted the `transitionend` event despite supporting\n // unprefixed transitions...\n const eventName =\n isUCBrowser && document.body.style.webkitTransition !== undefined\n ? 'webkitTransitionEnd'\n : 'transitionend'\n tooltip[\n (action + 'EventListener') as 'addEventListener' | 'removeEventListener'\n ](eventName, listener as EventListener)\n}\n\n/**\n * Returns the popper's placement, ignoring shifting (top-start, etc)\n */\nexport function getBasicPlacement(popper: PopperElement): BasicPlacement {\n const fullPlacement = popper.getAttribute(PLACEMENT_ATTRIBUTE)\n return (fullPlacement ? fullPlacement.split('-')[0] : '') as BasicPlacement\n}\n\n/**\n * Triggers reflow\n */\nexport function reflow(popper: PopperElement): void {\n void popper.offsetHeight\n}\n\n/**\n * Adds/removes theme from tooltip's classList\n */\nexport function updateTheme(\n tooltip: PopperChildren['tooltip'],\n action: 'add' | 'remove',\n theme: Props['theme'],\n): void {\n theme.split(' ').forEach(themeName => {\n tooltip.classList[action](themeName + '-theme')\n })\n}\n\n/**\n * Constructs the popper element and returns it\n */\nexport function createPopperElement(id: number, props: Props): PopperElement {\n const popper = div()\n popper.className = POPPER_CLASS\n popper.id = `__NAMESPACE_PREFIX__-${id}`\n popper.style.zIndex = '' + props.zIndex\n popper.style.position = 'absolute'\n popper.style.top = '0'\n popper.style.left = '0'\n\n if (props.role) {\n popper.setAttribute('role', props.role)\n }\n\n const tooltip = div()\n tooltip.className = TOOLTIP_CLASS\n tooltip.style.maxWidth =\n props.maxWidth + (typeof props.maxWidth === 'number' ? 'px' : '')\n tooltip.setAttribute('data-size', props.size)\n tooltip.setAttribute('data-animation', props.animation)\n tooltip.setAttribute('data-state', 'hidden')\n updateTheme(tooltip, 'add', props.theme)\n\n const content = div()\n content.className = CONTENT_CLASS\n content.setAttribute('data-state', 'hidden')\n\n if (props.interactive) {\n addInteractive(popper, tooltip)\n }\n\n if (props.arrow) {\n tooltip.appendChild(createArrowElement(props.arrowType))\n }\n\n if (props.animateFill) {\n tooltip.appendChild(createBackdropElement())\n tooltip.setAttribute('data-animatefill', '')\n }\n\n if (props.inertia) {\n addInertia(tooltip)\n }\n\n setContent(content, props)\n\n tooltip.appendChild(content)\n popper.appendChild(tooltip)\n\n return popper\n}\n\n/**\n * Updates the popper element based on the new props\n */\nexport function updatePopperElement(\n popper: PopperElement,\n prevProps: Props,\n nextProps: Props,\n): void {\n const { tooltip, content, backdrop, arrow } = getChildren(popper)\n\n popper.style.zIndex = '' + nextProps.zIndex\n tooltip.setAttribute('data-size', nextProps.size)\n tooltip.setAttribute('data-animation', nextProps.animation)\n tooltip.style.maxWidth =\n nextProps.maxWidth + (typeof nextProps.maxWidth === 'number' ? 'px' : '')\n\n if (nextProps.role) {\n popper.setAttribute('role', nextProps.role)\n } else {\n popper.removeAttribute('role')\n }\n\n if (prevProps.content !== nextProps.content) {\n setContent(content, nextProps)\n }\n\n // animateFill\n if (!prevProps.animateFill && nextProps.animateFill) {\n tooltip.appendChild(createBackdropElement())\n tooltip.setAttribute('data-animatefill', '')\n } else if (prevProps.animateFill && !nextProps.animateFill) {\n tooltip.removeChild(backdrop!)\n tooltip.removeAttribute('data-animatefill')\n }\n\n // arrow\n if (!prevProps.arrow && nextProps.arrow) {\n tooltip.appendChild(createArrowElement(nextProps.arrowType))\n } else if (prevProps.arrow && !nextProps.arrow) {\n tooltip.removeChild(arrow!)\n }\n\n // arrowType\n if (\n prevProps.arrow &&\n nextProps.arrow &&\n prevProps.arrowType !== nextProps.arrowType\n ) {\n tooltip.replaceChild(createArrowElement(nextProps.arrowType), arrow!)\n }\n\n // interactive\n if (!prevProps.interactive && nextProps.interactive) {\n addInteractive(popper, tooltip)\n } else if (prevProps.interactive && !nextProps.interactive) {\n removeInteractive(popper, tooltip)\n }\n\n // inertia\n if (!prevProps.inertia && nextProps.inertia) {\n addInertia(tooltip)\n } else if (prevProps.inertia && !nextProps.inertia) {\n removeInertia(tooltip)\n }\n\n // theme\n if (prevProps.theme !== nextProps.theme) {\n updateTheme(tooltip, 'remove', prevProps.theme)\n updateTheme(tooltip, 'add', nextProps.theme)\n }\n}\n\n/**\n * Hides all visible poppers on the document\n */\nexport function hideAll({\n exclude: excludedReferenceOrInstance,\n duration,\n}: HideAllOptions = {}): void {\n arrayFrom(document.querySelectorAll(POPPER_SELECTOR)).forEach(\n (popper: PopperElement) => {\n const instance = popper._tippy\n\n if (instance) {\n let isExcluded = false\n if (excludedReferenceOrInstance) {\n isExcluded = isReferenceElement(excludedReferenceOrInstance)\n ? instance.reference === excludedReferenceOrInstance\n : popper === excludedReferenceOrInstance.popper\n }\n\n if (!isExcluded) {\n instance.hide(duration)\n }\n }\n },\n )\n}\n\n/**\n * Determines if the mouse cursor is outside of the popper's interactive border\n * region\n */\nexport function isCursorOutsideInteractiveBorder(\n popperPlacement: BasicPlacement,\n popperRect: ClientRect,\n event: MouseEvent,\n props: Props,\n): boolean {\n if (!popperPlacement) {\n return true\n }\n\n const { clientX: x, clientY: y } = event\n const { interactiveBorder, distance } = props\n\n const exceedsTop =\n popperRect.top - y >\n (popperPlacement === 'top'\n ? interactiveBorder + distance\n : interactiveBorder)\n\n const exceedsBottom =\n y - popperRect.bottom >\n (popperPlacement === 'bottom'\n ? interactiveBorder + distance\n : interactiveBorder)\n\n const exceedsLeft =\n popperRect.left - x >\n (popperPlacement === 'left'\n ? interactiveBorder + distance\n : interactiveBorder)\n\n const exceedsRight =\n x - popperRect.right >\n (popperPlacement === 'right'\n ? interactiveBorder + distance\n : interactiveBorder)\n\n return exceedsTop || exceedsBottom || exceedsLeft || exceedsRight\n}\n\n/**\n * Returns the distance offset, taking into account the default offset due to\n * the transform: translate() rule (10px) in CSS\n */\nexport function getOffsetDistanceInPx(distance: number): string {\n return -(distance - 10) + 'px'\n}\n", "import Popper from 'popper.js'\nimport {\n ReferenceElement,\n PopperInstance,\n Props,\n Options,\n Instance,\n Content,\n Listener,\n VirtualReference,\n} from './types'\nimport { isIE } from './browser'\nimport { closest, closestCallback, arrayFrom } from './ponyfills'\nimport {\n PASSIVE,\n PADDING,\n PLACEMENT_ATTRIBUTE,\n OUT_OF_BOUNDARIES_ATTRIBUTE,\n ACTIVE_CLASS,\n POPPER_SELECTOR,\n} from './constants'\nimport { isUsingTouch } from './bindGlobalEventListeners'\nimport { defaultProps, POPPER_INSTANCE_DEPENDENCIES } from './props'\nimport {\n createPopperElement,\n updatePopperElement,\n getChildren,\n getBasicPlacement,\n updateTransitionEndListener,\n isCursorOutsideInteractiveBorder,\n getOffsetDistanceInPx,\n reflow,\n} from './popper'\nimport {\n hasOwnProperty,\n debounce,\n getValue,\n getModifier,\n includes,\n invokeWithArgsOrReturn,\n setFlipModifierEnabled,\n canReceiveFocus,\n validateOptions,\n evaluateProps,\n setTransitionDuration,\n setVisibilityState,\n isRealElement,\n} from './utils'\n\nlet idCounter = 1\n// Workaround for IE11's lack of new MouseEvent constructor\nlet mouseMoveListeners: ((event: MouseEvent) => void)[] = []\n\n/**\n * Creates and returns a Tippy object. We're using a closure pattern instead of\n * a class so that the exposed object API is clean without private members\n * prefixed with `_`.\n */\nexport default function createTippy(\n reference: ReferenceElement | VirtualReference,\n collectionProps: Props,\n): Instance | null {\n const props = evaluateProps(reference, collectionProps)\n\n // If the reference shouldn't have multiple tippys, return null early\n if (!props.multiple && reference._tippy) {\n return null\n }\n\n /* ======================= \uD83D\uDD12 Private members \uD83D\uDD12 ======================= */\n let lastTriggerEventType: string\n let lastMouseMoveEvent: MouseEvent\n let showTimeoutId: number\n let hideTimeoutId: number\n let scheduleHideAnimationFrameId: number\n let isScheduledToShow = false\n let isBeingDestroyed = false\n let previousPlacement: string\n let wasVisibleDuringPreviousUpdate = false\n let hasMountCallbackRun = false\n let currentMountCallback: () => void\n let currentTransitionEndListener: (event: TransitionEvent) => void\n let listeners: Listener[] = []\n let currentComputedPadding: {\n top: number\n bottom: number\n left: number\n right: number\n [key: string]: number\n }\n let debouncedOnMouseMove = debounce(onMouseMove, props.interactiveDebounce)\n\n /* ======================= \uD83D\uDD11 Public members \uD83D\uDD11 ======================= */\n const id = idCounter++\n const popper = createPopperElement(id, props)\n const popperChildren = getChildren(popper)\n const popperInstance: PopperInstance | null = null\n\n const state = {\n // Is the instance currently enabled?\n isEnabled: true,\n // Is the tippy currently showing and not transitioning out?\n isVisible: false,\n // Has the instance been destroyed?\n isDestroyed: false,\n // Is the tippy currently mounted to the DOM?\n isMounted: false,\n // Has the tippy finished transitioning in?\n isShown: false,\n }\n\n const instance: Instance = {\n // properties\n id,\n reference,\n popper,\n popperChildren,\n popperInstance,\n props,\n state,\n // methods\n clearDelayTimeouts,\n set,\n setContent,\n show,\n hide,\n enable,\n disable,\n destroy,\n }\n\n /* ==================== Initial instance mutations =================== */\n reference._tippy = instance\n popper._tippy = instance\n\n addTriggersToReference()\n\n if (!props.lazy) {\n createPopperInstance()\n }\n\n if (props.showOnInit) {\n scheduleShow()\n }\n\n // Ensure the event listeners target can receive focus\n if (\n props.a11y &&\n !props.target &&\n !canReceiveFocus(getEventListenersTarget())\n ) {\n getEventListenersTarget().setAttribute('tabindex', '0')\n }\n\n // Prevent a tippy with a delay from hiding if the cursor left then returned\n // before it started hiding\n popper.addEventListener('mouseenter', (event: MouseEvent) => {\n if (\n instance.props.interactive &&\n instance.state.isVisible &&\n lastTriggerEventType === 'mouseenter'\n ) {\n // We don't want props.onTrigger() to be called here, since the `event`\n // object is not related to the reference element\n scheduleShow(event, true)\n }\n })\n popper.addEventListener('mouseleave', () => {\n if (instance.props.interactive && lastTriggerEventType === 'mouseenter') {\n document.addEventListener('mousemove', debouncedOnMouseMove)\n }\n })\n\n return instance\n\n /* ======================= \uD83D\uDD12 Private methods \uD83D\uDD12 ======================= */\n /**\n * Removes the follow cursor listener\n */\n function removeFollowCursorListener(): void {\n document.removeEventListener(\n 'mousemove',\n positionVirtualReferenceNearCursor,\n )\n }\n\n /**\n * Cleans up interactive mouse listeners\n */\n function cleanupInteractiveMouseListeners(): void {\n document.body.removeEventListener('mouseleave', scheduleHide)\n document.removeEventListener('mousemove', debouncedOnMouseMove)\n mouseMoveListeners = mouseMoveListeners.filter(\n (listener): boolean => listener !== debouncedOnMouseMove,\n )\n }\n\n /**\n * Returns correct target used for event listeners\n */\n function getEventListenersTarget(): ReferenceElement | VirtualReference {\n return instance.props.triggerTarget || reference\n }\n\n /**\n * Adds the document click event listener for the instance\n */\n function addDocumentClickListener(): void {\n document.addEventListener('click', onDocumentClick, true)\n }\n\n /**\n * Removes the document click event listener for the instance\n */\n function removeDocumentClickListener(): void {\n document.removeEventListener('click', onDocumentClick, true)\n }\n\n /**\n * Returns transitionable inner elements used in show/hide methods\n */\n function getTransitionableElements(): (HTMLDivElement | null)[] {\n return [\n instance.popperChildren.tooltip,\n instance.popperChildren.backdrop,\n instance.popperChildren.content,\n ]\n }\n\n /**\n * Determines if the instance is in `followCursor` mode.\n * NOTE: in v5, touch devices will use `initial` behavior no matter the value.\n */\n function getIsInLooseFollowCursorMode(): boolean {\n const { followCursor } = instance.props\n return (\n (followCursor && lastTriggerEventType !== 'focus') ||\n (isUsingTouch && followCursor === 'initial')\n )\n }\n\n /**\n * Updates the tooltip's position on each animation frame\n */\n function makeSticky(): void {\n setTransitionDuration([popper], isIE ? 0 : instance.props.updateDuration)\n\n let prevRefRect = reference.getBoundingClientRect()\n\n function updatePosition(): void {\n const currentRefRect = reference.getBoundingClientRect()\n\n // Only schedule an update if the reference rect has changed\n if (\n prevRefRect.top !== currentRefRect.top ||\n prevRefRect.right !== currentRefRect.right ||\n prevRefRect.bottom !== currentRefRect.bottom ||\n prevRefRect.left !== currentRefRect.left\n ) {\n instance.popperInstance!.scheduleUpdate()\n }\n\n prevRefRect = currentRefRect\n\n if (instance.state.isMounted) {\n requestAnimationFrame(updatePosition)\n }\n }\n\n updatePosition()\n }\n\n /**\n * Invokes a callback once the tooltip has fully transitioned out\n */\n function onTransitionedOut(duration: number, callback: () => void): void {\n onTransitionEnd(duration, () => {\n if (\n !instance.state.isVisible &&\n popper.parentNode &&\n popper.parentNode.contains(popper)\n ) {\n callback()\n }\n })\n }\n\n /**\n * Invokes a callback once the tooltip has fully transitioned in\n */\n function onTransitionedIn(duration: number, callback: () => void): void {\n onTransitionEnd(duration, callback)\n }\n\n /**\n * Invokes a callback once the tooltip's CSS transition ends\n */\n function onTransitionEnd(duration: number, callback: () => void): void {\n const { tooltip } = instance.popperChildren\n\n /**\n * Listener added as the `transitionend` handler\n */\n function listener(event: TransitionEvent): void {\n if (event.target === tooltip) {\n updateTransitionEndListener(tooltip, 'remove', listener)\n callback()\n }\n }\n\n // Make callback synchronous if duration is 0\n // `transitionend` won't fire otherwise\n if (duration === 0) {\n return callback()\n }\n\n updateTransitionEndListener(tooltip, 'remove', currentTransitionEndListener)\n updateTransitionEndListener(tooltip, 'add', listener)\n\n currentTransitionEndListener = listener\n }\n\n /**\n * Adds an event listener to the reference and stores it in `listeners`\n */\n function on(\n eventType: string,\n handler: EventListener,\n options: boolean | object = false,\n ): void {\n getEventListenersTarget().addEventListener(eventType, handler, options)\n listeners.push({ eventType, handler, options })\n }\n\n /**\n * Adds event listeners to the reference based on the `trigger` prop\n */\n function addTriggersToReference(): void {\n if (instance.props.touchHold && !instance.props.target) {\n on('touchstart', onTrigger, PASSIVE)\n on('touchend', onMouseLeave as EventListener, PASSIVE)\n }\n\n instance.props.trigger\n .trim()\n .split(' ')\n .forEach(eventType => {\n if (eventType === 'manual') {\n return\n }\n\n // Non-delegates\n if (!instance.props.target) {\n on(eventType, onTrigger)\n switch (eventType) {\n case 'mouseenter':\n on('mouseleave', onMouseLeave as EventListener)\n break\n case 'focus':\n on(isIE ? 'focusout' : 'blur', onBlur as EventListener)\n break\n }\n } else {\n // Delegates\n switch (eventType) {\n case 'mouseenter':\n on('mouseover', onDelegateShow)\n on('mouseout', onDelegateHide)\n break\n case 'focus':\n on('focusin', onDelegateShow)\n on('focusout', onDelegateHide)\n break\n case 'click':\n on(eventType, onDelegateShow)\n break\n }\n }\n })\n }\n\n /**\n * Removes event listeners from the reference\n */\n function removeTriggersFromReference(): void {\n listeners.forEach(({ eventType, handler, options }: Listener) => {\n getEventListenersTarget().removeEventListener(eventType, handler, options)\n })\n listeners = []\n }\n\n /**\n * Positions the virtual reference near the cursor\n */\n function positionVirtualReferenceNearCursor(event: MouseEvent): void {\n const { clientX: x, clientY: y } = (lastMouseMoveEvent = event)\n\n // Gets set once popperInstance `onCreate` has been called\n if (!currentComputedPadding) {\n return\n }\n\n // If the instance is interactive, avoid updating the position unless it's\n // over the reference element\n const isCursorOverReference = closestCallback(\n event.target as Element,\n (el: Element): boolean => el === reference,\n )\n\n const rect = reference.getBoundingClientRect()\n const { followCursor } = instance.props\n const isHorizontal = followCursor === 'horizontal'\n const isVertical = followCursor === 'vertical'\n\n // The virtual reference needs some size to prevent itself from overflowing\n const isVerticalPlacement = includes(\n ['top', 'bottom'],\n getBasicPlacement(popper),\n )\n const fullPlacement = popper.getAttribute(PLACEMENT_ATTRIBUTE)\n const isVariation = fullPlacement ? !!fullPlacement.split('-')[1] : false\n const size = isVerticalPlacement ? popper.offsetWidth : popper.offsetHeight\n const halfSize = size / 2\n const verticalIncrease = isVerticalPlacement\n ? 0\n : isVariation\n ? size\n : halfSize\n const horizontalIncrease = isVerticalPlacement\n ? isVariation\n ? size\n : halfSize\n : 0\n\n if (isCursorOverReference || !instance.props.interactive) {\n instance.popperInstance!.reference = {\n ...instance.popperInstance!.reference,\n // This will exist in next Popper.js feature release to fix #532\n // @ts-ignore\n referenceNode: reference,\n // These `client` values don't get used by Popper.js if they are 0\n clientWidth: 0,\n clientHeight: 0,\n getBoundingClientRect: (): DOMRect | ClientRect => ({\n width: isVerticalPlacement ? size : 0,\n height: isVerticalPlacement ? 0 : size,\n top: (isHorizontal ? rect.top : y) - verticalIncrease,\n bottom: (isHorizontal ? rect.bottom : y) + verticalIncrease,\n left: (isVertical ? rect.left : x) - horizontalIncrease,\n right: (isVertical ? rect.right : x) + horizontalIncrease,\n }),\n }\n\n instance.popperInstance!.update()\n }\n\n if (followCursor === 'initial' && instance.state.isVisible) {\n removeFollowCursorListener()\n }\n }\n\n /**\n * Creates the tippy instance for a delegate when it's been triggered\n */\n function createDelegateChildTippy(event?: Event): void {\n if (event) {\n const targetEl: ReferenceElement | null = closest(\n event.target as Element,\n instance.props.target,\n )\n\n if (targetEl && !targetEl._tippy) {\n createTippy(targetEl, {\n ...instance.props,\n content: invokeWithArgsOrReturn(collectionProps.content, [targetEl]),\n appendTo: collectionProps.appendTo,\n target: '',\n showOnInit: true,\n })\n }\n }\n }\n\n /**\n * Event listener invoked upon trigger\n */\n function onTrigger(event: Event): void {\n if (!instance.state.isEnabled || isEventListenerStopped(event)) {\n return\n }\n\n if (!instance.state.isVisible) {\n lastTriggerEventType = event.type\n\n if (event instanceof MouseEvent) {\n lastMouseMoveEvent = event\n\n // If scrolling, `mouseenter` events can be fired if the cursor lands\n // over a new target, but `mousemove` events don't get fired. This\n // causes interactive tooltips to get stuck open until the cursor is\n // moved\n mouseMoveListeners.forEach((listener): void => listener(event))\n }\n }\n\n // Toggle show/hide when clicking click-triggered tooltips\n if (\n event.type === 'click' &&\n instance.props.hideOnClick !== false &&\n instance.state.isVisible\n ) {\n scheduleHide()\n } else {\n scheduleShow(event)\n }\n }\n\n /**\n * Event listener used for interactive tooltips to detect when they should\n * hide\n */\n function onMouseMove(event: MouseEvent): void {\n const isCursorOverPopper =\n closest(event.target as Element, POPPER_SELECTOR) === popper\n const isCursorOverReference = closestCallback(\n event.target as Element,\n (el: Element) => el === reference,\n )\n\n if (isCursorOverPopper || isCursorOverReference) {\n return\n }\n\n if (\n isCursorOutsideInteractiveBorder(\n getBasicPlacement(popper),\n popper.getBoundingClientRect(),\n event,\n instance.props,\n )\n ) {\n cleanupInteractiveMouseListeners()\n scheduleHide()\n }\n }\n\n /**\n * Event listener invoked upon mouseleave\n */\n function onMouseLeave(event: MouseEvent): void {\n if (isEventListenerStopped(event)) {\n return\n }\n\n if (instance.props.interactive) {\n document.body.addEventListener('mouseleave', scheduleHide)\n document.addEventListener('mousemove', debouncedOnMouseMove)\n mouseMoveListeners.push(debouncedOnMouseMove)\n\n return\n }\n\n scheduleHide()\n }\n\n /**\n * Event listener invoked upon blur\n */\n function onBlur(event: FocusEvent): void {\n if (event.target !== getEventListenersTarget()) {\n return\n }\n\n if (\n instance.props.interactive &&\n event.relatedTarget &&\n popper.contains(event.relatedTarget as Element)\n ) {\n return\n }\n\n scheduleHide()\n }\n\n /**\n * Event listener invoked when a child target is triggered\n */\n function onDelegateShow(event: Event): void {\n if (closest(event.target as Element, instance.props.target)) {\n scheduleShow(event)\n }\n }\n\n /**\n * Event listener invoked when a child target should hide\n */\n function onDelegateHide(event: Event): void {\n if (closest(event.target as Element, instance.props.target)) {\n scheduleHide()\n }\n }\n\n /**\n * Determines if an event listener should stop further execution due to the\n * `touchHold` option\n */\n function isEventListenerStopped(event: Event): boolean {\n const supportsTouch = 'ontouchstart' in window\n const isTouchEvent = includes(event.type, 'touch')\n const { touchHold } = instance.props\n\n return (\n (supportsTouch && isUsingTouch && touchHold && !isTouchEvent) ||\n (isUsingTouch && !touchHold && isTouchEvent)\n )\n }\n\n /**\n * Runs the mount callback\n */\n function runMountCallback(): void {\n if (!hasMountCallbackRun && currentMountCallback) {\n hasMountCallbackRun = true\n reflow(popper)\n currentMountCallback()\n }\n }\n\n /**\n * Creates the popper instance for the instance\n */\n function createPopperInstance(): void {\n const { popperOptions } = instance.props\n const { tooltip, arrow } = instance.popperChildren\n const preventOverflowModifier = getModifier(\n popperOptions,\n 'preventOverflow',\n )\n\n function applyMutations(data: Popper.Data): void {\n if (instance.props.flip && !instance.props.flipOnUpdate) {\n if (data.flipped) {\n instance.popperInstance!.options.placement = data.placement\n }\n\n setFlipModifierEnabled(instance.popperInstance!.modifiers, false)\n }\n\n // Apply all of the popper's attributes to the tootip node as well.\n // Allows users to avoid using the .tippy-popper selector for themes.\n tooltip.setAttribute(PLACEMENT_ATTRIBUTE, data.placement)\n\n if (data.attributes[OUT_OF_BOUNDARIES_ATTRIBUTE] !== false) {\n tooltip.setAttribute(OUT_OF_BOUNDARIES_ATTRIBUTE, '')\n } else {\n tooltip.removeAttribute(OUT_OF_BOUNDARIES_ATTRIBUTE)\n }\n\n // Prevents a transition when changing placements (while tippy is visible)\n // for scroll/resize updates\n if (\n previousPlacement &&\n previousPlacement !== data.placement &&\n wasVisibleDuringPreviousUpdate\n ) {\n tooltip.style.transition = 'none'\n requestAnimationFrame(() => {\n tooltip.style.transition = ''\n })\n }\n previousPlacement = data.placement\n wasVisibleDuringPreviousUpdate = instance.state.isVisible\n\n const basicPlacement = getBasicPlacement(popper)\n const styles = tooltip.style\n\n // Account for the `distance` offset\n styles.top = styles.bottom = styles.left = styles.right = ''\n styles[basicPlacement] = getOffsetDistanceInPx(instance.props.distance)\n\n const padding =\n preventOverflowModifier && preventOverflowModifier.padding !== undefined\n ? preventOverflowModifier.padding\n : PADDING\n const isPaddingNumber = typeof padding === 'number'\n\n const computedPadding = {\n top: isPaddingNumber ? padding : padding.top,\n bottom: isPaddingNumber ? padding : padding.bottom,\n left: isPaddingNumber ? padding : padding.left,\n right: isPaddingNumber ? padding : padding.right,\n ...(!isPaddingNumber && padding),\n }\n\n computedPadding[basicPlacement] = isPaddingNumber\n ? padding + instance.props.distance\n : (padding[basicPlacement] || 0) + instance.props.distance\n\n instance.popperInstance!.modifiers.filter(\n m => m.name === 'preventOverflow',\n )[0].padding = computedPadding\n\n currentComputedPadding = computedPadding\n }\n\n const config = {\n eventsEnabled: false,\n placement: instance.props.placement,\n ...popperOptions,\n modifiers: {\n ...(popperOptions ? popperOptions.modifiers : {}),\n preventOverflow: {\n boundariesElement: instance.props.boundary,\n padding: PADDING,\n ...preventOverflowModifier,\n },\n arrow: {\n element: arrow,\n enabled: !!arrow,\n ...getModifier(popperOptions, 'arrow'),\n },\n flip: {\n enabled: instance.props.flip,\n // The tooltip is offset by 10px from the popper in CSS,\n // we need to account for its distance\n padding: instance.props.distance + PADDING,\n behavior: instance.props.flipBehavior,\n ...getModifier(popperOptions, 'flip'),\n },\n offset: {\n offset: instance.props.offset,\n ...getModifier(popperOptions, 'offset'),\n },\n },\n onCreate(data: Popper.Data) {\n applyMutations(data)\n runMountCallback()\n\n if (popperOptions && popperOptions.onCreate) {\n popperOptions.onCreate(data)\n }\n },\n onUpdate(data: Popper.Data) {\n applyMutations(data)\n runMountCallback()\n\n if (popperOptions && popperOptions.onUpdate) {\n popperOptions.onUpdate(data)\n }\n },\n }\n\n instance.popperInstance = new Popper(\n reference,\n popper,\n config,\n ) as PopperInstance\n }\n\n /**\n * Mounts the tooltip to the DOM\n */\n function mount(): void {\n hasMountCallbackRun = false\n\n const isInLooseFollowCursorMode = getIsInLooseFollowCursorMode()\n\n if (instance.popperInstance) {\n setFlipModifierEnabled(\n instance.popperInstance.modifiers,\n instance.props.flip,\n )\n\n if (!isInLooseFollowCursorMode) {\n instance.popperInstance.reference = reference\n instance.popperInstance.enableEventListeners()\n }\n\n instance.popperInstance.scheduleUpdate()\n } else {\n createPopperInstance()\n\n if (!isInLooseFollowCursorMode) {\n instance.popperInstance!.enableEventListeners()\n }\n }\n\n const { appendTo } = instance.props\n const parentNode =\n appendTo === 'parent'\n ? reference.parentNode\n : invokeWithArgsOrReturn(appendTo, [reference])\n\n if (!parentNode.contains(popper)) {\n parentNode.appendChild(popper)\n instance.props.onMount(instance)\n instance.state.isMounted = true\n }\n }\n\n /**\n * Setup before show() is invoked (delays, etc.)\n */\n function scheduleShow(\n event?: Event,\n shouldAvoidCallingOnTrigger?: boolean,\n ): void {\n clearDelayTimeouts()\n\n if (instance.state.isVisible) {\n return\n }\n\n // Is a delegate, create an instance for the child target\n if (instance.props.target) {\n return createDelegateChildTippy(event)\n }\n\n isScheduledToShow = true\n\n if (event && !shouldAvoidCallingOnTrigger) {\n instance.props.onTrigger(instance, event)\n }\n\n if (instance.props.wait) {\n return instance.props.wait(instance, event)\n }\n\n // If the tooltip has a delay, we need to be listening to the mousemove as\n // soon as the trigger event is fired, so that it's in the correct position\n // upon mount.\n // Edge case: if the tooltip is still mounted, but then scheduleShow() is\n // called, it causes a jump.\n if (getIsInLooseFollowCursorMode() && !instance.state.isMounted) {\n if (!instance.popperInstance) {\n createPopperInstance()\n }\n\n document.addEventListener('mousemove', positionVirtualReferenceNearCursor)\n }\n\n addDocumentClickListener()\n\n const delay = getValue(instance.props.delay, 0, defaultProps.delay)\n\n if (delay) {\n showTimeoutId = setTimeout(() => {\n show()\n }, delay)\n } else {\n show()\n }\n }\n\n /**\n * Setup before hide() is invoked (delays, etc.)\n */\n function scheduleHide(): void {\n clearDelayTimeouts()\n\n if (!instance.state.isVisible) {\n removeFollowCursorListener()\n removeDocumentClickListener()\n return\n }\n\n isScheduledToShow = false\n\n const delay = getValue(instance.props.delay, 1, defaultProps.delay)\n\n if (delay) {\n hideTimeoutId = setTimeout(() => {\n if (instance.state.isVisible) {\n hide()\n }\n }, delay)\n } else {\n // Fixes a `transitionend` problem when it fires 1 frame too\n // late sometimes, we don't want hide() to be called.\n scheduleHideAnimationFrameId = requestAnimationFrame(() => {\n hide()\n })\n }\n }\n\n /**\n * Listener to handle clicks on the document to determine if the\n * instance should hide\n */\n function onDocumentClick(event: MouseEvent): void {\n // Clicked on interactive popper\n if (\n instance.props.interactive &&\n popper.contains(event.target as Element)\n ) {\n return\n }\n\n // Clicked on the event listeners target\n if (getEventListenersTarget().contains(event.target as Element)) {\n if (isUsingTouch) {\n return\n }\n\n if (\n instance.state.isVisible &&\n includes(instance.props.trigger, 'click')\n ) {\n return\n }\n }\n\n if (instance.props.hideOnClick === true) {\n clearDelayTimeouts()\n hide()\n }\n }\n\n /* ======================= \uD83D\uDD11 Public methods \uD83D\uDD11 ======================= */\n /**\n * Enables the instance to allow it to show or hide\n */\n function enable(): void {\n instance.state.isEnabled = true\n }\n\n /**\n * Disables the instance to disallow it to show or hide\n */\n function disable(): void {\n instance.state.isEnabled = false\n }\n\n /**\n * Clears pending timeouts related to the `delay` prop if any\n */\n function clearDelayTimeouts(): void {\n clearTimeout(showTimeoutId)\n clearTimeout(hideTimeoutId)\n cancelAnimationFrame(scheduleHideAnimationFrameId)\n }\n\n /**\n * Sets new props for the instance and redraws the tooltip\n */\n function set(options: Options): void {\n // Backwards-compatible after TypeScript change\n options = options || {}\n\n validateOptions(options, defaultProps)\n\n removeTriggersFromReference()\n\n const prevProps = instance.props\n const nextProps = evaluateProps(reference, {\n ...instance.props,\n ...options,\n ignoreAttributes: true,\n })\n nextProps.ignoreAttributes = hasOwnProperty(options, 'ignoreAttributes')\n ? options.ignoreAttributes || false\n : prevProps.ignoreAttributes\n instance.props = nextProps\n\n addTriggersToReference()\n\n cleanupInteractiveMouseListeners()\n debouncedOnMouseMove = debounce(onMouseMove, nextProps.interactiveDebounce)\n\n updatePopperElement(popper, prevProps, nextProps)\n instance.popperChildren = getChildren(popper)\n\n if (instance.popperInstance) {\n if (\n POPPER_INSTANCE_DEPENDENCIES.some(prop => {\n return (\n hasOwnProperty(options, prop) && options[prop] !== prevProps[prop]\n )\n })\n ) {\n instance.popperInstance.destroy()\n createPopperInstance()\n\n if (instance.state.isVisible) {\n instance.popperInstance.enableEventListeners()\n }\n\n if (instance.props.followCursor && lastMouseMoveEvent) {\n positionVirtualReferenceNearCursor(lastMouseMoveEvent)\n }\n } else {\n instance.popperInstance.update()\n }\n }\n }\n\n /**\n * Shortcut for .set({ content: newContent })\n */\n function setContent(content: Content): void {\n set({ content })\n }\n\n /**\n * Shows the tooltip\n */\n function show(\n duration: number = getValue(\n instance.props.duration,\n 0,\n (defaultProps.duration as [number, number])[1],\n ),\n ): void {\n if (\n instance.state.isDestroyed ||\n !instance.state.isEnabled ||\n (isUsingTouch && !instance.props.touch)\n ) {\n return\n }\n\n // Standardize `disabled` behavior across browsers.\n // Firefox allows events on disabled elements, but Chrome doesn't.\n // Using a wrapper element (i.e. <span>) is recommended.\n if (getEventListenersTarget().hasAttribute('disabled')) {\n return\n }\n\n if (instance.props.onShow(instance) === false) {\n return\n }\n\n addDocumentClickListener()\n\n popper.style.visibility = 'visible'\n instance.state.isVisible = true\n\n if (instance.props.interactive) {\n getEventListenersTarget().classList.add(ACTIVE_CLASS)\n }\n\n // Prevent a transition if the popper is at the opposite placement\n const transitionableElements = getTransitionableElements()\n setTransitionDuration(transitionableElements.concat(popper), 0)\n\n currentMountCallback = (): void => {\n if (!instance.state.isVisible) {\n return\n }\n\n const isInLooseFollowCursorMode = getIsInLooseFollowCursorMode()\n\n if (isInLooseFollowCursorMode && lastMouseMoveEvent) {\n positionVirtualReferenceNearCursor(lastMouseMoveEvent)\n } else if (!isInLooseFollowCursorMode) {\n // Double update will apply correct mutations\n instance.popperInstance!.update()\n }\n\n if (instance.popperChildren.backdrop) {\n instance.popperChildren.content.style.transitionDelay =\n Math.round(duration / 12) + 'ms'\n }\n\n if (instance.props.sticky) {\n makeSticky()\n }\n\n setTransitionDuration([popper], instance.props.updateDuration)\n setTransitionDuration(transitionableElements, duration)\n setVisibilityState(transitionableElements, 'visible')\n\n onTransitionedIn(\n duration,\n (): void => {\n if (instance.props.aria) {\n getEventListenersTarget().setAttribute(\n `aria-${instance.props.aria}`,\n popper.id,\n )\n }\n\n instance.props.onShown(instance)\n instance.state.isShown = true\n },\n )\n }\n\n mount()\n }\n\n /**\n * Hides the tooltip\n */\n function hide(\n duration: number = getValue(\n instance.props.duration,\n 1,\n (defaultProps.duration as [number, number])[1],\n ),\n ): void {\n if (\n instance.state.isDestroyed ||\n (!instance.state.isEnabled && !isBeingDestroyed)\n ) {\n return\n }\n\n if (instance.props.onHide(instance) === false && !isBeingDestroyed) {\n return\n }\n\n removeDocumentClickListener()\n\n popper.style.visibility = 'hidden'\n instance.state.isVisible = false\n instance.state.isShown = false\n wasVisibleDuringPreviousUpdate = false\n\n if (instance.props.interactive) {\n getEventListenersTarget().classList.remove(ACTIVE_CLASS)\n }\n\n const transitionableElements = getTransitionableElements()\n setTransitionDuration(transitionableElements, duration)\n setVisibilityState(transitionableElements, 'hidden')\n\n onTransitionedOut(duration, () => {\n if (!isScheduledToShow) {\n removeFollowCursorListener()\n }\n\n if (instance.props.aria) {\n getEventListenersTarget().removeAttribute(`aria-${instance.props.aria}`)\n }\n\n instance.popperInstance!.disableEventListeners()\n instance.popperInstance!.options.placement = instance.props.placement\n\n popper.parentNode!.removeChild(popper)\n instance.props.onHidden(instance)\n instance.state.isMounted = false\n })\n }\n\n /**\n * Destroys the tooltip\n */\n function destroy(destroyTargetInstances?: boolean): void {\n if (instance.state.isDestroyed) {\n return\n }\n\n isBeingDestroyed = true\n\n // If the popper is currently mounted to the DOM, we want to ensure it gets\n // hidden and unmounted instantly upon destruction\n if (instance.state.isMounted) {\n hide(0)\n }\n\n removeTriggersFromReference()\n\n delete reference._tippy\n\n const { target } = instance.props\n if (target && destroyTargetInstances && isRealElement(reference)) {\n arrayFrom(reference.querySelectorAll(target)).forEach(\n (child: ReferenceElement) => {\n if (child._tippy) {\n child._tippy.destroy()\n }\n },\n )\n }\n\n if (instance.popperInstance) {\n instance.popperInstance.destroy()\n }\n\n isBeingDestroyed = false\n instance.state.isDestroyed = true\n }\n}\n", "import { GroupedInstance, GroupOptions } from './types'\n\n/**\n * Groups an array of instances by taking control of their props during\n * certain lifecycles.\n */\nexport default function group(\n instances: GroupedInstance[],\n { delay = instances[0].props.delay, duration = 0 }: GroupOptions = {},\n): void {\n let isAnyTippyOpen = false\n\n instances.forEach(instance => {\n if (instance._originalProps) {\n instance.set(instance._originalProps)\n } else {\n instance._originalProps = { ...instance.props }\n }\n })\n\n function setIsAnyTippyOpen(value: boolean): void {\n isAnyTippyOpen = value\n updateInstances()\n }\n\n function onShow(instance: GroupedInstance): void {\n instance._originalProps.onShow(instance)\n\n instances.forEach(instance => {\n instance.set({ duration })\n\n if (instance.state.isVisible) {\n instance.hide()\n }\n })\n\n setIsAnyTippyOpen(true)\n }\n\n function onHide(instance: GroupedInstance): void {\n instance._originalProps.onHide(instance)\n setIsAnyTippyOpen(false)\n }\n\n function onShown(instance: GroupedInstance): void {\n instance._originalProps.onShown(instance)\n instance.set({ duration: instance._originalProps.duration })\n }\n\n function updateInstances(): void {\n instances.forEach(instance => {\n instance.set({\n onShow,\n onShown,\n onHide,\n delay: isAnyTippyOpen\n ? [0, Array.isArray(delay) ? delay[1] : delay]\n : delay,\n duration: isAnyTippyOpen ? duration : instance._originalProps.duration,\n })\n })\n }\n\n updateInstances()\n}\n", "import { version } from '../package.json'\nimport { isBrowser } from './browser'\nimport { defaultProps } from './props'\nimport createTippy from './createTippy'\nimport bindGlobalEventListeners from './bindGlobalEventListeners'\nimport group from './group'\nimport { polyfillElementPrototypeProperties } from './reference'\nimport { arrayFrom } from './ponyfills'\nimport { hideAll } from './popper'\nimport {\n isSingular,\n isBareVirtualElement,\n getArrayOfElements,\n validateOptions,\n} from './utils'\nimport { Options, Props, Instance, Targets, VirtualReference } from './types'\n\nlet globalEventListenersBound = false\n\n/**\n * Exported module\n */\nfunction tippy(targets: Targets, options?: Options): Instance | Instance[] {\n validateOptions(options || {}, defaultProps)\n\n if (!globalEventListenersBound) {\n bindGlobalEventListeners()\n globalEventListenersBound = true\n }\n\n const props: Props = { ...defaultProps, ...options }\n\n // If they are specifying a virtual positioning reference, we need to polyfill\n // some native DOM props\n if (isBareVirtualElement(targets)) {\n polyfillElementPrototypeProperties(targets as VirtualReference)\n }\n\n const instances = getArrayOfElements(targets).reduce<Instance[]>(\n (acc, reference) => {\n const instance = reference && createTippy(reference, props)\n\n if (instance) {\n acc.push(instance)\n }\n\n return acc\n },\n [],\n )\n\n return isSingular(targets) ? instances[0] : instances\n}\n\n/**\n * Static props\n */\ntippy.version = version\ntippy.defaults = defaultProps\n\n/**\n * Static methods\n */\ntippy.setDefaults = (partialDefaults: Options) => {\n Object.keys(partialDefaults).forEach(key => {\n // @ts-ignore\n defaultProps[key] = partialDefaults[key]\n })\n}\ntippy.hideAll = hideAll\ntippy.group = group\n\n/**\n * Auto-init tooltips for elements with a `data-tippy=\"...\"` attribute\n */\nexport function autoInit(): void {\n arrayFrom(document.querySelectorAll('[data-tippy]')).forEach(el => {\n const content = el.getAttribute('data-tippy')\n\n if (content) {\n tippy(el, { content })\n }\n })\n}\n\nif (isBrowser) {\n setTimeout(autoInit)\n}\n\nexport default tippy\n", "import { isBrowser } from './browser'\n\n/**\n * Injects a string of CSS styles to a style node in <head>\n */\nexport function injectCSS(css: string): void {\n if (isBrowser) {\n const style = document.createElement('style')\n style.type = 'text/css'\n style.textContent = css\n style.setAttribute('data-__NAMESPACE_PREFIX__-stylesheet', '')\n const head = document.head\n const firstStyleOrLinkTag = head.querySelector('style,link')\n\n if (firstStyleOrLinkTag) {\n head.insertBefore(style, firstStyleOrLinkTag)\n } else {\n head.appendChild(style)\n }\n }\n}\n", "import css from '../index.css'\nimport tippy from '../src/index.ts'\nimport { injectCSS } from '../src/css'\n\ninjectCSS(css)\n\nexport default tippy\n", "var Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/);\nvar tippy = require('tippy.js');\n\nvar manager = require('./shortcuts').manager;\n\nvar presets = {\n\theader: {\n\t\ttheme: 'tool',\n\t\tdistance: 6\n\t},\n\ttool: {\n\t\ttheme: 'tool',\n\t\tdistance: 8,\n\t\tdelay: 15,\n\t\tplacement: 'top'\n\t},\n\tfilter: {\n\t\ttheme: 'filter',\n\t\tdistance: 3,\n\t\tdelay: 0,\n\t\tplacement: 'bottom',\n\t\tanimation: 'fade',\n\t\ttrigger: 'mouseenter',\n\t\tduration: [0,50],\n\t\tpopperOptions: {\n\t\t\tmodifiers: {\n\t\t\t\tflip: {\n\t\t\t\t\tbehavior: ['left','bottom','top'],\n\t\t\t\t\tboundariesElement: 'viewport'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tkeys: {\n\t\ttheme: 'keys',\n\t\tplacement: 'right',\n\t\tdistance: 1,\n\t\tdelay: 0,\n\t\tanimation: 'shift-away',\n\t\ttrigger: 'mouseenter',\n\t\tanimateFill: false,\n\t\tboundary: \"viewport\",\n\t\tpopperOptions: {\n\t\t\tmodifiers: {\n\t\t\t\tflip: {\n\t\t\t\t\tbehavior: ['left','bottom','top'],\n\t\t\t\t\tboundariesElement: 'viewport'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tnav: {\n\t\ttheme: 'nav',\n\t\tdistance: 3,\n\t\tdelay: 0,\n\t\tplacement: 'top',\n\t\tanimation: 'fade',\n\t\ttrigger: 'mouseenter',\n\t\tduration: [100,100]\n\t},\n\t\n\tnavBottom: {\n\t\ttheme: 'nav',\n\t\tdistance: 3,\n\t\tdelay: 0,\n\t\tplacement: 'bottom',\n\t\tanimation: 'fade',\n\t\ttrigger: 'mouseenter',\n\t\tduration: [100,100]\n\t},\n\t\n\thud: {\n\t\ttheme: 'hud',\n\t\tdistance: 3,\n\t\tdelay: 0,\n\t\tplacement: 'top',\n\t\tanimation: 'fade',\n\t\ttrigger: 'mouseenter',\n\t\tduration: [50,10],\n\t\tboundary: \"window\"\n\t},\n\twarn: {\n\t\tdistance: 3,\n\t\tplacement: 'top-end',\n\t\tduration: [0,200]\n\t},\n\tbr: {\n\t\tplacement: 'bottom-end'\n\t},\n\tbl: {\n\t\tplacement: 'bottom-start'\n\t},\n\ttr: {\n\t\tplacement: 'top-end'\n\t},\n\tconditional: {\n\t\tonShow: function(el){\n\t\t\treturn console.log(\"Showing tooltip\",el,this);\n\t\t}\n\t}\n};\n\n_1.extendTag('element', function(tag){\n\ttag.prototype.tip = function(v){ return this._tip; }\n\ttag.prototype.setTip = function(v){ this._tip = v; return this; }; // watch: yes\n\t\n\ttag.prototype.setTip = function (value,mods){\n\t\tvar tip_, v_;\n\t\tif (value != this._tip) {\n\t\t\tthis._tip = value;\n\t\t\tif (mods) {\n\t\t\t\tfor (let v, i = 0, keys = Object.keys(mods), l = keys.length, k; i < l; i++){\n\t\t\t\t\tk = keys[i];v = mods[k];if (presets[k]) {\n\t\t\t\t\t\tObject.assign(this.tipOptions(),presets[k]);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\t// console.log \"setting tip\",mods\n\t\t\t};\n\t\t\t\n\t\t\t// if tip isa String and (tip.match(/[\\#\\*\\_\\[]/) or (mods and mods:md))\n\t\t\t//\ttip = marked(tip)\n\t\t\t//\t# console.log \"htmlified tooltip\",tip\n\t\t\t\n\t\t\tif ((typeof (tip_ = this.tip())=='string'||tip_ instanceof String) && this.tip().indexOf(\"KEY\") >= 0) {\n\t\t\t\tif (this._shortcutHTML) { (this.setTip(v_ = this.tip().replace(\"KEY\",this._shortcutHTML)),v_) };\n\t\t\t} else if (mods && mods.keys) {\n\t\t\t\tthis.setTip(manager.shortcutHTML(this.tip()));\n\t\t\t};\n\t\t\t\n\t\t\tthis.tipOptions().content = this.tip();\n\t\t\t\n\t\t\tif (this._dom._tippy) {\n\t\t\t\tthis._dom._tippy.set({content: this.tip()});\n\t\t\t} else {\n\t\t\t\ttippy(this.dom(),this.tipOptions());\n\t\t\t};\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.setTipContent = function (content){\n\t\tif (this._dom._tippy) {\n\t\t\tthis._dom._tippy.set({content: content});\n\t\t} else {\n\t\t\tthis.tipOptions().content = content;\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.tippy = function (){\n\t\treturn this._dom._tippy;\n\t};\n\t\n\t// def tipDidSet tip,mods\n\t//\treturn unless $web$\n\t//\t# console.log \"tip with mods?\",mods\n\t//\ttipOptions:content = tip\n\t//\tif @dom.@tippy\n\t//\t\t@dom.@tippy.set(content: tip)\n\t//\telse\n\t//\t\ttippy:default(dom,tipOptions)\n\t//\tself\n\t\n\ttag.prototype.flash = function (message,o){\n\t\t// start tippy here\n\t\tif(o === undefined) o = {};\n\t\tlet options = {\n\t\t\tshowOnInit: true,\n\t\t\tcontent: message,\n\t\t\ttrigger: 'manual',\n\t\t\tmultiple: true\n\t\t};\n\t\t\n\t\tif (o.type && presets[o.type]) {\n\t\t\tObject.assign(options,presets[o.type]);\n\t\t};\n\t\t\n\t\tlet tip = tippy(this.dom(),options);\n\t\tTT = tip;\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.tipOptions = function (){\n\t\treturn this._tipOptions || (this._tipOptions = {});\n\t};\n\t\n\ttag.prototype.tipSetAttribute = function (key,value){\n\t\tvar preset, $1;\n\t\tif (key == 'preset') {\n\t\t\tif (this._tipPreset == value) { return this };\n\t\t\tthis._tipPreset = value;\n\t\t\t\n\t\t\tif (preset = presets[value]) {\n\t\t\t\tfor (let v, i = 0, keys = Object.keys(preset), l = keys.length, k; i < l; i++){\n\t\t\t\t\tk = keys[i];v = preset[k];this.tipOptions()[k] = v;\n\t\t\t\t};\n\t\t\t\tif (this._dom._tippy) {\n\t\t\t\t\tthis._dom._tippy.set(preset);\n\t\t\t\t};\n\t\t\t};\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\tthis.tipOptions()[key] = value;\n\t\t\n\t\tif (this._dom._tippy) {\n\t\t\tthis._dom._tippy.set(($1 = {},$1[(\"\" + key)] = value,$1));\n\t\t};\n\t\treturn this;\n\t};\n});\n", "/* globals Buffer */\n\nmodule.exports =\n c((\"undefined\" !== typeof Buffer) && Buffer) ||\n c(this.Buffer) ||\n c((\"undefined\" !== typeof window) && window.Buffer) ||\n this.Buffer;\n\nfunction c(B) {\n return B && B.isBuffer && B;\n}", "var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n", "// bufferish-array.js\n\nvar Bufferish = require(\"./bufferish\");\n\nvar exports = module.exports = alloc(0);\n\nexports.alloc = alloc;\nexports.concat = Bufferish.concat;\nexports.from = from;\n\n/**\n * @param size {Number}\n * @returns {Buffer|Uint8Array|Array}\n */\n\nfunction alloc(size) {\n return new Array(size);\n}\n\n/**\n * @param value {Array|ArrayBuffer|Buffer|String}\n * @returns {Array}\n */\n\nfunction from(value) {\n if (!Bufferish.isBuffer(value) && Bufferish.isView(value)) {\n // TypedArray to Uint8Array\n value = Bufferish.Uint8Array.from(value);\n } else if (Bufferish.isArrayBuffer(value)) {\n // ArrayBuffer to Uint8Array\n value = new Uint8Array(value);\n } else if (typeof value === \"string\") {\n // String to Array\n return Bufferish.from.call(exports, value);\n } else if (typeof value === \"number\") {\n throw new TypeError('\"value\" argument must not be a number');\n }\n\n // Array-like to Array\n return Array.prototype.slice.call(value);\n}\n", "// bufferish-buffer.js\n\nvar Bufferish = require(\"./bufferish\");\nvar Buffer = Bufferish.global;\n\nvar exports = module.exports = Bufferish.hasBuffer ? alloc(0) : [];\n\nexports.alloc = Bufferish.hasBuffer && Buffer.alloc || alloc;\nexports.concat = Bufferish.concat;\nexports.from = from;\n\n/**\n * @param size {Number}\n * @returns {Buffer|Uint8Array|Array}\n */\n\nfunction alloc(size) {\n return new Buffer(size);\n}\n\n/**\n * @param value {Array|ArrayBuffer|Buffer|String}\n * @returns {Buffer}\n */\n\nfunction from(value) {\n if (!Bufferish.isBuffer(value) && Bufferish.isView(value)) {\n // TypedArray to Uint8Array\n value = Bufferish.Uint8Array.from(value);\n } else if (Bufferish.isArrayBuffer(value)) {\n // ArrayBuffer to Uint8Array\n value = new Uint8Array(value);\n } else if (typeof value === \"string\") {\n // String to Buffer\n return Bufferish.from.call(exports, value);\n } else if (typeof value === \"number\") {\n throw new TypeError('\"value\" argument must not be a number');\n }\n\n // Array-like to Buffer\n if (Buffer.from && Buffer.from.length !== 1) {\n return Buffer.from(value); // node v6+\n } else {\n return new Buffer(value); // node v4\n }\n}\n", "// bufferish-uint8array.js\n\nvar Bufferish = require(\"./bufferish\");\n\nvar exports = module.exports = Bufferish.hasArrayBuffer ? alloc(0) : [];\n\nexports.alloc = alloc;\nexports.concat = Bufferish.concat;\nexports.from = from;\n\n/**\n * @param size {Number}\n * @returns {Buffer|Uint8Array|Array}\n */\n\nfunction alloc(size) {\n return new Uint8Array(size);\n}\n\n/**\n * @param value {Array|ArrayBuffer|Buffer|String}\n * @returns {Uint8Array}\n */\n\nfunction from(value) {\n if (Bufferish.isView(value)) {\n // TypedArray to ArrayBuffer\n var byteOffset = value.byteOffset;\n var byteLength = value.byteLength;\n value = value.buffer;\n if (value.byteLength !== byteLength) {\n if (value.slice) {\n value = value.slice(byteOffset, byteOffset + byteLength);\n } else {\n // Android 4.1 does not have ArrayBuffer.prototype.slice\n value = new Uint8Array(value);\n if (value.byteLength !== byteLength) {\n // TypedArray to ArrayBuffer to Uint8Array to Array\n value = Array.prototype.slice.call(value, byteOffset, byteOffset + byteLength);\n }\n }\n }\n } else if (typeof value === \"string\") {\n // String to Uint8Array\n return Bufferish.from.call(exports, value);\n } else if (typeof value === \"number\") {\n throw new TypeError('\"value\" argument must not be a number');\n }\n\n return new Uint8Array(value);\n}\n", "// buffer-lite.js\n\nvar MAXBUFLEN = 8192;\n\nexports.copy = copy;\nexports.toString = toString;\nexports.write = write;\n\n/**\n * Buffer.prototype.write()\n *\n * @param string {String}\n * @param [offset] {Number}\n * @returns {Number}\n */\n\nfunction write(string, offset) {\n var buffer = this;\n var index = offset || (offset |= 0);\n var length = string.length;\n var chr = 0;\n var i = 0;\n while (i < length) {\n chr = string.charCodeAt(i++);\n\n if (chr < 128) {\n buffer[index++] = chr;\n } else if (chr < 0x800) {\n // 2 bytes\n buffer[index++] = 0xC0 | (chr >>> 6);\n buffer[index++] = 0x80 | (chr & 0x3F);\n } else if (chr < 0xD800 || chr > 0xDFFF) {\n // 3 bytes\n buffer[index++] = 0xE0 | (chr >>> 12);\n buffer[index++] = 0x80 | ((chr >>> 6) & 0x3F);\n buffer[index++] = 0x80 | (chr & 0x3F);\n } else {\n // 4 bytes - surrogate pair\n chr = (((chr - 0xD800) << 10) | (string.charCodeAt(i++) - 0xDC00)) + 0x10000;\n buffer[index++] = 0xF0 | (chr >>> 18);\n buffer[index++] = 0x80 | ((chr >>> 12) & 0x3F);\n buffer[index++] = 0x80 | ((chr >>> 6) & 0x3F);\n buffer[index++] = 0x80 | (chr & 0x3F);\n }\n }\n return index - offset;\n}\n\n/**\n * Buffer.prototype.toString()\n *\n * @param [encoding] {String} ignored\n * @param [start] {Number}\n * @param [end] {Number}\n * @returns {String}\n */\n\nfunction toString(encoding, start, end) {\n var buffer = this;\n var index = start|0;\n if (!end) end = buffer.length;\n var string = '';\n var chr = 0;\n\n while (index < end) {\n chr = buffer[index++];\n if (chr < 128) {\n string += String.fromCharCode(chr);\n continue;\n }\n\n if ((chr & 0xE0) === 0xC0) {\n // 2 bytes\n chr = (chr & 0x1F) << 6 |\n (buffer[index++] & 0x3F);\n\n } else if ((chr & 0xF0) === 0xE0) {\n // 3 bytes\n chr = (chr & 0x0F) << 12 |\n (buffer[index++] & 0x3F) << 6 |\n (buffer[index++] & 0x3F);\n\n } else if ((chr & 0xF8) === 0xF0) {\n // 4 bytes\n chr = (chr & 0x07) << 18 |\n (buffer[index++] & 0x3F) << 12 |\n (buffer[index++] & 0x3F) << 6 |\n (buffer[index++] & 0x3F);\n }\n\n if (chr >= 0x010000) {\n // A surrogate pair\n chr -= 0x010000;\n\n string += String.fromCharCode((chr >>> 10) + 0xD800, (chr & 0x3FF) + 0xDC00);\n } else {\n string += String.fromCharCode(chr);\n }\n }\n\n return string;\n}\n\n/**\n * Buffer.prototype.copy()\n *\n * @param target {Buffer}\n * @param [targetStart] {Number}\n * @param [start] {Number}\n * @param [end] {Number}\n * @returns {number}\n */\n\nfunction copy(target, targetStart, start, end) {\n var i;\n if (!start) start = 0;\n if (!end && end !== 0) end = this.length;\n if (!targetStart) targetStart = 0;\n var len = end - start;\n\n if (target === this && start < targetStart && targetStart < end) {\n // descending\n for (i = len - 1; i >= 0; i--) {\n target[i + targetStart] = this[i + start];\n }\n } else {\n // ascending\n for (i = 0; i < len; i++) {\n target[i + targetStart] = this[i + start];\n }\n }\n\n return len;\n}\n", "// bufferish-proto.js\n\n/* jshint eqnull:true */\n\nvar BufferLite = require(\"./buffer-lite\");\n\nexports.copy = copy;\nexports.slice = slice;\nexports.toString = toString;\nexports.write = gen(\"write\");\n\nvar Bufferish = require(\"./bufferish\");\nvar Buffer = Bufferish.global;\n\nvar isBufferShim = Bufferish.hasBuffer && (\"TYPED_ARRAY_SUPPORT\" in Buffer);\nvar brokenTypedArray = isBufferShim && !Buffer.TYPED_ARRAY_SUPPORT;\n\n/**\n * @param target {Buffer|Uint8Array|Array}\n * @param [targetStart] {Number}\n * @param [start] {Number}\n * @param [end] {Number}\n * @returns {Buffer|Uint8Array|Array}\n */\n\nfunction copy(target, targetStart, start, end) {\n var thisIsBuffer = Bufferish.isBuffer(this);\n var targetIsBuffer = Bufferish.isBuffer(target);\n if (thisIsBuffer && targetIsBuffer) {\n // Buffer to Buffer\n return this.copy(target, targetStart, start, end);\n } else if (!brokenTypedArray && !thisIsBuffer && !targetIsBuffer &&\n Bufferish.isView(this) && Bufferish.isView(target)) {\n // Uint8Array to Uint8Array (except for minor some browsers)\n var buffer = (start || end != null) ? slice.call(this, start, end) : this;\n target.set(buffer, targetStart);\n return buffer.length;\n } else {\n // other cases\n return BufferLite.copy.call(this, target, targetStart, start, end);\n }\n}\n\n/**\n * @param [start] {Number}\n * @param [end] {Number}\n * @returns {Buffer|Uint8Array|Array}\n */\n\nfunction slice(start, end) {\n // for Buffer, Uint8Array (except for minor some browsers) and Array\n var f = this.slice || (!brokenTypedArray && this.subarray);\n if (f) return f.call(this, start, end);\n\n // Uint8Array (for minor some browsers)\n var target = Bufferish.alloc.call(this, end - start);\n copy.call(this, target, 0, start, end);\n return target;\n}\n\n/**\n * Buffer.prototype.toString()\n *\n * @param [encoding] {String} ignored\n * @param [start] {Number}\n * @param [end] {Number}\n * @returns {String}\n */\n\nfunction toString(encoding, start, end) {\n var f = (!isBufferShim && Bufferish.isBuffer(this)) ? this.toString : BufferLite.toString;\n return f.apply(this, arguments);\n}\n\n/**\n * @private\n */\n\nfunction gen(method) {\n return wrap;\n\n function wrap() {\n var f = this[method] || BufferLite[method];\n return f.apply(this, arguments);\n }\n}\n", "// bufferish.js\n\nvar Buffer = exports.global = require(\"./buffer-global\");\nvar hasBuffer = exports.hasBuffer = Buffer && !!Buffer.isBuffer;\nvar hasArrayBuffer = exports.hasArrayBuffer = (\"undefined\" !== typeof ArrayBuffer);\n\nvar isArray = exports.isArray = require(\"isarray\");\nexports.isArrayBuffer = hasArrayBuffer ? isArrayBuffer : _false;\nvar isBuffer = exports.isBuffer = hasBuffer ? Buffer.isBuffer : _false;\nvar isView = exports.isView = hasArrayBuffer ? (ArrayBuffer.isView || _is(\"ArrayBuffer\", \"buffer\")) : _false;\n\nexports.alloc = alloc;\nexports.concat = concat;\nexports.from = from;\n\nvar BufferArray = exports.Array = require(\"./bufferish-array\");\nvar BufferBuffer = exports.Buffer = require(\"./bufferish-buffer\");\nvar BufferUint8Array = exports.Uint8Array = require(\"./bufferish-uint8array\");\nvar BufferProto = exports.prototype = require(\"./bufferish-proto\");\n\n/**\n * @param value {Array|ArrayBuffer|Buffer|String}\n * @returns {Buffer|Uint8Array|Array}\n */\n\nfunction from(value) {\n if (typeof value === \"string\") {\n return fromString.call(this, value);\n } else {\n return auto(this).from(value);\n }\n}\n\n/**\n * @param size {Number}\n * @returns {Buffer|Uint8Array|Array}\n */\n\nfunction alloc(size) {\n return auto(this).alloc(size);\n}\n\n/**\n * @param list {Array} array of (Buffer|Uint8Array|Array)s\n * @param [length]\n * @returns {Buffer|Uint8Array|Array}\n */\n\nfunction concat(list, length) {\n if (!length) {\n length = 0;\n Array.prototype.forEach.call(list, dryrun);\n }\n var ref = (this !== exports) && this || list[0];\n var result = alloc.call(ref, length);\n var offset = 0;\n Array.prototype.forEach.call(list, append);\n return result;\n\n function dryrun(buffer) {\n length += buffer.length;\n }\n\n function append(buffer) {\n offset += BufferProto.copy.call(buffer, result, offset);\n }\n}\n\nvar _isArrayBuffer = _is(\"ArrayBuffer\");\n\nfunction isArrayBuffer(value) {\n return (value instanceof ArrayBuffer) || _isArrayBuffer(value);\n}\n\n/**\n * @private\n */\n\nfunction fromString(value) {\n var expected = value.length * 3;\n var that = alloc.call(this, expected);\n var actual = BufferProto.write.call(that, value);\n if (expected !== actual) {\n that = BufferProto.slice.call(that, 0, actual);\n }\n return that;\n}\n\nfunction auto(that) {\n return isBuffer(that) ? BufferBuffer\n : isView(that) ? BufferUint8Array\n : isArray(that) ? BufferArray\n : hasBuffer ? BufferBuffer\n : hasArrayBuffer ? BufferUint8Array\n : BufferArray;\n}\n\nfunction _false() {\n return false;\n}\n\nfunction _is(name, key) {\n /* jshint eqnull:true */\n name = \"[object \" + name + \"]\";\n return function(value) {\n return (value != null) && {}.toString.call(key ? value[key] : value) === name;\n };\n}", "// ext-buffer.js\n\nexports.ExtBuffer = ExtBuffer;\n\nvar Bufferish = require(\"./bufferish\");\n\nfunction ExtBuffer(buffer, type) {\n if (!(this instanceof ExtBuffer)) return new ExtBuffer(buffer, type);\n this.buffer = Bufferish.from(buffer);\n this.type = type;\n}\n", "// ext-packer.js\n\nexports.setExtPackers = setExtPackers;\n\nvar Bufferish = require(\"./bufferish\");\nvar Buffer = Bufferish.global;\nvar packTypedArray = Bufferish.Uint8Array.from;\nvar _encode;\n\nvar ERROR_COLUMNS = {name: 1, message: 1, stack: 1, columnNumber: 1, fileName: 1, lineNumber: 1};\n\nfunction setExtPackers(codec) {\n codec.addExtPacker(0x0E, Error, [packError, encode]);\n codec.addExtPacker(0x01, EvalError, [packError, encode]);\n codec.addExtPacker(0x02, RangeError, [packError, encode]);\n codec.addExtPacker(0x03, ReferenceError, [packError, encode]);\n codec.addExtPacker(0x04, SyntaxError, [packError, encode]);\n codec.addExtPacker(0x05, TypeError, [packError, encode]);\n codec.addExtPacker(0x06, URIError, [packError, encode]);\n\n codec.addExtPacker(0x0A, RegExp, [packRegExp, encode]);\n codec.addExtPacker(0x0B, Boolean, [packValueOf, encode]);\n codec.addExtPacker(0x0C, String, [packValueOf, encode]);\n codec.addExtPacker(0x0D, Date, [Number, encode]);\n codec.addExtPacker(0x0F, Number, [packValueOf, encode]);\n\n if (\"undefined\" !== typeof Uint8Array) {\n codec.addExtPacker(0x11, Int8Array, packTypedArray);\n codec.addExtPacker(0x12, Uint8Array, packTypedArray);\n codec.addExtPacker(0x13, Int16Array, packTypedArray);\n codec.addExtPacker(0x14, Uint16Array, packTypedArray);\n codec.addExtPacker(0x15, Int32Array, packTypedArray);\n codec.addExtPacker(0x16, Uint32Array, packTypedArray);\n codec.addExtPacker(0x17, Float32Array, packTypedArray);\n\n // PhantomJS/1.9.7 doesn't have Float64Array\n if (\"undefined\" !== typeof Float64Array) {\n codec.addExtPacker(0x18, Float64Array, packTypedArray);\n }\n\n // IE10 doesn't have Uint8ClampedArray\n if (\"undefined\" !== typeof Uint8ClampedArray) {\n codec.addExtPacker(0x19, Uint8ClampedArray, packTypedArray);\n }\n\n codec.addExtPacker(0x1A, ArrayBuffer, packTypedArray);\n codec.addExtPacker(0x1D, DataView, packTypedArray);\n }\n\n if (Bufferish.hasBuffer) {\n codec.addExtPacker(0x1B, Buffer, Bufferish.from);\n }\n}\n\nfunction encode(input) {\n if (!_encode) _encode = require(\"./encode\").encode; // lazy load\n return _encode(input);\n}\n\nfunction packValueOf(value) {\n return (value).valueOf();\n}\n\nfunction packRegExp(value) {\n value = RegExp.prototype.toString.call(value).split(\"/\");\n value.shift();\n var out = [value.pop()];\n out.unshift(value.join(\"/\"));\n return out;\n}\n\nfunction packError(value) {\n var out = {};\n for (var key in ERROR_COLUMNS) {\n out[key] = value[key];\n }\n return out;\n}\n", "// int64-buffer.js\n\n/*jshint -W018 */ // Confusing use of '!'.\n/*jshint -W030 */ // Expected an assignment or function call and instead saw an expression.\n/*jshint -W093 */ // Did you mean to return a conditional instead of an assignment?\n\nvar Uint64BE, Int64BE, Uint64LE, Int64LE;\n\n!function(exports) {\n // constants\n\n var UNDEFINED = \"undefined\";\n var BUFFER = (UNDEFINED !== typeof Buffer) && Buffer;\n var UINT8ARRAY = (UNDEFINED !== typeof Uint8Array) && Uint8Array;\n var ARRAYBUFFER = (UNDEFINED !== typeof ArrayBuffer) && ArrayBuffer;\n var ZERO = [0, 0, 0, 0, 0, 0, 0, 0];\n var isArray = Array.isArray || _isArray;\n var BIT32 = 4294967296;\n var BIT24 = 16777216;\n\n // storage class\n\n var storage; // Array;\n\n // generate classes\n\n Uint64BE = factory(\"Uint64BE\", true, true);\n Int64BE = factory(\"Int64BE\", true, false);\n Uint64LE = factory(\"Uint64LE\", false, true);\n Int64LE = factory(\"Int64LE\", false, false);\n\n // class factory\n\n function factory(name, bigendian, unsigned) {\n var posH = bigendian ? 0 : 4;\n var posL = bigendian ? 4 : 0;\n var pos0 = bigendian ? 0 : 3;\n var pos1 = bigendian ? 1 : 2;\n var pos2 = bigendian ? 2 : 1;\n var pos3 = bigendian ? 3 : 0;\n var fromPositive = bigendian ? fromPositiveBE : fromPositiveLE;\n var fromNegative = bigendian ? fromNegativeBE : fromNegativeLE;\n var proto = Int64.prototype;\n var isName = \"is\" + name;\n var _isInt64 = \"_\" + isName;\n\n // properties\n proto.buffer = void 0;\n proto.offset = 0;\n proto[_isInt64] = true;\n\n // methods\n proto.toNumber = toNumber;\n proto.toString = toString;\n proto.toJSON = toNumber;\n proto.toArray = toArray;\n\n // add .toBuffer() method only when Buffer available\n if (BUFFER) proto.toBuffer = toBuffer;\n\n // add .toArrayBuffer() method only when Uint8Array available\n if (UINT8ARRAY) proto.toArrayBuffer = toArrayBuffer;\n\n // isUint64BE, isInt64BE\n Int64[isName] = isInt64;\n\n // CommonJS\n exports[name] = Int64;\n\n return Int64;\n\n // constructor\n function Int64(buffer, offset, value, raddix) {\n if (!(this instanceof Int64)) return new Int64(buffer, offset, value, raddix);\n return init(this, buffer, offset, value, raddix);\n }\n\n // isUint64BE, isInt64BE\n function isInt64(b) {\n return !!(b && b[_isInt64]);\n }\n\n // initializer\n function init(that, buffer, offset, value, raddix) {\n if (UINT8ARRAY && ARRAYBUFFER) {\n if (buffer instanceof ARRAYBUFFER) buffer = new UINT8ARRAY(buffer);\n if (value instanceof ARRAYBUFFER) value = new UINT8ARRAY(value);\n }\n\n // Int64BE() style\n if (!buffer && !offset && !value && !storage) {\n // shortcut to initialize with zero\n that.buffer = newArray(ZERO, 0);\n return;\n }\n\n // Int64BE(value, raddix) style\n if (!isValidBuffer(buffer, offset)) {\n var _storage = storage || Array;\n raddix = offset;\n value = buffer;\n offset = 0;\n buffer = new _storage(8);\n }\n\n that.buffer = buffer;\n that.offset = offset |= 0;\n\n // Int64BE(buffer, offset) style\n if (UNDEFINED === typeof value) return;\n\n // Int64BE(buffer, offset, value, raddix) style\n if (\"string\" === typeof value) {\n fromString(buffer, offset, value, raddix || 10);\n } else if (isValidBuffer(value, raddix)) {\n fromArray(buffer, offset, value, raddix);\n } else if (\"number\" === typeof raddix) {\n writeInt32(buffer, offset + posH, value); // high\n writeInt32(buffer, offset + posL, raddix); // low\n } else if (value > 0) {\n fromPositive(buffer, offset, value); // positive\n } else if (value < 0) {\n fromNegative(buffer, offset, value); // negative\n } else {\n fromArray(buffer, offset, ZERO, 0); // zero, NaN and others\n }\n }\n\n function fromString(buffer, offset, str, raddix) {\n var pos = 0;\n var len = str.length;\n var high = 0;\n var low = 0;\n if (str[0] === \"-\") pos++;\n var sign = pos;\n while (pos < len) {\n var chr = parseInt(str[pos++], raddix);\n if (!(chr >= 0)) break; // NaN\n low = low * raddix + chr;\n high = high * raddix + Math.floor(low / BIT32);\n low %= BIT32;\n }\n if (sign) {\n high = ~high;\n if (low) {\n low = BIT32 - low;\n } else {\n high++;\n }\n }\n writeInt32(buffer, offset + posH, high);\n writeInt32(buffer, offset + posL, low);\n }\n\n function toNumber() {\n var buffer = this.buffer;\n var offset = this.offset;\n var high = readInt32(buffer, offset + posH);\n var low = readInt32(buffer, offset + posL);\n if (!unsigned) high |= 0; // a trick to get signed\n return high ? (high * BIT32 + low) : low;\n }\n\n function toString(radix) {\n var buffer = this.buffer;\n var offset = this.offset;\n var high = readInt32(buffer, offset + posH);\n var low = readInt32(buffer, offset + posL);\n var str = \"\";\n var sign = !unsigned && (high & 0x80000000);\n if (sign) {\n high = ~high;\n low = BIT32 - low;\n }\n radix = radix || 10;\n while (1) {\n var mod = (high % radix) * BIT32 + low;\n high = Math.floor(high / radix);\n low = Math.floor(mod / radix);\n str = (mod % radix).toString(radix) + str;\n if (!high && !low) break;\n }\n if (sign) {\n str = \"-\" + str;\n }\n return str;\n }\n\n function writeInt32(buffer, offset, value) {\n buffer[offset + pos3] = value & 255;\n value = value >> 8;\n buffer[offset + pos2] = value & 255;\n value = value >> 8;\n buffer[offset + pos1] = value & 255;\n value = value >> 8;\n buffer[offset + pos0] = value & 255;\n }\n\n function readInt32(buffer, offset) {\n return (buffer[offset + pos0] * BIT24) +\n (buffer[offset + pos1] << 16) +\n (buffer[offset + pos2] << 8) +\n buffer[offset + pos3];\n }\n }\n\n function toArray(raw) {\n var buffer = this.buffer;\n var offset = this.offset;\n storage = null; // Array\n if (raw !== false && offset === 0 && buffer.length === 8 && isArray(buffer)) return buffer;\n return newArray(buffer, offset);\n }\n\n function toBuffer(raw) {\n var buffer = this.buffer;\n var offset = this.offset;\n storage = BUFFER;\n if (raw !== false && offset === 0 && buffer.length === 8 && Buffer.isBuffer(buffer)) return buffer;\n var dest = new BUFFER(8);\n fromArray(dest, 0, buffer, offset);\n return dest;\n }\n\n function toArrayBuffer(raw) {\n var buffer = this.buffer;\n var offset = this.offset;\n var arrbuf = buffer.buffer;\n storage = UINT8ARRAY;\n if (raw !== false && offset === 0 && (arrbuf instanceof ARRAYBUFFER) && arrbuf.byteLength === 8) return arrbuf;\n var dest = new UINT8ARRAY(8);\n fromArray(dest, 0, buffer, offset);\n return dest.buffer;\n }\n\n function isValidBuffer(buffer, offset) {\n var len = buffer && buffer.length;\n offset |= 0;\n return len && (offset + 8 <= len) && (\"string\" !== typeof buffer[offset]);\n }\n\n function fromArray(destbuf, destoff, srcbuf, srcoff) {\n destoff |= 0;\n srcoff |= 0;\n for (var i = 0; i < 8; i++) {\n destbuf[destoff++] = srcbuf[srcoff++] & 255;\n }\n }\n\n function newArray(buffer, offset) {\n return Array.prototype.slice.call(buffer, offset, offset + 8);\n }\n\n function fromPositiveBE(buffer, offset, value) {\n var pos = offset + 8;\n while (pos > offset) {\n buffer[--pos] = value & 255;\n value /= 256;\n }\n }\n\n function fromNegativeBE(buffer, offset, value) {\n var pos = offset + 8;\n value++;\n while (pos > offset) {\n buffer[--pos] = ((-value) & 255) ^ 255;\n value /= 256;\n }\n }\n\n function fromPositiveLE(buffer, offset, value) {\n var end = offset + 8;\n while (offset < end) {\n buffer[offset++] = value & 255;\n value /= 256;\n }\n }\n\n function fromNegativeLE(buffer, offset, value) {\n var end = offset + 8;\n value++;\n while (offset < end) {\n buffer[offset++] = ((-value) & 255) ^ 255;\n value /= 256;\n }\n }\n\n // https://github.com/retrofox/is-array\n function _isArray(val) {\n return !!val && \"[object Array]\" == Object.prototype.toString.call(val);\n }\n\n}(typeof exports === 'object' && typeof exports.nodeName !== 'string' ? exports : (this || {}));\n", "/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n", "// write-unit8.js\n\nvar constant = exports.uint8 = new Array(256);\n\nfor (var i = 0x00; i <= 0xFF; i++) {\n constant[i] = write0(i);\n}\n\nfunction write0(type) {\n return function(encoder) {\n var offset = encoder.reserve(1);\n encoder.buffer[offset] = type;\n };\n}\n", "// write-token.js\n\nvar ieee754 = require(\"ieee754\");\nvar Int64Buffer = require(\"int64-buffer\");\nvar Uint64BE = Int64Buffer.Uint64BE;\nvar Int64BE = Int64Buffer.Int64BE;\n\nvar uint8 = require(\"./write-uint8\").uint8;\nvar Bufferish = require(\"./bufferish\");\nvar Buffer = Bufferish.global;\nvar IS_BUFFER_SHIM = Bufferish.hasBuffer && (\"TYPED_ARRAY_SUPPORT\" in Buffer);\nvar NO_TYPED_ARRAY = IS_BUFFER_SHIM && !Buffer.TYPED_ARRAY_SUPPORT;\nvar Buffer_prototype = Bufferish.hasBuffer && Buffer.prototype || {};\n\nexports.getWriteToken = getWriteToken;\n\nfunction getWriteToken(options) {\n if (options && options.uint8array) {\n return init_uint8array();\n } else if (NO_TYPED_ARRAY || (Bufferish.hasBuffer && options && options.safe)) {\n return init_safe();\n } else {\n return init_token();\n }\n}\n\nfunction init_uint8array() {\n var token = init_token();\n\n // float 32 -- 0xca\n // float 64 -- 0xcb\n token[0xca] = writeN(0xca, 4, writeFloatBE);\n token[0xcb] = writeN(0xcb, 8, writeDoubleBE);\n\n return token;\n}\n\n// Node.js and browsers with TypedArray\n\nfunction init_token() {\n // (immediate values)\n // positive fixint -- 0x00 - 0x7f\n // nil -- 0xc0\n // false -- 0xc2\n // true -- 0xc3\n // negative fixint -- 0xe0 - 0xff\n var token = uint8.slice();\n\n // bin 8 -- 0xc4\n // bin 16 -- 0xc5\n // bin 32 -- 0xc6\n token[0xc4] = write1(0xc4);\n token[0xc5] = write2(0xc5);\n token[0xc6] = write4(0xc6);\n\n // ext 8 -- 0xc7\n // ext 16 -- 0xc8\n // ext 32 -- 0xc9\n token[0xc7] = write1(0xc7);\n token[0xc8] = write2(0xc8);\n token[0xc9] = write4(0xc9);\n\n // float 32 -- 0xca\n // float 64 -- 0xcb\n token[0xca] = writeN(0xca, 4, (Buffer_prototype.writeFloatBE || writeFloatBE), true);\n token[0xcb] = writeN(0xcb, 8, (Buffer_prototype.writeDoubleBE || writeDoubleBE), true);\n\n // uint 8 -- 0xcc\n // uint 16 -- 0xcd\n // uint 32 -- 0xce\n // uint 64 -- 0xcf\n token[0xcc] = write1(0xcc);\n token[0xcd] = write2(0xcd);\n token[0xce] = write4(0xce);\n token[0xcf] = writeN(0xcf, 8, writeUInt64BE);\n\n // int 8 -- 0xd0\n // int 16 -- 0xd1\n // int 32 -- 0xd2\n // int 64 -- 0xd3\n token[0xd0] = write1(0xd0);\n token[0xd1] = write2(0xd1);\n token[0xd2] = write4(0xd2);\n token[0xd3] = writeN(0xd3, 8, writeInt64BE);\n\n // str 8 -- 0xd9\n // str 16 -- 0xda\n // str 32 -- 0xdb\n token[0xd9] = write1(0xd9);\n token[0xda] = write2(0xda);\n token[0xdb] = write4(0xdb);\n\n // array 16 -- 0xdc\n // array 32 -- 0xdd\n token[0xdc] = write2(0xdc);\n token[0xdd] = write4(0xdd);\n\n // map 16 -- 0xde\n // map 32 -- 0xdf\n token[0xde] = write2(0xde);\n token[0xdf] = write4(0xdf);\n\n return token;\n}\n\n// safe mode: for old browsers and who needs asserts\n\nfunction init_safe() {\n // (immediate values)\n // positive fixint -- 0x00 - 0x7f\n // nil -- 0xc0\n // false -- 0xc2\n // true -- 0xc3\n // negative fixint -- 0xe0 - 0xff\n var token = uint8.slice();\n\n // bin 8 -- 0xc4\n // bin 16 -- 0xc5\n // bin 32 -- 0xc6\n token[0xc4] = writeN(0xc4, 1, Buffer.prototype.writeUInt8);\n token[0xc5] = writeN(0xc5, 2, Buffer.prototype.writeUInt16BE);\n token[0xc6] = writeN(0xc6, 4, Buffer.prototype.writeUInt32BE);\n\n // ext 8 -- 0xc7\n // ext 16 -- 0xc8\n // ext 32 -- 0xc9\n token[0xc7] = writeN(0xc7, 1, Buffer.prototype.writeUInt8);\n token[0xc8] = writeN(0xc8, 2, Buffer.prototype.writeUInt16BE);\n token[0xc9] = writeN(0xc9, 4, Buffer.prototype.writeUInt32BE);\n\n // float 32 -- 0xca\n // float 64 -- 0xcb\n token[0xca] = writeN(0xca, 4, Buffer.prototype.writeFloatBE);\n token[0xcb] = writeN(0xcb, 8, Buffer.prototype.writeDoubleBE);\n\n // uint 8 -- 0xcc\n // uint 16 -- 0xcd\n // uint 32 -- 0xce\n // uint 64 -- 0xcf\n token[0xcc] = writeN(0xcc, 1, Buffer.prototype.writeUInt8);\n token[0xcd] = writeN(0xcd, 2, Buffer.prototype.writeUInt16BE);\n token[0xce] = writeN(0xce, 4, Buffer.prototype.writeUInt32BE);\n token[0xcf] = writeN(0xcf, 8, writeUInt64BE);\n\n // int 8 -- 0xd0\n // int 16 -- 0xd1\n // int 32 -- 0xd2\n // int 64 -- 0xd3\n token[0xd0] = writeN(0xd0, 1, Buffer.prototype.writeInt8);\n token[0xd1] = writeN(0xd1, 2, Buffer.prototype.writeInt16BE);\n token[0xd2] = writeN(0xd2, 4, Buffer.prototype.writeInt32BE);\n token[0xd3] = writeN(0xd3, 8, writeInt64BE);\n\n // str 8 -- 0xd9\n // str 16 -- 0xda\n // str 32 -- 0xdb\n token[0xd9] = writeN(0xd9, 1, Buffer.prototype.writeUInt8);\n token[0xda] = writeN(0xda, 2, Buffer.prototype.writeUInt16BE);\n token[0xdb] = writeN(0xdb, 4, Buffer.prototype.writeUInt32BE);\n\n // array 16 -- 0xdc\n // array 32 -- 0xdd\n token[0xdc] = writeN(0xdc, 2, Buffer.prototype.writeUInt16BE);\n token[0xdd] = writeN(0xdd, 4, Buffer.prototype.writeUInt32BE);\n\n // map 16 -- 0xde\n // map 32 -- 0xdf\n token[0xde] = writeN(0xde, 2, Buffer.prototype.writeUInt16BE);\n token[0xdf] = writeN(0xdf, 4, Buffer.prototype.writeUInt32BE);\n\n return token;\n}\n\nfunction write1(type) {\n return function(encoder, value) {\n var offset = encoder.reserve(2);\n var buffer = encoder.buffer;\n buffer[offset++] = type;\n buffer[offset] = value;\n };\n}\n\nfunction write2(type) {\n return function(encoder, value) {\n var offset = encoder.reserve(3);\n var buffer = encoder.buffer;\n buffer[offset++] = type;\n buffer[offset++] = value >>> 8;\n buffer[offset] = value;\n };\n}\n\nfunction write4(type) {\n return function(encoder, value) {\n var offset = encoder.reserve(5);\n var buffer = encoder.buffer;\n buffer[offset++] = type;\n buffer[offset++] = value >>> 24;\n buffer[offset++] = value >>> 16;\n buffer[offset++] = value >>> 8;\n buffer[offset] = value;\n };\n}\n\nfunction writeN(type, len, method, noAssert) {\n return function(encoder, value) {\n var offset = encoder.reserve(len + 1);\n encoder.buffer[offset++] = type;\n method.call(encoder.buffer, value, offset, noAssert);\n };\n}\n\nfunction writeUInt64BE(value, offset) {\n new Uint64BE(this, offset, value);\n}\n\nfunction writeInt64BE(value, offset) {\n new Int64BE(this, offset, value);\n}\n\nfunction writeFloatBE(value, offset) {\n ieee754.write(this, value, offset, false, 23, 4);\n}\n\nfunction writeDoubleBE(value, offset) {\n ieee754.write(this, value, offset, false, 52, 8);\n}\n", "// write-type.js\n\nvar IS_ARRAY = require(\"isarray\");\nvar Int64Buffer = require(\"int64-buffer\");\nvar Uint64BE = Int64Buffer.Uint64BE;\nvar Int64BE = Int64Buffer.Int64BE;\n\nvar Bufferish = require(\"./bufferish\");\nvar BufferProto = require(\"./bufferish-proto\");\nvar WriteToken = require(\"./write-token\");\nvar uint8 = require(\"./write-uint8\").uint8;\nvar ExtBuffer = require(\"./ext-buffer\").ExtBuffer;\n\nvar HAS_UINT8ARRAY = (\"undefined\" !== typeof Uint8Array);\nvar HAS_MAP = (\"undefined\" !== typeof Map);\n\nvar extmap = [];\nextmap[1] = 0xd4;\nextmap[2] = 0xd5;\nextmap[4] = 0xd6;\nextmap[8] = 0xd7;\nextmap[16] = 0xd8;\n\nexports.getWriteType = getWriteType;\n\nfunction getWriteType(options) {\n var token = WriteToken.getWriteToken(options);\n var useraw = options && options.useraw;\n var binarraybuffer = HAS_UINT8ARRAY && options && options.binarraybuffer;\n var isBuffer = binarraybuffer ? Bufferish.isArrayBuffer : Bufferish.isBuffer;\n var bin = binarraybuffer ? bin_arraybuffer : bin_buffer;\n var usemap = HAS_MAP && options && options.usemap;\n var map = usemap ? map_to_map : obj_to_map;\n\n var writeType = {\n \"boolean\": bool,\n \"function\": nil,\n \"number\": number,\n \"object\": (useraw ? object_raw : object),\n \"string\": _string(useraw ? raw_head_size : str_head_size),\n \"symbol\": nil,\n \"undefined\": nil\n };\n\n return writeType;\n\n // false -- 0xc2\n // true -- 0xc3\n function bool(encoder, value) {\n var type = value ? 0xc3 : 0xc2;\n token[type](encoder, value);\n }\n\n function number(encoder, value) {\n var ivalue = value | 0;\n var type;\n if (value !== ivalue) {\n // float 64 -- 0xcb\n type = 0xcb;\n token[type](encoder, value);\n return;\n } else if (-0x20 <= ivalue && ivalue <= 0x7F) {\n // positive fixint -- 0x00 - 0x7f\n // negative fixint -- 0xe0 - 0xff\n type = ivalue & 0xFF;\n } else if (0 <= ivalue) {\n // uint 8 -- 0xcc\n // uint 16 -- 0xcd\n // uint 32 -- 0xce\n type = (ivalue <= 0xFF) ? 0xcc : (ivalue <= 0xFFFF) ? 0xcd : 0xce;\n } else {\n // int 8 -- 0xd0\n // int 16 -- 0xd1\n // int 32 -- 0xd2\n type = (-0x80 <= ivalue) ? 0xd0 : (-0x8000 <= ivalue) ? 0xd1 : 0xd2;\n }\n token[type](encoder, ivalue);\n }\n\n // uint 64 -- 0xcf\n function uint64(encoder, value) {\n var type = 0xcf;\n token[type](encoder, value.toArray());\n }\n\n // int 64 -- 0xd3\n function int64(encoder, value) {\n var type = 0xd3;\n token[type](encoder, value.toArray());\n }\n\n // str 8 -- 0xd9\n // str 16 -- 0xda\n // str 32 -- 0xdb\n // fixstr -- 0xa0 - 0xbf\n function str_head_size(length) {\n return (length < 32) ? 1 : (length <= 0xFF) ? 2 : (length <= 0xFFFF) ? 3 : 5;\n }\n\n // raw 16 -- 0xda\n // raw 32 -- 0xdb\n // fixraw -- 0xa0 - 0xbf\n function raw_head_size(length) {\n return (length < 32) ? 1 : (length <= 0xFFFF) ? 3 : 5;\n }\n\n function _string(head_size) {\n return string;\n\n function string(encoder, value) {\n // prepare buffer\n var length = value.length;\n var maxsize = 5 + length * 3;\n encoder.offset = encoder.reserve(maxsize);\n var buffer = encoder.buffer;\n\n // expected header size\n var expected = head_size(length);\n\n // expected start point\n var start = encoder.offset + expected;\n\n // write string\n length = BufferProto.write.call(buffer, value, start);\n\n // actual header size\n var actual = head_size(length);\n\n // move content when needed\n if (expected !== actual) {\n var targetStart = start + actual - expected;\n var end = start + length;\n BufferProto.copy.call(buffer, buffer, targetStart, start, end);\n }\n\n // write header\n var type = (actual === 1) ? (0xa0 + length) : (actual <= 3) ? (0xd7 + actual) : 0xdb;\n token[type](encoder, length);\n\n // move cursor\n encoder.offset += length;\n }\n }\n\n function object(encoder, value) {\n // null\n if (value === null) return nil(encoder, value);\n\n // Buffer\n if (isBuffer(value)) return bin(encoder, value);\n\n // Array\n if (IS_ARRAY(value)) return array(encoder, value);\n\n // int64-buffer objects\n if (Uint64BE.isUint64BE(value)) return uint64(encoder, value);\n if (Int64BE.isInt64BE(value)) return int64(encoder, value);\n\n // ext formats\n var packer = encoder.codec.getExtPacker(value);\n if (packer) value = packer(value);\n if (value instanceof ExtBuffer) return ext(encoder, value);\n\n // plain old Objects or Map\n map(encoder, value);\n }\n\n function object_raw(encoder, value) {\n // Buffer\n if (isBuffer(value)) return raw(encoder, value);\n\n // others\n object(encoder, value);\n }\n\n // nil -- 0xc0\n function nil(encoder, value) {\n var type = 0xc0;\n token[type](encoder, value);\n }\n\n // fixarray -- 0x90 - 0x9f\n // array 16 -- 0xdc\n // array 32 -- 0xdd\n function array(encoder, value) {\n var length = value.length;\n var type = (length < 16) ? (0x90 + length) : (length <= 0xFFFF) ? 0xdc : 0xdd;\n token[type](encoder, length);\n\n var encode = encoder.codec.encode;\n for (var i = 0; i < length; i++) {\n encode(encoder, value[i]);\n }\n }\n\n // bin 8 -- 0xc4\n // bin 16 -- 0xc5\n // bin 32 -- 0xc6\n function bin_buffer(encoder, value) {\n var length = value.length;\n var type = (length < 0xFF) ? 0xc4 : (length <= 0xFFFF) ? 0xc5 : 0xc6;\n token[type](encoder, length);\n encoder.send(value);\n }\n\n function bin_arraybuffer(encoder, value) {\n bin_buffer(encoder, new Uint8Array(value));\n }\n\n // fixext 1 -- 0xd4\n // fixext 2 -- 0xd5\n // fixext 4 -- 0xd6\n // fixext 8 -- 0xd7\n // fixext 16 -- 0xd8\n // ext 8 -- 0xc7\n // ext 16 -- 0xc8\n // ext 32 -- 0xc9\n function ext(encoder, value) {\n var buffer = value.buffer;\n var length = buffer.length;\n var type = extmap[length] || ((length < 0xFF) ? 0xc7 : (length <= 0xFFFF) ? 0xc8 : 0xc9);\n token[type](encoder, length);\n uint8[value.type](encoder);\n encoder.send(buffer);\n }\n\n // fixmap -- 0x80 - 0x8f\n // map 16 -- 0xde\n // map 32 -- 0xdf\n function obj_to_map(encoder, value) {\n var keys = Object.keys(value);\n var length = keys.length;\n var type = (length < 16) ? (0x80 + length) : (length <= 0xFFFF) ? 0xde : 0xdf;\n token[type](encoder, length);\n\n var encode = encoder.codec.encode;\n keys.forEach(function(key) {\n encode(encoder, key);\n encode(encoder, value[key]);\n });\n }\n\n // fixmap -- 0x80 - 0x8f\n // map 16 -- 0xde\n // map 32 -- 0xdf\n function map_to_map(encoder, value) {\n if (!(value instanceof Map)) return obj_to_map(encoder, value);\n\n var length = value.size;\n var type = (length < 16) ? (0x80 + length) : (length <= 0xFFFF) ? 0xde : 0xdf;\n token[type](encoder, length);\n\n var encode = encoder.codec.encode;\n value.forEach(function(val, key, m) {\n encode(encoder, key);\n encode(encoder, val);\n });\n }\n\n // raw 16 -- 0xda\n // raw 32 -- 0xdb\n // fixraw -- 0xa0 - 0xbf\n function raw(encoder, value) {\n var length = value.length;\n var type = (length < 32) ? (0xa0 + length) : (length <= 0xFFFF) ? 0xda : 0xdb;\n token[type](encoder, length);\n encoder.send(value);\n }\n}\n", "// codec-base.js\n\nvar IS_ARRAY = require(\"isarray\");\n\nexports.createCodec = createCodec;\nexports.install = install;\nexports.filter = filter;\n\nvar Bufferish = require(\"./bufferish\");\n\nfunction Codec(options) {\n if (!(this instanceof Codec)) return new Codec(options);\n this.options = options;\n this.init();\n}\n\nCodec.prototype.init = function() {\n var options = this.options;\n\n if (options && options.uint8array) {\n this.bufferish = Bufferish.Uint8Array;\n }\n\n return this;\n};\n\nfunction install(props) {\n for (var key in props) {\n Codec.prototype[key] = add(Codec.prototype[key], props[key]);\n }\n}\n\nfunction add(a, b) {\n return (a && b) ? ab : (a || b);\n\n function ab() {\n a.apply(this, arguments);\n return b.apply(this, arguments);\n }\n}\n\nfunction join(filters) {\n filters = filters.slice();\n\n return function(value) {\n return filters.reduce(iterator, value);\n };\n\n function iterator(value, filter) {\n return filter(value);\n }\n}\n\nfunction filter(filter) {\n return IS_ARRAY(filter) ? join(filter) : filter;\n}\n\n// @public\n// msgpack.createCodec()\n\nfunction createCodec(options) {\n return new Codec(options);\n}\n\n// default shared codec\n\nexports.preset = createCodec({preset: true});\n", "// write-core.js\n\nvar ExtBuffer = require(\"./ext-buffer\").ExtBuffer;\nvar ExtPacker = require(\"./ext-packer\");\nvar WriteType = require(\"./write-type\");\nvar CodecBase = require(\"./codec-base\");\n\nCodecBase.install({\n addExtPacker: addExtPacker,\n getExtPacker: getExtPacker,\n init: init\n});\n\nexports.preset = init.call(CodecBase.preset);\n\nfunction getEncoder(options) {\n var writeType = WriteType.getWriteType(options);\n return encode;\n\n function encode(encoder, value) {\n var func = writeType[typeof value];\n if (!func) throw new Error(\"Unsupported type \\\"\" + (typeof value) + \"\\\": \" + value);\n func(encoder, value);\n }\n}\n\nfunction init() {\n var options = this.options;\n this.encode = getEncoder(options);\n\n if (options && options.preset) {\n ExtPacker.setExtPackers(this);\n }\n\n return this;\n}\n\nfunction addExtPacker(etype, Class, packer) {\n packer = CodecBase.filter(packer);\n var name = Class.name;\n if (name && name !== \"Object\") {\n var packers = this.extPackers || (this.extPackers = {});\n packers[name] = extPacker;\n } else {\n // fallback for IE\n var list = this.extEncoderList || (this.extEncoderList = []);\n list.unshift([Class, extPacker]);\n }\n\n function extPacker(value) {\n if (packer) value = packer(value);\n return new ExtBuffer(value, etype);\n }\n}\n\nfunction getExtPacker(value) {\n var packers = this.extPackers || (this.extPackers = {});\n var c = value.constructor;\n var e = c && c.name && packers[c.name];\n if (e) return e;\n\n // fallback for IE\n var list = this.extEncoderList || (this.extEncoderList = []);\n var len = list.length;\n for (var i = 0; i < len; i++) {\n var pair = list[i];\n if (c === pair[0]) return pair[1];\n }\n}\n", "// flex-buffer.js\n\nexports.FlexDecoder = FlexDecoder;\nexports.FlexEncoder = FlexEncoder;\n\nvar Bufferish = require(\"./bufferish\");\n\nvar MIN_BUFFER_SIZE = 2048;\nvar MAX_BUFFER_SIZE = 65536;\nvar BUFFER_SHORTAGE = \"BUFFER_SHORTAGE\";\n\nfunction FlexDecoder() {\n if (!(this instanceof FlexDecoder)) return new FlexDecoder();\n}\n\nfunction FlexEncoder() {\n if (!(this instanceof FlexEncoder)) return new FlexEncoder();\n}\n\nFlexDecoder.mixin = mixinFactory(getDecoderMethods());\nFlexDecoder.mixin(FlexDecoder.prototype);\n\nFlexEncoder.mixin = mixinFactory(getEncoderMethods());\nFlexEncoder.mixin(FlexEncoder.prototype);\n\nfunction getDecoderMethods() {\n return {\n bufferish: Bufferish,\n write: write,\n fetch: fetch,\n flush: flush,\n push: push,\n pull: pull,\n read: read,\n reserve: reserve,\n offset: 0\n };\n\n function write(chunk) {\n var prev = this.offset ? Bufferish.prototype.slice.call(this.buffer, this.offset) : this.buffer;\n this.buffer = prev ? (chunk ? this.bufferish.concat([prev, chunk]) : prev) : chunk;\n this.offset = 0;\n }\n\n function flush() {\n while (this.offset < this.buffer.length) {\n var start = this.offset;\n var value;\n try {\n value = this.fetch();\n } catch (e) {\n if (e && e.message != BUFFER_SHORTAGE) throw e;\n // rollback\n this.offset = start;\n break;\n }\n this.push(value);\n }\n }\n\n function reserve(length) {\n var start = this.offset;\n var end = start + length;\n if (end > this.buffer.length) throw new Error(BUFFER_SHORTAGE);\n this.offset = end;\n return start;\n }\n}\n\nfunction getEncoderMethods() {\n return {\n bufferish: Bufferish,\n write: write,\n fetch: fetch,\n flush: flush,\n push: push,\n pull: pull,\n read: read,\n reserve: reserve,\n send: send,\n maxBufferSize: MAX_BUFFER_SIZE,\n minBufferSize: MIN_BUFFER_SIZE,\n offset: 0,\n start: 0\n };\n\n function fetch() {\n var start = this.start;\n if (start < this.offset) {\n var end = this.start = this.offset;\n return Bufferish.prototype.slice.call(this.buffer, start, end);\n }\n }\n\n function flush() {\n while (this.start < this.offset) {\n var value = this.fetch();\n if (value) this.push(value);\n }\n }\n\n function pull() {\n var buffers = this.buffers || (this.buffers = []);\n var chunk = buffers.length > 1 ? this.bufferish.concat(buffers) : buffers[0];\n buffers.length = 0; // buffer exhausted\n return chunk;\n }\n\n function reserve(length) {\n var req = length | 0;\n\n if (this.buffer) {\n var size = this.buffer.length;\n var start = this.offset | 0;\n var end = start + req;\n\n // is it long enough?\n if (end < size) {\n this.offset = end;\n return start;\n }\n\n // flush current buffer\n this.flush();\n\n // resize it to 2x current length\n length = Math.max(length, Math.min(size * 2, this.maxBufferSize));\n }\n\n // minimum buffer size\n length = Math.max(length, this.minBufferSize);\n\n // allocate new buffer\n this.buffer = this.bufferish.alloc(length);\n this.start = 0;\n this.offset = req;\n return 0;\n }\n\n function send(buffer) {\n var length = buffer.length;\n if (length > this.minBufferSize) {\n this.flush();\n this.push(buffer);\n } else {\n var offset = this.reserve(length);\n Bufferish.prototype.copy.call(buffer, this.buffer, offset);\n }\n }\n}\n\n// common methods\n\nfunction write() {\n throw new Error(\"method not implemented: write()\");\n}\n\nfunction fetch() {\n throw new Error(\"method not implemented: fetch()\");\n}\n\nfunction read() {\n var length = this.buffers && this.buffers.length;\n\n // fetch the first result\n if (!length) return this.fetch();\n\n // flush current buffer\n this.flush();\n\n // read from the results\n return this.pull();\n}\n\nfunction push(chunk) {\n var buffers = this.buffers || (this.buffers = []);\n buffers.push(chunk);\n}\n\nfunction pull() {\n var buffers = this.buffers || (this.buffers = []);\n return buffers.shift();\n}\n\nfunction mixinFactory(source) {\n return mixin;\n\n function mixin(target) {\n for (var key in source) {\n target[key] = source[key];\n }\n return target;\n }\n}\n", "// encode-buffer.js\n\nexports.EncodeBuffer = EncodeBuffer;\n\nvar preset = require(\"./write-core\").preset;\n\nvar FlexEncoder = require(\"./flex-buffer\").FlexEncoder;\n\nFlexEncoder.mixin(EncodeBuffer.prototype);\n\nfunction EncodeBuffer(options) {\n if (!(this instanceof EncodeBuffer)) return new EncodeBuffer(options);\n\n if (options) {\n this.options = options;\n if (options.codec) {\n var codec = this.codec = options.codec;\n if (codec.bufferish) this.bufferish = codec.bufferish;\n }\n }\n}\n\nEncodeBuffer.prototype.codec = preset;\n\nEncodeBuffer.prototype.write = function(input) {\n this.codec.encode(this, input);\n};\n", "// encode.js\n\nexports.encode = encode;\n\nvar EncodeBuffer = require(\"./encode-buffer\").EncodeBuffer;\n\nfunction encode(input, options) {\n var encoder = new EncodeBuffer(options);\n encoder.write(input);\n return encoder.read();\n}\n", "// ext-unpacker.js\n\nexports.setExtUnpackers = setExtUnpackers;\n\nvar Bufferish = require(\"./bufferish\");\nvar Buffer = Bufferish.global;\nvar _decode;\n\nvar ERROR_COLUMNS = {name: 1, message: 1, stack: 1, columnNumber: 1, fileName: 1, lineNumber: 1};\n\nfunction setExtUnpackers(codec) {\n codec.addExtUnpacker(0x0E, [decode, unpackError(Error)]);\n codec.addExtUnpacker(0x01, [decode, unpackError(EvalError)]);\n codec.addExtUnpacker(0x02, [decode, unpackError(RangeError)]);\n codec.addExtUnpacker(0x03, [decode, unpackError(ReferenceError)]);\n codec.addExtUnpacker(0x04, [decode, unpackError(SyntaxError)]);\n codec.addExtUnpacker(0x05, [decode, unpackError(TypeError)]);\n codec.addExtUnpacker(0x06, [decode, unpackError(URIError)]);\n\n codec.addExtUnpacker(0x0A, [decode, unpackRegExp]);\n codec.addExtUnpacker(0x0B, [decode, unpackClass(Boolean)]);\n codec.addExtUnpacker(0x0C, [decode, unpackClass(String)]);\n codec.addExtUnpacker(0x0D, [decode, unpackClass(Date)]);\n codec.addExtUnpacker(0x0F, [decode, unpackClass(Number)]);\n\n if (\"undefined\" !== typeof Uint8Array) {\n codec.addExtUnpacker(0x11, unpackClass(Int8Array));\n codec.addExtUnpacker(0x12, unpackClass(Uint8Array));\n codec.addExtUnpacker(0x13, [unpackArrayBuffer, unpackClass(Int16Array)]);\n codec.addExtUnpacker(0x14, [unpackArrayBuffer, unpackClass(Uint16Array)]);\n codec.addExtUnpacker(0x15, [unpackArrayBuffer, unpackClass(Int32Array)]);\n codec.addExtUnpacker(0x16, [unpackArrayBuffer, unpackClass(Uint32Array)]);\n codec.addExtUnpacker(0x17, [unpackArrayBuffer, unpackClass(Float32Array)]);\n\n // PhantomJS/1.9.7 doesn't have Float64Array\n if (\"undefined\" !== typeof Float64Array) {\n codec.addExtUnpacker(0x18, [unpackArrayBuffer, unpackClass(Float64Array)]);\n }\n\n // IE10 doesn't have Uint8ClampedArray\n if (\"undefined\" !== typeof Uint8ClampedArray) {\n codec.addExtUnpacker(0x19, unpackClass(Uint8ClampedArray));\n }\n\n codec.addExtUnpacker(0x1A, unpackArrayBuffer);\n codec.addExtUnpacker(0x1D, [unpackArrayBuffer, unpackClass(DataView)]);\n }\n\n if (Bufferish.hasBuffer) {\n codec.addExtUnpacker(0x1B, unpackClass(Buffer));\n }\n}\n\nfunction decode(input) {\n if (!_decode) _decode = require(\"./decode\").decode; // lazy load\n return _decode(input);\n}\n\nfunction unpackRegExp(value) {\n return RegExp.apply(null, value);\n}\n\nfunction unpackError(Class) {\n return function(value) {\n var out = new Class();\n for (var key in ERROR_COLUMNS) {\n out[key] = value[key];\n }\n return out;\n };\n}\n\nfunction unpackClass(Class) {\n return function(value) {\n return new Class(value);\n };\n}\n\nfunction unpackArrayBuffer(value) {\n return (new Uint8Array(value)).buffer;\n}\n", "// read-format.js\n\nvar ieee754 = require(\"ieee754\");\nvar Int64Buffer = require(\"int64-buffer\");\nvar Uint64BE = Int64Buffer.Uint64BE;\nvar Int64BE = Int64Buffer.Int64BE;\n\nexports.getReadFormat = getReadFormat;\nexports.readUint8 = uint8;\n\nvar Bufferish = require(\"./bufferish\");\nvar BufferProto = require(\"./bufferish-proto\");\n\nvar HAS_MAP = (\"undefined\" !== typeof Map);\nvar NO_ASSERT = true;\n\nfunction getReadFormat(options) {\n var binarraybuffer = Bufferish.hasArrayBuffer && options && options.binarraybuffer;\n var int64 = options && options.int64;\n var usemap = HAS_MAP && options && options.usemap;\n\n var readFormat = {\n map: (usemap ? map_to_map : map_to_obj),\n array: array,\n str: str,\n bin: (binarraybuffer ? bin_arraybuffer : bin_buffer),\n ext: ext,\n uint8: uint8,\n uint16: uint16,\n uint32: uint32,\n uint64: read(8, int64 ? readUInt64BE_int64 : readUInt64BE),\n int8: int8,\n int16: int16,\n int32: int32,\n int64: read(8, int64 ? readInt64BE_int64 : readInt64BE),\n float32: read(4, readFloatBE),\n float64: read(8, readDoubleBE)\n };\n\n return readFormat;\n}\n\nfunction map_to_obj(decoder, len) {\n var value = {};\n var i;\n var k = new Array(len);\n var v = new Array(len);\n\n var decode = decoder.codec.decode;\n for (i = 0; i < len; i++) {\n k[i] = decode(decoder);\n v[i] = decode(decoder);\n }\n for (i = 0; i < len; i++) {\n value[k[i]] = v[i];\n }\n return value;\n}\n\nfunction map_to_map(decoder, len) {\n var value = new Map();\n var i;\n var k = new Array(len);\n var v = new Array(len);\n\n var decode = decoder.codec.decode;\n for (i = 0; i < len; i++) {\n k[i] = decode(decoder);\n v[i] = decode(decoder);\n }\n for (i = 0; i < len; i++) {\n value.set(k[i], v[i]);\n }\n return value;\n}\n\nfunction array(decoder, len) {\n var value = new Array(len);\n var decode = decoder.codec.decode;\n for (var i = 0; i < len; i++) {\n value[i] = decode(decoder);\n }\n return value;\n}\n\nfunction str(decoder, len) {\n var start = decoder.reserve(len);\n var end = start + len;\n return BufferProto.toString.call(decoder.buffer, \"utf-8\", start, end);\n}\n\nfunction bin_buffer(decoder, len) {\n var start = decoder.reserve(len);\n var end = start + len;\n var buf = BufferProto.slice.call(decoder.buffer, start, end);\n return Bufferish.from(buf);\n}\n\nfunction bin_arraybuffer(decoder, len) {\n var start = decoder.reserve(len);\n var end = start + len;\n var buf = BufferProto.slice.call(decoder.buffer, start, end);\n return Bufferish.Uint8Array.from(buf).buffer;\n}\n\nfunction ext(decoder, len) {\n var start = decoder.reserve(len+1);\n var type = decoder.buffer[start++];\n var end = start + len;\n var unpack = decoder.codec.getExtUnpacker(type);\n if (!unpack) throw new Error(\"Invalid ext type: \" + (type ? (\"0x\" + type.toString(16)) : type));\n var buf = BufferProto.slice.call(decoder.buffer, start, end);\n return unpack(buf);\n}\n\nfunction uint8(decoder) {\n var start = decoder.reserve(1);\n return decoder.buffer[start];\n}\n\nfunction int8(decoder) {\n var start = decoder.reserve(1);\n var value = decoder.buffer[start];\n return (value & 0x80) ? value - 0x100 : value;\n}\n\nfunction uint16(decoder) {\n var start = decoder.reserve(2);\n var buffer = decoder.buffer;\n return (buffer[start++] << 8) | buffer[start];\n}\n\nfunction int16(decoder) {\n var start = decoder.reserve(2);\n var buffer = decoder.buffer;\n var value = (buffer[start++] << 8) | buffer[start];\n return (value & 0x8000) ? value - 0x10000 : value;\n}\n\nfunction uint32(decoder) {\n var start = decoder.reserve(4);\n var buffer = decoder.buffer;\n return (buffer[start++] * 16777216) + (buffer[start++] << 16) + (buffer[start++] << 8) + buffer[start];\n}\n\nfunction int32(decoder) {\n var start = decoder.reserve(4);\n var buffer = decoder.buffer;\n return (buffer[start++] << 24) | (buffer[start++] << 16) | (buffer[start++] << 8) | buffer[start];\n}\n\nfunction read(len, method) {\n return function(decoder) {\n var start = decoder.reserve(len);\n return method.call(decoder.buffer, start, NO_ASSERT);\n };\n}\n\nfunction readUInt64BE(start) {\n return new Uint64BE(this, start).toNumber();\n}\n\nfunction readInt64BE(start) {\n return new Int64BE(this, start).toNumber();\n}\n\nfunction readUInt64BE_int64(start) {\n return new Uint64BE(this, start);\n}\n\nfunction readInt64BE_int64(start) {\n return new Int64BE(this, start);\n}\n\nfunction readFloatBE(start) {\n return ieee754.read(this, start, false, 23, 4);\n}\n\nfunction readDoubleBE(start) {\n return ieee754.read(this, start, false, 52, 8);\n}", "// read-token.js\n\nvar ReadFormat = require(\"./read-format\");\n\nexports.getReadToken = getReadToken;\n\nfunction getReadToken(options) {\n var format = ReadFormat.getReadFormat(options);\n\n if (options && options.useraw) {\n return init_useraw(format);\n } else {\n return init_token(format);\n }\n}\n\nfunction init_token(format) {\n var i;\n var token = new Array(256);\n\n // positive fixint -- 0x00 - 0x7f\n for (i = 0x00; i <= 0x7f; i++) {\n token[i] = constant(i);\n }\n\n // fixmap -- 0x80 - 0x8f\n for (i = 0x80; i <= 0x8f; i++) {\n token[i] = fix(i - 0x80, format.map);\n }\n\n // fixarray -- 0x90 - 0x9f\n for (i = 0x90; i <= 0x9f; i++) {\n token[i] = fix(i - 0x90, format.array);\n }\n\n // fixstr -- 0xa0 - 0xbf\n for (i = 0xa0; i <= 0xbf; i++) {\n token[i] = fix(i - 0xa0, format.str);\n }\n\n // nil -- 0xc0\n token[0xc0] = constant(null);\n\n // (never used) -- 0xc1\n token[0xc1] = null;\n\n // false -- 0xc2\n // true -- 0xc3\n token[0xc2] = constant(false);\n token[0xc3] = constant(true);\n\n // bin 8 -- 0xc4\n // bin 16 -- 0xc5\n // bin 32 -- 0xc6\n token[0xc4] = flex(format.uint8, format.bin);\n token[0xc5] = flex(format.uint16, format.bin);\n token[0xc6] = flex(format.uint32, format.bin);\n\n // ext 8 -- 0xc7\n // ext 16 -- 0xc8\n // ext 32 -- 0xc9\n token[0xc7] = flex(format.uint8, format.ext);\n token[0xc8] = flex(format.uint16, format.ext);\n token[0xc9] = flex(format.uint32, format.ext);\n\n // float 32 -- 0xca\n // float 64 -- 0xcb\n token[0xca] = format.float32;\n token[0xcb] = format.float64;\n\n // uint 8 -- 0xcc\n // uint 16 -- 0xcd\n // uint 32 -- 0xce\n // uint 64 -- 0xcf\n token[0xcc] = format.uint8;\n token[0xcd] = format.uint16;\n token[0xce] = format.uint32;\n token[0xcf] = format.uint64;\n\n // int 8 -- 0xd0\n // int 16 -- 0xd1\n // int 32 -- 0xd2\n // int 64 -- 0xd3\n token[0xd0] = format.int8;\n token[0xd1] = format.int16;\n token[0xd2] = format.int32;\n token[0xd3] = format.int64;\n\n // fixext 1 -- 0xd4\n // fixext 2 -- 0xd5\n // fixext 4 -- 0xd6\n // fixext 8 -- 0xd7\n // fixext 16 -- 0xd8\n token[0xd4] = fix(1, format.ext);\n token[0xd5] = fix(2, format.ext);\n token[0xd6] = fix(4, format.ext);\n token[0xd7] = fix(8, format.ext);\n token[0xd8] = fix(16, format.ext);\n\n // str 8 -- 0xd9\n // str 16 -- 0xda\n // str 32 -- 0xdb\n token[0xd9] = flex(format.uint8, format.str);\n token[0xda] = flex(format.uint16, format.str);\n token[0xdb] = flex(format.uint32, format.str);\n\n // array 16 -- 0xdc\n // array 32 -- 0xdd\n token[0xdc] = flex(format.uint16, format.array);\n token[0xdd] = flex(format.uint32, format.array);\n\n // map 16 -- 0xde\n // map 32 -- 0xdf\n token[0xde] = flex(format.uint16, format.map);\n token[0xdf] = flex(format.uint32, format.map);\n\n // negative fixint -- 0xe0 - 0xff\n for (i = 0xe0; i <= 0xff; i++) {\n token[i] = constant(i - 0x100);\n }\n\n return token;\n}\n\nfunction init_useraw(format) {\n var i;\n var token = init_token(format).slice();\n\n // raw 8 -- 0xd9\n // raw 16 -- 0xda\n // raw 32 -- 0xdb\n token[0xd9] = token[0xc4];\n token[0xda] = token[0xc5];\n token[0xdb] = token[0xc6];\n\n // fixraw -- 0xa0 - 0xbf\n for (i = 0xa0; i <= 0xbf; i++) {\n token[i] = fix(i - 0xa0, format.bin);\n }\n\n return token;\n}\n\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nfunction flex(lenFunc, decodeFunc) {\n return function(decoder) {\n var len = lenFunc(decoder);\n return decodeFunc(decoder, len);\n };\n}\n\nfunction fix(len, method) {\n return function(decoder) {\n return method(decoder, len);\n };\n}\n", "// read-core.js\n\nvar ExtBuffer = require(\"./ext-buffer\").ExtBuffer;\nvar ExtUnpacker = require(\"./ext-unpacker\");\nvar readUint8 = require(\"./read-format\").readUint8;\nvar ReadToken = require(\"./read-token\");\nvar CodecBase = require(\"./codec-base\");\n\nCodecBase.install({\n addExtUnpacker: addExtUnpacker,\n getExtUnpacker: getExtUnpacker,\n init: init\n});\n\nexports.preset = init.call(CodecBase.preset);\n\nfunction getDecoder(options) {\n var readToken = ReadToken.getReadToken(options);\n return decode;\n\n function decode(decoder) {\n var type = readUint8(decoder);\n var func = readToken[type];\n if (!func) throw new Error(\"Invalid type: \" + (type ? (\"0x\" + type.toString(16)) : type));\n return func(decoder);\n }\n}\n\nfunction init() {\n var options = this.options;\n this.decode = getDecoder(options);\n\n if (options && options.preset) {\n ExtUnpacker.setExtUnpackers(this);\n }\n\n return this;\n}\n\nfunction addExtUnpacker(etype, unpacker) {\n var unpackers = this.extUnpackers || (this.extUnpackers = []);\n unpackers[etype] = CodecBase.filter(unpacker);\n}\n\nfunction getExtUnpacker(type) {\n var unpackers = this.extUnpackers || (this.extUnpackers = []);\n return unpackers[type] || extUnpacker;\n\n function extUnpacker(buffer) {\n return new ExtBuffer(buffer, type);\n }\n}\n", "// decode-buffer.js\n\nexports.DecodeBuffer = DecodeBuffer;\n\nvar preset = require(\"./read-core\").preset;\n\nvar FlexDecoder = require(\"./flex-buffer\").FlexDecoder;\n\nFlexDecoder.mixin(DecodeBuffer.prototype);\n\nfunction DecodeBuffer(options) {\n if (!(this instanceof DecodeBuffer)) return new DecodeBuffer(options);\n\n if (options) {\n this.options = options;\n if (options.codec) {\n var codec = this.codec = options.codec;\n if (codec.bufferish) this.bufferish = codec.bufferish;\n }\n }\n}\n\nDecodeBuffer.prototype.codec = preset;\n\nDecodeBuffer.prototype.fetch = function() {\n return this.codec.decode(this);\n};\n", "// decode.js\n\nexports.decode = decode;\n\nvar DecodeBuffer = require(\"./decode-buffer\").DecodeBuffer;\n\nfunction decode(input, options) {\n var decoder = new DecodeBuffer(options);\n decoder.write(input);\n return decoder.read();\n}", "/**\n * event-lite.js - Light-weight EventEmitter (less than 1KB when gzipped)\n *\n * @copyright Yusuke Kawasaki\n * @license MIT\n * @constructor\n * @see https://github.com/kawanet/event-lite\n * @see http://kawanet.github.io/event-lite/EventLite.html\n * @example\n * var EventLite = require(\"event-lite\");\n *\n * function MyClass() {...} // your class\n *\n * EventLite.mixin(MyClass.prototype); // import event methods\n *\n * var obj = new MyClass();\n * obj.on(\"foo\", function() {...}); // add event listener\n * obj.once(\"bar\", function() {...}); // add one-time event listener\n * obj.emit(\"foo\"); // dispatch event\n * obj.emit(\"bar\"); // dispatch another event\n * obj.off(\"foo\"); // remove event listener\n */\n\nfunction EventLite() {\n if (!(this instanceof EventLite)) return new EventLite();\n}\n\n(function(EventLite) {\n // export the class for node.js\n if (\"undefined\" !== typeof module) module.exports = EventLite;\n\n // property name to hold listeners\n var LISTENERS = \"listeners\";\n\n // methods to export\n var methods = {\n on: on,\n once: once,\n off: off,\n emit: emit\n };\n\n // mixin to self\n mixin(EventLite.prototype);\n\n // export mixin function\n EventLite.mixin = mixin;\n\n /**\n * Import on(), once(), off() and emit() methods into target object.\n *\n * @function EventLite.mixin\n * @param target {Prototype}\n */\n\n function mixin(target) {\n for (var key in methods) {\n target[key] = methods[key];\n }\n return target;\n }\n\n /**\n * Add an event listener.\n *\n * @function EventLite.prototype.on\n * @param type {string}\n * @param func {Function}\n * @returns {EventLite} Self for method chaining\n */\n\n function on(type, func) {\n getListeners(this, type).push(func);\n return this;\n }\n\n /**\n * Add one-time event listener.\n *\n * @function EventLite.prototype.once\n * @param type {string}\n * @param func {Function}\n * @returns {EventLite} Self for method chaining\n */\n\n function once(type, func) {\n var that = this;\n wrap.originalListener = func;\n getListeners(that, type).push(wrap);\n return that;\n\n function wrap() {\n off.call(that, type, wrap);\n func.apply(this, arguments);\n }\n }\n\n /**\n * Remove an event listener.\n *\n * @function EventLite.prototype.off\n * @param [type] {string}\n * @param [func] {Function}\n * @returns {EventLite} Self for method chaining\n */\n\n function off(type, func) {\n var that = this;\n var listners;\n if (!arguments.length) {\n delete that[LISTENERS];\n } else if (!func) {\n listners = that[LISTENERS];\n if (listners) {\n delete listners[type];\n if (!Object.keys(listners).length) return off.call(that);\n }\n } else {\n listners = getListeners(that, type, true);\n if (listners) {\n listners = listners.filter(ne);\n if (!listners.length) return off.call(that, type);\n that[LISTENERS][type] = listners;\n }\n }\n return that;\n\n function ne(test) {\n return test !== func && test.originalListener !== func;\n }\n }\n\n /**\n * Dispatch (trigger) an event.\n *\n * @function EventLite.prototype.emit\n * @param type {string}\n * @param [value] {*}\n * @returns {boolean} True when a listener received the event\n */\n\n function emit(type, value) {\n var that = this;\n var listeners = getListeners(that, type, true);\n if (!listeners) return false;\n var arglen = arguments.length;\n if (arglen === 1) {\n listeners.forEach(zeroarg);\n } else if (arglen === 2) {\n listeners.forEach(onearg);\n } else {\n var args = Array.prototype.slice.call(arguments, 1);\n listeners.forEach(moreargs);\n }\n return !!listeners.length;\n\n function zeroarg(func) {\n func.call(that);\n }\n\n function onearg(func) {\n func.call(that, value);\n }\n\n function moreargs(func) {\n func.apply(that, args);\n }\n }\n\n /**\n * @ignore\n */\n\n function getListeners(that, type, readonly) {\n if (readonly && !that[LISTENERS]) return;\n var listeners = that[LISTENERS] || (that[LISTENERS] = {});\n return listeners[type] || (listeners[type] = []);\n }\n\n})(EventLite);\n", "// encoder.js\n\nexports.Encoder = Encoder;\n\nvar EventLite = require(\"event-lite\");\nvar EncodeBuffer = require(\"./encode-buffer\").EncodeBuffer;\n\nfunction Encoder(options) {\n if (!(this instanceof Encoder)) return new Encoder(options);\n EncodeBuffer.call(this, options);\n}\n\nEncoder.prototype = new EncodeBuffer();\n\nEventLite.mixin(Encoder.prototype);\n\nEncoder.prototype.encode = function(chunk) {\n this.write(chunk);\n this.emit(\"data\", this.read());\n};\n\nEncoder.prototype.end = function(chunk) {\n if (arguments.length) this.encode(chunk);\n this.flush();\n this.emit(\"end\");\n};\n", "// decoder.js\n\nexports.Decoder = Decoder;\n\nvar EventLite = require(\"event-lite\");\nvar DecodeBuffer = require(\"./decode-buffer\").DecodeBuffer;\n\nfunction Decoder(options) {\n if (!(this instanceof Decoder)) return new Decoder(options);\n DecodeBuffer.call(this, options);\n}\n\nDecoder.prototype = new DecodeBuffer();\n\nEventLite.mixin(Decoder.prototype);\n\nDecoder.prototype.decode = function(chunk) {\n if (arguments.length) this.write(chunk);\n this.flush();\n};\n\nDecoder.prototype.push = function(chunk) {\n this.emit(\"data\", chunk);\n};\n\nDecoder.prototype.end = function(chunk) {\n this.decode(chunk);\n this.emit(\"end\");\n};\n", "// ext.js\n\n// load both interfaces\nrequire(\"./read-core\");\nrequire(\"./write-core\");\n\nexports.createCodec = require(\"./codec-base\").createCodec;\n", "// codec.js\n\n// load both interfaces\nrequire(\"./read-core\");\nrequire(\"./write-core\");\n\n// @public\n// msgpack.codec.preset\n\nexports.codec = {\n preset: require(\"./codec-base\").preset\n};\n", "// browser.js\n\nexports.encode = require(\"./encode\").encode;\nexports.decode = require(\"./decode\").decode;\n\nexports.Encoder = require(\"./encoder\").Encoder;\nexports.Decoder = require(\"./decoder\").Decoder;\n\nexports.createCodec = require(\"./ext\").createCodec;\nexports.codec = require(\"./codec\").codec;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar self = {};\nexports.delay = self.delay = function (ms){\n\tif(ms === undefined) ms = 1000;\n\treturn new Promise(function(resolve,reject) {\n\t\treturn setTimeout(resolve,ms);\n\t});\n};\n\nexports.msToStr = self.msToStr = function (t,includeMs){\n\tt || (t = 0);\n\t\n\tt = Math.round(t);\n\t\n\tvar neg = t < 0;\n\t\n\tif (t < 0) { t = -t };\n\t\n\tvar s = Math.floor((t % 60000) / 1000);\n\tvar m = Math.floor((t - s * 1000) / 60000);\n\t\n\tif (s == 60) {\n\t\ts = 0;\n\t\tm++;\n\t};\n\t\n\t// m (\"0\"+m).slice(-2)\n\tvar str = (\"\" + m + \":\" + (\"0\" + s).slice(-2));\n\t\n\tif (includeMs) {\n\t\tstr = str + '.' + (\"000\" + (t % 1000)).slice(-3);\n\t};\n\t\n\tif (neg) {\n\t\tstr = \"-\" + str;\n\t};\n\treturn str;\n};\n\n\nexports.refreshPseudoClass = self.refreshPseudoClass = function (flag,new$,old,topflag){\n\t// remove hover classes upwards\n\tvar root = document.body;\n\tvar added = [];\n\t\n\tif (topflag) {\n\t\tif (old && old.classList) {\n\t\t\told.classList.remove(topflag);\n\t\t};\n\t\t\n\t\tif (new$ && new$.classList) {\n\t\t\tnew$.classList.add(topflag);\n\t\t};\n\t};\n\t\n\twhile (old && old != root && (!(new$) || !old.contains(new$))){\n\t\tif (old.classList) { old.classList.remove(flag) };\n\t\told = old.parentNode;\n\t};\n\t\n\twhile (new$ && new$ != root && root.contains(new$)){\n\t\tif (new$.classList) {\n\t\t\tadded.push(new$);\n\t\t\tnew$.classList.add(flag);\n\t\t};\n\t\t\n\t\tnew$ = new$.parentNode;\n\t};\n\t\n\treturn added;\n};\n\n\nexports.callClosest = self.callClosest = function (node,meth,args){\n\tif(args === undefined) args = [];\n\tif (!node) { return };\n\t\n\tnode = node._dom || node;\n\twhile (node){\n\t\tif (node._tag && (node._tag[meth] instanceof Function)) {\n\t\t\treturn node._tag[meth].apply(node._tag,args);\n\t\t};\n\t\tnode = node.parentNode;\n\t};\n\treturn null;\n};\n\nvar msgpack = require('msgpack-lite');\nvar Bufferish = msgpack.Decoder.prototype.bufferish;\n\nexports.mpconcat = self.mpconcat = function (buffers){\n\treturn Bufferish.concat(buffers);\n};\n\nexports.mpencode = self.mpencode = function (){\n\tvar $0 = arguments, i = $0.length;\n\tvar chunks = new Array(i>0 ? i : 0);\n\twhile(i>0) chunks[i-1] = $0[--i];\n\tvar encoder = new (msgpack.Encoder)({});\n\tfor (let i = 0, items = iter$(chunks), len = items.length; i < len; i++) {\n\t\tencoder.write(items[i]);\n\t};\n\treturn encoder.read();\n};\n\nexports.delay = self.delay = function (ms){\n\tif(ms === undefined) ms = 1000;\n\treturn new Promise(function(resolve,reject) {\n\t\treturn setTimeout(resolve,ms);\n\t});\n};\n\nexports.msToStr = self.msToStr = function (t,includeMs){\n\tvar s = Math.floor((t % 60000) / 1000);\n\tvar m = Math.floor((t - s * 1000) / 60000);\n\t\n\tif (s == 60) {\n\t\ts = 0;\n\t\tm++;\n\t};\n\t\n\t// m (\"0\"+m).slice(-2)\n\tvar str = (\"\" + m + \":\" + (\"0\" + s).slice(-2));\n\t\n\tif (includeMs) {\n\t\tstr = str + '.' + (\"000\" + (t % 1000)).slice(-3);\n\t};\n\t\n\treturn str;\n};\n\nexports.uuid = self.uuid = function (a,b){\n\tb = a = '';\n\twhile (a++ < 36){\n\t\tb += (a * 51 & 52) ? ((a ^ 15) ? (8 ^ Math.random() * ((a ^ 20) ? 16 : 4)) : 4).toString(16) : '-';\n\t};\n\treturn b;\n};\n\nexports.rndstr = self.rndstr = function (len){\n\tif(len === undefined) len = 16;\n\treturn self.uuid().replace(/\\-/g,'').substr(0,len);\n};\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n/*\n\nThe format for storing events is a highly minified msgpack array in\nthe following format:\n\n[OFFSET,AGENT,TARGET,TYPE, [PARAM1,PARAM2,...] ]\n\n1 OFFSET Milliseconds since the previous event in the stream\n2 AGENT Session id of the actor responsible for the event\n3 TARGET Widget/File/Object target of the event\n4 TYPE An integer event code\n5 PARAMS Supplied to the event\n\nWhenever an event has the same AGENT,TARGET,TYPE as the previous event\nit will be compacted to [OFFSET,[PARAM1,PARAM2,...]]\n\nEvery type of widget can define their own custom event-codes from int 60 and up\nEvery widget shares event-codes 30-49\n\nEvent codes >= 100 will be trigger append\n\n*/\n\n\nvar VERSION = exports.VERSION = 2;\nvar SPIV = exports.SPIV = 2;\n\n/* MSG\n\nMessages can be sent to and from the socket server with the following format:\n\n[MSGCODE,PARAMS(Array),MSGREF,TIME++]\n\n*/\n\nvar MSG = exports.MSG = {\n\tAUTH: 1,\n\tPUSH: 2, // [push,index,EVENT,state,uniqref]\n\tSTATS: 3,\n\tPING: 4,\n\tPONG: 5,\n\tCHANGE: 6, // [change,index,NEW EVENT]\n\tSTATE: 7,\n\tPREPARE: 8,\n\tRECSTART: 9,\n\tRECSTOP: 10,\n\tCALLBACK: 11,\n\tPUBLISH: 12,\n\tCONNECTED: 13,\n\tFORK: 15,\n\tAUTOSAVE: 16,\n\tRECREVERT: 17,\n\tROLLBACK: 18, // [index]\n\tJOIN: 20,\n\tLEAVE: 21,\n\tSYNC: 22,\n\tSYNCED: 23,\n\tERROR: 24,\n\tALERT: 25,\n\tSID: 26,\n\tTRACKING: 27,\n\tVIEWSTATE: 28,\n\t// STREAM_REQUEST: 100 # [CODE,CID,FROM_BYTE]\n\t\n\t// all message codes from 100 > are directly mapping to a model\n\tSTREAMAPPEND: 100, // [CODE,CID,OFFSET](BYTES)\n\tSTREAMSTATE: 101, // [CODE,CID,LENGTH]\n\tSTREAMRANGE: 102, // [CODE,CID,OFFSET])(BYTES)\n\tSTREAMGETRANGE: 103, // [CODE,CID,START,END]\n\tSTREAMTRIM: 104, // [CODE,STREAMID(with version?),END]\n\tSTREAMERROR: 105,\n\tSTREAMFLATTEN: 106,\n\tCASTLOCK: 110,\n\t\n\tOK: 200,\n\tUNAUTHORIZED: 401,\n\tERR_NOTFOUND: 404,\n\tREQUEST_TIMEOUT: 408,\n\tERR_PAYLOAD_TOO_LARGE: 413,\n\tERR_LOCKED: 423,\n\tERR_OUT_OF_RANGE: 416,\n\t\n\tRELOAD_STYLES: 1000,\n\tUPDATES_AVAILABLE: 1001,\n\tNOTIFICATIONS_AVAILABLE: 1010\n};\n\n// Action classes can register in this map\n// as handlers for specific types\nvar ACTION_MAP = exports.ACTION_MAP = {};\n\nvar WIDGET_TYPE_MAP = exports.WIDGET_TYPE_MAP = {};\n\nvar GRANT = exports.GRANT = {\n\tSHOW: 1,\n\tEDIT: 2\n};\n\nvar DIRTY = exports.DIRTY = {\n\tSIZE: 1,\n\tLAYOUT: 2\n};\n\n// global actions\nvar ACTION = exports.ACTION = {};\n\nif (true) {\n\twindow.PROTOCOL_ACTION = ACTION;\n};\n\n/* WIDGET\n*/\n\nvar WIDGET = exports.WIDGET = {\n\tCREATE: 15,\n\tFLAG: 17,\n\tUNFLAG: 18,\n\tUPDATE: 20,\n\tAPPEND: 21, // Appending nested events for widget [offset,[events]]\n\tCONFIGURE: 25,\n\tBATCH: 27,\n\tLAYOUT: 28\n};\n\nWIDGET.FLAGS = {\n\tCreated: 1,\n\tEnabled: 2,\n\tDeleted: 4\n};\n\nvar CAST = exports.CAST = Object.create(WIDGET);\nvar FILE = exports.FILE = Object.create(WIDGET);\nvar LAYOUT = exports.LAYOUT = Object.create(WIDGET);\nvar AGENT = exports.AGENT = Object.create(WIDGET);\nvar POINTER = exports.POINTER = Object.create(WIDGET);\nvar SIMULATOR = exports.SIMULATOR = Object.create(WIDGET);\nvar CONSOLE = exports.CONSOLE = Object.create(WIDGET);\nvar STREAM = exports.STREAM = {};\nvar DOM = exports.DOM = {};\n\n\n\n// WARN only append - never change!\nvar KEYS = exports.KEYS = ACTION.KEY_TYPES = [\n\t'state', // 0\n\t'pointer', // 1\n\t'layout', // 2\n\t'selection', // 3\n\t'file', // 4\n\t'focus', // 5\n\t'hover',\n\t'active',\n\t'enabled',\n\t'visible',\n\t'busy',\n\t'fontSize',\n\t'width', // 2\n\t'height', // 3\n\t'resizing',\n\t'baseStyle',\n\t'area',\n\t'externaljs',\n\t'colspan',\n\t'hoverEntry',\n\t'viewbox', // legacy\n\t'class',\n\t'style',\n\t'title',\n\t'log',\n\t'info',\n\t'warn',\n\t'error',\n\t'alert',\n\t'meta',\n\t'function',\n\t'element',\n\t'instance',\n\t'udef',\n\t'more',\n\t'array',\n\t'div',\n\t'p',\n\t'h1',\n\t'h2',\n\t'h3',\n\t'h4',\n\t'h5',\n\t'h6',\n\t'span',\n\t'b',\n\t'i',\n\t'u',\n\t'get',\n\t'post',\n\t'put',\n\t'options',\n\t'left',\n\t'top',\n\t'contentLeft',\n\t'contentTop',\n\t'contentWidth',\n\t'contentheight',\n\t'scrollTop',\n\t'scrollLeft',\n\t'scrollWidth',\n\t'scrollHeight',\n\t'lineHeight',\n\t'maxWidth',\n\t'maxHeight'\n];\n\nfor (let i = 0, items = iter$(KEYS), len = items.length; i < len; i++) {\n\tKEYS[items[i].toUpperCase()] = i;\n};\n\n// SCRIMBA OBJECT NOTATION\nvar SCON = exports.SCON = {\n\tparsedURICache: {},\n\tclone: function(item) { return JSON.parse(JSON.stringify(item)); },\n\tcompare: function(a,b) { return JSON.stringify(a) == JSON.stringify(b); },\n\tkeyToRef: function(k) { return (KEYS.indexOf(k) >= 0) ? KEYS.indexOf(k) : k; },\n\trefToKey: function(k) { return (typeof k == 'number') ? ((KEYS[k] || k)) : k; },\n\tpaths: {},\n\tstrToPath: function(str) {\n\t\tif (this[str]) { return this[str] };\n\t\tlet parts = str.split(\".\");\n\t\tparts = parts.map(function(part) {\n\t\t\tif ((/^\\-?\\d+$/).test(part)) {\n\t\t\t\treturn parseInt(part);\n\t\t\t};\n\t\t\treturn part;\n\t\t});\n\t\treturn this[str] = (len$(parts) == 1) ? parts[0] : parts;\n\t},\n\t\n\tpathToStr: function(path) {\n\t\treturn (path instanceof Array) ? path.join(\".\") : String(path);\n\t},\n\t\n\tdecodeURI: function(str) {\n\t\tvar ary;\n\t\tif (!((typeof str=='string'||str instanceof String))) {\n\t\t\treturn null;\n\t\t};\n\t\t\n\t\tlet cached = this.parsedURICache[str];\n\t\t\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t};\n\t\t\n\t\tlet m = str.match(/(scrimba\\:\\/\\/)?(c[\\w\\-]+)(\\@(\\d+))?/);\n\t\tlet obj = {\n\t\t\tcid: m[2],\n\t\t\tindex: m[4]\n\t\t};\n\t\tvar ary = iter$(str.substr(m[0].length).split(\"#\"));let path = ary[0],sel = ary[1];\n\t\t\n\t\tobj.path = path;\n\t\tif (sel) {\n\t\t\tobj.rangeString = sel;\n\t\t\tobj.selection = this.decodeRangeString(sel);\n\t\t};\n\t\t\n\t\treturn this.parsedURICache[str] = obj;\n\t},\n\t\n\tdecodeRangeString: function(str) {\n\t\tstr = str.replace(/\\_/g,':');\n\t\tlet m = str.match(/L(\\d+)(\\:(\\d+))?(-L?(\\d+)(\\:(\\d+))?)?/).map(function(part) {\n\t\t\treturn part ? parseInt(part) : null;\n\t\t});\n\t\t\n\t\tlet l0 = m[1],c0 = m[3],l1 = m[5],c1 = m[7];\n\t\t\n\t\t// the 5th argument is a boolean that declares whether range is whole line\n\t\t\n\t\tif (!l1) {\n\t\t\t// a single \n\t\t\treturn [l0,c0 || 1,l0,c0 || 1,!c0];\n\t\t};\n\t\t\n\t\treturn [l0,c0 || 1,l1,c1 || 1,!c0 && !c1];\n\t}\n};\n\n\n\n/* LCRange\n[LINE, COL, COL_MOVE, LINE_MOVE]\n*/\n\nfunction LCRange(){ };\n\nexports.LCRange = LCRange; // export class \nLCRange.lclcToArray = function (l1,c1,l2,c2){\n\tif (l2 == l1 && c2 == c1 || (l2 == null && c2 == null)) {\n\t\treturn [l1,c1];\n\t} else if (l2 == l1) {\n\t\treturn [l1,c1,c2 - c1];\n\t} else {\n\t\treturn [l1,c1,c2 - c1,l2 - l1];\n\t};\n};\n\nLCRange.rangeToArray = function (range){\n\tvar ary = [\n\t\trange.startLineNumber,\n\t\trange.startColumn,\n\t\trange.endColumn - range.startColumn,\n\t\trange.endLineNumber - range.startLineNumber\n\t];\n\tif (ary[3] == 0) {\n\t\tary.pop();\n\t\tif (ary[2] == 0) { ary.pop() };\n\t};\n\t\n\treturn ary;\n\t// return ary[2] == ary[3] == 0 ? ary.slice(0,2) : ary\n};\n\nLCRange.selectionToArray = function (val){\n\tvar ary = [\n\t\tval.selectionStartLineNumber,\n\t\tval.selectionStartColumn,\n\t\tval.positionColumn - val.selectionStartColumn,\n\t\tval.positionLineNumber - val.selectionStartLineNumber\n\t];\n\t\n\tif (ary[3] == 0) {\n\t\tary.pop();\n\t\tif (ary[2] == 0) { ary.pop() };\n\t};\n\t\n\treturn ary;\n\t// return ary[2] == ary[3] == 0 ? ary.slice(0,2) : ary\n};\n\nACTION.SET = 1;\nACTION.PATCH = 2;\nACTION.WIDGET_CREATE = WIDGET.CREATE = 3;\n\n/* LCINSERT\n\n[ int_TARGETID, int_LINE, int_COL, str_TEXT, sel_CARET? ]\nDropping CARET if CARET == [ LINE, COL + TEXT.length ]\n*/\n\nACTION.LCINSERT = FILE.LCINSERT = 4;\n\n/* LCDELETE\n[ int_TARGETID, int_LINE, int_COL, int_LINEDELTA, int_COLDELTA, sel_CARET?]\nDropping CARET if CARET == [LINE,COL]\n*/\n\nACTION.LCDELETE = FILE.LCDELETE = 5;\n\nACTION.LCEDIT = FILE.LCEDIT = 6;\nACTION.LCSELECTION = FILE.LCSELECTION = 7;\n\n/* LAYOUT\n[target: WidgetRef, ]\n*/\n\nACTION.LAYOUT = 8;\nACTION.BROWSER_LAYOUT = 9;\nACTION.NODE_LAYOUT = 10;\n\nACTION.POINTER_UPDATE = 12;\n\nACTION.CONSOLE_LOG = CONSOLE.LOG = 16;\nACTION.CONSOLE_CLEAR = CONSOLE.CLEAR = 17;\nACTION.CONSOLE_VAL_EXPAND = CONSOLE.VAL_EXPAND = 18;\n\nACTION.DOM_MUTATE = DOM.MUTATE = 21;\nACTION.DOM_EVENT = DOM.EVENT = 22;\nACTION.DOM_SCROLL = DOM.SCROLL = 23;\nACTION.DOM_SELECTION = DOM.SELECTION = 24; // [anchor: NodeRef, anchorOffset: Index, focusOffset: Index, focusNode: NodeRef]\nACTION.DOM_FOCUSIN = DOM.FOCUSIN = 25; // [NodeRef]\nACTION.DOM_HOVERIN = DOM.HOVERIN = 26; // [NodeRef]\nACTION.DOM_ACTIVEIN = DOM.ACTIVEIN = 27; // [NodeRef]\n\nACTION.PAGE_LOAD = 28;\nACTION.PAGE_LOADED = 29;\nACTION.PAGE_LOG = 30;\nACTION.PAGE_REQUEST = 31;\nACTION.PAGE_HISTORY = 32; // [typ,state,title,url]\n\n\nACTION.RECSTART = CAST.RECSTART = 33;\nACTION.RECSTOP = CAST.RECSTOP = 34;\nACTION.PING = CAST.PING = 35;\nACTION.SNAPSHOT = CAST.SNAPSHOT = 36; // [snapshot]\nACTION.FORK = CAST.FORK = 37; // [parent_id,parent_index,snapshot]\nACTION.BRANCH = CAST.BRANCH = 38;\n\nACTION.TRIM = 39;\n\nACTION.PAGE_UNLOAD = 50;\n\nACTION.LOCK = 100; // [socketId, userId, serverTime, agentTime]\nACTION.UNLOCK = 101;\n\n\nACTION.FS_RENAME = 110;\nACTION.FS_REMOVE = 111;\nACTION.FS_MOVE = 112;\n\nACTION.WIDGET_FLAG = WIDGET.FLAG = 126; // deprecated\nACTION.WIDGET_UNFLAG = WIDGET.UNFLAG = 127; // deprecated\nACTION.WIDGET_APPEND = WIDGET.APPEND = 128; // deprecated\n\nACTION.SIM_BUILD = SIMULATOR.BUILD = 200; // deprecated\nACTION.SIM_RESULT = SIMULATOR.RESULT = 201; // deprecated\nACTION.DOM_FOCUSOUT = DOM.FOCUSOUT = 202; // [path]\nACTION.DOM_HOVEROUT = DOM.HOVEROUT = 203;\nACTION.DOM_ACTIVEOUT = DOM.ACTIVEOUT = 204;\nACTION.DOM_INSERT = DOM.INSERT = 206;\nACTION.DOM_RESET = DOM.RESET = 207; // dom reset deprecated\n\nACTION.LCSCROLL = FILE.SCROLL = 210; // deprecated\n\n\n\n\n// subcomponents\nCAST.WORKSPACE = -1;\nCAST.CONSOLE = -2;\nCAST.SIMULATOR = -3;\nCAST.INSPECTOR = -4;\nCAST.AGENT = -5;\nCAST.STREAM = -6;\nCAST.BROWSER = -7;\nCAST.FS = -8;\nCAST.PRIMARY_EDITOR = -9;\nCAST.EXPLORER_PANEL = -10;\nCAST.DEPENDENCIES_PANEL = -11;\nCAST.SLIDES = -12;\nCAST.SIDEBAR = -13;\n\nSTREAM.TRIM = 50;\n\n\nCONSOLE.LOG_TYPES = {\n\tLOG: 60,\n\tWARN: 61,\n\tERROR: 62,\n\tRESULT: 63,\n\tINFO: 71,\n\tMETA: 72,\n\tMETA_ERROR: 73\n};\n\nCONSOLE.TYPES = {\n\tMARKER: '~',\n\tNULL: 1,\n\tUNDEFINED: 2,\n\tELEMENT: 3,\n\tFUNCTION: 4,\n\tINSTANCE: 5,\n\tERROR: 6\n};\n\nPOINTER.STATEFLAGS = {\n\tLEFT_BUTTON: 1, // : Left button\n\tRIGHT_BUTTON: 2, // : Right button\n\tMIDDLE_BUTTON: 4, // : Wheel button or middle button\n\tHIDDEN: 8,\n\tTRANSITION: 16,\n\tHIGHLIGHT: 32,\n\tCTRL: 64,\n\tALT: 128,\n\tSHIFT: 256\n};\n\nPOINTER.FLAGS = {\n\tCreated: 1,\n\tEnabled: 2,\n\tDeleted: 4,\n\tVisible: 8\n};\n\nPOINTER.STYLES = {\n\tDEFAULT: 0,\n\tROW: 1,\n\tSMALL_FLIPPED: 2\n};\n\n\nvar POINTERMASK = exports.POINTERMASK = {\n\tLEFT_BUTTON: 1, // : Left button\n\tRIGHT_BUTTON: 2, // : Right button\n\tMIDDLE_BUTTON: 4 // : Wheel button or middle button\n};\n\nvar LAYOUTMASK = exports.LAYOUTMASK = {\n\tSCALED: 1,\n\tBOUNDLESS: 2\n};\n/* FILE\n*/\n\n\nDOM.MUTS = {\n\tRESET: 1, // []\n\tINSERT: 2, // [parent: NodeRef, insertAt: Index, node: Node]\n\t// INSERT is deprecated, but still implemented in player\n\t\n\tREMOVE: 3, // [node: NodeRef]\n\tINIT: 4, // [body: Node]\n\t\n\tINSERT_AFTER: 5, // deprecated\n\tINSERT_ADJACENT: 6, // [rel: NodeRef, pos: Pos, node: Node]\n\t\n\tSETATTR: 10, // [node: NodeRef, key: KeySymbol, value: string]\n\tSETPROP: 11, // [node: NodeRef, key: KeySymbol, value: string]\n\tSETTEXT: 12, // [node: NodeRef, content: TextPatch]\n\t\n\t// Node:\n\t// - number: exisiting node index\n\t// - string: serialized node (can be multiple elements)\n\t// - {text: \"\"}: plain text\n\t// - array: nested\n\t\n\t// KeySymbol:\n\t// - string: literal key\n\t// - integer: entry in M.NAME_MAP\n\t\n\tPOS: ['beforebegin','afterbegin','beforeend','afterend'],\n\t\n\tNAMES: {\n\t\tclass: 1,\n\t\tvalue: 2,\n\t\tchecked: 3,\n\t\tstyle: 4\n\t},\n\t\n\tNAME_MAP: {\n\t\t1: 'class',\n\t\t2: 'value',\n\t\t3: 'checked',\n\t\t4: 'style'\n\t}\n};\n\n\nvar msgpack = require('msgpack-lite');\nvar Bufferish = exports.Bufferish = msgpack.Decoder.prototype.bufferish;\n\nfunction Packet(data,socket){\n\tthis._socket = socket;\n\t\n\tif (false) {} else {\n\t\tthis._data = new Uint8Array(data);\n\t};\n\t\n\tvar decoder = new (msgpack.Decoder)();\n\tdecoder.write(this._data);\n\tthis._params = decoder.fetch();\n\t\n\tif ((typeof this._params=='number'||this._params instanceof Number)) {\n\t\t// console.log \"found packet-reference!!!\"\n\t\tlet offset = decoder.offset;\n\t\tthis._ref = this._params;\n\t\tthis._data = (true && this._data.subarray(offset));\n\t\tthis._params = decoder.fetch();\n\t\tthis._offset = decoder.offset - offset;\n\t} else {\n\t\tthis._offset = decoder.offset;\n\t};\n\t\n\tthis.CODE = this._params[0];\n\tthis[1] = this._params[1];\n\tthis[2] = this._params[2];\n\tthis[3] = this._params[3];\n\tthis[4] = this._params[4];\n\tthis;\n};\n\nexports.Packet = Packet; // export class \nPacket.prototype.params = function(v){ return this._params; }\nPacket.prototype.setParams = function(v){ this._params = v; return this; };\nPacket.prototype.socket = function(v){ return this._socket; }\nPacket.prototype.setSocket = function(v){ this._socket = v; return this; };\nPacket.prototype.data = function(v){ return this._data; }\nPacket.prototype.setData = function(v){ this._data = v; return this; };\nPacket.prototype.replied = function(v){ return this._replied; }\nPacket.prototype.setReplied = function(v){ this._replied = v; return this; };\n\nPacket.prototype.payloadSize = function (){\n\treturn this._data.byteLength - this._offset;\n};\n\nPacket.prototype.retain = function (){\n\t// packets are inited with data from an arraybuffer\n\t// that is reused across requests. If we do anything\n\t// asynchronous with the data, we need to retain it\n\tif (false) {};\n\treturn this;\n};\n\nPacket.prototype.payload = function (){\n\tif (false) {} else {\n\t\treturn this._payload || (this._payload = this._data.subarray(this._offset));\n\t};\n};\n\nPacket.prototype.reply = function (msg){\n\tif (msg instanceof Array) {\n\t\tmsg = msgpack.encode(msg);\n\t};\n\t\n\tif (this._ref) {\n\t\tmsg = Bufferish.concat([msgpack.encode(this._ref),msg]);\n\t};\n\t\n\tthis._replied = true;\n\tif (this.socket().setHeader instanceof Function) {\n\t\tthis.socket().setHeader('Content-Type','application/octet-stream');\n\t\tthis.socket().setHeader('Content-Length',msg.length);\n\t\tthis.socket().send(new Buffer(msg,'binary'));\n\t} else {\n\t\tthis.socket().send(msg);\n\t};\n\treturn this;\n};\n\nPacket.prototype.sid = function (){\n\treturn this.socket().sid;\n};\n\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar Imba = require('imba1');\n\nvar msgpack = require('msgpack-lite');\nvar Bufferish = msgpack.Decoder.prototype.bufferish;\nvar Decoder = new (msgpack.Decoder)({});\n\nfunction StreamMissingRangeError(start,end){\n\tthis.start = start;\n\tthis.end = end;\n\tthis;\n};\nsubclass$(StreamMissingRangeError,Error);\nexports.StreamMissingRangeError = StreamMissingRangeError; // export class \n\n\nfunction StreamFragments(buffer){\n\tthis._buffer = buffer;\n\tthis._offsets = {};\n\tthis._chunks = [];\n\tthis._holes = null;\n\tthis;\n};\n\nexports.StreamFragments = StreamFragments; // export class \nStreamFragments.prototype.add = function (chunk,offset){\n\tvar len = chunk.length;\n\t\n\tif (!this._last) {\n\t\tthis._chunks.push(this._last = [chunk,offset,offset + len]);\n\t\treturn new StreamMissingRangeError(this._buffer.size(),offset - 1);\n\t};\n\t\n\tlet currOffset = this._last[1];\n\tlet nextOffset = this._last[2];\n\t// ensure that chunks are always sorted by offset\n\t// we can just append to the previous chunk here\n\t// make sure that we deal with errors\n\t\n\t\n\tif (offset == nextOffset) {\n\t\t// we can happily append!\n\t\tthis._last[0] = Bufferish.concat([this._last[0],chunk]);\n\t\tthis._last[2] += len;\n\t\treturn true;\n\t} else if (offset > nextOffset) {\n\t\t// there is now another hole!\n\t\tthis._chunks.push(this._last = [chunk,offset,offset + len]);\n\t\treturn new StreamMissingRangeError(nextOffset,offset - 1);\n\t} else if (offset == currOffset) {\n\t\tconsole.log(\"already received this fragment\",offset,len,this._last);\n\t\t// we're re-receiving the same parts. Nothing to see here\n\t\tif ((offset + len) > nextOffset) {\n\t\t\tconsole.log(\"got a longer fragment now\");\n\t\t};\n\t\treturn true;\n\t} else {\n\t\tconsole.log(\"fragment cannot even be handled\");\n\t\treturn true;\n\t};\n};\n\nStreamFragments.prototype.pull = function (offset){\n\tvar first = this._chunks[0];\n\tif (first) {\n\t\t// console.log \"try to pull\",offset,first[1]\n\t\tif (first[1] == offset) {\n\t\t\treturn this._chunks.shift()[0];\n\t\t} else if (first[2] <= offset) {\n\t\t\t// console.log \"we already have this\"\n\t\t\tthis._chunks.shift();\n\t\t\treturn this.pull(offset);\n\t\t};\n\t\t// what if we have already filled? parts?\n\t};\n\treturn null;\n};\n\n\nStreamFragments.prototype.len = function (){\n\treturn this._chunks.length;\n};\n\n\n/*\n\nRepresents the raw binary buffer for a cast.\nHas no understanding of the encoded data, but\nhas helper methods for encoding/decoding to/from\nmsgpack.\n\nWhen adding chunks to the buffer at wrong offsets\nit will also create and store these fragments, while\nexposing details about missing ranges etc.\n\n*/\n\nfunction StreamBuffer(buffer,model){\n\tthis._model = model;\n\tthis._decoder = new (msgpack.Decoder)({});\n\tthis._decoder.buffer = this._buffer = (buffer || null); // or msgpack.encode(protocol))\n\tthis._readyState = 0;\n\tthis._fragments = new StreamFragments(this);\n\tthis._version = 0;\n\tthis._size = 0;\n\tthis._verifiedOffset = 0;\n\tthis;\n};\n\nexports.StreamBuffer = StreamBuffer; // export class \nStreamBuffer.OK = 3;\nStreamBuffer.FRAGMENTED = 4;\n\nStreamBuffer.decode = function (binary,stats){\n\tif(stats === undefined) stats = true;\n\tvar decoder = new (msgpack.Decoder)({});\n\tdecoder.write(binary);\n\tvar items = [];\n\twhile (decoder.offset < binary.byteLength){\n\t\t\n\t\tlet start = decoder.offset;\n\t\tlet item = decoder.fetch();\n\t\t\n\t\tif (stats && (item instanceof Array)) {\n\t\t\titem.START = start;\n\t\t\titem.END = decoder.offset;\n\t\t};\n\t\t\n\t\titems.push(item);\n\t};\n\t\n\treturn items;\n};\n\nStreamBuffer.encode = function (chunks,protocol){\n\tif(protocol === undefined) protocol = 0;\n\tvar encoder = new (msgpack.Encoder)({});\n\t// if protocol and protocol isa Number\n\t//\tencoder.write(protocol)\n\tfor (let i = 0, items = iter$(chunks), len = items.length; i < len; i++) {\n\t\tencoder.write(items[i]);\n\t};\n\tvar binary = encoder.read();\n\tbinary.PROTOCOL = protocol;\n\treturn binary;\n};\n\nStreamBuffer.concat = function (buffers){\n\treturn Bufferish.concat(buffers);\n};\n\nStreamBuffer.alloc = function (size){\n\treturn Bufferish.alloc(size);\n};\n\nStreamBuffer.prototype.buffer = function(v){ return this._buffer; }\nStreamBuffer.prototype.setBuffer = function(v){ this._buffer = v; return this; };\nStreamBuffer.prototype.readyState = function(v){ return this._readyState; }\nStreamBuffer.prototype.setReadyState = function(v){ this._readyState = v; return this; };\n\nStreamBuffer.prototype.state = function (){\n\tif (len$(this._fragments)) {\n\t\treturn 'fragmented';\n\t} else {\n\t\treturn 'synced';\n\t};\n};\n\nStreamBuffer.prototype.id = function (){\n\treturn this._model.id + \":stream\";\n};\n\nStreamBuffer.prototype.emit = function (name){\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.emit(this,name,params);\n};\nStreamBuffer.prototype.on = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.listen.apply(Imba,[].concat([this,name], Array.from(params)));\n};\nStreamBuffer.prototype.un = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.unlisten.apply(Imba,[].concat([this,name], Array.from(params)));\n};\n\n// same as add - but used when writing to buffer locally\nStreamBuffer.prototype.write = function (chunk,offset){\n\tif(offset === undefined) offset = 0;\n\treturn this;\n};\n\nStreamBuffer.prototype.resize = function (size){\n\tlet prev = this._buffer;\n\tif (this._buffer.length < size) {\n\t\tthis._buffer = Bufferish.alloc(size);\n\t\tthis._buffer.set(prev,0);\n\t};\n\treturn this._buffer;\n};\n\nStreamBuffer.prototype.set = function (chunk,offset){\n\tlet chunkSize = chunk.length;\n\tif ((offset + chunkSize) >= this._buffer.length) {\n\t\t// console.log \"need to resize buffer to hold this!\"\n\t\t// add 10kb every time\n\t\tthis.resize(offset + chunkSize + 10000);\n\t};\n\tthis._buffer.set(chunk,offset);\n\tthis._size = offset + chunkSize;\n\treturn this;\n};\n\nStreamBuffer.prototype.add = function (chunk,offset){\n\tif(offset === undefined) offset = 0;\n\tif (chunk instanceof Array) { // what if it is a struct?\n\t\tchunk = msgpack.encode(chunk);\n\t};\n\t\n\tvar chunkLen = chunk.length;\n\t\n\tif (this._buffer) {\n\t\tvar end = this._size; // or @buffer:byteLength\n\t\t\n\t\t// we just have the existing protocol\n\t\tif (offset == 0 && end == 1) {\n\t\t\t// console.log \"replace buffer from start\"\n\t\t\t// TODO check if protocol matches\n\t\t\tthis._buffer = chunk;\n\t\t\tthis._size = chunkLen;\n\t\t} else if (offset == end) {\n\t\t\t// everything is okay\n\t\t\tthis.set(chunk,offset);\n\t\t\t// @buffer = Bufferish.concat([@buffer,chunk])\n\t\t} else if (offset < end) {\n\t\t\t// we already have this whole chunk\n\t\t\tif (end >= (offset + chunkLen)) {\n\t\t\t\treturn true;\n\t\t\t};\n\t\t\t\n\t\t\tlet k = offset;\n\t\t\twhile (k++ < (end - 1)){\n\t\t\t\tif (this._buffer[k] != chunk[k - offset]) {\n\t\t\t\t\tconsole.warn(\"the buffer is incorrect!!\",offset,k,end,this,chunk);\n\t\t\t\t\t// this is a critical states\n\t\t\t\t\treturn false;\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\t// now just add the last part\n\t\t\t// console.log \"add remaining part of the chunk\",k,end\n\t\t\treturn this.add(chunk.subarray(k - offset),end);\n\t\t} else {\n\t\t\t// console.warn \"cannot append to buffer\",chunk,offset,self\n\t\t\t// what if we already have this fragment?\n\t\t\treturn this._fragments.add(chunk,offset);\n\t\t};\n\t} else if (offset == 0) {\n\t\t// should read protocol here already?\n\t\tthis._buffer = chunk;\n\t\tthis._size = chunkLen;\n\t} else {\n\t\treturn this._fragments.add(chunk,offset);\n\t\t// console.warn \"cannot append to buffer\",chunk,offset,self\n\t\t// return false\n\t};\n\tthis._decoder.buffer = this._buffer;\n\tthis.emit('add',this);\n\tthis.repair();\n\treturn true;\n};\n\nStreamBuffer.prototype.repair = function (){\n\tvar end = this._size;\n\tvar chunk = this._fragments.pull(end);\n\tif (chunk) {\n\t\t// console.log \"successfully repairing\",end\n\t\treturn this.add(chunk,end);\n\t};\n};\n\nStreamBuffer.prototype.len = function (){\n\treturn this.size();\n};\n\nStreamBuffer.prototype.size = function (){\n\treturn this._size;\n};\n\nStreamBuffer.prototype.slice = function (start,end){\n\treturn end ? this._buffer.slice(start,end) : this._buffer.slice(start,this._size);\n};\n\nStreamBuffer.prototype.trim = function (end){\n\tif (len$(this) > end) {\n\t\t// should just change the size param and let the buffer overwrite \n\t\tthis._buffer = this._buffer.slice(0,end);\n\t\tthis._size = end;\n\t\tthis._fragments = new StreamFragments(this);\n\t\tthis._verifiedOffset = Math.min(this._verifiedOffset,end);\n\t\tthis._version++;\n\t\tthis.emit('trim',end,this);\n\t};\n\treturn this;\n};\n\nStreamBuffer.prototype.toJSON = function (){\n\tvar raw = StreamBuffer.decode(this._buffer,false);\n\treturn raw;\n};\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\n// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar ACCESS = exports.ACCESS = {\n\tNONE: 0,\n\tREAD: 1,\n\tWRITE: 2,\n\tINS: 4,\n\tPUT: 8,\n\tDEL: 16,\n\tALL: 1 | 2 | 4 | 8 | 16,\n\t\n\tread: 1,\n\twrite: 2,\n\tins: 4,\n\tput: 8,\n\tedit: 8,\n\tdel: 16\n};\n\nvar StreamBuffer = require('./core/StreamBuffer').StreamBuffer;\nvar uuid = require('./util').uuid;\n\nconst IdentityMap = exports.IdentityMap = {};\nconst ScrimMap = exports.ScrimMap = {};\n\nfunction Resource(data){\n\tObject.assign(this,this._raw = data);\n\tIdentityMap[data.id] = this;\n\tthis._cache = {};\n};\n\nexports.Resource = Resource; // export class \nResource.build = function (data){\n\treturn new this(data);\n};\n\nObject.defineProperty(Resource.prototype,'orig',{get: function(){\n\treturn window.store.get(this._raw.id);\n}, configurable: true});\n\nResource.prototype.toJSON = function (){\n\treturn this._raw;\n};\n\nResource.prototype.toRaw = function (){\n\tlet o = {};\n\tfor (let o1 = this, v, i = 0, keys = Object.keys(o1), l = keys.length, k; i < l; i++){\n\t\tk = keys[i];v = o1[k];if (k[0] == '_' || k[0] == '$') { continue; };\n\t\to[k] = v;\n\t};\n\treturn o;\n};\n\nResource.prototype.isPublished = function (){\n\treturn false;\n};\n\nResource.prototype.isLocal = function (){\n\treturn this.v < 1;\n};\n\nResource.prototype.isPersisted = function (){\n\treturn !(this.isLocal());\n};\n\nResource.prototype.permissions = function (user){\n\tif (user && (this.uid == user.id || (user.isMod && user.isMod()))) {\n\t\treturn ACCESS.ALL;\n\t} else if (this.privacy == 'private') {\n\t\treturn ACCESS.NONE;\n\t} else {\n\t\treturn ACCESS.READ;\n\t};\n};\n\nResource.prototype.can = function (user,action){\n\treturn this.permissions(user) & (ACCESS[action] || action);\n};\n\nResource.prototype.req = async function (url,data,opts){\n\t// console.log 'will post',url,data\n\tif(opts === undefined) opts = {};\n\tlet o = {\n\t\tcredentials: 'include',\n\t\theaders: {\n\t\t\t'Accept': 'application/json',\n\t\t\t'Content-Type': 'application/json'\n\t\t},\n\t\tmethod: 'POST',\n\t\tbody: JSON.stringify(data)\n\t};\n\tObject.assign(o,opts);\n\tlet req = await window.fetch(url,o);\n\t// console.log 'returned from req?',req:ok\n\tif (req.ok) {\n\t\treturn req.json();\n\t} else {\n\t\tthrow (\"did not work \" + (req.statusText));\n\t};\n};\n\nResource.prototype.post = function (url,data){\n\treturn this.req(url,data,{method: 'POST'});\n};\n\nObject.defineProperty(Resource.prototype,'_ns',{get: function(){\n\treturn \"/files\";\n}, configurable: true});\n\nResource.prototype.save = async function (){\n\tlet data = this.toRaw();\n\tlet res = await this.req(this._ns,data,{method: 'POST'});\n\t// console.log 'saved?',res,data\n\treturn this;\n};\n\nResource.prototype.persist = async function (){\n\tlet data = this.toRaw();\n\tlet res = await this.req(this._ns,data,{method: 'POST'});\n\tif (res.data) {\n\t\t// console.log 'returned from persist',res\n\t\tthis.orig && this.orig.$patch(res.data);\n\t\tObject.assign(this,res.data);\n\t};\n\treturn this;\n};\n\nResource.prototype.update = async function (patch){\n\tif(patch === undefined) patch = {};\n\tlet res = await this.req(this._ns,patch,{method: 'POST'});\n\t// console.log 'saved?',res,patch\n\tif (res && res.data && this.orig) {\n\t\tthis.orig.$patch(res.data);\n\t};\n\treturn this;\n};\n\nResource.prototype.del = function (){\n\tif (this.orig) {\n\t\tthis.orig.$del();\n\t};\n\treturn this;\n};\n\nfunction User(){ return Resource.apply(this,arguments) };\n\nsubclass$(User,Resource);\nexports.User = User; // export class \nUser.prototype.isPublished = function (){\n\treturn false;\n};\n\nUser.prototype.isMod = function (){\n\treturn this.roles && this.roles.indexOf('mod') >= 0;\n};\n\nUser.prototype.isAdmin = function (){\n\treturn this.hasRole('admin');\n};\n\nUser.prototype.isTeacher = function (){\n\treturn this.hasRole('teacher');\n};\n\nUser.prototype.hasRole = function (role){\n\treturn this.roles && this.roles.indexOf(role) >= 0;\n};\n\nfunction Scrim(){ return Resource.apply(this,arguments) };\n\nsubclass$(Scrim,Resource);\nexports.Scrim = Scrim; // export class \nScrim.generateId = function (){\n\treturn 'co' + uuid().substr(10).replace(/-/g,'');\n};\n\nScrim.build = function (data){\n\tdata.id || (data.id = this.generateId());\n\treturn new this(window.store.add(data));\n};\n\nScrim.wrap = function (data){\n\tvar ScrimMap_, id_;\n\treturn ScrimMap[id_ = data.id] || (ScrimMap[id_] = new Scrim(data));\n};\n\nScrim.prototype.toRaw = function (){\n\tvar v_;\n\tlet raw = Scrim.prototype.__super__.toRaw.apply(this,arguments);\n\t(((v_ = raw.user),delete raw.user, v_));\n\treturn raw;\n};\n\nScrim.prototype.owner = function (){\n\treturn this._owner || (this._owner = new User(this.user));\n};\n\nObject.defineProperty(Scrim.prototype,'_ns',{get: function(){\n\treturn (\"/scrims/\" + (this.id));\n}, configurable: true});\n\nObject.defineProperty(Scrim.prototype,'url',{get: function(){\n\treturn (\"/scrim/\" + (this.id));\n}, configurable: true});\n\nScrim.prototype.isPublic = function (){\n\treturn !this.archived_at && this.privacy == 'public';\n};\n\nScrim.prototype.isPublished = function (){\n\treturn !!this.published_at;\n};\n\nScrim.prototype.isTutorial = function (){\n\treturn this.type == 'tutorial';\n};\n\nScrim.prototype.isDraft = function (){\n\treturn this.isTutorial() && !this.published_at;\n};\n\nScrim.prototype.isFork = function (){\n\treturn this.type == 'fork';\n};\n\nScrim.prototype.isNote = function (){\n\treturn this.type == 'note';\n};\n\nScrim.prototype.isForkable = function (){\n\treturn this.type != 'fork';\n};\n\nScrim.prototype.usernotes = function (){\n\treturn [];\n};\n\nScrim.prototype.branches = function (){\n\treturn this._branches || [];\n};\n\nScrim.prototype.hasMember = function (uid){\n\treturn this.uid == uid || (this.members && this.members.indexOf(uid) >= 0);\n};\n\nScrim.prototype.permissions = function (user){\n\tif (user && (this.hasMember(user.id) || (user.isMod && user.isMod()))) {\n\t\treturn ACCESS.ALL;\n\t} else if (this.privacy == 'private') {\n\t\treturn ACCESS.NONE;\n\t} else {\n\t\treturn ACCESS.READ;\n\t};\n};\n\nScrim.prototype.stream = function (){\n\treturn this._cache.stream || (this._cache.stream = new StreamBuffer(null,this));\n};\n\nScrim.prototype.buffer = function (){\n\treturn this.stream();\n};\n\nScrim.prototype.registerProgress = async function (progress,offset){\n\tlet g = window.store.course ? window.store.course.id : '';\n\tlet pl = window.store.playlist ? window.store.playlist.id : '';\n\tlet url = (\"\" + (this._ns) + \"/progress?p=\" + progress + \"&o=\" + offset + \"&g=\" + g + \"&pl=\" + pl);\n\t\n\tif (document.referrer) { url += (\"&r=\" + (document.referrer)) };\n\t\n\ttry {\n\t\tawait this.req(url,{},{method: 'POST'});\n\t} catch (err) {\n\t\tconsole.error((\"Unable to register progress on scrim \" + (this.id) + \":\"),err);\n\t};\n\t\n\treturn this;\n};\n\nScrim.prototype.fetchStreamBuffer = function (api,byteOffset){\n\t// Should update this to be incremental. Should probably do it directly in Branch instead of model.\n\tvar self = this;\n\tif(byteOffset === undefined) byteOffset = 0;\n\treturn new Promise(async function(resolve,reject) {\n\t\tself.buffer().FETCHING = true;\n\t\tvar action;\n\t\tlet cached = self.pub && self.pub.actions;\n\t\tlet url = cached ? ((\"/streams/cached-\" + cached)) : ((\"/streams/\" + (self.id)));\n\t\tlet tags = {priority: 'urgent',feature: 'stream'};\n\t\tvar req;\n\t\ttry {\n\t\t\treq = await window.fetch(url,{headers: {\n\t\t\t\t'range-from': byteOffset,\n\t\t\t\t'range-to': -1\n\t\t\t}});\n\t\t\tif (!req.ok) {\n\t\t\t\tlet extra = {\n\t\t\t\t\turl: url,\n\t\t\t\t\tstatus: req.status,\n\t\t\t\t\tstatusText: req.statusText\n\t\t\t\t};\n\t\t\t\tlet error = (\"Failed to fetch (cached: \" + (!!cached) + \") stream\");\n\t\t\t\twindow.captureException(error,extra,tags);\n\t\t\t\treq = await window.fetch((\"/streams/\" + (self.id)),{headers: {\n\t\t\t\t\t'range-from': byteOffset,\n\t\t\t\t\t'range-to': -1\n\t\t\t\t}});\n\t\t\t};\n\t\t} catch (error) {\n\t\t\twindow.captureException(error,{url: url,id: self.id},tags);\n\t\t\treturn reject(error);\n\t\t};\n\t\t\n\t\tvar reader = req.body.getReader();\n\t\tlet chunks = [];\n\t\twhile (true){\n\t\t\tvar chunk = await reader.read();\n\t\t\tlet nr = chunks.push(chunk);\n\t\t\tif (chunk.value) {\n\t\t\t\tif (nr == 1 && chunk.value.length == 1 && chunk.value[0] == 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t};\n\t\t\t\tself.buffer().add(chunk.value,self.buffer().size());\n\t\t\t};\n\t\t\t// Imba.commit if reads > @reads\n\t\t\t// @lastResponse = Date.now\n\t\t\tif (chunk.done) { break; };\n\t\t};\n\t\tself.buffer()._verifiedOffset = len$(self.buffer());\n\t\tapi.touch();\n\t\tself.buffer().FETCHING = false;\n\t\treturn resolve(self.buffer());\n\t});\n};\n\n\nfunction WriteStream(file,api){\n\tthis._file = file;\n\tthis._chunks = [];\n\tthis._size = 0;\n\tthis._api = api;\n\tthis._blob = null;\n\tthis;\n};\n\nexports.WriteStream = WriteStream; // export class \nWriteStream.prototype.write = function (chunk){\n\tthis._chunks.push(chunk);\n\tthis._size += chunk.size;\n\treturn this;\n};\n\nWriteStream.prototype.blob = function (){\n\treturn this._blob;\n};\n\nWriteStream.prototype.close = function (blob){\n\tthis._file._blob = this._blob = (blob || (blob = new Blob(this._chunks,{type: this._file.type})));\n\treturn this._file;\n};\n\nfunction File(){ return Resource.apply(this,arguments) };\n\nsubclass$(File,Resource);\nexports.File = File; // export class \nFile.generateId = function (){\n\treturn 'fo' + uuid().substr(20);\n};\n\nFile.build = function (data){\n\treturn new this(data);\n};\n\nFile.get = function (id){\n\treturn IdentityMap[id] || new this({id: id});\n};\n\nFile.prototype.createWriteStream = function (api){\n\treturn new WriteStream(this,api);\n};\n\nObject.defineProperty(File.prototype,'_ns',{get: function(){\n\treturn \"/files\";\n}, configurable: true});\n\nFile.prototype.save = async function (){\n\tlet res = await this.post(this._ns,this._raw);\n\tconsole.log('saved?',res);\n\treturn this;\n};\n\nFile.prototype.upload = function (state){\n\t// first save locally\n\tvar self = this;\n\tif(state === undefined) state = {};\n\treturn self._cache.uploader || (self._cache.uploader = new Promise(async function(resolve,reject) {\n\t\tvar res = await self.save();\n\t\tconsole.log(\"saved to server\");\n\t\tvar blob = await self.fetchLocalBlob();\n\t\tvar req = new XMLHttpRequest();\n\t\t\n\t\treq.upload.addEventListener('progress',function(e) {\n\t\t\tvar loaded = e.loaded;\n\t\t\tvar tot = e.total;\n\t\t\tvar progress = loaded / tot;\n\t\t\tstate.loaded = e.loaded;\n\t\t\tstate.total = e.total;\n\t\t\tstate.progress = progress;\n\t\t\t\n\t\t\treturn console.log('progress',e,req.upload.loaded,req.upload.total,loaded,tot,loaded / tot);\n\t\t});\n\t\t\n\t\treq.onload = function(e) {\n\t\t\tconsole.log(\"request finished uploading!!\",e,req.response);\n\t\t\tif (window.parent) {\n\t\t\t\twindow.parent.postMessage({event: \"recorded\",id: (self.cid)},\"*\");\n\t\t\t};\n\t\t\treturn resolve(req.response);\n\t\t};\n\t\t\n\t\treq.open('POST',(\"/files/\" + (self.id) + \"/body\"));\n\t\treturn req.send(blob);\n\t}));\n};\n\nFile.prototype.fetchLocalBlob = function (){\n\tif (this._blob) { return Promise.resolve(this._blob) };\n\treturn null;\n};\n\nFile.prototype.fetchAsArrayBuffer = function (path){\n\tvar self = this;\n\tif(path === undefined) path = null;\n\treturn self._fetcher || (self._fetcher = new Promise(async function(resolve) {\n\t\tvar localBuffer = await self.fetchLocalBlob();\n\t\t\n\t\tif (localBuffer) {\n\t\t\tvar reader = new FileReader();\n\t\t\treader.onloadend = function(e) {\n\t\t\t\tself._arraybuffer = e.target.result;\n\t\t\t\treturn resolve(self._arraybuffer);\n\t\t\t};\n\t\t\treturn reader.readAsArrayBuffer(localBuffer);\n\t\t} else {\n\t\t\tvar xhr = new XMLHttpRequest();\n\t\t\txhr.open('GET',path || (\"/cdn/\" + (self.id)),true);\n\t\t\txhr.responseType = 'arraybuffer';\n\t\t\txhr.onload = function() {\n\t\t\t\treturn resolve(self._arraybuffer = xhr.response);\n\t\t\t};\n\t\t\treturn xhr.send();\n\t\t};\n\t}));\n};\n\nFile.prototype.repair = async function (){\n\tvar integrity = await this._db.api().rpc('checkIntegrity',[this.id]);\n\t// console.log \"integrity from server!\",integrity\n\tif (integrity.realSize == 0) {\n\t\tvar localBlob = await this.fetchLocalBlob();\n\t\tif (localBlob) {\n\t\t\tconsole.log(\"found local file! - try to upload\");\n\t\t\treturn this.upload();\n\t\t} else {\n\t\t\treturn {error: \"file not found\"};\n\t\t};\n\t} else {\n\t\treturn this;\n\t};\n};\n\nfunction ModelStore(){ };\n\nexports.ModelStore = ModelStore; // export class \nModelStore.prototype.read = function (id){\n\t// console.log 'modelStore read',id\n\treturn null;\n};\n\nModelStore.prototype.touch = function (){\n\treturn true;\n};\n\nModelStore.prototype.files = function (){\n\treturn File;\n};\n\nModelStore.prototype.scrims = function (){\n\treturn Scrim;\n};\n\n\n", "/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n", "\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n", "/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n", "\nvar debug = require('debug');\n\n// externs;\n\nfunction Logger(){\n\tthis._contexts = {};\n\tthis._enabled = (true && !window.storageBlocked) ? ((!!localStorage.debug)) : true;\n\tthis;\n};\n\n\nexports.Logger = Logger; // export class \nLogger.prototype.enabled = function(v){ return this._enabled; }\nLogger.prototype.setEnabled = function(v){ this._enabled = v; return this; };\n\nLogger.prototype.log = function (context){\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\tif (!this._enabled) { return };\n\tvar ctx = this._contexts[context] || (this._contexts[context] = debug('scrimba:' + context));\n\treturn ctx.apply(this,params);\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nfunction LongPromise(){\n\tthis._value = undefined;\n\tthis._resolved = false;\n\tthis._listeners = [];\n\tthis;\n};\n\nexports.LongPromise = LongPromise; // export class \nLongPromise.prototype.then = function (cb){\n\tif (this._resolved) {\n\t\tcb(this._value);\n\t} else {\n\t\tthis._listeners.push(cb);\n\t};\n\treturn this;\n};\n\nLongPromise.prototype.resolve = function (value){\n\tthis._resolved = true;\n\tthis._value = value;\n\tfor (let i = 0, items = iter$(this._listeners), len = items.length; i < len; i++) {\n\t\titems[i](this._value);\n\t};\n\tthis._listeners = [];\n\treturn this;\n};\n", "function UserAgent(ua){\n\tthis._ua = ua;\n};\n\nexports.UserAgent = UserAgent; // export class \nUserAgent.prototype.detect = function (pattern){\n\treturn (pattern).test(this._ua);\n};\n\nUserAgent.prototype.platform = function (){\n\treturn true && window.navigator.platform;\n};\n\nUserAgent.prototype.isIE = function (){\n\treturn this.detect(/\\bTrident\\b/);\n};\nUserAgent.prototype.isChrome = function (){\n\treturn this.detect(/webkit\\W.*(chrome|chromium)\\W/i);\n};\nUserAgent.prototype.isFirefox = function (){\n\treturn this.detect(/mozilla.*\\Wfirefox\\W/i);\n};\nUserAgent.prototype.isGecko = function (){\n\treturn this.detect(/mozilla(?!.*webkit).*\\Wgecko\\W/i);\n};\nUserAgent.prototype.isKindle = function (){\n\treturn this.detect(/\\W(kindle|silk)\\W/i);\n};\nUserAgent.prototype.isMobile = function (){\n\treturn this.detect(/(iphone|ipod|((?:android)?.*?mobile)|blackberry|nokia)/i);\n};\nUserAgent.prototype.isOpera = function (){\n\treturn this.detect(/opera.*\\Wpresto\\W|OPR/i);\n};\nUserAgent.prototype.isSafari = function (){\n\treturn this.detect(/webkit\\W(?!.*chrome).*safari\\W/i);\n};\nUserAgent.prototype.isTablet = function (){\n\treturn this.detect(/(ipad|android(?!.*mobile)|tablet)/i);\n};\nUserAgent.prototype.isTV = function (){\n\treturn this.detect(/googletv|sonydtv/i);\n};\nUserAgent.prototype.isWebKit = function (){\n\treturn this.detect(/webkit\\W/i);\n};\nUserAgent.prototype.isAndroid = function (){\n\treturn this.detect(/android/i);\n};\nUserAgent.prototype.isIOS = function (){\n\treturn this.detect(/(ipad|iphone|ipod)/i);\n};\nUserAgent.prototype.isIPad = function (){\n\treturn this.detect(/ipad/i);\n};\nUserAgent.prototype.isIPhone = function (){\n\treturn this.detect(/iphone/i);\n};\nUserAgent.prototype.isIPod = function (){\n\treturn this.detect(/ipod/i);\n};\nUserAgent.prototype.isPhone = function (){\n\treturn this.isMobile() && !(this.isTablet());\n};\n\nUserAgent.prototype.isMac = function (){\n\treturn this.platform().indexOf('Mac') >= 0;\n};\nUserAgent.prototype.isWindows = function (){\n\treturn this.platform().indexOf('Mac') == -1;\n};\n\nUserAgent.prototype.whoami = function (){\n\treturn this._ua;\n};\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n// externs;\n\n\n\nfunction Store(){ };\n\nStore.prototype.setItem = function (k,v){\n\treturn this[k] = v;\n};\n\nStore.prototype.getItem = function (k){\n\treturn this[k];\n};\n\nStore.prototype.removeItem = function (k){\n\tvar v_;\n\treturn (((v_ = this[k]),delete this[k], v_));\n};\n\nif (false) {};\n\nfunction StoreWrapper(prefix,store){\n\tthis._prefix = prefix || '';\n\t\n\tif (store == 'temporary') {\n\t\tstore = new Store();\n\t} else {\n\t\tstore || (store = localStorage);\n\t};\n\t\n\tthis._store = store;\n\tthis;\n};\n\nexports.StoreWrapper = StoreWrapper; // export class \nStoreWrapper.prototype.clear = function (){\n\tif (!this._prefix) {\n\t\treturn this._store.clear();\n\t};\n\t\n\tfor (let i = 0, items = iter$(Object.keys(this._store)), len = items.length, key; i < len; i++) {\n\t\tkey = items[i];\n\t\tif (key.startsWith(this._prefix)) {\n\t\t\tthis._store.removeItem(key);\n\t\t};\n\t};\n\treturn this;\n};\n\nStoreWrapper.prototype.set = function (key,value){\n\tif (this._store) {\n\t\tvar strkey = this._prefix + this.serializeKey(key);\n\t\tvar strvalue = this.serialize(value);\n\t\ttry {\n\t\t\tthis._store.setItem(strkey,strvalue);\n\t\t} catch (e) { };\n\t};\n\treturn value;\n};\n\nStoreWrapper.prototype.get = function (key){\n\tvar val = this._store ? this._store.getItem(this._prefix + this.serializeKey(key)) : null;\n\treturn val;\n};\n\nStoreWrapper.prototype.setnx = function (key,value){\n\tvar val = this.get(key);\n\tif (!val) { this.set(key,value) };\n\treturn val || value;\n};\n\nStoreWrapper.prototype.getnum = function (key){\n\treturn parseFloat(this.get(key) || 0);\n};\n\nStoreWrapper.prototype.getobj = function (key,fallback){\n\tif(fallback === undefined) fallback = null;\n\tlet val = JSON.parse(this.get(key) || 'null');\n\treturn (val == null) ? fallback : val;\n};\n\nStoreWrapper.prototype.setobj = function (key,value){\n\treturn this.set(key,JSON.stringify(value));\n\t// JSON.parse(get(key) or 'null')\n};\n\nStoreWrapper.prototype.del = function (key){\n\treturn this._store ? this._store.removeItem(this._prefix + this.serializeKey(key)) : null;\n};\n\nStoreWrapper.prototype.inc = function (key,amount){\n\tif(amount === undefined) amount = 1;\n\tlet val = this.getnum(key) + amount;\n\tthis.set(key,val);\n\treturn val;\n};\n\nStoreWrapper.prototype.serializeKey = function (key){\n\treturn (typeof key == 'object') ? JSON.stringify(key) : key;\n};\n\nStoreWrapper.prototype.serialize = function (value){\n\tvar val = (typeof value == 'object') ? JSON.stringify(value) : value;\n\treturn val;\n};\n\nStoreWrapper.prototype.deserialize = function (value){\n\treturn value;\n};\n\nfunction LocalStore(){ return StoreWrapper.apply(this,arguments) };\n\nsubclass$(LocalStore,StoreWrapper);\nexports.LocalStore = LocalStore; // export class \n\n\nfunction SessionStore(prefix,store){\n\tthis._prefix = prefix || '';\n\ttry {\n\t\tthis._store = store || sessionStorage;\n\t} catch (e) { };\n\tthis;\n};\nsubclass$(SessionStore,StoreWrapper);\nexports.SessionStore = SessionStore; // export class \n\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n// externs;\n\nfunction PerformanceShim(){ };\n\nPerformanceShim.prototype.now = function (){\n\treturn Date.now();\n};\n\nPerformanceShim.prototype.mark = function (){\n\treturn this;\n};\n\nPerformanceShim.prototype.measure = function (){\n\treturn this;\n};\n\nPerformanceShim.prototype.getEntriesByType = function (){\n\treturn [];\n};\n\nPerformanceShim.prototype.clearMeasures = function (){\n\treturn this;\n};\n\nPerformanceShim.prototype.clearMarks = function (){\n\treturn this;\n};\n\nfunction Analytics(api){\n\tthis._api = api;\n\tthis._perf = (true && window.performance) || new PerformanceShim();\n\tthis._flushTimings = null;\n\tthis.sendMeasures = this.sendMeasures.bind(this);\n\tthis;\n};\n\nexports.Analytics = Analytics; // export class \nAnalytics.prototype.api = function(v){ return this._api; }\nAnalytics.prototype.setApi = function(v){ this._api = v; return this; };\n\nAnalytics.prototype.sendEvent = function (category,action,key,value){\n\t// According to Google ToS the label cannot be an object\n\tvar payload;\n\tif ((typeof key=='string'||key instanceof String)) {\n\t\tlet label = key;\n\t\tthis.api().log('analytics:event',category,action,label,value);\n\t\tif (window.gtag) {\n\t\t\twindow.gtag('event',action,{\n\t\t\t\tevent_category: category,\n\t\t\t\tevent_label: label,\n\t\t\t\tvalue: value\n\t\t\t});\n\t\t};\n\t\t// window:ga('send', 'event', category, action, label, value) if window:ga\n\t};\n\t\n\tif (true && !/.embed/.test(document.location.href)) {\n\t\t// We want to rate limit the amount of UXA events sent to Mixpanel due to the pricing structure.\n\t\tif (/uxa/.test(category)) {\n\t\t\treturn this.handleUXAEventForMixpanel(category,action,key,value);\n\t\t} else {\n\t\t\treturn payload = ((typeof key=='string'||key instanceof String)) ? {label: key,value: value} : key;\n\t\t\t// mixpanel.track(\"{category} {action}\", payload)\n\t\t};\n\t};\n};\n\nAnalytics.prototype.handleUXAEventForMixpanel = function (category,action,label,value){\n\tlet name;\n\tswitch (action) {\n\t\tcase 'notesave': {\n\t\t\treturn name = 'Note Saved';\n\t\t\tbreak;\n\t\t}\n\t\tcase 'notediscard': {\n\t\t\treturn name = 'Note Discarded';\n\t\t\tbreak;\n\t\t}\n\t\tcase 'notedel': {\n\t\t\treturn name = 'Note Deleted';\n\t\t\tbreak;\n\t\t}\n\t\tcase 'labsidebaropen': {\n\t\t\treturn name = 'Playground Open Sidebar';\n\t\t\tbreak;\n\t\t}\n\t\tcase 'labsidebarclose': {\n\t\t\treturn name = 'Playground Close Sidebar';\n\t\t\tbreak;\n\t\t}\n\t\tcase 'tutorialsidebaropen': {\n\t\t\treturn name = 'Cast Open Sidebar';\n\t\t\tbreak;\n\t\t}\n\t\tcase 'tutorialsidebarclose': {\n\t\t\treturn name = 'Cast Close Sidebar';\n\t\t\tbreak;\n\t\t}\n\t\tcase 'templatesidebaropen': {\n\t\t\treturn name = 'Template Open Sidebar';\n\t\t\tbreak;\n\t\t}\n\t\tcase 'templatesidebarclose': {\n\t\t\treturn name = 'Template Close Sidebar';\n\t\t\tbreak;\n\t\t}\n\t\tcase 'font-fize-changed': {\n\t\t\treturn name = 'Font Size Changed';\n\t\t\tbreak;\n\t\t}\n\t\tcase 'speed-change': {\n\t\t\treturn name = 'Speed Changed';\n\t\t\tbreak;\n\t\t}\n\t\tcase 'question-reply': {\n\t\t\treturn name = 'Question Replied';\n\t\t\tbreak;\n\t\t}\n\t\tcase 'question-asked': {\n\t\t\treturn name = 'Question Asked';\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\n\t\t\tthis.api().log('ignoring',category,action,label,value);\n\t\t\treturn;\n\t\n\t};\n\t// mixpanel.track(name, {\"label\": label, value: value})\n};\n\nAnalytics.prototype.sendTiming = function (category,name,value,label){\n\tthis.api().log('analytics:timing',category,name,value,label);\n\tif (window.ga) { return ga('send','timing',category,name,value,label) };\n\t// ga('send', 'timing', 'JS Dependencies', 'load', 3549)\n};\n\nAnalytics.prototype.cast = function (id,event,type){\n\tif(type === undefined) type = 'Cast';\n\treturn this.sendEvent(type,event,id);\n};\n\nAnalytics.prototype.castPlay = function (id,type){\n\treturn this.cast(id,'Played',this.castType(type));\n};\n\nAnalytics.prototype.castBranch = function (id,type){\n\treturn this.cast(id,'Branched',this.castType(type));\n};\n\nAnalytics.prototype.castRun = function (id,type){\n\treturn this.cast(id,'Run Code',this.castType(type));\n};\n\n// This wrapper is needed to get the desired event names\nAnalytics.prototype.castType = function (type){\n\tlet title;\n\tswitch (type.toLowerCase()) {\n\t\tcase 'lab': {\n\t\t\ttitle = \"Playground\";\n\t\t\tbreak;\n\t\t}\n\t\tcase 'template': {\n\t\t\ttitle = \"Template\";\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\n\t\t\ttitle = \"Cast\";\n\t\n\t};\n\treturn title;\n};\n\nAnalytics.prototype.castCreated = function (id,type){\n\treturn this.cast(id,\"Created\",this.castType(type));\n};\n\nAnalytics.prototype.forkCreated = function (id,type){\n\treturn this.cast(id,\"Forked\",this.castType(type));\n};\n\nAnalytics.prototype.castRecStart = function (id){\n\treturn this.cast(id,'Recording Started');\n};\n\nAnalytics.prototype.castRecDiscard = function (id){\n\treturn this.cast(id,'Recording Discarded');\n};\n\nAnalytics.prototype.castRecSave = function (id){\n\treturn this.cast(id,'Recording Saved');\n};\n\nAnalytics.prototype.streamRecovering = function (id){\n\treturn this.cast(id,'Stream Recovering');\n};\n\nAnalytics.prototype.streamUnauthorized = function (id){\n\treturn this.cast(id,'Stream Unauthorized');\n};\n\nAnalytics.prototype.courseEnrolled = function (id){\n\treturn this.sendEvent('Course','Enrolled',id,0);\n};\n\nAnalytics.prototype.twitterShare = function (fromWhere){\n\treturn this.sendEvent('Share','Twitter Click',fromWhere);\n};\n\nAnalytics.prototype.callToAction = function (action,fromWhere){\n\treturn this.sendEvent('CTA',action,fromWhere);\n};\n\nAnalytics.prototype.getClientId = function (){\n\tvar id;\n\tga(function(tracker) {\n\t\treturn id = tracker.get('clientId');\n\t});\n\treturn id;\n};\n\nAnalytics.prototype.now = function (){\n\treturn this._perf.now();\n};\n\nAnalytics.prototype.timing = function (){\n\treturn this;\n};\n\nAnalytics.prototype.time = function (ns,name,label){\n\tvar self = this;\n\tlet key = [ns,name || 'time',label || ''].join(\"::\");\n\t// if key.indexOf(':') == -1\n\t//\tkey = \"scrimba:{key}\"\n\t\n\tself._perf && self._perf.mark && self._perf.mark(key + 'Start');\n\t\n\treturn {end: function() {\n\t\tself._perf && self._perf.mark && self._perf.mark(key + 'End');\n\t\tself._perf && self._perf.measure && self._perf.measure(key,key + 'Start',key + 'End');\n\t\t// delay sending with 500ms\n\t\tclearTimeout(self._flushTimings);\n\t\treturn self._flushTimings = setTimeout(self.sendMeasures,500);\n\t}};\n};\n\nAnalytics.prototype.mark = function (name){\n\treturn this._perf && this._perf.mark && this._perf.mark(name);\n};\n\nAnalytics.prototype.measure = function (){\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>0 ? i : 0);\n\twhile(i>0) params[i-1] = $0[--i];\n\treturn this._perf && this._perf.measure && this._perf.measure.apply(this._perf,params);\n};\n\nAnalytics.prototype.sendMeasures = function (){\n\tvar ary;\n\tif (!this._perf.getEntriesByType) { return };\n\t\n\tvar measures = this._perf.getEntriesByType('measure');\n\tthis._perf.clearMeasures();\n\t\n\tfor (let i = 0, items = iter$(measures), len = items.length, m; i < len; i++) {\n\t\tm = items[i];\n\t\tif (m.SENT_GA) { continue; };\n\t\tm.SENT_GA = true;\n\t\tvar ary = iter$(m.name.split(\"::\"));var category = ary[0],name = ary[1],label = ary[2];\n\t\tif (name) {\n\t\t\tthis.sendTiming(category,name,Math.round(m.duration),label);\n\t\t};\n\t};\n\treturn this;\n};\n\nAnalytics.prototype.userLoginSuccessful = function (id){\n\t// mixpanel.identify(id);\n\treturn this.sendEvent('Login','Successful',id);\n};\n\nAnalytics.prototype.userLoginFailed = function (email){\n\treturn this.sendEvent('Login','Failed',email);\n};\n\nAnalytics.prototype.signUpSuccessful = function (payload){\n\tthis.sendEvent('Sign Up','Successful',payload);\n\treturn;\n\treturn this.mixpanel().people.set({\n\t\t\"$email\": payload.email,\n\t\t\"Sign up date\": new Date(),\n\t\t\"USER_ID\": payload.id\n\t});\n};\n\nAnalytics.prototype.signUpFailed = function (payload){\n\treturn this.sendEvent('Sign Up','Failed',payload);\n};\n\nAnalytics.prototype.dependencyAdded = function (event,type){\n\treturn this.sendEvent(\"Dependency\",'Added',event);\n};\n\nAnalytics.prototype.packageJSONImport = function (type){\n\treturn this.sendEvent((\"\" + this.castType(type) + \" Import\"),'Dependencies');\n};\n\nAnalytics.prototype.search = function (query){\n\treturn this.sendEvent('Search','Button',{'query': query});\n};\n\nAnalytics.prototype.filter = function (query,options){\n\treturn this.sendEvent('Filter','Courses',options);\n};\n\nAnalytics.prototype.resumeWatching = function (from){\n\treturn this.sendEvent('Resume',(\"Watching from \" + from));\n};\n\nAnalytics.prototype.trackAdClicked = function (name,id){\n\tlet action = 'Ad Clicked';\n\treturn this.sendEvent(name,action,{'id': id,action: action});\n};\n", "var Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/);\n\n\nvar Menu = _1.defineTag('Menu')\nexports.Menu = Menu;\n\n", "var Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/);\nvar Popover = _1.defineTag('Popover')\nexports.Popover = Popover;\n", "var Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/);\n\nvar Snackbar = _1.defineTag('Snackbar')\nexports.Snackbar = Snackbar;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar Menu = require('./Menu').Menu;\nvar Popover = require('./Popover').Popover;\nvar Snackbar = require('./Snackbar').Snackbar;\n\nvar Overlay = _2.defineTag('Overlay', function(tag){\n\ttag.prototype.component = function(v){ return this._component; }\n\ttag.prototype.setComponent = function(v){ this._component = v; return this; };\n\ttag.prototype.target = function(v){ return this._target; }\n\ttag.prototype.setTarget = function(v){ this._target = v; return this; };\n\ttag.prototype.options = function(v){ return this._options; }\n\ttag.prototype.setOptions = function(v){ this._options = v; return this; };\n\t\n\ttag.prototype.isModal = function(v){ return this._isModal; }\n\ttag.prototype.setIsModal = function(v){ this._isModal = v; return this; };\n\ttag.prototype.isMenu = function(v){ return this._isMenu; }\n\ttag.prototype.setIsMenu = function(v){ this._isMenu = v; return this; };\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\treturn this.$open(0).setChildren([\n\t\t\tthis.component().flag('floating').flag('paper').end(),\n\t\t\t$[0] || _1('div',$,0,this).flag('backdrop').on$(0,['tap','autohide'],this)\n\t\t],1).synced();\n\t};\n\t\n\t// TODO improve state transitioning to allow reusing overlays\n\t\n\ttag.prototype.show = function (){\n\t\tvar target_;\n\t\tdocument.body.appendChild(this.dom());\n\t\tthis.component().trigger('uxashow');\n\t\tif (this._isMenu) this.reflow();\n\t\tthis.dom().offsetWidth;\n\t\tImba.TagManager.insert(this,this.dom().parentNode);\n\t\tthis.flag('uxa-show');\n\t\tthis.component().flag('uxa-show');\n\t\tImba.TagManager.refresh();\n\t\tif (this.target()) {\n\t\t\t(target_ = this.target()) && target_.flag && target_.flag('uxa-overlay-active');\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.hide = function (){\n\t\tvar self = this, target_;\n\t\tif (self.hasFlag('uxa-hide')) { return };\n\t\tself.flag('uxa-hide');\n\t\tself.component().flag('uxa-hide');\n\t\tself.unflag('uxa-show');\n\t\tself.component().unflag('uxa-show');\n\t\t\n\t\tif (self.target()) {\n\t\t\t(target_ = self.target()) && target_.unflag && target_.unflag('uxa-overlay-active');\n\t\t};\n\t\t\n\t\tsetTimeout(function() {\n\t\t\tvar par = self.dom().parentNode;\n\t\t\tpar.removeChild(self.dom());\n\t\t\tImba.TagManager.remove(self,par);\n\t\t\tself.component().unflag('uxa-hide');\n\t\t\t// remove css positions as well\n\t\t\treturn Imba.TagManager.refresh();\n\t\t},200);\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.onevent = function (e){\n\t\t// If it is a custom event\n\t\tif (this._eventResponder && e.bubble() && !this.contains(this._eventResponder) && !(e.event() instanceof Event)) {\n\t\t\te.redirect(this._eventResponder);\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.autohide = function (){\n\t\tif (!this._isModal) {\n\t\t\treturn this.component().trigger('uxa:hide');\n\t\t};\n\t};\n\t\n\ttag.prototype.onuxahide = function (e){\n\t\te.stop();\n\t\treturn this.hide();\n\t};\n\t\n\ttag.prototype.onuxashow = function (e){\n\t\treturn e.stop();\n\t};\n\t\n\ttag.prototype.setup = function (){\n\t\tthis._isMenu = (this.component() instanceof Menu) || (this.component() instanceof Popover);\n\t\tthis._isModal = this.component().hasFlag('modal');\n\t\treturn this._eventResponder = (this._options && this._options.responder) || (this.target());\n\t};\n\t\n\ttag.prototype.reflow = function (){\n\t\tif (!this.target().dom().offsetParent) {\n\t\t\tif (!this.hasFlag('hide')) this.hide();\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\tvar box = this.target().dom().getBoundingClientRect();\n\t\t\n\t\tvar w = this.component().dom().offsetWidth;\n\t\tvar h = this.component().dom().offsetHeight;\n\t\t\n\t\tvar vw = window.innerWidth;\n\t\tvar vh = window.innerHeight;\n\t\t\n\t\tvar sx = 0; // window:scrollX\n\t\tvar sy = 0; // window:scrollY\n\t\t\n\t\tvar x = Math.round(box.left + sx + box.width * 0.5);\n\t\tvar y = Math.round(box.top + sy + box.height * 0.5);\n\t\t\n\t\tvar ax = (x > vw * 0.5) ? 1 : 0;\n\t\tvar ay = (y > vh * 0.5) ? 1 : 0;\n\t\t\n\t\tvar xmax = vw - 10;\n\t\tvar xmin = 10;\n\t\t\n\t\tthis.setFlag('ay',ay ? 'below' : 'above');\n\t\tthis.setFlag('ax',(x > (vw * 0.5)) ? null : 'lft');\n\t\t\n\t\tvar css = {\n\t\t\tmaxWidth: 400\n\t\t};\n\t\tthis.component().flag('abs');\n\t\t\n\t\tif (ay < 0.5) {\n\t\t\tcss.top = box.bottom;\n\t\t\tcss.maxHeight = vh - css.top;\n\t\t} else {\n\t\t\tcss.bottom = vh - box.top;\n\t\t\tcss.maxHeight = vh - css.bottom;\n\t\t};\n\t\t\n\t\tif (ax < 0.5) {\n\t\t\tcss.left = Math.max(box.left,10);\n\t\t} else {\n\t\t\tcss.right = Math.max((vw - box.right),10);\n\t\t};\n\t\t\n\t\tconsole.log(x,vw,y,vh,ax,ay);\n\t\treturn this.component().css(css);\n\t};\n})\nexports.Overlay = Overlay;\n\n\nfunction Stack(){ };\n\nexports.Stack = Stack; // export class \nStack.show = function (item,rel,o){\n\tvar _t1;\n\tif(o === undefined) o = {};\n\tvar overlay = (_1(Overlay)).setComponent(item).setTarget(rel).setOptions(o).end();\n\treturn overlay.show();\n};\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nvar Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/);\n\nvar Icon = _1.defineTag('Icon', 'i', function(tag){\n\ttag.prototype.__data = {watch: 'dataDidSet',name: 'data'};\n\ttag.prototype.data = function(v){ return this._data; }\n\ttag.prototype.setData = function(v){\n\t\tvar a = this.data();\n\t\tif(v != a) { this._data = v; }\n\t\tif(v != a) { this.dataDidSet && this.dataDidSet(v,a,this.__data) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.build = function (){\n\t\treturn this.flag('uxa');\n\t};\n\t\n\ttag.prototype.dataDidSet = function (icon){\n\t\t// console.log \"Icon#dataDidSet\",icon\n\t\tif ((typeof icon=='string'||icon instanceof String)) {\n\t\t\tif (len$(icon) == 1) { // and \"xwvo*-=+><:.^\".indexOf(icon) >= 0\n\t\t\t\tthis.setText(icon);\n\t\t\t} else if (icon.indexOf('<svg') >= 0) {\n\t\t\t\tthis.flag('svg');\n\t\t\t\tthis.dom().innerHTML = icon;\n\t\t\t};\n\t\t};\n\t\treturn this;\n\t};\n})\nexports.Icon = Icon;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar Icon = require('./Icon').Icon;\n\nvar MenuItem = _2.defineTag('MenuItem', 'a', function(tag){\n\ttag.prototype.action = function(v){ return this._action; }\n\ttag.prototype.setAction = function(v){ this._action = v; return this; };\n\ttag.prototype.icon = function(v){ return this._icon; }\n\ttag.prototype.setIcon = function(v){ this._icon = v; return this; };\n\ttag.prototype.rightIcon = function(v){ return this._rightIcon; }\n\ttag.prototype.setRightIcon = function(v){ this._rightIcon = v; return this; };\n\ttag.prototype.label = function(v){ return this._label; }\n\ttag.prototype.setLabel = function(v){ this._label = v; return this; };\n\ttag.prototype.subtext = function(v){ return this._subtext; }\n\ttag.prototype.setSubtext = function(v){ this._subtext = v; return this; };\n\ttag.prototype.disabled = function(v){ return this.getAttribute('disabled'); }\n\ttag.prototype.setDisabled = function(v){ this.setAttribute('disabled',v); return this; };\n\t\n\ttag.prototype.contextData = function (){\n\t\tvar data = null;\n\t\tvar el = this;\n\t\twhile (el){\n\t\t\tif (data = el.data()) {\n\t\t\t\treturn data;\n\t\t\t};\n\t\t\tel = el.parent();\n\t\t};\n\t\treturn null;\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\tif (this.href()) {\n\t\t\tthis.trigger('uxa:hide');\n\t\t\treturn tag.prototype.__super__.ontap.call(this,e);\n\t\t};\n\t\t\n\t\te.cancel().halt().silence();\n\t\t\n\t\tvar action = this.action();\n\t\t\n\t\tif ((typeof action=='string'||action instanceof String)) {\n\t\t\tthis.trigger(action,this.contextData());\n\t\t} else if (action instanceof Array) {\n\t\t\tthis.trigger(action[0],action.slice(1));\n\t\t} else {\n\t\t\tthis.trigger('activate');\n\t\t};\n\t\t\n\t\treturn this.trigger('uxa:hide');\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\treturn this.$open(0).setChildren([\n\t\t\tthis.icon() ? (\n\t\t\t\t($[0] || _1(Icon,$,0,this).flag('left')).bindData(this,'icon',[]).end()\n\t\t\t) : void(0),\n\t\t\tthis.label() ? (\n\t\t\t\t($[1] || _1('div',$,1,this).flag('text')).setNestedAttr('uxa','md',this.label()).end()\n\t\t\t) : void(0),\n\t\t\tthis.subtext() ? (\n\t\t\t\t($[2] || _1('div',$,2,this).flag('subtext').flag('muted')).setNestedAttr('uxa','md',this.subtext()).end()\n\t\t\t) : void(0),\n\t\t\tthis.rightIcon() ? (\n\t\t\t\t($[3] || _1(Icon,$,3,this).flag('right')).bindData(this,'rightIcon',[]).end()\n\t\t\t) : void(0)\n\t\t],1).synced();\n\t};\n})\nexports.MenuItem = MenuItem;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar Icon = require('./Icon').Icon;\n\nvar Button = _2.defineTag('Button', 'button', function(tag){\n\t\n\ttag.prototype.action = function(v){ return this._action; }\n\ttag.prototype.setAction = function(v){ this._action = v; return this; };\n\ttag.prototype.icon = function(v){ return this._icon; }\n\ttag.prototype.setIcon = function(v){ this._icon = v; return this; };\n\ttag.prototype.label = function(v){ return this._label; }\n\ttag.prototype.setLabel = function(v){ this._label = v; return this; };\n\ttag.prototype.href = function(v){ return this._href; }\n\ttag.prototype.setHref = function(v){ this._href = v; return this; };\n\ttag.prototype.uxaAnchor = function(v){ return this._uxaAnchor; }\n\ttag.prototype.setUxaAnchor = function(v){ this._uxaAnchor = v; return this; };\n\t\n\ttag.prototype.build = function (){\n\t\t// buttons should be of type button by default\n\t\treturn this.dom().setAttribute('type','button');\n\t};\n\t\n\ttag.prototype.contextData = function (){\n\t\tvar data = null;\n\t\tvar el = this;\n\t\twhile (el){\n\t\t\tif (data = el.data()) {\n\t\t\t\treturn data;\n\t\t\t};\n\t\t\tel = el.parent();\n\t\t};\n\t\treturn null;\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\tvar action = this.action();\n\t\t\n\t\tif (action) {\n\t\t\tthis.trigger(\"uxa:action\",action);\n\t\t};\n\t\t\n\t\tif ((typeof action=='string'||action instanceof String)) {\n\t\t\te.halt().silence();\n\t\t\tthis.trigger(action,this.contextData());\n\t\t} else if (action instanceof Array) {\n\t\t\te.halt().silence();\n\t\t\tthis.trigger(action[0],action.slice(1));\n\t\t} else {\n\t\t\te._responder = null;\n\t\t};\n\t\treturn this;\n\t};\n\t\n\t// by default we want to capture the touch fully\n\ttag.prototype.ontouchstart = function (t){\n\t\treturn this.flag('_touch');\n\t};\n\t\n\ttag.prototype.ontouchend = function (){\n\t\treturn this.unflag('_touch');\n\t};\n\t\n\ttag.prototype.ontouchcancel = function (){\n\t\treturn this.unflag('_touch');\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3;\n\t\treturn this.$open(0).flag('uxa').setChildren([\n\t\t\tthis.icon() ? (\n\t\t\t\t($[0] || _1(Icon,$,0,this)).bindData(this,'icon',[]).end()\n\t\t\t) : void(0),\n\t\t\tthis.label() ? (\n\t\t\t\tthis.href() ? (\n\t\t\t\t\t($[1] || _1('b',$,1,this).setContent($[2] || _1('a',$,2,1),2)).end((\n\t\t\t\t\t\t$[2].setHref(this.href()).setNestedAttr('uxa','md',this.label()).end()\n\t\t\t\t\t,true))\n\t\t\t\t) : (\n\t\t\t\t\t($[3] || _1('b',$,3,this)).setNestedAttr('uxa','md',this.label()).end()\n\t\t\t\t)\n\t\t\t) : void(0)\n\t\t],1).synced();\n\t};\n})\nexports.Button = Button;\n\nvar IconButton = _2.defineTag('IconButton', Button)\nexports.IconButton = IconButton;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _3 = Imba.createTagList, _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\n\nvar TextField = _2.defineTag('TextField', function(tag){\n\ttag.prototype.label = function(v){ return this._label; }\n\ttag.prototype.setLabel = function(v){ this._label = v; return this; };\n\ttag.prototype.desc = function(v){ return this._desc; }\n\ttag.prototype.setDesc = function(v){ this._desc = v; return this; };\n\ttag.prototype.multiline = function(v){ return this._multiline; }\n\ttag.prototype.setMultiline = function(v){ this._multiline = v; return this; };\n\t\n\t['disabled','placeholder','type','name','value','required','pattern','minlength','maxlength','autocomplete'].map(function(key) {\n\t\tvar setter = Imba.toCamelCase((\"set-\" + key));\n\t\ttag.prototype[key] = function(val) { return this.input()[key](); };\n\t\treturn tag.prototype[setter] = function(val) {\n\t\t\tthis.input()[setter](val);\n\t\t\treturn this;\n\t\t};\n\t});\n\t\n\ttag.prototype.input = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn (this._input = this._input||_1('input',this).flag('input').setPlaceholder(\" \").setType('text')).end();\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\treturn this.$open(0).flag('uxa').setChildren([\n\t\t\tthis.input(),\n\t\t\t$[0] || _1('span',$,0,this).flag('after'),\n\t\t\t$[1] || _1('hr',$,1,this).flag('static'),\n\t\t\t$[2] || _1('hr',$,2,this).flag('anim'),\n\t\t\t$[3] || _1('label',$,3,this),\n\t\t\t$[4] || _1('span',$,4,this).flag('helper').flag('desc')\n\t\t],1).synced((\n\t\t\t$[3].setContent(this.label(),3),\n\t\t\t$[4].dataset('desc',this.desc()).setContent(this.desc(),3).end()\n\t\t,true));\n\t};\n})\nexports.TextField = TextField;\n\n\n\nvar TextAreaProxy = _2.defineTag('TextAreaProxy', 'textarea', function(tag){\n\ttag.prototype.owner = function(v){ return this._owner; }\n\ttag.prototype.setOwner = function(v){ this._owner = v; return this; };\n\t\n\ttag.prototype.onfocus = function (e){\n\t\t// console.log 'TextAreaProxy.onfocus',e\n\t\treturn this.owner().dom().focus();\n\t};\n\t\n\ttag.prototype.oninput = function (e){\n\t\tthis.owner().dom().innerText = this.dom().value;\n\t\treturn this.owner().dom().focus();\n\t};\n});\n\nvar Editable = _2.defineTag('Editable', function(tag){\n\ttag.prototype.placeholder = function(v){ return this.getAttribute('placeholder'); }\n\ttag.prototype.setPlaceholder = function(v){ this.setAttribute('placeholder',v); return this; };\n\ttag.prototype.minlength = function(v){ return this.getAttribute('minlength'); }\n\ttag.prototype.setMinlength = function(v){ this.setAttribute('minlength',v); return this; };\n\ttag.prototype.maxlength = function(v){ return this.getAttribute('maxlength'); }\n\ttag.prototype.setMaxlength = function(v){ this.setAttribute('maxlength',v); return this; };\n\ttag.prototype.required = function(v){ return this.getAttribute('required'); }\n\ttag.prototype.setRequired = function(v){ this.setAttribute('required',v); return this; };\n\ttag.prototype.name = function(v){ return this.getAttribute('name'); }\n\ttag.prototype.setName = function(v){ this.setAttribute('name',v); return this; };\n\t\n\ttag.prototype.build = function (){\n\t\tvar _t1, self = this;\n\t\tself.setTabindex(0);\n\t\ttry {\n\t\t\tself.dom().contentEditable = \"plaintext-only\";\n\t\t} catch (e) {\n\t\t\tself.dom().contentEditable = true;\n\t\t};\n\t\t\n\t\tself._raw = (_1(TextAreaProxy).flag('input').setTabindex(\"-1\")).setOwner(self).end();\n\t\tself._raw.setValue = function(value) { return self.setValue(value); };\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.raw = function (){\n\t\treturn this._raw;\n\t};\n\t\n\ttag.prototype.setAttribute = function (key,value){\n\t\t// console.log \"Editable.setAttribute\",key,value\n\t\tif (this._raw) { this.raw().setAttribute(key,value) };\n\t\ttag.prototype.__super__.setAttribute.apply(this,arguments);\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.setValue = function (value){\n\t\tthis.dom().innerText = value;\n\t\tthis.raw().dom().value = value;\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.value = function (){\n\t\treturn this.dom().innerText;\n\t};\n\t\n\ttag.prototype.oninput = function (){\n\t\tthis.raw().dom().value = this.value();\n\t\treturn this;\n\t};\n});\n\nvar TextArea = _2.defineTag('TextArea', TextField, function(tag){\n\t\n\ttag.prototype.input = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn (this._input = this._input||_1(Editable,this).flag('input')).end();\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\treturn this.$open(0).flag('uxa').setChildren([\n\t\t\tthis.input().raw(),\n\t\t\tthis.input(),\n\t\t\t$[0] || _1('span',$,0,this).flag('after'),\n\t\t\t$[1] || _1('hr',$,1,this).flag('static'),\n\t\t\t$[2] || _1('hr',$,2,this).flag('anim'),\n\t\t\t$[3] || _1('label',$,3,this),\n\t\t\t$[4] || _1('span',$,4,this).flag('helper').flag('desc')\n\t\t],1).synced((\n\t\t\t$[3].setContent(this.label(),3),\n\t\t\t$[4].dataset('desc',this.desc()).setContent(this.desc(),3).end()\n\t\t,true));\n\t};\n})\nexports.TextArea = TextArea;\n\nvar SelectField = _2.defineTag('SelectField', TextField, function(tag){\n\t\n\ttag.prototype.setOptions = function (val){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), t0;\n\t\tvar input = this.input();\n\t\t(t0 = this._input = this._input||(t0=_1('select',this)).flag('input')).setContent(\n\t\t\t(function tagLoop($0) {\n\t\t\t\tvar _t2;\n\t\t\t\tfor (let i = 0, items = iter$(val), len = $0.taglen = items.length, item; i < len; i++) {\n\t\t\t\t\titem = items[i];\n\t\t\t\t\t($0[i] || _1('option',$0,i)).setValue(item[0],1).setContent(item[1] || item[0],3).end();\n\t\t\t\t};return $0;\n\t\t\t})(t0.$['A'] || _3(t0.$,'A',this._input))\n\t\t,4).end();\n\t\tthis;\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.input = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn (this._input = this._input||_1('select',this).flag('input')).end();\n\t};\n})\nexports.SelectField = SelectField;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar Icon = require('./Icon').Icon;\n\nvar ListItem = _2.defineTag('ListItem', function(tag){\n\ttag.prototype.icon = function(v){ return this._icon; }\n\ttag.prototype.setIcon = function(v){ this._icon = v; return this; };\n\ttag.prototype.rightIcon = function(v){ return this._rightIcon; }\n\ttag.prototype.setRightIcon = function(v){ this._rightIcon = v; return this; };\n\ttag.prototype.label = function(v){ return this._label; }\n\ttag.prototype.setLabel = function(v){ this._label = v; return this; };\n\ttag.prototype.subtext = function(v){ return this._subtext; }\n\ttag.prototype.setSubtext = function(v){ this._subtext = v; return this; };\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3;\n\t\treturn this.$open(0).setChildren([\n\t\t\t($[0] || _1('div',$,0,this).flag('gutter')).setContent(\n\t\t\t\tthis.icon() ? (\n\t\t\t\t\t($[1] || _1(Icon,$,1,0).flag('left')).bindData(this,'icon',[]).end()\n\t\t\t\t) : void(0)\n\t\t\t,3),\n\t\t\t($[2] || _1('div',$,2,this).flag('main')).setContent([\n\t\t\t\tthis.label() ? (\n\t\t\t\t\t($[3] || _1('div',$,3,2).flag('h3').flag('text')).setNestedAttr('uxa','md',this.label()).end()\n\t\t\t\t) : void(0),\n\t\t\t\tthis.subtext() ? (\n\t\t\t\t\t($[4] || _1('div',$,4,2).flag('p1').flag('muted')).setNestedAttr('uxa','md',this.subtext()).end()\n\t\t\t\t) : void(0)\n\t\t\t],1),\n\t\t\tthis.rightIcon() ? (\n\t\t\t\t($[5] || _1(Icon,$,5,this).flag('right')).bindData(this,'rightIcon',[]).end()\n\t\t\t) : void(0)\n\t\t],1).synced();\n\t};\n})\nexports.ListItem = ListItem;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/);\n\nvar Form = _1.defineTag('Form', 'form', function(tag){\n\t\n\ttag.prototype.__formData = {watch: 'formDataDidSet',name: 'formData'};\n\ttag.prototype.formData = function(v){ return this._formData; }\n\ttag.prototype.setFormData = function(v){\n\t\tvar a = this.formData();\n\t\tif(v != a) { this._formData = v; }\n\t\tif(v != a) { this.formDataDidSet && this.formDataDidSet(v,a,this.__formData) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.formDataDidSet = function (data){\n\t\tif (this._commited) { return this.applyFormData(data) };\n\t};\n\t\n\ttag.prototype.loadFormData = function (){\n\t\tif (this._formData) { return this.applyFormData(this._formData) };\n\t};\n\t\n\ttag.prototype.commit = function (){\n\t\ttag.prototype.__super__.commit.apply(this,arguments);\n\t\tif (!this._commited) {\n\t\t\tthis.loadFormData();\n\t\t\tthis._commited = true;\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.formElements = function (){\n\t\tvar o = [];\n\t\t\n\t\tfor (let i = 0, items = iter$(this.dom().elements), len = items.length, field; i < len; i++) {\n\t\t\tfield = items[i];\n\t\t\tlet node = field; // field.@tag\n\t\t\tlet name = field.name;\n\t\t\t\n\t\t\tif (name) {\n\t\t\t\to.push(node);\n\t\t\t};\n\t\t\t\n\t\t\tif (o[name]) {\n\t\t\t\tif (!((o[name] instanceof Array))) { o[name] = [o[name]] };\n\t\t\t\to[name].push(node);\n\t\t\t} else {\n\t\t\t\to[name] = node;\n\t\t\t};\n\t\t};\n\t\treturn o;\n\t};\n\t\n\ttag.prototype.applyFormData = function (dict){\n\t\tif(dict === undefined) dict = {};\n\t\tvar fields = this.formElements();\n\t\t\n\t\tfor (let i = 0, items = iter$(fields), len = items.length, field; i < len; i++) {\n\t\t\tfield = items[i];\n\t\t\tlet typ = field.type;\n\t\t\tlet val = dict[field.name];\n\t\t\t\n\t\t\tif (val == undefined) { continue; };\n\t\t\t\n\t\t\tif (typ == 'radio' || typ == 'checked') {\n\t\t\t\tfield.checked = field.value == val;\n\t\t\t} else {\n\t\t\t\tif (field._tag) {\n\t\t\t\t\tfield._tag.setValue(val);\n\t\t\t\t} else {\n\t\t\t\t\tfield.value = val;\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.formData = function (){\n\t\tvar o = {};\n\t\tfor (let i = 0, items = iter$(this.dom().elements), len = items.length, field; i < len; i++) {\n\t\t\tfield = items[i];\n\t\t\tif (field.type == 'checkbox') {\n\t\t\t\tif (!field.checked) { continue; };\n\t\t\t} else if (field.type == 'radio') {\n\t\t\t\tif (!field.checked) { continue; };\n\t\t\t};\n\t\t\tif (field.name) {\n\t\t\t\to[field.name] = ((field._tag && field._tag.value) ? field._tag.value() : field.value);\n\t\t\t};\n\t\t};\n\t\treturn o;\n\t};\n\t\n\ttag.prototype.onsubmit = async function (e){\n\t\te.cancel().halt(); // should it do this by default?\n\t\t\n\t\tif (this.uxa().queue().busy()) {\n\t\t\treturn;\n\t\t};\n\t\t\n\t\tthis.trigger('uxa:submit',this.formData());\n\t\t\n\t\tawait this.uxa().queue();\n\t\t\n\t\tif (this.uxa().queue().failed()) {\n\t\t\tthis.log(\"failed?!?!\",this.uxa().queue().error());\n\t\t\tthis.uxa().flash(this.uxa().queue().error());\n\t\t\tthis.uxa().queue().reset();\n\t\t};\n\t\t\n\t\treturn this;\n\t\t// else\n\t\t//\tsetTimeout(&,200) do\n\t\t//\t\thide\n\t};\n\t\n\ttag.prototype.onuxabusy = function (e){\n\t\te.halt();\n\t\treturn this.flag('uxa-busy');\n\t};\n\t\n\ttag.prototype.onuxaidle = function (e){\n\t\tvar self = this;\n\t\te.halt();\n\t\treturn setTimeout(function() {\n\t\t\tif (self.uxa().queue().idle()) {\n\t\t\t\treturn self.unflag('uxa-busy');\n\t\t\t};\n\t\t},200);\n\t};\n})\nexports.Form = Form;\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nvar Imba = require('imba1');\n\n\nfunction Queue(owner,parent){\n\tthis._parent = parent;\n\tthis._owner = owner;\n\tthis._commit = owner.commit;\n\tthis._pending = [];\n\tthis._errors = [];\n\tthis._state = 'idle';\n\tthis;\n};\n\nexports.Queue = Queue; // export class \nQueue.prototype.error = function(v){ return this._error; }\nQueue.prototype.setError = function(v){ this._error = v; return this; };\nQueue.prototype.errors = function(v){ return this._errors; }\nQueue.prototype.setErrors = function(v){ this._errors = v; return this; };\nQueue.prototype.__state = {watch: 'stateDidSet',name: 'state'};\nQueue.prototype.state = function(v){ return this._state; }\nQueue.prototype.setState = function(v){\n\tvar a = this.state();\n\tif(v != a) { this._state = v; }\n\tif(v != a) { this.stateDidSet && this.stateDidSet(v,a,this.__state) }\n\treturn this;\n};\n\nQueue.prototype.emit = function (name){\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.emit(this,name,params);\n};\n\nQueue.prototype.on = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.listen.apply(Imba,[].concat([this,name], Array.from(params)));\n};\n\nQueue.prototype.un = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.unlisten.apply(Imba,[].concat([this,name], Array.from(params)));\n};\n\nQueue.prototype.map = function (cb){\n\treturn this._pending.map(cb);\n};\n\nQueue.prototype.len = function (){\n\treturn this._pending.length;\n};\n\nQueue.prototype.busy = function (){\n\treturn len$(this) > 0;\n};\n\nQueue.prototype.idle = function (){\n\treturn len$(this) == 0;\n};\n\nQueue.prototype.failed = function (){\n\treturn len$(this._errors);\n};\n\nQueue.prototype.reset = function (){\n\tthis._errors = [];\n\treturn this;\n};\n\nQueue.prototype.error = function (){\n\treturn this._errors[0] && this._errors[0]._uxa.error;\n};\n\nQueue.prototype.add = function (o,callback){\n\t// return self if failed\n\t// incr\n\t\n\tvar self = this;\n\tif(callback==undefined && typeof o == 'function') callback = o,o = {};\n\tif(o==undefined) o = {};\n\tif ((typeof o=='number'||o instanceof Number)) {\n\t\to = {duration: o};\n\t};\n\t\n\to.duration || (o.duration = 1000);\n\to.startAt = Date.now();\n\to.state = 'pending';\n\t\n\tif (o.duration) {\n\t\to.endAt = o.startAt + o.duration;\n\t};\n\t\n\tvar res = callback;\n\tif (res instanceof Function) {\n\t\tres = res();\n\t};\n\t\n\tif (res && res.then) {\n\t\tres._uxa = o;\n\t\tself.incr(res);\n\t\treturn res.then(function(ok) { return self.decr(res,ok); },function(err) { return self.fail(res,err); });\n\t};\n\t\n\treturn self;\n};\n\n\nQueue.prototype.incr = function (promise){\n\tthis._pending.push(promise);\n\t\n\tif (len$(this._pending) == 1) {\n\t\tthis.setState('busy');\n\t};\n\tImba.emit(this,'incr',[this,promise]);\n\tif (this._parent) { return this._parent.incr(promise) };\n};\n\nQueue.prototype.decr = function (promise,res){\n\tvar idx = this._pending.indexOf(promise);\n\t\n\tif (idx >= 0) {\n\t\t// should we remove immediately?\n\t\tthis._pending.splice(idx,1);\n\t\tpromise._uxa.endedAt = Date.now();\n\t\t\n\t\t// how do we deal with errors?\n\t\tif (promise._uxa.error) {\n\t\t\tthis._errors.push(promise);\n\t\t};\n\t\t\n\t\tImba.emit(this,'decr',[this,promise]);\n\t\t\n\t\tif (len$(this._pending) == 0) {\n\t\t\tthis.setState('idle');\n\t\t};\n\t\t\n\t\tif (this._parent) { return this._parent.decr(promise,res) };\n\t};\n};\n\nQueue.prototype.fail = function (promise,err){\n\t// console.log \"promise.fail\",WP =promise\n\tpromise._uxa.error = err;\n\treturn this.decr(promise);\n};\n\nQueue.prototype.stateDidSet = function (state,prev){\n\t// console.log \"Queue {prev} -> {state}\"\n\t\n\tif (state == 'busy') {\n\t\tthis._owner && this._owner.trigger && this._owner.trigger('uxa:busy');\n\t} else if (state == 'idle') {\n\t\tthis._owner && this._owner.trigger && this._owner.trigger('uxa:idle');\n\t\tthis._owner && this._owner.commit && this._owner.commit(); // really?\n\t};\n\t\n\treturn Imba.emit(this,state,[]);\n};\n\nQueue.prototype.then = function (cb){\n\tif (this.state() == 'idle') {\n\t\treturn cb();\n\t} else {\n\t\treturn Imba.once(this,'idle',cb);\n\t};\n};\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nvar Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar Queue = require('./Queue').Queue;\n\nvar Indicator = _2.defineTag('Indicator', function(tag){\n\t\n\ttag.prototype.__progress = {'default': 0,watch: 'progressDidSet',name: 'progress'};\n\ttag.prototype.progress = function(v){ return this._progress; }\n\ttag.prototype.setProgress = function(v){\n\t\tvar a = this.progress();\n\t\tif(v != a) { this._progress = v; }\n\t\tif(v != a) { this.progressDidSet && this.progressDidSet(v,a,this.__progress) }\n\t\treturn this;\n\t}\n\ttag.prototype._progress = 0;\n\ttag.prototype.__type = {'default': 'indeterminate',name: 'type'};\n\ttag.prototype.type = function(v){ return this._type; }\n\ttag.prototype.setType = function(v){ this._type = v; return this; }\n\ttag.prototype._type = 'indeterminate';\n\ttag.prototype.__busy = {watch: 'busyDidSet',name: 'busy'};\n\ttag.prototype.busy = function(v){ return this._busy; }\n\ttag.prototype.setBusy = function(v){\n\t\tvar a = this.busy();\n\t\tif(v != a) { this._busy = v; }\n\t\tif(v != a) { this.busyDidSet && this.busyDidSet(v,a,this.__busy) }\n\t\treturn this;\n\t};\n\ttag.prototype.__state = {'default': 'idle',watch: 'stateDidSet',name: 'state'};\n\ttag.prototype.state = function(v){ return this._state; }\n\ttag.prototype.setState = function(v){\n\t\tvar a = this.state();\n\t\tif(v != a) { this._state = v; }\n\t\tif(v != a) { this.stateDidSet && this.stateDidSet(v,a,this.__state) }\n\t\treturn this;\n\t}\n\ttag.prototype._state = 'idle';\n\ttag.prototype.__time = {'default': 2100,name: 'time'};\n\ttag.prototype.time = function(v){ return this._time; }\n\ttag.prototype.setTime = function(v){ this._time = v; return this; }\n\ttag.prototype._time = 2100;\n\ttag.prototype.__threshold = {'default': 0,name: 'threshold'};\n\ttag.prototype.threshold = function(v){ return this._threshold; }\n\ttag.prototype.setThreshold = function(v){ this._threshold = v; return this; }\n\ttag.prototype._threshold = 0;\n\t\n\t\n\ttag.prototype.busyDidSet = function (bool){\n\t\treturn bool ? this.start() : this.stop();\n\t};\n\t\n\ttag.prototype.setup = function (){\n\t\tthis._items = [];\n\t\tthis._starter = null;\n\t\tthis._endAt = 0;\n\t\t\n\t\tif (this.data() instanceof Queue) {\n\t\t\tthis._queue = this.data();\n\t\t\t// console.log \"setting up Indicator for queue\"\n\t\t\tthis._handler = this.refresh.bind(this);\n\t\t\tthis.data().on('incr',this._handler);\n\t\t\tthis.data().on('decr',this._handler);\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.refresh = function (){\n\t\tvar end = this.expectedEndAt();\n\t\t// console.log \"Indicator.refresh\",end - Date.now,state\n\t\tif (len$(this._queue)) {\n\t\t\tthis.start();\n\t\t} else {\n\t\t\tthis.stop();\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.expectedEndAt = function (){\n\t\tvar Math_;\n\t\tif (this._queue) {\n\t\t\tvar times = this._queue.map(function(item) { return item._uxa.endAt || 0; });\n\t\t\t// console.log \"times\",times,@queue.@pending[0]\n\t\t\tvar time = Math.max.apply(Math,times);\n\t\t\treturn Math.max(time,Date.now());\n\t\t};\n\t\t\n\t\treturn Math.max(this._endAt,Date.now());\n\t};\n\t\n\t// TODO should allow recalculation when more promises come in?\n\ttag.prototype.start = function (dur){\n\t\tif(dur === undefined) dur = 1000;\n\t\tthis.setBusy(true);\n\t\tif (this.state() == 'done' || this.state() == 'idle') {\n\t\t\tthis._startAt = Date.now();\n\t\t\tthis._endAt = this._startAt + dur;\n\t\t\tthis.setState('prep');\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.stop = function (){\n\t\t// what if this happens too soon?\n\t\tthis.setBusy(false);\n\t\t// still not started -- stop it before\n\t\tif (this.state() == 'prep') {\n\t\t\tthis.setState('done');\n\t\t} else if (this.state() == 'busy' || this.state() == 'stalled') {\n\t\t\tthis.setState('finish');\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.calculatedProgress = function (){\n\t\tvar now = Date.now();\n\t\treturn (now - this._startAt) / (this._endAt - this._startAt);\n\t};\n\t\n\ttag.prototype.step = function (){\n\t\t// console.log 'step to next state from',state\n\t\tvar v_;\n\t\tif (this.state() == 'prep') {\n\t\t\treturn (this.setState(v_ = 'start'),v_);\n\t\t} else if (this.state() == 'start') {\n\t\t\t// if we have requested stopping - move to finish\n\t\t\tif (this.busy()) {\n\t\t\t\treturn (this.setState(v_ = 'busy'),v_);\n\t\t\t} else {\n\t\t\t\treturn (this.setState(v_ = 'finish'),v_);\n\t\t\t};\n\t\t} else if (this.state() == 'busy') {\n\t\t\tif (this._queue && !this._queue.idle()) {\n\t\t\t\treturn (this.setState(v_ = 'stalled'),v_);\n\t\t\t} else {\n\t\t\t\treturn (this.setState(v_ = 'finish'),v_);\n\t\t\t};\n\t\t} else if (this.state() == 'finish') {\n\t\t\treturn (this.setState(v_ = 'done'),v_);\n\t\t} else if (this.state() == 'done') {\n\t\t\treturn (this.setState(v_ = 'idle'),v_);\n\t\t};\n\t};\n\t\n\ttag.prototype.stateDidSet = function (state,prev){\n\t\tvar self = this;\n\t\tself.setFlag('state',state);\n\t\t// console.log \"Indicator.state\",state,prev\n\t\tclearTimeout(self._stateTimeout);\n\t\t\n\t\tlet ms = 2;\n\t\tlet ease;\n\t\tlet x = 0;\n\t\t\n\t\tif (state == 'prep') {\n\t\t\tself.unflag('running');\n\t\t\tms = self.threshold() || 2;\n\t\t\tself._ind.css({transition: \"none\",transform: \"scaleX(0)\"});\n\t\t\tself.dom().offsetParent;\n\t\t\tself.flag('running');\n\t\t} else if (state == 'start') {\n\t\t\tself._startedAt = Date.now();\n\t\t\tms = 240;\n\t\t\tx = 0.12;\n\t\t\tease = \"cubic-bezier(0.250, 1.190, 0.300, 0.865)\";\n\t\t\tself._ind.css({transition: (\"transform \" + ms + \"ms \" + ease),transform: \"scaleX(0.1)\"});\n\t\t} else if (state == 'busy') {\n\t\t\tms = self.expectedEndAt() - Date.now();\n\t\t\tx = 0.85;\n\t\t\tease = \"cubic-bezier(0.225, 0.710, 0.565, 0.985)\";\n\t\t\tself._ind.css({transition: (\"transform \" + ms + \"ms \" + ease),transform: \"scaleX(0.85)\"});\n\t\t} else if (state == 'stalled') {\n\t\t\tself._ind.css({transition: \"transform 3s linear\",transform: \"scaleX(0.95)\"});\n\t\t} else if (state == 'finish') {\n\t\t\tvar dur = (Date.now() - self._startedAt);\n\t\t\tms = Math.max(200,600 - dur);\n\t\t\t// console.log \"finish now -- have been animating for {dur}\"\n\t\t\tease = \"cubic-bezier(0.260, 0.025, 0.000, 0.995)\";\n\t\t\tease = \"cubic-bezier(0.4, 0.0, 0.2, 1)\";\n\t\t\tx = 1;\n\t\t\tself._ind.css({transition: (\"transform \" + ms + \"ms \" + ease),transform: \"scaleX(1)\"});\n\t\t} else if (state == 'done') {\n\t\t\tself.unflag('running');\n\t\t\tms = 200;\n\t\t};\n\t\t\n\t\treturn self._stateTimeout = setTimeout(function() { return self.step(); },ms);\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\treturn this.$open(0).flag('uxa').setFlag(-1,this.type()).setChildren(this._ind = this._ind||_1('div',this).flag('ind'),2).synced((\n\t\t\tthis._ind.setFlag(0,this.type())\n\t\t,true));\n\t};\n})\nexports.Indicator = Indicator;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar Form = require('./Form').Form;\nvar Button = require('./Button').Button;\nvar Indicator = require('./Indicator').Indicator;\n\nvar Dialog = _2.defineTag('Dialog', Form, function(tag){\n\t\n\ttag.prototype.type = function(v){ return this._type; }\n\ttag.prototype.setType = function(v){ this._type = v; return this; };\n\ttag.prototype.__submitLabel = {'default': 'confirm',name: 'submitLabel'};\n\ttag.prototype.submitLabel = function(v){ return this._submitLabel; }\n\ttag.prototype.setSubmitLabel = function(v){ this._submitLabel = v; return this; }\n\ttag.prototype._submitLabel = 'confirm';\n\ttag.prototype.__cancelLabel = {'default': 'dismiss',name: 'cancelLabel'};\n\ttag.prototype.cancelLabel = function(v){ return this._cancelLabel; }\n\ttag.prototype.setCancelLabel = function(v){ this._cancelLabel = v; return this; }\n\ttag.prototype._cancelLabel = 'dismiss';\n\t\n\ttag.prototype.setContent = function (content,type){\n\t\tthis.log(\"setting content for dialog\");\n\t\tthis._content = Imba.static(content,type);\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.onsubmit = async function (e){\n\t\tvar self = this;\n\t\te.cancel().halt(); // should it do this by default?\n\t\t\n\t\tif (self.uxa().queue().busy()) {\n\t\t\treturn;\n\t\t};\n\t\t\n\t\tvar uxaev = self.trigger('uxa:submit',self.formData());\n\t\tawait self.uxa().queue();\n\t\t\n\t\tif (self.uxa().queue().failed()) {\n\t\t\tself.log(\"failed?!?!\",self.uxa().queue().error());\n\t\t\tself.uxa().flash(self.uxa().queue().error());\n\t\t\treturn self.uxa().queue().reset();\n\t\t} else if (!uxaev.isPrevented()) {\n\t\t\treturn setTimeout(function() { return self.hide(); },200);\n\t\t};\n\t};\n\t\n\ttag.prototype.show = function (){\n\t\treturn this.uxa().open(this);\n\t};\n\t\n\ttag.prototype.hide = function (){\n\t\treturn this.trigger('uxa:hide');\n\t};\n\t\n\ttag.prototype.submit = function (){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.tapDismiss = async function (e){\n\t\tvar self = this;\n\t\te.prevent().stop();\n\t\tself.trigger('uxa:dismiss');\n\t\t\n\t\tif (self.uxa().queue().idle()) {\n\t\t\treturn self.hide();\n\t\t};\n\t\t\n\t\tawait self.uxa().queue();\n\t\treturn setTimeout(function() { return self.hide(); },200);\n\t};\n\t\n\ttag.prototype.header = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn (this._header = this._header||_1('header',this).flag('header'));\n\t};\n\t\n\ttag.prototype.indicator = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn (this._indicator = this._indicator||_1(Indicator,this).flag('indicator').setType('forward')).bindData(this.uxa(),'queue',[]).end();\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn (this._body = this._body||_1('section',this).flag('body')).setContent(\n\t\t\tthis._content ? (\n\t\t\t\tthis._content\n\t\t\t) : (this._template ? (\n\t\t\t\tthis.renderTemplate()\n\t\t\t) : void(0))\n\t\t,3);\n\t};\n\t\n\ttag.prototype.footer = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._footer = this._footer||(t0=_1('footer',this)).flag('footer').flag('flat').setContent([\n\t\t\t_1(Button,t0.$,'A',t0).setType('button').on$(0,['tap','tapDismiss'],this),\n\t\t\t_1(Button,t0.$,'B',t0).flag('primary').setType('submit')\n\t\t],2)).end((\n\t\t\tt0.$.A.setLabel(this.cancelLabel()).end(),\n\t\t\tt0.$.B.setLabel(this.submitLabel()).end()\n\t\t,true));\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1;\n\t\treturn this.$open(0).flag('uxa').setChildren([\n\t\t\tthis.header(),\n\t\t\tthis.body(),\n\t\t\tthis.footer(),\n\t\t\tthis.indicator()\n\t\t],1).synced();\n\t};\n})\nexports.Dialog = Dialog;\n\n// ConfirmDialog\n\n// AlertDialog\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar IconButton = require('./Button').IconButton;\n\nvar Tile = _2.defineTag('Tile', function(tag){\n\t\n\t// list of actions [ [action, icon], ... ]\n\ttag.prototype.actions = function(v){ return this._actions; }\n\ttag.prototype.setActions = function(v){ this._actions = v; return this; };\n\ttag.prototype.__md = {'default': \"# Hello\\n## Subtitle\\nSome random text right here\",name: 'md'};\n\ttag.prototype.md = function(v){ return this._md; }\n\ttag.prototype.setMd = function(v){ this._md = v; return this; }\n\ttag.prototype._md = \"# Hello\\n## Subtitle\\nSome random text right here\";\n\t\n\ttag.prototype.main = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0, _t3;\n\t\treturn (t0 = this._main = this._main||(t0=_1('div',this)).flag('main').setContent([\n\t\t\t_1('div',t0.$,'A',t0).flag('actions').setContent(t0.$.B || _1(IconButton,t0.$,'B','A').setIcon('*'),2),\n\t\t\t_1('span',t0.$,'C',t0).flag('p1')\n\t\t],2)).end((\n\t\t\tt0.$.B.end(),\n\t\t\tt0.$.C.setNestedAttr('uxa','md',this.md()).end()\n\t\t,true));\n\t};\n\t\n\t\n\ttag.prototype.footer = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._footer = this._footer||(t0=_1('div',this)).flag('footer').setContent([\n\t\t\t_1('div',t0.$,'A',t0).flag('p1').setText(\"By Some author\"),\n\t\t\t_1('div',t0.$,'B',t0).flag('c1').setText(\"This is the footer\")\n\t\t],2));\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1;\n\t\treturn this.$open(0).setChildren([\n\t\t\tthis.main(),\n\t\t\tthis.footer()\n\t\t],1).synced();\n\t};\n})\nexports.Tile = Tile;\n", "var Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/);\n\nvar Actionable = _1.defineTag('Actionable', function(tag){\n\t\n\ttag._flagName = null;\n\t\n\ttag.prototype.action = function(v){ return this._action; }\n\ttag.prototype.setAction = function(v){ this._action = v; return this; };\n\t\n\ttag.prototype.contextData = function (){\n\t\tvar data = null;\n\t\tvar el = this;\n\t\twhile (el){\n\t\t\tif (data = el.data()) {\n\t\t\t\treturn data;\n\t\t\t};\n\t\t\tel = el.parent();\n\t\t};\n\t\treturn null;\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\tvar action = this.action();\n\t\t\n\t\tif (action) {\n\t\t\tthis.trigger(\"uxa:action\",action);\n\t\t};\n\t\t\n\t\tif ((typeof action=='string'||action instanceof String)) {\n\t\t\te.halt().silence();\n\t\t\tthis.trigger(action,this.contextData());\n\t\t} else if (action instanceof Array) {\n\t\t\te.halt().silence();\n\t\t\tthis.trigger(action[0],action.slice(1));\n\t\t} else {\n\t\t\te._responder = null;\n\t\t};\n\t\treturn this;\n\t};\n})\nexports.Actionable = Actionable;\n", "/**\n * marked - a markdown parser\n * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n;(function(root) {\n'use strict';\n\n/**\n * Block-Level Grammar\n */\n\nvar block = {\n newline: /^\\n+/,\n code: /^( {4}[^\\n]+\\n*)+/,\n fences: noop,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ *(#{1,6}) *([^\\n]+?) *#* *(?:\\n+|$)/,\n nptable: noop,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( *)(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?!\\1bull )\\n*|\\s*$)/,\n html: /^ *(?:comment *(?:\\n|\\s*$)|closed *(?:\\n{2,}|\\s*$)|closing *(?:\\n{2,}|\\s*$))/,\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n table: noop,\n lheading: /^([^\\n]+)\\n *(=|-){2,} *(?:\\n+|$)/,\n paragraph: /^([^\\n]+(?:\\n?(?!hr|heading|lheading| {0,3}>|tag)[^\\n]+)+)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?:\\\\[\\[\\]]|[^\\[\\]])+/;\nblock._title = /(?:\"(?:\\\\\"|[^\"]|\"[^\"\\n]*\")*\"|'\\n?(?:[^'\\n]+\\n?)*'|\\([^()]*\\))/;\nblock.def = edit(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d+\\.)/;\nblock.item = /^( *)(bull) [^\\n]*(?:\\n(?!\\1bull )[^\\n]*)*/;\nblock.item = edit(block.item, 'gm')\n .replace(/bull/g, block.bullet)\n .getRegex();\n\nblock.list = edit(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'\n + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'\n + '|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b';\n\nblock.html = edit(block.html)\n .replace('comment', /<!--[\\s\\S]*?-->/)\n .replace('closed', /<(tag)[\\s\\S]+?<\\/\\1>/)\n .replace('closing', /<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"\\/>\\s]*)*?\\/?>/)\n .replace(/tag/g, block._tag)\n .getRegex();\n\nblock.paragraph = edit(block.paragraph)\n .replace('hr', block.hr)\n .replace('heading', block.heading)\n .replace('lheading', block.lheading)\n .replace('tag', '<' + block._tag)\n .getRegex();\n\nblock.blockquote = edit(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge({}, block.normal, {\n fences: /^ *(`{3,}|~{3,})[ \\.]*(\\S+)? *\\n([\\s\\S]*?)\\n? *\\1 *(?:\\n+|$)/,\n paragraph: /^/,\n heading: /^ *(#{1,6}) +([^\\n]+?) *#* *(?:\\n+|$)/\n});\n\nblock.gfm.paragraph = edit(block.paragraph)\n .replace('(?!', '(?!'\n + block.gfm.fences.source.replace('\\\\1', '\\\\2') + '|'\n + block.list.source.replace('\\\\1', '\\\\3') + '|')\n .getRegex();\n\n/**\n * GFM + Tables Block Grammar\n */\n\nblock.tables = merge({}, block.gfm, {\n nptable: /^ *(\\S.*\\|.*)\\n *([-:]+ *\\|[-| :]*)\\n((?:.*\\|.*(?:\\n|$))*)\\n*/,\n table: /^ *\\|(.+)\\n *\\|( *[-:]+[-| :]*)\\n((?: *\\|.*(?:\\n|$))*)\\n*/\n});\n\n/**\n * Block Lexer\n */\n\nfunction Lexer(options) {\n this.tokens = [];\n this.tokens.links = {};\n this.options = options || marked.defaults;\n this.rules = block.normal;\n\n if (this.options.gfm) {\n if (this.options.tables) {\n this.rules = block.tables;\n } else {\n this.rules = block.gfm;\n }\n }\n}\n\n/**\n * Expose Block Rules\n */\n\nLexer.rules = block;\n\n/**\n * Static Lex Method\n */\n\nLexer.lex = function(src, options) {\n var lexer = new Lexer(options);\n return lexer.lex(src);\n};\n\n/**\n * Preprocessing\n */\n\nLexer.prototype.lex = function(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n')\n .replace(/\\t/g, ' ')\n .replace(/\\u00a0/g, ' ')\n .replace(/\\u2424/g, '\\n');\n\n return this.token(src, true);\n};\n\n/**\n * Lexing\n */\n\nLexer.prototype.token = function(src, top) {\n src = src.replace(/^ +$/gm, '');\n var next,\n loose,\n cap,\n bull,\n b,\n item,\n space,\n i,\n tag,\n l,\n isordered;\n\n while (src) {\n // newline\n if (cap = this.rules.newline.exec(src)) {\n src = src.substring(cap[0].length);\n if (cap[0].length > 1) {\n this.tokens.push({\n type: 'space'\n });\n }\n }\n\n // code\n if (cap = this.rules.code.exec(src)) {\n src = src.substring(cap[0].length);\n cap = cap[0].replace(/^ {4}/gm, '');\n this.tokens.push({\n type: 'code',\n text: !this.options.pedantic\n ? cap.replace(/\\n+$/, '')\n : cap\n });\n continue;\n }\n\n // fences (gfm)\n if (cap = this.rules.fences.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'code',\n lang: cap[2],\n text: cap[3] || ''\n });\n continue;\n }\n\n // heading\n if (cap = this.rules.heading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[1].length,\n text: cap[2]\n });\n continue;\n }\n\n // table no leading pipe (gfm)\n if (top && (cap = this.rules.nptable.exec(src))) {\n src = src.substring(cap[0].length);\n\n item = {\n type: 'table',\n header: cap[1].replace(/^ *| *\\| *$/g, '').split(/ *\\| */),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3].replace(/\\n$/, '').split('\\n')\n };\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = item.cells[i].split(/ *\\| */);\n }\n\n this.tokens.push(item);\n\n continue;\n }\n\n // hr\n if (cap = this.rules.hr.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'hr'\n });\n continue;\n }\n\n // blockquote\n if (cap = this.rules.blockquote.exec(src)) {\n src = src.substring(cap[0].length);\n\n this.tokens.push({\n type: 'blockquote_start'\n });\n\n cap = cap[0].replace(/^ *> ?/gm, '');\n\n // Pass `top` to keep the current\n // \"toplevel\" state. This is exactly\n // how markdown.pl works.\n this.token(cap, top);\n\n this.tokens.push({\n type: 'blockquote_end'\n });\n\n continue;\n }\n\n // list\n if (cap = this.rules.list.exec(src)) {\n src = src.substring(cap[0].length);\n bull = cap[2];\n isordered = bull.length > 1;\n\n this.tokens.push({\n type: 'list_start',\n ordered: isordered,\n start: isordered ? +bull : ''\n });\n\n // Get each top-level item.\n cap = cap[0].match(this.rules.item);\n\n next = false;\n l = cap.length;\n i = 0;\n\n for (; i < l; i++) {\n item = cap[i];\n\n // Remove the list item's bullet\n // so it is seen as the next token.\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+\\.) +/, '');\n\n // Outdent whatever the\n // list item contains. Hacky.\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic\n ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')\n : item.replace(/^ {1,4}/gm, '');\n }\n\n // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n if (this.options.smartLists && i !== l - 1) {\n b = block.bullet.exec(cap[i + 1])[0];\n if (bull !== b && !(bull.length > 1 && b.length > 1)) {\n src = cap.slice(i + 1).join('\\n') + src;\n i = l - 1;\n }\n }\n\n // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n loose = next || /\\n\\n(?!\\s*$)/.test(item);\n if (i !== l - 1) {\n next = item.charAt(item.length - 1) === '\\n';\n if (!loose) loose = next;\n }\n\n this.tokens.push({\n type: loose\n ? 'loose_item_start'\n : 'list_item_start'\n });\n\n // Recurse.\n this.token(item, false);\n\n this.tokens.push({\n type: 'list_item_end'\n });\n }\n\n this.tokens.push({\n type: 'list_end'\n });\n\n continue;\n }\n\n // html\n if (cap = this.rules.html.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: this.options.sanitize\n ? 'paragraph'\n : 'html',\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: cap[0]\n });\n continue;\n }\n\n // def\n if (top && (cap = this.rules.def.exec(src))) {\n src = src.substring(cap[0].length);\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n tag = cap[1].toLowerCase();\n if (!this.tokens.links[tag]) {\n this.tokens.links[tag] = {\n href: cap[2],\n title: cap[3]\n };\n }\n continue;\n }\n\n // table (gfm)\n if (top && (cap = this.rules.table.exec(src))) {\n src = src.substring(cap[0].length);\n\n item = {\n type: 'table',\n header: cap[1].replace(/^ *| *\\| *$/g, '').split(/ *\\| */),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3].replace(/(?: *\\| *)?\\n$/, '').split('\\n')\n };\n\n for (i = 0; i < item.align.length; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n for (i = 0; i < item.cells.length; i++) {\n item.cells[i] = item.cells[i]\n .replace(/^ *\\| *| *\\| *$/g, '')\n .split(/ *\\| */);\n }\n\n this.tokens.push(item);\n\n continue;\n }\n\n // lheading\n if (cap = this.rules.lheading.exec(src)) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'heading',\n depth: cap[2] === '=' ? 1 : 2,\n text: cap[1]\n });\n continue;\n }\n\n // top-level paragraph\n if (top && (cap = this.rules.paragraph.exec(src))) {\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'paragraph',\n text: cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1]\n });\n continue;\n }\n\n // text\n if (cap = this.rules.text.exec(src)) {\n // Top-level should never reach here.\n src = src.substring(cap[0].length);\n this.tokens.push({\n type: 'text',\n text: cap[0]\n });\n continue;\n }\n\n if (src) {\n throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return this.tokens;\n};\n\n/**\n * Inline-Level Grammar\n */\n\nvar inline = {\n escape: /^\\\\([\\\\`*{}\\[\\]()#+\\-.!_>])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noop,\n tag: /^<!--[\\s\\S]*?-->|^<\\/?[a-zA-Z0-9\\-]+(?:\"[^\"]*\"|'[^']*'|\\s[^<'\">\\/\\s]*)*?\\/?>/,\n link: /^!?\\[(inside)\\]\\(href\\)/,\n reflink: /^!?\\[(inside)\\]\\s*\\[([^\\]]*)\\]/,\n nolink: /^!?\\[((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\]/,\n strong: /^__([\\s\\S]+?)__(?!_)|^\\*\\*([\\s\\S]+?)\\*\\*(?!\\*)/,\n em: /^_([^\\s_](?:[^_]|__)+?[^\\s_])_\\b|^\\*((?:\\*\\*|[^*])+?)\\*(?!\\*)/,\n code: /^(`+)\\s*([\\s\\S]*?[^`]?)\\s*\\1(?!`)/,\n br: /^ {2,}\\n(?!\\s*$)/,\n del: noop,\n text: /^[\\s\\S]+?(?=[\\\\<!\\[`*]|\\b_| {2,}\\n|$)/\n};\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\n\ninline.autolink = edit(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex()\n\ninline._inside = /(?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]]|\\](?=[^\\[]*\\]))*/;\ninline._href = /\\s*<?([\\s\\S]*?)>?(?:\\s+['\"]([\\s\\S]*?)['\"])?\\s*/;\n\ninline.link = edit(inline.link)\n .replace('inside', inline._inside)\n .replace('href', inline._href)\n .getRegex();\n\ninline.reflink = edit(inline.reflink)\n .replace('inside', inline._inside)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge({}, inline.normal, {\n strong: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n em: /^_(?=\\S)([\\s\\S]*?\\S)_(?!_)|^\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)/\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge({}, inline.normal, {\n escape: edit(inline.escape).replace('])', '~|])').getRegex(),\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/)\n .replace('email', inline._email)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^~~(?=\\S)([\\s\\S]*?\\S)~~/,\n text: edit(inline.text)\n .replace(']|', '~]|')\n .replace('|', '|https?://|ftp://|www\\\\.|[a-zA-Z0-9.!#$%&\\'*+/=?^_`{\\\\|}~-]+@|')\n .getRegex()\n});\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = merge({}, inline.gfm, {\n br: edit(inline.br).replace('{2,}', '*').getRegex(),\n text: edit(inline.gfm.text).replace('{2,}', '*').getRegex()\n});\n\n/**\n * Inline Lexer & Compiler\n */\n\nfunction InlineLexer(links, options) {\n this.options = options || marked.defaults;\n this.links = links;\n this.rules = inline.normal;\n this.renderer = this.options.renderer || new Renderer();\n this.renderer.options = this.options;\n\n if (!this.links) {\n throw new Error('Tokens array requires a `links` property.');\n }\n\n if (this.options.gfm) {\n if (this.options.breaks) {\n this.rules = inline.breaks;\n } else {\n this.rules = inline.gfm;\n }\n } else if (this.options.pedantic) {\n this.rules = inline.pedantic;\n }\n}\n\n/**\n * Expose Inline Rules\n */\n\nInlineLexer.rules = inline;\n\n/**\n * Static Lexing/Compiling Method\n */\n\nInlineLexer.output = function(src, links, options) {\n var inline = new InlineLexer(links, options);\n return inline.output(src);\n};\n\n/**\n * Lexing/Compiling\n */\n\nInlineLexer.prototype.output = function(src) {\n var out = '',\n link,\n text,\n href,\n cap;\n\n while (src) {\n // escape\n if (cap = this.rules.escape.exec(src)) {\n src = src.substring(cap[0].length);\n out += cap[1];\n continue;\n }\n\n // autolink\n if (cap = this.rules.autolink.exec(src)) {\n src = src.substring(cap[0].length);\n if (cap[2] === '@') {\n text = escape(this.mangle(cap[1]));\n href = 'mailto:' + text;\n } else {\n text = escape(cap[1]);\n href = text;\n }\n out += this.renderer.link(href, null, text);\n continue;\n }\n\n // url (gfm)\n if (!this.inLink && (cap = this.rules.url.exec(src))) {\n cap[0] = this.rules._backpedal.exec(cap[0])[0];\n src = src.substring(cap[0].length);\n if (cap[2] === '@') {\n text = escape(cap[0]);\n href = 'mailto:' + text;\n } else {\n text = escape(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n out += this.renderer.link(href, null, text);\n continue;\n }\n\n // tag\n if (cap = this.rules.tag.exec(src)) {\n if (!this.inLink && /^<a /i.test(cap[0])) {\n this.inLink = true;\n } else if (this.inLink && /^<\\/a>/i.test(cap[0])) {\n this.inLink = false;\n }\n src = src.substring(cap[0].length);\n out += this.options.sanitize\n ? this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape(cap[0])\n : cap[0]\n continue;\n }\n\n // link\n if (cap = this.rules.link.exec(src)) {\n src = src.substring(cap[0].length);\n this.inLink = true;\n out += this.outputLink(cap, {\n href: cap[2],\n title: cap[3]\n });\n this.inLink = false;\n continue;\n }\n\n // reflink, nolink\n if ((cap = this.rules.reflink.exec(src))\n || (cap = this.rules.nolink.exec(src))) {\n src = src.substring(cap[0].length);\n link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = this.links[link.toLowerCase()];\n if (!link || !link.href) {\n out += cap[0].charAt(0);\n src = cap[0].substring(1) + src;\n continue;\n }\n this.inLink = true;\n out += this.outputLink(cap, link);\n this.inLink = false;\n continue;\n }\n\n // strong\n if (cap = this.rules.strong.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.strong(this.output(cap[2] || cap[1]));\n continue;\n }\n\n // em\n if (cap = this.rules.em.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.em(this.output(cap[2] || cap[1]));\n continue;\n }\n\n // code\n if (cap = this.rules.code.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.codespan(escape(cap[2].trim(), true));\n continue;\n }\n\n // br\n if (cap = this.rules.br.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.br();\n continue;\n }\n\n // del (gfm)\n if (cap = this.rules.del.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.del(this.output(cap[1]));\n continue;\n }\n\n // text\n if (cap = this.rules.text.exec(src)) {\n src = src.substring(cap[0].length);\n out += this.renderer.text(escape(this.smartypants(cap[0])));\n continue;\n }\n\n if (src) {\n throw new Error('Infinite loop on byte: ' + src.charCodeAt(0));\n }\n }\n\n return out;\n};\n\n/**\n * Compile Link\n */\n\nInlineLexer.prototype.outputLink = function(cap, link) {\n var href = escape(link.href),\n title = link.title ? escape(link.title) : null;\n\n return cap[0].charAt(0) !== '!'\n ? this.renderer.link(href, title, this.output(cap[1]))\n : this.renderer.image(href, title, escape(cap[1]));\n};\n\n/**\n * Smartypants Transformations\n */\n\nInlineLexer.prototype.smartypants = function(text) {\n if (!this.options.smartypants) return text;\n return text\n // em-dashes\n .replace(/---/g, '\\u2014')\n // en-dashes\n .replace(/--/g, '\\u2013')\n // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n // closing singles & apostrophes\n .replace(/'/g, '\\u2019')\n // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n // closing doubles\n .replace(/\"/g, '\\u201d')\n // ellipses\n .replace(/\\.{3}/g, '\\u2026');\n};\n\n/**\n * Mangle Links\n */\n\nInlineLexer.prototype.mangle = function(text) {\n if (!this.options.mangle) return text;\n var out = '',\n l = text.length,\n i = 0,\n ch;\n\n for (; i < l; i++) {\n ch = text.charCodeAt(i);\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n};\n\n/**\n * Renderer\n */\n\nfunction Renderer(options) {\n this.options = options || {};\n}\n\nRenderer.prototype.code = function(code, lang, escaped) {\n if (this.options.highlight) {\n var out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape(code, true))\n + '\\n</code></pre>';\n }\n\n return '<pre><code class=\"'\n + this.options.langPrefix\n + escape(lang, true)\n + '\">'\n + (escaped ? code : escape(code, true))\n + '\\n</code></pre>\\n';\n};\n\nRenderer.prototype.blockquote = function(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n};\n\nRenderer.prototype.html = function(html) {\n return html;\n};\n\nRenderer.prototype.heading = function(text, level, raw) {\n return '<h'\n + level\n + ' id=\"'\n + this.options.headerPrefix\n + raw.toLowerCase().replace(/[^\\w]+/g, '-')\n + '\">'\n + text\n + '</h'\n + level\n + '>\\n';\n};\n\nRenderer.prototype.hr = function() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n};\n\nRenderer.prototype.list = function(body, ordered, start) {\n var type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n};\n\nRenderer.prototype.listitem = function(text) {\n return '<li>' + text + '</li>\\n';\n};\n\nRenderer.prototype.paragraph = function(text) {\n return '<p>' + text + '</p>\\n';\n};\n\nRenderer.prototype.table = function(header, body) {\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + '<tbody>\\n'\n + body\n + '</tbody>\\n'\n + '</table>\\n';\n};\n\nRenderer.prototype.tablerow = function(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n};\n\nRenderer.prototype.tablecell = function(content, flags) {\n var type = flags.header ? 'th' : 'td';\n var tag = flags.align\n ? '<' + type + ' style=\"text-align:' + flags.align + '\">'\n : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n};\n\n// span level renderer\nRenderer.prototype.strong = function(text) {\n return '<strong>' + text + '</strong>';\n};\n\nRenderer.prototype.em = function(text) {\n return '<em>' + text + '</em>';\n};\n\nRenderer.prototype.codespan = function(text) {\n return '<code>' + text + '</code>';\n};\n\nRenderer.prototype.br = function() {\n return this.options.xhtml ? '<br/>' : '<br>';\n};\n\nRenderer.prototype.del = function(text) {\n return '<del>' + text + '</del>';\n};\n\nRenderer.prototype.link = function(href, title, text) {\n if (this.options.sanitize) {\n try {\n var prot = decodeURIComponent(unescape(href))\n .replace(/[^\\w:]/g, '')\n .toLowerCase();\n } catch (e) {\n return text;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return text;\n }\n }\n if (this.options.baseUrl && !originIndependentUrl.test(href)) {\n href = resolveUrl(this.options.baseUrl, href);\n }\n var out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n};\n\nRenderer.prototype.image = function(href, title, text) {\n if (this.options.baseUrl && !originIndependentUrl.test(href)) {\n href = resolveUrl(this.options.baseUrl, href);\n }\n var out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += this.options.xhtml ? '/>' : '>';\n return out;\n};\n\nRenderer.prototype.text = function(text) {\n return text;\n};\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\n\nfunction TextRenderer() {}\n\n// no need for block level renderers\n\nTextRenderer.prototype.strong =\nTextRenderer.prototype.em =\nTextRenderer.prototype.codespan =\nTextRenderer.prototype.del =\nTextRenderer.prototype.text = function (text) {\n return text;\n}\n\nTextRenderer.prototype.link =\nTextRenderer.prototype.image = function(href, title, text) {\n return '' + text;\n}\n\nTextRenderer.prototype.br = function() {\n return '';\n}\n\n/**\n * Parsing & Compiling\n */\n\nfunction Parser(options) {\n this.tokens = [];\n this.token = null;\n this.options = options || marked.defaults;\n this.options.renderer = this.options.renderer || new Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n}\n\n/**\n * Static Parse Method\n */\n\nParser.parse = function(src, options) {\n var parser = new Parser(options);\n return parser.parse(src);\n};\n\n/**\n * Parse Loop\n */\n\nParser.prototype.parse = function(src) {\n this.inline = new InlineLexer(src.links, this.options);\n // use an InlineLexer with a TextRenderer to extract pure text\n this.inlineText = new InlineLexer(\n src.links,\n merge({}, this.options, {renderer: new TextRenderer()})\n );\n this.tokens = src.reverse();\n\n var out = '';\n while (this.next()) {\n out += this.tok();\n }\n\n return out;\n};\n\n/**\n * Next Token\n */\n\nParser.prototype.next = function() {\n return this.token = this.tokens.pop();\n};\n\n/**\n * Preview Next Token\n */\n\nParser.prototype.peek = function() {\n return this.tokens[this.tokens.length - 1] || 0;\n};\n\n/**\n * Parse Text Tokens\n */\n\nParser.prototype.parseText = function() {\n var body = this.token.text;\n\n while (this.peek().type === 'text') {\n body += '\\n' + this.next().text;\n }\n\n return this.inline.output(body);\n};\n\n/**\n * Parse Current Token\n */\n\nParser.prototype.tok = function() {\n switch (this.token.type) {\n case 'space': {\n return '';\n }\n case 'hr': {\n return this.renderer.hr();\n }\n case 'heading': {\n return this.renderer.heading(\n this.inline.output(this.token.text),\n this.token.depth,\n unescape(this.inlineText.output(this.token.text)));\n }\n case 'code': {\n return this.renderer.code(this.token.text,\n this.token.lang,\n this.token.escaped);\n }\n case 'table': {\n var header = '',\n body = '',\n i,\n row,\n cell,\n j;\n\n // header\n cell = '';\n for (i = 0; i < this.token.header.length; i++) {\n cell += this.renderer.tablecell(\n this.inline.output(this.token.header[i]),\n { header: true, align: this.token.align[i] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n for (i = 0; i < this.token.cells.length; i++) {\n row = this.token.cells[i];\n\n cell = '';\n for (j = 0; j < row.length; j++) {\n cell += this.renderer.tablecell(\n this.inline.output(row[j]),\n { header: false, align: this.token.align[j] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n return this.renderer.table(header, body);\n }\n case 'blockquote_start': {\n body = '';\n\n while (this.next().type !== 'blockquote_end') {\n body += this.tok();\n }\n\n return this.renderer.blockquote(body);\n }\n case 'list_start': {\n body = '';\n var ordered = this.token.ordered,\n start = this.token.start;\n\n while (this.next().type !== 'list_end') {\n body += this.tok();\n }\n\n return this.renderer.list(body, ordered, start);\n }\n case 'list_item_start': {\n body = '';\n\n while (this.next().type !== 'list_item_end') {\n body += this.token.type === 'text'\n ? this.parseText()\n : this.tok();\n }\n\n return this.renderer.listitem(body);\n }\n case 'loose_item_start': {\n body = '';\n\n while (this.next().type !== 'list_item_end') {\n body += this.tok();\n }\n\n return this.renderer.listitem(body);\n }\n case 'html': {\n var html = !this.token.pre && !this.options.pedantic\n ? this.inline.output(this.token.text)\n : this.token.text;\n return this.renderer.html(html);\n }\n case 'paragraph': {\n return this.renderer.paragraph(this.inline.output(this.token.text));\n }\n case 'text': {\n return this.renderer.paragraph(this.parseText());\n }\n }\n};\n\n/**\n * Helpers\n */\n\nfunction escape(html, encode) {\n return html\n .replace(!encode ? /&(?!#?\\w+;)/g : /&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig, function(_, n) {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nfunction edit(regex, opt) {\n regex = regex.source;\n opt = opt || '';\n return {\n replace: function(name, val) {\n val = val.source || val;\n val = val.replace(/(^|[^\\[])\\^/g, '$1');\n regex = regex.replace(name, val);\n return this;\n },\n getRegex: function() {\n return new RegExp(regex, opt);\n }\n };\n}\n\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (/^[^:]+:\\/*[^/]*$/.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = base.replace(/[^/]*$/, '');\n }\n }\n base = baseUrls[' ' + base];\n\n if (href.slice(0, 2) === '//') {\n return base.replace(/:[\\s\\S]*/, ':') + href;\n } else if (href.charAt(0) === '/') {\n return base.replace(/(:\\/*[^/]*)[\\s\\S]*/, '$1') + href;\n } else {\n return base + href;\n }\n}\nvar baseUrls = {};\nvar originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\n\nfunction noop() {}\nnoop.exec = noop;\n\nfunction merge(obj) {\n var i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\n/**\n * Marked\n */\n\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (callback || typeof opt === 'function') {\n if (!callback) {\n callback = opt;\n opt = null;\n }\n\n opt = merge({}, marked.defaults, opt || {});\n\n var highlight = opt.highlight,\n tokens,\n pending,\n i = 0;\n\n try {\n tokens = Lexer.lex(src, opt)\n } catch (e) {\n return callback(e);\n }\n\n pending = tokens.length;\n\n var done = function(err) {\n if (err) {\n opt.highlight = highlight;\n return callback(err);\n }\n\n var out;\n\n try {\n out = Parser.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!pending) return done();\n\n for (; i < tokens.length; i++) {\n (function(token) {\n if (token.type !== 'code') {\n return --pending || done();\n }\n return highlight(token.text, token.lang, function(err, code) {\n if (err) return done(err);\n if (code == null || code === token.text) {\n return --pending || done();\n }\n token.text = code;\n token.escaped = true;\n --pending || done();\n });\n })(tokens[i]);\n }\n\n return;\n }\n try {\n if (opt) opt = merge({}, marked.defaults, opt);\n return Parser.parse(Lexer.lex(src, opt), opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if ((opt || marked.defaults).silent) {\n return '<p>An error occurred:</p><pre>'\n + escape(e.message + '', true)\n + '</pre>';\n }\n throw e;\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge(marked.defaults, opt);\n return marked;\n};\n\nmarked.defaults = {\n gfm: true,\n tables: true,\n breaks: false,\n pedantic: false,\n sanitize: false,\n sanitizer: null,\n mangle: true,\n smartLists: false,\n silent: false,\n highlight: null,\n langPrefix: 'lang-',\n smartypants: false,\n headerPrefix: '',\n renderer: new Renderer(),\n xhtml: false,\n baseUrl: null\n};\n\n/**\n * Expose\n */\n\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\n\nmarked.Renderer = Renderer;\nmarked.TextRenderer = TextRenderer;\n\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\n\nmarked.InlineLexer = InlineLexer;\nmarked.inlineLexer = InlineLexer.output;\n\nmarked.parse = marked;\n\nif (typeof module !== 'undefined' && typeof exports === 'object') {\n module.exports = marked;\n} else if (typeof define === 'function' && define.amd) {\n define(function() { return marked; });\n} else {\n root.marked = marked;\n}\n})(this || (typeof window !== 'undefined' ? window : global));\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar Stack = require('./Stack').Stack;\nvar Menu = require('./Menu').Menu;\nvar MenuItem = require('./MenuItem').MenuItem;\nvar Button$ = require('./Button'), Button = Button$.Button, IconButton = Button$.IconButton;\nvar TextField$ = require('./TextField'), TextField = TextField$.TextField, TextArea = TextField$.TextArea, SelectField = TextField$.SelectField;\nvar ListItem = require('./ListItem').ListItem;\nvar Popover = require('./Popover').Popover;\nvar Dialog = require('./Dialog').Dialog;\nvar Indicator = require('./Indicator').Indicator;\nvar Form = require('./Form').Form;\nvar Snackbar = require('./Snackbar').Snackbar;\nvar Tile = require('./Tile').Tile;\nvar Icon = require('./Icon').Icon;\nvar Queue = require('./Queue').Queue;\nvar Actionable = require('./Actionable').Actionable;\n\nvar marked = require('marked');\n// var mdconverter = showdown.Converter.new(noHeaderId: yes, tables: yes)\n\nvar MarkdownCache = {};\nvar SetterCache = {};\n\nvar mdclean = function(md,out) {\n\tif (md.indexOf('\\n') == -1 && out.indexOf('<p>') == 0) {\n\t\treturn out.slice(3,out.lastIndexOf('</p>'));\n\t} else {\n\t\treturn out;\n\t};\n};\n\nvar md2html = function(md) {\n\tvar MarkdownCache_;\n\treturn MarkdownCache[md] || (MarkdownCache[md] = mdclean(md,marked(md)));\n};\n\nvar toSetter = function(key) {\n\tvar SetterCache_;\n\treturn SetterCache[key] || (SetterCache[key] = Imba.toCamelCase('set-' + key));\n};\n\nvar ActionHandler = function(e) {\n\tlet target = this;\n\tlet action = target.uxa().action();\n\t\n\tif (action) {\n\t\ttarget.trigger(\"uxa:action\",action);\n\t};\n\t\n\tif ((typeof action=='string'||action instanceof String)) {\n\t\te.halt().silence();\n\t\treturn target.trigger(action,target.uxa().contextData());\n\t} else if (action instanceof Array) {\n\t\te.halt().silence();\n\t\treturn target.trigger(action[0],action.slice(1));\n\t} else if (action instanceof Function) {\n\t\te.halt().silence();\n\t\treturn action.call(target,e);\n\t} else {\n\t\treturn e._responder = null;\n\t};\n};\n\nfunction UXAWrapper(owner){\n\tthis._owner = owner;\n\tthis._options = {};\n\tthis;\n};\n\nUXAWrapper.prototype.__md = {watch: 'mdDidSet',name: 'md'};\nUXAWrapper.prototype.md = function(v){ return this._md; }\nUXAWrapper.prototype.setMd = function(v){\n\tvar a = this.md();\n\tif(v != a) { this._md = v; }\n\tif(v != a) { this.mdDidSet && this.mdDidSet(v,a,this.__md) }\n\treturn this;\n};\nUXAWrapper.prototype.__action = {watch: 'actionDidSet',name: 'action'};\nUXAWrapper.prototype.action = function(v){ return this._action; }\nUXAWrapper.prototype.setAction = function(v){\n\tvar a = this.action();\n\tif(v != a) { this._action = v; }\n\tif(v != a) { this.actionDidSet && this.actionDidSet(v,a,this.__action) }\n\treturn this;\n};\n\nUXAWrapper.prototype.open = function (component,options){\n\tif(options === undefined) options = {};\n\treturn Stack.show(component,this._owner,options);\n};\n\nUXAWrapper.prototype.menu = function (component){\n\treturn this;\n};\n\nUXAWrapper.prototype.confirm = function (message){\n\tvar self = this;\n\treturn new Promise(function(resolve,reject) {\n\t\tvar _t1, _t2, t0;\n\t\tvar ok = function() { return resolve(true); };\n\t\tvar cancel = function() { return resolve(false); };\n\t\tvar dialog = (t0 = (t0=_1(Dialog)).setContent(t0.$.A || _1('span',t0.$,'A',t0),2)).on$(0,['uxadismiss',cancel],self).on$(1,['uxasubmit',ok],self).end((\n\t\t\tt0.$.A.setNestedAttr('uxa','md',message).end()\n\t\t,true));\n\t\treturn self.open(dialog);\n\t});\n};\n\nUXAWrapper.prototype.flash = function (item,typ){\n\tvar _t1;\n\tif (item instanceof Error) {\n\t\titem = item.message;\n\t\ttyp = 'dark'; // Error\n\t};\n\t\n\tif ((typeof item=='string'||item instanceof String)) {\n\t\titem = (_1(Snackbar)).setFlag(0,typ || 'dark').setNestedAttr('uxa','md',item).end();\n\t};\n\t\n\tif (item instanceof Snackbar) {\n\t\tthis.open(item);\n\t};\n\treturn this;\n};\n\nUXAWrapper.prototype.set = function (key,value){\n\treturn this[toSetter(key)](value);\n};\n\nUXAWrapper.prototype.mdDidSet = function (value){\n\treturn this._owner.dom().innerHTML = md2html(value);\n};\n\nUXAWrapper.prototype.actionDidSet = function (action,prev){\n\tthis._owner.ontap = ActionHandler;\n\treturn this;\n};\n\nUXAWrapper.prototype.contextData = function (){\n\tvar data = null;\n\tvar el = this._owner;\n\twhile (el){\n\t\tif (data = el.data()) {\n\t\t\treturn data;\n\t\t};\n\t\tel = el.parent();\n\t};\n\treturn null;\n};\n\nUXAWrapper.prototype.queue = function (){\n\treturn this._queue || (this._queue = new Queue(this._owner));\n};\n\n\n// hello\n_2.extendTag('element', function(tag){\n\t\n\ttag.prototype.uxa = function (){\n\t\treturn this._uxa || (this._uxa = new UXAWrapper(this));\n\t};\n\t\n\ttag.prototype.uxaSetAttribute = function (key,value){\n\t\treturn this.uxa().set(key,value);\n\t};\n});\n\n\n\t\n\tImba.Event.prototype.uxa = function (){\n\t\treturn this.target().uxa();\n\t};\n\n\nvar UXA = exports.UXA = new UXAWrapper(null);\nvar Button = exports.Button = Button;\nvar IconButton = exports.IconButton = IconButton;\nvar Menu = exports.Menu = Menu;\nvar MenuItem = exports.MenuItem = MenuItem;\nvar TextField = exports.TextField = TextField;\nvar TextArea = exports.TextArea = TextArea;\nvar SelectField = exports.SelectField = SelectField;\nvar ListItem = exports.ListItem = ListItem;\nMenuItem = exports.MenuItem = MenuItem;\nvar Popover = exports.Popover = Popover;\nvar Dialog = exports.Dialog = Dialog;\nvar Form = exports.Form = Form;\nvar Indicator = exports.Indicator = Indicator;\nvar Snackbar = exports.Snackbar = Snackbar;\nvar Tile = exports.Tile = Tile;\nvar Icon = exports.Icon = Icon;\nvar Actionable = exports.Actionable = Actionable;\n\nif (true) {\n\twindow.UXA = UXA;\n};\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar uxa1$ = require('uxa1'), Dialog = uxa1$.Dialog, TextArea = uxa1$.TextArea, TextField = uxa1$.TextField, Button = uxa1$.Button;\nvar LongPromise = require('../util/LongPromise').LongPromise;\n\nvar AuthenticationDialog = _2.defineTag('AuthenticationDialog', Dialog, function(tag){\n\ttag.prototype.promise = function(v){ return this._promise; }\n\ttag.prototype.setPromise = function(v){ this._promise = v; return this; };\n\t\n\ttag.prototype.openGithubSeamless = function (){\n\t\t// Hm. How to keep it open?\n\t\tvar url = \"/login?from=/auth/github/seamless\";\n\t\t\n\t\tif ((/11\\.\\d Safari/).test(window.navigator.userAgent)) {\n\t\t\t// bug in Safari Technology Preview with popup windows\n\t\t\twindow.open(url,\"_blank\");\n\t\t\treturn;\n\t\t};\n\t\t\n\t\tvar ox = Math.round(window.screenLeft + window.outerWidth * 0.5);\n\t\tvar oy = Math.round(window.screenTop + window.outerHeight * 0.5);\n\t\tvar settings = (\"left=\" + (ox - 300) + \",width=600,top=\" + (oy - 300) + \",height=600\");\n\t\t\n\t\treturn window.open(url,\"ghlogin\",settings);\n\t};\n\t\n\ttag.prototype.github = function (){\n\t\tvar self = this;\n\t\tself.openGithubSeamless();\n\t\t\n\t\treturn self.uxa().queue().add(10000,async function() {\n\t\t\tawait self.api().githubLoginPromise();\n\t\t\treturn self.hide();\n\t\t});\n\t};\n\t\n\ttag.prototype.signup = function (){\n\t\tvar _t1;\n\t\tApp.uxa().open((_1(SignupDialog)).setPromise(this._promise).end());\n\t\tthis._promise = null;\n\t\treturn this.hide();\n\t};\n\t\n\ttag.prototype.forgot = function (){\n\t\tvar _t1;\n\t\tApp.uxa().open((_1(ForgotDialog)).setPromise(this._promise).end());\n\t\tthis._promise = null;\n\t\treturn this.hide();\n\t};\n\t\n\ttag.prototype.setup = function (){\n\t\tthis._promise || (this._promise = new LongPromise());\n\t\tthis.setSubmitLabel(\"Log in\");\n\t\treturn tag.prototype.__super__.setup.apply(this,arguments);\n\t};\n\t\n\ttag.prototype.onuxahide = function (){\n\t\tif (this._promise) { return this._promise.resolve(true) };\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0, _t3, _t4;\n\t\treturn (t0 = this._body = this._body||(t0=_1('div',this)).flag('body').setContent([\n\t\t\t_1('a',t0.$,'A',t0).flag('githubButton').flag('lg-mb').on$(0,['tap','prevent','github'],this).setContent([\n\t\t\t\tt0.$.B || _1('i',t0.$,'B','A').dataset('icon','github'),\n\t\t\t\t\"Log in with GitHub\"\n\t\t\t],2),\n\t\t\t\n\t\t\t_1('h3',t0.$,'C',t0).setText(\"\u2026 or log in with email and password\"),\n\t\t\t\n\t\t\t_1(TextField,t0.$,'D',t0).setType('text').setName('email').setLabel('Email'),\n\t\t\t_1(TextField,t0.$,'E',t0).setType('password').setName('password').setLabel('Password'),\n\t\t\t\n\t\t\t_1('div',t0.$,'F',t0).flag('extra').setContent([\n\t\t\t\t_1('p',t0.$,'G','F').setContent([\n\t\t\t\t\t\"Don't have an account yet? \",\n\t\t\t\t\tt0.$.H || _1('a',t0.$,'H','G').on$(0,['tap','prevent','signup'],this).setText('Sign up')\n\t\t\t\t],2),\n\t\t\t\t_1('p',t0.$,'I','F').setContent([\n\t\t\t\t\t\"Forgot your password? \",\n\t\t\t\t\tt0.$.J || _1('a',t0.$,'J','I').on$(0,['tap','prevent','forgot'],this).setText('Reset password')\n\t\t\t\t],2)\n\t\t\t],2)\n\t\t],2)).end((\n\t\t\tt0.$.B.end(),\n\t\t\tt0.$.D.end(),\n\t\t\tt0.$.E.end()\n\t\t,true));\n\t};\n\t\n\ttag.prototype.onuxasubmit = function (e,data){\n\t\tvar self = this;\n\t\te.halt();\n\t\t\n\t\treturn self.uxa().queue().add(200,async function() {\n\t\t\tvar user = await self.api().userAuthenticate(data.email,data.password,{models: true});\n\t\t\tif (!user) {\n\t\t\t\tthrow new Error(\"Incorrect email/password\");\n\t\t\t};\n\t\t});\n\t};\n})\nexports.AuthenticationDialog = AuthenticationDialog;\n\nvar SignupDialog = _2.defineTag('SignupDialog', Dialog, function(tag){\n\ttag.prototype.promise = function(v){ return this._promise; }\n\ttag.prototype.setPromise = function(v){ this._promise = v; return this; };\n\t\n\ttag.prototype.onuxahide = function (){\n\t\tif (this._promise) { return this._promise.resolve(true) };\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._body = this._body||(t0=_1('div',this)).flag('body').setContent([\n\t\t\t_1('h2',t0.$,'A',t0).setText(\"Sign up with email and password\"),\n\t\t\t_1(TextField,t0.$,'B',t0).setType('email').setName('email').setLabel('Email').setRequired(true),\n\t\t\t_1(TextField,t0.$,'C',t0).setType('text').setName('name').setLabel('Name').setRequired(true),\n\t\t\t_1(TextField,t0.$,'D',t0).setType('password').setName('password').setLabel('Password').setRequired(true).setMinlength(5)\n\t\t],2)).end((\n\t\t\tt0.$.B.end(),\n\t\t\tt0.$.C.end(),\n\t\t\tt0.$.D.end()\n\t\t,true));\n\t};\n\t\n\ttag.prototype.onuxasubmit = function (e,data){\n\t\tvar self = this;\n\t\treturn self.uxa().queue().add(200,async function() {\n\t\t\tvar response = await self.api().userCreate(data);\n\t\t\tif (response && response.message) {\n\t\t\t\tthrow new Error(response.message);\n\t\t\t};\n\t\t});\n\t};\n});\n\nvar ForgotDialog = _2.defineTag('ForgotDialog', Dialog, function(tag){\n\ttag.prototype.promise = function(v){ return this._promise; }\n\ttag.prototype.setPromise = function(v){ this._promise = v; return this; };\n\t\n\ttag.prototype.onuxahide = function (){\n\t\tif (this._promise) { return this._promise.resolve(true) };\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._body = this._body||(t0=_1('div',this)).flag('body').setContent([\n\t\t\t_1('h2',t0.$,'A',t0).setText(\"Reset password\"),\n\t\t\t_1(TextField,t0.$,'B',t0).setType('email').setName('email').setLabel('Email')\n\t\t],2)).end((\n\t\t\tt0.$.B.end()\n\t\t,true));\n\t};\n\t\n\ttag.prototype.onuxasubmit = function (e,data){\n\t\tvar self = this;\n\t\treturn self.uxa().queue().add(200,async function() {\n\t\t\tvar user = await self.api().rpc('userForgotPassword',[data.email]);\n\t\t\tif (user) {\n\t\t\t\treturn self.uxa().flash((\"Instructions for resetting your password been sent to \" + (data.email)));\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"There is no user with the given email address\");\n\t\t\t};\n\t\t});\n\t};\n});\n\nvar ResetPasswordDialog = _2.defineTag('ResetPasswordDialog', Dialog, function(tag){\n\ttag.prototype.token = function(v){ return this._token; }\n\ttag.prototype.setToken = function(v){ this._token = v; return this; };\n\ttag.prototype.aid = function(v){ return this._aid; }\n\ttag.prototype.setAid = function(v){ this._aid = v; return this; };\n\t\n\ttag.prototype.setup = function (){\n\t\tvar self = this;\n\t\tself._status = \"loading\";\n\t\tself.setSubmitLabel(\"Reset\");\n\t\t\n\t\treturn self.uxa().queue().add(async function() {\n\t\t\treturn self._status = await self.api().rpc('userResetPassword',[self.aid(),self.token()]);\n\t\t});\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._body = this._body||(t0=_1('div',this)).flag('body')).setContent([\n\t\t\t(t0.$.A || _1('h2',t0.$,'A',t0).setText(\"Reset password\")),\n\t\t\t(this._status == \"loading\") ? (\n\t\t\t\t(t0.$.B || _1('p',t0.$,'B',t0).setText(\"Loading...\"))\n\t\t\t) : ((this._status == \"invalid\") ? (\n\t\t\t\t(t0.$.C || _1('p',t0.$,'C',t0).setText(\"Invalid reset link. Please try again.\"))\n\t\t\t) : ((this._status == \"valid\") ? (\n\t\t\t\t(t0.$.D || _1(TextField,t0.$,'D',t0).setType('password').setName('password').setLabel('New password').setRequired(true).setMinlength(5)).end()\n\t\t\t) : void(0)))\n\t\t],1);\n\t};\n\t\n\ttag.prototype.onuxasubmit = function (e,data){\n\t\tvar self = this;\n\t\treturn self.uxa().queue().add(200,async function() {\n\t\t\tvar v_;\n\t\t\tvar status = await self.api().rpc('userResetPassword',[self.aid(),self.token(),data.password]);\n\t\t\tif (status == \"updated\") {\n\t\t\t\tself.uxa().flash(\"Your password has been updated\");\n\t\t\t\treturn (App.router().url().setHash(v_ = \"\"),v_);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"Something went wrong\");\n\t\t\t};\n\t\t});\n\t};\n})\nexports.ResetPasswordDialog = ResetPasswordDialog;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar uxa1$ = require('uxa1'), Button = uxa1$.Button, Dialog = uxa1$.Dialog;\n\nvar NotificationDialog = _2.defineTag('NotificationDialog', Dialog, function(tag){\n\ttag.prototype.__notifications = {'default': [],name: 'notifications'};\n\ttag.prototype.notifications = function(v){ return this._notifications; }\n\ttag.prototype.setNotifications = function(v){ this._notifications = v; return this; }\n\ttag.prototype._notifications = [];\n\ttag.prototype.notification = function(v){ return this._notification; }\n\ttag.prototype.setNotification = function(v){ this._notification = v; return this; };\n\ttag.prototype.index = function(v){ return this._index; }\n\ttag.prototype.setIndex = function(v){ this._index = v; return this; };\n\ttag.prototype.__dismissable = {'default': false,name: 'dismissable'};\n\ttag.prototype.dismissable = function(v){ return this._dismissable; }\n\ttag.prototype.setDismissable = function(v){ this._dismissable = v; return this; }\n\ttag.prototype._dismissable = false;\n\ttag.prototype.__emoji = {'default': '\uD83D\uDC4B',name: 'emoji'};\n\ttag.prototype.emoji = function(v){ return this._emoji; }\n\ttag.prototype.setEmoji = function(v){ this._emoji = v; return this; }\n\ttag.prototype._emoji = '\uD83D\uDC4B';\n\t\n\ttag.prototype.setup = function (){\n\t\tvar index_;\n\t\tthis.setIndex(0);\n\t\treturn (this.setNotification(this.notifications()[index_ = this.index()]),this.notifications()[index_]);\n\t};\n\t\n\ttag.prototype.onuxasubmit = function (e){\n\t\tvar self = this;\n\t\treturn self.uxa().queue().add(200,function() {\n\t\t\tself.api().clearNotification(self.notification().id);\n\t\t\tif (self.index() + 1 < self.notifications().length) {\n\t\t\t\tself.setIndex(self.index() + 1);\n\t\t\t\tself.setNotification(self.notifications()[self.index()]);\n\t\t\t\treturn e.halt().prevent(); // stop closing of dialog\n\t\t\t} else {\n\t\t\t\treturn self.hide();\n\t\t\t};\n\t\t});\n\t};\n\t\n\ttag.prototype.header = function (){\n\t\tvar _t1;\n\t\tif (this.notification()) {\n\t\t\treturn (_1('header').flag('emojiHeadline')).setContent(this.notification().emoji || this.emoji(),3);\n\t\t};\n\t};\n\t\n\ttag.prototype.footer = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._footer = this._footer||(t0=_1('footer',this)).flag('footer').flag('flat')).setContent([\n\t\t\tthis.dismissable() ? (\n\t\t\t\t(t0.$.A || _1(Button,t0.$,'A',t0).setType('button').on$(0,['tap','tapDismiss'],this)).setLabel(this.cancelLabel()).end()\n\t\t\t) : void(0),\n\t\t\t(t0.$.B || _1(Button,t0.$,'B',t0).flag('primary').setType('submit').setLabel('ok!')).end()\n\t\t],1);\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0, _t3;\n\t\tif (!(this.notification())) { return };\n\t\tvar note = this.notification();\n\t\t\n\t\treturn (t0 = this._body = this._body||(t0=_1('div',this)).flag('body').flag('NotificationDialog').setContent(\n\t\t\tt0.$.A || _1('span',t0.$,'A',t0)\n\t\t,2)).end((\n\t\t\tt0.$.A.setContent(\n\t\t\t\t(note.type == 'purchaseCompleted') ? Imba.static([\n\t\t\t\t\t(t0.$.B || _1('h2',t0.$,'B','A').setText(\"Purchase completed!\")),\n\t\t\t\t\t(Number(note.quantity) > 1) ? (\n\t\t\t\t\t\t(t0.$.C || _1('span',t0.$,'C','A')).setText(\"Your \" + (note.processor) + \" purchase of \" + (note.quantity) + \" licenses was successful. You should receive an e-mail from us with details on how your users can sign up.\")\n\t\t\t\t\t) : (\n\t\t\t\t\t\t(t0.$.D || _1('span',t0.$,'D','A')).setText(\"Your \" + (note.processor) + \" purchase of the course was successful. May your learning be swift and boundless! \uD83D\uDE47\uD83C\uDFFC\u200D\u2642\uFE0F\")\n\t\t\t\t\t)\n\t\t\t\t],1,1) : Imba.static([\n\t\t\t\t\tnote.title ? ((t0.$.E || _1('h2',t0.$,'E','A')).setContent(note.title,3)) : void(0),\n\t\t\t\t\t(t0.$.F || _1('span',t0.$,'F','A')).setContent(note.message,3)\n\t\t\t\t],1,2)\n\t\t\t,3)\n\t\t,true));\n\t};\n})\nexports.NotificationDialog = NotificationDialog;\n\n/* purchaseComplete messsage example\nvar message =\n\ttype: 'purchaseCompleted'\n\tgid: gid\n\tquantity: quantity\n\tprocessor: stripe\n*/\n\n", "var Imba = require('imba1');\nfunction Delay(target,path){\n\tvar self = this;\n\tself._target = target;\n\tself._path = path;\n\tself._time = 0;\n\tself._timeout = null;\n\tself._trigger = function() { return self.trigger(); };\n\tself;\n};\n\nexports.Delay = Delay; // export class \nDelay.prototype.data = function(v){ return this._data; }\nDelay.prototype.setData = function(v){ this._data = v; return this; };\n\n// def self.delay target, time, func\n// FINISH\nDelay.delay = function (owner,name,time,blk){\n\tvar store = owner.__delays_ || (owner.__delays_ = {});\n\tvar delay = store[name] || (store[name] = new Delay(owner,name));\n\t(time == -1) ? delay.cancel() : delay.delay(time);\n\treturn delay;\n};\n\nDelay.prototype.async = function (name){\n\tvar self = this;\n\tself._asyncTriggers || (self._asyncTriggers = {});\n\tvar fn = self._asyncTriggers[name] || (self._asyncTriggers[name] = function() { return self[name](); });\n\tImba.TICKER.add(fn);\n\treturn self;\n};\n\n\nDelay.prototype.delay = function (ms){\n\tlet at = Date.now() + ms;\n\t\n\tif (this._timeout && (at >= this._time)) {\n\t\t// just set new time -- when the\n\t\t// current timeout is triggered,\n\t\t// it will reschedule\n\t\tthis._time = at;\n\t} else {\n\t\tthis._time = at;\n\t\tif (this._timeout) { clearTimeout(this._timeout) };\n\t\tthis._timeout = setTimeout(this._trigger,ms);\n\t};\n\treturn this;\n};\n\n// TODO Add method that extends current delay\n// instead of scheduling at current time + ms \n\nDelay.prototype.cancel = function (){\n\tclearTimeout(this._timeout);\n\tthis._timeout = null;\n\tthis._time = null;\n\treturn this;\n};\n\nDelay.prototype.trigger = function (){\n\tclearTimeout(this._timeout);\n\tthis._timeout = null;\n\t\n\tif (this._time) {\n\t\tlet ms = this._time - Date.now();\n\t\t// we do expect the timeout to be\n\t\t// correct down to a few ms\n\t\tif (ms > 3) { return this.delay(ms) };\n\t};\n\t\n\tif (this._target instanceof Function) {\n\t\tthis._target(this);\n\t} else {\n\t\tthis._target[this._path](this);\n\t};\n\t\n\treturn this;\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1');\n// externs;\n\nvar msgpack = require('msgpack-lite');\nvar util = require('./util');\n\nvar MSG = require('./protocol').MSG;\n\nvar models$ = require('./models'), ModelStore = models$.ModelStore, User = models$.User;\n// import Socket from './socket'\nvar Logger = require('./util/Logger').Logger;\nvar LongPromise = require('./util/LongPromise').LongPromise;\nvar UserAgent = require('./util/UserAgent').UserAgent;\nvar StoreWrapper$ = require('./util/StoreWrapper'), SessionStore = StoreWrapper$.SessionStore, LocalStore = StoreWrapper$.LocalStore;\nvar Analytics = require('./util/Analytics').Analytics;\nvar AuthenticationDialog = require('./legacy/AuthenticationDialog').AuthenticationDialog;\nvar NotificationDialog = require('./legacy/NotificationDialog').NotificationDialog;\n\nvar Delay = require('./util/Delay').Delay;\n\n// var tracking = require './scrimba/tracking'\n\nvar CacheParser = function(key,value) {\n\tif (typeof value == 'string') {\n\t\tif ((/^\\d{4}-\\d\\d-\\d\\dT([\\d\\.\\:]+)/).test(value)) {\n\t\t\treturn new Date(value);\n\t\t};\n\t};\n\treturn value;\n};\n\nfunction API(){\n\tvar self = this;\n\tself._initializedAt = self._lastMoveTime = Date.now();\n\tself._ua = new UserAgent(window.navigator && window.navigator.userAgent);\n\tself._cache = window.store;\n\tself._user = window.store.user ? new User(window.store.user) : null;\n\tself._logger = new Logger();\n\tself._touches = 0;\n\tself._manifest = self._cache.manifest || {};\n\tself.setNotifications(self._cache.notifications || []);\n\t\n\tself._idler = new Delay(function() {\n\t\tself._idle = true;\n\t\treturn self.emit('idle');\n\t});\n\t\n\tself;\n};\n\nexports.API = API; // export class \nAPI.prototype.cache = function(v){ return this._cache; }\nAPI.prototype.setCache = function(v){ this._cache = v; return this; };\nAPI.prototype.__user = {watch: 'userDidSet',name: 'user'};\nAPI.prototype.user = function(v){ return this._user; }\nAPI.prototype.setUser = function(v){\n\tvar a = this.user();\n\tif(v != a) { this._user = v; }\n\tif(v != a) { this.userDidSet && this.userDidSet(v,a,this.__user) }\n\treturn this;\n};\nAPI.prototype.__hasAvailableUpdates = {watch: 'hasAvailableUpdatesDidSet',name: 'hasAvailableUpdates'};\nAPI.prototype.hasAvailableUpdates = function(v){ return this._hasAvailableUpdates; }\nAPI.prototype.setHasAvailableUpdates = function(v){\n\tvar a = this.hasAvailableUpdates();\n\tif(v != a) { this._hasAvailableUpdates = v; }\n\tif(v != a) { this.hasAvailableUpdatesDidSet && this.hasAvailableUpdatesDidSet(v,a,this.__hasAvailableUpdates) }\n\treturn this;\n};\nAPI.prototype.__notifications = {watch: 'notificationsDidSet',name: 'notifications'};\nAPI.prototype.notifications = function(v){ return this._notifications; }\nAPI.prototype.setNotifications = function(v){\n\tvar a = this.notifications();\n\tif(v != a) { this._notifications = v; }\n\tif(v != a) { this.notificationsDidSet && this.notificationsDidSet(v,a,this.__notifications) }\n\treturn this;\n};\nAPI.prototype.session = function(v){ return this._session; }\nAPI.prototype.setSession = function(v){ this._session = v; return this; };\nAPI.prototype.__pageVisibility = {watch: 'pageVisibilityDidSet',name: 'pageVisibility'};\nAPI.prototype.pageVisibility = function(v){ return this._pageVisibility; }\nAPI.prototype.setPageVisibility = function(v){\n\tvar a = this.pageVisibility();\n\tif(v != a) { this._pageVisibility = v; }\n\tif(v != a) { this.pageVisibilityDidSet && this.pageVisibilityDidSet(v,a,this.__pageVisibility) }\n\treturn this;\n};\nAPI.prototype.ua = function(v){ return this._ua; }\nAPI.prototype.setUa = function(v){ this._ua = v; return this; };\n\nAPI.instance = function (){\n\treturn this._instance || (this._instance = new this());\n};\n\nAPI.prototype.emit = function (name){\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.emit(this,name,params);\n};\nAPI.prototype.on = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.listen.apply(Imba,[].concat([this,name], Array.from(params)));\n};\nAPI.prototype.once = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.once.apply(Imba,[].concat([this,name], Array.from(params)));\n};\nAPI.prototype.un = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.unlisten.apply(Imba,[].concat([this,name], Array.from(params)));\n};\n\nAPI.prototype.db = function (){\n\treturn this._db || (this._db = new ModelStore(this));\n};\n\nAPI.prototype.analytics = function (){\n\treturn this._analytics || (this._analytics = new Analytics(this));\n};\n\nAPI.prototype.manifest = function (){\n\treturn this._manifest;\n};\nAPI.prototype.platform = function (){\n\treturn window.navigator.platform;\n};\n\nAPI.prototype.get = function (key){\n\treturn this.db().get(key);\n};\n\nAPI.prototype.load = function (key){\n\tvar item = this.db().get(key);\n\tif (item.v == -3) { // is loading\n\t\treturn item.fetch();\n\t} else {\n\t\treturn Promise.resolve(item);\n\t};\n};\n\nAPI.prototype.fetch = function (key){\n\treturn this.rpc('fetch',[key],{models: true});\n};\n\nAPI.prototype.preload = function (){\n\treturn this;\n};\n\nAPI.prototype.log = function (){\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>0 ? i : 0);\n\twhile(i>0) params[i-1] = $0[--i];\n\treturn this._logger.log.apply(this._logger,params);\n};\n\nAPI.prototype.monacoPath = function (){\n\treturn \"/static/cached/scrimba-monaco-976ad19\";\n};\n\nAPI.prototype.notificationsDidSet = function (){\n\tvar viewableNotifications;\n\treturn viewableNotifications = this.getNotifications();\n};\n\nAPI.prototype.sid = function (){\n\treturn (this._sid == null) ? (this._sid = this.sessionStore().get('sid')) : this._sid;\n};\n\nAPI.prototype.setSid = function (newSid){\n\tthis._sid = this.sessionStore().set('sid',newSid);\n\treturn this;\n};\n\nAPI.prototype.getNotifications = function (){\n\t// assumes notifications has been updated by the websocket\n\treturn this.notifications().filter(function(item) { return !item.viewed; });\n};\n\nAPI.prototype.clearNotification = async function (id){\n\tif (this.notifications()) {\n\t\tvar index = this.notifications().findIndex(function(item) {\n\t\t\treturn item && item.id == id;\n\t\t});\n\t\tif (index > -1) { this.notifications()[index].viewed = true };\n\t\t\n\t\treturn await this.rpc('clearNotification',[id]);\n\t};\n};\n\nAPI.prototype.userDidSet = function (user,prev){\n\treturn true;\n};\n\nAPI.prototype.msSinceInit = function (){\n\treturn Date.now() - this._initializedAt;\n};\n\nAPI.prototype.sendTracking = function (){\n\t// console.log 'sendTracking'\n\treturn true;\n};\n\nAPI.prototype.uid = function (){\n\tvar u = this._user;\n\treturn u && u.id;\n};\n\nAPI.prototype.roles = function (){\n\treturn this._roles || (this._roles = (this._user && this._user.roles || []));\n};\n\nAPI.prototype.isMod = function (){\n\treturn this.roles().indexOf('mod') >= 0;\n};\n\nAPI.prototype.isMobile = function (){\n\treturn (this._isMobile == null) ? (this._isMobile = this.ua().isMobile()) : this._isMobile;\n};\n\nAPI.prototype.isSubscriber = function (){\n\treturn this._user && this._user.subscription && this._user.subscription();\n};\n\nAPI.prototype.isEmbed = function (){\n\treturn window.top != window;\n};\n\nAPI.prototype.isOffline = function (){\n\treturn !window.navigator.onLine;\n};\n\nAPI.prototype.isHidden = function (){\n\treturn document.hidden;\n};\n\nAPI.prototype.sync = function (){\n\treturn this.db().sync();\n};\n\nAPI.baseUrl = function (){\n\treturn window.location.origin;\n};\n\nAPI.prototype.assetsPath = function (name){\n\treturn (\"/assets/\" + (this._manifest[name] || name));\n};\n\nAPI.prototype.stamp = function (name){\n\tif (ENV_DEBUG) {\n\t\tconsole.log(name,performance.now());\n\t};\n\treturn this;\n};\n\nAPI.prototype.localStore = function (){\n\treturn this._localStore || (this._localStore = new LocalStore());\n};\n\nAPI.prototype.sessionStore = function (){\n\treturn this._sessionStore || (this._sessionStore = new SessionStore());\n};\n\nAPI.prototype.tryLogin = function (){\n\treturn Promise.resolve(window.store.user);\n};\n\nAPI.prototype.localToken = function (){\n\tif (!(this._localToken = this.localStore().get('localToken'))) {\n\t\tthis.localStore().set('localToken',this._localToken = util.uuid());\n\t};\n\treturn this._localToken;\n};\n\n// where should these really resign? session object?\nAPI.prototype.getStyleVar = function (varname){\n\tvar cs = window.getComputedStyle(document.body);\n\tvar val = cs.getPropertyValue('--' + varname);\n\treturn val;\n};\n\nAPI.prototype.setStyleVar = function (varname,value){\n\tdocument.body.style.setProperty('--' + varname,value);\n\treturn value;\n};\n\nAPI.prototype.fontSize = function (){\n\treturn this._fontSize || parseInt(this.getStyleVar('fontSize') || 13);\n};\n\nAPI.prototype.vw = function (){\n\treturn window.innerWidth;\n};\n\nAPI.prototype.vh = function (){\n\treturn window.innerHeight;\n};\n\nAPI.prototype.setFontSize = function (value){\n\tif (this._fontSize != value) {\n\t\tthis._fontSize = value;\n\t\tthis.setStyleVar('fontSize',value + 'px');\n\t\tthis.setStyleVar('lineHeight',Math.ceil(value * 1.5) + 'px');\n\t\tthis.sessionStore().set('fontSize',value);\n\t\tthis.emit('reflow');\n\t};\n\treturn;\n};\n\nAPI.prototype.onmessage = function (data,socket){\n\treturn console.log(\"api.onmessage\",data,socket);\n};\n\nAPI.prototype.receive = function (packet){\n\tvar $1;\n\tif (window.DEBUG_CHAOS) {\n\t\treturn;\n\t};\n\t\n\tif (packet.CODE >= 100 && packet.CODE < 200) {\n\t\tlet obj = this.db().get(packet[1]);\n\t\t($1 = obj) && $1.onpacket && $1.onpacket(packet);\n\t} else if (packet.CODE == MSG.SYNC) {\n\t\tthis.log('sync',packet.params()[1]);\n\t\tfor (let i = 0, items = iter$(packet.params()[1]), len = items.length; i < len; i++) {\n\t\t\tthis.db().read(items[i]);\n\t\t};\n\t\tthis.db().touch();\n\t} else if (packet.CODE == MSG.SID) {\n\t\tthis.setSid(packet.params()[1]);\n\t} else if (packet.CODE == MSG.UPDATES_AVAILABLE) {\n\t\tthis.setHasAvailableUpdates(true);\n\t} else if (packet.CODE == MSG.NOTIFICATIONS_AVAILABLE) {\n\t\tthis.setNotifications(packet.params()[1]);\n\t};\n\t\n\tImba.Scheduler.event({type: 'packet',data: packet});\n\treturn this;\n};\n\nAPI.prototype.touch = function (){\n\tthis._touches++;\n\treturn Imba.Scheduler.event({type: 'api'});\n};\n\nAPI.prototype.uploadBlob = async function (content,params){\n\tvar res = await window.fetch(\"/blobs\",{credentials: 'include',\n\tmethod: 'POST',\n\tbody: content,\n\theaders: {'Content-Type': 'application/octet-stream'}});\n\tvar data = await res.json();\n\tif (params) { data.locals = params };\n\treturn data;\n};\n\nAPI.prototype.createFromSnapshot = async function (params,snapshot){\n\tvar v_;\n\tlet data = Object.assign({type: 'lab',title: 'Something'},params);\n\t(((v_ = snapshot.seed),delete snapshot.seed, v_));\n\t\n\tvar cast = await this.rpc('castCreate',[data,snapshot],{models: true});\n\tif (cast) {\n\t\treturn App.router().go(cast.url());\n\t};\n};\n\nAPI.prototype.fetchBlob = async function (id,type){\n\tif(type === undefined) type = null;\n\tvar res = await window.fetch((\"/blobs/\" + id),{credentials: 'include',method: 'GET'});\n\treturn res;\n};\n\nAPI.prototype.rpc = function (name,args,o){\n\tvar self = this, cached, v_;\n\tif(o === undefined) o = {};\n\tvar key = JSON.stringify([name,args]);\n\t\n\t// we could consider caching fetch-request for a short while\n\t// and make sure to not fire the same request multiple times\n\t// if one is already in progress?\n\t\n\tif (cached = self._cache[key]) {\n\t\t(((v_ = self._cache[key]),delete self._cache[key], v_));\n\t\tif (o.models) { cached = self.db().deserialize(cached) };\n\t\treturn Promise.resolve(cached);\n\t};\n\t\n\tvar time = self.analytics().time('app',(\"rpc_\" + name),args[0]);\n\t\n\treturn new Promise(function(resolve,reject) {\n\t\tvar xhr = new XMLHttpRequest();\n\t\t\n\t\tif (o.type) {\n\t\t\txhr.responseType = o.type;\n\t\t};\n\t\t\n\t\txhr.open('POST',(\"/rpc/\" + name));\n\t\txhr.setRequestHeader('Content-Type','application/json');\n\t\t\n\t\tconsole.log('rpc call',name,args);\n\t\t\n\t\txhr.onload = function() {\n\t\t\tvar resp = xhr.response;\n\t\t\tvar result;\n\t\t\t\n\t\t\tif (xhr.status >= 200 && xhr.status < 300) {\n\t\t\t\ttime.end();\n\t\t\t\t\n\t\t\t\tif (o.raw) {\n\t\t\t\t\tresolve(resp);\n\t\t\t\t} else if (o.type == 'arraybuffer') {\n\t\t\t\t\tvar uintDataArray = new Uint8Array(resp);\n\t\t\t\t\tresult = msgpack.decode(uintDataArray);\n\t\t\t\t\tresolve(result);\n\t\t\t\t} else {\n\t\t\t\t\tresp = JSON.parse(resp,CacheParser).response;\n\t\t\t\t\tif (o.models) { resp = self.db().deserialize(resp) };\n\t\t\t\t\tresolve(resp);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tself.touch();\n\t\t\t\t\treturn App.touch();\n\t\t\t\t} catch (e) { };\n\t\t\t} else {\n\t\t\t\treturn reject(xhr.statusText);\n\t\t\t};\n\t\t};\n\t\t\n\t\treturn xhr.send(JSON.stringify({name: name,args: args,options: o}));\n\t});\n};\n", "var Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/), _2 = Imba.createElementFactory(/*SCOPEID*/);\nvar ServiceWorkerFrame = _1.defineTag('ServiceWorkerFrame', 'iframe', function(tag){\n\t\n\ttag.prototype.send = function (msg){\n\t\treturn this.dom().contentWindow.postMessage(msg,'*');\n\t};\n});\n\nfunction Container(id){\n\tvar _t1;\n\tthis._id = id;\n\tthis._runner = (_2(ServiceWorkerFrame)).setSrc((this.origin() + '/__sw__.html?' + id)).end();\n\tthis._player = (_2(ServiceWorkerFrame)).setSrc(('/__sw__.html?' + id)).end();\n\tthis;\n};\n\nexports.Container = Container; // export class \nContainer.prototype.__controller = {watch: 'controllerDidSet',name: 'controller'};\nContainer.prototype.controller = function(v){ return this._controller; }\nContainer.prototype.setController = function(v){\n\tvar a = this.controller();\n\tif(v != a) { this._controller = v; }\n\tif(v != a) { this.controllerDidSet && this.controllerDidSet(v,a,this.__controller) }\n\treturn this;\n};\nContainer.prototype.runner = function(v){ return this._runner; }\nContainer.prototype.setRunner = function(v){ this._runner = v; return this; };\nContainer.prototype.player = function(v){ return this._player; }\nContainer.prototype.setPlayer = function(v){ this._player = v; return this; };\n\nvar instances = {};\n\nContainer.instance = function (id){\n\tif(id === undefined) id = window.CONTAINER_ID;\n\treturn instances[id] || (instances[id] = new this(id));\n};\n\nContainer.prototype.origin = function (details){\n\tlet pfx = this._id;\n\tif (details) {\n\t\tpfx += (\"-\" + details);\n\t};\n\treturn document.location.origin.replace(\"://\",(\"://\" + pfx + \".\"));\n};\n\nContainer.prototype.mount = function (){\n\tvar self = this;\n\tif (!self._mounted) {\n\t\tself._onmessage = function(e) {\n\t\t\tif (e.source == self._runner.dom().contentWindow) {\n\t\t\t\treturn self.onrunnermessage(e.data,e);\n\t\t\t} else if (e.source == self._player.dom().contentWindow) {\n\t\t\t\treturn self.onplayermessage(e.data,e);\n\t\t\t};\n\t\t};\n\t\t\n\t\tdocument.body.appendChild(self._runner.dom());\n\t\tdocument.body.appendChild(self._player.dom());\n\t\t\n\t\twindow.addEventListener('message',self._onmessage);\n\t\tself._mounted = true;\n\t};\n\treturn self;\n};\n\nContainer.prototype.unmount = function (){\n\tif (this._mounted) {\n\t\twindow.removeEventListener('message',this._onmessage);\n\t\tthis._onmessage = null;\n\t\tthis._mounted = false;\n\t\tthis._runner.orphanize();\n\t\tthis._player.orphanize();\n\t};\n\treturn this;\n};\n\nContainer.prototype.onrunnermessage = function (msg,e){\n\t// console.log \"onrunnermessage\",msg\n\tvar self = this, controller_;\n\tif (self.controller()) {\n\t\tvar cb = function(response) {\n\t\t\tif (msg.ref && msg.ref > 0) {\n\t\t\t\tresponse.ref = -msg.ref;\n\t\t\t};\n\t\t\treturn self.runner().send(response);\n\t\t};\n\t\treturn (controller_ = self.controller()) && controller_.oncontainermessage && controller_.oncontainermessage(msg,cb,'runner');\n\t};\n};\n\nContainer.prototype.onplayermessage = function (msg,e){\n\t// console.log \"onplayermessage\",msg\n\t\n\tvar self = this, controller_;\n\tif (self.controller()) {\n\t\tvar cb = function(response) {\n\t\t\tif (msg.ref && msg.ref > 0) {\n\t\t\t\tresponse.ref = -msg.ref;\n\t\t\t};\n\t\t\treturn self.player().send(response);\n\t\t};\n\t\t\n\t\treturn (controller_ = self.controller()) && controller_.oncontainermessage && controller_.oncontainermessage(msg,cb,'player');\n\t};\n};\n\nContainer.prototype.controllerDidSet = function (controller,prev){\n\treturn this.mount();\n};\n\nContainer.prototype.send = function (data){\n\tthis.runner().send(data);\n\treturn this.player().send(data);\n};\n\nContainer.prototype.sync = function (space){\n\tvar snap = space.toRunStaticSnapshot();\n\tthis.send({type: 'snapshot',data: snap});\n\treturn this;\n};\n\n\n", "\"use strict\";exports.parse=parse,exports.init=void 0;const A=1===new Uint8Array(new Uint16Array([1]).buffer)[0];function parse(E,g=\"@\"){if(!C)return init.then((()=>parse(E)));const I=E.length+1,o=(C.__heap_base.value||C.__heap_base)+4*I-C.memory.buffer.byteLength;o>0&&C.memory.grow(Math.ceil(o/65536));const D=C.sa(I-1);if((A?B:Q)(E,new Uint16Array(C.memory.buffer,D,I)),!C.parse())throw Object.assign(new Error(`Parse error ${g}:${E.slice(0,C.e()).split(\"\\n\").length}:${C.e()-E.lastIndexOf(\"\\n\",C.e()-1)}`),{idx:C.e()});const J=[],K=[];for(;C.ri();){const A=C.is(),Q=C.ie(),B=C.ai(),g=C.id(),I=C.ss(),o=C.se();let D;C.ip()&&(D=w(E.slice(-1===g?A-1:A,-1===g?Q+1:Q))),J.push({n:D,s:A,e:Q,ss:I,se:o,d:g,a:B})}for(;C.re();){const A=C.es(),Q=C.ee(),B=C.els(),g=C.ele(),I=E.slice(A,Q),o=I[0],D=B<0?void 0:E.slice(B,g),J=D?D[0]:\"\";K.push({s:A,e:Q,ls:B,le:g,n:'\"'===o||\"'\"===o?w(I):I,ln:'\"'===J||\"'\"===J?w(D):D})}function w(A){try{return(0,eval)(A)}catch(A){}}return[J,K,!!C.f()]}function Q(A,Q){const C=A.length;let B=0;for(;B<C;){const C=A.charCodeAt(B);Q[B++]=(255&C)<<8|C>>>8}}function B(A,Q){const C=A.length;let B=0;for(;B<C;)Q[B]=A.charCodeAt(B++)}let C;const init=WebAssembly.compile((E=\"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lApBACgC4AkhAkEBECYhAwJAAkACQEEAKAKUCiIEIAFHDQAgAxAlRQ0BCwJAAkACQAJAIANBKkYNACADQfsARw0BQQAgBEECajYClApBARAmIQRBACgClAohAQNAAkACQCAEQf//A3EiA0EiRg0AIANBJ0YNACADECgaQQAoApQKIQMMAQsgAxAYQQBBACgClApBAmoiAzYClAoLQQEQJhoCQCABIAMQKSIEQSxHDQBBAEEAKAKUCkECajYClApBARAmIQQLQQAoApQKIQMgBEH9AEYNAyADIAFGDQYgAyEBIANBACgCmApNDQAMBgsLQQAgBEECajYClApBARAmGkEAKAKUCiIDIAMQKRoMAgtBAEEAOgD4CQJAAkACQAJAAkACQCADQZ9/ag4MAggEAQgDCAgICAgFAAsgA0H2AEYNBAwHCyAEIARBDmpBAEEAEAIPC0EAIARBCmo2ApQKQQEQJhpBACgClAohBAtBACAEQRBqNgKUCgJAQQEQJiIEQSpHDQBBAEEAKAKUCkECajYClApBARAmIQQLQQAoApQKIQMgBBAoGiADQQAoApQKIgQgAyAEEAJBAEEAKAKUCkF+ajYClAoPCwJAIAQpAAJC7ICEg7COwDlSDQAgBC8BChAeRQ0AQQAgBEEKajYClApBARAmIQRBACgClAohAyAEECgaIANBACgClAoiBCADIAQQAkEAQQAoApQKQX5qNgKUCg8LQQAgBEEEaiIENgKUCgtBACAEQQRqIgM2ApQKQQBBADoA+AkCQANAQQAgA0ECajYClApBARAmIQRBACgClAohAyAEEChBIHJB+wBGDQFBACgClAoiBCADRg0EIAMgBCADIAQQAkEBECZBLEcNAUEAKAKUCiEDDAALC0EAQQAoApQKQX5qNgKUCg8LQQAgA0ECajYClAoLQQEQJiEEQQAoApQKIQMCQCAEQeYARw0AIANBAmpBnghBBhArDQBBACADQQhqNgKUCiAAQQEQJhAnIAJBEGpBzAkgAhshAwNAIAMoAgAiA0UNAiADQgA3AgggA0EQaiEDDAALC0EAIANBfmo2ApQKCw8LECILvgYBBH9BAEEAKAKUCiIAQQxqIgE2ApQKAkACQAJAAkACQAJAAkACQAJAAkBBARAmIgJBWWoOCAQCAQQBAQEDAAsgAkEiRg0DIAJB+wBGDQQLQQAo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\",\"undefined\"!=typeof Buffer?Buffer.from(E,\"base64\"):Uint8Array.from(atob(E),(A=>A.charCodeAt(0))))).then(WebAssembly.instantiate).then((({exports:A})=>{C=A}));var E;exports.init=init;", "export def relativeTo(base\\string, req\\string)\n\tconst baseParts = base.split(\"/\")\n\tconst reqParts = req.split(\"/\")\n\tif baseParts.length == 2\n\t\treturn req\n\t# remove the last part of baseParts\n\tlet res = ''\n\tfor part, i in reqParts when i > 0\n\t\tif part != baseParts[i]\n\t\t\treturn \"/{reqParts.splice(i).join('/')}\"\n\n\treturn res\n\t\n\n\t", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nfunction len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1');\n\nfunction List(owner,array){\n\tthis._owner = owner;\n\tthis._array = [];\n\tthis._im = {};\n\tfor (let i = 0, items = iter$(array), len = items.length; i < len; i++) {\n\t\tthis.add(items[i]);\n\t};\n\tthis;\n};\n\nexports.List = List; // export class \nList.prototype.array = function(v){ return this._array; }\nList.prototype.setArray = function(v){ this._array = v; return this; };\n\nList.prototype.add = function (item,key){\n\tif (!this.has(item)) {\n\t\tthis._array.push(item);\n\t\tthis.register(item,key);\n\t\tthis.emit('add',item);\n\t};\n\treturn item;\n};\n\nList.prototype.register = function (item,key){\n\tif (key != undefined) {\n\t\tthis._im[key] = item;\n\t} else if (item.key instanceof Function) {\n\t\tif (ENV_DEBUG) { console.log('added to list') };\n\t\tthis._im[key = item.key()] = item;\n\t};\n\treturn key;\n};\n\nList.prototype.deregister = function (item){\n\tif (item && (item.key instanceof Function)) {\n\t\tthis._im[item.key()] = null;\n\t};\n\treturn this;\n};\n\n\nList.prototype.getNextId = function (){\n\tvar i = this._nextId || (this._nextId = 0);\n\twhile (++i < 10000){\n\t\tif (!this._im[i]) {\n\t\t\treturn this._nextId = i;\n\t\t};\n\t\ti++;\n\t};\n\t\n\treturn null;\n};\n\n\nList.prototype.at = function (index){\n\treturn this._array[index];\n};\n\nList.prototype.first = function (){\n\treturn this.at(0);\n};\n\nList.prototype.last = function (){\n\treturn this.at(len$(this) - 1);\n};\n\nList.prototype.push = function (item){\n\treturn this.add(item);\n};\n\nList.prototype.pop = function (){\n\treturn this.remove(this.last());\n\t// @array.pop\n};\n\nList.prototype.shift = function (){\n\treturn this.remove(this.first());\n\t// @array.shift\n};\n\nList.prototype.splice = function (idx,remcount){\n\tvar $0 = arguments, i = $0.length;\n\tvar insert = new Array(i>2 ? i-2 : 0);\n\twhile(i>2) insert[--i - 2] = $0[i];\n\tfor (let i = 0, items = iter$(insert), len = items.length; i < len; i++) {\n\t\tthis.register(items[i]);\n\t};\n\tthis._array.splice.apply(this._array,[].concat([idx,remcount], Array.from(insert)));\n\treturn this;\n};\n\nList.prototype.remove = function (item){\n\tif (this._im[item]) {\n\t\titem = this._im[item];\n\t};\n\t\n\tvar idx = this.indexOf(item);\n\tif (idx >= 0) {\n\t\tthis._array.splice(idx,1);\n\t\t// remove from map\n\t\tthis.deregister(item);\n\t\tthis.emit('remove',item);\n\t};\n\treturn this;\n};\n\nList.prototype.delete = function (item){\n\treturn this.remove(item);\n};\n\nList.prototype.move = function (item,index){\n\tvar prevIdx = this.indexOf(item);\n\tif (prevIdx >= 0) {\n\t\tthis._array[prevIdx] = null;\n\t\tthis._array.splice(index,0,item);\n\t\tthis._array.splice(this._array.indexOf(null),1);\n\t} else {\n\t\tconsole.log(\"List.splice at\",index,0,item);\n\t\tthis._array.splice(index,0,item);\n\t\tthis.register(item);\n\t};\n\treturn this;\n};\n\nList.prototype.has = function (item){\n\treturn this.indexOf(item) >= 0 || this._im[item];\n};\n\nList.prototype.get = function (item){\n\tif (this._im[item]) {\n\t\treturn this._im[item];\n\t};\n};\n\nList.prototype.map = function (cb){\n\treturn this.toArray().map(cb);\n};\n\nList.prototype.forEach = function (cb){\n\treturn this.toArray().forEach(cb);\n};\n\nList.prototype.first = function (cb){\n\tif (cb) {\n\t\treturn this.filter(cb)[0];\n\t} else {\n\t\treturn this._array[0];\n\t};\n};\n\nList.prototype.filter = function (cb){\n\treturn this.toArray().filter(cb);\n};\n\nList.prototype.any = function (cb){\n\treturn this.filter(cb).length > 0;\n};\n\nList.prototype.indexOf = function (item){\n\treturn this._array.indexOf(item);\n};\n\nList.prototype.load = function (items){\n\tthis._array = (items instanceof Array) ? items : items.toArray();\n\treturn this;\n};\n\nList.prototype.eachReversed = function (cb){\n\tvar i = len$(this);\n\twhile (i > 0){\n\t\tcb(this._array[--i],i);\n\t};\n\treturn this;\n};\n\nList.prototype.toArray = function (){\n\treturn this._array;\n};\n\nList.prototype.toClonedArray = function (){\n\treturn this._array.slice(0);\n};\n\nList.prototype.len = function (){\n\treturn this._array.length;\n};\n\nList.prototype.lookup = function (key,loader){\n\treturn this;\n};\n\nList.prototype.emit = function (name){\n\t// console.log 'List emit',self,name,params\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.emit(this,name,params);\n};\n\nList.prototype.on = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.listen.apply(Imba,[].concat([this,name], Array.from(params)));\n};\n\nList.prototype.un = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.unlisten.apply(Imba,[].concat([this,name], Array.from(params)));\n};\n\nList.prototype.toJSON = function (){\n\treturn this._array;\n};\n\nfunction ModelList(){ return List.apply(this,arguments) };\n\nsubclass$(ModelList,List);\nexports.ModelList = ModelList; // export class \n\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar List = require('../util/List').List;\n\nvar WidgetTypes = exports.WidgetTypes = {};\n\nfunction Widgets(){ return List.apply(this,arguments) };\n\nsubclass$(Widgets,List);\nexports.Widgets = Widgets; // export class \nWidgets.register = function (name,type){\n\tWidgetTypes[name] = type;\n\treturn type.TYPE = type.prototype.TYPE = name;\n};\n\nWidgets.type = function (name){\n\treturn WidgetTypes[name] || Widgets[name];\n};\n\n// seems weird to use this - should rather link widgets directly in protocol\nWidgets.prototype.create = function (type,data,event){\n\tif ((typeof type=='string'||type instanceof String)) { type = WidgetTypes[type] };\n\t(data.id == null) ? (data.id = this.getNextId()) : data.id;\n\tdata.type || (data.type = type.TYPE);\n\t\n\treturn new (type || WidgetTypes.widget)(this._owner,data,event); // do we really need to add it?\n};\n\nWidgets.prototype.load = function (params,event){\n\treturn this.get(params.id) || this.create(params.type,params,event);\n};\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nvar self = {};\nvar protocol$ = require('../protocol'), WIDGET = protocol$.WIDGET, SCON = protocol$.SCON, ACTION = protocol$.ACTION, KEYS = protocol$.KEYS;\n\n\nself.isEqual = function (a,b){\n\tif (a === b) {\n\t\treturn true;\n\t};\n\t\n\tif ((a instanceof Array) && (b instanceof Array)) {\n\t\tvar l = a.length;\n\t\tif (l == b.length) {\n\t\t\twhile (l > 0){\n\t\t\t\tif (a[--l] != b[l]) { return false };\n\t\t\t};\n\t\t\treturn true;\n\t\t};\n\t};\n\t\n\treturn false;\n};\n\n// TODO Finegrained overridable configuration\n// to be able to declare whether option should naturally\n// clear from locals when new value is same as stream value etc\n\nfunction Option(){ };\n\nOption.compare = function (a,b){\n\treturn a == b;\n};\n\nfunction WidgetOptions(widget){\n\tthis._widget = widget;\n\tthis._changes = {};\n\tthis._dirty = false;\n\tthis._v = 0;\n};\n\nexports.WidgetOptions = WidgetOptions; // export class \nWidgetOptions.prototype.widget = function(v){ return this._widget; }\nWidgetOptions.prototype.setWidget = function(v){ this._widget = v; return this; };\n\nWidgetOptions.prototype.raw = function (){\n\treturn this._widget._data;\n};\n\nWidgetOptions.prototype.schema = function (){\n\treturn this._widget._schema_ || (this._widget._schema_ = {});\n};\n\nWidgetOptions.prototype.version = function (){\n\treturn this._v;\n};\n\nWidgetOptions.prototype.api = function (){\n\treturn this._widget.api();\n};\n\nWidgetOptions.prototype.space = function (){\n\treturn this._widget.space();\n};\n\nWidgetOptions.prototype.touch = function (params){\n\tthis._v++;\n\t// unless we are syncing\n\tif (!this._widget.space().isSyncing()) {\n\t\tthis._widget && this._widget.optionsDidUpdate && this._widget.optionsDidUpdate(params);\n\t};\n\treturn this;\n};\n\nWidgetOptions.prototype.locals = function (){\n\treturn this._locals || (this._locals = this._widget.space().client().optionsForItem(this._widget));\n};\n\nWidgetOptions.prototype.get = function (key,locals){\n\tif(locals === undefined) locals = this._locals;\n\tif (locals == true || locals === undefined) { locals = this._locals };\n\tvar local = locals ? locals[key] : undefined;\n\tvar val = (local != undefined) ? local : this.raw()[key];\n\treturn this.deserializedValueFor(this.schema()[key],val);\n};\n\nWidgetOptions.prototype.reset = function (key){\n\tvar v_;\n\tif (this.locals()[key]) {\n\t\t(((v_ = this.locals()[key]),delete this.locals()[key], v_));\n\t\tthis.space().touch('locals');\n\t};\n\treturn this;\n};\n\nWidgetOptions.prototype.set = function (key,value){\n\t// support multiple\n\tvar v_;\n\tif (key instanceof Object) {\n\t\tfor (let v, i = 0, keys = Object.keys(key), l = keys.length, k; i < l; i++){\n\t\t\tk = keys[i];v = key[k];this.set(k,v);\n\t\t};\n\t\treturn this;\n\t};\n\t\n\tlet o = this.schema()[key] || {};\n\tlet type = o.type;\n\tlet equals = type && type.equals || Option.compare;\n\tvar plain = (value && value.valueOf) ? value.valueOf('option') : this.serializedValueFor(this.schema()[key],value);\n\tvar old = this.raw()[key];\n\tvar local = this._locals ? this._locals[key] : undefined;\n\tlet diff;\n\t\n\tif (!this.space().isEditing()) {\n\t\tlet override = o && o.overridable || o.override;\n\t\tif (override) {\n\t\t\tif (!equals(local,plain)) {\n\t\t\t\tthis.locals()[key] = plain;\n\t\t\t\tthis.touch();\n\t\t\t\tthis.space().touch('locals');\n\t\t\t\tif (override == 'pause' && this.space().isPlaying()) {\n\t\t\t\t\tthis.space().timeline().pause();\n\t\t\t\t};\n\t\t\t};\n\t\t\treturn this;\n\t\t};\n\t};\n\t\n\tif (local != undefined) {\n\t\t(((v_ = this.locals()[key]),delete this.locals()[key], v_));\n\t};\n\t\n\tif (equals(plain,old)) {\n\t\treturn this;\n\t};\n\t\n\tif (type && type.diff) {\n\t\tdiff = type.diff(old,plain);\n\t\tif (!diff) {\n\t\t\treturn this;\n\t\t};\n\t};\n\t\n\tlet akey = SCON.keyToRef(key);\n\tif (o.action && (plain instanceof Array)) {\n\t\tthis._widget.push_(o.action,plain);\n\t} else if (old && diff) {\n\t\tthis._widget.push_(ACTION.PATCH,[this.widget().__uid(),akey,diff]);\n\t} else {\n\t\tthis._widget.push_(ACTION.SET,[this.widget().__uid(),akey,plain]);\n\t};\n\treturn this;\n};\n\nWidgetOptions.prototype.proxy = function (key){\n\tvar self = this;\n\tself._proxies || (self._proxies = {});\n\treturn self._proxies[key] || (self._proxies[key] = {\n\t\tname: key,\n\t\tschema: self.schema()[key],\n\t\tvalue: function(v) { return self.get(key,v); },\n\t\tsetValue: function(v) { return self.set(key,v); }\n\t});\n};\n\nWidgetOptions.prototype.discardLocals = function (keys){\n\tvar v_;\n\tif (!this._locals) { return };\n\tvar dirty = {};\n\t\n\tfor (let o = this._locals, v, i = 0, keys1 = Object.keys(o), l = keys1.length, k; i < l; i++){\n\t\tk = keys1[i];v = o[k];if (keys && keys.indexOf(k) == -1) {\n\t\t\tcontinue;\n\t\t};\n\t\t\n\t\tif (v != this.raw()[k]) {\n\t\t\tdirty[k] = v;\n\t\t};\n\t\t(((v_ = this._locals[k]),delete this._locals[k], v_));\n\t};\n\t\n\tif (len$(Object.keys(dirty))) { this.touch(dirty) };\n\treturn this;\n\treturn this;\n};\n\nWidgetOptions.prototype.synced_ = function (){\n\tif (!this._dirty) { return this };\n\tthis._widget.optionsDidUpdate(this._changes);\n\tthis._changes = {};\n\tthis._dirty = false;\n\treturn this;\n};\n\nWidgetOptions.prototype.flush = function (){\n\treturn this;\n};\n\nWidgetOptions.prototype.serializedValueFor = function (schema,value){\n\t// console.log 'serialize value',value,schema\n\tif (schema && schema.type == 'widget') {\n\t\treturn (value && value.__uid) ? value.__uid() : value;\n\t} else {\n\t\treturn value;\n\t};\n};\n\nWidgetOptions.prototype.deserializedValueFor = function (schema,value){\n\t// if schema\n\t// \tif schema:type\n\t\n\tif (schema && schema.type == 'widget') {\n\t\treturn this._widget.space().__lookup(value);\n\t} else if (value === undefined && schema.default != undefined) {\n\t\treturn schema.default;\n\t} else {\n\t\treturn value;\n\t};\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n\nfunction Struct(raw){\n\tthis._v = 0;\n\tthis._data = raw;\n};\n\nexports.Struct = Struct; // export class \nStruct.diff = function (ref,struct,delta){\n\tif(delta === undefined) delta = true;\n\tif (ref == struct) {\n\t\treturn null;\n\t};\n\t\n\tif (!ref) {\n\t\t// if there is no reference, we return\n\t\t// a patch where everything is changed\n\t\treturn [0].concat(struct);\n\t};\n\t\n\t// the struct shouldnt include the mask - doesnt make sense\n\t\n\t\n\tvar diff = [0];\n\tvar i = 0;\n\tvar size = ref.length;\n\tvar structSize = struct.length;\n\t\n\tif (size < 1) {\n\t\treturn [0].concat(struct);\n\t};\n\t\n\tif (structSize > size) {\n\t\tsize = structSize;\n\t};\n\t\n\t// loop through the params and build\n\t// a diff describing them\n\twhile (i < size){\n\t\tlet a = ref[i];\n\t\tlet b = struct[i];\n\t\tif (a == b) { // same array counts as well?\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t};\n\t\tlet v = b;\n\t\t\n\t\tif (delta) {\n\t\t\tlet ta = typeof a;\n\t\t\tlet tb = typeof b;\n\t\t\tif (tb == ta && tb == 'number') {\n\t\t\t\tv = b - (a || 0);\n\t\t\t};\n\t\t};\n\t\t// add flag for this field nr\n\t\tdiff[0] = diff[0] | (1 << i);\n\t\tdiff.push(v);\n\t\ti++;\n\t};\n\t\n\treturn (diff[0] == 0) ? null : diff;\n};\n\nStruct.patch = function (struct,diff,delta){\n\tif(delta === undefined) delta = true;\n\tif (!diff) {\n\t\treturn struct;\n\t};\n\t\n\t// if there is nothing to patch\n\t// expect that the new struct is in diff\n\tif (!struct) {\n\t\treturn diff.slice(1);\n\t};\n\t\n\tvar mask = diff[0];\n\t\n\tif (mask == 0 && diff.length == 1) {\n\t\t// nothing is different\n\t\treturn struct;\n\t};\n\t\n\tvar i = 0;\n\tvar slot = 0;\n\tvar size = struct.length;\n\t\n\twhile ((i < size) || mask >= (1 << i)){\n\t\t// is it set here\n\t\tif (mask == 0 || mask & (1 << i)) {\n\t\t\tvar val = diff[++slot];\n\t\t\t\n\t\t\tif (delta) {\n\t\t\t\tvar typ = typeof val;\n\t\t\t\tvar ptyp = typeof struct[i];\n\t\t\t\tif (typ == ptyp && typ == 'number') {\n\t\t\t\t\t// NaN is not truthy - so here we are coercing NaN to 0\n\t\t\t\t\tval = (struct[i] || 0) + (val || 0);\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\tstruct[i] = val;\n\t\t};\n\t\ti++;\n\t};\n\treturn struct;\n};\n\nStruct.decode = function (ref,diff,delta){\n\tif(delta === undefined) delta = true;\n\treturn this.patch(ref.slice(),diff,delta);\n};\n\n// def self.encode relative, diff, delta = yes\n\n\nStruct.diffold = function (a,b){\n\tif (a == b) {\n\t\treturn null;\n\t};\n\t\n\tif (!a) {\n\t\treturn b;\n\t};\n\t\n\tvar diff = this.encode(a,b);\n\t\n\tif (diff.length > 1) {\n\t\treturn diff;\n\t};\n\t\n\treturn null;\n};\n\nStruct.desc = function (items){\n\tthis.prototype._map = this._map = items;\n\tthis._defaults = [];\n\t\n\tvar getter = function(i) {\n\t\treturn function() { return this._data[i]; };\n\t};\n\t\n\tfor (let i = 0, ary = iter$(items), len = ary.length; i < len; i++) {\n\t\tthis._defaults.push(0);\n\t\tthis.prototype[ary[i]] = getter(i);\n\t};\n\treturn this;\n};\n\nStruct.build = function (obj,arr){\n\tif(arr === undefined) arr = null;\n\tif (obj instanceof this) {\n\t\treturn obj;\n\t};\n\t\n\tif (obj instanceof Array) {\n\t\treturn new this(obj);\n\t} else if (obj instanceof Object) {\n\t\t// console.log \"update data!\",obj\n\t\treturn new this(this._defaults.slice()).set(obj);\n\t} else {\n\t\treturn new this(this._defaults.slice());\n\t};\n};\n\nStruct.fromObject = function (obj){\n\treturn this;\n};\n\nStruct.equals = function (a,b){\n\treturn a === b || JSON.stringify(a && a._data || a) == JSON.stringify(b && b._data || b);\n};\n\nStruct.prototype.wrap = function (raw){\n\tif (raw instanceof this.constructor) {\n\t\traw = raw._data;\n\t};\n\t\n\tif (this._data != raw) {\n\t\tthis._data = raw;\n\t\tthis._v++;\n\t};\n\t\n\treturn this;\n};\n\nStruct.prototype.clone = function (){\n\treturn new this.constructor(this._data.slice());\n};\n\nStruct.prototype.equals = function (other){\n\treturn this.constructor.equals(this,other);\n};\n\nStruct.prototype.set = function (key,val){\n\tif (key instanceof Object) {\n\t\tfor (let v, i = 0, keys = Object.keys(key), l = keys.length, k; i < l; i++){\n\t\t\tk = keys[i];v = key[k];this.set(k,v);\n\t\t};\n\t\treturn this;\n\t};\n\t\n\tlet idx = this._map.indexOf(key);\n\tif (idx >= 0) {\n\t\tthis._data[idx] = val;\n\t};\n\t\n\treturn this;\n};\n\nStruct.prototype.toObject = function (){\n\tvar obj = {};\n\tfor (let i = 0, items = iter$(this._map), len = items.length; i < len; i++) {\n\t\tobj[items[i]] = this._data[i];\n\t};\n\treturn obj;\n};\n\nStruct.prototype.toArray = function (){\n\treturn this._data;\n};\n\nStruct.prototype.valueOf = function (){\n\treturn this._data;\n};\n", "var self = {};\nvar protocol$ = require('../../protocol'), SCON = protocol$.SCON, KEYS = protocol$.KEYS, ACTION = protocol$.ACTION;\n\nexports.serializeReferences = self.serializeReferences = function (text){\n\tvar specialRe = /\\/\\*\u00A7SR\u00A7(\\w+)\u00A7START\\*\\/([^]*?)\\/\\*\u00A7SR\u00A7END\\*\\//gm;\n\treturn text.replace(specialRe,function(m,name,content) {\n\t\treturn (\"/*\u00A7SR\u00A7\" + name + \"\u00A7*/\");\n\t});\n};\n\nexports.deserializeReferences = self.deserializeReferences = function (text,map){\n\tvar specialRe = /\\/\\*\u00A7SR\u00A7(\\w+)\u00A7\\*\\//gm;\n\treturn text.replace(specialRe,function(match,ref) {\n\t\tvar val = (map instanceof Function) ? map(text,ref) : map[ref];\n\t\treturn (\"/*\u00A7SR\u00A7\" + ref + \"\u00A7START*/\") + val + \"/*\u00A7SR\u00A7END*/\";\n\t});\n};\n\n\nexports.wrapReferencedValue = self.wrapReferencedValue = function (ref,value,type){\n\tif(type === undefined) type = 'html';\n\tif (type == 'css') {\n\t\treturn (\"/*\u00A7SR\u00A7\" + ref + \"\u00A7START*/\" + value + \"/*\u00A7SR\u00A7END*/\");\n\t} else if (type == 'html') {\n\t\treturn (\"<!--\u00A7SR\u00A7\" + ref + \"\u00A7START-->\" + value + \"<!--\u00A7SR\u00A7END-->\");\n\t} else {\n\t\treturn '';\n\t};\n};\n\nexports.serializeAttributes = self.serializeAttributes = function (node){\n\tvar attrs = [];\n\t\n\tArray.from(node.attributes).forEach(function(attr) {\n\t\tlet key = SCON.keyToRef(attr.name);\n\t\tattrs.push(key);\n\t\treturn attrs.push(attr.value || null);\n\t});\n\t\n\tattrs.RAW = true;\n\treturn attrs;\n};\n\n\nexports.serializeNode = self.serializeNode = function (doc,node,force,excludeSelf){\n\tvar item;\n\tvar prev;\n\t\n\tvar walker = doc.createNodeIterator(node,NodeFilter.SHOW_TEXT,null);\n\twhile (item = walker.nextNode()){\n\t\tvar adjacent = prev && item.previousSibling == prev;\n\t\tvar empty = item.textContent == \"\";\n\t\t\n\t\tif (adjacent || empty) {\n\t\t\tif (!force) { return self.serializeNode(doc,node.cloneNode(true),true,excludeSelf) };\n\t\t\t\n\t\t\tif (empty) {\n\t\t\t\t// rather replace - no?\n\t\t\t\titem.parentNode.insertBefore(doc.createComment('\u00A7S\u00A7B'),item);\n\t\t\t} else if (adjacent) {\n\t\t\t\titem.parentNode.insertBefore(doc.createComment('\u00A7S\u00A7'),item);\n\t\t\t};\n\t\t};\n\t\t\n\t\tprev = item;\n\t};\n\t\n\tvar text = excludeSelf ? node.innerHTML : node.outerHTML;\n\tvar ignoreRe = /\\/\\*SCRIMBA:IGNORE:START\\*\\/([^]*?)\\/\\*SCRIMBA:IGNORE:END\\*\\//gm;\n\ttext = text.replace(ignoreRe,\" \");\n\ttext = self.serializeReferences(text);\n\treturn text;\n};\n\n\nexports.patchString = self.patchString = function (str,diff){\n\tif (diff instanceof Array) {\n\t\t// diffString returns an empty array when there are no changes\n\t\tif (diff.length == 0) { return str };\n\t\treturn str.substr(0,diff[0]) + diff[2] + str.slice(diff[1]);\n\t} else {\n\t\treturn diff;\n\t};\n};\n\nexports.diffString = self.diffString = function (str0,str1){\n\tvar i = 0;\n\tvar l0 = str0.length;\n\tvar l1 = str1.length;\n\t\n\tif (l1.length < 6) {\n\t\treturn str1;\n\t};\n\t\n\tvar minLen = Math.min(l0,l1);\n\tvar maxLen = Math.max(l0,l1);\n\tvar l = maxLen;\n\t\n\tvar left = 0;\n\t// find first part that is different\n\twhile (i < minLen){\n\t\tvar chr0 = str0[i];\n\t\tvar chr1 = str1[i];\n\t\ti++;\n\t\t\n\t\tif (chr0 == chr1) {\n\t\t\tleft++;\n\t\t} else {\n\t\t\tbreak;\n\t\t};\n\t};\n\t\n\t// equal all the way\n\tif (left == i) {\n\t\t// cut it\n\t\tif (l0 > l1) {\n\t\t\treturn [left,l0,''];\n\t\t} else if (l1 > l0) {\n\t\t\treturn [left,left,str1.slice(left)];\n\t\t};\n\t\treturn [];\n\t};\n\t\n\t// go from the end -- look at first part that is the same\n\twhile (l0 >= left && l1 >= left){\n\t\tchr0 = str0[--l0];\n\t\tchr1 = str1[--l1];\n\t\t\n\t\tif (chr0 != chr1) {\n\t\t\tbreak;\n\t\t};\n\t};\n\t\n\t// right = Math.max(l0 + 1,left)\n\tvar ins = str1.slice(left,l1 + 1);\n\treturn [left,l0 + 1,ins];\n};\n", "// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n var res = '';\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length)\n code = path.charCodeAt(i);\n else if (code === 47 /*/*/)\n break;\n else\n code = 47 /*/*/;\n if (code === 47 /*/*/) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0)\n res += '/..';\n else\n res = '..';\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 /*.*/ && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\n\nfunction _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n if (!dir) {\n return base;\n }\n if (dir === pathObject.root) {\n return dir + base;\n }\n return dir + sep + base;\n}\n\nvar posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = '';\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0)\n path = arguments[i];\n else {\n if (cwd === undefined)\n cwd = process.cwd();\n path = cwd;\n }\n\n assertPath(path);\n\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0)\n return '/' + resolvedPath;\n else\n return '/';\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return '.';\n }\n },\n\n normalize: function normalize(path) {\n assertPath(path);\n\n if (path.length === 0) return '.';\n\n var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n // Normalize the path\n path = normalizeStringPosix(path, !isAbsolute);\n\n if (path.length === 0 && !isAbsolute) path = '.';\n if (path.length > 0 && trailingSeparator) path += '/';\n\n if (isAbsolute) return '/' + path;\n return path;\n },\n\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n },\n\n join: function join() {\n if (arguments.length === 0)\n return '.';\n var joined;\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += '/' + arg;\n }\n }\n if (joined === undefined)\n return '.';\n return posix.normalize(joined);\n },\n\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n\n if (from === to) return '';\n\n from = posix.resolve(from);\n to = posix.resolve(to);\n\n if (from === to) return '';\n\n // Trim any leading backslashes\n var fromStart = 1;\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47 /*/*/)\n break;\n }\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart;\n\n // Trim any leading backslashes\n var toStart = 1;\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47 /*/*/)\n break;\n }\n var toEnd = to.length;\n var toLen = toEnd - toStart;\n\n // Compare paths to find the longest common path from root\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n break;\n }\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode)\n break;\n else if (fromCode === 47 /*/*/)\n lastCommonSep = i;\n }\n\n var out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n if (out.length === 0)\n out += '..';\n else\n out += '/..';\n }\n }\n\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0)\n return out + to.slice(toStart + lastCommonSep);\n else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47 /*/*/)\n ++toStart;\n return to.slice(toStart);\n }\n },\n\n _makeLong: function _makeLong(path) {\n return path;\n },\n\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47 /*/*/;\n var end = -1;\n var matchedSlash = true;\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n if (hasRoot && end === 1) return '//';\n return path.slice(0, end);\n },\n\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n assertPath(path);\n\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return '';\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n }\n },\n\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n return path.slice(startDot, end);\n },\n\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n }\n return _format('/', pathObject);\n },\n\n parse: function parse(path) {\n assertPath(path);\n\n var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47 /*/*/;\n var start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n } else {\n start = 0;\n }\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n var preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n if (code === 47 /*/*/) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46 /*.*/) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;", "var self = {};\nvar helpers = require('./helpers');\n\n\n// var csscolorfunc = require 'css-color-function'\nvar csscolorcache = {};\n\nself.rewriteColor = function (text){\n\tlet start = 0;\n\tlet index = 0;\n\tlet len = text.length;\n\tlet chr;\n\tlet replaces = [];\n\tlet k = 0;\n\twhile (true && k < 1000){\n\t\tk++;\n\t\tindex = start = text.indexOf(\"color(\",index);\n\t\t\n\t\tlet depth = 1;\n\t\tif (index == -1) { break; };\n\t\t\n\t\tindex += 6;\n\t\t\n\t\t// find the closing bracket\n\t\twhile (depth > 0 && index < len){\n\t\t\tif (text[index] == '(') {\n\t\t\t\tdepth++;\n\t\t\t} else if (text[index] == ')') {\n\t\t\t\tdepth--;\n\t\t\t};\n\t\t\tindex++;\n\t\t};\n\t\t\n\t\treplaces.unshift([start,index - start]);\n\t};\n\t\n\t// console.log replaces\n\tfor (let i = 0, len_ = replaces.length, item; i < len_; i++) {\n\t\titem = replaces[i];\n\t\tlet val = text.substr(item[0],item[1]);\n\t\tlet conv = csscolorcache[val] || (csscolorcache[val] = self.csscolorfunc().convert(val));\n\t\ttext = text.replace(val,conv);\n\t};\n\t\n\treturn text;\n};\n\nexports.process = self.process = function (text,o){\n\t\n\tif(o === undefined) o = {};\n\tif (o.rewritePseudoStates) {\n\t\ttext = text.replace(/:(hover|focus|active)\\b/g,function(m,state) { return (\".__\" + state + \"/**/\"); });\n\t};\n\t\n\treturn text;\n};\n\nexports.toPlayer = self.toPlayer = function (text){\n\treturn text.replace(/:(hover|focus|active)\\b/g,function(m,state) { return (\".__\" + state + \"/**/\"); });\n};\n\nexports.toRunner = self.toRunner = function (text){\n\treturn text.replace(/\\.__(hover|focus|active)\\/\\*\\*\\//g,function(m,state) { return (\":\" + state); });\n};\n\nexports.patch = self.patch = function (prev,diff){\n\t// window.DS = diffString\n\t// window.DS2 = diffString2\n\t// window.PS = patchString\n\t\n\tif (diff instanceof Array) {\n\t\tlet old = self.toRunner(prev);\n\t\tlet before = prev;\n\t\t// console.log 'patching',prev,[old.substr(diff[0],diff[1])]\n\t\tdiff = helpers.patchString(old,diff);\n\t\t// console.log 'patched!',diff,toPlayer(diff) == before\n\t};\n\treturn self.toPlayer(diff);\n};\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _5 = Imba.createTagList, _2 = Imba.createTagMap, _4 = Imba.createTagLoopResult, _1 = Imba.createElementFactory(/*SCOPEID*/), _3 = Imba.createTagScope(/*SCOPEID*/);\n\n\nvar protocol$ = require('../../protocol'), ACTION = protocol$.ACTION, DOM = protocol$.DOM, SCON = protocol$.SCON, KEYS = protocol$.KEYS;\nvar M = DOM.MUTS;\n\nvar helpers = require('./helpers');\n\nvar Container = require('../../core/Container').Container;\nvar path = require('../../util/path');\nvar styleProcessor = require('./styleProcessor');\n\nvar parentForNodeType = {\n\thead: 'html',\n\tbody: 'html',\n\tthead: 'table',\n\ttbody: 'table',\n\ttr: 'tbody',\n\ttd: 'tr',\n\tth: 'td',\n\toption: 'select'\n};\n\nvar baseCSS = require('./normalize.txt');\n\nvar LogAttributes = _3.defineTag('LogAttributes', function(tag){\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, $ = this.$;\n\t\tvar pairs = [];\n\t\t\n\t\tfor (let i = 0, items = iter$(this.data()), len = items.length, val; i < len; i++) {\n\t\t\tval = items[i];\n\t\t\tif (!(i % 2)) { continue; };\n\t\t\tvar pair = [SCON.refToKey(this.data()[i - 1])];\n\t\t\tif (val != null) {\n\t\t\t\tpair.push(val);\n\t\t\t};\n\t\t\tpairs.push(pair);\n\t\t};\n\t\t\n\t\tvar count = len$(pairs);\n\t\t\n\t\treturn this.$open(0).setChildren(\n\t\t\t(function tagLoop($0,$1,$2,$$) {\n\t\t\t\tvar _t2;\n\t\t\t\tfor (let i = 0, len = pairs.length, pair; i < len; i++) {\n\t\t\t\t\tpair = pairs[i];\n\t\t\t\t\t$$.push(' ');\n\t\t\t\t\t$$.push(($0[i] || _1('span',$0,i).flag('name')).setContent(pair[0],3));\n\t\t\t\t\tif (pair[1]) {\n\t\t\t\t\t\t$$.push(($1[i] || _1('u',$1,i).setText('=')));\n\t\t\t\t\t\t$$.push(($2[i] || _1(LogVal,$2,i)).bindData(pair,1).end());\n\t\t\t\t\t};\n\t\t\t\t};return $$;\n\t\t\t})($[0] || _2($,0),$[1] || _2($,1),$[2] || _2($,2),[])\n\t\t,3).synced();\n\t};\n});\n\nvar LogVal = _3.defineTag('LogVal', function(tag){\n\t\n\ttag.prototype.type = function (){\n\t\tvar data_, $1;\n\t\tif (this.data() instanceof Array) {\n\t\t\treturn KEYS[this.data()[0]];\n\t\t} else if ((typeof (data_ = this.data())=='string'||data_ instanceof String)) {\n\t\t\treturn 'string';\n\t\t} else if ((typeof ($1 = this.data())=='number'||$1 instanceof Number)) {\n\t\t\treturn 'number';\n\t\t} else if (this.data() === null) {\n\t\t\treturn 'null';\n\t\t} else if (this.data() === undefined) {\n\t\t\treturn 'undefined';\n\t\t} else if (this.data() === true || this.data() === false) {\n\t\t\treturn 'bool';\n\t\t} else if (this.data() instanceof Array) {\n\t\t\treturn 'array';\n\t\t} else if (this.data() instanceof Object) {\n\t\t\treturn 'object';\n\t\t} else {\n\t\t\treturn 'value';\n\t\t};\n\t};\n\t\n\ttag.prototype.errorPosition = function (data){\n\t\ttry {\n\t\t\tvar fstFrame = data[3][2];\n\t\t} catch (e) { };\n\t\treturn fstFrame ? ((\" (\" + (fstFrame[2]) + \":\" + (fstFrame[3]) + \")\")) : \"\";\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\tvar type = this.type();\n\t\tvar data = this.data();\n\t\tvar chars = 0;\n\t\t\n\t\treturn this.$open(0).setFlag(-1,\"tok-\" + type).setChildren(\n\t\t\t(type == 'string') ? Imba.static([\n\t\t\t\t($[0] || _1('u',$,0,this).setText('\"')),\n\t\t\t\tdata,\n\t\t\t\t($[1] || _1('u',$,1,this).setText('\"'))\n\t\t\t],1,1) : ((type == 'array') ? Imba.static([\n\t\t\t\t($[2] || _1('u',$,2,this).setText('[')),\n\t\t\t\t(function tagLoop($0,$1,$$) {\n\t\t\t\t\tvar _t21;\n\t\t\t\t\tfor (let i = 0, items = iter$(data), len = items.length; i < len; i++) {\n\t\t\t\t\t\tif (i <= 1) { continue; };\n\t\t\t\t\t\tif (i > 2) {\n\t\t\t\t\t\t\t$$.push(($0[i] || _1('u',$0,i).setText(', ')));\n\t\t\t\t\t\t};\n\t\t\t\t\t\t$$.push(($1[i] || _1(LogVal,$1,i)).setData(items[i]).end());\n\t\t\t\t\t};return $$;\n\t\t\t\t})($[3] || _2($,3),$[4] || _2($,4),_4()),\n\t\t\t\t(data.length < data[1]) ? Imba.static([\n\t\t\t\t\t($[5] || _1('u',$,5,this).setText(', ')),\n\t\t\t\t\t($[6] || _1('u',$,6,this).flag('more').setText('...'))\n\t\t\t\t],2,2) : void(0),\n\t\t\t\t($[7] || _1('u',$,7,this).setText(']'))\n\t\t\t],1,3) : ((type == 'function') ? (\n\t\t\t\tdata[1]\n\t\t\t) : ((type == 'element') ? Imba.static([\n\t\t\t\t($[8] || _1('u',$,8,this).setText('<')),\n\t\t\t\t($[9] || _1('span',$,9,this).flag('name')).setContent(SCON.refToKey(data[1]),3),\n\t\t\t\t($[10] || _1(LogAttributes,$,10,this)).bindData(data,2).end(),\n\t\t\t\t($[11] || _1('u',$,11,this).setText('>'))\n\t\t\t],2,4) : ((type == 'error') ? Imba.static([\n\t\t\t\t($[12] || _1('span',$,12,this).flag('category')).setContent(data[1] + ': ',3),\n\t\t\t\t($[13] || _1('span',$,13,this).flag('message')).setContent(data[2],3),\n\t\t\t\t($[14] || _1('span',$,14,this)).setContent(this.errorPosition(data),3)\n\t\t\t],2,5) : ((type == 'instance' && data[2]) ? Imba.static([\n\t\t\t\t($[15] || _1('span',$,15,this).flag('name')).setContent(data[1],3),\n\t\t\t\t($[16] || _1('u',$,16,this).setText(' {')),\n\t\t\t\t(function tagLoop($0,$1,$$) {\n\t\t\t\t\tvar _t21, _t3, t0;\n\t\t\t\t\tfor (let i = 0, items = iter$(Object.keys(data[2])), len = items.length, key; i < len; i++) {\n\t\t\t\t\t\tkey = items[i];\n\t\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\t\t$$.push(($0[i] || _1('u',$0,i).flag('delim').setText(', ')));\n\t\t\t\t\t\t};\n\t\t\t\t\t\t$$.push((t0 = $1[i] || (t0=_1('span',$1,i)).flag('kv').setContent([\n\t\t\t\t\t\t\t_1('span',t0.$,'A',t0).flag('tok-key'),\n\t\t\t\t\t\t\t_1('u',t0.$,'B',t0).setText(': '),\n\t\t\t\t\t\t\t_1(LogVal,t0.$,'C',t0).flag('value')\n\t\t\t\t\t\t],2)).end((\n\t\t\t\t\t\t\tt0.$.A.setContent(key,3),\n\t\t\t\t\t\t\tt0.$.C.bindData(data[2],key).end()\n\t\t\t\t\t\t,true)));\n\t\t\t\t\t};return $$;\n\t\t\t\t})($[17] || _2($,17),$[18] || _2($,18),_4()),\n\t\t\t\t\n\t\t\t\t($[19] || _1('u',$,19,this).setText('}'))\n\t\t\t],1,6) : ((type == 'object') ? Imba.static([\n\t\t\t\t($[20] || _1('u',$,20,this).setText('{')),\n\t\t\t\t(function tagLoop($0,$1,$$) {\n\t\t\t\t\tvar _t21, _t3, t0;\n\t\t\t\t\tfor (let i = 0, items = iter$(Object.keys(data)), len = items.length, key; i < len; i++) {\n\t\t\t\t\t\tkey = items[i];\n\t\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\t\t$$.push(($0[i] || _1('u',$0,i).flag('delim').setText(', ')));\n\t\t\t\t\t\t};\n\t\t\t\t\t\t$$.push((t0 = $1[i] || (t0=_1('span',$1,i)).flag('kv').setContent([\n\t\t\t\t\t\t\t_1('span',t0.$,'A',t0).flag('tok-key'),\n\t\t\t\t\t\t\t_1('u',t0.$,'B',t0).setText(': '),\n\t\t\t\t\t\t\t_1(LogVal,t0.$,'C',t0).flag('value')\n\t\t\t\t\t\t],2)).end((\n\t\t\t\t\t\t\tt0.$.A.setContent(key,3),\n\t\t\t\t\t\t\tt0.$.C.bindData(data,key).end()\n\t\t\t\t\t\t,true)));\n\t\t\t\t\t};return $$;\n\t\t\t\t})($[21] || _2($,21),$[22] || _2($,22),_4()),\n\t\t\t\t\n\t\t\t\t($[23] || _1('u',$,23,this).setText('}'))\n\t\t\t],1,7) : ((type == 'null') ? (\n\t\t\t\t'null'\n\t\t\t) : ((type == 'udef') ? (\n\t\t\t\t'undefined'\n\t\t\t) : ((type == 'bool') ? (\n\t\t\t\tdata ? 'true' : 'false'\n\t\t\t) : ((data instanceof Array) ? (\n\t\t\t\tdata[1]\n\t\t\t) : (\n\t\t\t\tdata\n\t\t\t)))))))))))\n\t\t,3).synced();\n\t};\n});\n\nvar LogEntry = _3.defineTag('LogEntry', function(tag){\n\t\n\ttag.prototype.__data = {watch: 'dataDidSet',name: 'data'};\n\ttag.prototype.data = function(v){ return this._data; }\n\ttag.prototype.setData = function(v){\n\t\tvar a = this.data();\n\t\tif(v != a) { this._data = v; }\n\t\tif(v != a) { this.dataDidSet && this.dataDidSet(v,a,this.__data) }\n\t\treturn this;\n\t};\n\t\n\tlet icons = {\n\t\twarn: \"\u25B2\",\n\t\terror: \"!\"\n\t};\n\t\n\ttag.prototype.dataDidSet = function (){\n\t\treturn this._dirty = true;\n\t};\n\t\n\ttag.prototype.type = function (){\n\t\treturn this.data()[0];\n\t};\n\ttag.prototype.items = function (){\n\t\treturn this.data()[1];\n\t};\n\ttag.prototype.badge = function (){\n\t\treturn this.data()[2];\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, self = this;\n\t\tif (!self._dirty) { return };\n\t\tself._dirty = false;\n\t\t\n\t\tlet typ = KEYS[self.type()];\n\t\t// drop .scon\n\t\tself.$open(0).flag('scon').setFlag(-1,(\"typ-\" + typ)).setChildren([\n\t\t\t($[0] || _1('i',$,0,self)).setContent(icons[typ] || '\u203A',3),\n\t\t\t(self.badge() > 1) ? (\n\t\t\t\t($[1] || _1('div',$,1,self).flag('badge').setContent($[2] || _1('span',$,2,1).flag('num'),2)).end((\n\t\t\t\t\t$[2].setContent(self.badge(),3)\n\t\t\t\t,true))\n\t\t\t) : void(0),\n\t\t\t(function tagLoop($0,$1,$$) {\n\t\t\t\tvar _t21;\n\t\t\t\tfor (let i = 0, items = iter$(self.items()), len = items.length; i < len; i++) {\n\t\t\t\t\t$$.push(($0[i] || _1(LogVal,$0,i)).setData(items[i]).end());\n\t\t\t\t\t$$.push(($1[i] || _1('u',$1,i).setText(\",\")));\n\t\t\t\t};return $$;\n\t\t\t})($[3] || _5($,3),$[4] || _5($,4),_4())\n\t\t],1).synced();\n\t\treturn self;\n\t};\n})\nexports.LogEntry = LogEntry;\n\nvar Logs = _3.defineTag('Logs', function(tag){\n\t\n\ttag.prototype.build = function (){\n\t\treturn this._dirty = true;\n\t};\n\t\n\ttag.prototype.push = function (item){\n\t\tthis._dirty = true;\n\t\treturn this._data.push(item);\n\t};\n\t\n\ttag.prototype.pop = function (){\n\t\tthis._dirty = true;\n\t\treturn this._data.pop();\n\t};\n\t\n\ttag.prototype.len = function (){\n\t\treturn this._data.length;\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, self = this, $ = this.$;\n\t\tif (!self._dirty) { return };\n\t\tself._dirty = false;\n\t\t\n\t\treturn self.$open(0).setChildren(\n\t\t\t(function tagLoop($0) {\n\t\t\t\tvar _t2;\n\t\t\t\tfor (let i = 0, items = iter$(self.data()), len = $0.taglen = items.length; i < len; i++) {\n\t\t\t\t\t($0[i] || _1(LogEntry,$0,i)).setData(items[i]).end();\n\t\t\t\t};return $0;\n\t\t\t})($[0] || _5($,0))\n\t\t,4).synced();\n\t};\n});\n\n\nvar PlayerPageCounter = 1;\n\nfunction PlayerPage(initiator,o){\n\tvar _t1, implementation_, $1;\n\tif(o === undefined) o = {};\n\tif (true) {\n\t\tthis._initiator = initiator;\n\t\tthis._logs = (_1(Logs)).setData(o.logs || []).end();\n\t\tthis._document = (implementation_ = ($1 = document) && $1.implementation) && implementation_.createHTMLDocument && implementation_.createHTMLDocument(\"Player\");\n\t\t// @snapshot = initiator.space.toRunStaticSnapshot\n\t\tthis._pageNumber = PlayerPageCounter++;\n\t\t\n\t\tif (this._document) {\n\t\t\tthis._html = this._document.documentElement;\n\t\t} else {\n\t\t\tthis._document = document;\n\t\t\tthis._html = document.createElement('html');\n\t\t};\n\t\t\n\t\tthis._root = this._html;\n\t\tthis._base = this._document.createElement('base');\n\t\tthis._ref;\n\t\t\n\t\tlet base = this.container().origin() + (o.url || '/').split(\"/\").slice(0,-1).join(\"/\") + \"/\";\n\t\tthis.setBaseURI(base);\n\t\t\n\t\tthis._base.href = base;\n\t\tthis._base.dataset.scrimbaInternal = true;\n\t\t\n\t\tthis._options = o;\n\t\tthis._styleNodes = [];\n\t\tthis._nodes = [];\n\t\tthis._currentStyleSheets = {};\n\t\t\n\t\tif (o.html) {\n\t\t\tthis.applyInitialState(o.html);\n\t\t\tthis.setLoadAction(true);\n\t\t\tthis.setLoaded(true);\n\t\t};\n\t\tthis.setStatus(o.status || 0);\n\t};\n\tthis;\n};\n\nexports.PlayerPage = PlayerPage; // export class \nPlayerPage.prototype.html = function(v){ return this._html; }\nPlayerPage.prototype.setHtml = function(v){ this._html = v; return this; };\n\nPlayerPage.prototype.__selection = {watch: 'selectionDidSet',name: 'selection'};\nPlayerPage.prototype.selection = function(v){ return this._selection; }\nPlayerPage.prototype.setSelection = function(v){\n\tvar a = this.selection();\n\tif(v != a) { this._selection = v; }\n\tif(v != a) { this.selectionDidSet && this.selectionDidSet(v,a,this.__selection) }\n\treturn this;\n};\nPlayerPage.prototype.focusNode = function(v){ return this._focusNode; }\nPlayerPage.prototype.setFocusNode = function(v){ this._focusNode = v; return this; };\nPlayerPage.prototype.hoverNode = function(v){ return this._hoverNode; }\nPlayerPage.prototype.setHoverNode = function(v){ this._hoverNode = v; return this; };\nPlayerPage.prototype.activeNode = function(v){ return this._activeNode; }\nPlayerPage.prototype.setActiveNode = function(v){ this._activeNode = v; return this; };\nPlayerPage.prototype.__baseURI = {watch: 'baseURIDidSet',name: 'baseURI'};\nPlayerPage.prototype.baseURI = function(v){ return this._baseURI; }\nPlayerPage.prototype.setBaseURI = function(v){\n\tvar a = this.baseURI();\n\tif(v != a) { this._baseURI = v; }\n\tif(v != a) { this.baseURIDidSet && this.baseURIDidSet(v,a,this.__baseURI) }\n\treturn this;\n};\n\nPlayerPage.prototype.logs = function(v){ return this._logs; }\nPlayerPage.prototype.setLogs = function(v){ this._logs = v; return this; };\n\nPlayerPage.prototype.requestAction = function(v){ return this._requestAction; }\nPlayerPage.prototype.setRequestAction = function(v){ this._requestAction = v; return this; };\nPlayerPage.prototype.loadAction = function(v){ return this._loadAction; }\nPlayerPage.prototype.setLoadAction = function(v){ this._loadAction = v; return this; };\nPlayerPage.prototype.loadedAction = function(v){ return this._loadedAction; }\nPlayerPage.prototype.setLoadedAction = function(v){ this._loadedAction = v; return this; };\n\nPlayerPage.prototype.location = function(v){ return this._location; }\nPlayerPage.prototype.setLocation = function(v){ this._location = v; return this; };\nPlayerPage.prototype.status = function(v){ return this._status; }\nPlayerPage.prototype.setStatus = function(v){ this._status = v; return this; };\nPlayerPage.prototype.loaded = function(v){ return this._loaded; }\nPlayerPage.prototype.setLoaded = function(v){ this._loaded = v; return this; };\nPlayerPage.prototype.loading = function(v){ return this._loading; }\nPlayerPage.prototype.setLoading = function(v){ this._loading = v; return this; };\nPlayerPage.prototype.tracker = function(v){ return this._tracker; }\nPlayerPage.prototype.setTracker = function(v){ this._tracker = v; return this; };\nPlayerPage.prototype.__tracking = {'default': true,name: 'tracking'};\nPlayerPage.prototype.tracking = function(v){ return this._tracking; }\nPlayerPage.prototype.setTracking = function(v){ this._tracking = v; return this; }\nPlayerPage.prototype._tracking = true;\nPlayerPage.prototype.cancelled = function(v){ return this._cancelled; }\nPlayerPage.prototype.setCancelled = function(v){ this._cancelled = v; return this; };\nPlayerPage.prototype.__errored = {'default': false,name: 'errored'};\nPlayerPage.prototype.errored = function(v){ return this._errored; }\nPlayerPage.prototype.setErrored = function(v){ this._errored = v; return this; }\nPlayerPage.prototype._errored = false;\nPlayerPage.prototype.snapshot = function(v){ return this._snapshot; }\nPlayerPage.prototype.setSnapshot = function(v){ this._snapshot = v; return this; };\nPlayerPage.prototype.history = function(v){ return this._history; }\nPlayerPage.prototype.setHistory = function(v){ this._history = v; return this; };\n\nPlayerPage.toOptionValue = function (value){\n\treturn value;\n};\n\nPlayerPage.fromOptionValue = function (value,widget){\n\tif (value instanceof PlayerPage) {\n\t\treturn value;\n\t} else if (value instanceof Object) {\n\t\tif (value._RICH) {\n\t\t\treturn value._RICH;\n\t\t} else {\n\t\t\tvar rich = new this(widget,value);\n\t\t\tObject.defineProperty(this,'_RICH',{value: rich,enumerable: false,configurable: true});\n\t\t\treturn rich;\n\t\t};\n\t};\n};\n\nPlayerPage.prototype.container = function (){\n\treturn Container.instance();\n};\n\nPlayerPage.prototype.branch = function (){\n\treturn this._initiator && this._initiator.branch && this._initiator.branch();\n};\n\nPlayerPage.prototype.browser = function (){\n\treturn this._initiator && this._initiator.browser && this._initiator.browser();\n};\n\nPlayerPage.prototype.isLoading = function (){\n\treturn !(this.loaded());\n};\n\nPlayerPage.prototype.toJSON = function (){\n\t// we want to be able to serialize the data from client and ignore the style inside live nodes\n\tvar json = {\n\t\thtml: [this.serializeNode(this.html(),false,true),this.serializeAttributes(this.html())],\n\t\tlogs: this.logs().data(),\n\t\tstatus: this.status(),\n\t\turl: this._options.url\n\t};\n\t\n\treturn json;\n};\n\nPlayerPage.prototype.doc = function (){\n\treturn this._document;\n};\n\nPlayerPage.prototype.selectionDidSet = function (op,old){\n\tthis._selectionDidChange = true;\n\tif (op) {\n\t\tvar anchor = op.NODE;\n\t\treturn op.ENDNODE || (op.ENDNODE = op[3] ? this.nodeForPath(op[3]) : anchor);\n\t};\n};\n\nPlayerPage.prototype.render = function (window){\n\tvar document = window.document;\n\tvar docEl = document.documentElement;\n\t\n\tif (docEl != this._html) {\n\t\tthis._document = document;\n\t\tif (docEl) {\n\t\t\tdocument.replaceChild(this._html,docEl);\n\t\t} else {\n\t\t\tdocument.appendChild(this._html);\n\t\t};\n\t};\n\t\n\t// should rather check syncedFocusNode vs prevFocusNode\n\tif (this._focusNodeSynced != this._focusNode) {\n\t\tvar old = this._focusNodeSynced;\n\t\tvar new$ = this._focusNode;\n\t\tif (old && old.classList) {\n\t\t\told.classList.remove('__focus');\n\t\t};\n\t\tif (new$ && new$.classList) {\n\t\t\tnew$.classList.add('__focus');\n\t\t};\n\t\tthis._focusNodeSynced = this._focusNode;\n\t};\n\t\n\tif (this._hoverNodeSynced != this._hoverNode) {\n\t\tthis.refreshPseudoClass('__hover',this._hoverNode,this._hoverNodeSynced);\n\t\tthis._hoverNodeSynced = this._hoverNode;\n\t};\n\t\n\tif (this._activeNodeSynced != this._activeNode) {\n\t\tthis.refreshPseudoClass('__active',this._activeNode,this._activeNodeSynced);\n\t\tthis._activeNodeSynced = this._activeNode;\n\t};\n\t\n\tif (this._selectionDidChange) {\n\t\tthis.applySelection(window);\n\t\tthis._selectionDidChange = false;\n\t};\n\t\n\treturn this;\n};\n\nPlayerPage.prototype.detach = function (){\n\treturn this;\n};\n\nPlayerPage.prototype.indexNode = function (node){\n\tif (!node.hasChildNodes()) {\n\t\tlet len = this._nodes.push(node);\n\t\tnode.SCRIMBA_INDEX = len - 1;\n\t\treturn this;\n\t};\n\t\n\tvar show = NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_COMMENT;\n\tvar walker = this.doc().createNodeIterator(node,show,null);\n\tvar item;\n\twhile (item = walker.nextNode()){\n\t\tif (item.nodeName == 'BASE' && item.dataset.scrimbaInternal) { continue; };\n\t\titem.SCRIMBA_INDEX = this._nodes.push(item) - 1;\n\t};\n\t\n\treturn this;\n};\n\nPlayerPage.prototype.reindexNodes = function (){\n\tthis._nodes = [];\n\tthis.indexNode(this._root);\n\treturn this;\n};\n\nPlayerPage.prototype.nodeForPath = function (path){\n\treturn this._nodes ? this._nodes[path] : null;\n};\n\nPlayerPage.prototype.serializeAttributes = function (node){\n\tvar attrs = [];\n\t\n\tArray.from(node.attributes).forEach(function(attr) {\n\t\tlet key = SCON.keyToRef(attr.name);\n\t\tattrs.push(key);\n\t\treturn attrs.push(attr.value || null);\n\t});\n\t\n\treturn attrs;\n};\n\n// copied from Recorder. Should split out probably, or create a recorder for this\nPlayerPage.prototype.serializeNode = function (node,force,excludeSelf){\n\treturn helpers.serializeNode(this.doc(),node,force,excludeSelf);\n};\n\nPlayerPage.prototype.deserializeNode = function (value){\n\tif ((typeof value=='number'||value instanceof Number)) {\n\t\treturn this.nodeForPath(value);\n\t} else {\n\t\treturn this.nodeForHTML(value);\n\t};\n};\n\nPlayerPage.prototype.nodeForHTML = function (html){\n\tif (html instanceof Array) {\n\t\t// really?\n\t\thtml = \"<div>placeholder</div>\";\n\t} else if (html.text) {\n\t\treturn this.doc().createTextNode(html.text);\n\t} else if (html.comment) {\n\t\treturn this.doc().createComment(html.comment);\n\t} else if (html.TYPE == 8) {\n\t\treturn this.doc().createComment(html.value);\n\t};\n\t\n\tvar type = html.slice(1).match(/^\\w+/)[0];\n\tvar wrap = this.doc().createElement(parentForNodeType[type] || 'div');\n\twrap.innerHTML = html;\n\tvar ele = (type == 'body') ? wrap.lastElementChild : wrap.firstElementChild;\n\treturn ele;\n};\n\nPlayerPage.prototype.cleanTextSplitters = function (node){\n\t\n\tvar walker = this.doc().createNodeIterator(node,NodeFilter.SHOW_COMMENT,null);\n\tvar item;\n\twhile (item = walker.nextNode()){\n\t\tif (item.textContent == '\u00A7S\u00A7') {\n\t\t\titem.parentNode.removeChild(item);\n\t\t} else if (item.textContent == '\u00A7S\u00A7B') {\n\t\t\titem.parentNode.replaceChild(this.doc().createTextNode(\"\"),item);\n\t\t};\n\t};\n\treturn node;\n};\n\nPlayerPage.prototype.deserializeTextAreas = function (node){\n\tlet els = node.getElementsByTagName('textarea');\n\tfor (let i = 0, items = iter$(els), len = items.length, el; i < len; i++) {\n\t\tel = items[i];\n\t\tif (el.hasAttribute('value')) {\n\t\t\tlet val = el.getAttribute('value');\n\t\t\tel.removeAttribute('value');\n\t\t\tel.value = val;\n\t\t};\n\t};\n\treturn node;\n};\n\nPlayerPage.prototype.rewriteInlineStyles = function (node){\n\tlet styles = node.getElementsByTagName('style');\n\tfor (let j = 0, items = iter$(styles), len = items.length, style; j < len; j++) {\n\t\t\n\t\tstyle = items[j];\n\t\tlet chunks = style.childNodes;\n\t\tlet i = 0;\n\t\t\n\t\twhile (i < style.childNodes.length){\n\t\t\tlet chunk = chunks[i];\n\t\t\tlet next = chunks[i + 1];\n\t\t\tlet text = chunk.textContent;\n\t\t\t\n\t\t\tif (text.indexOf('<!--\u00A7S\u00A7-->') >= 0) {\n\t\t\t\tlet parts = text.split('<!--\u00A7S\u00A7-->');\n\t\t\t\ttext = parts[0];\n\t\t\t\t\n\t\t\t\tfor (let k = 0, ary = iter$(parts.slice(1)), len = ary.length; k < len; k++) {\n\t\t\t\t\tlet subnode = document.createTextNode(ary[k]);\n\t\t\t\t\tnext ? style.insertBefore(subnode,next) : style.appendChild(subnode);\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\tif (text.match(/\\:(hover|pressed|active|focus)/)) {\n\t\t\t\ttext = styleProcessor.toPlayer(text);\n\t\t\t};\n\t\t\t\n\t\t\tif (chunk.textContent != text) {\n\t\t\t\tchunk.textContent = text;\n\t\t\t};\n\t\t\t\n\t\t\ti++;\n\t\t};\n\t};\n\treturn this;\n};\n\nPlayerPage.prototype.warn = function (){\n\tvar api_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>0 ? i : 0);\n\twhile(i>0) params[i-1] = $0[--i];\n\treturn (api_ = App.api()).log.apply(api_,[].concat(['page'], Array.from(params)));\n};\n\nPlayerPage.prototype.applyInitialState = function (op){\n\tvar html = op[0];\n\thtml = html.replace(/(<\\s*head[^\\>]*>)/,\"$1\" + this._base.outerHTML);\n\thtml = helpers.deserializeReferences(html,{BASECSS: baseCSS});\n\tthis._html.innerHTML = html;\n\t\n\tthis.rewriteInlineStyles(this._html);\n\t\n\tif (op[0].indexOf('\u00A7S\u00A7') >= 0) {\n\t\tthis.cleanTextSplitters(this._html);\n\t};\n\t\n\tthis.applyAttributes(this._html,op[1]);\n\t\n\t// @html:firstElementChild.appendChild(@base)\n\tthis.reindexNodes();\n\tthis._currentStyleSheets = {};\n\treturn this;\n};\n\nPlayerPage.prototype.applyAttributes = function (node,pairs){\n\tif (!pairs) { return };\n\t\n\tvar i = 0;\n\tvar l = pairs.length;\n\twhile (i < l){\n\t\tlet name = SCON.refToKey(pairs[i]);\n\t\tlet val = pairs[i + 1];\n\t\tnode.setAttribute(name,val);\n\t\ti += 2;\n\t};\n\treturn;\n};\n\nPlayerPage.prototype.applyMutations = function (muts){\n\tif (this._errored) { return };\n\t\n\t// console.log 'applying mutations!!',muts\n\tvar node;\n\tvar reindex = false;\n\t\n\tfor (let i = 0, items = iter$(muts), len = items.length, mut; i < len; i++) {\n\t\tmut = items[i];\n\t\tif (mut[0] == M.INSERT) {\n\t\t\treindex = true;\n\t\t\tvar parentNode = this.nodeForPath(mut[1]);\n\t\t\tvar insertIndex = mut[2];\n\t\t\tvar nodeToInsert = mut.NODE || (mut.NODE = this.deserializeNode(mut[3]));\n\t\t\t\n\t\t\tvar rel = parentNode.childNodes[insertIndex];\n\t\t\tif (rel) {\n\t\t\t\t// console.log 'insert at index?',rel\n\t\t\t\tparentNode.insertBefore(nodeToInsert,rel);\n\t\t\t} else {\n\t\t\t\tparentNode.appendChild(nodeToInsert);\n\t\t\t};\n\t\t\t\n\t\t\tthis.indexNode(nodeToInsert);\n\t\t} else if (mut[0] == M.INSERT_ADJACENT) {\n\t\t\t// console.log 'INSERT_ADJACENT',mut\n\t\t\treindex = true;\n\t\t\t\n\t\t\tlet relNode = mut.RELNODE || (mut.RELNODE = this.nodeForPath(mut[1]));\n\t\t\tlet relPos = M.POS[mut[2]];\n\t\t\t\n\t\t\t// if this has already been applied before - just redo\n\t\t\tif (mut.NODES) {\n\t\t\t\tfor (let j = 0, ary = iter$(mut.NODES), len = ary.length, el; j < len; j++) {\n\t\t\t\t\tel = ary[j];\n\t\t\t\t\tif (mut[2] == 0) { // beforebegin\n\t\t\t\t\t\trelNode.parentNode.insertBefore(el,relNode);\n\t\t\t\t\t} else if (mut[2] == 2) { // beforeend\n\t\t\t\t\t\trelNode.appendChild(el); // .insertAdjacentElement( relPos, el )\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log(\"node not added in M.INSERT_ADJACENT!!\",mut);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\t// continue?\n\t\t\t\tcontinue;\n\t\t\t};\n\t\t\t\n\t\t\tlet elements = mut[3];\n\t\t\tlet relPrev = relNode.previousSibling;\n\t\t\tlet relNext = relNode.nextSibling;\n\t\t\tlet relPar = relNode.parentNode;\n\t\t\tlet relLastChild = relNode.lastChild;\n\t\t\tlet mockNode = null;\n\t\t\tlet mockHTML = '';\n\t\t\t\n\t\t\t// if we have preindexed items -- skip indexing these\n\t\t\tlet skipIndexing = [];\n\t\t\t\n\t\t\t/*\n\t\t\t\t\t\t\tWe need to track which events we are adding. Since\n\t\t\t\t\t\t\tinsertAdjacentHTML could add several elements we want a\n\t\t\t\t\t\t\tclean general way to track it. The easiest is to simply\n\t\t\t\t\t\t\tlook at the common parent -- then iterate over all of them\n\t\t\t\t\t\t\tat the end\n\t\t\t\t\t\t\t*/\n\t\t\t\n\t\t\t\n\t\t\t// if we are supposed to insert before a non-element node\n\t\t\t// we need to hack around it to still allow using insertAdjacent\n\t\t\tif (mut[2] == 0 && relNode.nodeType != Node.ELEMENT_NODE) {\n\t\t\t\t\n\t\t\t\tmockNode = document.createElement('span');\n\t\t\t\trelPar.insertBefore(mockNode,relNode);\n\t\t\t\trelNode = mockNode;\n\t\t\t};\n\t\t\t\n\t\t\tif (typeof elements == 'number') {\n\t\t\t\tlet insNode = this.nodeForPath(elements);\n\t\t\t\trelNode.insertAdjacentElement(relPos,insNode);\n\t\t\t\tskipIndexing.push(insNode); // should it skip though?\n\t\t\t\tmut.NODES = [insNode];\n\t\t\t\tif (mockNode) { relPar.removeChild(mockNode) };\n\t\t\t\tcontinue;\n\t\t\t} else if (typeof elements == 'string') {\n\t\t\t\tif (relNode.nodeName == 'HTML') {\n\t\t\t\t\tlet element = this.nodeForHTML(elements);\n\t\t\t\t\trelNode.insertAdjacentElement(relPos,element);\n\t\t\t\t} else {\n\t\t\t\t\tif (elements.indexOf(\"<iframe srcdoc=\") == 0) {\n\t\t\t\t\t\telements = elements.replace('srcdoc','srcdoc-off');\n\t\t\t\t\t};\n\t\t\t\t\trelNode.insertAdjacentHTML(relPos,elements);\n\t\t\t\t};\n\t\t\t\tmockHTML += elements;\n\t\t\t} else {\n\t\t\t\t// add all the nodes into a shared node first?\n\t\t\t\t// or add a helpernode at the first place and remove it later\n\t\t\t\tfor (let i = 0, ary = iter$(elements), len = ary.length, el; i < len; i++) {\n\t\t\t\t\tel = ary[i];\n\t\t\t\t\tif (typeof el == 'string') {\n\t\t\t\t\t\tif (relNode.nodeName == 'HTML') {\n\t\t\t\t\t\t\tlet element = this.nodeForHTML(el);\n\t\t\t\t\t\t\trelNode.insertAdjacentElement(relPos,element);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\trelNode.insertAdjacentHTML(relPos,el);\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmockHTML += el;\n\t\t\t\t\t} else if (typeof el == 'number') {\n\t\t\t\t\t\tlet insNode = this.nodeForPath(el);\n\t\t\t\t\t\trelNode.insertAdjacentElement(relPos,insNode);\n\t\t\t\t\t\tskipIndexing.push(insNode);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\t// not needed for single preindexed elements\n\t\t\tlet addEl;\n\t\t\tlet addedElements = [];\n\t\t\t\n\t\t\tif (mockHTML.indexOf('<style') >= 0) {\n\t\t\t\tthis.rewriteInlineStyles(relPar);\n\t\t\t};\n\t\t\t\n\t\t\tif (mockHTML.indexOf('\u00A7S\u00A7') >= 0) {\n\t\t\t\tthis.cleanTextSplitters(relPar);\n\t\t\t};\n\t\t\t\n\t\t\tif (mockHTML.indexOf('<textarea') >= 0) {\n\t\t\t\tthis.deserializeTextAreas(relPar);\n\t\t\t};\n\t\t\t\n\t\t\tif (relPos == 'beforeend') {\n\t\t\t\taddEl = relLastChild ? relLastChild.nextSibling : relNode.firstChild;\n\t\t\t} else if (relPos == 'beforebegin') {\n\t\t\t\taddEl = relPrev ? relPrev.nextSibling : relPar.firstChild;\n\t\t\t};\n\t\t\t\n\t\t\twhile (addEl){\n\t\t\t\tif (addEl == relNode) { break; };\n\t\t\t\t\n\t\t\t\tif (skipIndexing.indexOf(addEl) < 0) {\n\t\t\t\t\t// should we really skip?\n\t\t\t\t\tthis.indexNode(addEl);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\taddedElements.push(addEl);\n\t\t\t\taddEl = addEl.nextSibling;\n\t\t\t};\n\t\t\t\n\t\t\tif (mockNode && mockNode.parentNode == relPar) {\n\t\t\t\trelPar.removeChild(mockNode);\n\t\t\t};\n\t\t\t// console.log \"added elements\",addedElements\n\t\t\tmut.NODES = addedElements;\n\t\t} else if (mut[0] == M.REMOVE) {\n\t\t\treindex = true;\n\t\t\t// var node = nodeForPath(mut[1])\n\t\t\tif (node = (mut.NODE || (mut.NODE = this.nodeForPath(mut[1])))) {\n\t\t\t\t// to remember where to reinsert it?\n\t\t\t\t// what if the sibling is also altered within the same mutation?\n\t\t\t\tmut.REL || (mut.REL = node.nextSibling);\n\t\t\t\tmut.PARENT || (mut.PARENT = node.parentNode);\n\t\t\t\t\n\t\t\t\tif (node.parentNode) {\n\t\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t\t} else {\n\t\t\t\t\tthis.warn(\"M.REMOVE has no parent\",node,node.parentNode,mut,mut.PARENT);\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\t\n\t\t\t\tthis.warn(\"Nothing to remove\",mut);\n\t\t\t};\n\t\t} else if (mut[0] == M.SETTEXT) {\n\t\t\tif (node = mut.NODE = this.nodeForPath(mut[1])) {\n\t\t\t\tmut.PREV = node.textContent;\n\t\t\t\tlet instyle = node.parentNode && node.parentNode.nodeName == 'STYLE';\n\t\t\t\tif (instyle) {\n\t\t\t\t\tnode.textContent = styleProcessor.patch(mut.PREV,mut[2]);\n\t\t\t\t} else {\n\t\t\t\t\tnode.textContent = helpers.patchString(mut.PREV,mut[2]);\n\t\t\t\t};\n\t\t\t};\n\t\t} else {\n\t\t\tnode = mut.NODE = this.nodeForPath(mut[1]);\n\t\t\t\n\t\t\tif (node && mut[0] == M.SETPROP) {\n\t\t\t\tvar key = M.NAME_MAP[mut[2]] || mut[2];\n\t\t\t\tmut.PREV || (mut.PREV = node[key]);\n\t\t\t\ttry {\n\t\t\t\t\tnode[key] = mut[3];\n\t\t\t\t} catch (e) { };\n\t\t\t} else if (node && mut[0] == M.SETATTR) {\n\t\t\t\tkey = M.NAME_MAP[mut[2]] || mut[2];\n\t\t\t\tmut.PREV || (mut.PREV = node.getAttribute(key));\n\t\t\t\t\n\t\t\t\tif (key == 'class') {\n\t\t\t\t\tmut.STATEFLAGS || (mut.STATEFLAGS = node.className.split(\" \").filter(function(f) { return f.match(/^__\\w+/); }));\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (node.nodeName == \"STYLE\" || node.nodeName == \"LINK\") {\n\t\t\t\t\t// do nothing\n\t\t\t\t} else if (mut[3] == null) {\n\t\t\t\t\tnode.removeAttribute(key);\n\t\t\t\t} else {\n\t\t\t\t\tnode.setAttribute(key,mut[3]);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (mut.STATEFLAGS) {\n\t\t\t\t\t// add stateflags afterwards\n\t\t\t\t\tmut.STATEFLAGS.map(function(f) { return node.classList.add(f); });\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n\t\n\tif (reindex) this.reindexNodes();\n\treturn this;\n};\n\nPlayerPage.prototype.revertMutations = function (muts){\n\tif (this.errored()) { return };\n\t\n\tvar node;\n\tvar reindex = false;\n\tvar nr = len$(muts) - 1;\n\t\n\twhile (nr >= 0){\n\t\tvar mut = muts[nr--];\n\t\t// we should remove it instead\n\t\tif (mut[0] == M.INSERT) {\n\t\t\treindex = true;\n\t\t\tif (node = mut.NODE) {\n\t\t\t\tif (node.parentNode) {\n\t\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t\t} else {\n\t\t\t\t\tthis.warn(\"revert INSERT - no parent!\",node);\n\t\t\t\t};\n\t\t\t};\n\t\t} else if (mut[0] == M.INSERT_ADJACENT) {\n\t\t\treindex = true;\n\t\t\tfor (let i = 0, items = iter$(mut.NODES), len = items.length, node; i < len; i++) {\n\t\t\t\tnode = items[i];\n\t\t\t\tif (node.parentNode) {\n\t\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t\t} else {\n\t\t\t\t\tthis.warn(\"revert INSERT_ADJACENT - no parent!\",node,mut);\n\t\t\t\t};\n\t\t\t};\n\t\t} else if (mut[0] == M.REMOVE) {\n\t\t\treindex = true;\n\t\t\t// insert it where it was when removed.. including index?\n\t\t\tvar par = mut.PARENT;\n\t\t\tif (par && mut.NODE != undefined) {\n\t\t\t\tmut.REL ? par.insertBefore(mut.NODE,mut.REL) : par.appendChild(mut.NODE);\n\t\t\t} else {\n\t\t\t\tthis.warn('revert REMOVE - no parent!',muts,mut);\n\t\t\t};\n\t\t} else if (mut[0] == M.SETTEXT && mut.NODE) {\n\t\t\tmut.NODE.textContent = mut.PREV;\n\t\t} else if (mut[0] == M.SETPROP && mut.NODE) {\n\t\t\tvar key = M.NAME_MAP[mut[2]] || mut[2];\n\t\t\tmut.NODE[key] = mut.PREV;\n\t\t} else if (mut[0] == M.SETATTR && mut.NODE) {\n\t\t\tkey = M.NAME_MAP[mut[2]] || mut[2];\n\t\t\t\n\t\t\tif (mut.PREV == null) {\n\t\t\t\tmut.NODE.removeAttribute(key);\n\t\t\t} else {\n\t\t\t\tmut.NODE.setAttribute(key,mut.PREV);\n\t\t\t};\n\t\t};\n\t};\n\t\n\tif (reindex) this.reindexNodes();\n\treturn this;\n};\n\n// FIXME if the dom has mutated since earler, moving upwards is not enough\n// we need to keep an actual reference to all the nodes we flagged with hover\n// to make sure we clean up the classes when changing\nPlayerPage.prototype.refreshPseudoClass = function (flag,new$,old){\n\t// remove hover classes upwards\n\twhile (old && old != this._root && (!(new$) || !old.contains(new$))){\n\t\tif (old.classList) {\n\t\t\told.classList.remove(flag);\n\t\t};\n\t\told = old.parentNode;\n\t};\n\t\n\t// old.removeAttribute('mhover') if old\n\t// new.setAttribute('mhover','hover') if new\n\twhile (new$ && new$ != this._root && this._root.contains(new$)){\n\t\tif (new$.classList) { new$.classList.add(flag) };\n\t\tnew$ = new$.parentNode;\n\t};\n\treturn;\n};\n\nPlayerPage.prototype.applySelection = function (window){\n\tvar op = this.selection();\n\t\n\tvar sel = window.getSelection();\n\t\n\tif (!sel) { return };\n\t\n\tif (!op || !op.NODE || op.NODE == this._document.body) {\n\t\tif (sel) { sel.removeAllRanges() };\n\t\treturn this;\n\t};\n\t\n\tvar anchor = op.NODE;\n\tvar a = op[1];\n\tvar b = op[2];\n\tvar endNode = op.ENDNODE;\n\t\n\ttry {\n\t\tif (anchor.nodeName == 'INPUT' || anchor.nodeName == 'TEXTAREA') {\n\t\t\tvar reg = /text|search|password|tel|url/;\n\t\t\t\n\t\t\tif (anchor.nodeName == 'INPUT' && !reg.test(anchor.type)) {\n\t\t\t\treturn;\n\t\t\t};\n\t\t\t\n\t\t\tif (a < b) {\n\t\t\t\treturn anchor.setSelectionRange(a,b,'forward');\n\t\t\t} else if (a > b) {\n\t\t\t\treturn anchor.setSelectionRange(b,a,'backward');\n\t\t\t} else {\n\t\t\t\treturn anchor.setSelectionRange(a,b,'none');\n\t\t\t};\n\t\t} else {\n\t\t\t// if anchor:nodeType == 3\n\t\t\tvar range = this.doc().createRange();\n\t\t\t\n\t\t\tif (anchor != endNode) {\n\t\t\t\tvar diff = anchor.compareDocumentPosition(endNode); // & Node.DOCUMENT_POSITION_FOLLOWING\n\t\t\t\tvar preceding = diff & Node.DOCUMENT_POSITION_PRECEDING;\n\t\t\t\t// console.warn \"SELECTION\",diff,preceding\n\t\t\t\t\n\t\t\t\tif (preceding) {\n\t\t\t\t\trange.setStart(endNode,b);\n\t\t\t\t\trange.setEnd(anchor,a);\n\t\t\t\t} else {\n\t\t\t\t\trange.setStart(anchor,a);\n\t\t\t\t\trange.setEnd(endNode,b);\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\t// text\n\t\t\t\tif (anchor.nodeType == 3) {\n\t\t\t\t\ta = Math.min(anchor.length,a);\n\t\t\t\t\tb = Math.min(anchor.length,b);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (a <= b) {\n\t\t\t\t\trange.setStart(anchor,a);\n\t\t\t\t\trange.setEnd(anchor,b);\n\t\t\t\t} else {\n\t\t\t\t\trange.setStart(anchor,b);\n\t\t\t\t\trange.setEnd(anchor,a);\n\t\t\t\t};\n\t\t\t\tif (a == b) {\n\t\t\t\t\trange.collapse(false);\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\tsel.removeAllRanges();\n\t\t\treturn sel.addRange(range);\n\t\t};\n\t} catch (e) {\n\t\treturn this.warn('error when applying selection',op,e,anchor,a,b);\n\t};\n};\n\nPlayerPage.prototype.syncStyleSheets = function (files,hard){\n\t// if @html:parentNode == null\n\t// \treturn\n\tif(hard === undefined) hard = false;\n\tvar sheets = this.html().querySelectorAll('link[rel=\"stylesheet\"]');\n\tfor (let i = 0, items = iter$(sheets), len = items.length, sheet; i < len; i++) {\n\t\tsheet = items[i];\n\t\tlet url = sheet.href;\n\t\tif (hard) {\n\t\t\t// see if we can find the file responsible for this sheet\n\t\t\tsheet.href = sheet.href.split(\"?\")[0] + \"?\" + Math.random();\n\t\t};\n\t};\n\t\n\t// if var node = html.querySelector(\"style[scrimba-live='{path}'],style[scrimba-live][href='{name}']\")\n\tlet res = [];\n\tfor (let i = 0, items = iter$(files), len = items.length, file; i < len; i++) {\n\t\tfile = items[i];\n\t\tif (file.lang() == 'css') {\n\t\t\tvar path = file.path();\n\t\t\tif (!path.startsWith(this.browser().rootPath())) {\n\t\t\t\tcontinue;\n\t\t\t};\n\t\t\t\n\t\t\tpath = path.slice(len$(this.browser().rootPath()) - 1);\n\t\t\tvar body = file.currentBody();\n\t\t\tres.push((this._currentStyleSheets[path] != body) && (\n\t\t\t\tthis._currentStyleSheets[path] = body,\n\t\t\t\t\n\t\t\t\tthis.setCSSText(path,styleProcessor.toPlayer(body))\n\t\t\t));\n\t\t};\n\t};\n\treturn res;\n};\n\nPlayerPage.prototype.setCSSText = function (path,text){\n\t// FIXME no support for multiple stylesheets referencing the same file\n\tvar node;\n\tvar name = path.slice(1);\n\tif (node = this.html().querySelector((\"style[scrimba-live='\" + path + \"'],style[scrimba-live][href='\" + name + \"']\"))) {\n\t\ttext = \"/*SCRIMBA:IGNORE:START*/\" + text + \"/*SCRIMBA:IGNORE:END*/\";\n\t\t// replace pseudo-states\n\t\t// text = text.replace(/:(hover|focus|active)\\b/g) do |m,state| \".__{state}\"\n\t\treturn node.textContent = text;\n\t};\n};\n\nPlayerPage.prototype.setStyles = function (items){\n\tvar child;\n\treturn this;\n\t\n\tvar head = this._head;\n\twhile (child = head.firstChild){\n\t\thead.removeChild(child);\n\t};\n\t\n\tlet res = [];\n\tfor (let i = 0, ary = iter$(items), len = ary.length, patch; i < len; i++) {\n\t\tpatch = ary[i];\n\t\tvar node;\n\t\tif (typeof patch == \"number\") {\n\t\t\tnode = this._styleNodes[patch];\n\t\t} else {\n\t\t\tnode = this._styleNodes[patch.id];\n\t\t\tif (!node) {\n\t\t\t\tnode = this.doc().createElement((patch.textContent != null) ? 'style' : 'link');\n\t\t\t\tthis._styleNodes[patch.id] = node;\n\t\t\t};\n\t\t\t\n\t\t\tif (patch.media != undefined) {\n\t\t\t\tnode.media = patch.media;\n\t\t\t};\n\t\t\tif (patch.textContent != undefined) {\n\t\t\t\tnode.textContent = patch.textContent;\n\t\t\t};\n\t\t\tif (patch.href != undefined) {\n\t\t\t\tnode.href = patch.href;\n\t\t\t};\n\t\t\tif (patch.filename != undefined) {\n\t\t\t\tnode.SCRIMBA_FILENAME = patch.filename;\n\t\t\t};\n\t\t};\n\t\tres.push(head.appendChild(node));\n\t};\n\treturn res;\n};\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nfunction len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n\nvar protocol$ = require('../protocol'), ACTION_MAP = protocol$.ACTION_MAP, ACTION = protocol$.ACTION, WIDGET = protocol$.WIDGET, CAST = protocol$.CAST, KEYS = protocol$.KEYS, SCON = protocol$.SCON;\nvar Struct = require('./Struct').Struct;\n\n/*\n\nEvery change that is persisted to a stream has a type.\nThere is a StreamAction subclass for each type, and\nevery event is deserialised to an instance of said class.\n\nThese deserialised events (StreamAction instances) are\nthemselves responsible for applying (StreamAction#commit)\nand reverting (StreamAction#revert) themselves in the context\nof a space. Any changes an action creates MUST be revertable.\n\n*/\n\n\nfunction StreamAction(params,branch){\n\tthis._params = params;\n\tthis._branch = branch;\n\tthis._offset = 0;\n\tthis._prev = null;\n\tthis._next = null;\n\tthis._receivedAt = Date.now();\n\tthis;\n};\n\nexports.StreamAction = StreamAction; // export class \nStreamAction.seed = function (stream){\n\tvar seed = new this([],stream._owner);\n\tseed._index = -1;\n\tseed._byteOffset = 1;\n\treturn seed;\n};\n\nStreamAction.handles = function (type,opts){\n\tif(opts === undefined) opts = {};\n\tACTION_MAP[type] = this;\n\tthis._type = this.prototype._type = type;\n\tthis._options = opts;\n\tthis._strategy = opts.strategy;\n\tthis._diff = opts.diff;\n\treturn this;\n};\n\nStreamAction.type = function (type){\n\treturn ACTION_MAP[type];\n};\n\nStreamAction.deserialize = function (raw,branch){\n\tvar type = ACTION_MAP[raw[0]] || this;\n\treturn new type(raw,branch);\n};\n\nStreamAction.build = function (params,meta,source){\n\tif (!((params instanceof Array))) {\n\t\tparams = this.paramify(params);\n\t};\n\treturn new this(params,null);\n};\n\nStreamAction.encode = function (params,rel,stream,idx){\n\tif (this._strategy == 'dedupe') {\n\t\tlet json = JSON.stringify(params);\n\t\tif (stream._dupes[json] != null) {\n\t\t\treturn [stream._dupes[json]];\n\t\t};\n\t};\n\t\n\treturn params;\n};\n\nStreamAction.decode = function (params,rel,stream,idx){\n\tvar _dupes_;\n\tif (this._strategy == 'dedupe') {\n\t\tif (params.length == 1) {\n\t\t\tparams = stream._actions[params[0]]._params;\n\t\t} else {\n\t\t\tvar json = JSON.stringify(params);\n\t\t\t((_dupes_ = stream._dupes)[json] == null) ? (_dupes_[json] = idx) : _dupes_[json];\n\t\t};\n\t};\n\t\n\treturn new this(params);\n};\n\nStreamAction.schema = function (items){\n\tthis.prototype._schema = this._schema = items;\n\tthis._defaults = [];\n\t\n\tvar getter = function(i) {\n\t\treturn function() { return this._params[i]; };\n\t};\n\t\n\tfor (let i = 0, ary = iter$(items), len = ary.length; i < len; i++) {\n\t\tthis._defaults.push(0);\n\t\tthis.prototype[ary[i]] = getter(i);\n\t};\n\treturn this;\n};\n\n// can convert object with keys into array based on schema of action\n// helpful to make sure we are supplying the correct attributes etc\nStreamAction.paramify = function (dict){\n\tif (!this._schema) {\n\t\tthrow (\"A\" + (this.prototype._type) + \" does not support paramify\");\n\t};\n\t\n\tvar values = this._defaults.slice();\n\t\n\tfor (let val, i = 0, keys = Object.keys(dict), l = keys.length, key; i < l; i++){\n\t\tkey = keys[i];val = dict[key];let idx = this._schema.indexOf(key);\n\t\tvalues[idx] = val;\n\t};\n\t\n\treturn values;\n};\n\n\nStreamAction.prototype.offset = function(v){ return this._offset; }\nStreamAction.prototype.setOffset = function(v){ this._offset = v; return this; };\nStreamAction.prototype.type = function(v){ return this._type; }\nStreamAction.prototype.setType = function(v){ this._type = v; return this; };\nStreamAction.prototype.params = function(v){ return this._params; }\nStreamAction.prototype.setParams = function(v){ this._params = v; return this; };\nStreamAction.prototype.index = function(v){ return this._index; }\nStreamAction.prototype.setIndex = function(v){ this._index = v; return this; };\nStreamAction.prototype.byteEnd = function(v){ return this._byteEnd; }\nStreamAction.prototype.setByteEnd = function(v){ this._byteEnd = v; return this; };\nStreamAction.prototype.receivedAt = function(v){ return this._receivedAt; }\nStreamAction.prototype.setReceivedAt = function(v){ this._receivedAt = v; return this; };\n\nStreamAction.prototype.log = function (){\n\tvar branch_;\n\tvar $0 = arguments, i = $0.length;\n\tvar pars = new Array(i>0 ? i : 0);\n\twhile(i>0) pars[i-1] = $0[--i];\n\treturn (branch_ = this.branch()).log.apply(branch_,[].concat(['action:' + this.constructor.name], Array.from(pars)));\n};\n\n// addToStream stream\n// link up next / prev etc\nStreamAction.prototype.addToStream = function (stream){\n\tthis._stream = stream;\n\tthis._branch || (this._branch = stream._owner);\n\tthis._prev = stream._tail;\n\tthis._parent = stream._lastActions[this._type];\n\tthis._offset = stream._lastTimeOffset;\n\treturn this.INDEX = this._index = len$(stream);\n};\n\nStreamAction.prototype.commitToStream = function (stream){\n\tif (this._prev) { this._prev._next = this };\n\tstream.lastActions()[this._type] = this;\n\tstream.actions().push(this);\n\tthis._byteEnd = stream.byteLength();\n\treturn this;\n};\n\n// in the odd case where we need to rollback\n// items in the stream - we must ensure that\n// the encoder/decoder state is fixed\n// At some point we might need to start\n// reconstructing the whole stream instead\nStreamAction.prototype.removeFromStream = function (stream){\n\tstream._lastActions[this._type] = this._parent;\n\tstream.actions().pop();\n\treturn this;\n};\n\n// commitToStream stream\n// update the stream lastTargetAction and more\n\nStreamAction.prototype.timeOffset = function (){\n\treturn this._offset;\n};\n\nStreamAction.prototype.branch = function (){\n\treturn this._branch || this._stream._owner;\n};\n\nStreamAction.prototype.space = function (){\n\treturn this.branch().space();\n};\n\nStreamAction.prototype.data = function (){\n\treturn this._params[1];\n};\n\nStreamAction.prototype.toString = function (){\n\treturn (\"A#\" + (this.INDEX));\n};\n\nStreamAction.prototype.toStruct = function (){\n\treturn this._params;\n};\n\nStreamAction.prototype.addSubAction = function (action,cursor){\n\t// console.warn \"addSubAction\",action,self\n\taction._branch = this.branch();\n\tthis._children || (this._children = []);\n\t// var action = StreamAction.new(raw,branch)\n\t// action.@branch = branch\n\tthis._children.push(action);\n\taction.commitWithCursor(cursor);\n\treturn action;\n};\n\nStreamAction.prototype.encode = function (stream){\n\treturn this.constructor.encode(this._params,this._parent ? this._parent._params : null,stream,this._index);\n\t// @params\n};\n\nStreamAction.prototype.target = function (){\n\treturn this._branch.__lookup(this._params[0]) || this._branch.space();\n};\n\nStreamAction.prototype.isEnabled = function (){\n\treturn true;\n};\n\nStreamAction.prototype.isSignificant = function (){\n\treturn false;\n};\n\nStreamAction.prototype.commitWithCursor = function (cursor){\n\tcursor._stack.unshift(this);\n\tthis.commit(cursor);\n\tcursor._stack.shift();\n\treturn this;\n};\n\nStreamAction.prototype.revertWithCursor = function (cursor){\n\tcursor._stack.unshift(this);\n\tif (this._children) {\n\t\tvar i = this._children.length;\n\t\twhile (i > 0){\n\t\t\tthis._children[--i].revertWithCursor(cursor);\n\t\t};\n\t\tthis._children = null;\n\t};\n\t\n\tthis.revert(cursor);\n\tcursor._stack.shift();\n\treturn this;\n};\n\n// applying this action\nStreamAction.prototype.commit = function (cursor){\n\tvar target;\n\tif (target = this.target()) {\n\t\tcursor.markTarget(target);\n\t\ttarget.apply(this);\n\t};\n\treturn this;\n};\n\n// reverting this action\nStreamAction.prototype.revert = function (cursor){\n\tvar target;\n\tif (target = this.target()) {\n\t\tcursor.markTarget(target);\n\t\ttarget.revert(this);\n\t};\n\treturn this;\n};\n\n// rejected by stream - possibly revert if\n// merely creating the action had side-effects\nStreamAction.prototype.discard = function (){\n\treturn this;\n};\n\n\n\nfunction CreateWidget(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(CreateWidget,StreamAction);\nexports.CreateWidget = CreateWidget; // export class \nCreateWidget.handles(ACTION.WIDGET_CREATE,['target','config']);\n\nCreateWidget.prototype.isSignificant = function (){\n\treturn true;\n};\n\nCreateWidget.prototype.widget = function (){\n\treturn this._widget || (this._widget = this.target().widgets().create(this.data().type,this.data(),this));\n};\n\nCreateWidget.prototype.commit = function (cursor){\n\tthis.widget().commitAdd();\n\treturn cursor.markTarget(this.target());\n};\n\nCreateWidget.prototype.revert = function (cursor){\n\tthis.widget().revertAdd();\n\tcursor.markTarget(this.target());\n\treturn this;\n};\n\n\nfunction Snapshot(raw,branch){\n\tthis._params = raw;\n\tthis._branch = branch;\n\tthis._offset = 0;\n\tthis._prev = null;\n\tthis._next = null;\n\tthis;\n};\n\nsubclass$(Snapshot,StreamAction);\nexports.Snapshot = Snapshot; // export class \nSnapshot.handles(CAST.SNAPSHOT,['data']);\n\nSnapshot.prototype.commit = function (){\n\tif (!this.branch().space().isDeserialized()) {\n\t\t// only apply snapshot if this is the first snapshot in space\n\t\tthis.branch().space().deserialize(this._params[0],this);\n\t};\n\t// else\n\t//\tconsole.log \"skip Snapshot - already deserialized\"\n\treturn this;\n};\n\nSnapshot.prototype.revert = function (){\n\t// console.log \"snapshot cannot be reverted\"\n\treturn this;\n};\n\nfunction BranchAction(){ return Snapshot.apply(this,arguments) };\n\nsubclass$(BranchAction,Snapshot);\nexports.BranchAction = BranchAction; // export class \nBranchAction.handles(CAST.BRANCH);\n\nBranchAction.prototype.commit = function (){\n\tif (this.branch() == this.branch().space().trunk()) {\n\t\tBranchAction.prototype.__super__.commit.apply(this,arguments);\n\t};\n\treturn this;\n};\n\nfunction ForkAction(){ return BranchAction.apply(this,arguments) };\n\nsubclass$(ForkAction,BranchAction);\nexports.ForkAction = ForkAction; // export class \nForkAction.handles(ACTION.FORK);\n\nfunction PingAction(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(PingAction,StreamAction);\nexports.PingAction = PingAction; // export class \nPingAction.handles(ACTION.PING);\n\nfunction ConfigSet(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(ConfigSet,StreamAction);\nexports.ConfigSet = ConfigSet; // export class \nConfigSet.handles(ACTION.SET,[]);\n\n/*\t\n\tif target(0) is same as previous - drop\n\tif key(1) is the same as well - drop \n\t\n\tSo, setting the same property twice would result in\n\t[targetId,myProperty,myFirstValue],[mySecondValue]\n\t*/\n\n\n// maybe set this upon creation?\n// rel is the previous event of same type?\nConfigSet.decode = function (params,rel,stream,idx){\n\tif (rel) {\n\t\tif (params.length < 2) {\n\t\t\tparams.unshift(rel[1]);\n\t\t};\n\t\tif (params.length < 3) {\n\t\t\tparams.unshift(rel[0]);\n\t\t};\n\t};\n\t\n\treturn new this(params);\n};\n\nConfigSet.encode = function (params,rel){\n\tif (rel && rel.length == params.length) {\n\t\t\n\t\t// if we have the same target\n\t\tif (params[0] == rel[0]) {\n\t\t\tif (params[1] == rel[1]) {\n\t\t\t\treturn [params[2]];\n\t\t\t} else {\n\t\t\t\treturn [params[1],params[2]];\n\t\t\t};\n\t\t};\n\t};\n\t\n\treturn params;\n};\n\nConfigSet.prototype.key = function (){\n\treturn KEYS[this._params[1]] || this._params[1];\n};\n\nConfigSet.prototype.commit = function (cursor){\n\tvar target;\n\tvar key = this.key();\n\tif (target = this.target()) {\n\t\tcursor.markTarget(target);\n\t\tthis._revertValue || (this._revertValue = target._data[key]);\n\t\ttarget._data[key] = this._params[2];\n\t\t// why do this directly?\n\t\treturn target.options()._v++;\n\t};\n};\n\nConfigSet.prototype.revert = function (cursor){\n\tvar target;\n\tif (target = this.target()) {\n\t\tcursor.markTarget(target);\n\t\ttarget._data[this.key()] = this._revertValue;\n\t\ttarget.options()._v++;\n\t};\n\treturn this;\n};\n\n\nfunction Patch(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(Patch,StreamAction);\nexports.Patch = Patch; // export class \nPatch.handles(ACTION.PATCH);\n\n// maybe set this upon creation?\n\nPatch.prototype.key = function (){\n\treturn KEYS[this._params[1]] || this._params[1];\n};\n\nPatch.prototype.data = function (){\n\treturn this._params[2];\n};\n\nPatch.prototype.commit = function (cursor){\n\tvar target;\n\tvar key = this.key(),data = this.data();\n\tif (target = this.target()) {\n\t\tcursor.markTarget(target);\n\t\tthis._revertValue = target._data[key];\n\t\t// unless @rev:val\n\t\t// \tconsole.log \"trying to patch empty val!!\",self\n\t\tthis._value || (this._value = Struct.decode(this._revertValue || data,data));\n\t\t// console.log \"patching\",data,@value\n\t\ttarget._data[key] = this._value;\n\t\treturn target.options()._v++;\n\t};\n};\n\nPatch.prototype.revert = function (cursor){\n\tvar target;\n\tif (target = this.target()) {\n\t\tcursor.markTarget(target);\n\t\ttarget._data[this.key()] = this._revertValue;\n\t\ttarget.options()._v++;\n\t};\n\treturn this;\n};\n\n\nfunction TextAction(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(TextAction,StreamAction);\n\n\nfunction TextEdit(){ return TextAction.apply(this,arguments) };\n\nsubclass$(TextEdit,TextAction);\nexports.TextEdit = TextEdit; // export class \nTextEdit.handles(ACTION.LCEDIT); // [fileid,edits[ [range,text], ... ]]\n\nTextEdit.prototype.isSignificant = function (){\n\treturn true;\n};\n\nTextEdit.prototype.data = function (){\n\treturn this._params[1];\n};\n\nTextEdit.prototype.selAfter = function (){\n\treturn this._params[2];\n};\n\nTextEdit.prototype.selBefore = function (){\n\treturn this._selBefore;\n};\n\nTextEdit.prototype.commit = function (cursor){\n\tvar target = this.target();\n\tthis._selBefore = target._selState;\n\tcursor.markTarget(target);\n\ttarget.model().apply(this.data(),this.LOCAL);\n\tif (this.selAfter()) {\n\t\ttarget._selState = this.selAfter();\n\t};\n\t\n\t// FIXME this should use something else\n\ttarget.async('modified');\n\treturn this.LOCAL = null;\n};\n\nTextEdit.prototype.revert = function (cursor){\n\tcursor.markTarget(this.target());\n\tthis.target().model().undo(this.data());\n\tif (this.selBefore()) {\n\t\treturn this.target()._selState = this.selBefore();\n\t};\n};\n\nfunction TextInsert(){ return TextEdit.apply(this,arguments) };\n\nsubclass$(TextInsert,TextEdit);\nexports.TextInsert = TextInsert; // export class \nTextInsert.handles(ACTION.LCINSERT);\n\nTextInsert.decode = function (params,rel,stream){\n\tif (typeof params == 'string') {\n\t\tvar start = rel[4] || [rel[1],rel[2] + rel[3].length];\n\t\tparams = [rel[0],start[0],start[1],params];\n\t};\n\t\n\treturn new this(params);\n};\n\nTextInsert.encode = function (params,rel){\n\tif (!rel) { return params };\n\tvar start = rel[4] || [rel[1],rel[2] + rel[3].length];\n\t\n\tif (start.length == 2 && start[0] == params[1] && start[1] == params[2]) {\n\t\tif (!params[4]) {\n\t\t\treturn params[3];\n\t\t};\n\t};\n\t\n\treturn params;\n};\n\nTextInsert.prototype.encode = function (stream){\n\t// TODO send through to constructor.encode\n\tvar rel = this._parent && this._parent._params;\n\tvar pars = this._params;\n\t\n\tif (rel && !pars[4]) {\n\t\tvar psel = this._parent.selAfter();\n\t\t// this starts where the previous ends\n\t\tif (psel.length == 2 && psel[0] == pars[1] && psel[1] == pars[2]) {\n\t\t\treturn pars[3];\n\t\t};\n\t};\n\t\n\treturn pars;\n};\n\nTextInsert.prototype.data = function (){\n\tif (this._data) { return this._data };\n\tlet pars = this._params;\n\tlet edit = [[pars[1],pars[2]],pars[3]];\n\treturn this._data = [edit];\n};\n\nTextInsert.prototype.selAfter = function (){\n\treturn this._selAfter || (this._selAfter = this._params[4] || [this._params[1],this._params[2] + this._params[3].length]);\n};\n\nfunction TextDelete(){ return TextEdit.apply(this,arguments) };\n\nsubclass$(TextDelete,TextEdit);\nexports.TextDelete = TextDelete; // export class \nTextDelete.handles(ACTION.LCDELETE);\n\n// def self.decode pkg, rel, branch\n// \tif var rp = rel and rel.@params\n\nTextDelete.prototype.range = function (){\n\treturn this._range || (this._range = this._params.slice(1,5));\n};\n\nTextDelete.prototype.data = function (){\n\treturn this._data || (this._data = [[this.range()]]);\n};\n\nTextDelete.prototype.selAfter = function (){\n\treturn this._selAfter || (this._selAfter = this._params[5] || this._params.slice(1,3));\n};\n\nfunction TextSelection(){ return TextAction.apply(this,arguments) };\n\nsubclass$(TextSelection,TextAction);\nexports.TextSelection = TextSelection; // export class \nTextSelection.handles(ACTION.LCSELECTION);\n\n// if there are less than 3 params\n// it signals that params should be identical\n// to previous LCSELECTION, except the last n items\n\nTextSelection.decode = function (params,rel,stream,idx){\n\tif (rel && params.length < 3) {\n\t\tparams = rel.slice(0,-params.length).concat(params);\n\t};\n\t\n\treturn new this(params);\n};\n\nTextSelection.encode = function (params,rel){\n\tif (rel && rel.length == params.length) {\n\t\t// check if only the last number has changed\n\t\tlet i = 0;\n\t\twhile (i < rel.length){\n\t\t\tif (rel[i] != params[i]) {\n\t\t\t\tbreak;\n\t\t\t};\n\t\t\ti++;\n\t\t};\n\t\t\n\t\tlet uniqTail = params.slice(i);\n\t\tif (uniqTail.length < 3) {\n\t\t\treturn uniqTail;\n\t\t};\n\t};\n\t\n\treturn params;\n};\n\nTextSelection.prototype.selAfter = function (){\n\treturn this._selAfter || (this._selAfter = this._params.slice(1));\n};\n\nTextSelection.prototype.commit = function (cursor){\n\tthis._selBefore = this.target()._selState;\n\treturn this.target()._selState = this.selAfter();\n};\n\nTextSelection.prototype.revert = function (){\n\treturn this.target()._selState = this._selBefore;\n};\n\nfunction TextScroll(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(TextScroll,StreamAction);\nexports.TextScroll = TextScroll; // export class \nTextScroll.handles(ACTION.LCSCROLL);\n\n\nfunction NodeLayoutAction(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(NodeLayoutAction,StreamAction);\nexports.NodeLayoutAction = NodeLayoutAction; // export class \nNodeLayoutAction.handles(ACTION.NODE_LAYOUT); // [ nodeRef, ]\n\nNodeLayoutAction.prototype.sref = function (){\n\treturn this._params[0];\n};\n\nNodeLayoutAction.prototype.layout = function (){\n\treturn this._params[1];\n};\n\nNodeLayoutAction.prototype.commit = function (){\n\tthis._rev = this._stream.layouts()[this.sref()];\n\tthis._stream.layouts()[this.sref()] = this.layout();\n\treturn this;\n};\n\nNodeLayoutAction.prototype.revert = function (){\n\treturn this._stream.layouts()[this.sref()] = this._rev;\n};\n\n\nfunction PointerUpdate(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(PointerUpdate,StreamAction);\nexports.PointerUpdate = PointerUpdate; // export class \nPointerUpdate.handles(ACTION.POINTER_UPDATE);\n\nPointerUpdate.schema([\n\t'x', // delta\n\t'y', // delta\n\t'flags',\n\t'hover', // target\n\t'angle', // 0-120\n\t'pressure' // 0-120\n]);\n\nPointerUpdate.decode = function (params,rel,stream,idx){\n\tif (rel) {\n\t\tparams[0] += rel[0]; // x\n\t\tparams[1] += rel[1]; // y\n\t\tvar i = params.length;\n\t\twhile (i < rel.length){\n\t\t\tparams[i] = rel[i++];\n\t\t};\n\t};\n\t\n\treturn new this(params);\n};\n\nPointerUpdate.encode = function (params,rel,stream,idx){\n\tif (!rel) { return params };\n\t\n\t// workaround - check if hover-array is equal\n\tif (String(params[3]) == String(rel[3])) {\n\t\tparams[3] = rel[3];\n\t};\n\t\n\tvar diff = params.slice();\n\tdiff[0] = params[0] - rel[0];\n\tdiff[1] = params[1] - rel[1];\n\tvar i = rel.length - 1;\n\t\n\t\n\t\n\twhile (i > 1 && rel[i] == params[i]){\n\t\tdiff.pop();\n\t\ti--;\n\t};\n\t\n\treturn diff;\n};\n\n// def encode\n//\treturn PointerUpdate.encode(@params,@parent ? @parent.@params : null)\n\nPointerUpdate.prototype.addToStream = function (stream){\n\tPointerUpdate.prototype.__super__.addToStream.apply(this,arguments);\n\tthis._parent && (this._parent._nextFrame = this);\n\treturn;\n};\n\nPointerUpdate.prototype.nextFrame = function (){\n\treturn this._nextFrame;\n};\n\nPointerUpdate.prototype.prevFrame = function (){\n\treturn this._parent;\n};\n\nPointerUpdate.prototype.view = function (){\n\treturn this._branch._space._view._pointer;\n};\n\nPointerUpdate.prototype.target = function(v){ return this._target; }\nPointerUpdate.prototype.setTarget = function(v){ this._target = v; return this; };\n\nPointerUpdate.prototype.target = function (){\n\treturn this._target || (this._target = this.originalTarget());\n};\n\nPointerUpdate.prototype.sref = function (){\n\treturn this._sref || (this._sref = this.originalSref());\n};\n\nPointerUpdate.prototype.setSref = function (newSref){\n\tthis._sref = newSref;\n\tthis._target = this._branch._space._view.lookup(newSref);\n\tthis;\n\treturn this;\n};\n\nPointerUpdate.prototype.originalTarget = function (){\n\treturn this._originalTarget || (this._originalTarget = this._branch._space._view.lookup(this.originalSref()));\n};\n\nPointerUpdate.prototype.originalSref = function (){\n\treturn this._params[3];\n};\n\nPointerUpdate.prototype.targetLayout = function (){\n\treturn this._branch._stream.layouts()[this.sref()];\n};\n\nPointerUpdate.prototype.commit = function (){\n\t// change pointer-update\n\tvar view;\n\tif (view = this.view()) {\n\t\t// log 'commit'\n\t\tview.setKeyframe(this);\n\t};\n\treturn this;\n};\n\nPointerUpdate.prototype.revert = function (){\n\tvar view;\n\tif (view = this.view()) {\n\t\tview.setKeyframe(this._parent);\n\t};\n\treturn this;\n};\n\nfunction FSRenameAction(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(FSRenameAction,StreamAction);\nexports.FSRenameAction = FSRenameAction; // export class \nFSRenameAction.handles(ACTION.FS_RENAME);\n\nFSRenameAction.prototype.target = function (){\n\treturn this._branch.__lookup(this._params[0]);\n};\n\nFSRenameAction.prototype.commit = function (){\n\tthis.target().setName(this._params[1]);\n\treturn this;\n};\n\nfunction FSMoveAction(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(FSMoveAction,StreamAction);\nexports.FSMoveAction = FSMoveAction; // export class \nFSMoveAction.handles(ACTION.FS_MOVE); // source, newTaret\n\nFSMoveAction.prototype.target = function (){\n\treturn this._branch.__lookup(this._params[0]);\n};\n\nFSMoveAction.prototype.commit = function (){\n\tthis._prevDir || (this._prevDir = this.target().parentDir());\n\tthis._targetDir = this._branch.__lookup(this._params[1]);\n\t// target.name = @params[1]\n\tthis.log(\"FSMoveAction\",this._params);\n\tthis._prevDir.entries().remove(this.target());\n\tthis.target().setParent(this._targetDir);\n\tthis._targetDir.entries().add(this.target());\n\t// target.parentDir.entries.remove(target)\n\treturn this;\n};\n\nFSMoveAction.prototype.revert = function (){\n\tthis.log(\"FSMoveAction.revert\");\n\tthis._targetDir.entries().remove(this.target());\n\tthis.target().setParent(this._prevDir);\n\treturn this._prevDir.entries().add(this.target());\n};\n\nfunction FSRemoveAction(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(FSRemoveAction,StreamAction);\nexports.FSRemoveAction = FSRemoveAction; // export class \nFSRemoveAction.handles(ACTION.FS_REMOVE);\n\nFSRemoveAction.prototype.target = function (){\n\treturn this._target || (this._target = this._branch.__lookup(this._params[0]));\n};\n\nFSRemoveAction.prototype.commit = function (){\n\treturn this.target().commitDel();\n};\n\nFSRemoveAction.prototype.revert = function (){\n\treturn this.target().revertDel();\n};\n\n\nfunction SimAction(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(SimAction,StreamAction);\nexports.SimAction = SimAction; // export class \nSimAction.prototype.target = function (){\n\treturn this._branch._space.simulator();\n};\n\nfunction SimBuild(){ return SimAction.apply(this,arguments) };\n\nsubclass$(SimBuild,SimAction);\nexports.SimBuild = SimBuild; // export class \nSimBuild.handles(ACTION.SIM_BUILD);\n\nfunction SimResult(){ return SimAction.apply(this,arguments) };\n\nsubclass$(SimResult,SimAction);\nexports.SimResult = SimResult; // export class \nSimResult.handles(ACTION.SIM_RESULT);\n\nfunction ConsoleAction(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(ConsoleAction,StreamAction);\nConsoleAction.prototype.target = function (){\n\treturn this._branch._space._console;\n};\n\nConsoleAction.prototype.data = function (){\n\treturn this._params;\n};\n\n// applying this action\nConsoleAction.prototype.commit = function (cursor){\n\tcursor.markTarget(this.target());\n\treturn this.target().apply(this);\n};\n\n// reverting this action\nConsoleAction.prototype.revert = function (cursor){\n\tcursor.markTarget(this.target());\n\treturn this.target().revert(this);\n};\n\nConsoleAction.prototype.isEnabled = function (){\n\treturn true;\n};\n\nfunction ConsoleClear(){ return ConsoleAction.apply(this,arguments) };\n\nsubclass$(ConsoleClear,ConsoleAction);\nexports.ConsoleClear = ConsoleClear; // export class \nConsoleClear.handles(ACTION.CONSOLE_CLEAR);\n\n// TODO move logic here\n\n\nfunction ConsoleLog(){ return ConsoleAction.apply(this,arguments) };\n\nsubclass$(ConsoleLog,ConsoleAction);\nexports.ConsoleLog = ConsoleLog; // export class \nConsoleLog.handles(ACTION.CONSOLE_LOG);\n\n// TODO move logic here\n\n\nfunction ConsoleValExpand(){ return ConsoleAction.apply(this,arguments) };\n\nsubclass$(ConsoleValExpand,ConsoleAction);\nexports.ConsoleValExpand = ConsoleValExpand; // export class \nConsoleValExpand.handles(ACTION.CONSOLE_VAL_EXPAND);\n\n// TODO move logic here\n\n\n// DOM events\n\nvar PlayerPage = require('../widgets/browser/PlayerPage').PlayerPage;\n\nfunction PageAction(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(PageAction,StreamAction);\nexports.PageAction = PageAction; // export class \nPageAction.prototype.page = function (){\n\treturn this._page || (this._page = this._stream._lastPage);\n};\n\nPageAction.prototype.browser = function (){\n\treturn this.branch().space().browser();\n};\n\nPageAction.prototype.commitToStream = function (stream){\n\tPageAction.prototype.__super__.commitToStream.apply(this,arguments);\n\treturn this.page();\n};\n\nPageAction.prototype.isEnabled = function (){\n\treturn true;\n};\n\nPageAction.prototype.baseURI = function (){\n\treturn this.browser().baseURI(this.index());\n};\n\n\nfunction PageRequest(){ return PageAction.apply(this,arguments) };\n\nsubclass$(PageRequest,PageAction);\nexports.PageRequest = PageRequest; // export class \nPageRequest.handles(ACTION.PAGE_REQUEST);\n\nPageRequest.prototype.page = function (){\n\treturn this._page || (this._page = (this._stream._lastPage = new PlayerPage(this,{url: this.url()})));\n};\n\nPageRequest.prototype.url = function (){\n\treturn this._params[1];\n};\n\nPageRequest.prototype.commit = function (){\n\tvar v_;\n\tthis.browser().setPage(this.page());\n\tif (this.url()) { (this.browser().setUrl(v_ = this.url()),v_) };\n\treturn this;\n};\n\nPageRequest.prototype.revert = function (){\n\treturn this;\n};\n\n\n\nfunction PageLoad(){ return PageAction.apply(this,arguments) };\n\nsubclass$(PageLoad,PageAction);\nexports.PageLoad = PageLoad; // export class \nPageLoad.handles(ACTION.PAGE_LOAD);\n\nPageLoad.prototype.page = function (){\n\tif (this._page) { return this._page };\n\t\n\tthis._page = this._stream._lastPage;\n\t\n\tif (!this._page || this._page.loadAction()) {\n\t\tthis._page = this._stream._lastPage = new PlayerPage(this,{url: this.url()});\n\t};\n\t\n\tthis._page.setLoadAction(this);\n\treturn this._page;\n};\n\nPageLoad.prototype.url = function (){\n\treturn this._params[1];\n};\n\nPageLoad.prototype.commit = function (cursor){\n\tvar v_;\n\tthis.page().setStatus(this._params[0]);\n\tthis.browser().setPage(this.page());\n\treturn (this.browser().setUrl(v_ = this.url()),v_);\n};\n\nPageLoad.prototype.revert = function (cursor){\n\tthis.page().setStatus(null);\n\treturn this;\n};\n\nfunction PageLoaded(){ return PageAction.apply(this,arguments) };\n\nsubclass$(PageLoaded,PageAction);\nexports.PageLoaded = PageLoaded; // export class \nPageLoaded.handles(ACTION.PAGE_LOADED,{strategy: 'dedupe'});\n\nPageLoaded.prototype.commit = function (cursor){\n\tif (!this._applied) {\n\t\tthis._applied = true;\n\t\tthis.page().applyInitialState(this._params);\n\t\tthis.page().syncStyleSheets(this.branch().space().files());\n\t};\n\t\n\tthis.browser().setPage(this.page());\n\tthis.page().setLoaded(this);\n\treturn this;\n};\n\nPageLoaded.prototype.revert = function (){\n\tthis.page().setLoaded(null);\n\treturn this;\n};\n\nfunction PageLogAction(){ return PageAction.apply(this,arguments) };\n\nsubclass$(PageLogAction,PageAction);\nexports.PageLogAction = PageLogAction; // export class \nPageLogAction.handles(ACTION.PAGE_LOG,{strategy: 'dedupe'});\n\nPageLogAction.prototype.commit = function (cursor){\n\tthis._page.logs().push(this._params);\n\tif (!cursor.skipping()) {\n\t\tthis.space().emit('log',this);\n\t};\n\treturn this;\n};\n\nPageLogAction.prototype.revert = function (){\n\tlet item = this._page.logs().pop();\n\tif (item != this._params) {\n\t\tconsole.warn(\"PageLogAction reverted incorrectly?\",this._params,item);\n\t};\n\treturn this;\n};\n\nfunction PageHistoryAction(){ return PageAction.apply(this,arguments) };\n\nsubclass$(PageHistoryAction,PageAction);\nexports.PageHistoryAction = PageHistoryAction; // export class \nPageHistoryAction.handles(ACTION.PAGE_HISTORY);\n\nPageHistoryAction.prototype.commit = function (cursor){\n\t// console.log \"page history commit\",@params\n\tthis.browser().setUrl(this.url());\n\t// @page.logs.push(@params)\n\t// if !cursor.skipping\n\t//\tspace.emit('log',self)\n\treturn this;\n};\n\nPageHistoryAction.prototype.action = function (){\n\treturn this._params[0];\n};\n\nPageHistoryAction.prototype.url = function (){\n\treturn this._params[2];\n};\n\nPageHistoryAction.prototype.revert = function (){\n\t// console.log \"page history revert\",@params\n\t// let item = @page.logs.pop\n\t// if item != @params\n\t//\tconsole.warn \"PageLogAction reverted incorrectly?\",@params,item\n\treturn this;\n};\n\n// Add PageLocationAction < PageAction\n\nfunction DOMAction(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(DOMAction,StreamAction);\nexports.DOMAction = DOMAction; // export class \nDOMAction.prototype.commitToStream = function (stream){\n\tDOMAction.prototype.__super__.commitToStream.apply(this,arguments);\n\tthis._target = stream._lastPage;\n\treturn this;\n};\n\nDOMAction.prototype.target = function (){\n\treturn this._target || (this._target = this.space().simulator()._player.bridge());\n};\n\nDOMAction.prototype.browser = function (){\n\treturn this.branch().space().browser();\n};\n\nDOMAction.prototype.node = function (id){\n\treturn this._node || (this._node = this.target().nodeForPath((id == undefined) ? this._params[0] : id));\n};\n\nDOMAction.prototype.isEnabled = function (){\n\treturn true;\n};\n\n\nfunction DOMReset(){ return DOMAction.apply(this,arguments) };\n\nsubclass$(DOMReset,DOMAction);\nexports.DOMReset = DOMReset; // export class \nDOMReset.handles(ACTION.DOM_RESET);\n\nDOMReset.prototype.commit = function (){\n\tthis.target().setFocusNode(null);\n\tthis.target().setActiveNode(null);\n\tthis.target().setHoverNode(null);\n\tthis._rev || (this._rev = [].slice.call(this.target().root().childNodes));\n\tthis.target().setSelection(null);\n\tthis.target().root().innerHTML = '';\n\treturn this.target().reindexNodes();\n};\n\nDOMReset.prototype.revert = function (){\n\tvar root = this.target().root();\n\tfor (let i = 0, items = iter$(this._rev), len = items.length; i < len; i++) {\n\t\troot.appendChild(items[i]);\n\t};\n\tthis.target().setSelection(null);\n\treturn this.target().reindexNodes();\n};\n\nfunction DOMMutate(){ return DOMAction.apply(this,arguments) };\n\nsubclass$(DOMMutate,DOMAction);\nexports.DOMMutate = DOMMutate; // export class \nDOMMutate.handles(ACTION.DOM_MUTATE);\n\nDOMMutate.prototype.commit = function (){\n\ttry {\n\t\tthis.target().applyMutations(this._params);\n\t} catch (e) {\n\t\tthis.log('mutate errored',e);\n\t\tthis._error = e;\n\t\tthis.target().setErrored(this);\n\t};\n\treturn this;\n};\n\nDOMMutate.prototype.revert = function (){\n\tthis.target().revertMutations(this._params,this);\n\treturn this;\n};\n\nfunction DOMSelection(){ return DOMAction.apply(this,arguments) };\n\nsubclass$(DOMSelection,DOMAction);\nexports.DOMSelection = DOMSelection; // export class \nDOMSelection.handles(ACTION.DOM_SELECTION);\n\nDOMSelection.prototype.commit = function (){\n\tvar sel = null;\n\t\n\tif (this._params.length) {\n\t\tthis._params.NODE || (this._params.NODE = this.node());\n\t\tsel = this._params;\n\t};\n\t\n\tthis._rev = this.target().selection();\n\treturn (this.target().setSelection(sel),sel);\n};\n\nDOMSelection.prototype.revert = function (){\n\treturn (this.target().setSelection(this._rev),this._rev);\n};\n\n\nfunction DOMScroll(){ return DOMAction.apply(this,arguments) };\n\nsubclass$(DOMScroll,DOMAction);\nexports.DOMScroll = DOMScroll; // export class \nDOMScroll.handles(ACTION.DOM_SCROLL);\n\nDOMScroll.prototype.commit = function (){\n\tvar node;\n\tif (node = this.node()) {\n\t\tthis._rev || (this._rev = [null,node.scrollLeft,node.scrollTop]);\n\t\tnode.scrollLeft = this._params[1];\n\t\treturn node.scrollTop = this._params[2];\n\t};\n};\n\nDOMScroll.prototype.revert = function (){\n\tif (this._rev) {\n\t\tthis.node().scrollLeft = this._rev[1];\n\t\treturn this.node().scrollTop = this._rev[2];\n\t};\n};\n\nfunction DOMFocusIn(){ return DOMAction.apply(this,arguments) };\n\nsubclass$(DOMFocusIn,DOMAction);\nexports.DOMFocusIn = DOMFocusIn; // export class \nDOMFocusIn.handles(ACTION.DOM_FOCUSIN,['domtarget']);\n\nDOMFocusIn.prototype.commit = function (){\n\tvar v_;\n\tthis._rev = this.target().focusNode();\n\treturn (this.target().setFocusNode(v_ = this.node()),v_);\n};\n\nDOMFocusIn.prototype.revert = function (){\n\treturn (this.target().setFocusNode(this._rev),this._rev);\n};\n\nfunction DOMHoverIn(){ return DOMAction.apply(this,arguments) };\n\nsubclass$(DOMHoverIn,DOMAction);\nexports.DOMHoverIn = DOMHoverIn; // export class \nDOMHoverIn.handles(ACTION.DOM_HOVERIN,['domtarget']);\n\nDOMHoverIn.prototype.commit = function (){\n\tvar v_;\n\tthis._rev = this.target().hoverNode();\n\treturn (this.target().setHoverNode(v_ = this.node()),v_);\n};\n\nDOMHoverIn.prototype.revert = function (){\n\treturn (this.target().setHoverNode(this._rev),this._rev);\n};\n\nfunction DOMActiveIn(){ return DOMAction.apply(this,arguments) };\n\nsubclass$(DOMActiveIn,DOMAction);\nexports.DOMActiveIn = DOMActiveIn; // export class \nDOMActiveIn.handles(ACTION.DOM_ACTIVEIN,['domtarget']);\n\nDOMActiveIn.prototype.commit = function (){\n\tvar v_;\n\tthis._rev = this.target().activeNode();\n\treturn (this.target().setActiveNode(v_ = this.node()),v_);\n};\n\nDOMActiveIn.prototype.revert = function (){\n\treturn (this.target().setActiveNode(this._rev),this._rev);\n};\n\n\n\n\n// RECORDING\n\nfunction RecStart(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(RecStart,StreamAction);\nexports.RecStart = RecStart; // export class \nRecStart.handles(ACTION.RECSTART);\n\nRecStart.prototype.__stop = {watch: 'stopDidSet',name: 'stop'};\nRecStart.prototype.stop = function(v){ return this._stop; }\nRecStart.prototype.setStop = function(v){\n\tvar a = this.stop();\n\tif(v != a) { this._stop = v; }\n\tif(v != a) { this.stopDidSet && this.stopDidSet(v,a,this.__stop) }\n\treturn this;\n};\nRecStart.prototype.audio = function(v){ return this._audio; }\nRecStart.prototype.setAudio = function(v){ this._audio = v; return this; };\n\nRecStart.prototype.commitToStream = function (stream){\n\tvar stop_;\n\tif (this._parent) {\n\t\t(stop_ = this._parent.stop()) || ((this._parent.setStop(this),this));\n\t};\n\t\n\tstream.recordings().push(this);\n\treturn RecStart.prototype.__super__.commitToStream.apply(this,arguments);\n};\n\nRecStart.prototype.removeFromStream = function (stream){\n\tif (this._parent && this._parent.stop() == this) {\n\t\tthis._parent.setStop(null);\n\t};\n\t\n\tstream.recordings().pop();\n\treturn RecStart.prototype.__super__.removeFromStream.apply(this,arguments);\n};\n\nRecStart.prototype.stopDidSet = function (stop,prev){\n\tif (stop) {\n\t\tthis._duration = stop.timeOffset() - this.timeOffset();\n\t\t\n\t\ttry {\n\t\t\tthis._audio = {\n\t\t\t\toffset: this.timeOffset(),\n\t\t\t\tfid: this._params[1].audiofile.id,\n\t\t\t\tspan: this._duration\n\t\t\t};\n\t\t\t\n\t\t\tthis.branch()._stream.audio().add(this._audio);\n\t\t} catch (e) {\n\t\t\ttrue;\n\t\t};\n\t} else if (this._audio) {\n\t\tthis.branch()._stream.audio().remove(this._audio);\n\t};\n\t\n\treturn this;\n};\n\n\nfunction RecStop(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(RecStop,StreamAction);\nexports.RecStop = RecStop; // export class \nRecStop.handles(ACTION.RECSTOP);\n\nRecStop.prototype.recording = function(v){ return this._recording; }\nRecStop.prototype.setRecording = function(v){ this._recording = v; return this; };\n\nRecStop.prototype.commitToStream = function (stream){\n\tvar stop_;\n\tif (this._recording = stream.recordings().last()) {\n\t\t(stop_ = this._recording.stop()) || ((this._recording.setStop(this),this));\n\t};\n\treturn RecStop.prototype.__super__.commitToStream.apply(this,arguments);\n};\n\nRecStop.prototype.removeFromStream = function (stream){\n\tif (this._recording && this._recording.stop() == this) {\n\t\tthis._recording.setStop(null);\n\t};\n\treturn RecStop.prototype.__super__.removeFromStream.apply(this,arguments);\n};\n\nfunction TrimAction(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(TrimAction,StreamAction);\nexports.TrimAction = TrimAction; // export class \nTrimAction.handles(ACTION.TRIM);\n\n\nfunction LockAction(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(LockAction,StreamAction);\nexports.LockAction = LockAction; // export class \nLockAction.handles(ACTION.LOCK);\n\nLockAction.prototype.sid = function (){\n\treturn this._params[0];\n};\n\nLockAction.prototype.uid = function (){\n\treturn this._params[1];\n};\n\nLockAction.prototype.commitToStream = function (stream){\n\t// @prev.@next = self if @prev\n\t// stream.lastActions[@type] = self\n\t// stream.actions.push(self)\n\t// @byteEnd = stream.byteLength\n\tLockAction.prototype.__super__.commitToStream.apply(this,arguments);\n\tstream.setCurrentLock(this);\n\treturn this;\n};\n\n\nfunction LayoutAction(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(LayoutAction,StreamAction);\nexports.LayoutAction = LayoutAction; // export class \nLayoutAction.handles(ACTION.LAYOUT);\n\nLayoutAction.decode = function (params,rel){\n\treturn new this((rel ? Struct.decode(rel,params) : params));\n};\n\nLayoutAction.encode = function (params,rel){\n\treturn rel ? ((Struct.diff(rel,params) || [0])) : params;\n};\n\nLayoutAction.prototype.target = function (){\n\treturn this._branch.__lookup(this._params[12]);\n};\n\nLayoutAction.prototype.commit = function (){\n\t// could use the existing subaction-system\n\tvar target;\n\tif (target = this.target()) {\n\t\tthis._prevValue = target._data.layout;\n\t\ttarget._data.layout = this._params;\n\t};\n\treturn;\n};\n\nLayoutAction.prototype.revert = function (){\n\tthis.target()._data.layout = this._prevValue;\n\treturn;\n};\n\nfunction BrowserLayoutAction(){ return LayoutAction.apply(this,arguments) };\n\nsubclass$(BrowserLayoutAction,LayoutAction);\nexports.BrowserLayoutAction = BrowserLayoutAction; // export class \nBrowserLayoutAction.handles(ACTION.BROWSER_LAYOUT);\n\n// LEGACY\nfunction WidgetAppend(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(WidgetAppend,StreamAction);\nexports.WidgetAppend = WidgetAppend; // export class \nWidgetAppend.handles(ACTION.WIDGET_APPEND);\n\nfunction WidgetFlag(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(WidgetFlag,StreamAction);\nexports.WidgetFlag = WidgetFlag; // export class \nWidgetFlag.handles(ACTION.WIDGET_FLAG,['target','int_flag']);\n\nfunction WidgetUnflag(){ return StreamAction.apply(this,arguments) };\n\nsubclass$(WidgetUnflag,StreamAction);\nexports.WidgetUnflag = WidgetUnflag; // export class \nWidgetUnflag.handles(ACTION.WIDGET_UNFLAG,['target','int_flag']);\n\n\n\n\n// ACTION.DOM_RESET = DOM.RESET = 60\n// ACTION.DOM_INSERT = DOM.INSERT = 61\n// ACTION.DOM_MUTATE = DOM.MUTATE = 65\n// ACTION.DOM_EVENT = DOM.EVENT = 80\n// ACTION.DOM_SCROLL = DOM.SCROLL = 81\n// ACTION.DOM_FOCUSIN = DOM.FOCUSIN = 82 # [path]\n// ACTION.DOM_FOCUSOUT = DOM.FOCUSOUT = 83 # [path]\n// ACTION.DOM_HOVERIN = DOM.HOVERIN = 84\n// ACTION.DOM_HOVEROUT = DOM.HOVEROUT = 85\n// ACTION.DOM_ACTIVEIN = DOM.ACTIVEIN = 86\n// ACTION.DOM_ACTIVEOUT = DOM.ACTIVEOUT = 87\n// ACTION.DOM_SELECTION = DOM.SELECTION = 88 # also in state?", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/);\nvar protocol$ = require('../protocol'), WIDGET = protocol$.WIDGET, SCON = protocol$.SCON, ACTION = protocol$.ACTION, WIDGET_TYPE_MAP = protocol$.WIDGET_TYPE_MAP;\nvar Widgets = require('./widgets').Widgets;\nvar WidgetOptions = require('./WidgetOptions').WidgetOptions;\nvar StreamAction = require('../core/StreamAction').StreamAction;\n\nvar F = WIDGET.FLAGS;\n\nfunction Widget(owner,data,action){\n\tthis.__ = {};\n\tthis._owner = owner;\n\tthis._id = data.id;\n\tthis._data = data;\n\tthis._state = {v: 0};\n\tthis._event = action;\n\tthis._branch = action && action.branch() || this.space().branch();\n\tthis._isLocal = !(this.event()) || this.event().LOCAL;\n\tthis.setup();\n\tthis;\n};\n\nexports.Widget = Widget; // export class \nWidget.prototype.id = function(v){ return this._id; }\nWidget.prototype.setId = function(v){ this._id = v; return this; };\nWidget.prototype.owner = function(v){ return this._owner; }\nWidget.prototype.setOwner = function(v){ this._owner = v; return this; };\nWidget.prototype.data = function(v){ return this._data; }\nWidget.prototype.setData = function(v){ this._data = v; return this; };\nWidget.prototype.state = function(v){ return this._state; }\nWidget.prototype.setState = function(v){ this._state = v; return this; };\nWidget.prototype.localData = function(v){ return this._localData; }\nWidget.prototype.setLocalData = function(v){ this._localData = v; return this; };\nWidget.prototype.isLocal = function(v){ return this._isLocal; }\nWidget.prototype.setIsLocal = function(v){ this._isLocal = v; return this; };\nWidget.prototype.event = function(v){ return this._event; }\nWidget.prototype.setEvent = function(v){ this._event = v; return this; };\n\nWidget.register = function (code,protocol){\n\tvar WIDGET_TYPE_MAP_;\n\tWIDGET_TYPE_MAP[code] || (WIDGET_TYPE_MAP[code] = this);\n\treturn Widgets.register(code,this);\n};\n\nWidget.load = function (owner,data,e){\n\treturn owner.widgets().get(data.id) || owner.widgets().create(data.type,data,e);\n};\n\nWidget.option = function (name,o){\n\tif(o === undefined) o = {};\n\tvar proto = this.prototype;\n\tvar props = proto._schema_;\n\t\n\to.name = name;\n\t\n\tif (!proto.hasOwnProperty('_schema_')) {\n\t\tproto._schema_ = [];\n\t\tif (props) {\n\t\t\tfor (let i = 0, items = iter$(props), len = items.length, item; i < len; i++) {\n\t\t\t\titem = items[i];\n\t\t\t\tthis.option(item.name,item);\n\t\t\t};\n\t\t};\n\t\tprops = proto._schema_;\n\t};\n\t\n\tif (props[name]) {\n\t\tprops[name] = o;\n\t\treturn;\n\t};\n\t\n\tprops.push(o);\n\tprops[name] = o;\n\t\n\tproto[name] = function(v) {\n\t\treturn this.options().get(name,v);\n\t};\n\t\n\tproto[Imba.toCamelCase((\"set-\" + name))] = function(value) {\n\t\tthis.options().set(name,value,o);\n\t\treturn this;\n\t};\n\t\n\treturn o;\n};\n\nWidget.register('widget');\n\n\nWidget.prototype.id = function (){\n\treturn this._id;\n};\n\nWidget.prototype.key = function (){\n\treturn this.id();\n};\n\nWidget.prototype.v = function (){\n\treturn this._options ? this._options._v : 0;\n};\n\nWidget.prototype.options = function (){\n\treturn this._options || (this._options = new WidgetOptions(this));\n};\n\nWidget.prototype.optionsDidUpdate = function (changes){\n\treturn this;\n};\n\n// helper\nWidget.prototype.delay = function (name,time,blk){\n\tvar self = this, $1;\n\tself._timeouts || (self._timeouts = {});\n\tclearTimeout(self._timeouts[name]);\n\t\n\tif (!blk) {\n\t\tblk = self._timeouts[$1 = name + 'FN'] || (self._timeouts[$1] = function() { return self[name](); });\n\t};\n\t\n\tif (time != -1) { self._timeouts[name] = setTimeout(blk,time) };\n\treturn self;\n};\n\nWidget.prototype.async = function (name){\n\tvar self = this;\n\tself._asyncTriggers || (self._asyncTriggers = {});\n\tvar fn = self._asyncTriggers[name] || (self._asyncTriggers[name] = function() { return self[name](); });\n\tImba.TICKER.add(fn);\n\treturn self;\n};\n\nWidget.prototype.__uid = function (){\n\tif (this._owner == this.space()) {\n\t\treturn this.id();\n\t};\n\t\n\tif (this._wid) {\n\t\treturn this._wid;\n\t};\n\t\n\tvar item = this;\n\tvar uid = this._wid = [];\n\twhile (item instanceof Widget){\n\t\tuid.unshift(item.id());\n\t\titem = item._owner;\n\t};\n\treturn this._wid;\n};\n\nWidget.prototype.__lookup = function (ref,idx){\n\tif(idx === undefined) idx = 0;\n\tvar item;\n\tif (ref instanceof Array) {\n\t\titem = this.getChildById(ref[idx++]);\n\t\treturn (idx == ref.length) ? item : item.__lookup(ref,idx);\n\t};\n\treturn this.getChildById(ref);\n};\n\nWidget.prototype.getChildById = function (id){\n\treturn this.widgets().get(id);\n};\n\nWidget.prototype.setup = function (){\n\treturn this;\n};\n\nWidget.prototype.space = function (){\n\treturn this._space || (this._space = this._owner && this._owner.space());\n};\n\nWidget.prototype.branch = function (){\n\treturn this._branch; // @event ? @event.@branch : @owner\n};\n\nWidget.prototype.root_ = function (){\n\treturn this.space();\n};\n\nWidget.prototype.client = function (){\n\treturn this.space().client();\n};\n\nWidget.prototype.api = function (){\n\treturn this.space().api();\n};\n\nWidget.prototype.tick_ = function (){\n\treturn this;\n};\n\nWidget.prototype.widgets = function (){\n\treturn this._widgets || (this._widgets = new Widgets(this));\n};\n\nWidget.prototype.isEnabled = function (){\n\treturn true;\n};\n\nWidget.prototype.getAttribute = function (key){\n\treturn this.data()[key];\n};\n\nWidget.prototype.setAttribute = function (key,value){\n\tthis.data()[key] = value;\n\treturn this;\n};\n// does it really need to go through directly\nWidget.prototype.configure = function (obj){\n\tthis.options().set(obj);\n\treturn this;\n};\n\nWidget.prototype.commitAdd = function (){\n\treturn this.mount_();\n\t// owner.widgets.add(self,@id)\n};\n\nWidget.prototype.revertAdd = function (){\n\treturn this.unmount_();\n\t// owner.widgets.remove(self)\n};\n\nWidget.prototype.commitDel = function (){\n\treturn this.unmount_();\n\t// owner.widgets.remove(self)\n};\n\nWidget.prototype.revertDel = function (){\n\treturn this.mount_();\n\t// owner.widgets.add(self,@id)\n};\n\nWidget.prototype.mount_ = function (){\n\tthis.owner().widgets().add(this,this._id);\n\treturn this;\n};\n\nWidget.prototype.unmount_ = function (){\n\tthis.owner().widgets().remove(this);\n\treturn this;\n};\n\nWidget.prototype.preload = function (){\n\treturn this;\n};\n\nWidget.prototype.node = function (){\n\tvar _t1;\n\treturn this._node || (this._node = (_1('div')));\n};\n\nWidget.prototype.title = function (){\n\treturn 'Widget';\n};\n\nWidget.prototype.marker = function (){\n\treturn null;\n};\n\nWidget.prototype.log = function (){\n\tvar api_;\n\tvar $0 = arguments, i = $0.length;\n\tvar pars = new Array(i>0 ? i : 0);\n\twhile(i>0) pars[i-1] = $0[--i];\n\treturn (api_ = this.api()).log.apply(api_,[].concat(['widget:' + this.TYPE], Array.from(pars)));\n\t// console.log \"Widget\", *pars\n};\n\nWidget.prototype.push_ = function (code,params,o){\n\tif (!o) { o = this.state() };\n\t// create action here already?\n\tlet action = this.action(code,params,o);\n\treturn this.root_().__push(action,o);\n};\n\nWidget.prototype.batch_ = function (pairs,o){\n\tif (!o) { o = this.state() };\n\tfor (let i = 0, items = iter$(pairs), len = items.length, item; i < len; i++) {\n\t\titem = items[i];\n\t\tthis.push_(item[0],item[1],o);\n\t};\n\treturn this;\n};\n\nWidget.prototype.action = function (code,params,state){\n\treturn StreamAction.type(code).build(params,state,this);\n};\n\nWidget.prototype.append = function (agent,code,params,e){\n\t// console.log 'Widget.append',code\n\treturn this;\n};\n\nWidget.prototype.apply = function (agent,code,op,action){\n\treturn op ? false : true;\n};\n\nWidget.prototype.revert = function (agent,code,op,action){\n\treturn op ? false : true;\n};\n\n// destroy the whole widget, teardown bindings, nodes etc.\n// this is only called by the space if the initial WIDGET.CREATE\n// event is removed from the stream\nWidget.prototype.destroy_ = function (){\n\t// -- remove widgets - clear models and more\n\tconsole.warn(\"destroy widget\");\n\treturn this.owner().widgets().remove(this);\n};\n\nWidget.prototype.persist_ = function (){\n\treturn this;\n};\n\n/*\n\tCalled for every widget that has received one or more events\n\tduring the last batch of events. It is called synchronously,\n\tbut after all events in a seek has been applied/reverted.\n\n\tIe. if a user skips through the whole stream, synced_ will\n\tonly be called once for each widget that handled events.\n\t*/\n\nWidget.prototype.synced_ = function (){\n\tthis._options && this._options.synced_ && this._options.synced_();\n\treturn this;\n};\n\nWidget.prototype.focus_ = function (){\n\treturn this.space().agent() && ((this.space().agent().setFocus(this),this));\n};\n\nWidget.prototype.blur_ = function (){\n\tvar v_;\n\tif (this.isFocused()) {\n\t\tconsole.log('try to blur widget!',this);\n\t\treturn (this.space().agent().setFocus(v_ = this.space().agent().prevFocus()),v_);\n\t};\n};\n\nWidget.prototype.isFocused = function (){\n\treturn this.space().agent() && this.space().agent().focus() == this;\n};\n\nWidget.prototype.toggleFocus = function (){\n\treturn this.isFocused() ? this.blur_() : this.focus_();\n};\n\n\nWidget.prototype.serialize = function (o,state){\n\tvar v_;\n\tthis.persist_();\n\tvar data = SCON.clone(this.data());\n\t(((v_ = data.state),delete data.state, v_)); // from server\n\t\n\tif (o.local && this._options && this._options._overrides) {\n\t\tfor (let o1 = this._options._overrides, v, i = 0, keys = Object.keys(o1), l = keys.length, k; i < l; i++){\n\t\t\tk = keys[i];v = o1[k];data[k] = v;\n\t\t};\n\t};\n\t\n\tif (this._widgets) {\n\t\tdata.widgets = this._widgets.map(function(item) { return item.serialize(o,item,state); }).filter(function(_0) { return _0; });\n\t};\n\t\n\treturn data;\n};\n\nWidget.prototype.deserialize = function (o,state){\n\t// reset config options?\n\tvar data = this.data();\n\t\n\t// default options should not be overridden\n\tfor (let v, i = 0, keys = Object.keys(data), l = keys.length, k; i < l; i++){\n\t\tk = keys[i];v = data[k];if (o[k] === undefined) {\n\t\t\to[k] = v;\n\t\t};\n\t};\n\t\n\tthis._data = o; // is this correct though?\n\tif (this._options) { this._options._v++ };\n\t\n\tstate.items.push(this);\n\tthis.owner().widgets().add(this,this._id); // add to widgets list immediately\n\tif (o.widgets) { this.deserializeWidgets(o.widgets,state) };\n\t// console.log \"widget deserialize!\",self\n\t// deserialized\n\treturn this;\n};\n\nWidget.prototype.deserializeWidgets = function (widgets,state){\n\tstate.stack.push(this);\n\tfor (let i = 0, items = iter$(widgets), len = items.length, item; i < len; i++) {\n\t\titem = items[i];\n\t\tWidget.load(this,item,state.event).deserialize(item,state);\n\t};\n\treturn state.stack.pop();\n};\n\nWidget.prototype.deserialized = function (){\n\tthis.commitAdd();\n\treturn this;\n};\n\nWidget.prototype.emit = function (name){\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.emit(this,name,params);\n};\n\nWidget.prototype.on = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.listen.apply(Imba,[].concat([this,name], Array.from(params)));\n};\n\nWidget.prototype.un = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.unlisten.apply(Imba,[].concat([this,name], Array.from(params)));\n};\n\nWidget.prototype.createWidget = function (pkg,extra){\n\t// not really sure we need this many things\n\tif(extra === undefined) extra = {};\n\tpkg.id = this.widgets().getNextId();\n\treturn this.push_(WIDGET.CREATE,[this.__uid(),pkg],extra);\n};\n\nWidget.prototype.isLocal = function (){\n\treturn this._isLocal;\n};\n\nWidget.prototype.dispose = function (){\n\treturn this;\n};\n\nWidget.prototype.valueOf = function (type){\n\treturn this.__uid();\n};\n\n", "/*\nWildEmitter.js is a slim little event emitter by @henrikjoreteg largely based\non @visionmedia's Emitter from UI Kit.\n\nWhy? I wanted it standalone.\n\nI also wanted support for wildcard emitters like this:\n\nemitter.on('*', function (eventName, other, event, payloads) {\n\n});\n\nemitter.on('somenamespace*', function (eventName, payloads) {\n\n});\n\nPlease note that callbacks triggered by wildcard registered events also get\nthe event name as the first argument.\n*/\n\nmodule.exports = WildEmitter;\n\nfunction WildEmitter() { }\n\nWildEmitter.mixin = function (constructor) {\n var prototype = constructor.prototype || constructor;\n\n prototype.isWildEmitter= true;\n\n // Listen on the given `event` with `fn`. Store a group name if present.\n prototype.on = function (event, groupName, fn) {\n this.callbacks = this.callbacks || {};\n var hasGroup = (arguments.length === 3),\n group = hasGroup ? arguments[1] : undefined,\n func = hasGroup ? arguments[2] : arguments[1];\n func._groupName = group;\n (this.callbacks[event] = this.callbacks[event] || []).push(func);\n return this;\n };\n\n // Adds an `event` listener that will be invoked a single\n // time then automatically removed.\n prototype.once = function (event, groupName, fn) {\n var self = this,\n hasGroup = (arguments.length === 3),\n group = hasGroup ? arguments[1] : undefined,\n func = hasGroup ? arguments[2] : arguments[1];\n function on() {\n self.off(event, on);\n func.apply(this, arguments);\n }\n this.on(event, group, on);\n return this;\n };\n\n // Unbinds an entire group\n prototype.releaseGroup = function (groupName) {\n this.callbacks = this.callbacks || {};\n var item, i, len, handlers;\n for (item in this.callbacks) {\n handlers = this.callbacks[item];\n for (i = 0, len = handlers.length; i < len; i++) {\n if (handlers[i]._groupName === groupName) {\n //console.log('removing');\n // remove it and shorten the array we're looping through\n handlers.splice(i, 1);\n i--;\n len--;\n }\n }\n }\n return this;\n };\n\n // Remove the given callback for `event` or all\n // registered callbacks.\n prototype.off = function (event, fn) {\n this.callbacks = this.callbacks || {};\n var callbacks = this.callbacks[event],\n i;\n\n if (!callbacks) return this;\n\n // remove all handlers\n if (arguments.length === 1) {\n delete this.callbacks[event];\n return this;\n }\n\n // remove specific handler\n i = callbacks.indexOf(fn);\n if (i !== -1) {\n callbacks.splice(i, 1);\n if (callbacks.length === 0) {\n delete this.callbacks[event];\n }\n }\n return this;\n };\n\n /// Emit `event` with the given args.\n // also calls any `*` handlers\n prototype.emit = function (event) {\n this.callbacks = this.callbacks || {};\n var args = [].slice.call(arguments, 1),\n callbacks = this.callbacks[event],\n specialCallbacks = this.getWildcardCallbacks(event),\n i,\n len,\n item,\n listeners;\n\n if (callbacks) {\n listeners = callbacks.slice();\n for (i = 0, len = listeners.length; i < len; ++i) {\n if (!listeners[i]) {\n break;\n }\n listeners[i].apply(this, args);\n }\n }\n\n if (specialCallbacks) {\n len = specialCallbacks.length;\n listeners = specialCallbacks.slice();\n for (i = 0, len = listeners.length; i < len; ++i) {\n if (!listeners[i]) {\n break;\n }\n listeners[i].apply(this, [event].concat(args));\n }\n }\n\n return this;\n };\n\n // Helper for for finding special wildcard event handlers that match the event\n prototype.getWildcardCallbacks = function (eventName) {\n this.callbacks = this.callbacks || {};\n var item,\n split,\n result = [];\n\n for (item in this.callbacks) {\n split = item.split('*');\n if (item === '*' || (split.length === 2 && eventName.slice(0, split[0].length) === split[0])) {\n result = result.concat(this.callbacks[item]);\n }\n }\n return result;\n };\n\n};\n\nWildEmitter.mixin(WildEmitter);\n", "var WildEmitter = require('wildemitter');\n\nfunction getMaxVolume (analyser, fftBins) {\n var maxVolume = -Infinity;\n analyser.getFloatFrequencyData(fftBins);\n\n for(var i=4, ii=fftBins.length; i < ii; i++) {\n if (fftBins[i] > maxVolume && fftBins[i] < 0) {\n maxVolume = fftBins[i];\n }\n };\n\n return maxVolume;\n}\n\n\nvar audioContextType;\nif (typeof window !== 'undefined') {\n audioContextType = window.AudioContext || window.webkitAudioContext;\n}\n// use a single audio context due to hardware limits\nvar audioContext = null;\nmodule.exports = function(stream, options) {\n var harker = new WildEmitter();\n\n // make it not break in non-supported browsers\n if (!audioContextType) return harker;\n\n //Config\n var options = options || {},\n smoothing = (options.smoothing || 0.1),\n interval = (options.interval || 50),\n threshold = options.threshold,\n play = options.play,\n history = options.history || 10,\n running = true;\n\n // Ensure that just a single AudioContext is internally created\n audioContext = options.audioContext || audioContext || new audioContextType();\n\n var sourceNode, fftBins, analyser;\n\n analyser = audioContext.createAnalyser();\n analyser.fftSize = 512;\n analyser.smoothingTimeConstant = smoothing;\n fftBins = new Float32Array(analyser.frequencyBinCount);\n\n if (stream.jquery) stream = stream[0];\n if (stream instanceof HTMLAudioElement || stream instanceof HTMLVideoElement) {\n //Audio Tag\n sourceNode = audioContext.createMediaElementSource(stream);\n if (typeof play === 'undefined') play = true;\n threshold = threshold || -50;\n } else {\n //WebRTC Stream\n sourceNode = audioContext.createMediaStreamSource(stream);\n threshold = threshold || -50;\n }\n\n sourceNode.connect(analyser);\n if (play) analyser.connect(audioContext.destination);\n\n harker.speaking = false;\n\n harker.suspend = function() {\n return audioContext.suspend();\n }\n harker.resume = function() {\n return audioContext.resume();\n }\n Object.defineProperty(harker, 'state', { get: function() {\n return audioContext.state;\n }});\n audioContext.onstatechange = function() {\n harker.emit('state_change', audioContext.state);\n }\n\n harker.setThreshold = function(t) {\n threshold = t;\n };\n\n harker.setInterval = function(i) {\n interval = i;\n };\n\n harker.stop = function() {\n running = false;\n harker.emit('volume_change', -100, threshold);\n if (harker.speaking) {\n harker.speaking = false;\n harker.emit('stopped_speaking');\n }\n analyser.disconnect();\n sourceNode.disconnect();\n };\n harker.speakingHistory = [];\n for (var i = 0; i < history; i++) {\n harker.speakingHistory.push(0);\n }\n\n // Poll the analyser node to determine if speaking\n // and emit events if changed\n var looper = function() {\n setTimeout(function() {\n\n //check if stop has been called\n if(!running) {\n return;\n }\n\n var currentVolume = getMaxVolume(analyser, fftBins);\n\n harker.emit('volume_change', currentVolume, threshold);\n\n var history = 0;\n if (currentVolume > threshold && !harker.speaking) {\n // trigger quickly, short history\n for (var i = harker.speakingHistory.length - 3; i < harker.speakingHistory.length; i++) {\n history += harker.speakingHistory[i];\n }\n if (history >= 2) {\n harker.speaking = true;\n harker.emit('speaking');\n }\n } else if (currentVolume < threshold && harker.speaking) {\n for (var i = 0; i < harker.speakingHistory.length; i++) {\n history += harker.speakingHistory[i];\n }\n if (history == 0) {\n harker.speaking = false;\n harker.emit('stopped_speaking');\n }\n }\n harker.speakingHistory.shift();\n harker.speakingHistory.push(0 + (currentVolume > threshold));\n\n looper();\n }, interval);\n };\n looper();\n\n return harker;\n}\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar Dialog = require('uxa1').Dialog;\nvar LongPromise = require('../util/LongPromise').LongPromise;\n\nvar util = require('../util');\n\nvar RecDoneDialog = _2.defineTag('RecDoneDialog', Dialog, function(tag){\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._body = this._body||(t0=_1('div',this)).flag('body').setContent([\n\t\t\t_1('h2',t0.$,'A',t0).setText('Save recording?'),\n\t\t\t_1('p',t0.$,'B',t0).setText('Keep your recording by clicking the \"Save recording\" button or discard it with the \"Discard recording\" button.')\n\t\t],2));\n\t};\n\t\n\ttag.prototype.cancelLabel = function (){\n\t\treturn \"Discard recording\";\n\t};\n\t\n\ttag.prototype.submitLabel = function (){\n\t\treturn \"Save recording\";\n\t};\n\t\n\t\n\ttag.prototype.onuxadismiss = function (){\n\t\tvar self = this;\n\t\treturn self.uxa().queue().add(300,function() { return self.data().discard(); });\n\t};\n\t\n\ttag.prototype.onuxasubmit = function (){\n\t\tvar self = this;\n\t\treturn self.uxa().queue().add(300,function() { return self.data().finish(); });\n\t};\n})\nexports.RecDoneDialog = RecDoneDialog;\n", "\"use strict\";\n\n/**\n * Segments are an easy way to keep track of portions of the described\n * audio file.\n *\n * They return values based on the actual offset. Which means if you change your\n * offset and:\n *\n * * a segment becomes **out of scope**, no data will be returned;\n * * a segment is only **partially included in the offset**, only the visible\n * parts will be returned;\n * * a segment is **fully included in the offset**, its whole content will be\n * returned.\n *\n * Segments are created with the `WaveformData.set_segment(from, to, name?)`\n * method.\n *\n * @see WaveformData.prototype.set_segment\n * @param {WaveformData} context WaveformData instance\n * @param {Integer} start Initial start index\n * @param {Integer} end Initial end index\n * @constructor\n */\n\nfunction WaveformDataSegment(context, start, end) {\n this.context = context;\n\n /**\n * Start index.\n *\n * ```javascript\n * var waveform = new WaveformData({ ... }, WaveformData.adapters.object);\n * waveform.set_segment(10, 50, \"example\");\n *\n * console.log(waveform.segments.example.start); // -> 10\n *\n * waveform.offset(20, 50);\n * console.log(waveform.segments.example.start); // -> 10\n *\n * waveform.offset(70, 100);\n * console.log(waveform.segments.example.start); // -> 10\n * ```\n * @type {Integer} Initial starting point of the segment.\n */\n\n this.start = start;\n\n /**\n * End index.\n *\n * ```javascript\n * var waveform = new WaveformData({ ... }, WaveformData.adapters.object);\n * waveform.set_segment(10, 50, \"example\");\n *\n * console.log(waveform.segments.example.end); // -> 50\n *\n * waveform.offset(20, 50);\n * console.log(waveform.segments.example.end); // -> 50\n *\n * waveform.offset(70, 100);\n * console.log(waveform.segments.example.end); // -> 50\n * ```\n * @type {Integer} Initial ending point of the segment.\n */\n\n this.end = end;\n}\n\n/**\n * @namespace WaveformDataSegment\n */\n\nWaveformDataSegment.prototype = {\n /**\n * Dynamic starting point based on the WaveformData instance offset.\n *\n * ```javascript\n * var waveform = new WaveformData({ ... }, WaveformData.adapters.object);\n * waveform.set_segment(10, 50, \"example\");\n *\n * console.log(waveform.segments.example.offset_start); // -> 10\n *\n * waveform.offset(20, 50);\n * console.log(waveform.segments.example.offset_start); // -> 20\n *\n * waveform.offset(70, 100);\n * console.log(waveform.segments.example.offset_start); // -> null\n * ```\n *\n * @return {number} Starting point of the segment within the waveform offset. (inclusive)\n */\n\n get offset_start() {\n if (this.start < this.context.offset_start && this.end > this.context.offset_start) {\n return this.context.offset_start;\n }\n\n if (this.start >= this.context.offset_start && this.start < this.context.offset_end) {\n return this.start;\n }\n\n return null;\n },\n\n /**\n * Dynamic ending point based on the WaveformData instance offset.\n *\n * ```javascript\n * var waveform = new WaveformData({ ... }, WaveformData.adapters.object);\n * waveform.set_segment(10, 50, \"example\");\n *\n * console.log(waveform.segments.example.offset_end); // -> 50\n *\n * waveform.offset(20, 50);\n * console.log(waveform.segments.example.offset_end); // -> 50\n *\n * waveform.offset(70, 100);\n * console.log(waveform.segments.example.offset_end); // -> null\n * ```\n *\n * @return {number} Ending point of the segment within the waveform offset. (exclusive)\n */\n\n get offset_end() {\n if (this.end > this.context.offset_start && this.end <= this.context.offset_end) {\n return this.end;\n }\n\n if (this.end > this.context.offset_end && this.start < this.context.offset_end) {\n return this.context.offset_end;\n }\n\n return null;\n },\n\n /**\n * Dynamic segment length based on the WaveformData instance offset.\n *\n * ```javascript\n * var waveform = new WaveformData({ ... }, WaveformData.adapters.object);\n * waveform.set_segment(10, 50, \"example\");\n *\n * console.log(waveform.segments.example.offset_length); // -> 40\n *\n * waveform.offset(20, 50);\n * console.log(waveform.segments.example.offset_length); // -> 30\n *\n * waveform.offset(70, 100);\n * console.log(waveform.segments.example.offset_length); // -> 0\n * ```\n *\n * @return {number} Visible length of the segment within the waveform offset.\n */\n\n get offset_length() {\n return this.offset_end - this.offset_start;\n },\n\n /**\n * Initial length of the segment.\n *\n * ```javascript\n * var waveform = new WaveformData({ ... }, WaveformData.adapters.object);\n * waveform.set_segment(10, 50, \"example\");\n *\n * console.log(waveform.segments.example.length); // -> 40\n *\n * waveform.offset(20, 50);\n * console.log(waveform.segments.example.length); // -> 40\n *\n * waveform.offset(70, 100);\n * console.log(waveform.segments.example.length); // -> 40\n * ```\n *\n * @return {number} Initial length of the segment.\n */\n\n get length() {\n return this.end - this.start;\n },\n\n /**\n * Indicates if the segment has some visible part in the actual WaveformData offset.\n *\n * ```javascript\n * var waveform = new WaveformData({ ... }, WaveformData.adapters.object);\n * waveform.set_segment(10, 50, \"example\");\n *\n * console.log(waveform.segments.example.visible); // -> true\n *\n * waveform.offset(20, 50);\n * console.log(waveform.segments.example.visible); // -> true\n *\n * waveform.offset(70, 100);\n * console.log(waveform.segments.example.visible); // -> false\n * ```\n *\n * @return {Boolean} True if at least partly visible, false otherwise.\n */\n\n get visible() {\n return this.context.in_offset(this.start) ||\n this.context.in_offset(this.end) ||\n (this.context.offset_start > this.start && this.context.offset_start < this.end);\n },\n\n /**\n * Return the minimum values for the segment.\n *\n * ```javascript\n * var waveform = new WaveformData({ ... }, WaveformData.adapters.object);\n * waveform.set_segment(10, 50, \"example\");\n *\n * console.log(waveform.segments.example.min.length); // -> 40\n * console.log(waveform.segments.example.min.offset_length); // -> 40\n * console.log(waveform.segments.example.min[0]); // -> -12\n *\n * waveform.offset(20, 50);\n *\n * console.log(waveform.segments.example.min.length); // -> 40\n * console.log(waveform.segments.example.min.offset_length); // -> 30\n * console.log(waveform.segments.example.min[0]); // -> -5\n * ```\n *\n * @return {Array.<Integer>} Min values of the segment.\n */\n\n get min() {\n return this.visible ? this.context.offsetValues(this.offset_start, this.offset_length, 0) : [];\n },\n\n /**\n * Return the maximum values for the segment.\n *\n * ```javascript\n * var waveform = new WaveformData({ ... }, WaveformData.adapters.object);\n * waveform.set_segment(10, 50, \"example\");\n *\n * console.log(waveform.segments.example.max.length); // -> 40\n * console.log(waveform.segments.example.max.offset_length); // -> 40\n * console.log(waveform.segments.example.max[0]); // -> 5\n *\n * waveform.offset(20, 50);\n *\n * console.log(waveform.segments.example.max.length); // -> 40\n * console.log(waveform.segments.example.max.offset_length); // -> 30\n * console.log(waveform.segments.example.max[0]); // -> 11\n * ```\n *\n * @return {Array.<Integer>} Max values of the segment.\n */\n\n get max() {\n return this.visible ? this.context.offsetValues(this.offset_start, this.offset_length, 1) : [];\n }\n};\n\nmodule.exports = WaveformDataSegment;\n", "\"use strict\";\n\n/**\n * Points are an easy way to keep track bookmarks of the described audio file.\n *\n * They return values based on the actual offset. Which means if you change your offset and:\n *\n * * a point becomes **out of scope**, no data will be returned;\n * * a point is **fully included in the offset**, its whole content will be returned.\n *\n * Points are created with the `WaveformData.set_point(timeStamp, name?)` method.\n *\n * @see WaveformData.prototype.set_point\n * @param {WaveformData} context WaveformData instance\n * @param {Integer} start Initial start index\n * @param {Integer} end Initial end index\n * @constructor\n */\n\nfunction WaveformDataPoint(context, timeStamp) {\n this.context = context;\n\n /**\n * Start index.\n *\n * ```javascript\n * var waveform = new WaveformData({ ... }, WaveformData.adapters.object);\n * waveform.set_point(10, \"example\");\n *\n * console.log(waveform.points.example.timeStamp); // -> 10\n *\n * waveform.offset(20, 50);\n * console.log(waveform.points.example.timeStamp); // -> 10\n *\n * waveform.offset(70, 100);\n * console.log(waveform.points.example.timeStamp); // -> 10\n * ```\n * @type {Integer} Time Stamp of the point\n */\n\n this.timeStamp = timeStamp;\n}\n\n/**\n * @namespace WaveformDataPoint\n */\n\nWaveformDataPoint.prototype = {\n /**\n * Indicates if the point has some visible part in the actual WaveformData offset.\n *\n * ```javascript\n * var waveform = new WaveformData({ ... }, WaveformData.adapters.object);\n * waveform.set_point(10, \"example\");\n *\n * console.log(waveform.points.example.visible); // -> true\n *\n * waveform.offset(0, 50);\n * console.log(waveform.points.example.visible); // -> true\n *\n * waveform.offset(70, 100);\n * console.log(waveform.points.example.visible); // -> false\n * ```\n *\n * @return {Boolean} True if visible, false otherwise.\n */\n\n get visible() {\n return this.context.in_offset(this.timeStamp);\n }\n};\n\nmodule.exports = WaveformDataPoint;\n", "\"use strict\";\n\nvar WaveformDataSegment = require(\"./segment\");\nvar WaveformDataPoint = require(\"./point\");\n\n/**\n * Facade to iterate on audio waveform response.\n *\n * ```javascript\n * var waveform = new WaveformData({ ... }, WaveformData.adapters.object);\n *\n * var json_waveform = new WaveformData(xhr.responseText, WaveformData.adapters.object);\n *\n * var arraybuff_waveform = new WaveformData(\n * getArrayBufferData(),\n * WaveformData.adapters.arraybuffer\n * );\n * ```\n *\n * ## Offsets\n *\n * An **offset** is a non-destructive way to iterate on a subset of data.\n *\n * It is the easiest way to **navigate** through data without having to deal\n * with complex calculations. Simply iterate over the data to display them.\n *\n * *Notice*: the default offset is the entire set of data.\n *\n * @param {String|ArrayBuffer|Mixed} response_data Waveform data,\n * to be consumed by the related adapter.\n * @param {WaveformData.adapter|Function} adapter Backend adapter used to manage\n * access to the data.\n * @constructor\n */\n\nfunction WaveformData(response_data, adapter) {\n /**\n * Backend adapter used to manage access to the data.\n *\n * @type {Object}\n */\n\n this.adapter = adapter.fromResponseData(response_data);\n\n /**\n * Defined segments.\n *\n * ```javascript\n * var waveform = new WaveformData({ ... }, WaveformData.adapters.object);\n *\n * console.log(waveform.segments.speakerA); // -> undefined\n *\n * waveform.set_segment(30, 90, \"speakerA\");\n *\n * console.log(waveform.segments.speakerA.start); // -> 30\n * ```\n *\n * @type {Object} A hash of `WaveformDataSegment` objects.\n */\n\n this.segments = {};\n\n /**\n * Defined points.\n *\n * ```javascript\n * var waveform = new WaveformData({ ... }, WaveformData.adapters.object);\n *\n * console.log(waveform.points.speakerA); // -> undefined\n *\n * waveform.set_point(30, \"speakerA\");\n *\n * console.log(waveform.points.speakerA.timeStamp); // -> 30\n * ```\n *\n * @type {Object} A hash of `WaveformDataPoint` objects.\n */\n\n this.points = {};\n\n this.offset(0, this.adapter.length);\n}\n\n/**\n * Creates an instance of WaveformData by guessing the adapter from the\n * data type. It can also accept an XMLHttpRequest response.\n *\n * ```javascript\n * var xhr = new XMLHttpRequest();\n * xhr.open(\"GET\", \"http://example.com/waveforms/track.dat\");\n * xhr.responseType = \"arraybuffer\";\n *\n * xhr.addEventListener(\"load\", function onResponse(progressEvent) {\n * var waveform = WaveformData.create(progressEvent.target);\n *\n * console.log(waveform.duration);\n * });\n *\n * xhr.send();\n * ```\n *\n * @static\n * @throws TypeError\n * @param {XMLHttpRequest|Mixed} data\n * @return {WaveformData}\n */\n\nWaveformData.create = function createFromResponseData(data) {\n var adapter = null;\n var xhrData = null;\n\n if (data && typeof data === \"object\" && (\"responseText\" in data || \"response\" in data)) {\n xhrData = (\"responseType\" in data) ? data.response : (data.responseText || data.response);\n }\n\n Object.keys(WaveformData.adapters).some(function(adapter_id) {\n if (WaveformData.adapters[adapter_id].isCompatible(xhrData || data)) {\n adapter = WaveformData.adapters[adapter_id];\n return true;\n }\n });\n\n if (adapter === null) {\n throw new TypeError(\"Could not detect a WaveformData adapter from the input.\");\n }\n\n return new WaveformData(xhrData || data, adapter);\n};\n\n/**\n * Public API for the Waveform Data manager.\n *\n * @namespace WaveformData\n */\n\nWaveformData.prototype = {\n /**\n * Clamp an offset of data upon the whole response body.\n * Pros: it's just a reference, not a new array. So it's fast.\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n *\n * console.log(waveform.offset_length); // -> 150\n * console.log(waveform.min[0]); // -> -12\n *\n * waveform.offset(20, 50);\n *\n * console.log(waveform.min.length); // -> 30\n * console.log(waveform.min[0]); // -> -9\n * ```\n *\n * @param {Integer} start New beginning of the offset. (inclusive)\n * @param {Integer} end New ending of the offset (exclusive)\n */\n\n offset: function(start, end) {\n var data_length = this.adapter.length;\n\n if (end < 0) {\n throw new RangeError(\"End point must be non-negative [\" + Number(end) + \" < 0]\");\n }\n\n if (end < start) {\n throw new RangeError(\"End point must not be before the start point [\" + Number(end) + \" < \" + Number(start) + \"]\");\n }\n\n if (start < 0) {\n throw new RangeError(\"Start point must be non-negative [\" + Number(start) + \" < 0]\");\n }\n\n if (start >= data_length) {\n throw new RangeError(\"Start point must be within range [\" + Number(start) + \" >= \" + data_length + \"]\");\n }\n\n if (end > data_length) {\n end = data_length;\n }\n\n this.offset_start = start;\n this.offset_end = end;\n this.offset_length = end - start;\n },\n\n /**\n * Creates a new segment of data.\n * Pretty handy if you need to bookmark a duration and display it according\n * to the current offset.\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n *\n * console.log(Object.keys(waveform.segments)); // -> []\n *\n * waveform.set_segment(10, 120);\n * waveform.set_segment(30, 90, \"speakerA\");\n *\n * console.log(Object.keys(waveform.segments)); // -> ['default', 'speakerA']\n * console.log(waveform.segments.default.min.length); // -> 110\n * console.log(waveform.segments.speakerA.min.length); // -> 60\n * ```\n *\n * @param {Integer} start Beginning of the segment (inclusive)\n * @param {Integer} end Ending of the segment (exclusive)\n * @param {String*} identifier Unique identifier. If nothing is specified,\n * *default* will be used as a value.\n * @return {WaveformDataSegment}\n */\n\n set_segment: function setSegment(start, end, identifier) {\n if (identifier === undefined || identifier === null || identifier.length === 0) {\n identifier = \"default\";\n }\n\n this.segments[identifier] = new WaveformDataSegment(this, start, end);\n\n return this.segments[identifier];\n },\n\n /**\n * Creates a new point of data.\n * Pretty handy if you need to bookmark a specific point and display it\n * according to the current offset.\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n *\n * console.log(Object.keys(waveform.points)); // -> []\n *\n * waveform.set_point(10);\n * waveform.set_point(30, \"speakerA\");\n *\n * console.log(Object.keys(waveform.points)); // -> ['default', 'speakerA']\n * ```\n *\n * @param {Integer} timeStamp the time to place the bookmark\n * @param {String*} identifier Unique identifier. If nothing is specified,\n * *default* will be used as a value.\n * @return {WaveformDataPoint}\n */\n\n set_point: function setPoint(timeStamp, identifier) {\n if (identifier === undefined || identifier === null || identifier.length === 0) {\n identifier = \"default\";\n }\n\n this.points[identifier] = new WaveformDataPoint(this, timeStamp);\n\n return this.points[identifier];\n },\n\n /**\n * Removes a point of data.\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n *\n * console.log(Object.keys(waveform.points)); // -> []\n *\n * waveform.set_point(30, \"speakerA\");\n * console.log(Object.keys(waveform.points)); // -> ['speakerA']\n * waveform.remove_point(\"speakerA\");\n * console.log(Object.keys(waveform.points)); // -> []\n * ```\n *\n * @param {String*} identifier Unique identifier. If nothing is specified,\n * *default* will be used as a value.\n * @return null\n */\n\n remove_point: function removePoint(identifier) {\n if (this.points[identifier]) {\n delete this.points[identifier];\n }\n },\n\n /**\n * Creates a new WaveformData object with resampled data.\n * Returns a rescaled waveform, to either fit the waveform to a specific\n * width, or to a specific zoom level.\n *\n * **Note**: You may specify either the *width* or the *scale*, but not both.\n * The `scale` will be deduced from the `width` you want to fit the data into.\n *\n * Adapted from Sequence::GetWaveDisplay in Audacity, with permission.\n *\n * ```javascript\n * // ...\n * var waveform = WaveformData.create({ ... });\n *\n * // fitting the data in a 500px wide canvas\n * var resampled_waveform = waveform.resample({ width: 500 });\n *\n * console.log(resampled_waveform.min.length); // -> 500\n *\n * // zooming out on a 3 times less precise scale\n * var resampled_waveform = waveform.resample({ scale: waveform.adapter.scale * 3 });\n *\n * // partial resampling (to perform fast animations involving a resampling\n * // per animation frame)\n * var partially_resampled_waveform = waveform.resample({ width: 500, from: 0, to: 500 });\n *\n * // ...\n * ```\n *\n * @see https://code.google.com/p/audacity/source/browse/audacity-src/trunk/src/Sequence.cpp\n * @param {Number|{width: Number, scale: Number}} options Either a constraint width or a constraint sample rate\n * @return {WaveformData} New resampled object\n */\n\n resample: function(options) {\n if (typeof options === \"number\") {\n options = {\n width: options\n };\n }\n\n options.input_index = typeof options.input_index === \"number\" ? options.input_index : null;\n options.output_index = typeof options.output_index === \"number\" ? options.output_index : null;\n options.scale = typeof options.scale === \"number\" ? options.scale : null;\n options.width = typeof options.width === \"number\" ? options.width : null;\n\n var is_partial_resampling = Boolean(options.input_index) || Boolean(options.output_index);\n\n if (options.input_index != null && (options.input_index < 0)) {\n throw new RangeError(\"options.input_index should be a positive integer value. [\" + options.input_index + \"]\");\n }\n\n if (options.output_index != null && (options.output_index < 0)) {\n throw new RangeError(\"options.output_index should be a positive integer value. [\" + options.output_index + \"]\");\n }\n\n if (options.width != null && (options.width <= 0)) {\n throw new RangeError(\"options.width should be a strictly positive integer value. [\" + options.width + \"]\");\n }\n\n if (options.scale != null && (options.scale <= 0)) {\n throw new RangeError(\"options.scale should be a strictly positive integer value. [\" + options.scale + \"]\");\n }\n\n if (!options.scale && !options.width) {\n throw new RangeError(\"You should provide either a resampling scale or a width in pixel the data should fit in.\");\n }\n\n var definedPartialOptionsCount = [\"width\", \"scale\", \"output_index\", \"input_index\"].reduce(function(count, key) {\n return count + (options[key] === null ? 0 : 1);\n }, 0);\n\n if (is_partial_resampling && definedPartialOptionsCount !== 4) {\n throw new Error(\"Some partial resampling options are missing. You provided \" + definedPartialOptionsCount + \" of them over 4.\");\n }\n\n var output_data = [];\n var samples_per_pixel = options.scale || Math.floor(this.duration * this.adapter.sample_rate / options.width); // scale we want to reach\n var scale = this.adapter.scale; // scale we are coming from\n var channel_count = 2;\n\n var input_buffer_size = this.adapter.length; // the amount of data we want to resample i.e. final zoom want to resample all data but for intermediate zoom we want to resample subset\n var input_index = options.input_index || 0; // is this start point? or is this the index at current scale\n var output_index = options.output_index || 0; // is this end point? or is this the index at scale we want to be?\n var min = input_buffer_size ? this.min_sample(input_index) : 0; // min value for peak in waveform\n var max = input_buffer_size ? this.max_sample(input_index) : 0; // max value for peak in waveform\n var min_value = -128;\n var max_value = 127;\n\n if (samples_per_pixel < scale) {\n throw new Error(\"Zoom level \" + samples_per_pixel + \" too low, minimum: \" + scale);\n }\n\n var where, prev_where, stop, value, last_input_index;\n\n function sample_at_pixel(x) {\n return Math.floor(x * samples_per_pixel);\n }\n\n function add_sample(min, max) {\n output_data.push(min, max);\n }\n\n while (input_index < input_buffer_size) {\n while (Math.floor(sample_at_pixel(output_index) / scale) <= input_index) {\n if (output_index) {\n add_sample(min, max);\n }\n\n last_input_index = input_index;\n\n output_index++;\n\n where = sample_at_pixel(output_index);\n prev_where = sample_at_pixel(output_index - 1);\n\n if (where !== prev_where) {\n min = max_value;\n max = min_value;\n }\n }\n\n where = sample_at_pixel(output_index);\n stop = Math.floor(where / scale);\n\n if (stop > input_buffer_size) {\n stop = input_buffer_size;\n }\n\n while (input_index < stop) {\n value = this.min_sample(input_index);\n\n if (value < min) {\n min = value;\n }\n\n value = this.max_sample(input_index);\n\n if (value > max) {\n max = value;\n }\n\n input_index++;\n }\n\n if (is_partial_resampling && (output_data.length / channel_count) >= options.width) {\n break;\n }\n }\n\n if (is_partial_resampling) {\n if ((output_data.length / channel_count) > options.width &&\n input_index !== last_input_index) {\n add_sample(min, max);\n }\n }\n else if (input_index !== last_input_index) {\n add_sample(min, max);\n }\n\n return new WaveformData({\n version: this.adapter.version,\n samples_per_pixel: samples_per_pixel,\n length: output_data.length / channel_count,\n data: output_data,\n sample_rate: this.adapter.sample_rate\n }, WaveformData.adapters.object);\n },\n\n /**\n * Returns all the min peaks values.\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n *\n * console.log(waveform.min.length); // -> 150\n * console.log(waveform.min[0]); // -> -12\n *\n * waveform.offset(20, 50);\n *\n * console.log(waveform.min.length); // -> 30\n * console.log(waveform.min[0]); // -> -9\n * ```\n *\n * @api\n * @return {Array.<Integer>} Min values contained in the offset.\n */\n\n get min() {\n return this.offsetValues(this.offset_start, this.offset_length, 0);\n },\n\n /**\n * Returns all the max peaks values.\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n *\n * console.log(waveform.max.length); // -> 150\n * console.log(waveform.max[0]); // -> 12\n *\n * waveform.offset(20, 50);\n *\n * console.log(waveform.max.length); // -> 30\n * console.log(waveform.max[0]); // -> 5\n * ```\n *\n * @api\n * @return {Array.<Integer>} Max values contained in the offset.\n */\n\n get max() {\n return this.offsetValues(this.offset_start, this.offset_length, 1);\n },\n\n /**\n * Return the unpacked values for a particular offset.\n *\n * @param {Integer} start\n * @param {Integer} length\n * @param {Integer} correction The step to skip for each iteration\n * (as the response body is [min, max, min, max...])\n * @return {Array.<Integer>}\n */\n\n offsetValues: function getOffsetValues(start, length, correction) {\n var adapter = this.adapter;\n var values = [];\n\n correction += (start * 2); // offset the positioning query\n\n for (var i = 0; i < length; i++) {\n values.push(adapter.at((i * 2) + correction));\n }\n\n return values;\n },\n\n /**\n * Compute the duration in seconds of the audio file.\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n * console.log(waveform.duration); // -> 10.33333333333\n *\n * waveform.offset(20, 50);\n * console.log(waveform.duration); // -> 10.33333333333\n * ```\n *\n * @api\n * @return {number} Duration of the audio waveform, in seconds.\n */\n\n get duration() {\n return (this.adapter.length * this.adapter.scale) / this.adapter.sample_rate;\n },\n\n /**\n * Return the duration in seconds of the current offset.\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n *\n * console.log(waveform.offset_duration); // -> 10.33333333333\n *\n * waveform.offset(20, 50);\n *\n * console.log(waveform.offset_duration); // -> 2.666666666667\n * ```\n *\n * @api\n * @return {number} Duration of the offset, in seconds.\n */\n\n get offset_duration() {\n return (this.offset_length * this.adapter.scale) / this.adapter.sample_rate;\n },\n\n /**\n * Return the number of pixels per second.\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n *\n * console.log(waveform.pixels_per_second); // -> 93.75\n * ```\n *\n * @api\n * @return {number} Number of pixels per second.\n */\n\n get pixels_per_second() {\n return this.adapter.sample_rate / this.adapter.scale;\n },\n\n /**\n * Return the amount of time represented by a single pixel.\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n *\n * console.log(waveform.seconds_per_pixel); // -> 0.010666666666666666\n * ```\n *\n * @return {number} Amount of time (in seconds) contained in a pixel.\n */\n\n get seconds_per_pixel() {\n return this.adapter.scale / this.adapter.sample_rate;\n },\n\n /**\n * Returns a value at a specific offset.\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n *\n * console.log(waveform.at(20)); // -> -7\n * console.log(waveform.at(21)); // -> 12\n * ```\n *\n * @proxy\n * @param {Integer} index\n * @return {number} Offset value\n */\n\n at: function at_sample_proxy(index) {\n return this.adapter.at(index);\n },\n\n /**\n * Return the pixel location for a certain time.\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n *\n * console.log(waveform.at_time(0.0000000023)); // -> 10\n * ```\n * @param {number} time\n * @return {integer} Index location for a specific time.\n */\n\n at_time: function at_time(time) {\n return Math.floor(time * this.adapter.sample_rate / this.adapter.scale);\n },\n\n /**\n * Returns the time in seconds for a particular index\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n *\n * console.log(waveform.time(10)); // -> 0.0000000023\n * ```\n *\n * @param {Integer} index\n * @return {number}\n */\n\n time: function time(index) {\n return index * this.adapter.scale / this.adapter.sample_rate;\n },\n\n /**\n * Return if a pixel lies within the current offset.\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n *\n * console.log(waveform.in_offset(50)); // -> true\n * console.log(waveform.in_offset(120)); // -> true\n *\n * waveform.offset(100, 150);\n *\n * console.log(waveform.in_offset(50)); // -> false\n * console.log(waveform.in_offset(120)); // -> true\n * ```\n *\n * @param {number} pixel\n * @return {boolean} True if the pixel lies in the current offset, false otherwise.\n */\n\n in_offset: function isInOffset(pixel) {\n return pixel >= this.offset_start && pixel < this.offset_end;\n },\n\n /**\n * Returns a min value for a specific offset.\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n *\n * console.log(waveform.min_sample(10)); // -> -7\n * ```\n *\n * @param {Integer} offset\n * @return {Number} Offset min value\n */\n\n min_sample: function getMinValue(offset) {\n return this.adapter.at(offset * 2);\n },\n\n /**\n * Returns a max value for a specific offset.\n *\n * ```javascript\n * var waveform = WaveformData.create({ ... });\n *\n * console.log(waveform.max_sample(10)); // -> 12\n * ```\n *\n * @param {Integer} offset\n * @return {Number} Offset max value\n */\n\n max_sample: function getMaxValue(offset) {\n return this.adapter.at((offset * 2) + 1);\n }\n};\n\n/**\n * Available adapters to manage the data backends.\n *\n * @type {Object}\n */\n\nWaveformData.adapters = {};\n\n/**\n * WaveformData Adapter Structure\n *\n * @typedef {{from: Number, to: Number, platforms: {}}}\n */\n\nWaveformData.adapter = function WaveformDataAdapter(response_data) {\n this.data = response_data;\n};\n\nmodule.exports = WaveformData;\n", "\"use strict\";\n\n/**\n * ArrayBuffer adapter consumes binary waveform data (data format version 1).\n * It is used as a data abstraction layer by `WaveformData`.\n *\n * This is supposed to be the fastest adapter ever:\n * * **Pros**: working directly in memory, everything is done by reference\n * (including the offsetting)\n * * **Cons**: binary data are hardly readable without data format knowledge\n * (and this is why this adapter exists).\n *\n * Also, it is recommended to use the `fromResponseData` factory.\n *\n * @see WaveformDataArrayBufferAdapter.fromResponseData\n * @param {DataView} response_data\n * @constructor\n */\n\nfunction WaveformDataArrayBufferAdapter(response_data) {\n this.data = response_data;\n}\n\n/**\n * Detects if a set of data is suitable for the ArrayBuffer adapter.\n * It is used internally by `WaveformData.create` so you should not bother using it.\n *\n * @static\n * @param {Mixed} data\n * @returns {boolean}\n */\n\nWaveformDataArrayBufferAdapter.isCompatible = function isCompatible(data) {\n return data && typeof data === \"object\" && \"byteLength\" in data;\n};\n\n/**\n * Setup factory to create an adapter based on heterogeneous input formats.\n *\n * It is the preferred way to build an adapter instance.\n *\n * ```javascript\n * var arrayBufferAdapter = WaveformData.adapters.arraybuffer;\n * var xhr = new XMLHttpRequest();\n *\n * // .dat file generated by audiowaveform program\n * xhr.open(\"GET\", \"http://example.com/waveforms/track.dat\");\n * xhr.responseType = \"arraybuffer\";\n * xhr.addEventListener(\"load\", function onResponse(progressEvent){\n * var responseData = progressEvent.target.response;\n *\n * // doing stuff with the raw data ...\n * // you only have access to WaveformDataArrayBufferAdapter API\n * var adapter = arrayBufferAdapter.fromResponseData(responseData);\n *\n * // or making things easy by using WaveformData ...\n * // you have access WaveformData API\n * var waveform = new WaveformData(responseData, arrayBufferAdapter);\n * });\n *\n * xhr.send();\n * ```\n\n * @static\n * @param {ArrayBuffer} response_data\n * @return {WaveformDataArrayBufferAdapter}\n */\n\nWaveformDataArrayBufferAdapter.fromResponseData = function fromArrayBufferResponseData(response_data) {\n return new WaveformDataArrayBufferAdapter(new DataView(response_data));\n};\n\n/**\n * @namespace WaveformDataArrayBufferAdapter\n */\n\n WaveformDataArrayBufferAdapter.prototype = {\n /**\n * Returns the data format version number.\n *\n * @return {Integer} Version number of the consumed data format.\n */\n\n get version() {\n return this.data.getInt32(0, true);\n },\n\n /**\n * Indicates if the response body is encoded in 8bits.\n *\n * **Notice**: currently the adapter only deals with 8bits encoded data.\n * You should favor that too because of the smaller data network fingerprint.\n *\n * @return {boolean} True if data are declared to be 8bits encoded.\n */\n\n get is_8_bit() {\n return Boolean(this.data.getUint32(4, true));\n },\n\n /**\n * Indicates if the response body is encoded in 16bits.\n *\n * @return {boolean} True if data are declared to be 16bits encoded.\n */\n\n get is_16_bit() {\n return !this.is_8_bit;\n },\n\n /**\n * Returns the number of samples per second.\n *\n * @return {Integer} Number of samples per second.\n */\n\n get sample_rate() {\n return this.data.getInt32(8, true);\n },\n\n /**\n * Returns the scale (number of samples per pixel).\n *\n * @return {Integer} Number of samples per pixel.\n */\n\n get scale() {\n return this.data.getInt32(12, true);\n },\n\n /**\n * Returns the length of the waveform data (number of data points).\n *\n * @return {Integer} Length of the waveform data.\n */\n\n get length() {\n return this.data.getUint32(16, true);\n },\n\n /**\n * Returns a value at a specific offset.\n *\n * @param {Integer} index\n * @return {number} waveform value\n */\n\n at: function at_sample(index) {\n return this.data.getInt8(20 + index);\n }\n};\n\nmodule.exports = WaveformDataArrayBufferAdapter;\n", "\"use strict\";\n\n/**\n * Object adapter consumes stringified JSON or JSON waveform data (data format version 1).\n * It is used as a data abstraction layer by `WaveformData`.\n *\n * This is supposed to be a fallback for browsers not supporting ArrayBuffer:\n * * **Pros**: easy to debug response_data and quite self describing.\n * * **Cons**: slower than ArrayBuffer, more memory consumption.\n *\n * Also, it is recommended to use the `fromResponseData` factory.\n *\n * @see WaveformDataObjectAdapter.fromResponseData\n * @param {String|Object} response_data JSON or stringified JSON\n * @constructor\n */\n\nfunction WaveformDataObjectAdapter(response_data) {\n this.data = response_data;\n}\n\n/**\n * Detects if a set of data is suitable for the Object adapter.\n * It is used internally by `WaveformData.create` so you should not bother using it.\n *\n * @static\n * @param {Mixed} data\n * @returns {boolean}\n */\n\nWaveformDataObjectAdapter.isCompatible = function isCompatible(data) {\n return data && ((typeof data === \"object\" && \"sample_rate\" in data) ||\n (typeof data === \"string\" && \"sample_rate\" in JSON.parse(data)));\n};\n\n/**\n * Setup factory to create an adapter based on heterogeneous input formats.\n *\n * It is the preferred way to build an adapter instance.\n *\n * ```javascript\n * var objectAdapter = WaveformData.adapters.object;\n * var xhr = new XMLHttpRequest();\n *\n * // .dat file generated by audiowaveform program\n * xhr.open(\"GET\", \"http://example.com/waveforms/track.json\");\n * xhr.responseType = \"json\";\n * xhr.addEventListener(\"load\", function onResponse(progressEvent){\n * var responseData = progressEvent.target.response;\n *\n * // doing stuff with the raw data ...\n * // you only have access to WaveformDataObjectAdapter API\n * var adapter = objectAdapter.fromResponseData(responseData);\n *\n * // or making things easy by using WaveformData ...\n * // you have access WaveformData API\n * var waveform = new WaveformData(responseData, objectAdapter);\n * });\n *\n * xhr.send();\n * ```\n\n * @static\n * @param {String|Object} response_data JSON or stringified JSON\n * @return {WaveformDataObjectAdapter}\n */\n\nWaveformDataObjectAdapter.fromResponseData = function fromJSONResponseData(response_data) {\n if (typeof response_data === \"string\") {\n return new WaveformDataObjectAdapter(JSON.parse(response_data));\n }\n else {\n return new WaveformDataObjectAdapter(response_data);\n }\n};\n\n/**\n * @namespace WaveformDataObjectAdapter\n */\n\nWaveformDataObjectAdapter.prototype = {\n /**\n * Returns the data format version number.\n *\n * @return {Integer} Version number of the consumed data format.\n */\n\n get version() {\n return this.data.version || 1;\n },\n\n /**\n * Indicates if the response body is encoded in 8bits.\n *\n * **Notice**: currently the adapter only deals with 8bits encoded data.\n * You should favor that too because of the smaller data network fingerprint.\n *\n * @return {boolean} True if data are declared to be 8bits encoded.\n */\n\n get is_8_bit() {\n return this.data.bits === 8;\n },\n\n /**\n * Indicates if the response body is encoded in 16bits.\n *\n * @return {boolean} True if data are declared to be 16bits encoded.\n */\n\n get is_16_bit() {\n return !this.is_8_bit;\n },\n\n /**\n * Returns the number of samples per second.\n *\n * @return {Integer} Number of samples per second.\n */\n\n get sample_rate() {\n return this.data.sample_rate;\n },\n\n /**\n * Returns the scale (number of samples per pixel).\n *\n * @return {Integer} Number of samples per pixel.\n */\n\n get scale() {\n return this.data.samples_per_pixel;\n },\n\n /**\n * Returns the length of the waveform data (number of data points).\n *\n * @return {Integer} Length of the waveform data.\n */\n\n get length() {\n return this.data.length;\n },\n\n /**\n * Returns a value at a specific offset.\n *\n * @param {Integer} index\n * @return {number} waveform value\n */\n\n at: function at_sample(index) {\n return this.data.data[index];\n }\n};\n\nmodule.exports = WaveformDataObjectAdapter;\n", "\"use strict\";\n\nmodule.exports = {\n arraybuffer: require(\"./arraybuffer\"),\n object: require(\"./object\")\n};\n", "\"use strict\";\n\nvar WaveformData = require(\"./lib/core\");\n\nWaveformData.adapters = require(\"./lib/adapters\");\n\nmodule.exports = WaveformData;\n", "var WORKER_ENABLED = !!(global === global.window && global.URL && global.Blob && global.Worker);\n\nfunction InlineWorker(func, self) {\n var _this = this;\n var functionBody;\n\n self = self || {};\n\n if (WORKER_ENABLED) {\n functionBody = func.toString().trim().match(\n /^function\\s*\\w*\\s*\\([\\w\\s,]*\\)\\s*{([\\w\\W]*?)}$/\n )[1];\n\n return new global.Worker(global.URL.createObjectURL(\n new global.Blob([ functionBody ], { type: \"text/javascript\" })\n ));\n }\n\n function postMessage(data) {\n setTimeout(function() {\n _this.onmessage({ data: data });\n }, 0);\n }\n\n this.self = self;\n this.self.postMessage = postMessage;\n\n setTimeout(func.bind(self, self), 0);\n}\n\nInlineWorker.prototype.postMessage = function postMessage(data) {\n var _this = this;\n\n setTimeout(function() {\n _this.self.onmessage({ data: data });\n }, 0);\n};\n\nmodule.exports = InlineWorker;\n", "\"use strict\";\n\nvar WaveformData = require(\"../../waveform-data\");\nvar InlineWorker = require(\"inline-worker\");\n\n/**\n * This callback is executed once the audio has been decoded by the browser and\n * resampled by waveform-data.\n *\n * @callback onAudioResampled\n * @param {WaveformData} waveform_data Waveform instance of the browser decoded audio\n * @param {AudioBuffer} audio_buffer Decoded audio buffer\n */\n\n/**\n * AudioBuffer-based WaveformData generator\n *\n * Adapted from BlockFile::CalcSummary in Audacity, with permission.\n * @see https://code.google.com/p/audacity/source/browse/audacity-src/trunk/src/BlockFile.cpp\n *\n * @param {Object.<{scale: Number, amplitude_scale: Number}>} options\n * @param {onAudioResampled} callback\n * @returns {Function.<AudioBuffer>}\n */\n\nfunction getAudioDecoder(options, callback) {\n return function onAudioDecoded(audio_buffer) {\n var worker = new InlineWorker(function() {\n var INT8_MAX = 127;\n var INT8_MIN = -128;\n\n function calculateWaveformDataLength(audio_sample_count, scale) {\n var data_length = Math.floor(audio_sample_count / scale);\n\n var samples_remaining = audio_sample_count - (data_length * scale);\n\n if (samples_remaining > 0) {\n data_length++;\n }\n\n return data_length;\n }\n\n this.addEventListener(\"message\", function(evt) {\n var scale = evt.data.scale;\n var amplitude_scale = evt.data.amplitude_scale;\n var audio_buffer = evt.data.audio_buffer;\n\n var data_length = calculateWaveformDataLength(audio_buffer.length, scale);\n var header_size = 20;\n var data_object = new DataView(new ArrayBuffer(header_size + data_length * 2));\n var channels = audio_buffer.channels;\n var channel;\n var min_value = Infinity, max_value = -Infinity, scale_counter = 0;\n var buffer_length = audio_buffer.length;\n var offset = header_size;\n var i;\n\n data_object.setInt32(0, 1, true); // Version\n data_object.setUint32(4, 1, true); // Is 8 bit?\n data_object.setInt32(8, audio_buffer.sampleRate, true); // Sample rate\n data_object.setInt32(12, scale, true); // Scale\n data_object.setInt32(16, data_length, true); // Length\n\n for (i = 0; i < buffer_length; i++) {\n var sample = 0;\n\n for (channel = 0; channel < channels.length; ++channel) {\n sample += channels[channel][i];\n }\n\n sample = Math.floor(INT8_MAX * sample * amplitude_scale / channels.length);\n\n if (sample < min_value) {\n min_value = sample;\n\n if (min_value < INT8_MIN) {\n min_value = INT8_MIN;\n }\n }\n\n if (sample > max_value) {\n max_value = sample;\n\n if (max_value > INT8_MAX) {\n max_value = INT8_MAX;\n }\n }\n\n if (++scale_counter === scale) {\n data_object.setInt8(offset++, Math.floor(min_value));\n data_object.setInt8(offset++, Math.floor(max_value));\n min_value = Infinity; max_value = -Infinity; scale_counter = 0;\n }\n }\n\n if (scale_counter > 0) {\n data_object.setInt8(offset++, Math.floor(min_value));\n data_object.setInt8(offset++, Math.floor(max_value));\n }\n\n this.postMessage(data_object);\n });\n });\n\n worker.addEventListener(\"message\", function(evt) {\n var data_object = evt.data;\n\n callback(\n null,\n new WaveformData(data_object.buffer, WaveformData.adapters.arraybuffer),\n audio_buffer\n );\n });\n\n // Construct a simple object with the necessary AudioBuffer data,\n // as we cannot send an AudioBuffer to a Web Worker.\n var audio_buffer_obj = {\n length: audio_buffer.length,\n sampleRate: audio_buffer.sampleRate,\n channels: []\n };\n\n // Fill in the channels data.\n for (var channel = 0; channel < audio_buffer.numberOfChannels; ++channel) {\n audio_buffer_obj.channels[channel] = audio_buffer.getChannelData(channel);\n }\n\n worker.postMessage({\n scale: options.scale,\n amplitude_scale: options.amplitude_scale,\n audio_buffer: audio_buffer_obj\n });\n };\n}\n\nmodule.exports = getAudioDecoder;\n", "\"use strict\";\n\nvar getAudioDecoder = require(\"./audiodecoder\");\n\n/**\n * Creates a working WaveformData based on binary audio data.\n *\n * This is still quite experimental and the result will mostly depend on the\n * level of browser support.\n *\n * ```javascript\n * const xhr = new XMLHttpRequest();\n * const audioContext = new AudioContext();\n *\n * // URL of a CORS MP3/Ogg file\n * xhr.open('GET', 'https://example.com/audio/track.ogg');\n * xhr.responseType = 'arraybuffer';\n *\n * xhr.addEventListener('load', function(progressEvent) {\n * WaveformData.builders.webaudio(audioContext, progressEvent.target.response,\n * function(err, waveform) {\n * if (err) {\n * console.error(err);\n * return;\n * }\n *\n * console.log(waveform.duration);\n * });\n * });\n *\n * xhr.send();\n * ```\n *\n * @todo use a Web Worker to offload processing of the binary data\n * @todo or use `SourceBuffer.appendBuffer` and `ProgressEvent` to stream the decoding\n * @todo abstract the number of channels, because it is assumed the audio file is stereo\n * @param {AudioContext|webkitAudioContext} audio_context\n * @param {ArrayBuffer} raw_response\n * @param {callback} what to do once the decoding is done\n * @constructor\n */\n\nfunction fromAudioObjectBuilder(audio_context, raw_response, options, callback) {\n var audioContext = window.AudioContext || window.webkitAudioContext;\n var defaultOptions = {\n scale: 512,\n amplitude_scale: 1.0\n };\n\n if (!(audio_context instanceof audioContext)) {\n throw new TypeError(\"First argument should be an AudioContext instance\");\n }\n\n // fromAudioObjectBuilder(audioContext, data, callback) form\n if (typeof options === \"function\") {\n callback = options;\n options = {};\n }\n else {\n options = options || {};\n }\n\n options.scale = options.scale || defaultOptions.scale;\n options.amplitude_scale = options.amplitude_scale || defaultOptions.amplitude_scale;\n\n if (options.hasOwnProperty(\"scale_adjuster\")) {\n throw new Error(\"Please rename the 'scale_adjuster' option to 'amplitude_scale'\");\n }\n\n // The following function is a workaround for a Webkit bug where decodeAudioData\n // invokes the errorCallback with null instead of a DOMException.\n // See https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-decodeaudiodata\n // and http://stackoverflow.com/q/10365335/103396\n\n function errorCallback(error) {\n if (!error) {\n error = new DOMException(\"EncodingError\");\n }\n\n callback(error);\n }\n\n return audio_context.decodeAudioData(\n raw_response,\n getAudioDecoder(options, callback),\n errorCallback\n );\n}\n\nmodule.exports = fromAudioObjectBuilder;\n", "\"use strict\";\n\nvar webAudioBuilder = require(\"./lib/builders/webaudio\");\n\nmodule.exports = webAudioBuilder;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1');\nvar WaveformData = require('waveform-data');\nvar WaveformWebAudioBuilder = require('waveform-data/webaudio');\nvar WaveformAudioDecoder = require('waveform-data/lib/builders/audiodecoder');\n\nfunction AudioManager(){\n\tthis._loaders = {};\n\tthis._buffers = {};\n\tthis._waveforms = {};\n\tthis._volume = 1;\n\tthis._muted = false;\n\tthis._media = [];\n\tthis;\n};\n\nexports.AudioManager = AudioManager; // export class \nAudioManager.instance = function (){\n\treturn this._instance || (this._instance = new this());\n};\n\nAudioManager.prototype.__outputLatency = {'default': 0,name: 'outputLatency'};\nAudioManager.prototype.outputLatency = function(v){ return this._outputLatency; }\nAudioManager.prototype.setOutputLatency = function(v){ this._outputLatency = v; return this; }\nAudioManager.prototype._outputLatency = 0;\n\nAudioManager.prototype.enumerateDevices = function (){\n\tvar self = this;\n\treturn self._enumerator || (self._enumerator = window.navigator.mediaDevices.enumerateDevices().then(function(devices) {\n\t\tself._devices = devices.filter(function(device) {\n\t\t\treturn device.kind == 'audioinput';\n\t\t});\n\t\tself._enumerator = null;\n\t\treturn Imba.Scheduler.event(self);\n\t}));\n};\n\nAudioManager.prototype.devices = function (){\n\tvar self = this;\n\tif (!self._devices) {\n\t\tself._devices = [];\n\t\twindow.navigator.mediaDevices.ondevicechange = function(e) { return self.enumerateDevices(); };\n\t\tself.enumerateDevices();\n\t};\n\treturn self._devices;\n};\n\nAudioManager.prototype.canRecordAudio = function (){\n\treturn window.navigator.mediaDevices && window.navigator.mediaDevices.getUserMedia && window.MediaRecorder;\n};\n\nAudioManager.prototype.mute = function (){\n\tthis._muted = true;\n\treturn this.updateGain();\n};\n\nAudioManager.prototype.unmute = function (){\n\tthis._muted = false;\n\tthis.updateGain();\n\treturn this;\n};\n\nAudioManager.prototype.getMuted = function (){\n\treturn this._muted;\n};\n\nAudioManager.prototype.getVolume = function (){\n\treturn this._volume;\n};\n\nAudioManager.prototype.setVolume = function (volume){\n\tthis._volume = volume;\n\treturn this.updateGain();\n};\n\nAudioManager.prototype.getRealVolume = function (){\n\treturn this.getMuted() ? 0 : this.getVolume();\n};\n\nAudioManager.prototype.updateGain = function (){\n\tvar volume = this.getRealVolume();\n\t\n\t// no need to setup a webaudio directly\n\tif (this._context) {\n\t\tthis.gainNode().gain.value = volume;\n\t};\n\t\n\tfor (let i = 0, items = iter$(this._media), len = items.length; i < len; i++) {\n\t\titems[i].volume = volume;\n\t};\n\treturn this;\n};\n\nAudioManager.prototype.urlForId = function (id){\n\tlet el = this._audioElement || (this._audioElement = document.createElement('audio'));\n\tlet path = \"/cdn/\" + id;\n\tlet postfix = \"\";\n\t\n\tif (window.SCRIMBA_API && window.SCRIMBA_API.ua().isSafari()) {\n\t\treturn (\"\" + path + \".m4a\" + postfix);\n\t} else if (el.canPlayType('audio/ogg;codecs=\"opus\"')) { // and /Chrome/.test(ua)\n\t\treturn (\"\" + path.replace('.ogg','') + \".ogg\" + postfix);\n\t} else if (el.canPlayType('audio/webm;codecs=\"opus\"')) { // and /Chrome/.test(ua)\n\t\treturn (\"\" + path.replace('.webm','') + \".webm\" + postfix);\n\t} else if (el.canPlayType('audio/mp4')) {\n\t\treturn (\"\" + path + \".m4a\" + postfix);\n\t} else {\n\t\treturn (\"\" + path + \".mp3\" + postfix);\n\t};\n};\n\nAudioManager.prototype.loadBufferForId = function (id){\n\tvar self = this;\n\treturn self._loaders[id] || (self._loaders[id] = new Promise(async function(resolve) {\n\t\t\n\t\tvar file = SDB.files().get(id);\n\t\t// console.log \"load buffer for id\",id,file\n\t\t\n\t\t// check if file exists locally?\n\t\tvar buf = await file.fetchAsArrayBuffer(self.urlForId(id));\n\t\t\n\t\tvar err = function(e) {\n\t\t\tconsole.log(\"error from decodeAudioData\",e);\n\t\t\t// @buffers[id] = e\n\t\t\treturn resolve(null);\n\t\t};\n\t\t\n\t\tself.context().decodeAudioData(buf,function(buffer) {\n\t\t\tself._buffers[id] = buffer;\n\t\t\treturn resolve(buffer);\n\t\t},err);\n\t\treturn;\n\t}));\n};\n\nAudioManager.prototype.waveformForAudioBuffer = function (buffer){\n\treturn new Promise(function(resolve) {\n\t\tvar cb = function(err,wf,audio) {\n\t\t\t// console.log \"waveform cb\",arguments\n\t\t\treturn resolve(wf);\n\t\t};\n\t\t\n\t\tvar fn = WaveformAudioDecoder({scale: 512,amplitude_scale: 1.0},cb);\n\t\treturn fn(buffer);\n\t});\n};\n\nAudioManager.prototype.waveformForId = function (id){\n\tvar self = this;\n\tvar key = id + \".dat\";\n\treturn self._loaders[key] || (self._loaders[key] = new Promise(async function(resolve) {\n\t\tvar cached = await window.$cache.get(key);\n\t\t\n\t\tif (cached) {\n\t\t\tconsole.time('waveFormCreate');\n\t\t\tresolve(WaveformData.create(cached.body));\n\t\t\tconsole.timeEnd('waveFormCreate');\n\t\t\treturn;\n\t\t};\n\t\t\n\t\tvar buf = await self.loadBufferForId(id);\n\t\tconsole.log('got waveformBuffer',id,buf);\n\t\tif (!buf || (buf instanceof Error)) {\n\t\t\treturn resolve(null);\n\t\t};\n\t\t// console.time 'waveFormGen'\n\t\tvar wf = await self.waveformForAudioBuffer(buf);\n\t\t// console.timeEnd 'waveFormGen'\n\t\tconsole.log('returned from wf',wf);\n\t\tvar dat = wf.adapter.data.buffer; // .byteLength\n\t\tawait window.$cache.set(key,{body: dat});\n\t\treturn resolve(wf);\n\t}));\n};\n\nAudioManager.prototype.durationForBlob = function (blob,expectedDuration){\n\tif(expectedDuration === undefined) expectedDuration = 3600000;\n\treturn new Promise(function(resolve) {\n\t\tvar audio = new Audio();\n\t\tvar resolved = false;\n\t\tvar check = function() {\n\t\t\tvar dur = audio.duration;\n\t\t\tconsole.log(\"checkDuration\",dur);\n\t\t\tif (dur != Infinity && !resolved) {\n\t\t\t\taudio.ondurationchange = null;\n\t\t\t\taudio.onloadeddata = null;\n\t\t\t\tresolved = true;\n\t\t\t\treturn resolve(dur * 1000);\n\t\t\t};\n\t\t};\n\t\t\n\t\taudio.ondurationchange = check;\n\t\taudio.onloadeddata = check;\n\t\taudio.src = URL.createObjectURL(blob);\n\t\taudio.load();\n\t\taudio.currentTime = (expectedDuration / 1000) * 1.5;\n\t\t\n\t\t// TODO add onerror\n\t\taudio.onerror = function(e) {\n\t\t\tconsole.log(\"error!\",e);\n\t\t\tif (!resolved) {\n\t\t\t\tresolved = true;\n\t\t\t\treturn resolve(0);\n\t\t\t};\n\t\t};\n\t\treturn;\n\t});\n};\n\nAudioManager.prototype.audioBufferFromBlob = function (blob){\n\tvar self = this;\n\treturn new Promise(function(resolve,reject) {\n\t\tvar fileReader = new FileReader();\n\t\tfileReader.onload = function() {\n\t\t\tlet data = this.result;\n\t\t\treturn self.context().decodeAudioData(data,resolve,reject);\n\t\t};\n\t\t\n\t\treturn fileReader.readAsArrayBuffer(blob);\n\t});\n};\n\nAudioManager.prototype.durationForAudioElement = function (audio,expectedDuration){\n\tif(expectedDuration === undefined) expectedDuration = 3600000;\n\treturn new Promise(function(resolve) {\n\t\tvar resolved = false;\n\t\tvar check = function() {\n\t\t\tvar dur = audio.duration;\n\t\t\tconsole.log(\"checkDuration\",dur);\n\t\t\tif (dur != Infinity && !Number.isNaN(dur) && !resolved) {\n\t\t\t\tresolved = true;\n\t\t\t\taudio.ondurationchange = null;\n\t\t\t\taudio.onloadeddata = null;\n\t\t\t\taudio.currentTime = 0;\n\t\t\t\treturn resolve(dur * 1000);\n\t\t\t};\n\t\t};\n\t\t\n\t\taudio.ondurationchange = check;\n\t\taudio.onloadeddata = check;\n\t\taudio.onerror = function(e) {\n\t\t\tconsole.log(\"error!\",e);\n\t\t\tif (!resolved) {\n\t\t\t\tresolved = true;\n\t\t\t\treturn resolve(0);\n\t\t\t};\n\t\t};\n\t\t// audio:src = URL.createObjectURL(blob)\n\t\taudio.load();\n\t\taudio.currentTime = (expectedDuration / 1000) * 1.5;\n\t\tcheck();\n\t\t// TODO add onerror\n\t\t\n\t\treturn;\n\t});\n};\n\n\nAudioManager.prototype.context = function (){\n\treturn this._context || (this._context = new (window.AudioContext || window.webkitAudioContext)());\n};\n\nAudioManager.prototype.output = function (){\n\treturn this.context().destination;\n};\n\nAudioManager.prototype.gainNode = function (){\n\tif (!this._gainNode) {\n\t\tthis._gainNode = this.context().createGain();\n\t\tthis._gainNode.connect(this.output());\n\t\tthis._gainNode.gain.value = this.getRealVolume();\n\t};\n\treturn this._gainNode;\n};\n\nAudioManager.prototype.sourceForMedia = function (media){\n\treturn media._mediaSource || (media._mediaSource = this.context().createMediaElementSource(media));\n};\n\nAudioManager.prototype.registerMedia = function (media){\n\tmedia.volume = this.getRealVolume();\n\tif (this._media.indexOf(media) < 0) {\n\t\tthis._media.push(media);\n\t};\n\treturn this;\n};\n\nAudioManager.prototype.deregisterMedia = function (media){\n\tvar idx = this._media.indexOf(media);\n\tif (idx >= 0) {\n\t\tthis._media.splice(idx,1);\n\t};\n\treturn this;\n};\n\nAudioManager.prototype.scheduleClips = function (clips,startTime,playbackRate){\n\tif(startTime === undefined) startTime = 0;\n\tif(playbackRate === undefined) playbackRate = 1;\n\tvar ctxTime = this.context().currentTime * 1000;\n\t// console.log \"scheduleClips\",startTime,clips\n\t\n\tif (this.outputLatency()) {\n\t\tstartTime += this.outputLatency();\n\t};\n\t\n\tfor (let i = 0, items = iter$(clips), len = items.length, item; i < len; i++) {\n\t\titem = items[i];\n\t\tvar buffer = item.buffer || this._buffers[item.fid];\n\t\t\n\t\tif (!buffer) {\n\t\t\t// console.log 'cannot find audiobuffer'\n\t\t\tcontinue;\n\t\t};\n\t\t\n\t\tvar startAt = (item.t0 - startTime) + ctxTime;\n\t\tvar dur = (item.t1 - item.t0);\n\t\tvar skip = item.skip;\n\t\t// remove popping -- popping should no longer exist\n\t\t// if skip == 0\n\t\t// \tskip = 150\n\t\t// \tstartAt += 150\n\t\t// \t# change duration?\n\t\t// \tdur -= 150\n\t\t\n\t\tif (ctxTime > (startAt + dur)) {\n\t\t\tcontinue;\n\t\t};\n\t\t\n\t\t// make sure we dont start before\n\t\tif (startAt < ctxTime) {\n\t\t\tskip += (ctxTime - startAt);\n\t\t\tdur -= (ctxTime - startAt);\n\t\t\tstartAt = ctxTime;\n\t\t};\n\t\t\n\t\tif (dur < 200) {\n\t\t\tcontinue;\n\t\t};\n\t\t\n\t\tvar bufDur = buffer.duration * 1000;\n\t\t// console.log(\"buffer duration\",{bdur: bufDur,skip: skip, clipdur: dur})\n\t\t\n\t\tif ((bufDur - skip) < 100) {\n\t\t\tcontinue;\n\t\t};\n\t\t\n\t\t// console.log \"start clip at\",startAt - ctxTime,skip,dur\n\t\tvar src = item.node = this.context().createBufferSource();\n\t\tsrc.buffer = buffer;\n\t\t\n\t\t// unless playbackRate == 1\n\t\t// \tsrc:playbackRate:value = playbackRate\n\t\tlet pbrStartAt = ((startAt - ctxTime) / playbackRate) + ctxTime;\n\t\t// console.log \"start clip at\",pbrStartAt,startAt,ctxTime,skip,dur,playbackRate\n\t\tstartAt = pbrStartAt;\n\t\t\n\t\tsrc.connect(this.gainNode());\n\t\tsrc.start(startAt / 1000,skip / 1000,dur / 1000);\n\t\tif (playbackRate != 1) {\n\t\t\tsrc.playbackRate.value = playbackRate;\n\t\t};\n\t};\n\t\n\treturn clips;\n};\n\nAudioManager.prototype.unscheduleClips = function (clips){\n\tfor (let i = 0, items = iter$(clips), len = items.length, item; i < len; i++) {\n\t\titem = items[i];\n\t\tif (item.node) { item.node.stop() };\n\t};\n\treturn this;\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nfunction len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nvar LongPromise = require('../util/LongPromise').LongPromise;\n\nvar mimeTypes = ['audio/ogg; codecs=opus;',\"audio/webm; codecs=opus;\",'audio/opus'];\n\nvar AudioManager = require('./AudioManager').AudioManager;\n\n// Error handling is messy here. A mix of promises, fake promises (LongPromise),\n// and resolving these even when there are errors\nfunction MediaRecording(options){\n\tif(options === undefined) options = {};\n\tthis._options = options;\n\tthis._space = options.space;\n\tthis._constraints = options.constraints;\n\tthis._chunkSize = 60 * 8; // 480ms\n\tthis._frameSize = this.api().ua().isChrome() ? 60 : 20; // 20 for firefox\n\tthis._audioBitRate = options.audioBitsPerSecond || 48000;\n\tthis._size = 0;\n\tthis._chunks = [];\n\tthis._warnings = [];\n\tthis._timecodes = [];\n\t// @setupPromise = LongPromise.new\n\tthis._startPromise = new LongPromise();\n\tthis._donePromise = new LongPromise();\n\tthis._state = 'init';\n\t\n\tthis._timecodeDuration = 0;\n\t\n\tif (window.MediaRecorder) {\n\t\tfor (let i = 0, len = mimeTypes.length, type; i < len; i++) {\n\t\t\ttype = mimeTypes[i];\n\t\t\tif (MediaRecorder.isTypeSupported(type)) {\n\t\t\t\tthis._mimeType = type;\n\t\t\t\tthis._ext = type.match(/\\/(\\w+)/)[1];\n\t\t\t};\n\t\t};\n\t};\n\tthis;\n};\n\nexports.MediaRecording = MediaRecording; // export class \nMediaRecording.prototype.size = function(v){ return this._size; }\nMediaRecording.prototype.setSize = function(v){ this._size = v; return this; };\nMediaRecording.prototype.warnings = function(v){ return this._warnings; }\nMediaRecording.prototype.setWarnings = function(v){ this._warnings = v; return this; };\nMediaRecording.prototype.stream = function(v){ return this._stream; }\nMediaRecording.prototype.setStream = function(v){ this._stream = v; return this; };\nMediaRecording.prototype.options = function(v){ return this._options; }\nMediaRecording.prototype.setOptions = function(v){ this._options = v; return this; };\nMediaRecording.prototype.state = function(v){ return this._state; }\nMediaRecording.prototype.setState = function(v){ this._state = v; return this; };\nMediaRecording.prototype.audio = function(v){ return this._audio; }\nMediaRecording.prototype.setAudio = function(v){ this._audio = v; return this; };\nMediaRecording.prototype.space = function(v){ return this._space; }\nMediaRecording.prototype.setSpace = function(v){ this._space = v; return this; };\nMediaRecording.prototype.mimeType = function(v){ return this._mimeType; }\nMediaRecording.prototype.setMimeType = function(v){ this._mimeType = v; return this; };\nMediaRecording.prototype.chunkSize = function(v){ return this._chunkSize; }\nMediaRecording.prototype.setChunkSize = function(v){ this._chunkSize = v; return this; };\nMediaRecording.prototype.audioBitRate = function(v){ return this._audioBitRate; }\nMediaRecording.prototype.setAudioBitRate = function(v){ this._audioBitRate = v; return this; };\nMediaRecording.prototype.error = function(v){ return this._error; }\nMediaRecording.prototype.setError = function(v){ this._error = v; return this; };\n\nMediaRecording.prototype.startAt = function(v){ return this._startAt; }\nMediaRecording.prototype.setStartAt = function(v){ this._startAt = v; return this; };\nMediaRecording.prototype.startedAt = function(v){ return this._startedAt; }\nMediaRecording.prototype.setStartedAt = function(v){ this._startedAt = v; return this; };\nMediaRecording.prototype.stopAt = function(v){ return this._stopAt; }\nMediaRecording.prototype.setStopAt = function(v){ this._stopAt = v; return this; };\nMediaRecording.prototype.stoppedAt = function(v){ return this._stoppedAt; }\nMediaRecording.prototype.setStoppedAt = function(v){ this._stoppedAt = v; return this; };\n\nMediaRecording.prototype.manager = function (){\n\treturn AudioManager.instance();\n};\n\nMediaRecording.prototype.api = function (){\n\treturn App.api();\n};\n\nMediaRecording.prototype.log = function (){\n\tvar api_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>0 ? i : 0);\n\twhile(i>0) params[i-1] = $0[--i];\n\treturn (api_ = this.api()).log.apply(api_,[].concat(['media'], Array.from(params)));\n};\n\nMediaRecording.prototype.proxy = function (type,event){\n\t// log type, @recorder:state\n\tthis.setState(this._recorder.state);\n\tif (this[(\"onrec\" + type)]) {\n\t\treturn this[(\"onrec\" + type)](event);\n\t};\n\t// if self[\"on{type}\"]\n\t// \tself[\"on{type}\"](event)\n};\n\nMediaRecording.prototype.setup = function (){\n\tvar self = this;\n\treturn self._setupPromise || (self._setupPromise = new Promise(function(resolve,reject) {\n\t\tself._state = 'setup';\n\t\tvar ok = function(stream) {\n\t\t\tself.setStream(stream);\n\t\t\treturn setTimeout(function() {\n\t\t\t\tself._state = 'ready';\n\t\t\t\treturn resolve(self);\n\t\t\t},500);\n\t\t};\n\t\t\n\t\tvar err = function(e) {\n\t\t\tself.log(\"error!!!\",e);\n\t\t\tself._error = e;\n\t\t\tself.setState('error');\n\t\t\treturn reject(e);\n\t\t};\n\t\t\n\t\t// log \"try to getUserMedia\",@constraints\n\t\treturn window.navigator.mediaDevices.getUserMedia({\n\t\t\tvideo: false,\n\t\t\taudio: self._constraints\n\t\t}).then(ok,err);\n\t}));\n};\n\n\nMediaRecording.prototype.start = async function (){\n\tvar self = this;\n\tif (self._startAt) { return self._startPromise };\n\tself._startAt = Date.now();\n\t\n\tlet val = await self.setup();\n\t\n\tif (self._error) {\n\t\tself._startPromise.resolve(self);\n\t\treturn;\n\t};\n\t\n\tself._state = 'starting';\n\t\n\tvar bps = self._audioBitRate;\n\t\n\tif (self._space) {\n\t\t// Create the filemodel\n\t\tlet fid = self.api().db().files().generateId();\n\t\tself._model = self.api().db().files().build(\n\t\t\t{id: fid + '.' + self._ext,\n\t\t\tuid: self.api().uid(),\n\t\t\tcid: self._space && self._space.id(),\n\t\t\ttype: self.mimeType(),\n\t\t\tstate: 'streaming',\n\t\t\tsize: 0,\n\t\t\tmetadata: {\n\t\t\t\tconstraints: self._constraints,\n\t\t\t\tchunkSize: self._chunkSize,\n\t\t\t\tbitsPerSecond: bps,\n\t\t\t\tmimeType: self.mimeType()\n\t\t\t// timeOffset: owner?.startTimeOffset\n\t\t\t}}\n\t\t);\n\t\tself._writer = self._model.createWriteStream(self.space().api());\n\t};\n\t\n\tvar opts = {\n\t\tmimeType: self._mimeType,\n\t\taudioBitsPerSecond: bps\n\t};\n\t\n\t// log \"start\",stream,options,opts\n\t\n\tself._recorder = new MediaRecorder(self.stream(),opts);\n\tself._recorder.audioChannels = 1;\n\t\n\t// bind events\n\t['start','stop','error','dataavailable','pause','resume'].map(function(type) {\n\t\treturn self._recorder[(\"on\" + type)] = function(e) { return self.proxy(type,e); };\n\t});\n\t\n\tself._startAt = Date.now();\n\tself._recorder.start(self._chunkSize);\n\t\n\twindow.MRI = self;\n\t\n\treturn self._startPromise;\n};\n\nMediaRecording.prototype.stop = function (){\n\tif (this._requestedStop) { return this };\n\tthis._requestedStop = true;\n\tthis._stopAt = Date.now();\n\tthis._recorder.stop();\n\treturn this._donePromise;\n};\n\nMediaRecording.prototype.warn = function (message){\n\tconsole.warn(message);\n\treturn this;\n};\n\nMediaRecording.prototype.check = function (){\n\tif (!this._lastChunkAt) { return };\n\tvar timeSinceChunk = (Date.now() - this._lastChunkAt);\n\tif (timeSinceChunk > (this._chunkSize * 4)) {\n\t\tthis._warn = true;\n\t\tthis.warn((\"no audio received in the last \" + timeSinceChunk + \"ms\"));\n\t\t// stop\n\t} else {\n\t\tif (this._warn) {\n\t\t\tconsole.log(\"got back!!\");\n\t\t\tthis._warn = false;\n\t\t};\n\t};\n\t\n\treturn this;\n};\n\nMediaRecording.prototype.duration = function (){\n\tif (this._duration) {\n\t\treturn this._duration;\n\t} else if (this._stoppedAt) {\n\t\treturn this._stoppedAt - this._startedAt;\n\t} else if (this._stopAt) {\n\t\treturn this._stopAt - this._startedAt;\n\t} else if (this._startedAt) {\n\t\treturn Date.now() - this._startedAt;\n\t} else {\n\t\treturn 0;\n\t};\n};\n\nMediaRecording.prototype.onrecstart = function (e){\n\t// @lastChunkAt = Date.now\n\t\n\tvar self = this;\n\tself._checker = setInterval(function() { return self.check(); },self._chunkSize);\n\tself._startedAt = Date.now();\n\tself.log(\"recstart\",self._startedAt - self._startAt);\n\t\n\tsetTimeout(function() {\n\t\tif (!len$(self._chunks)) {\n\t\t\treturn console.warn(\"something wrong with recording?! Timed out\");\n\t\t};\n\t},5000);\n\tself._startPromise.resolve(self);\n\treturn self;\n};\n\nMediaRecording.prototype.onrecstop = function (e){\n\tvar self = this;\n\tclearInterval(self._checker);\n\tself._stoppedAt = Date.now();\n\tlet remainder = self.duration() % self._frameSize;\n\tself._calcDuration = self._stoppedAt - self._startedAt;\n\t\n\t// chrome is recording with 60ms frames, and it will drop the current frame\n\t// so, if we are 43ms into the last frame, we know that this will not be included\n\tif (self.api().ua().isChrome()) {\n\t\tself._calcDuration -= remainder;\n\t};\n\t\n\tself._duration = self._calcDuration;\n\tself.log(\"recstop\",self._duration,remainder);\n\t\n\t// let remainder = @recorder.requestData\n\t// log \"got data\",remainder\n\tself.finalize();\n\t// no more chunks now?\n\t// teardown the mediaStream\n\tsetTimeout(function() { return self.teardown(); },200);\n\treturn self;\n};\n\nMediaRecording.prototype.onrecdataavailable = function (e){\n\tif (this._stoppedAt) {\n\t\tconsole.error(\"Received audio-data after stopping\");\n\t};\n\t\n\tlet nr = len$(this._chunks);\n\tthis._chunks.push(e.data);\n\tthis._size += e.data.size;\n\tlet time = Date.now();\n\tlet timecode = e.timecode || 0;\n\tthis._timecodes.push(timecode);\n\t\n\tlet deltaTime = this._lastTimecode ? ((timecode - this._lastTimecode)) : 0;\n\tthis.log(\"audiochunk\",e.data.size,this._size,(time - (this._lastChunkAt || time)),deltaTime,timecode);\n\t\n\tif (nr == 0) {\n\t\tthis._timecodeDuration = time - this._startAt;\n\t} else {\n\t\tthis._timecodeDuration += deltaTime;\n\t};\n\t\n\tthis._lastTimecode = timecode;\n\tthis._lastChunkAt = time;\n\tthis._firstChunkAt || (this._firstChunkAt = this._lastChunkAt);\n\tthis._writer && this._writer.write(e.data,this.api());\n\treturn this;\n};\n\nMediaRecording.prototype.onrecerror = function (e){\n\tthis.log(\"ERROR\",e);\n\tconsole.error(e);\n\tif (!this._error) {\n\t\tthis._error = e;\n\t\tthis.setState('error');\n\t\tthis._donePromise.resolve(this._error);\n\t};\n\treturn this;\n};\n\nMediaRecording.prototype.finalize = async function (){\n\tvar self = this;\n\tvar blob = self._blob || (self._blob = new Blob(self._chunks,{type: self.mimeType()}));\n\tvar fast = !window.DEBUG_AUDIO && !self._options.debug;\n\tawait (self._writer && self._writer.close(blob));\n\t\n\ttry {\n\t\tif (fast && self.api().localStore().get('calcRecDuration')) {\n\t\t\tconsole.log(\"trusting the calculated duration\");\n\t\t\tself._donePromise.resolve(self);\n\t\t\treturn self;\n\t\t};\n\t\t\n\t\tself._audioBuffer = await self.manager().audioBufferFromBlob(blob);\n\t\tself.log(\"response from buffer\",self._audioBuffer.duration);\n\t\tself._bufferDuration = self._audioBuffer.duration * 1000;\n\t\tself._duration = self._bufferDuration;\n\t\t\n\t\t// check difference\n\t\tif (Math.abs(self._bufferDuration - self._calcDuration) < 3) {\n\t\t\tconsole.log(\"calculated duration is correct\",self._bufferDuration - self._calcDuration);\n\t\t\tself.api().localStore().set('calcRecDuration',1);\n\t\t} else {\n\t\t\tself.api().localStore().del('calcRecDuration');\n\t\t};\n\t\t\n\t\tif (fast) {\n\t\t\tself._donePromise.resolve(self);\n\t\t\treturn self;\n\t\t};\n\t\t\n\t\t// return\n\t\t// this is the duration we do\n\t\t// get real duration\n\t\treturn self.manager().durationForAudioElement(self.audio(),self.duration()).then(function(dur) {\n\t\t\tself.log(\"duration according to manager\",dur);\n\t\t\tself._blobDuration = Math.round(dur);\n\t\t\t\n\t\t\tif (Math.abs(self._blobDuration - self._duration) > 1000) {\n\t\t\t\tself.setError(\"Duration mismatch from audio recording\");\n\t\t\t\tApp.uxa().flash(\"Duration mismatch from audio recording\");\n\t\t\t};\n\t\t\t// else\n\t\t\t// \t@duration = @blobDuration\n\t\t\treturn self._donePromise.resolve(self);\n\t\t});\n\t} catch (e) { };\n};\n\nMediaRecording.prototype.audio = function (){\n\tif (this._audio || !this._stoppedAt) { return this._audio };\n\tvar blob = this._blob || new Blob(this._chunks,{type: this.mimeType()});\n\tvar audio = this._audio = new Audio();\n\taudio.src = URL.createObjectURL(blob);\n\taudio.controls = true;\n\taudio.load();\n\treturn this._audio;\n};\n\nMediaRecording.prototype.play = function (){\n\tthis.audio().currentTime = 0;\n\tthis.audio().play();\n\treturn this;\n};\n\nMediaRecording.prototype.upload = function (){\n\tif (!this._model) {\n\t\t// Create the filemodel\n\t\tlet fid = this.api().db().files().generateId();\n\t\tthis._model = this.api().db().files().build(\n\t\t\t{id: fid + '.' + this._ext,\n\t\t\tuid: this.api().uid(),\n\t\t\tcid: window.SP.id(),\n\t\t\ttype: this.mimeType(),\n\t\t\tstate: 'streaming',\n\t\t\tsize: 0,\n\t\t\tmetadata: {\n\t\t\t\tconstraints: this._constraints,\n\t\t\t\tchunkSize: this._chunkSize,\n\t\t\t\tbitsPerSecond: this._audioBitRate,\n\t\t\t\tmimeType: this.mimeType()\n\t\t\t// timeOffset: owner?.startTimeOffset\n\t\t\t}}\n\t\t);\n\t\tthis._writer = this._model.createWriteStream(this.api());\n\t\tfor (let i = 0, items = iter$(this._chunks), len = items.length; i < len; i++) {\n\t\t\tthis._writer.write(items[i],this.api());\n\t\t};\n\t\tthis._writer.close();\n\t};\n\t\n\treturn this._model.upload();\n};\n\n\nMediaRecording.prototype.discard = function (){\n\treturn this;\n};\n\nMediaRecording.prototype.teardown = function (){\n\tif (this._stream) {\n\t\tfor (let i = 0, items = iter$(this._stream.getAudioTracks()), len = items.length, track; i < len; i++) {\n\t\t\ttrack = items[i];\n\t\t\twindow.MTR = track;\n\t\t\tlet ctr = track.getConstraints();\n\t\t\t// log \"track with constraints\",track,ctr\n\t\t\twindow.CTR = ctr;\n\t\t\ttrack.stop();\n\t\t};\n\t\tthis._stream = null;\n\t};\n\treturn this;\n};\n", "var $_;\nfunction len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nvar Imba = require('imba1'), _2 = Imba.createTagCache, _1 = Imba.createElementFactory(/*SCOPEID*/), _3 = Imba.createTagScope(/*SCOPEID*/);\n\n\nvar protocol$ = require('../protocol'), MSG = protocol$.MSG, ACTION = protocol$.ACTION, CAST = protocol$.CAST;\n\nvar util = require('../util');\nvar hark = require('hark');\n\nvar delayPromise = function(ms) {\n\tif(ms === undefined) ms = 1000;\n\treturn new Promise(function(resolve,reject) {\n\t\treturn setTimeout(resolve,ms);\n\t});\n};\n\nvar RecDoneDialog = require('../views/RecDoneDialog').RecDoneDialog;\nvar MediaRecording = require('../util/MediaRecording').MediaRecording;\n\n// externs;\n\nvar VolumeMeter = _3.defineTag('VolumeMeter', function(tag){\n\ttag.prototype.__decibel = {watch: 'decibelDidSet',name: 'decibel'};\n\ttag.prototype.decibel = function(v){ return this._decibel; }\n\ttag.prototype.setDecibel = function(v){\n\t\tvar a = this.decibel();\n\t\tif(v != a) { this._decibel = v; }\n\t\tif(v != a) { this.decibelDidSet && this.decibelDidSet(v,a,this.__decibel) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.build = function (){\n\t\tvar _t1, _t2, $ = ($_ = this.$).$build$ || ($_.$build$ = _2(this));\n\t\treturn this.$open('build0').setChildren(\n\t\t\tthis._meter = this._meter||_1('div',this).flag('meter')\n\t\t,2).synced();\n\t};\n\t\n\ttag.prototype.decibelDidSet = function (db){\n\t\tlet pct = Math.min(Math.max(0,db + 100),100) / 100;\n\t\tthis._meter.dom().style.transform = (\"scaleX(\" + pct + \")\");\n\t\treturn this;\n\t};\n});\n\nfunction Recording(branch,options){\n\tif(options === undefined) options = {};\n\tthis._branch = branch;\n\tthis._state = 'ready';\n\tthis._options = options;\n\tthis._live = options.live || false;\n\tbranch.setRecording(this);\n\tthis._startTimeOffset = branch.currentOffset();\n\tthis._startTime = branch.timeline().endTime();\n\tthis._draftEnd = branch.draft().end;\n\tthis._initialState = branch.state();\n\tthis;\n};\n\nexports.Recording = Recording; // export class \nRecording.prototype.branch = function(v){ return this._branch; }\nRecording.prototype.setBranch = function(v){ this._branch = v; return this; };\nRecording.prototype.state = function(v){ return this._state; }\nRecording.prototype.setState = function(v){ this._state = v; return this; };\nRecording.prototype.options = function(v){ return this._options; }\nRecording.prototype.setOptions = function(v){ this._options = v; return this; };\nRecording.prototype.audio = function(v){ return this._audio; }\nRecording.prototype.setAudio = function(v){ this._audio = v; return this; };\nRecording.prototype.live = function(v){ return this._live; }\nRecording.prototype.setLive = function(v){ this._live = v; return this; };\nRecording.prototype.startTimeOffset = function(v){ return this._startTimeOffset; }\nRecording.prototype.setStartTimeOffset = function(v){ this._startTimeOffset = v; return this; };\n\nRecording.prototype.space = function (){\n\treturn this.branch().space();\n};\n\nRecording.prototype.log = function (){\n\tvar api_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>0 ? i : 0);\n\twhile(i>0) params[i-1] = $0[--i];\n\treturn (api_ = this.api()).log.apply(api_,[].concat(['rec'], Array.from(params)));\n};\n\nRecording.prototype.api = function (){\n\treturn this.space().api();\n};\n\nRecording.prototype.stream = function (){\n\treturn this.branch().stream();\n};\n\nRecording.prototype.duration = function (){\n\treturn this._startAt ? (((this._stopAt || Date.now()) - this._startAt)) : 0;\n};\n\nRecording.prototype.startTime = function (){\n\treturn this._startTime;\n};\n\nRecording.prototype.currentTime = function (){\n\treturn this.duration();\n};\n\nRecording.prototype.isRecording = function (){\n\treturn this.state() == 'recording';\n};\n\nRecording.prototype.volumeMeter = function (){\n\tlet _t1, $ = this.$$ || (this.$$ = {});\n\treturn (this._volumeMeter = this._volumeMeter||_1(VolumeMeter,this).flag('volumeMeter')).end();\n};\n\nRecording.prototype.controls = function (){\n\tlet _t1, $ = this.$$ || (this.$$ = {});\n\treturn (this._controls = this._controls||_1('div',this).flag('controls')).setContent(\n\t\tthis.volumeMeter()\n\t,3);\n};\n\nRecording.prototype.start = function (){\n\tvar self = this;\n\treturn self._start || (self._start = new Promise(function(resolve,reject) {\n\t\tself.space().setRecording(self);\n\t\tself._origin = self.space().cursor().current();\n\t\tself._startTimeOffset = self.stream().lastTimeOffset(); // not based on timeline/cues\n\t\tself._isFirstRecording = len$(self.stream().recordings()) == 0; // lastActions[CAST.RECSTART]\n\t\t\n\t\tself.api().analytics().castRecStart(self.branch().id());\n\t\t\n\t\tself.setState('starting');\n\t\t// should contact server and ask for the exclusive right\n\t\t// to editing this stream starting now (with a timeout)\n\t\t// var wait = Math.max(-duration,200)\n\t\tvar start = util.delay(100);\n\t\t\n\t\tif (self.options().mic) {\n\t\t\tself.setAudio(window.MR = new MediaRecording({chunkSize: 2400,constraints: self.options().mic,space: self.space(),owner: self}));\n\t\t\tstart = self.audio().start();\n\t\t};\n\t\t\n\t\tlet catcher = function(e) {\n\t\t\tself.space().setRecording(null);\n\t\t\tself.teardown();\n\t\t\treturn reject(e);\n\t\t};\n\t\t\n\t\tstart.then(function() {\n\t\t\tself._startAt = self.audio() ? self.audio().startedAt() : Date.now();\n\t\t\tself.setState('recording');\n\t\t\tself.options().startTime = self._startAt;\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\tif (self.audio()) {\n\t\t\t\tself._hark = hark(self.audio().stream());\n\t\t\t\tself._hark._stream = self.audio().stream();\n\t\t\t\t// var speechEvents = hark(stream, {})\n\t\t\t\tself._hark.on('speaking',function() { return true; }); // console.log('speaking')\n\t\t\t\tself._hark.on('stopped_speaking',function() { return true; }); // console.log('stopped_speaking')\n\t\t\t\tself._hark.on('volume_change',function(e) { return self._volumeMeter && self._volumeMeter.setDecibel(e); });\n\t\t\t\tself.options().audiofile = self.audio()._model.toJSON();\n\t\t\t};\n\t\t\t\n\t\t\t// console.log \"startAt relative to now\",Date.now - @startAt\n\t\t\tlet op = [self.branch().toSnapshot({}),self.options()];\n\t\t\tself.stream().anchorTime({offset: self._startTimeOffset,now: self._startAt});\n\t\t\t\n\t\t\tself.stream().freezeTime(self._startAt,function() {\n\t\t\t\t// stream.lock\n\t\t\t\t// stream.sync\n\t\t\t\tconsole.log(\"setMode recording from\",self.branch().mode());\n\t\t\t\tself.branch().setMode('recording');\n\t\t\t\tself._recEvent = self.branch().push_(ACTION.RECSTART,op,{timeOffset: self._startTimeOffset}); // force offset?\n\t\t\t\t\n\t\t\t\t// this is an example of a point where it would be nice to batch timing\n\t\t\t\t// console.log \"flush locals!\"\n\t\t\t\tself.space().view().focusViewport();\n\t\t\t\tself.space().client().flushLocals();\n\t\t\t\tself.space().pointerTracker().start();\n\t\t\t\treturn resolve(self);\n\t\t\t});\n\t\t\t\n\t\t\t// console.warn \"stream.nextOffset\",stream.nextOffset\n\t\t\treturn self._interval = setInterval(function() {\n\t\t\t\t// if audio\n\t\t\t\t// \tconsole.log(\"rec interval\",audio.duration,stream.nextTimeOffset - @startTimeOffset)\n\t\t\t\treturn self.branch().push_(ACTION.PING,[Date.now()]);\n\t\t\t},10000);\n\t\t},catcher);\n\t\treturn self;\n\t}));\n};\n\nRecording.prototype.onaudioerror = function (e){\n\treturn console.log(\"audio-error!\",e);\n};\n\nRecording.prototype.stop = async function (){\n\tvar _t1;\n\tif (this._stopAt) {\n\t\treturn this;\n\t};\n\t\n\tclearInterval(this._interval);\n\t\n\tthis.setState('stopping');\n\tthis._stopAt = Date.now();\n\t\n\tthis.space().browser().stop();\n\tthis.space().pointerTracker().stop();\n\t\n\t// we should not allow any more events for some time - to make sure\n\t// that the real duration of the audio won't end before the last few events\n\tthis.log('stop',this._stopAt);\n\t\n\tawait (this.audio() ? this.stopAudio() : Promise.resolve({}));\n\t\n\tthis._stopTimeOffset = Math.round(this._startTimeOffset + (this._stopAt - this._startAt));\n\tthis.stream().anchorTime({offset: this._stopTimeOffset,now: this._stopAt});\n\tthis._stopEvent = this.branch().push_(ACTION.RECSTOP,[],{timeOffset: this._stopTimeOffset});\n\treturn ((_1(RecDoneDialog).flag('modal')).setData(this).end()).show();\n};\n\nRecording.prototype.stopAudio = async function (){\n\t// give the audio 300ms extra time to end\n\tawait delayPromise(300);\n\tawait this.audio().stop();\n\t\n\tif (this._hark) {\n\t\tthis._hark.stop();\n\t\tthis._hark = null;\n\t};\n\t\n\tthis._stopAt = this._startAt + this.audio().duration();\n\tconsole.log(\"audio.duration\",this.audio().duration());\n\treturn this;\n};\n\nRecording.prototype.discard = async function (){\n\tvar audio_;\n\tthis.branch().timeline().pause();\n\tawait this.branch().trimToAction(this._origin);\n\t// discard the audio recording as well\n\t(audio_ = this.audio()) && audio_.discard && audio_.discard();\n\tif (this.branch().timeline().duration() == 0) {\n\t\tthis.branch().timeline().setState('watching');\n\t};\n\t\n\tthis.teardown();\n\tthis.api().analytics().castRecDiscard(this.branch().id());\n\treturn Promise.resolve(this);\n};\n\nRecording.prototype.finish = async function (){\n\t// await (audio ? audio.finalize : {})\n\tvar upload = await (this.audio() ? this.audio().upload() : {});\n\t\n\tif (this.audio()) {\n\t\t// \n\t\tvar audioMarker = [1,this._startTimeOffset,this._stopTimeOffset - this._startTimeOffset,this.audio()._model.id];\n\t\tconsole.log(\"audioMarker\",audioMarker,this.audio().duration(),this._stopTimeOffset - this._startTimeOffset);\n\t\tthis.branch().draft().audio.push(audioMarker);\n\t};\n\t// update the end-item here\n\t// TODO possibly end it at the audio-marker\n\tif (this._isFirstRecording) {\n\t\tthis.branch().draft().start = this._startTimeOffset;\n\t};\n\t\n\tthis.branch().draft().end = this._stopTimeOffset;\n\tconsole.log(\"finishing\",this._stopTimeOffset,this._startTimeOffset);\n\t\n\tawait this.branch().save({});\n\tthis.setState('stopped');\n\tthis.branch().setMode('paused');\n\t// branch.timeline.pause\n\tthis.teardown();\n\tImba.Scheduler.event({type: \"recstop\"});\n\tthis.api().analytics().castRecSave(this.branch().id());\n\t// log(\"CASTREC\",stream.lastActions[ACTION.RECSTART],stream.lastActions[ACTION.RECSTOP])\n\treturn Promise.resolve(this);\n};\n\nRecording.prototype.teardown = function (){\n\tvar v_;\n\tclearInterval(this._interval);\n\tif (this.branch().state() != this._initialState) {\n\t\tthis.branch().model().update({state: this._initialState});\n\t};\n\t\n\tthis.branch().setRecording(null);\n\treturn (this.space().setRecording(null),null);\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\n\n// use Struct?\n\nfunction Segment(data,owner){\n\tthis._data = data;\n\tthis._data._cue = this;\n\tthis._owner = owner;\n\tthis._version = 0;\n};\n\nexports.Segment = Segment; // export class \nSegment.deserialize = function (data,owner){\n\treturn new this(data,owner);\n};\n\nSegment.prototype.version = function(v){ return this._version; }\nSegment.prototype.setVersion = function(v){ this._version = v; return this; };\nSegment.prototype.data = function(v){ return this._data; }\nSegment.prototype.setData = function(v){ this._data = v; return this; };\nSegment.prototype.__disabled = {watch: 'dirty',name: 'disabled'};\nSegment.prototype.disabled = function(v){ return this._disabled; }\nSegment.prototype.setDisabled = function(v){\n\tvar a = this.disabled();\n\tif(v != a) { this._disabled = v; }\n\tif(v != a) { this.dirty && this.dirty(v,a,this.__disabled) }\n\treturn this;\n};\n\nSegment.prototype.span = function (){\n\treturn this.end() - this.start();\n};\n\nSegment.prototype.start = function (){\n\treturn this._data[1];\n};\n\nSegment.prototype.span = function (){\n\treturn this._data[2];\n};\n\nSegment.prototype.end = function (){\n\treturn this.start() + this._data[2];\n};\n\nSegment.prototype.duration = function (){\n\treturn this._data[3] || 0;\n};\n\nSegment.prototype.options = function (){\n\treturn this._data[4];\n};\n\nSegment.prototype.setOptions = function (o){\n\tthis._data[4] = o;\n\treturn this.dirty();\n};\n\nSegment.prototype.dirty = function (){\n\tthis._version++;\n\tthis._owner && this._owner.dirty && this._owner.dirty();\n\treturn this;\n};\n\nSegment.prototype.moveTo = function (value,anchor){\n\t// let start = value + span * anchor\n\t// let end = value + span * (1 - anchor)\n\tif(anchor === undefined) anchor = 0;\n\tthis._data[1] = Math.round(value - this.span() * anchor);\n\t// @data[2] = Math.round(end) - \n\treturn this.dirty();\n};\n\nSegment.prototype.anchor = function (anchor){\n\tif(anchor === undefined) anchor = 0;\n\treturn this.start() + this.span() * anchor;\n};\n\nSegment.prototype.contains = function (offset){\n\tif ((typeof offset=='number'||offset instanceof Number)) {\n\t\treturn offset >= this.start() && this.end() >= offset;\n\t} else if (offset instanceof Segment) {\n\t\treturn offset.start() >= this.start() && this.end() >= offset.end();\n\t} else {\n\t\treturn false;\n\t};\n};\n\nSegment.prototype.setStart = function (value,move){\n\tif(move === undefined) move = false;\n\tif (this.start() != value) {\n\t\tlet change = (this.start() - value);\n\t\tthis._data[1] = value;\n\t\tif (!move) { this._data[2] += change };\n\t\tthis.dirty();\n\t};\n\treturn this;\n};\n\nSegment.prototype.setEnd = function (value,move){\n\tif(move === undefined) move = false;\n\tif (this.end() != value) {\n\t\tthis._data[2] = Math.max(0,value - this.start());\n\t\tthis.dirty();\n\t};\n\treturn this;\n};\n\nSegment.prototype.setSpan = function (value){\n\tif (this.span() != value) {\n\t\tthis._data[2] = value;\n\t\tthis.dirty();\n\t};\n\tthis;\n\treturn this;\n};\n\nSegment.prototype.setDuration = function (value){\n\tif (this.duration() != value) {\n\t\tthis._data[3] = value;\n\t\tthis.dirty();\n\t};\n\treturn this;\n};\n\nfunction Cue(){ return Segment.apply(this,arguments) };\n\nsubclass$(Cue,Segment);\nexports.Cue = Cue; // export class \n\n\nfunction Media(){ return Segment.apply(this,arguments) };\n\nsubclass$(Media,Segment);\nexports.Media = Media; // export class \n\n\n\nfunction TimelineCues(data){\n\tvar self = this;\n\tself._data = data;\n\tself._ranges = [];\n\tself._cues = (data.cues || []).map(function(item) { return new Cue(item,self); }).sort(function(a,b) { return a.start() - b.start(); });\n\t// @media = (data:audio or []).map(do |item,i| Media.new(item,self))\n\tself._version = 0;\n\tself._dirty = true;\n\t// normalizeMedia\n\tself.compute();\n\tself;\n};\n\nexports.TimelineCues = TimelineCues; // export class \nTimelineCues.prototype.data = function(v){ return this._data; }\nTimelineCues.prototype.setData = function(v){ this._data = v; return this; };\nTimelineCues.prototype.cues = function(v){ return this._cues; }\nTimelineCues.prototype.setCues = function(v){ this._cues = v; return this; };\nTimelineCues.prototype.ranges = function(v){ return this._ranges; }\nTimelineCues.prototype.setRanges = function(v){ this._ranges = v; return this; };\nTimelineCues.prototype.version = function(v){ return this._version; }\nTimelineCues.prototype.setVersion = function(v){ this._version = v; return this; };\nTimelineCues.prototype.media = function(v){ return this._media; }\nTimelineCues.prototype.setMedia = function(v){ this._media = v; return this; };\n\nTimelineCues.prototype.normalizeMedia = function (){\n\t// sort by when it starts\n\tthis.media().sort(function(a,b) { return a.start() - b.start(); });\n\t\n\tfor (let i = 0, items = iter$(this.media()), len = items.length; i < len; i++) {\n\t\tlet next = this.media()[i + 1];\n\t};\n\treturn this;\n};\n\nTimelineCues.prototype.markers = function (){\n\treturn this._data.markers || [];\n};\n\nTimelineCues.prototype.audio = function (){\n\treturn this._data.audio || this.markers().filter(function(_0) { return _0.type == 'audio'; });\n};\n\nTimelineCues.prototype.lastAudioMarkerOffset = function (){\n\tvar Math_;\n\tvar ends = this.audio().map(function(item) {\n\t\treturn item[1] + item[2];\n\t});\n\treturn Math.max.apply(Math,ends);\n};\n\nTimelineCues.prototype.dirty = function (){\n\tthis._dirty = true;\n\tthis._version++;\n\tthis._data.cues = this._cues.map(function(cue) { return cue.data(); });\n\treturn this;\n};\n\nTimelineCues.prototype.ranges = function (){\n\tthis.compute();\n\treturn this._ranges;\n};\n\nTimelineCues.prototype.addCue = function (data){\n\tlet cue = Cue.deserialize(data,this);\n\tthis._cues.push(cue);\n\tthis._cues.sort(function(a,b) { return a.start() - b.start(); });\n\tthis.dirty();\n\treturn cue;\n};\n\nTimelineCues.prototype.removeCue = function (item){\n\tthis._cues = this._cues.filter(function(cue) { return cue != item && cue.data() != item; });\n\treturn this.dirty();\n};\n\nTimelineCues.prototype.trimCuesAndAudio = function (offset){\n\t\n\t// handle cues\n\tthis._cues = this._cues.filter(function(item) { return item.start() < offset; });\n\t\n\tfor (let i = 0, items = iter$(this._cues), len = items.length, cue; i < len; i++) {\n\t\tcue = items[i];\n\t\tif (cue.end() <= offset) { continue; };\n\t\tcue.setEnd(offset);\n\t};\n\t\n\t// handle audio\n\tthis._data.audio = this._data.audio.filter(function(item) { return item[1] < offset; });\n\tthis._data.end = offset;\n\t// shouldnt the audio also be overridden?\n\tthis.dirty();\n\t\n\treturn this._data;\n};\n\n\nTimelineCues.prototype.compute = function (){\n\tvar time = 0;\n\t\n\tif (!this._dirty) { return this._ranges };\n\tthis._dirty = false;\n\t\n\t// @cues = @data:cues # markers.filter do $1:type == 'cue'\n\t// if @data:cues\n\t// \t@cues = @data:cues.map do |cue|\n\t// \t\t{offset: cue[1], span: cue[2], duration: cue[3]}\n\t\n\t// could support timeMultiplier instead of duration?\n\t\n\tvar prev = {o0: 0,o1: 0,t0: 0,t1: 0};\n\tthis._ranges = [];\n\t\n\t// first sort them\n\tvar cues = this._cues.slice(0).filter(function(item) { return item.span() > 0 && !item.disabled(); });\n\tcues = cues.map(function(item) { return item.data().slice(0); }).sort(function(a,b) { return a[1] - b[1]; });\n\t\n\t// only include filters with positive span\n\t// cues = cues.filter do |cue|\n\t//\tcue[2] > 0 and cue\n\t\n\tlet i = 0;\n\tvar cue;\n\twhile (cue = cues[i]){\n\t\tlet prev = cues[i - 1];\n\t\t\n\t\tif (prev) {\n\t\t\tlet po1 = prev[1] + prev[2];\n\t\t\tlet co1 = cue[1] + cue[2];\n\t\t\t// the previous cue fully wraps this\n\t\t\tif ((cue[1] >= prev[1]) && po1 >= co1) {\n\t\t\t\tcues.splice(i,1);\n\t\t\t\tcontinue;\n\t\t\t} else if (po1 > cue[1]) {\n\t\t\t\tlet delta = (po1 - cue[1]);\n\t\t\t\tcue[1] += delta;\n\t\t\t\tcue[2] -= delta;\n\t\t\t};\n\t\t\t// previous starts somewhere into the current one\n\t\t};\n\t\t\n\t\ti++;\n\t};\n\t\n\t// drop cues that are contained by others\n\t\n\tfor (let i = 0, items = iter$(cues), len = items.length, item; i < len; i++) {\n\t\titem = items[i];\n\t\tvar next = cues[i + 1];\n\t\tlet dur = item[3];\n\t\t\n\t\t// if the next one is contained by the current\n\t\tif (dur < 0) {\n\t\t\tdur = item[2] * -dur;\n\t\t};\n\t\t\n\t\tvar range = {\n\t\t\to0: Math.max(item[1],0),\n\t\t\to1: Math.max(item[1] + item[2],0),\n\t\t\tduration: dur,\n\t\t\toptions: item[4]\n\t\t};\n\t\t\n\t\tif ((range.o1 - range.o0) <= 0) {\n\t\t\tcontinue;\n\t\t};\n\t\t\n\t\tif (next) {\n\t\t\trange.o1 = Math.min(range.o1,next[1]);\n\t\t};\n\t\t\n\t\t// add gaps between?\n\t\tvar gap = range.o0 - prev.o1;\n\t\trange.t0 = prev.t1 + gap;\n\t\trange.t1 = range.t0 + (range.duration || 0);\n\t\tthis._ranges.push(range);\n\t\tprev = range;\n\t};\n\t\n\treturn this._ranges;\n};\n\nTimelineCues.prototype.timeToOffset = function (t){\n\tthis.compute();\n\tvar i = 0,l = this._ranges.length,r = null;\n\t\n\tif (l == 0) {\n\t\treturn t;\n\t};\n\t\n\twhile (i < l){\n\t\tr = this._ranges[i++];\n\t\tif (t < r.t0) {\n\t\t\treturn r.o0 - (r.t0 - t);\n\t\t} else if (t < r.t1) {\n\t\t\treturn r.o0 + (r.o1 - r.o0) * ((t - r.t0) / (r.t1 - r.t0));\n\t\t};\n\t};\n\t\n\treturn r.o1 + (t - r.t1);\n};\n\n\nTimelineCues.prototype.offsetToTime = function (t){\n\tthis.compute();\n\tvar i = 0,l = this._ranges.length,r = null;\n\t\n\tif (l == 0) {\n\t\treturn t;\n\t};\n\t\n\twhile (i < l){\n\t\tr = this._ranges[i++];\n\t\tif (t < r.o0) {\n\t\t\treturn r.t0 - (r.o0 - t);\n\t\t} else if (t < r.o1) {\n\t\t\treturn r.t0 + (r.t1 - r.t0) * ((t - r.o0) / (r.o1 - r.o0));\n\t\t};\n\t};\n\t\n\treturn r.t1 + (t - r.o1);\n};\n\nTimelineCues.prototype.duration = function (){\n\treturn this.offsetToTime(this._data.end || this.lastAudioMarkerOffset()) - this.offsetToTime(this._data.start || 0);\n};\n\nTimelineCues.prototype.endOffset = function (){\n\treturn this._data.end || this.lastAudioMarkerOffset();\n};\n\nTimelineCues.prototype.compileFunction = function (flip){\n\tif(flip === undefined) flip = false;\n\tvar str = \"return EXPR\";\n\t\n\tvar tpl = \"( v<o0 ? (t0-(o0-v)) : (v<o1? t0 + (t1-t0)*((v-o0)/(o1-o0)) : EXPR ) )\";\n\tvar ltpl = \"(t1+(v-o1))\";\n\t\n\tvar repl = function(str,item) {\n\t\treturn str.replace(/([ot]\\d)/g,function(m,v) {\n\t\t\tif (flip) {\n\t\t\t\tif (v[0] == 't') {\n\t\t\t\t\tv = 'o' + v[1];\n\t\t\t\t} else {\n\t\t\t\t\tv = 't' + v[1];\n\t\t\t\t};\n\t\t\t};\n\t\t\treturn item[v];\n\t\t});\n\t};\n\t\n\tvar last = null;\n\tfor (let i = 0, items = iter$(this._ranges), len = items.length, r; i < len; i++) {\n\t\tr = items[i];\n\t\tlast = r;\n\t\tstr = str.replace(\"EXPR\",repl(tpl,r));\n\t};\n\tstr = str.replace(\"EXPR\",repl(ltpl,last));\n\t\n\treturn new Function('v',str);\n};\n\nTimelineCues.prototype.audioclips = function (startOffset,endOffset,includeGaps){\n\t// var tracks = markers.filter do $1:type == 'audio'\n\tif(startOffset === undefined) startOffset = 0;\n\tif(endOffset === undefined) endOffset = 0;\n\tif(includeGaps === undefined) includeGaps = false;\n\treturn this.sliceClips(this.audio(),startOffset,endOffset,includeGaps);\n};\n\nTimelineCues.prototype.sliceClips = function (tracks,startOffset,endOffset,includeGaps){\n\tif(startOffset === undefined) startOffset = 0;\n\tif(endOffset === undefined) endOffset = 0;\n\tif(includeGaps === undefined) includeGaps = false;\n\tthis.compute();\n\t// var dur = tl:endOffset - tl:startOffset\n\t// what if this does not work?\n\t// tracks = tracks ||= JSON.parse(JSON.stringify(tracks))\n\t\n\tvar clips = [];\n\t\n\tfor (let i = 0, items = iter$(tracks), len = items.length, track; i < len; i++) {\n\t\ttrack = items[i];\n\t\tlet next = tracks[i + 1];\n\t\tlet offset = track[1];\n\t\tlet span = track[2]; // should be span\n\t\t\n\t\tif (next && (offset + span) > next[1]) {\n\t\t\tspan = next[1] - offset;\n\t\t};\n\t\t\n\t\tvar clip = {\n\t\t\tsource: track,\n\t\t\tskip: 0,\n\t\t\tfid: track[3],\n\t\t\to0: offset,\n\t\t\to1: offset + span,\n\t\t\tt0: this.offsetToTime(offset),\n\t\t\tt1: this.offsetToTime(offset + span)\n\t\t};\n\t\t// offsetToTime already calibrates here?\n\t\t// if we start in the middle of a clip - the offset would be strange?\n\t\tclip.duration = clip.o1 - clip.o0;\n\t\tif (span) { clips.push(clip) };\n\t};\n\t\n\t// console.log clips\n\t// loop through the ranges to \n\t// CA0 = JSON.parse(JSON.stringify(clips))\n\t// console.log \"clips before slicing\",CA0,@ranges\n\t// console.log @cues,audio\n\t\n\tvar sliced = [];\n\tvar t;\n\tvar offsets = 0;\n\tvar ki = 0;\n\tclip;\n\t\n\twhile (clip = clips[ki++]){\n\t\tvar mediaTime0 = clip.t0;\n\t\tvar mediaTime1 = clip.t1;\n\t\t\n\t\tfor (let i = 0, items = iter$(this._ranges), len = items.length, range; i < len; i++) {\n\t\t\trange = items[i];\n\t\t\tlet rangeTime0 = range.t0;\n\t\t\tlet rangeTime1 = range.t1;\n\t\t\tlet specialGap = range.duration > 0 && (range.options instanceof Array);\n\t\t\t// skip if range starts after clip\n\t\t\t// skip if range ends before clip\n\t\t\t\n\t\t\t// if specialGap\n\t\t\t// \tconsole.log \"gap is special!!\",range\n\t\t\t\n\t\t\tif (rangeTime0 > mediaTime1 || mediaTime0 > rangeTime1) {\n\t\t\t\tcontinue;\n\t\t\t};\n\t\t\t\n\t\t\t// if the clip is fully encapsulated\n\t\t\tif (mediaTime0 >= rangeTime0 && rangeTime1 >= mediaTime1) {\n\t\t\t\t// --ki\n\t\t\t\tclip.disabled = range;\n\t\t\t\t// clips.splice(ki,1)\n\t\t\t\t// mark clip as encapsulated\n\t\t\t\t// calculate the new timings for this clip?\n\t\t\t\tbreak;\n\t\t\t};\n\t\t\t\n\t\t\tif (range.o0 > clip.o0) {\n\t\t\t\t// collapse starts into the clip\n\t\t\t\t\n\t\t\t\t// we can first create \n\t\t\t\tif (includeGaps || specialGap) {\n\t\t\t\t\t// create a clip representing the cue\n\t\t\t\t\tlet insideCue = {\n\t\t\t\t\t\tcue: range,\n\t\t\t\t\t\tsource: clip.source,\n\t\t\t\t\t\tfid: clip.fid,\n\t\t\t\t\t\to0: range.o0,\n\t\t\t\t\t\tt0: range.t0,\n\t\t\t\t\t\to1: Math.min(clip.o1,range.o1),\n\t\t\t\t\t\tt1: Math.min(clip.t1,range.t1), // this is wrong\n\t\t\t\t\t\tskip: clip.skip + (range.o0 - clip.o0)\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\tif (specialGap) {\n\t\t\t\t\t\tinsideCue.realSkip = insideCue.skip;\n\t\t\t\t\t\tinsideCue.skip += (range.options[0] - range.o0);\n\t\t\t\t\t};\n\t\t\t\t\t// console.log \"added specialGap\"\n\t\t\t\t\tclips.splice(ki++,0,insideCue);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (range.o1 < clip.o1) {\n\t\t\t\t\t// clip is actually longer\n\t\t\t\t\t// so we should split it up\n\t\t\t\t\tlet clone = {\n\t\t\t\t\t\tsource: clip.source,\n\t\t\t\t\t\tfid: clip.fid,\n\t\t\t\t\t\to0: range.o1,\n\t\t\t\t\t\tt0: range.t1,\n\t\t\t\t\t\to1: clip.o1,\n\t\t\t\t\t\tt1: clip.t1,\n\t\t\t\t\t\tskip: clip.skip + (range.o1 - clip.o0) // maybe\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\tclips.splice(ki,0,clone);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// this clip should stop where the range started\n\t\t\t\tclip.o1 = range.o0;\n\t\t\t\tclip.t1 = range.t0;\n\t\t\t\tbreak;\n\t\t\t} else if (range.o1 > clip.o0) {\n\t\t\t\t// we are starting somewhere inside the clip\n\t\t\t\t// console.log \"move start of media\",range:o1 - clip:o0\n\t\t\t\t\n\t\t\t\t// create a representation of the gap inside and insert before\n\t\t\t\tif (includeGaps) {\n\t\t\t\t\tlet insideCue = {\n\t\t\t\t\t\tcue: range,\n\t\t\t\t\t\tsource: clip.source,\n\t\t\t\t\t\tfid: clip.fid,\n\t\t\t\t\t\to0: clip.o0,\n\t\t\t\t\t\tt0: clip.t0,\n\t\t\t\t\t\to1: Math.min(clip.o1,range.o1),\n\t\t\t\t\t\tt1: Math.min(clip.t1,range.t1), // this is wrong\n\t\t\t\t\t\tskip: clip.skip\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\tif (specialGap) {\n\t\t\t\t\t\t// this is wrong - for sure\n\t\t\t\t\t\tconsole.log(\"special gap will be wrong\");\n\t\t\t\t\t\tinsideCue.skip += (range.options[0] - range.o0);\n\t\t\t\t\t};\n\t\t\t\t\t\n\t\t\t\t\tclips.splice(ki++,0,insideCue);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tclip.skip = clip.skip + (range.o1 - clip.o0);\n\t\t\t\tclip.t0 = range.t1;\n\t\t\t\tclip.o0 = range.o1; // this is the actual fix(!)\n\t\t\t\t// update o0 now as well?\n\t\t\t};\n\t\t\t\n\t\t\t// elif (mediaTime1 > rangeTime1)\n\t\t\t// \tclip:t0 = rangeTime1\n\t\t\t// \t# is it correct to skip offset?\n\t\t\t// \tclip:skip = clip:skip + (range:o1 - clip:o0)\n\t\t\t// \t# change duration as well, no?\n\t\t};\n\t};\n\t\n\tclips.map(function(clip) {\n\t\treturn clip.duration = clip.t1 - clip.t0;\n\t});\n\t\n\tif (includeGaps) {\n\t\tclips = clips.sort(function(a,b) { return a.o0 - b.o0; });\n\t} else {\n\t\tclips = clips.filter(function(clip) { return !clip.disabled; });\n\t\tclips = clips.sort(function(a,b) { return a.t0 - b.t0; });\n\t};\n\t\n\tif (endOffset) {\n\t\tvar endTime = this.offsetToTime(endOffset);\n\t\tfor (let i = 0, items = iter$(clips), len = items.length, clip; i < len; i++) {\n\t\t\tclip = items[i];\n\t\t\tif (clip.t0 > endTime) {\n\t\t\t\t// console.log \"clip starts after end!\"\n\t\t\t\tclip.outOfBounds = true;\n\t\t\t};\n\t\t\tif (clip.t1 > endTime) {\n\t\t\t\t// console.log \"end clip here\"\n\t\t\t\tclip.t1 = endTime;\n\t\t\t};\n\t\t};\n\t};\n\t\n\t\n\tif (startOffset) {\n\t\tlet startTime = this.offsetToTime(startOffset);\n\t\tfor (let i = 0, items = iter$(clips), len = items.length, clip; i < len; i++) {\n\t\t\tclip = items[i];\n\t\t\tclip.t0 -= startTime;\n\t\t\tclip.t1 -= startTime;\n\t\t\t\n\t\t\tif (clip.t0 < 0) {\n\t\t\t\tclip.skip += Math.abs(clip.t0);\n\t\t\t\tclip.t0 = 0;\n\t\t\t};\n\t\t};\n\t};\n\t\n\tif (!includeGaps) {\n\t\tclips = clips.filter(function(clip) { return clip.t1 > 0 && !clip.outOfBounds && (clip.t1 - clip.t0) > 0; });\n\t};\n\t\n\treturn clips;\n};\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar self = {};\nvar msgpack = require('msgpack-lite');\n\nvar TYPES = exports.TYPES = {\n\t// General navigation\n\tENTER: 0,\n\tLEAVE: 1,\n\tVISIBILITY: 2,\n\t\n\t// Space-specific. Only actions that are not tracked in the stream\n\tPLAYSTATE: 10,\n\tBRANCH: 11,\n\tSELECTION: 12,\n\tCOPY: 13,\n\tCREATE_BRANCH: 14\n};\n\nvar TYPE_NAME = exports.TYPE_NAME = {};\nTYPE_NAME[TYPES.ENTER] = 'enter';\nTYPE_NAME[TYPES.LEAVE] = 'leave';\nTYPE_NAME[TYPES.VISIBILITY] = 'visibility';\nTYPE_NAME[TYPES.PLAYSTATE] = 'playstate';\nTYPE_NAME[TYPES.BRANCH] = 'branch';\nTYPE_NAME[TYPES.SELECTION] = 'selection';\nTYPE_NAME[TYPES.COPY] = 'copy';\n\nexports.encode = self.encode = function (type,params){\n\tif(params === undefined) params = [];\n\tvar result = [Date.now(),type].concat(params);\n\treturn msgpack.encode(result);\n};\n\n\nfunction Event(packet){\n\tthis._packet = packet;\n};\n\nEvent.prototype.timestamp = function (){\n\treturn this._packet[0];\n};\n\nEvent.prototype.code = function (){\n\treturn this._packet[1];\n};\n\nEvent.prototype.params = function (){\n\treturn this._packet.slice(2);\n};\n\nEvent.prototype.date = function (){\n\treturn this._date || (this._date = new Date(this.timestamp()));\n};\n\nEvent.prototype.name = function (){\n\treturn TYPE_NAME[this.code()];\n};\n\nvar handlers = {};\nEvent.handles = function (code){\n\thandlers[code] = this;\n\treturn this;\n};\n\nEvent.decode = function (packet){\n\tvar cls = handlers[packet[1]] || Event;\n\treturn new cls(packet);\n};\n\nfunction PlayState(){ return Event.apply(this,arguments) };\n\nsubclass$(PlayState,Event);\nPlayState.handles(TYPES.PLAYSTATE);\n\nPlayState.prototype.playState = function (){\n\treturn this.params()[0];\n};\n\nPlayState.prototype.timeOffset = function (){\n\treturn this.params()[1];\n};\n\nPlayState.prototype.playRate = function (){\n\treturn this.params()[2];\n};\n\nfunction Visibility(){ return Event.apply(this,arguments) };\n\nsubclass$(Visibility,Event);\nVisibility.handles(TYPES.VISIBILITY);\n\nVisibility.prototype.isVisible = function (){\n\treturn this.params()[0];\n};\n\nfunction Decoder(data){\n\tthis._data = new Uint8Array(data);\n\tthis._decoder = new (msgpack.Decoder)();\n\tthis._decoder.write(this._data);\n};\n\nexports.Decoder = Decoder; // export class \nDecoder.prototype.fetch = function (){\n\tif (this._decoder.offset < this._data.byteLength) {\n\t\tvar data = this._decoder.fetch();\n\t\treturn this.decode(data);\n\t};\n};\n\nDecoder.prototype.decode = function (packet){\n\treturn Event.decode(packet);\n};\n\nDecoder.prototype.fetchAll = function (){\n\tvar event;\n\tvar result = [];\n\twhile (event = this.fetch()){\n\t\tresult.push(event);\n\t};\n\treturn result;\n};\n\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar protocol$ = require('../protocol'), WIDGET = protocol$.WIDGET, CAST = protocol$.CAST, SCON = protocol$.SCON;\nvar TimelineCues = require('../util/TimelineCues').TimelineCues;\nvar AudioManager = require('../util/AudioManager').AudioManager;\n\nvar Delay = require('../util/Delay').Delay;\n\nvar tracking = require('../tracking');\nvar ALLOW_BUFFERING_DELAY = 250;\nvar LOCAL_REF_COUNTER = 0;\n\n/*\n\nResponsible for keeping track of playState, timeOffset, duration etc\nfor a branch. A branch can have cues indicating stream-segments that\nshould be skipped or plated through at 10x speed etc. The real time offsets\naccording to the stream will never change though. The timeline takes care\nof converting between relative time and timeOffsets in stream.\n\npaused\n======\n\nplaying\n=======\n\nseeking\n=======\n\nwatching\n========\n\nediting\n=======\n\nrecording\n=========\n\n*/\n\n\nfunction Timeline(branch,data,options){\n\tthis._shouldScheduleAudio = 0;\n\tthis._branch = branch;\n\tthis._data = data;\n\tthis._options = options;\n\tthis._localRef = LOCAL_REF_COUNTER++;\n\tdata.start || (data.start = 0);\n\tthis._cues = new TimelineCues(data);\n\t\n\tif (data.end || branch.isLocked()) { // no more changes\n\t\tthis._initialOffset = data.start;\n\t\tthis.anchorTime(this._initialOffset);\n\t\tthis.setState('paused');\n\t} else {\n\t\tthis._initialOffset = this.endOffset();\n\t\tthis.anchorTime(this.endOffset());\n\t\tthis.setState('watching');\n\t};\n\t// go live immediately unless the data has an end\n\tthis;\n};\n\nexports.Timeline = Timeline; // export class \nTimeline.prototype.branch = function(v){ return this._branch; }\nTimeline.prototype.setBranch = function(v){ this._branch = v; return this; };\nTimeline.prototype.data = function(v){ return this._data; }\nTimeline.prototype.setData = function(v){ this._data = v; return this; };\nTimeline.prototype.__active = {'default': false,name: 'active'};\nTimeline.prototype.active = function(v){ return this._active; }\nTimeline.prototype.setActive = function(v){ this._active = v; return this; }\nTimeline.prototype._active = false;\nTimeline.prototype.__isAnnotating = {'default': false,name: 'isAnnotating'};\nTimeline.prototype.isAnnotating = function(v){ return this._isAnnotating; }\nTimeline.prototype.setIsAnnotating = function(v){ this._isAnnotating = v; return this; }\nTimeline.prototype._isAnnotating = false;\nTimeline.prototype.__isBuffering = {'default': false,watch: 'isBufferingDidSet',name: 'isBuffering'};\nTimeline.prototype.isBuffering = function(v){ return this._isBuffering; }\nTimeline.prototype.setIsBuffering = function(v){\n\tvar a = this.isBuffering();\n\tif(v != a) { this._isBuffering = v; }\n\tif(v != a) { this.isBufferingDidSet && this.isBufferingDidSet(v,a,this.__isBuffering) }\n\treturn this;\n}\nTimeline.prototype._isBuffering = false;\n\nTimeline.prototype.__playbackRate = {watch: 'playbackRateDidSet','default': 1,name: 'playbackRate'};\nTimeline.prototype.playbackRate = function(v){ return this._playbackRate; }\nTimeline.prototype.setPlaybackRate = function(v){\n\tvar a = this.playbackRate();\n\tif(v != a) { this._playbackRate = v; }\n\tif(v != a) { this.playbackRateDidSet && this.playbackRateDidSet(v,a,this.__playbackRate) }\n\treturn this;\n}\nTimeline.prototype._playbackRate = 1;\nTimeline.prototype.__loopSegment = {watch: 'loopSegmentDidSet',name: 'loopSegment'};\nTimeline.prototype.loopSegment = function(v){ return this._loopSegment; }\nTimeline.prototype.setLoopSegment = function(v){\n\tvar a = this.loopSegment();\n\tif(v != a) { this._loopSegment = v; }\n\tif(v != a) { this.loopSegmentDidSet && this.loopSegmentDidSet(v,a,this.__loopSegment) }\n\treturn this;\n};\nTimeline.prototype.__state = {watch: 'stateDidSet',name: 'state'};\nTimeline.prototype.state = function(v){ return this._state; }\nTimeline.prototype.setState = function(v){\n\tvar a = this.state();\n\tif(v != a) { this._state = v; }\n\tif(v != a) { this.stateDidSet && this.stateDidSet(v,a,this.__state) }\n\treturn this;\n};\nTimeline.prototype.cues = function(v){ return this._cues; }\nTimeline.prototype.setCues = function(v){ this._cues = v; return this; };\nTimeline.prototype.initialOffset = function(v){ return this._initialOffset; }\nTimeline.prototype.setInitialOffset = function(v){ this._initialOffset = v; return this; };\n\nTimeline.prototype.loadCues = function (data){\n\tthis._data = data;\n\treturn this._cues = new TimelineCues(data);\n};\n\nTimeline.prototype.space = function (){\n\tvar branch_;\n\treturn (branch_ = this.branch()) && branch_.space && branch_.space();\n};\n\nTimeline.prototype.api = function (){\n\treturn this.space() && this.space().api();\n};\n\nTimeline.prototype.isBufferingDidSet = function (bool,prev){\n\tvar self = this;\n\tself.space().dirty();\n\t// reanchor time now?\n\tself.log(\"isBuffering\",bool,prev,prev && self.bufferingDuration());\n\t\n\tif (true) {\n\t\t// anchor time to what it was immediately before buffering changed\n\t\tself._isBuffering = prev;\n\t\tself.anchorTime();\n\t\tself._isBuffering = bool;\n\t};\n\t\n\tif (bool) {\n\t\tlet prevDate = self._bufferingSince;\n\t\tself._bufferingSince = Date.now();\n\t\tif (!prevDate) { self._bufferingSince -= (ALLOW_BUFFERING_DELAY + 10) };\n\t\t// set and clear delay here as well?\n\t\treturn setTimeout(function() { return self.space().dirty(); },ALLOW_BUFFERING_DELAY + 2);\n\t};\n};\n\nTimeline.prototype.isStalled = function (){\n\treturn this.state() == 'playing' && this.isBuffering() && this.bufferingDuration() > ALLOW_BUFFERING_DELAY;\n};\n\nTimeline.prototype.timeline = function (){\n\treturn this;\n};\n\nTimeline.prototype.color = function (){\n\treturn this.isRecording() ? 'red' : ((this.isLive() ? 'yellow' : 'blue'));\n};\n\nTimeline.prototype.log = function (){\n\tvar api_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>0 ? i : 0);\n\twhile(i>0) params[i-1] = $0[--i];\n\tif (this.api()) { return (api_ = this.api()).log.apply(api_,[].concat(['timeline'], Array.from(params))) };\n};\n\nTimeline.prototype.mode = function (){\n\treturn this.state();\n};\n\nTimeline.prototype.isPlaying = function (){\n\treturn this.playState() == 'playing';\n}; // state == 'playing' or state == 'seeking'\nTimeline.prototype.isPaused = function (){\n\treturn this.playState() == 'paused';\n};\nTimeline.prototype.isSeeking = function (){\n\treturn this.state() == 'seeking';\n};\nTimeline.prototype.isWatching = function (){\n\treturn this.state() == 'watching';\n};\nTimeline.prototype.isRecording = function (){\n\treturn this.state() == 'recording';\n};\nTimeline.prototype.isEditing = function (){\n\treturn this.state() == 'editing' || this.isRecording();\n};\nTimeline.prototype.isLive = function (){\n\treturn this.isWatching() || this.isEditing();\n};\n\nTimeline.prototype.play = function (){\n\tthis.log('play',this.currentTime(),this.endTime());\n\tif (!(this.isPlaying()) && this.currentTime() >= this.endTime()) {\n\t\tthis.seek(this.startOffset());\n\t};\n\t\n\treturn this.setState('playing').enter();\n};\n\nTimeline.prototype.pause = function (){\n\treturn this.setState('paused');\n};\n\nTimeline.prototype.goLive = function (){\n\treturn this.setState('live').enter();\n};\n\nTimeline.prototype.ended = function (){\n\t// TODO implement 'ended' as a separate state\n\tthis.pause();\n\tif (this.space() && !this.branch().parent()) {\n\t\tthis.space().view().trigger('spaceend');\n\t\treturn this.space().view().dispatch('scrimend',this.branch());\n\t};\n};\n\n\nTimeline.prototype.playState = function (){\n\treturn (this.state() == 'seeking') ? this._prevState : this.state();\n};\n\nTimeline.prototype.enter = function (){\n\tif (this.space()) {\n\t\tthis.space().setTimeline(this);\n\t};\n\treturn this;\n};\n\nTimeline.prototype.setState = function (state){\n\t// console.log \"setState\",state,@state\n\tvar space_;\n\tvar prev = this._state;\n\tif (prev == state) {\n\t\treturn this;\n\t};\n\t\n\tif (this.space().unauthorized()) {\n\t\treturn this;\n\t};\n\t\n\tvar offset = this.currentOffset();\n\tvar time = this.currentTime();\n\tthis.anchorTime(offset,time);\n\tthis._wasLive = this.isLive();\n\tthis._prevState = prev;\n\tthis._state = state;\n\t\n\tthis.trackPlayState();\n\t\n\tthis.enterState(state,prev,offset);\n\t(space_ = this.space()) && space_.emit && space_.emit(state,this,prev,offset,time);\n\treturn this;\n};\n\nTimeline.prototype.enterState = function (state,prev,offset){\n\tthis.log((\"\" + prev + \"->\" + state));\n\tif (this._wasLive && !(this.isLive())) this.liveLeave();\n\t\n\tif (this[(\"\" + prev + \"Leave\")]) {\n\t\tthis[(\"\" + prev + \"Leave\")](state,offset);\n\t};\n\t\n\tif (this.isLive() && !this._wasLive) this.liveEnter();\n\t\n\tif (this[(\"\" + state + \"Enter\")]) {\n\t\tthis[(\"\" + state + \"Enter\")](prev,offset);\n\t};\n\treturn this;\n};\n\nTimeline.prototype.liveEnter = function (){\n\treturn this;\n};\n\nTimeline.prototype.liveLeave = function (){\n\treturn this;\n};\n\nTimeline.prototype.compute = function (){\n\tthis._cues.compute();\n\treturn this;\n};\n\nTimeline.prototype.trackPlayState = function (){\n\treturn this.api().sendTracking(tracking.TYPES.PLAYSTATE,[this._state,this.currentTime(),this.playbackRate()]);\n};\n\n// fix addMarker and removeMarker\nTimeline.prototype.addMarker = function (marker){\n\tthis._data.cues.push(marker);\n\treturn this.compute();\n};\n\nTimeline.prototype.removeMarker = function (marker){\n\tvar idx = this._data.cues.indexOf(marker);\n\tif (idx >= 0) { this._data.cues.splice(idx,1) };\n\tthis.compute();\n\treturn this;\n};\n\nTimeline.prototype.span = function (){\n\treturn this.data().end || this.branch().stream().duration();\n};\n\nTimeline.prototype.duration = function (){\n\treturn this.endTime() - this.startTime();\n};\n\nTimeline.prototype.progress = function (){\n\treturn this.currentTime() / this.duration();\n};\n\nTimeline.prototype.bufferingDuration = function (){\n\treturn this._bufferingSince ? (Date.now() - this._bufferingSince) : 0;\n};\n\nTimeline.prototype.timeToOffset = function (time){\n\t// time += @converter.offsetToTime(data:start) if data:start\n\treturn Math.round(this.cues().timeToOffset(time + this.startTime()));\n};\n\nTimeline.prototype.offsetToTime = function (offset){\n\treturn Math.round(this.cues().offsetToTime(offset) - this.startTime());\n};\n\nTimeline.prototype.offsetToProgress = function (offset){\n\treturn this.offsetToTime(offset) / this.duration();\n};\n\nTimeline.prototype.progressToOffset = function (progress){\n\treturn this.timeToOffset(this.duration() * progress);\n};\n\n\nTimeline.prototype.startOffset = function (){\n\treturn this.data().start || 0;\n};\n\nTimeline.prototype.endOffset = function (){\n\treturn Math.max(this.data().end || 0,this.span());\n};\n\nTimeline.prototype.startTime = function (){\n\treturn this.data().start ? this.cues().offsetToTime(this.data().start) : 0;\n};\n\nTimeline.prototype.endTime = function (){\n\treturn this.cues().offsetToTime(this.endOffset());\n};\n\nTimeline.prototype.clampOffset = function (offset){\n\treturn Math.max(0,Math.min(offset,this.endOffset()));\n};\n\nTimeline.prototype.deactivate = function (){\n\tthis.setActive(false);\n\tif (this.isPlaying()) this.pause();\n\treturn this;\n};\n\nTimeline.prototype.activate = function (){\n\tthis.anchorTime();\n\tthis.setActive(true);\n\treturn this;\n};\n\nTimeline.prototype.anchorTime = function (offset,time){\n\tif (offset == undefined) {\n\t\toffset = this.referenceOffset();\n\t};\n\t\n\tif (time == undefined) {\n\t\ttime = this.offsetToTime(offset);\n\t};\n\t\n\tthis._anchor = {\n\t\tts: Date.now(),\n\t\toffset: Math.round(offset),\n\t\telapsed: Math.round(time),\n\t\tspeed: this.referencePlaybackRate()\n\t};\n\treturn this;\n};\n\n// the current time relative to this timeline\nTimeline.prototype.currentTime = function (){\n\t// unless active\n\t// \treturn offsetToTime(branch.currentOffset)\n\tif (this.isLive()) {\n\t\treturn this.offsetToTime(this.currentOffset());\n\t} else if (this.state() == 'playing' && !(this.isBuffering())) {\n\t\treturn this._anchor.elapsed + Math.round((Date.now() - this._anchor.ts) * this._anchor.speed);\n\t} else {\n\t\treturn this._anchor.elapsed; // rather convert from offset?\n\t};\n};\n\nTimeline.prototype.currentOffset = function (){\n\t// unless active\n\t// \treturn branch.currentOffset\n\tif (this.state() == 'scrubbing') {\n\t\treturn this._scrubOffset;\n\t} else if (this.isLive()) {\n\t\treturn this.branch().stream().duration();\n\t} else if (this.state() == 'playing') {\n\t\t// cap based in max duration\n\t\treturn Math.round(Math.min(this.timeToOffset(this.currentTime()),this.endOffset()));\n\t} else {\n\t\treturn this._anchor.offset;\n\t};\n};\n\nTimeline.prototype.referenceTime = function (){\n\treturn this.currentTime();\n};\n\nTimeline.prototype.referenceOffset = function (){\n\treturn this.currentOffset();\n};\n\nTimeline.prototype.referencePlaybackRate = function (){\n\treturn this.playbackRate();\n};\n\nTimeline.prototype.scrub = function (offset){\n\treturn this.seek(offset,true);\n};\n\nTimeline.prototype.skip = function (ms){\n\tlet time = Math.max(this.currentTime() + ms,0);\n\treturn this.seek(this.timeToOffset(time));\n};\n\nTimeline.prototype.setProgress = function (progress){\n\treturn this.seek(this.progressToOffset(progress));\n};\n\nTimeline.prototype.seek = function (offset,scrubbing){\n\t\n\tif(scrubbing === undefined) scrubbing = false;\n\toffset = this.clampOffset(offset);\n\t\n\tif (offset == this._seekOffset && (Date.now() - this._seekAt) < 200 && scrubbing == this._seekScrub) {\n\t\treturn this;\n\t};\n\t\n\tthis._seekScrub = scrubbing;\n\tthis._seekOffset = offset;\n\tthis._seekAt = Date.now();\n\t\n\tthis.syncSeek(offset,scrubbing);\n\tthis.unscheduleAudio(); // should automatically be offset\n\tthis.branch().setCurrentOffset(offset); // hmm\n\tthis.enter();\n\tif (this.isPlaying()) {\n\t\tthis.scheduleAudio();\n\t};\n\treturn this;\n};\n\nTimeline.prototype.seekToEnd = function (){\n\tvar tail;\n\tif (tail = this.branch().stream().tail()) {\n\t\tthis.seek(tail.timeOffset());\n\t};\n\treturn this;\n};\n\nTimeline.prototype.syncSeek = function (offset,scrubbing){\n\treturn this.anchorTime(offset);\n};\n\nTimeline.prototype.unscheduleAudio = function (){\n\tif (this._scheduledAudio) {\n\t\tAudioManager.instance().unscheduleClips(this._scheduledAudio);\n\t\treturn this._scheduledAudio = null;\n\t};\n};\n\nTimeline.prototype.scheduleAudio = function (){\n\treturn this;\n};\n\nTimeline.prototype.tick = function (){\n\tvar offset = this.currentOffset();\n\tif (this.isPlaying() && offset >= this.endOffset()) {\n\t\tthis.anchorTime(offset = this.endOffset());\n\t\tthis.ended();\n\t\t// force currentOffset no?\n\t\t// branch.isLive and !isAnnotating ? goLive : pause\n\t};\n\t\n\tthis.branch().setCurrentOffset(offset);\n\tthis.space().cursor().target(this.targetEvent());\n\t// console.log \"set target\",targetEvent\n\treturn this;\n};\n\nTimeline.prototype.targetEvent = function (){\n\tif (this.isLive()) {\n\t\tthis.branch().stream().sync();\n\t\treturn this.branch().head();\n\t} else {\n\t\treturn this.branch().stream().actionAtOffset(this.currentOffset());\n\t};\n};\n\nTimeline.prototype.editingLeave = function (to){\n\tif (to != 'recording') {\n\t\tthis.space().browser().stop();\n\t\tthis.space().browser().node().resetLayout();\n\t\tthis.space().emit('watch');\n\t};\n\treturn this;\n};\n\nTimeline.prototype.recordingLeave = function (){\n\tthis.space().browser().stop();\n\tthis.space().browser().node().resetLayout();\n\treturn this.space().emit('watch');\n};\n\nTimeline.prototype.editingEnter = function (){\n\tthis.branch().forceToEnd();\n\treturn this.space().client().flushLocals();\n};\n\nTimeline.prototype.recordingEnter = function (){\n\treturn this.branch().forceToEnd();\n};\n\nTimeline.prototype.watchingEnter = function (){\n\treturn this;\n};\n\nTimeline.prototype.pausedEnter = function (from){\n\tif (from == 'playing') this.registerProgress();\n\treturn this;\n};\n\nTimeline.prototype.registerProgress = function (){\n\tlet offset = this.currentOffset();\n\tlet progress = this.currentTime() / this.duration();\n\treturn this.branch().model().registerProgress(progress,offset);\n\t// space.api.rpc(:castSetProgress,[space.id,progress,offset])\n};\n\nTimeline.prototype.stats = function (){\n\treturn {\n\t\tcid: this._branch.id(),\n\t\tstate: this.playState(),\n\t\tlocalref: this._localRef,\n\t\tplayed: 0\n\t};\n};\n\nTimeline.prototype.describe = function (){\n\tconst v = this.playbackRate().toFixed(1);\n\treturn (\"Speed: \" + v);\n};\n\nfunction AbsTimeline(){ return Timeline.apply(this,arguments) };\n\nsubclass$(AbsTimeline,Timeline);\nexports.AbsTimeline = AbsTimeline; // export class \nAbsTimeline.prototype.loadAudio = function (){\n\tlet res = [];\n\tfor (let i = 0, items = iter$(this.cues().audio()), len = items.length; i < len; i++) {\n\t\tres.push(AudioManager.instance().loadBufferForId(items[i][3]));\n\t};\n\treturn res;\n};\n\nAbsTimeline.prototype.clips = async function (){\n\tvar self = this;\n\tlet isLoaded = false;\n\t\n\tsetTimeout(function() {\n\t\tif (!isLoaded) {\n\t\t\tconsole.log(\"forced buffering!\");\n\t\t\treturn (self.setIsBuffering(true),true);\n\t\t};\n\t},20);\n\tawait Promise.all(self.loadAudio());\n\tisLoaded = true;\n\tself.setIsBuffering(false);\n\treturn self.cues().audioclips(self.data().start,0);\n};\n\n// def setPlaybackRate val\n// \treturn self\n\nAbsTimeline.prototype.buffered = function (){\n\treturn this._buffered || (this._buffered = [[0,1]]);\n};\n\nAbsTimeline.prototype.scheduleAudio = async function (){\n\tlet counter = ++this._shouldScheduleAudio;\n\tvar audio = await this.clips();\n\tif (this._shouldScheduleAudio == counter) {\n\t\tAudioManager.instance().scheduleClips(this._scheduledAudio = audio,this.currentTime(),this.playbackRate());\n\t};\n\treturn this;\n};\n\nAbsTimeline.prototype.unscheduleAudio = function (){\n\t++this._shouldScheduleAudio;\n\tif (this._scheduledAudio) {\n\t\tAudioManager.instance().unscheduleClips(this._scheduledAudio);\n\t\tthis._scheduledAudio = null;\n\t};\n\treturn this;\n};\n\nAbsTimeline.prototype.enterState = function (state,prev,offset){\n\tthis.unscheduleAudio();\n\treturn AbsTimeline.prototype.__super__.enterState.apply(this,arguments);\n};\n\nAbsTimeline.prototype.playingEnter = function (){\n\tif (this.space()) {\n\t\tthis.space().setTimeline(this); // what if it is not active? who cares\n\t};\n\tif (!(this.isPlaying())) { return };\n\tthis.unscheduleAudio();\n\treturn this.scheduleAudio();\n};\n\n\nfunction PubTimeline(branch,data,options){\n\tPubTimeline.prototype.__super__.constructor.apply(this,arguments);\n\t\n\tthis._audioIsPlaying = false;\n\tthis._audioIsPaused = true;\n\tthis._audioWasPaused = 0;\n\t\n\tif (true) {\n\t\tthis._playbackRate = this.space().api().sessionStore().getnum('playbackRate') || 1;\n\t\tthis.audio(); // kick of audio loading at once\n\t};\n\tthis;\n};\n\nsubclass$(PubTimeline,Timeline);\nexports.PubTimeline = PubTimeline; // export class \nPubTimeline.prototype.stats = function (){\n\t// seconds\n\tvar stats = {\n\t\tlocalref: this._localRef,\n\t\tcid: this._branch.id(),\n\t\tstate: this.playState(),\n\t\tplayed: 0, // total number of seconds\n\t\tranges: [] // segments played - seconds\n\t};\n\t\n\tvar l = this._audio.played.length;\n\tvar i = 0;\n\twhile (i < l){\n\t\tlet a = Math.round(this._audio.played.start(i));\n\t\tlet b = Math.round(this._audio.played.end(i));\n\t\tif ((b - a) > 1) {\n\t\t\tstats.ranges.push(a,b);\n\t\t\tstats.played += (b - a);\n\t\t};\n\t\ti++;\n\t};\n\t\n\treturn stats;\n};\n\nPubTimeline.prototype.playbackRateDidSet = function (rate){\n\tif (true) {\n\t\tthis.space().api().sessionStore().set('playbackRate',rate);\n\t};\n\t\n\tif (this._audio) {\n\t\tvar offset = this.currentOffset();\n\t\tthis._audio.playbackRate = rate;\n\t\tthis.anchorTime(offset);\n\t};\n\treturn this;\n};\n\nPubTimeline.prototype.isAnnotating = function (){\n\treturn false;\n};\n\nPubTimeline.prototype.audioSrc = function (){\n\treturn this._data.audio && AudioManager.instance().urlForId(this._data.audio.fid || this._data.audio);\n};\n\nPubTimeline.prototype.tick = function (){\n\tvar offset = this.currentOffset();\n\tthis.branch().setCurrentOffset(offset);\n\tthis.space().cursor().target(this.targetEvent());\n\treturn this;\n};\n\nPubTimeline.prototype.buffered = function (){\n\tif (this._buffered) {\n\t\treturn this._buffered;\n\t};\n\t\n\tvar parts = [];\n\tvar dur = this.duration() / 1000;\n\tvar ranges = this.audio().buffered;\n\tvar len = len$(ranges);\n\tvar i = 0;\n\t\n\twhile (i < len){\n\t\tlet a = ranges.start(i);\n\t\tlet b = ranges.end(i);\n\t\tparts.push([a / dur,b / dur]);\n\t\ti++;\n\t};\n\t\n\treturn this._buffered = parts;\n};\n\n\nPubTimeline.prototype.referenceTime = function (){\n\treturn this._audio ? Math.round(this._audio.currentTime * 1000) : 0;\n};\n\nPubTimeline.prototype.referenceOffset = function (){\n\treturn this.timeToOffset(this.referenceTime());\n};\n\nPubTimeline.prototype.referencePlaybackRate = function (){\n\treturn (!this._audio || this._audio.paused) ? 0 : this._audio.playbackRate;\n};\n\nPubTimeline.prototype.audio = function (){\n\tif (this._audio) { return this._audio };\n\tthis._audio = document.createElement('audio');\n\tthis.bindAudio(this._audio);\n\tthis._audio.src = this.audioSrc(); // + \"?{Math.random}\"\n\tthis._audio.load();\n\tthis._audio.currentTime = (this.currentTime() / 1000) || 0;\n\tthis._audio.playbackRate = this.playbackRate();\n\t\n\t// window.SA = @audio\n\t\n\t// should not schedule until we start playing\n\treturn this._audio;\n};\n\nPubTimeline.prototype.enterState = function (state,prev,offset){\n\tthis.log((\"enterState \" + prev + \"->\" + state));\n\tif (state != 'playing' && this._audio && !this.audio().paused && this._audioIsPlaying) {\n\t\t// if we pause - \n\t\tthis._ignorePauseEvent = true;\n\t\tthis._audioWasPaused = Date.now();\n\t\tthis.audio().pause();\n\t};\n\t\n\treturn PubTimeline.prototype.__super__.enterState.apply(this,arguments);\n};\n\n// def pausedEnter\n\nPubTimeline.prototype.playingEnter = function (from,offset){\n\tlet bm = this._branch.model();\n\tthis.api().analytics().castPlay(bm.id,bm.type);\n\t\n\t// track while playing?\n\t\n\tthis.branch().enter();\n\tthis.space().setTimeline(this);\n\tthis.anchorTime(offset);\n\t\n\t// isBuffering will be turned off by timeupdate for now\n\tthis.setIsBuffering(true);\n\t\n\tif (this.audio().paused) {\n\t\tAudioManager.instance().registerMedia(this.audio());\n\t\t\n\t\tif (!this._audioIsPlaying) {\n\t\t\tlet ms = Math.round(this._anchor.elapsed || 0);\n\t\t\tthis.setAudioTime(ms);\n\t\t\tthis.audio().play();\n\t\t} else {\n\t\t\tthis._audioShouldPlay = true;\n\t\t};\n\t};\n\treturn this.registerProgress();\n};\n\nPubTimeline.prototype.syncSeek = function (offset,scrubbing){\n\tvar time = this.offsetToTime(offset);\n\tif (scrubbing) {\n\t\treturn this.anchorTime(offset);\n\t} else {\n\t\tthis.anchorTime(offset);\n\t\t// should pause the audio while seeking?\n\t\treturn this.setAudioTime(time);\n\t};\n};\n\nPubTimeline.prototype.setAudioTime = function (ms){\n\tlet curr = Math.round(this.audio().currentTime * 1000);\n\tif (curr != Math.round(ms)) {\n\t\tthis.audio().currentTime = ms / 1000;\n\t};\n\treturn ms;\n};\n\nPubTimeline.prototype.activate = function (){\n\treturn PubTimeline.prototype.__super__.activate.apply(this,arguments);\n};\n\nPubTimeline.prototype.deactivate = function (){\n\tPubTimeline.prototype.__super__.deactivate.apply(this,arguments);\n\t\n\tif (this._audio) {\n\t\tif (!this._audio.paused) { this._audio.pause() };\n\t\tAudioManager.instance().deregisterMedia(this._audio);\n\t};\n\t\n\treturn this;\n};\n\nPubTimeline.prototype.bindAudio = function (el){\n\tvar self = this;\n\tel.widget = self;\n\tel.preload = 'auto';\n\t\n\tvar handler = function(e) { return true; }; // console.log(e:type)\n\t\n\tel.onpause = function(e) {\n\t\tself.log((\"onpause @\" + self.state()));\n\t\tself._audioIsPlaying = false;\n\t\tself._audioIsPaused = true;\n\t\t\n\t\tlet fromInteraction = (Date.now() - self._audioWasPaused) > 300;\n\t\t// FIXME this causes playback to pause when seeking \n\t\tif (self.state() == 'playing' && fromInteraction) {\n\t\t\tif (el.currentTime == el.duration) {\n\t\t\t\treturn self.ended();\n\t\t\t} else {\n\t\t\t\treturn self.pause();\n\t\t\t};\n\t\t} else if (self.state() == 'playing' && !fromInteraction) {\n\t\t\t// log \"audio should replay?\"\n\t\t\treturn el.play();\n\t\t};\n\t};\n\t\n\tel.onplaying = function(e) {\n\t\tself.log('onplaying');\n\t\tself._audioIsPlaying = true;\n\t\tself._audioIsPaused = false;\n\t\tself.setIsBuffering(true);\n\t\tif (self.isPaused()) { return el.pause() };\n\t};\n\t\n\tel.oncanplay = function() {\n\t\treturn self.log('oncanplay');\n\t};\n\t\n\tel.onprogress = function(e) {\n\t\t// log 'onprogress'\n\t\tself._buffered = null;\n\t\treturn self.space().dirty();\n\t};\n\t\n\tel.oncanplaythrough = function() {\n\t\tself.log('oncanplaythrough');\n\t\treturn self;\n\t};\n\t\n\tel.onwaiting = function() {\n\t\treturn self.log('onwaiting');\n\t\t// isBuffering = yes\n\t};\n\t\n\tel.onplay = function() {\n\t\tself.log('onplay');\n\t\t// isBuffering = yes\n\t\tif (!(self.isPlaying())) {\n\t\t\treturn self.play();\n\t\t};\n\t};\n\t\n\tlet tu = self._lastTimeUpdate = {\n\t\tthreshold: 0,\n\t\telapsed: [],\n\t\ttimestamps: []\n\t};\n\t\n\tel.ontimeupdate = function(e) {\n\t\t// log \"ontimeupdate {el:paused} {Math.round(el:currentTime * 1000)}\"\n\t\tclearTimeout(tu.timeout);\n\t\t\n\t\tif (el.paused) {\n\t\t\ttu.elapsed = [];\n\t\t\treturn tu.timestamps = [];\n\t\t\t// log 'timeupdate paused'\n\t\t} else {\n\t\t\tself.anchorTime();\n\t\t\tlet e1 = el.currentTime * 1000;\n\t\t\tlet t1 = Date.now();\n\t\t\t\n\t\t\tlet e0 = tu.elapsed[0];\n\t\t\tlet t0 = tu.timestamps[0];\n\t\t\t\n\t\t\ttu.elapsed.unshift(e1);\n\t\t\ttu.timestamps.unshift(t1);\n\t\t\t\n\t\t\t// log \"ontimeupdate {Math.round((e1 - e0))} {isBuffering} {t1 - t0}\",playbackRate\n\t\t\t\n\t\t\ttu.timeout = setTimeout(function() {\n\t\t\t\t// log \"timed out?\"\n\t\t\t\treturn (self.setIsBuffering(true),true);\n\t\t\t},tu.threshold || 500);\n\t\t\t\n\t\t\tif (t0) {\n\t\t\t\tlet elapsedRatio = (e1 - e0) / ((t1 - t0) * self.playbackRate());\n\t\t\t\tif (elapsedRatio > 0.8 && elapsedRatio < 1.2) {\n\t\t\t\t\t// log \"progress\",elapsedRatio,(e1 - e0),(t1 - t0)\n\t\t\t\t\ttu.threshold = Math.max(tu.threshold,20 + t1 - t0);\n\t\t\t\t\treturn (self.setIsBuffering(false),false);\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n\t\n\tel.onseeked = function(e) {\n\t\treturn true;\n\t};\n\t\n\tel.onended = function(e) {\n\t\tif (self.state() == 'playing') {\n\t\t\treturn self.ended();\n\t\t};\n\t};\n\t\n\tel.onstalled = function(e) {\n\t\treturn self.log('onstalled');\n\t};\n\t\n\tel.onerror = handler; // what if we cannot load\n\t\n\tel.onloadedmetadata = handler;\n\t\n\treturn el;\n};\n\nPubTimeline.prototype.dispose = function (){\n\treturn this;\n};\n\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nvar MSG = require('../protocol').MSG;\nvar msgpack = require('msgpack-lite');\n\nvar StreamBuffer = require('./StreamBuffer').StreamBuffer;\n\n/*\n\nKeeps track of checking whether a StreamBuffer has new data,\nand then syncing that data to a receiver. Currently, the receiver\nwill always be a websocket - which means that the StreamSyncer\nis currenlty only syncing data to the server.\n\nIn the future, an agent will most likely create syncers for each\nwatching client to push data through DataChannels (WebRTC).\n\nIt is also intended to be configurable. Ie. if no other sockets\nare connected while you record the syncer should only sync every\n5 seconds, but switch over to instant syncing (every time there is\na new event) whenever livestreaming is needed.\n\nSTATES\n======\n\nREADY\n\nCONFLICT\n\nRECOVERING\n\n*/\n\n\nvar STATE = {\n\tREADY: 0,\n\tBUSY: 1,\n\tCONFLICT: 2,\n\tRECOVERING: 3\n};\n\nfunction StreamSyncer(stream){\n\t// should connect directly to a streamBuffer no?\n\tvar self = this;\n\tself._stream = stream;\n\tself._buffer = stream.buffer();\n\tself._counter = 0;\n\tself._lastOffset = 0;\n\tself._remoteOffset = 0;\n\tself._timeout = null;\n\tself._requests = [];\n\tself._state = STATE.READY;\n\t\n\tself._tick = function() {\n\t\tself._timeout = null;\n\t\treturn self.sync();\n\t};\n\t\n\t// FIXME must dispose with space\n\tself._callback = function(res,req) { return self.onresponse(res,req); };\n\tself._ontrim = function(e) { return self.ontrim(e); };\n\tself._buffer.on('trim',self._ontrim);\n\tself;\n};\n\nexports.StreamSyncer = StreamSyncer; // export class \nStreamSyncer.prototype.stream = function(v){ return this._stream; }\nStreamSyncer.prototype.setStream = function(v){ this._stream = v; return this; };\nStreamSyncer.prototype.byteOffset = function(v){ return this._byteOffset; }\nStreamSyncer.prototype.setByteOffset = function(v){ this._byteOffset = v; return this; };\nStreamSyncer.prototype.__state = {watch: 'stateDidSet',name: 'state'};\nStreamSyncer.prototype.state = function(v){ return this._state; }\nStreamSyncer.prototype.setState = function(v){\n\tvar a = this.state();\n\tif(v != a) { this._state = v; }\n\tif(v != a) { this.stateDidSet && this.stateDidSet(v,a,this.__state) }\n\treturn this;\n};\n\nStreamSyncer.prototype.isRecovering = function (){\n\treturn this.state() == STATE.RECOVERING;\n};\n\nStreamSyncer.prototype.branch = function (){\n\treturn this.stream().owner();\n};\n\nStreamSyncer.prototype.api = function (){\n\treturn this.branch().api();\n};\n\nStreamSyncer.prototype.latency = function (){\n\tvar now = Date.now();\n\tvar last = this._lastConfirmed;\n\tvar next = this._requests[this._requests.indexOf(last) + 1];\n\t\n\tvar lastLatency = last ? last.ms : 0;\n\tvar nextLatency = next ? ((now - next.ts)) : 0;\n\t\n\treturn Math.max(lastLatency,nextLatency);\n};\n\nStreamSyncer.prototype.confirm = function (next){\n\tthis._remoteOffset = this._lastOffset = next;\n\treturn this;\n};\n\nStreamSyncer.prototype.onresponse = function (res,req){\n\t// console.log 'onresponse',res,req\n\t// if we have already got response for later packet\n\t// we should not care\n\tthis._lastResponse = res;\n\t\n\tswitch (res.CODE) {\n\t\tcase MSG.OK: {\n\t\t\t// pkg[3] = Date.now - pkg[2]\n\t\t\tthis._lastConfirmed = req;\n\t\t\tthis._remoteOffset = req.byteEnd;\n\t\t\t\n\t\t\tif (this.isRecovering()) {\n\t\t\t\tthis.setState(STATE.READY);\n\t\t\t};\n\t\t\tbreak;\n\t\t}\n\t\tcase MSG.UNAUTHORIZED: {\n\t\t\tconsole.warn(\"got message from server that we are unauthorized!\");\n\t\t\t// If we are wrongfully trying to push to stream - force sync back to\n\t\t\t// last verified offset (local trim - and resync from server)\n\t\t\tthis.api().analytics().streamUnauthorized(this.branch().id());\n\t\t\tthis;\n\t\t\tbreak;\n\t\t}\n\t\tcase MSG.ERR_OUT_OF_RANGE: {\n\t\t\tconsole.warn(\"server said we are out of range!\",this.isRecovering(),this._remoteOffset,this._lastOffset);\n\t\t\t\n\t\t\tif (!(this.isRecovering())) {\n\t\t\t\t// set state to recovering and reset to the last\n\t\t\t\t// offset we know that the server has confirmed\n\t\t\t\t\n\t\t\t\t// if the server returns another out of range\n\t\t\t\t// something more serious must be going on\n\t\t\t\tthis.setState(STATE.RECOVERING);\n\t\t\t\tthis._recoveringSince = Date.now();\n\t\t\t\tthis._lastOffset = this._remoteOffset;\n\t\t\t\tthis.api().analytics().streamRecovering(this.branch().id());\n\t\t\t\tthis.sync();\n\t\t\t};\n\t\t\tthis;\n\t\t\tbreak;\n\t\t}\n\t};\n\treturn this;\n};\n\nStreamSyncer.prototype.ontrim = function (offset){\n\tthis._stream.api().log('syncer','ontrim',offset,this._lastOffset,this._remoteOffset);\n\tthis._lastOffset = Math.min(this._lastOffset,offset);\n\tthis._remoteOffset = Math.min(this._buffer._verifiedOffset,offset);\n\tthis._lastConfirmed = null;\n\tthis._requests = [];\n\treturn this;\n};\n\nStreamSyncer.prototype.getPayload = function (){\n\tlet from = this._lastOffset;\n\tlet to = len$(this._buffer) - 1;\n\t\n\tif (this._buffer._verifiedOffset > this._lastOffset) {\n\t\tthis._stream.api().log('syncer',\"buffer already has a confirmed remote offset\",this._lastOffset,this._buffer._verifiedOffset);\n\t\tfrom = this._lastOffset = this._buffer._verifiedOffset;\n\t};\n\t\n\tif (from >= to) {\n\t\treturn;\n\t};\n\t\n\tlet key = this.stream().id();\n\tlet pars = msgpack.encode([MSG.STREAMAPPEND,key,from]);\n\tvar chunk = this._buffer.slice(from);\n\tvar payload = StreamBuffer.concat([pars,chunk]);\n\treturn {\n\t\tfrom: from,\n\t\tbody: chunk,\n\t\tpayload: payload\n\t};\n\t// return payload\n};\n\nStreamSyncer.prototype.sync = function (force,protocol){\n\tvar self = this;\n\tif (self.branch().isLocal()) {\n\t\treturn;\n\t};\n\t\n\tif (!force && self.branch().recording() && !self.branch().recording().live()) {\n\t\treturn;\n\t};\n\t\n\tvar pkg = self.getPayload();\n\tvar byteEnd = len$(self._buffer);\n\t\n\tif (pkg) {\n\t\t// @lastOffset = byteEnd\n\t\t// var req = {byteEnd: byteEnd, handler: @callback}\n\t\t// @requests.push(req)\n\t\tvar req = new XMLHttpRequest();\n\t\tlet url = (\"/streams/\" + (self.stream().id()) + \"?from=\" + (pkg.from));\n\t\treq.onload = function(e) {\n\t\t\t// console.log 'stream response',req:status\n\t\t\tif (req.status == 200) {\n\t\t\t\treturn self._remoteOffset = self._lastOffset = byteEnd;\n\t\t\t} else {\n\t\t\t\treturn console.warn('bad response from server');\n\t\t\t};\n\t\t};\n\t\t\n\t\treq.open('POST',url);\n\t\treq.setRequestHeader('Content-Type','application/octet-stream');\n\t\treturn req.send(pkg.body);\n\t};\n};\n\nStreamSyncer.prototype.schedule = function (delay){\n\t// return if @timeout\n\tif(delay === undefined) delay = 1000;\n\tclearTimeout(this._timeout);\n\treturn this._timeout = setTimeout(this._tick,delay);\n};\n\nStreamSyncer.prototype.persist = function (full){\n\tif(full === undefined) full = true;\n\tif (full) {\n\t\tthis._lastOffset = this._remoteOffset;\n\t\treturn this.sync(true,'https');\n\t} else {\n\t\treturn this.sync(true);\n\t};\n};\n\nStreamSyncer.prototype.dispose = function (){\n\tthis._buffer.un('trim',this._ontrim);\n\treturn this;\n};\n", "\n\nvar Struct = require('./Struct').Struct;\nvar protocol$ = require('../protocol'), ACTION = protocol$.ACTION, CAST = protocol$.CAST;\n\nvar PointerUpdate = require('./StreamAction').PointerUpdate;\n\nfunction Pointer(stream){\n\tthis._stream = stream;\n\tthis;\n};\n\nexports.Pointer = Pointer; // export class \nPointer.prototype.last = function(v){ return this._last; }\nPointer.prototype.setLast = function(v){ this._last = v; return this; };\nPointer.prototype.stream = function(v){ return this._stream; }\nPointer.prototype.setStream = function(v){ this._stream = v; return this; };\n\nPointer.prototype.addFrame = function (pars){ // [x,y,buttons,hover]\n\tvar action = PointerUpdate.build(pars);\n\tthis.stream()._owner.addLocalEvent(action);\n\treturn this;\n};\n\nPointer.prototype.view = function (){\n\treturn this._view || (this._view = this._stream._owner._space._view._pointer);\n};\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n\nvar Struct = require('./Struct').Struct;\nvar StreamAction$ = require('./StreamAction'), StreamAction = StreamAction$.StreamAction, RecStart = StreamAction$.RecStart, LockAction = StreamAction$.LockAction;\nvar StreamBuffer = require('./StreamBuffer').StreamBuffer;\nvar protocol$ = require('../protocol'), ACTION = protocol$.ACTION, ACTION_MAP = protocol$.ACTION_MAP, MSG = protocol$.MSG, SCON = protocol$.SCON;\n\nvar Pointer = require('./Pointer').Pointer;\nvar List = require('../util/List').List;\n\nvar msgpack = require('msgpack-lite');\n\n// TODO if user is in a substream branching out from\n// an event in this stream, it should force-revert the\n// other stream before applying/reverting own events\nfunction Stream(buffer,owner,seed,options){\n\tvar self = this;\n\tif(options === undefined) options = {};\n\tself._buffer = buffer;\n\tself._actions = [];\n\tself._owner = owner;\n\tself._options = options;\n\tself._offset = options.offset || 0; // TODO understand?\n\t// custom tail-types for each event\n\t\n\tself._byteOffset = 0;\n\tself._localOffset = 0;\n\tself._lastLocalIndex = -1;\n\tself._lastActions = {};\n\tself._lastTimeOffset = 0;\n\tself._lastType = null;\n\tself._state = {};\n\tself._dupes = {};\n\tself._layouts = {};\n\t// keeps a list of recstart events\n\tself._recordings = new List(self);\n\tself._audio = new List(self);\n\t\n\tself._tail = self._first = StreamAction.seed(self);\n\t\n\tself._decoder = new (msgpack.Decoder)({});\n\tself._decoder.offset = 0;\n\t\n\tif (seed) {\n\t\tself._tail._prev = self._seed = seed;\n\t} else {\n\t\tself._seed = self._tail;\n\t};\n\t// this is surely wrong\n\tself.anchorTime();\n\t\n\t// bind to buffer\n\tself._ontrim = function(e) {\n\t\tself.api().log('stream','ontrim',e);\n\t\treturn self.rollbackToAction(self.actionAtByteOffset(e));\n\t};\n\t\n\tself._buffer.on('trim',self._ontrim);\n\tself;\n};\n\n\nexports.Stream = Stream; // export class \nStream.prototype.buffer = function(v){ return this._buffer; }\nStream.prototype.setBuffer = function(v){ this._buffer = v; return this; };\nStream.prototype.owner = function(v){ return this._owner; }\nStream.prototype.setOwner = function(v){ this._owner = v; return this; };\nStream.prototype.parent = function(v){ return this._parent; }\nStream.prototype.setParent = function(v){ this._parent = v; return this; };\nStream.prototype.actions = function(v){ return this._actions; }\nStream.prototype.setActions = function(v){ this._actions = v; return this; };\nStream.prototype.realtime = function(v){ return this._realtime; }\nStream.prototype.setRealtime = function(v){ this._realtime = v; return this; };\nStream.prototype.seed = function(v){ return this._seed; }\nStream.prototype.setSeed = function(v){ this._seed = v; return this; };\nStream.prototype.tail = function(v){ return this._tail; }\nStream.prototype.setTail = function(v){ this._tail = v; return this; };\n\nStream.prototype.recordings = function(v){ return this._recordings; }\nStream.prototype.setRecordings = function(v){ this._recordings = v; return this; };\nStream.prototype.__currentLock = {watch: 'currentLockDidSet',name: 'currentLock'};\nStream.prototype.currentLock = function(v){ return this._currentLock; }\nStream.prototype.setCurrentLock = function(v){\n\tvar a = this.currentLock();\n\tif(v != a) { this._currentLock = v; }\n\tif(v != a) { this.currentLockDidSet && this.currentLockDidSet(v,a,this.__currentLock) }\n\treturn this;\n};\nStream.prototype.lastActions = function(v){ return this._lastActions; }\nStream.prototype.setLastActions = function(v){ this._lastActions = v; return this; };\nStream.prototype.lastTimeOffset = function(v){ return this._lastTimeOffset; }\nStream.prototype.setLastTimeOffset = function(v){ this._lastTimeOffset = v; return this; };\nStream.prototype.state = function(v){ return this._state; }\nStream.prototype.setState = function(v){ this._state = v; return this; };\nStream.prototype.audio = function(v){ return this._audio; }\nStream.prototype.setAudio = function(v){ this._audio = v; return this; };\nStream.prototype.dupes = function(v){ return this._dupes; }\nStream.prototype.setDupes = function(v){ this._dupes = v; return this; };\nStream.prototype.layouts = function(v){ return this._layouts; }\nStream.prototype.setLayouts = function(v){ this._layouts = v; return this; };\n\nStream.prototype.dispose = function (){\n\tthis._buffer.un('trim',this._ontrim);\n\treturn this;\n};\n\nStream.prototype.id = function (){\n\treturn this.owner().id();\n};\n\nStream.prototype.space = function (){\n\treturn this.owner().space();\n};\n\nStream.prototype.api = function (){\n\treturn this.space().api();\n};\n\nStream.prototype.log = function (){\n\tvar api_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>0 ? i : 0);\n\twhile(i>0) params[i-1] = $0[--i];\n\treturn (api_ = this.api()).log.apply(api_,[].concat(['stream'], Array.from(params)));\n};\n\nStream.prototype.pointer = function (){\n\treturn this._pointer || (this._pointer = new Pointer(this));\n};\n\nStream.prototype.anchorTime = function (o){\n\tif(o === undefined) o = {};\n\treturn this._anchor = {\n\t\tts: o.now || Date.now(),\n\t\toffset: o.offset || this._tail.offset() || 0,\n\t\tcollapsed: !(this.realtime()),\n\t\trate: 1\n\t};\n};\n\nStream.prototype.currentLockDidSet = function (lock){\n\tif (this.owner().isEditing() && lock && lock.sid() != this.api().sid()) {\n\t\treturn this.owner().stopEditing();\n\t};\n};\n\nStream.prototype.currentSID = function (){\n\treturn this.currentLock() ? this.currentLock().sid() : null;\n};\n\n// is this used?\nStream.prototype.currentTime = function (){\n\treturn Date.now() - this._anchor.ts;\n};\n\nStream.prototype.lastTimeOffset = function (){\n\treturn this._tail.offset();\n};\n\nStream.prototype.nextTimeOffset = function (){\n\treturn Math.max(this.lastTimeOffset(),this._anchor.offset + (this.now() - this._anchor.ts) * this._anchor.rate);\n};\n\nStream.prototype.now = function (){\n\treturn this._frozenTime || Date.now();\n};\n\nStream.prototype.freezeTime = function (time,block){\n\tlet prev = this._frozenTime;\n\tthis._frozenTime = time || Date.now();\n\tblock();\n\tthis._frozenTime = prev;\n\treturn this;\n};\n\nStream.prototype.byteLength = function (){\n\treturn this._decoder.offset;\n};\n\nStream.prototype.read = function (meta){\n\tvar dec = this._decoder;\n\tvar buf = dec.buffer = this._buffer._buffer;\n\t\n\tif (!buf || dec.offset >= this._buffer.size()) {\n\t\treturn null;\n\t};\n\t\n\t// check\n\tlet chunk = dec.fetch();\n\t\n\t// this is an action\n\tif (typeof chunk == 'number') {\n\t\tif (chunk > 0) {\n\t\t\tthis._lastTimeOffset += chunk;\n\t\t} else if (chunk < 0) {\n\t\t\tthis._lastType = -chunk;\n\t\t};\n\t\treturn this.read(meta);\n\t};\n\t\n\t\n\tvar typ = this._lastType;\n\tvar kls = ACTION_MAP[typ];\n\t\n\tif (!kls) {\n\t\tkls = StreamAction;\n\t};\n\t\n\tvar nextIndex = this._actions.length;\n\tvar prevOfType = this._lastActions[typ];\n\t\n\t// log \"read\",chunk\n\tvar action = kls.decode(chunk,prevOfType ? prevOfType._params : null,this,nextIndex);\n\tif (meta) { action.LOCAL = meta };\n\taction.addToStream(this);\n\taction.commitToStream(this);\n\treturn this._tail = action;\n};\n\nStream.prototype.lock = function (){\n\tif (this.currentLock() && this.currentLock().sid() == this.api().sid()) {\n\t\treturn true;\n\t};\n\t\n\t// if stream is currently recording and not locked by me - disallow\n\tvar action = new LockAction([this.api().sid(),this.api().uid()]);\n\tthis.log(\"lock\",action);\n\taction.addToStream(this);\n\tvar binary = StreamBuffer.encode([-ACTION.LOCK,action.encode(this)]);\n\tthis.buffer().add(binary,this.byteLength());\n\tthis._lastType = action._type;\n\t// log \"read lock-action!\",action\n\tthis.sync({});\n\treturn true;\n};\n\n\n// write to the stream - this is where we compact etc\nStream.prototype.write = function (action,meta){\n\t\n\tif (!(this.lock())) {\n\t\treturn false;\n\t};\n\t\n\tvar offset = this.nextTimeOffset();\n\t\n\tif (meta && meta.timeOffset != null) {\n\t\toffset = meta.timeOffset;\n\t\t// anchorTime(offset: offset)\n\t};\n\t\n\t// var offset = Math.max(timestamp,@tail.offset)\n\tvar delta = offset - this.lastTimeOffset();\n\t\n\tif (delta > 0 && delta < 3) {\n\t\tdelta = 0;\n\t};\n\t\n\t// if we are not recording - we should not add\n\t// any offsets between events at all.\n\t\n\t// FIX if recording belongs to another branch - we must definitely throw(!)\n\tif (!(this.space().recording() && this.space().recording().isRecording())) {\n\t\tif (!(meta && meta.timeOffset)) { delta = 0 };\n\t};\n\t\n\tvar typ = action._type;\n\t\n\tif (!this.canPush(action)) {\n\t\tconsole.warn(\"not allowed to write to stream!\",action);\n\t\treturn this;\n\t};\n\t\n\tvar binary = [];\n\t\n\tif (delta > 0) {\n\t\tbinary.push(delta);\n\t};\n\t\n\tif (typ != this._lastType) {\n\t\tbinary.push(-typ);\n\t};\n\t\n\taction.addToStream(this);\n\t// var prev = prevOfType ? prevOfType.@params : null\n\tvar encoded = action.encode(this);\n\tbinary.push(encoded);\n\tvar packed = StreamBuffer.encode(binary);\n\tthis.buffer().add(packed,this.byteLength());\n\tthis.log.apply(this,[].concat([offset,delta,action.constructor.name], Array.from(encoded)));\n\tthis._lastLocalIndex = this._actions.length;\n\treturn this.read(meta);\n};\n\nStream.prototype.canPush = function (action){\n\tvar rec = this._recordings.last();\n\tvar res = !rec || !rec.stop() || (action instanceof RecStart);\n\treturn res;\n};\n\nStream.prototype.encode = function (){\n\tvar encoder = new (msgpack.Encoder)({});\n\tvar type = 0;\n\tvar dt = 0;\n\tvar time = 0;\n\tfor (let i = 0, items = iter$(this.actions()), len = items.length, action; i < len; i++) {\n\t\taction = items[i];\n\t\tlet atime = action.timeOffset();\n\t\tif (atime > time) {\n\t\t\tencoder.write(atime - time);\n\t\t\ttime = atime;\n\t\t};\n\t\tif (action._type != type) {\n\t\t\tencoder.write(-action._type);\n\t\t\ttype = action._type;\n\t\t};\n\t\t\n\t\tlet enc = action.encode(this);\n\t\tencoder.write(enc);\n\t};\n\treturn encoder.read();\n};\n\nStream.prototype.sync = function (meta){\n\t// for now read as long as possible\n\tif(meta === undefined) meta = null;\n\tvar len = this._buffer.size();\n\tvar offset = this._decoder.offset;\n\t\n\t// already at the end\n\tif (offset == len) {\n\t\treturn this;\n\t};\n\t\n\tif (offset > len) {\n\t\tconsole.warn(\"we are ahead of buffer(?!)\");\n\t\treturn this;\n\t};\n\t\n\twhile (this.read(meta)){\n\t\t// break if ++k > 1000\n\t\ttrue;\n\t};\n\treturn this;\n};\n\nStream.prototype.len = function (){\n\treturn this._actions.length;\n};\n\nStream.prototype.toArray = function (){\n\treturn this._actions;\n};\n\nStream.prototype.map = function (cb){\n\treturn this._actions.map(cb);\n};\n\nStream.prototype.duration = function (){\n\treturn this._tail.offset();\n};\n\n// This supports negative indices\nStream.prototype.actionAtIndex = function (index){\n\tif (index < 0) {\n\t\tindex = this._actions.length + index;\n\t};\n\treturn this._actions[index];\n};\n\nStream.prototype.actionAtOffset = function (time){\n\tthis.read();\n\t\n\tvar cursor = this._lastSearchCursor || this._actions[0];\n\tif (!cursor) { return null };\n\t\n\tvar prev = cursor;\n\t// make sure we read ahead to the offset\n\twhile (time >= this.duration()){\n\t\tif (!(this.read())) {\n\t\t\treturn this._tail;\n\t\t};\n\t};\n\t\n\tif (time < cursor.offset()) {\n\t\twhile (cursor && time < cursor.offset()){\n\t\t\tcursor = cursor._prev;\n\t\t};\n\t\treturn this._lastSearchCursor = cursor || this._actions[0];\n\t} else {\n\t\t// add some sort of cache here?\n\t\twhile (cursor && time >= cursor.offset()){\n\t\t\tprev = cursor;\n\t\t\tcursor = cursor._next;\n\t\t};\n\t\treturn this._lastSearchCursor = prev;\n\t};\n};\n\nStream.prototype.actionAtByteOffset = function (byteOffset){\n\tvar action = this._tail;\n\twhile (action && action._byteEnd > byteOffset){\n\t\taction = action._prev;\n\t};\n\treturn action;\n};\n\nStream.prototype.actionsOfType = function (type){\n\treturn this._actions.filter(function(action) { return action._type == type; });\n};\n\nStream.prototype.rollbackToAction = function (action){\n\tvar dec = this._decoder;\n\t\n\tvar path = this.space().cursor().compare(this.space().cursor().current(),action);\n\t// only sync if we are after this\n\tthis.log(\"rollback-path\",path);\n\t\n\tif (path.revertTo) {\n\t\tthis.space().cursor().sync(action);\n\t};\n\t\n\twhile (this._tail != action){\n\t\tlet prev = this._tail._prev;\n\t\tthis._tail.removeFromStream(this);\n\t\tthis._tail = prev;\n\t\tprev._next = null;\n\t};\n\t\n\tvar timeOffset = this._tail.timeOffset();\n\t\n\tthis._lastType = this._tail.type();\n\tthis._lastTimeOffset = timeOffset;\n\tthis._lastSearchCursor = null;\n\tthis._decoder.offset = this._tail.byteEnd();\n\tthis._actions.slice(0,action.index() + 1);\n\t\n\t// remove cached dupes after new offset\n\tvar lastIndex = len$(this._actions) - 1;\n\tfor (let o = this._dupes, v, i = 0, keys = Object.keys(o), l = keys.length, k; i < l; i++){\n\t\tk = keys[i];v = o[k];if (v > lastIndex) {\n\t\t\tthis._dupes[k] = undefined;\n\t\t};\n\t};\n\t\n\t// should happen from Branch\n\tvar tl = this._owner && this._owner.timeline && this._owner.timeline();\n\tif (tl && tl.currentOffset() > timeOffset) {\n\t\ttl.seek(timeOffset);\n\t};\n\treturn this;\n};\n\nStream.prototype.rollbackToByteOffset = function (byteEnd){\n\tvar action = this._tail;\n\twhile (action && action.byteEnd() > byteEnd){\n\t\taction = action._prev;\n\t};\n\t\n\t// console.log \"found action\",action\n\tthis.rollbackToAction(action);\n\treturn this;\n};\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar Dialog = require('uxa1').Dialog;\n\nvar LocalBranchDialog = _2.defineTag('LocalBranchDialog', Dialog, function(tag){\n\t\n\ttag.prototype.branch = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.branch().space();\n\t};\n\t\n\ttag.prototype.trunk = function (){\n\t\treturn this.space().trunk();\n\t};\n\t\n\ttag.prototype.cancelLabel = function (){\n\t\treturn \"play around\";\n\t};\n\t\n\ttag.prototype.submitLabel = function (){\n\t\treturn this.trunk().myFork() ? \"goto your fork\" : \"create fork\";\n\t};\n\t\n\ttag.prototype.onuxasubmit = function (){\n\t\tvar self = this;\n\t\treturn self.uxa().queue().add(100,async function() {\n\t\t\tvar user = await self.api().tryLogin();\n\t\t\tif (!user) {\n\t\t\t\tthrow new Error(\"You must be logged in to create a fork\");\n\t\t\t};\n\t\t\t\n\t\t\tawait self.space().navigateTo(self.trunk());\n\t\t\tvar branch = await self.trunk().upsertResponse();\n\t\t\treturn self.space().navigateTo(branch,'watching');\n\t\t});\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._body = this._body||(t0=_1('div',this)).flag('body')).setContent(\n\t\t\t(this.trunk().isLab() && this.trunk().myFork()) ? Imba.static([\n\t\t\t\t(t0.$.A || _1('p',t0.$,'A',t0).setText(\"You already have a fork of this playground.\\nYou will not be able to save these changes.\")),\n\t\t\t\t(t0.$.B || _1('p',t0.$,'B',t0).setText(\"Do you want to open your fork?\"))\n\t\t\t],2,1) : (this.trunk().isLab() ? (\n\t\t\t\t(t0.$.C || _1('p',t0.$,'C',t0).setText(\"You have started editing a playground created by someone else.\\nWould you like to create your own fork? (Recommended)\"))\n\t\t\t) : void(0))\n\t\t,3);\n\t};\n})\nexports.LocalBranchDialog = LocalBranchDialog;\n", "function idx$(a,b){\n\treturn (b && b.indexOf) ? b.indexOf(a) : [].indexOf.call(a,b);\n};\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nfunction len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\n// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/);\nvar protocol$ = require('./protocol'), ACTION = protocol$.ACTION, SCON = protocol$.SCON, MSG = protocol$.MSG, SPIV = protocol$.SPIV;\nvar Widget = require('./widgets/widget').Widget;\nvar Recording = require('./core/Recording').Recording;\nvar Timeline$ = require('./core/Timeline'), AbsTimeline = Timeline$.AbsTimeline, PubTimeline = Timeline$.PubTimeline;\n\nvar List = require('./util/List').List;\n\nvar StreamSyncer = require('./core/StreamSyncer').StreamSyncer;\nvar StreamAction = require('./core/StreamAction').StreamAction;\nvar StreamBuffer = require('./core/StreamBuffer').StreamBuffer;\nvar Stream = require('./core/Stream').Stream;\nvar Scrim = require('./models').Scrim;\nvar LocalBranchDialog = require('./views/LocalBranchDialog').LocalBranchDialog;\n\nvar util = require('./util');\nvar msgpack = require('msgpack-lite');\n\n// externs;\n\nvar tracking = require('./tracking');\n\nfunction Branch(space,parent,model){\n\t// should it be possible to init a branch before parent is loaded?\n\tvar v_;\n\tthis._space = space;\n\tthis._parent = parent;\n\tthis._model = model;\n\tthis._level = (parent instanceof Branch) ? ((parent.level() + 1)) : 0;\n\t\n\tthis._currentOffset = 0;\n\t// create cues for these maybe?!\n\tthis._draft = model.draft || {start: 0,cues: [],audio: []};\n\tthis._pub = model.pub;\n\t// @buffer = StreamBuffer.new(null,model) @buffer\n\tthis._stream = new Stream(model.buffer(),this,this.seed());\n\tthis._branches = new List(this);\n\tthis._ancestors = parent ? parent.ancestors().concat(parent) : [];\n\t\n\tthis._model.orig.branch = this;\n\t\n\tif (parent) {\n\t\tparent.branches().add(this,this.id());\n\t};\n\t\n\t// should we not switch to abs only when we actively want to continue?\n\tif (model.pub && (!(this.isMine()) || this.api().isEmbed() || this.api().isMobile())) {\n\t\tvar typ = model.pub.audio ? PubTimeline : AbsTimeline;\n\t\tthis.setTimeline((this.setPubTimeline(v_ = new typ(this,this._pub)),v_));\n\t} else {\n\t\tthis.setTimeline((this.setAbsTimeline(v_ = new AbsTimeline(this,this._draft)),v_));\n\t};\n\t\n\tthis._currentOffset = this.timeline().currentOffset();\n\tthis;\n};\n\nsubclass$(Branch,Widget);\nexports.Branch = Branch; // export class \nBranch.register('branch');\n\nBranch.modelDataFromEvent = function (event,opts){\n\tif(opts === undefined) opts = {};\n\tvar par = event.branch();\n\tvar cid = par.id();\n\tvar offset = par.timeline().currentOffset();\n\tvar time = par.timeline().currentTime();\n\tvar api = SCRIMBA_API;\n\tvar uid = api.uid();\n\t// var snap = par.toSnapshot\n\tvar title = par.space().model().title;\n\ttitle = (\"Note at \" + util.msToStr(time)); // - {title}\n\t\n\tvar data = {\n\t\ttype: 'note', // note?\n\t\ttitle: title,\n\t\tprivacy: 'secret',\n\t\taccess: 'guests',\n\t\tspiv: SPIV,\n\t\tuid: window.store.uid,\n\t\tgid: (window.store.course ? window.store.course.id : undefined),\n\t\tparent_id: par.id(),\n\t\tparent_index: event.index(),\n\t\tparent_offset: offset,\n\t\tcreated_at: new Date(),\n\t\tedited_at: new Date(),\n\t\tv: -2\n\t};\n\t\n\tif (!uid) {\n\t\t// what?\n\t\tdata.LOCAL = true;\n\t};\n\t\n\tfor (let v, i = 0, keys = Object.keys(opts), l = keys.length, k; i < l; i++){\n\t\tk = keys[i];v = opts[k];data[k] = v;\n\t};\n\t\n\treturn data;\n};\n\nBranch.modelFromEvent = function (event){\n\t// start as offline thing\n\t// console.log \"branch!\",data\n\tvar data = this.modelDataFromEvent(event);\n\treturn Scrim.build(data);\n};\n\nBranch.branchFromEvent = function (source){\n\t\n\tvar model = this.modelFromEvent(source);\n\tvar snap = source.branch().toSnapshot();\n\tvar api = source.branch().api();\n\tapi.sendTracking(tracking.TYPES.CREATE_BRANCH,[model.id,model.parent_id,model.parent_index,model.parent_offset]);\n\t\n\t// add initial action to stream\n\tvar buf = StreamBuffer.encode([-ACTION.SNAPSHOT,[snap],-ACTION.LOCK,[api.sid(),api.uid()]]);\n\tmodel.buffer().add(buf,0);\n\t\n\tvar branch = new this(source.branch().space(),source.branch(),model);\n\tbranch._initialSnapshot = snap;\n\t// var action = branch.action(ACTION.BRANCH,[snap])\n\tbranch._parentPlayState = source.branch().timeline().state();\n\tbranch._isLoaded = true;\n\tbranch.setMode('editing');\n\tbranch.stream().sync({local: true});\n\treturn branch;\n};\n\n// the currently active timeline for this branch\nBranch.prototype.absTimeline = function(v){ return this._absTimeline; }\nBranch.prototype.setAbsTimeline = function(v){ this._absTimeline = v; return this; };\nBranch.prototype.pubTimeline = function(v){ return this._pubTimeline; }\nBranch.prototype.setPubTimeline = function(v){ this._pubTimeline = v; return this; };\nBranch.prototype.__timeline = {watch: 'timelineDidSet',name: 'timeline'};\nBranch.prototype.timeline = function(v){ return this._timeline; }\nBranch.prototype.setTimeline = function(v){\n\tvar a = this.timeline();\n\tif(v != a) { this._timeline = v; }\n\tif(v != a) { this.timelineDidSet && this.timelineDidSet(v,a,this.__timeline) }\n\treturn this;\n};\n\nBranch.prototype.level = function(v){ return this._level; }\nBranch.prototype.setLevel = function(v){ this._level = v; return this; };\nBranch.prototype.draft = function(v){ return this._draft; }\nBranch.prototype.setDraft = function(v){ this._draft = v; return this; };\nBranch.prototype.branches = function(v){ return this._branches; }\nBranch.prototype.setBranches = function(v){ this._branches = v; return this; };\nBranch.prototype.recording = function(v){ return this._recording; }\nBranch.prototype.setRecording = function(v){ this._recording = v; return this; };\nBranch.prototype.ancestors = function(v){ return this._ancestors; }\nBranch.prototype.setAncestors = function(v){ this._ancestors = v; return this; };\nBranch.prototype.currentOffset = function(v){ return this._currentOffset; }\nBranch.prototype.setCurrentOffset = function(v){ this._currentOffset = v; return this; };\n\n// container for the events in this branch\nBranch.prototype.stream = function(v){ return this._stream; }\nBranch.prototype.setStream = function(v){ this._stream = v; return this; };\n\nBranch.prototype.id = function (){\n\treturn this._model.id;\n};\n\nBranch.prototype.api = function (){\n\treturn this.space().api();\n};\n\nBranch.prototype.inspect = function (){\n\treturn (\"Branch(id=\" + this.id() + \")\");\n};\n\nBranch.prototype.title = function (){\n\treturn this.model().title || \"Branch\";\n};\n\nBranch.prototype.model = function (){\n\treturn this._model;\n};\n\nBranch.prototype.data = function (){\n\treturn this._model;\n};\n\nBranch.prototype.parent = function (){\n\treturn this._parent;\n};\n\nBranch.prototype.dispose = function (){\n\tthis._stream && this._stream.dispose && this._stream.dispose();\n\tthis._syncer && this._syncer.dispose && this._syncer.dispose();\n\treturn this;\n};\n\nBranch.prototype.tick = function (){\n\t// refreshBranches\n\treturn this;\n};\n\nBranch.prototype.syncer = function (){\n\treturn this._syncer || (this._syncer = new StreamSyncer(this.stream(),this));\n};\n\nBranch.prototype.head = function (){\n\treturn this._stream.tail();\n};\n\nBranch.prototype.seed = function (){\n\treturn this._seed || (this._seed = this._parent.stream().actionAtIndex(this.model().parent_index));\n};\n\nBranch.prototype.ancestors = function (){\n\treturn this._ancestors;\n};\n\nBranch.prototype.branch = function (){\n\treturn this;\n};\n\nBranch.prototype.setup = function (){\n\treturn this;\n};\n\nBranch.prototype.state = function (){\n\treturn this.model().state;\n};\n\nBranch.prototype.type = function (){\n\treturn this.model().type || 'cast';\n};\n\nBranch.prototype.pub = function (){\n\treturn this.model().pub;\n};\n\nBranch.prototype.markerView = function (){\n\tvar _t1;\n\treturn this._markerView || (this._markerView = (_1('graph:branch-marker').flag('branch').flag('angled')).setData(this).end());\n};\n\nBranch.prototype.isInScope = function (){\n\tvar other = this.space().branch();\n\twhile (other){\n\t\tif (other == this) {\n\t\t\treturn true;\n\t\t};\n\t\tother = other.parent();\n\t};\n\treturn false;\n};\n\nBranch.prototype.isPublished = function (){\n\treturn this.model().isPublished();\n};\n\n// is it disallowed to record more or continue editing this cast?\nBranch.prototype.isLocked = function (){\n\treturn this.isPublished();\n};\n\nBranch.prototype.isSignificant = function (){\n\treturn this.stream().duration() > 0;\n};\n\nBranch.prototype.isTemplate = function (){\n\treturn this.type() == 'template';\n};\nBranch.prototype.isLab = function (){\n\treturn this.type() == 'lab';\n};\nBranch.prototype.isNote = function (){\n\treturn this.type() == 'note';\n};\nBranch.prototype.isFork = function (){\n\treturn this.type() == 'fork';\n};\nBranch.prototype.isTutorial = function (){\n\treturn this.type() == 'tutorial';\n};\n\nBranch.prototype.isLocal = function (){\n\treturn this.model().isLocal();\n};\n\nBranch.prototype.isMine = function (){\n\treturn this.model().uid == this.api().uid() || this.isLocal();\n};\n\nBranch.prototype.isActive = function (){\n\treturn this.space().branch() == this;\n};\n\nBranch.prototype.isCurrentBranch = function (){\n\treturn this.space().branch() == this;\n};\n\nBranch.prototype.isEnded = function (){\n\treturn this.state() == 'ended';\n};\n\nBranch.prototype.currentNestingLevel = function (){\n\tlet idx = this.space().cursor().branches().indexOf(this);\n\treturn idx;\n};\n\nBranch.prototype.setMode = function (mode){\n\treturn this.timeline().setState(mode);\n};\n\nBranch.prototype.mode = function (){\n\treturn this.timeline().state();\n};\n\nBranch.prototype.isEditing = function (){\n\treturn this.timeline().isEditing();\n};\nBranch.prototype.isRecording = function (){\n\treturn this.timeline().isRecording();\n};\nBranch.prototype.isWatching = function (){\n\treturn this.timeline().isWatching();\n};\nBranch.prototype.isPlaying = function (){\n\treturn this.timeline().isPlaying();\n};\nBranch.prototype.isPaused = function (){\n\treturn this.timeline().isPaused();\n};\nBranch.prototype.isAnnotating = function (){\n\treturn this.timeline().isAnnotating();\n};\nBranch.prototype.isLive = function (){\n\treturn this.timeline().isLive();\n};\n\nBranch.prototype.isForkable = function (){\n\treturn this.type() != 'fork' && (!(this.isLab()) || !(this.isMine())) && this.model().isForkable();\n};\n\nBranch.prototype.hasUnsavedChanges = function (){\n\treturn this.model().isLocal() || this._unsavedChanges;\n};\n\nBranch.prototype.hasUnpublishedChanges = function (){\n\treturn !this.model().pub || (this.model().draft && !SCON.compare(this.model().draft.cues,this.model().pub.cues));\n};\n\nBranch.prototype.hasRecordings = function (){\n\treturn len$(this.stream().recordings()) > 0;\n};\n\nBranch.prototype.hasDuration = function (){\n\treturn this.hasRecordings() || this.draft().end;\n};\n\n// can I contribute to this branch?\nBranch.prototype.canContribute = function (){\n\treturn this.isLocal() || this.model().hasMember(this.api().uid());\n};\n\nBranch.prototype.canEdit = function (){\n\treturn this._isLoaded && (this.isLocal() || this.stream().currentSID() == this.api().sid());\n};\n\n// TODOEDIT\nBranch.prototype.canPush = function (action){\n\treturn this.isEditing() && this.space().cursor().current() == this.head() && this.stream().canPush(action);\n};\n\nBranch.prototype.canPublish = function (){\n\treturn (this.canContribute() || this.api().user() && this.api().user().isAdmin()) && !(this.isLocal()) && this.hasRecordings() && !(this.isTemplate()) && this.hasUnpublishedChanges() && !(this.hasUnsavedChanges()) && !this.api().isMobile();\n};\n\nBranch.prototype.canUnpublish = function (){\n\treturn this.isPublished() && (this.canContribute() || this.api().user() && this.api().user().isAdmin()) && !(this.isLocal()) && this.hasRecordings() && !(this.isTemplate()) && !this.api().isMobile();\n};\n\nBranch.prototype.canPrepare = function (){\n\treturn this.canContribute() && !(this.hasRecordings());\n};\n\nBranch.prototype.canAnnotate = function (){\n\treturn (this.canContribute() || (this.api().user() && this.api().user().isMod())) && this.hasRecordings() && !this.api().ua().isPhone() && (this.timeline() instanceof AbsTimeline);\n};\n\nBranch.prototype.canRecord = function (){\n\treturn this.canContribute() && !(this.isLocked()) && !(this.isTemplate()) && !(this.isLocal()) && !(this.isLab()) && (!this._parent || !this._parent.isLab()) && !this.api().isMobile();\n};\n\nBranch.prototype.canSave = function (){\n\treturn this.isActive() && this.canContribute() && this.hasUnsavedChanges() && this.api().uid();\n};\n\nBranch.prototype.checkIntegrity = async function (){\n\tvar stats = await this.api().rpc('castCheckIntegrity',[this.id()]);\n\tconsole.log(\"result from integrity\",stats);\n\treturn stats;\n};\n\nBranch.prototype.ensureIntegrity = async function (){\n\treturn Promise.resolve({issues: []});\n\tvar files = this.draft().audio.map(function(item) { return SDB.files().get(item[3]); });\n\tawait Promise.all(files.map(function(file) { return file.repair(); }));\n\t\n\tvar stats = await this.checkIntegrity();\n\tvar byteLength = len$(this.stream().buffer());\n\tif (stats.byteLength != byteLength) {\n\t\tconsole.warn(\"The length of the stream differs on server and client\",stats,byteLength);\n\t};\n\t\n\tif (len$(stats.issues)) {\n\t\tconsole.warn(\"There are known issues with cast\",stats.issues);\n\t};\n\t\n\treturn Promise.resolve(stats);\n};\n\nBranch.prototype.addLocalEvent = function (event,meta){\n\tif(meta === undefined) meta = {};\n\tvar action = this.stream().write(event,meta);\n\t\n\tif (!action) {\n\t\tconsole.warn(\"action rejected by stream\");\n\t\tevent.discard();\n\t\treturn;\n\t};\n\t\n\tthis.forceToEnd();\n\tthis.syncer().schedule();\n\t\n\t// if you need to lock - also push locals?\n\tif (this.isWatching()) {\n\t\tthis.setMode('editing');\n\t};\n\t\n\treturn action;\n};\n\nBranch.prototype.forceToEnd = function (){\n\tvar action;\n\tif (action = this.head()) {\n\t\tthis.space().cursor().sync(action);\n\t\t// currentOffset = action.offset\n\t\t// timeline.anchorTime(action.offset)\n\t};\n\treturn this;\n};\n\nBranch.prototype.currentOffset = function (){\n\treturn (this._currentOffset == -1) ? ((this._stream.duration() || 0)) : this._currentOffset;\n};\n\n// recursively update currentOffset for ancestoral branches\n// should probably give a more descriptive name\nBranch.prototype.didEnter = function (from){\n\t// console.log \"didEnter!\",from\n\tvar self = this;\n\tif (self.parent()) {\n\t\tself.parent().setCurrentOffset(self.model().parent_offset);\n\t\tself.parent().didEnter();\n\t\t\n\t\tif (from == self.parent()) {\n\t\t\t// what if parent doesnt really have a timeline to speak of?\n\t\t\tif (self.parent().isPlaying()) { self.parent().timeline().pause() };\n\t\t};\n\t\t\n\t\tif (self.isWatching() && self.isMine() && self.canPrepare()) {\n\t\t\tsetTimeout(function() { return self.startEditing(); },20);\n\t\t};\n\t};\n\t\n\treturn self;\n};\n\nBranch.prototype.didLeave = function (to){\n\tif (this.isEditing()) {\n\t\tthis.setMode('watching');\n\t};\n\t\n\tvar scoped = this.isInScope();\n\t\n\tif (this.isInScope()) {\n\t\treturn;\n\t};\n\t\n\tif (this.parent()) {\n\t\treturn this.parent().didLeave(to);\n\t};\n};\n\nBranch.prototype.enter = function (){\n\tif (this.isActive()) {\n\t\treturn this;\n\t};\n\t\n\t// We indirectly tell the space which branch we're at\n\t// by setting the current timeline. Should be refactored\n\tthis.space().setTimeline(this.timeline());\n\tthis.space().tick();\n\treturn this;\n};\n\nBranch.prototype.leave = function (){\n\tif (this.isActive()) { return this.space().navigateTo(this.parent()) };\n};\n\nBranch.prototype.discard = function (){\n\t\n\tlet active = this.isActive();\n\tlet par = this.parent();\n\tif (this.timeline().isEditing()) { this.timeline().setState('watching') };\n\t// leave if isActive\n\t\n\tif (par) { this.parent().branches().remove(this) };\n\t\n\tif (this.isMine()) {\n\t\tthis.model().del(true);\n\t};\n\t\n\tif (this.branch()._parentPlayState) {\n\t\tthis.parent().timeline().setState(this.branch()._parentPlayState);\n\t};\n\t\n\tif (active && par) {\n\t\tpar.enter();\n\t};\n\treturn this;\n};\n\nBranch.prototype.load = async function (){\n\tvar self = this;\n\tif (self.isLocal()) {\n\t\tself.stream().sync();\n\t\tself._isLoaded = true;\n\t\treturn Promise.resolve(self);\n\t};\n\t\n\tif (true && !self.model().isLocal()) {\n\t\tself._myFork = self.model().branches().filter(function(_0) { return _0.type == 'fork' && _0.uid == self.api().uid(); })[0];\n\t};\n\t\n\tif (self._isLoaded) {\n\t\tself.log(\"already loaded!\");\n\t};\n\t\n\t// TODO fetch stream incrementally - render as soon as possible\n\tawait self.model().fetchStreamBuffer(self.api());\n\tself.api().log('streamsync',self.timeline().currentOffset());\n\tself.stream().actionAtOffset(self.timeline().currentOffset());\n\t\n\tif (self.timeline().isLive() || false) { // force to the very end\n\t\tself.stream().sync();\n\t\tself._isLoaded = true;\n\t} else {\n\t\t// why do we really need to delay syncing here?\n\t\t// might be because we want to render before really syncing?\n\t\tif (true) { // setTimeout(&,100) do\n\t\t\tself.stream().sync(); // why not sync immediately? what?\n\t\t\tself._isLoaded = true;\n\t\t};\n\t};\n\t\n\tself.api().log('streamsync');\n\treturn self;\n};\n\n// used to replace the existing stream with a single snapshot.\n// Just for development currently.\nBranch.prototype.flattenStream = function (){\n\tvar msg;\n\tvar snap = this.toSnapshot();\n\treturn msg = [MSG.STREAMFLATTEN,this.id(),snap];\n\t// api.send(msg) do\n\t//\tconsole.log \"returned from flattenStream\"\n};\n\nBranch.prototype.seedOffset = function (){\n\treturn this.model().parent_offset;\n};\n\nBranch.prototype.refreshBranches = function (){\n\treturn this;\n\t// for branch in\n\tvar coll = this.model().branches();\n\tvar v = coll.check();\n\tif (this._branchesVersion == v) {\n\t\treturn;\n\t};\n\t\n\tthis._branchesVersion = v;\n\t\n\tfor (let i = 0, items = iter$(coll), len = items.length, item; i < len; i++) {\n\t\t// create / init branches here\n\t\titem = items[i];\n\t\tif (!this._branches.has(item.id)) {\n\t\t\t// should add them directly no?\n\t\t\tnew Branch(this.space(),this,item).load(); // we are loading branches instantly\n\t\t};\n\t};\n\treturn this;\n};\n\nBranch.prototype.loadChildBranch = function (item){\n\tif (!this._branches.has(item.id)) {\n\t\t// should add them directly no?\n\t\t// log \"loadChildBranch\",@isLoaded\n\t\treturn new Branch(this.space(),this,item).load(); // we are loading branches instantly\n\t} else {\n\t\treturn Promise.resolve(this._branches.get(item.id));\n\t};\n};\n\nBranch.prototype.widgets = function (){\n\treturn this.space().widgets();\n};\n\nBranch.prototype.record = async function (o){\n\tvar offset_;\n\tif(o === undefined) o = {};\n\tif (!(this.canRecord())) { return Promise.reject(\"Not allowed to record\") };\n\t// first make sure we are at the very end of cast\n\t\n\t// WARN what if there is an error when recording - should we really trim before we know it is safe?\n\t// it would help to first setup the microphone to make sure that part works\n\tawait (((typeof (offset_ = o.offset)=='number'||offset_ instanceof Number)) ? this.trimToTimeOffset(o.offset) : Promise.resolve(this));\n\tthis.forceToEnd();\n\t\n\tvar rec = new Recording(this,o);\n\treturn rec.start();\n};\n\nBranch.prototype.trimToTimeOffset = function (timeOffset){\n\tvar action = this.stream().actionAtOffset(timeOffset);\n\treturn this.trimToAction(action,timeOffset);\n};\n\nBranch.prototype.trimToAction = function (action,timeOffset,appendTrimEvent){\n\tvar self = this;\n\treturn new Promise(async function(resolve,reject) {\n\t\tif ((typeof action=='number'||action instanceof Number)) {\n\t\t\taction = self.stream().actionAtIndex(action);\n\t\t};\n\t\t\n\t\ttimeOffset || (timeOffset = action.timeOffset());\n\t\t\n\t\tvar dirty = false;\n\t\tvar addTime = Math.max(timeOffset - action.timeOffset(),0);\n\t\tlet lastByte = action._byteEnd;\n\t\t// TODO - should wait for space to successfully sync to action\n\t\tself.space().cursor().sync(action);\n\t\tself.stream().buffer().trim(lastByte);\n\t\t\n\t\tvar msg = [[MSG.STREAMTRIM,self.id(),lastByte,self.stream().currentSID() || '']];\n\t\t\n\t\tself.log(\"trimToTimeOffset\",timeOffset,action,msg);\n\t\t\n\t\tlet req = await window.$api.post((\"/streams/\" + (self.stream().id()) + \"/trim?from=\" + lastByte),{});\n\t\t// console.log 'trimmed stream',req\n\t\t\n\t\t\n\t\tif (appendTrimEvent || addTime) {\n\t\t\tmsg.push(addTime || 0,-ACTION.TRIM,[]);\n\t\t};\n\t\t\n\t\t// api.send(StreamBuffer.encode(msg)) do |res|\n\t\tlet draftData = self.timeline().cues().trimCuesAndAudio(timeOffset);\n\t\t// log \"responded from trim\", draftData\n\t\t// draft:end = timeOffset # Math.min(draft:end,timeOffset)\n\t\tself.model().save({draft: self.draft()});\n\t\tresolve(self);\n\t\t\n\t\treturn self;\n\t});\n};\n\nBranch.prototype.toSnapshot = function (o){\n\tif(o === undefined) o = {};\n\tvar snap = {};\n\tvar event = this.space().cursor().current();\n\to.local = true;\n\t\n\tif (event.branch() != this) {\n\t\tthrow \"cannot create snapshot for wrong branch\",event;\n\t};\n\t\n\tsnap.seed = [this.model().id,event.index() || 0,Math.round(this.timeline().currentOffset())];\n\tsnap.spiv = SPIV;\n\t\n\tvar widgets = this.widgets().map(function(item) {\n\t\tif (!(o.exclude && idx$(item.TYPE,o.exclude) >= 0)) {\n\t\t\treturn item.serialize(o,snap);\n\t\t};\n\t});\n\t\n\tsnap.widgets = widgets.filter(function(item) { return item; });\n\treturn snap;\n};\n\n\n// try to lock this branch for editing\n// will return a promise with details on whether lock has succeeded or not\nBranch.prototype.lock = function (cb){\n\tthis.stream().lock();\n\tthis.stream().sync();\n\treturn cb && cb(null,true);\n};\n\nBranch.prototype.startEditing = function (){\n\tvar self = this;\n\tself.lock(function() {\n\t\t// console.log \"returned from lock!!!\",canEdit,canPrepare\n\t\tif (self.canPrepare()) {\n\t\t\tself.setMode('editing');\n\t\t\treturn setTimeout(function() { return self.space().view().editor().focus(); },50);\n\t\t};\n\t});\n\treturn self;\n};\n\nBranch.prototype.stopEditing = function (){\n\tif (!(this.isEditing())) {\n\t\tthrow \"branch is not editing!\",this;\n\t};\n\t\n\t// push snapshot\n\tif (this.isTemplate() && this.head().type() != ACTION.SNAPSHOT) {\n\t\t// log 'pushing snapshot since template'\n\t\tthis.push_(ACTION.SNAPSHOT,[this.toSnapshot()]);\n\t};\n\t\n\tthis.setMode(this.isRecording() ? 'paused' : 'watching');\n\treturn this;\n};\n\nBranch.prototype.stopRecording = function (){\n\tif (this.recording()) {\n\t\treturn this.recording().stop();\n\t};\n};\n\n// triggered when an event\n// def startForking atAction, firstAction\nBranch.prototype.myFork = function (){\n\t// Not correct for challenge / response?\n\tvar self = this;\n\tif (self.isLab() && self.isMine()) { return self };\n\treturn self._myFork || (self._myFork = self.model().branches().filter(function(_0) { return _0.type == 'fork' && _0.uid == self.api().uid(); })[0]);\n};\n\nBranch.prototype.upsertResponse = async function (){\n\tif (this.myFork()) {\n\t\treturn Promise.resolve(this.myFork());\n\t};\n\t\n\tif (this.isLab() && this.isMine()) {\n\t\treturn Promise.resolve(this);\n\t};\n\t\n\tif (!(this.type() == 'challenge' || this.type() == 'lab')) {\n\t\treturn Promise.resolve(null);\n\t};\n\t\n\tif (this.space().trunk().model().uid == this.api().uid()) {\n\t\treturn Promise.resolve(null);\n\t};\n\t\n\tvar snap = this.toSnapshot();\n\tvar resp = await this.api().rpc('castRespond',[this.space().trunk().id(),snap],{models: true});\n\t\n\tthis._myFork = resp;\n\t// console.log \"returned from castRespond\",resp\n\treturn resp;\n};\n\nBranch.prototype.startAnnotating = function (){\n\tif (!(this.canAnnotate())) { return };\n\tthis._frozenDraft = JSON.stringify(this.draft());\n\tthis.log('startAnnotating');\n\tthis.timeline().setIsAnnotating(true);\n\treturn this;\n};\n\nBranch.prototype.finishAnnotating = async function (cues){\n\tvar self = this;\n\tconsole.log(\"finishAnnotating\",cues);\n\t\n\tif (JSON.stringify(self.draft()) != self._frozenDraft) {\n\t\tawait self.model().update({draft: self._draft});\n\t};\n\tself.timeline().setIsAnnotating(false);\n\tsetTimeout(function() { return self.space().view().render(); },0);\n\treturn self;\n};\n\nBranch.prototype.cancelAnnotating = function (){\n\tvar self = this;\n\tself.timeline().setIsAnnotating(false);\n\tlet prev = JSON.parse(self._frozenDraft);\n\tself._draft = self.model().draft = prev;\n\tself.timeline().loadCues(prev);\n\tsetTimeout(function() { return self.space().view().render(); },0);\n\treturn self;\n};\n\nBranch.prototype.persist = async function (){\n\tif (this.model().isLocal()) {\n\t\tlet res = await this.model().persist();\n\t\tawait this.syncer().persist(true);\n\t};\n\treturn this.model();\n};\n\nBranch.prototype.save = async function (updates){ // full = false\n\tif(updates === undefined) updates = {};\n\tvar wasLocal = this.model().isLocal();\n\t\n\tawait this.api().tryLogin(); // hmm\n\t\n\tthis.draft().end = this.stream().duration(); // really=\n\t\n\tvar upd = {\n\t\tdraft: this._draft\n\t};\n\t\n\tfor (let value, i = 0, keys = Object.keys(updates), l = keys.length, key; i < l; i++){\n\t\tkey = keys[i];value = updates[key];upd[key] = value;\n\t};\n\t\n\tif (wasLocal || !this.model().uid) {\n\t\tupd.uid || (upd.uid = this.api().uid());\n\t};\n\t\n\tif (!this.api().uid()) {\n\t\tthrow \"not allowed to save unless logged in\";\n\t};\n\t\n\tif (!this.model().uid) {\n\t\tupd.uid = this.api().uid();\n\t};\n\t\n\tawait this.model().update(upd);\n\t\n\t// because our branch is no longer local we should be able to sync\n\tawait this.syncer().persist(true);\n\t\n\treturn this;\n};\n\nBranch.prototype.publish = async function (o){\n\tvar _t1;\n\tif(o === undefined) o = {};\n\tawait this.save(true);\n\t\n\tvar integrity = await this.ensureIntegrity();\n\tif (len$(integrity.issues)) {\n\t\tconsole.log(\"HAS ISSUES!!!\",integrity);\n\t\treturn Promise.resolve({error: \"issues with publish!\"});\n\t};\n\t\n\to.end = this.stream().duration();\n\t\n\tawait this.save(true);\n\t\n\tlet req = await window.$api.post((\"/scrims/\" + this.id() + \"/publish\"),{});\n\tif (req.error) {\n\t\tlet e = req.error;\n\t\tlet data = {\n\t\t\tmessage: e,\n\t\t\tcode: 400\n\t\t};\n\t\ttry {\n\t\t\treturn Imba.mount((_1('app-snackbar')).setData(data).end());\n\t\t} catch (e) { };\n\t};\n\t\n\tawait this.model().update(req.data);\n\tthis.model().published_at = req.data.published_at;\n\tthis.model().pub = req.data.pub;\n\tImba.commit();\n\t// var pub = await api.rpc(:publish,[id,o])\n\t// await model.fetch # hard refresh\n\tlet data = {\n\t\tmessage: \"Scrim published successfully\"\n\t};\n\ttry {\n\t\tImba.mount((_1('app-snackbar')).setData(data).end());\n\t} catch (e) { };\n\treturn this;\n};\n\nBranch.prototype.unpublish = async function (){\n\tvar _t1;\n\tlet res = await window.$api.post((\"/scrims/\" + this.id() + \"/unpublish\"),{});\n\tif (res.error) {\n\t\tlet e = res.error;\n\t\tlet data = {\n\t\t\tmessage: e,\n\t\t\tcode: 400\n\t\t};\n\t\ttry {\n\t\t\treturn Imba.mount((_1('app-snackbar')).setData(data).end());\n\t\t} catch (e) { };\n\t};\n\t\n\tawait this.model().update(res.data);\n\tawait this.save(true);\n\tthis.model().pub = null;\n\tthis.model().published_at = null;\n\tImba.commit();\n\tlet data = {\n\t\tmessage: \"Scrim unpublished successfully\"\n\t};\n\ttry {\n\t\tImba.mount((_1('app-snackbar')).setData(data).end());\n\t} catch (e) { };\n\treturn this;\n};\n\nBranch.prototype.__uid = function (){\n\treturn 0;\n};\n\nfunction Trunk(){ return Branch.apply(this,arguments) };\n\nsubclass$(Trunk,Branch);\nexports.Trunk = Trunk; // export class \nTrunk.prototype.seed = function (){\n\treturn null;\n};\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar uxa1$ = require('uxa1'), Menu = uxa1$.Menu, MenuItem = uxa1$.MenuItem;\n\nvar PaneTab = _2.defineTag('PaneTab', function(tag){\n\t\n\ttag.prototype.group = function(v){ return this._group; }\n\ttag.prototype.setGroup = function(v){ this._group = v; return this; };\n\ttag.prototype.__warnings = {'default': 0,name: 'warnings'};\n\ttag.prototype.warnings = function(v){ return this._warnings; }\n\ttag.prototype.setWarnings = function(v){ this._warnings = v; return this; }\n\ttag.prototype._warnings = 0;\n\ttag.prototype.__errors = {'default': 0,name: 'errors'};\n\ttag.prototype.errors = function(v){ return this._errors; }\n\ttag.prototype.setErrors = function(v){ this._errors = v; return this; }\n\ttag.prototype._errors = 0;\n\ttag.prototype.__active = {watch: 'activeDidSet',name: 'active'};\n\ttag.prototype.active = function(v){ return this._active; }\n\ttag.prototype.setActive = function(v){\n\t\tvar a = this.active();\n\t\tif(v != a) { this._active = v; }\n\t\tif(v != a) { this.activeDidSet && this.activeDidSet(v,a,this.__active) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3;\n\t\treturn this.$open(0).setFlag(-1,this.data().TYPE).flagIf('errors',this.errors()).flagIf('warnings',this.warnings()).setChildren($.$ = $.$ || [\n\t\t\t_1('div',$,0,this).flag('title'),\n\t\t\t_1('div',$,1,this).flag('badges').setContent([\n\t\t\t\t_1('div',$,2,1).flag('badge').flag('errors'),\n\t\t\t\t_1('div',$,3,1).flag('badge').flag('warnings'),\n\t\t\t\t_1('div',$,4,1).flag('badge').flag('participant')\n\t\t\t],2)\n\t\t],2).synced((\n\t\t\t$[0].setContent(this.data().title() || \"Pane\",3),\n\t\t\t$[2].setContent(this.errors() || '',3),\n\t\t\t$[3].setContent(this.warnings() || '',3)\n\t\t,true));\n\t};\n\t\n\ttag.prototype.ontouchstart = function (t){\n\t\t// right click\n\t\tif (t.button() == 2) {\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\treturn this.trigger('tabtap',{item: this.data()});\n\t};\n\t\n\ttag.prototype.oncontextmenu = function (e){\n\t\tvar _t1, _t2, t0;\n\t\te.prevent().halt();\n\t\t\n\t\tlet name = this.data().title();\n\t\t\n\t\treturn e.target().uxa().open((t0 = (t0=_1(Menu)).setContent([\n\t\t\t_1(MenuItem,t0.$,'A',t0).setAction('mv'),\n\t\t\t_1(MenuItem,t0.$,'B',t0).setAction('rm')\n\t\t],2)).end((\n\t\t\tt0.$.A.setLabel((\"Rename \" + name)).end(),\n\t\t\tt0.$.B.setLabel((\"Delete \" + name)).end()\n\t\t,true)));\n\t};\n\t\n\ttag.prototype.onrm = function (){\n\t\tvar self = this;\n\t\treturn setTimeout(function() {\n\t\t\tlet ok = window.confirm((\"Are you sure you want to delete \" + (self.data().title()) + \"?\"));\n\t\t\tif (ok) { return self.data().rm() };\n\t\t},10);\n\t};\n\t\n\ttag.prototype.onmv = function (e){\n\t\tvar self = this;\n\t\tsetTimeout(function() {\n\t\t\tlet newname = window.prompt(\"New name for file\",self.data().title());\n\t\t\tconsole.log(\"renamed to\",newname);\n\t\t\treturn self.data().mv(newname);\n\t\t},10);\n\t\treturn self;\n\t};\n})\nexports.PaneTab = PaneTab;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar PaneView = _2.defineTag('PaneView', 'section', function(tag){\n\t\n\ttag.prototype.__title = {'default': \"Pane\",name: 'title'};\n\ttag.prototype.title = function(v){ return this._title; }\n\ttag.prototype.setTitle = function(v){ this._title = v; return this; }\n\ttag.prototype._title = \"Pane\";\n\ttag.prototype.key = function(v){ return this._key; }\n\ttag.prototype.setKey = function(v){ this._key = v; return this; };\n\t\n\ttag.prototype.build = function (){\n\t\tthis.setTabindex(0);\n\t\treturn tag.prototype.__super__.build.apply(this,arguments);\n\t};\n\t\n\ttag.prototype.oncontextmenu = function (e){\n\t\tvar menu;\n\t\te.prevent().halt();\n\t\tif (menu = this.contextmenu()) {\n\t\t\treturn menu.showAt(e.x(),e.y());\n\t\t};\n\t};\n\t\n\ttag.prototype.contextmenu = function (){\n\t\treturn null;\n\t};\n\t\n\ttag.prototype.onfocusin = function (e){\n\t\tvar v_;\n\t\te.halt();\n\t\t\n\t\tif (this.data().space().cursor().canPush()) {\n\t\t\treturn (this.data().space().agent().setFocus(v_ = this.data()),v_);\n\t\t};\n\t};\n\t\n\ttag.prototype.onfocusout = function (e){\n\t\t// console.log 'Pane.onfocusout',e.event:relatedTarget\n\t\tvar v_;\n\t\te.halt();\n\t\tif (!e.event().relatedTarget) {\n\t\t\tif (this.data().space().cursor().canPush()) {\n\t\t\t\treturn (this.data().space().agent().setFocus(null),null);\n\t\t\t};\n\t\t};\n\t};\n\t\n\ttag.prototype.header = function (){\n\t\treturn null;\n\t};\n\ttag.prototype.footer = function (){\n\t\treturn null;\n\t};\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn (this._body = this._body||_1('div',this).flag('body')).setText(\"Content of pane \" + this.title());\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1;\n\t\treturn this.$open(0).setChildren([\n\t\t\tthis.header(),\n\t\t\tthis.body(),\n\t\t\tthis.footer()\n\t\t],1).synced();\n\t};\n})\nexports.PaneView = PaneView;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\n\nvar Struct = require('./Struct').Struct;\n\nfunction Dimensions(raw){\n\tthis._v = 0;\n\tthis._data = raw;\n};\n\nsubclass$(Dimensions,Struct);\nexports.Dimensions = Dimensions; // export class \nDimensions.RESIZING = 1;\nDimensions.MOVING = 2;\nDimensions.PIN_TOP = 4;\nDimensions.PIN_RIGHT = 8;\nDimensions.PIN_BOTTOM = 16;\nDimensions.PIN_LEFT = 32;\n\nDimensions.desc([\n\t'left',\n\t'top',\n\t'width',\n\t'height',\n\t'scrollLeft',\n\t'scrollTop',\n\t'scrollWidth',\n\t'scrollHeight',\n\t'vw',\n\t'vh',\n\t'scaleX',\n\t'scaleY',\n\t'targetRef',\n\t'mask'\n]);\n\nDimensions.prototype.anchorX = function (){\n\treturn this.left() / (this.vw() - this.width());\n};\n\nDimensions.prototype.anchorY = function (){\n\treturn this.top() / (this.vh() - this.height());\n};\n\nDimensions.prototype.round = function (){\n\tfor (let i = 0, items = iter$(this._data), len = items.length; i < len; i++) {\n\t\tthis._data[i] = Math.round(items[i]);\n\t};\n\treturn this;\n};\n\nDimensions.prototype.right = function (){\n\treturn this.vw() - this.left() - this.width();\n};\n\nDimensions.prototype.bottom = function (){\n\treturn this.vh() - this.top() - this.height();\n};\n\nDimensions.prototype.resizeParent = function (pwidth,pheight){\n\tif (pwidth == this.vw() && pheight == this.vh()) {\n\t\treturn this;\n\t};\n\t\n\tvar ax = this.anchorX(),ay = this.anchorY();\n\t\n\tvar left = Math.round((pwidth - this.width()) * ax);\n\tvar top = Math.round((pheight - this.height()) * ay);\n\t\n\tif (ax > 1) {\n\t\tleft = pwidth - (this.vw() - this.left());\n\t} else if (ax < 0) {\n\t\tleft = this.left();\n\t};\n\tif (ay > 1) {\n\t\ttop = pheight - (this.vh() - this.top());\n\t} else if (ay < 0) {\n\t\ttop = this.top();\n\t};\n\t\n\treturn this.set(\n\t\t{left: left,\n\t\ttop: top,\n\t\tvw: pwidth,\n\t\tvh: pheight}\n\t);\n};\n\nDimensions.prototype.resize = function (width,height,mask){\n\tif(mask === undefined) mask = 0;\n\tvar ax = this.anchorX();\n\tvar ay = this.anchorY();\n\t\n\tif (mask & Dimensions.PIN_TOP) {\n\t\tay = 0;\n\t} else if (mask & Dimensions.PIN_BOTTOM) {\n\t\tay = 1;\n\t};\n\t\n\tif (mask & Dimensions.PIN_LEFT) {\n\t\tax = 0;\n\t} else if (mask & Dimensions.PIN_RIGHT) {\n\t\tax = 1;\n\t};\n\t\n\tvar snapX = ax > 0.9 || ax < 0.1;\n\tvar snapY = ay > 0.9 || ay < 0.1;\n\t\n\t// round to closest 2px ?\n\tvar left = this.vw() * ax - width * ax;\n\tvar top = this.vh() * ay - height * ay;\n\t\n\tif (snapX) {\n\t\tleft = this.left() + (this.width() - width) * Math.round(ax);\n\t};\n\tif (snapY) {\n\t\ttop = this.top() + (this.height() - height) * Math.round(ay);\n\t};\n\t\n\treturn this.set({left: left,top: top,width: width,height: height});\n};\n\nDimensions.prototype.ensureInsideParent = function (bleed){\n\tif(bleed === undefined) bleed = 30;\n\tif ((this.left() + this.width()) < bleed) {\n\t\tthis.set({left: bleed - this.width()});\n\t} else if (this.left() > (this.vw() - bleed)) {\n\t\tthis.set({left: this.vw() - bleed});\n\t};\n\t\n\tif (this.top() > (this.vh() - bleed)) {\n\t\tthis.set({top: this.vh() - bleed});\n\t} else if (this.top() < bleed) {\n\t\tthis.set({top: bleed});\n\t};\n\treturn this;\n};\n\n\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/);\nvar ACTION = require('../protocol').ACTION;\nvar PaneTab = require('../views/PaneTab').PaneTab;\nvar Widget = require('./widget').Widget;\n\nvar PaneView = require('./PaneView').PaneView;\nvar PaneTab = require('../views/PaneTab').PaneTab;\n\nexports.PaneTab = PaneTab;\nexports.PaneView = PaneView;\n\nvar Dimensions = require('../core/Dimensions').Dimensions;\n\nfunction PaneWidget(){ return Widget.apply(this,arguments) };\n\nsubclass$(PaneWidget,Widget);\nexports.PaneWidget = PaneWidget; // export class \nPaneWidget.register('pane');\n\nPaneWidget.option('layout',{overridable: true,type: Dimensions,action: ACTION.LAYOUT});\n\nPaneWidget.prototype.tab = function (){\n\tlet _t1, $ = this.$$ || (this.$$ = {});\n\treturn (this._tab = this._tab||_1(PaneTab,this).flag('tab')).setData(this).end();\n};\n\nPaneWidget.prototype.clientLayout = function (){\n\t// (@clientLayout ||= Dimensions.build({})).wrap(options.locals:layout)\n\treturn (this._clientLayout || (this._clientLayout = new Dimensions(null))).wrap(this.options().locals().layout);\n};\n\nPaneWidget.prototype.streamLayout = function (){\n\treturn (this._streamLayout || (this._streamLayout = Dimensions.build({}))).wrap(this._data.layout);\n};\n\nPaneWidget.prototype.agentLayout = function (){\n\treturn this.streamLayout();\n};\n\nPaneWidget.prototype.localLayout = function (){\n\treturn this.clientLayout();\n};\n\nPaneWidget.prototype.setLayout = function (data){\n\treturn this.options().set('layout',data);\n};\n\nPaneWidget.prototype.streamPosToClientPos = function (pos){\n\treturn this;\n};\n\nPaneWidget.prototype.posToScreen = function (px,py,sl,cl){\n\tsl || (sl = this.agentLayout());\n\tcl || (cl = this.localLayout());\n\t\n\tif (!(sl && cl && sl._data && cl._data)) {\n\t\treturn null;\n\t};\n\t\n\tvar absx = px;\n\tvar absy = py;\n\t\n\tvar sx = (cl.scaleX() || 1) / (sl.scaleX() || 1);\n\tvar sy = (cl.scaleY() || 1) / (sl.scaleY() || 1);\n\t\n\tlet relx = (absx - sl.left() + (sl.scrollLeft() || 0)) * sx;\n\tlet rely = (absy - sl.top() + (sl.scrollTop() || 0)) * sy;\n\t\n\tlet x = relx + cl.left() - (cl.scrollLeft() || 0);\n\tlet y = rely + cl.top() - (cl.scrollTop() || 0);\n\t\n\treturn [x,y];\n};\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nvar LCRange = require('../protocol').LCRange;\n\nvar compareRangesUsingEnds = function(a,b) {\n\tvar al1 = a[0] - 1;\n\tvar ac1 = a[1] - 1;\n\tvar al2 = (a[0] + (a[3] || 0)) - 1;\n\tvar ac2 = (a[1] + (a[2] || 0)) - 1;\n\t\n\tvar bl1 = b[0] - 1;\n\tvar bc1 = b[1] - 1;\n\tvar bl2 = (b[0] + (b[3] || 0)) - 1;\n\tvar bc2 = (b[1] + (b[2] || 0)) - 1;\n\t\n\tif (al2 == bl2) {\n\t\tif (ac2 == bc2) {\n\t\t\tif (al1 == bc1) {\n\t\t\t\treturn ac1 - bc1;\n\t\t\t};\n\t\t\treturn al1 - bl1;\n\t\t};\n\t\treturn ac2 - bc2;\n\t};\n\treturn al2 - bl2;\n};\n\nvar sortOpsAscending = function(a,b) {\n\tlet r = compareRangesUsingEnds(a[0],b[0]);\n\tif (r == 0) {\n\t\treturn a.I - b.I;\n\t};\n\treturn r;\n};\n\n\nvar sortOpsDescending = function(a,b) {\n\tlet r = compareRangesUsingEnds(a[0],b[0]);\n\tif (r == 0) {\n\t\treturn b.I - a.I;\n\t};\n\treturn -r;\n};\n\nvar diffString = exports.diffString = function(str0,str1) {\n\tvar i = 0;\n\tvar l0 = str0.length;\n\tvar l1 = str1.length;\n\tvar minLen = Math.min(l0,l1);\n\tvar maxLen = Math.max(l0,l1);\n\tvar l = maxLen;\n\t\n\tvar left = 0;\n\t// find first part that is different\n\twhile (i < minLen){\n\t\tvar chr0 = str0[i];\n\t\tvar chr1 = str1[i];\n\t\ti++;\n\t\t\n\t\tif (chr0 == chr1) {\n\t\t\tleft++;\n\t\t} else {\n\t\t\tbreak;\n\t\t};\n\t};\n\t\n\t// equal all the way\n\tif (left == i) {\n\t\t// cut it\n\t\tif (l0 > l1) {\n\t\t\treturn [left,l0,''];\n\t\t} else if (l1 > l0) {\n\t\t\treturn [left,left,str1.slice(left)];\n\t\t};\n\t\treturn [];\n\t};\n\t\n\t// go from the end -- look at first part that is the same\n\twhile (l0 >= left && l1 >= left){\n\t\tchr0 = str0[--l0];\n\t\tchr1 = str1[--l1];\n\t\t\n\t\tif (chr0 != chr1) {\n\t\t\tbreak;\n\t\t};\n\t};\n\t\n\t// right = Math.max(l0 + 1,left)\n\tvar ins = str1.slice(left,l1 + 1);\n\treturn [left,l0 + 1,ins];\n};\n\n\nvar patchString = exports.patchString = function(str,diff) {\n\tif (diff instanceof Array) {\n\t\t// diffString returns an empty array when there are no changes\n\t\tif (diff.length == 0) { return str };\n\t\treturn str.substr(0,diff[0]) + diff[2] + str.slice(diff[1]);\n\t} else {\n\t\treturn diff;\n\t};\n};\n\nvar getLineMaxColumn = exports.getLineMaxColumn = function(line) {\n\treturn line.length;\n};\n\nvar LINE_REGEX = /\\r\\n|\\r|\\n/;\n\nfunction TextModel(raw){\n\tif(raw === undefined) raw = '';\n\tthis._raw = raw;\n\tthis._lines = raw.split(LINE_REGEX);\n\tthis.reset();\n};\n\nexports.TextModel = TextModel; // export class \nTextModel.prototype.lines = function(v){ return this._lines; }\nTextModel.prototype.setLines = function(v){ this._lines = v; return this; };\n\nTextModel.prototype.reset = function (){\n\tthis._edited = [];\n\tthis._body = null;\n\treturn this;\n};\n\nTextModel.prototype.reversedOperation = function (op){\n\tvar str = this.textInRange(op[0]);\n\tvar rng = this.expandedRange(op[0],op[1]);\n\treturn [rng,str];\n};\n\nTextModel.prototype.expandedRange = function (start,text){\n\tvar range;\n\tvar lines = (text || '').split(LINE_REGEX);\n\tvar l2 = start[0] + (lines.length - 1);\n\tvar col = lines[lines.length - 1].length;\n\tif (start[0] == l2) {\n\t\tcol += start[1];\n\t} else {\n\t\tcol += 1;\n\t};\n\t\n\treturn range = [start[0],start[1],col - start[1],l2 - start[0]];\n};\n\nTextModel.prototype.textInRange = function (pos,lines){\n\tif(lines === undefined) lines = this._lines;\n\tvar l1 = pos[0] - 1;\n\tvar c1 = pos[1] - 1;\n\t\n\tvar l2 = (pos[0] + (pos[3] || 0)) - 1;\n\tvar c2 = (pos[1] + (pos[2] || 0)) - 1;\n\t\n\t// var l2 = (pos[2] or pos[0]) - 1\n\t// var c2 = (pos[3] or pos[1]) - 1\n\t\n\tif (l1 == l2) {\n\t\treturn lines[l1].slice(c1,c2);\n\t};\n\t\n\tvar parts = lines[l1++].slice(c1);\n\twhile (l1 < l2){\n\t\tparts += \"\\n\" + lines[l1++];\n\t};\n\t\n\tparts += \"\\n\" + lines[l2].slice(0,c2);\n\treturn parts;\n};\n\nTextModel.prototype.apply = function (ops){\n\tvar lines = this._lines;\n\tvar rev = null;\n\t\n\t// uncache body\n\tthis._body = null;\n\t\n\tif (!ops.UNDO) {\n\t\tops.FWD = 1;\n\t\trev = ops.UNDO = [];\n\t\trev.UNDO = ops;\n\t\trev.REV = 1;\n\t};\n\t\n\tlet len = ops.length;\n\tlet i = 0;\n\t\n\t// if first apply - sort\t\n\tif (len > 1 && ops.FWD) {\n\t\tops = ops.map(function(op,i) {\n\t\t\top.I = i;\n\t\t\treturn op;\n\t\t}).sort(sortOpsDescending);\n\t};\n\t\n\t// apply the operations in order\n\twhile (i < len){\n\t\tlet op = ops[i++];\n\t\tvar pos = op[0];\n\t\tvar ins = op[1] || '';\n\t\t\n\t\tvar ln = pos[0] - 1;\n\t\tvar col = pos[1] - 1;\n\t\tvar ln2 = (pos[0] + (pos[3] || 0)) - 1;\n\t\tvar col2 = (pos[1] + (pos[2] || 0)) - 1;\n\t\t\n\t\tif (rev) {\n\t\t\trev.unshift(this.reversedOperation(op));\n\t\t};\n\t\t\n\t\t// the range spans multiple lines\n\t\tif (ln != ln2) {\n\t\t\tlet start = lines[ln].slice(0,col);\n\t\t\tlet end = lines[ln2].slice(col2);\n\t\t\tlines[ln] = start + end;\n\t\t\tlines.splice(ln + 1,(ln2 - ln));\n\t\t\tcol2 = col;\n\t\t};\n\t\t\n\t\tlet line = lines[ln];\n\t\t\n\t\tline = line.slice(0,col) + ins + line.slice(col2);\n\t\t\n\t\tif (ins.indexOf('\\n') >= 0) {\n\t\t\t// console.log \"multiline\"\n\t\t\tlines.splice.apply(lines,[].concat([ln,1], Array.from(line.split(LINE_REGEX))));\n\t\t} else {\n\t\t\tlines[ln] = line;\n\t\t};\n\t\t\n\t\t// if len > 1\n\t\t// \tconsole.log \"apply after\",i - 1,pos,ins\n\t\t// \tconsole.log lines.join(\"\\n\")\n\t};\n\t\n\treturn ops;\n};\n\nTextModel.prototype.getValue = function (){\n\treturn this.body();\n};\n\nTextModel.prototype.body = function (){\n\treturn this._body || (this._body = this._lines.join(\"\\n\"));\n};\n\nTextModel.prototype.getDiff = function (lines){\n\tvar locals = this._lines;\n\t\n\tif ((typeof lines=='string'||lines instanceof String)) {\n\t\tlines = lines.split(LINE_REGEX).map(function(text,nr) { return {_text: text}; });\n\t};\n\t\n\tvar remote = lines;\n\t\n\tvar rl = len$(remote);\n\tvar ll = len$(locals);\n\t\n\tvar l1 = 0;\n\tvar c1 = 0;\n\tvar l2 = rl - 1;\n\tvar c2 = 0;\n\tvar text;\n\t\n\tvar lEnd = ll - 1;\n\tvar minLines = Math.min(rl,ll);\n\t\n\t// compare forwards\n\twhile (l1 < minLines){\n\t\tif (locals[l1] != remote[l1]._text) {\n\t\t\t// console.log \"line different\",l1,[locals[l1],remote[l1]:_text]\n\t\t\tbreak;\n\t\t};\n\t\tl1 += 1;\n\t};\n\t\n\t// all lines shared are the same\n\tif (l1 == minLines) {\n\t\tif (ll == rl) {\n\t\t\treturn null;\n\t\t} else if (ll > rl) {\n\t\t\t// insert at the end of last line\n\t\t\tl1 = l2;\n\t\t\tc1 = c2 = getLineMaxColumn(remote[l2]._text);\n\t\t\ttext = \"\\n\" + locals.slice(rl).join(\"\\n\");\n\t\t\t// end column as well\n\t\t} else if (rl > ll) {\n\t\t\t// we should remove from the end\n\t\t\t// there are more lines in remote\n\t\t\tl1 = ll - 1;\n\t\t\tc1 = getLineMaxColumn(locals[l1]);\n\t\t\tl2 = rl - 1;\n\t\t\tc2 = getLineMaxColumn(remote[l2]._text); // max length\n\t\t\ttext = '';\n\t\t};\n\t} else {\n\t\twhile (lEnd > l1 && l2 > l1){\n\t\t\tif (locals[lEnd] != remote[l2]._text) {\n\t\t\t\t// console.log \"different line\",locals[lEnd],remote[l1]\n\t\t\t\tbreak;\n\t\t\t};\n\t\t\tlEnd -= 1;\n\t\t\tl2 -= 1;\n\t\t};\n\t\t\n\t\t// console.log l1,l2,lEnd,rl,ll\n\t\t// some lines should be removed at end?\n\t\tif (rl > ll && false) { // lEnd == (ll - 1)\n\t\t\tl2 = l2 + 1;\n\t\t\tc2 = 0;\n\t\t\t// get the content that have changed though?\n\t\t\ttext = '';\n\t\t} else {\n\t\t\tc2 = getLineMaxColumn(remote[l2]._text);\n\t\t};\n\t\t\n\t\tif (l1 == l2 && lEnd >= l2) {\n\t\t\tvar txt = remote[l1]._text;\n\t\t\tvar localStr = locals.slice(l1,lEnd + 1).join(\"\\n\");\n\t\t\tvar strdiff = diffString(txt,localStr);\n\t\t\tc1 = strdiff[0];\n\t\t\tc2 = strdiff[1];\n\t\t\ttext = strdiff[2];\n\t\t\t// console.log \"diffed\",strdiff,[txt,localStr]\n\t\t};\n\t};\n\t\n\tvar pos = [l1 + 1,c1 + 1,(c2 - c1),(l2 - l1)];\n\t\n\tif (text == undefined) {\n\t\ttext = this.textInRange([l1 + 1,c1 + 1,1000,(lEnd - l1)]);\n\t};\n\t\n\treturn [pos,text];\n};\n", "/**\n * marked - a markdown parser\n * Copyright (c) 2011-2020, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.marked = factory());\n}(this, (function () { 'use strict';\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _createForOfIteratorHelperLoose(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n return function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n it = o[Symbol.iterator]();\n return it.next.bind(it);\n }\n\n function createCommonjsModule(fn, module) {\n \treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n }\n\n var defaults = createCommonjsModule(function (module) {\n function getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n }\n\n function changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n }\n\n module.exports = {\n defaults: getDefaults(),\n getDefaults: getDefaults,\n changeDefaults: changeDefaults\n };\n });\n var defaults_1 = defaults.defaults;\n var defaults_2 = defaults.getDefaults;\n var defaults_3 = defaults.changeDefaults;\n\n /**\n * Helpers\n */\n var escapeTest = /[&<>\"']/;\n var escapeReplace = /[&<>\"']/g;\n var escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\n var escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\n var escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n var getEscapeReplacement = function getEscapeReplacement(ch) {\n return escapeReplacements[ch];\n };\n\n function escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n }\n\n var unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\n function unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, function (_, n) {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1));\n }\n\n return '';\n });\n }\n\n var caret = /(^|[^\\[])\\^/g;\n\n function edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n var obj = {\n replace: function replace(name, val) {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: function getRegex() {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n }\n\n var nonWordAndColonTest = /[^\\w:]/g;\n var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\n\n function cleanUrl(sanitize, base, href) {\n if (sanitize) {\n var prot;\n\n try {\n prot = decodeURIComponent(unescape(href)).replace(nonWordAndColonTest, '').toLowerCase();\n } catch (e) {\n return null;\n }\n\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n\n return href;\n }\n\n var baseUrls = {};\n var justDomain = /^[^:]+:\\/*[^/]*$/;\n var protocol = /^([^:]+:)[\\s\\S]*$/;\n var domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\n function resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n\n base = baseUrls[' ' + base];\n var relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n }\n\n var noopTest = {\n exec: function noopTest() {}\n };\n\n function merge(obj) {\n var i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n }\n\n function splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n var row = tableRow.replace(/\\|/g, function (match, offset, str) {\n var escaped = false,\n curr = offset;\n\n while (--curr >= 0 && str[curr] === '\\\\') {\n escaped = !escaped;\n }\n\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n var i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) {\n cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n\n return cells;\n } // Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n // /c*$/ is vulnerable to REDOS.\n // invert: Remove suffix of non-c chars instead. Default falsey.\n\n\n function rtrim(str, c, invert) {\n var l = str.length;\n\n if (l === 0) {\n return '';\n } // Length of suffix matching the invert condition.\n\n\n var suffLen = 0; // Step left until we fail to match the invert condition.\n\n while (suffLen < l) {\n var currChar = str.charAt(l - suffLen - 1);\n\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n }\n\n function findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n var l = str.length;\n var level = 0,\n i = 0;\n\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n\n if (level < 0) {\n return i;\n }\n }\n }\n\n return -1;\n }\n\n function checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n }\n\n var helpers = {\n escape: escape,\n unescape: unescape,\n edit: edit,\n cleanUrl: cleanUrl,\n resolveUrl: resolveUrl,\n noopTest: noopTest,\n merge: merge,\n splitCells: splitCells,\n rtrim: rtrim,\n findClosingBracket: findClosingBracket,\n checkSanitizeDeprecation: checkSanitizeDeprecation\n };\n\n var defaults$1 = defaults.defaults;\n var rtrim$1 = helpers.rtrim,\n splitCells$1 = helpers.splitCells,\n _escape = helpers.escape,\n findClosingBracket$1 = helpers.findClosingBracket;\n\n function outputLink(cap, link, raw) {\n var href = link.href;\n var title = link.title ? _escape(link.title) : null;\n var text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw: raw,\n href: href,\n title: title,\n text: text\n };\n } else {\n return {\n type: 'image',\n raw: raw,\n href: href,\n title: title,\n text: _escape(text)\n };\n }\n }\n\n function indentCodeCompensation(raw, text) {\n var matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n var indentToCode = matchIndentToCode[1];\n return text.split('\\n').map(function (node) {\n var matchIndentInNode = node.match(/^\\s+/);\n\n if (matchIndentInNode === null) {\n return node;\n }\n\n var indentInNode = matchIndentInNode[0];\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n }).join('\\n');\n }\n /**\n * Tokenizer\n */\n\n\n var Tokenizer_1 = /*#__PURE__*/function () {\n function Tokenizer(options) {\n this.options = options || defaults$1;\n }\n\n var _proto = Tokenizer.prototype;\n\n _proto.space = function space(src) {\n var cap = this.rules.block.newline.exec(src);\n\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n\n return {\n raw: '\\n'\n };\n }\n };\n\n _proto.code = function code(src, tokens) {\n var cap = this.rules.block.code.exec(src);\n\n if (cap) {\n var lastToken = tokens[tokens.length - 1]; // An indented code block cannot interrupt a paragraph.\n\n if (lastToken && lastToken.type === 'paragraph') {\n return {\n raw: cap[0],\n text: cap[0].trimRight()\n };\n }\n\n var text = cap[0].replace(/^ {4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic ? rtrim$1(text, '\\n') : text\n };\n }\n };\n\n _proto.fences = function fences(src) {\n var cap = this.rules.block.fences.exec(src);\n\n if (cap) {\n var raw = cap[0];\n var text = indentCodeCompensation(raw, cap[3] || '');\n return {\n type: 'code',\n raw: raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text: text\n };\n }\n };\n\n _proto.heading = function heading(src) {\n var cap = this.rules.block.heading.exec(src);\n\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: cap[2]\n };\n }\n };\n\n _proto.nptable = function nptable(src) {\n var cap = this.rules.block.nptable.exec(src);\n\n if (cap) {\n var item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n var l = item.align.length;\n var i;\n\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n };\n\n _proto.hr = function hr(src) {\n var cap = this.rules.block.hr.exec(src);\n\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n };\n\n _proto.blockquote = function blockquote(src) {\n var cap = this.rules.block.blockquote.exec(src);\n\n if (cap) {\n var text = cap[0].replace(/^ *> ?/gm, '');\n return {\n type: 'blockquote',\n raw: cap[0],\n text: text\n };\n }\n };\n\n _proto.list = function list(src) {\n var cap = this.rules.block.list.exec(src);\n\n if (cap) {\n var raw = cap[0];\n var bull = cap[2];\n var isordered = bull.length > 1;\n var isparen = bull[bull.length - 1] === ')';\n var list = {\n type: 'list',\n raw: raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n }; // Get each top-level item.\n\n var itemMatch = cap[0].match(this.rules.block.item);\n var next = false,\n item,\n space,\n b,\n addBack,\n loose,\n istask,\n ischecked;\n var l = itemMatch.length;\n\n for (var i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item; // Remove the list item's bullet\n // so it is seen as the next token.\n\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) */, ''); // Outdent whatever the\n // list item contains. Hacky.\n\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') : item.replace(/^ {1,4}/gm, '');\n } // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n\n\n if (i !== l - 1) {\n b = this.rules.block.bullet.exec(itemMatch[i + 1])[0];\n\n if (isordered ? b.length === 1 || !isparen && b[b.length - 1] === ')' : b.length > 1 || this.options.smartLists && b !== bull) {\n addBack = itemMatch.slice(i + 1).join('\\n');\n list.raw = list.raw.substring(0, list.raw.length - addBack.length);\n i = l - 1;\n }\n } // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n\n\n loose = next || /\\n\\n(?!\\s*$)/.test(item);\n\n if (i !== l - 1) {\n next = item.charAt(item.length - 1) === '\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n } // Check for task list items\n\n\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n\n list.items.push({\n type: 'list_item',\n raw: raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n };\n\n _proto.html = function html(src) {\n var cap = this.rules.block.html.exec(src);\n\n if (cap) {\n return {\n type: this.options.sanitize ? 'paragraph' : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : _escape(cap[0]) : cap[0]\n };\n }\n };\n\n _proto.def = function def(src) {\n var cap = this.rules.block.def.exec(src);\n\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n var tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag: tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n };\n\n _proto.table = function table(src) {\n var cap = this.rules.block.table.exec(src);\n\n if (cap) {\n var item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n var l = item.align.length;\n var i;\n\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''), item.header.length);\n }\n\n return item;\n }\n }\n };\n\n _proto.lheading = function lheading(src) {\n var cap = this.rules.block.lheading.exec(src);\n\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n };\n\n _proto.paragraph = function paragraph(src) {\n var cap = this.rules.block.paragraph.exec(src);\n\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n' ? cap[1].slice(0, -1) : cap[1]\n };\n }\n };\n\n _proto.text = function text(src, tokens) {\n var cap = this.rules.block.text.exec(src);\n\n if (cap) {\n var lastToken = tokens[tokens.length - 1];\n\n if (lastToken && lastToken.type === 'text') {\n return {\n raw: cap[0],\n text: cap[0]\n };\n }\n\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n };\n\n _proto.escape = function escape(src) {\n var cap = this.rules.inline.escape.exec(src);\n\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: _escape(cap[1])\n };\n }\n };\n\n _proto.tag = function tag(src, inLink, inRawBlock) {\n var cap = this.rules.inline.tag.exec(src);\n\n if (cap) {\n if (!inLink && /^<a /i.test(cap[0])) {\n inLink = true;\n } else if (inLink && /^<\\/a>/i.test(cap[0])) {\n inLink = false;\n }\n\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize ? 'text' : 'html',\n raw: cap[0],\n inLink: inLink,\n inRawBlock: inRawBlock,\n text: this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : _escape(cap[0]) : cap[0]\n };\n }\n };\n\n _proto.link = function link(src) {\n var cap = this.rules.inline.link.exec(src);\n\n if (cap) {\n var lastParenIndex = findClosingBracket$1(cap[2], '()');\n\n if (lastParenIndex > -1) {\n var start = cap[0].indexOf('!') === 0 ? 5 : 4;\n var linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n\n var href = cap[2];\n var title = '';\n\n if (this.options.pedantic) {\n var link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n } else {\n title = '';\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim().replace(/^<([\\s\\S]*)>$/, '$1');\n var token = outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n return token;\n }\n };\n\n _proto.reflink = function reflink(src, links) {\n var cap;\n\n if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {\n var link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n\n if (!link || !link.href) {\n var text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text: text\n };\n }\n\n var token = outputLink(cap, link, cap[0]);\n return token;\n }\n };\n\n _proto.strong = function strong(src, maskedSrc, prevChar) {\n if (prevChar === void 0) {\n prevChar = '';\n }\n\n var match = this.rules.inline.strong.start.exec(src);\n\n if (match && (!match[1] || match[1] && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n maskedSrc = maskedSrc.slice(-1 * src.length);\n var endReg = match[0] === '**' ? this.rules.inline.strong.endAst : this.rules.inline.strong.endUnd;\n endReg.lastIndex = 0;\n var cap;\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n cap = this.rules.inline.strong.middle.exec(maskedSrc.slice(0, match.index + 3));\n\n if (cap) {\n return {\n type: 'strong',\n raw: src.slice(0, cap[0].length),\n text: src.slice(2, cap[0].length - 2)\n };\n }\n }\n }\n };\n\n _proto.em = function em(src, maskedSrc, prevChar) {\n if (prevChar === void 0) {\n prevChar = '';\n }\n\n var match = this.rules.inline.em.start.exec(src);\n\n if (match && (!match[1] || match[1] && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n maskedSrc = maskedSrc.slice(-1 * src.length);\n var endReg = match[0] === '*' ? this.rules.inline.em.endAst : this.rules.inline.em.endUnd;\n endReg.lastIndex = 0;\n var cap;\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n cap = this.rules.inline.em.middle.exec(maskedSrc.slice(0, match.index + 2));\n\n if (cap) {\n return {\n type: 'em',\n raw: src.slice(0, cap[0].length),\n text: src.slice(1, cap[0].length - 1)\n };\n }\n }\n }\n };\n\n _proto.codespan = function codespan(src) {\n var cap = this.rules.inline.code.exec(src);\n\n if (cap) {\n var text = cap[2].replace(/\\n/g, ' ');\n var hasNonSpaceChars = /[^ ]/.test(text);\n var hasSpaceCharsOnBothEnds = text.startsWith(' ') && text.endsWith(' ');\n\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n\n text = _escape(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text: text\n };\n }\n };\n\n _proto.br = function br(src) {\n var cap = this.rules.inline.br.exec(src);\n\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n };\n\n _proto.del = function del(src) {\n var cap = this.rules.inline.del.exec(src);\n\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[1]\n };\n }\n };\n\n _proto.autolink = function autolink(src, mangle) {\n var cap = this.rules.inline.autolink.exec(src);\n\n if (cap) {\n var text, href;\n\n if (cap[2] === '@') {\n text = _escape(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = _escape(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text: text,\n href: href,\n tokens: [{\n type: 'text',\n raw: text,\n text: text\n }]\n };\n }\n };\n\n _proto.url = function url(src, mangle) {\n var cap;\n\n if (cap = this.rules.inline.url.exec(src)) {\n var text, href;\n\n if (cap[2] === '@') {\n text = _escape(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n var prevCapZero;\n\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n\n text = _escape(cap[0]);\n\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text: text,\n href: href,\n tokens: [{\n type: 'text',\n raw: text,\n text: text\n }]\n };\n }\n };\n\n _proto.inlineText = function inlineText(src, inRawBlock, smartypants) {\n var cap = this.rules.inline.text.exec(src);\n\n if (cap) {\n var text;\n\n if (inRawBlock) {\n text = this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : _escape(cap[0]) : cap[0];\n } else {\n text = _escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n\n return {\n type: 'text',\n raw: cap[0],\n text: text\n };\n }\n };\n\n return Tokenizer;\n }();\n\n var noopTest$1 = helpers.noopTest,\n edit$1 = helpers.edit,\n merge$1 = helpers.merge;\n /**\n * Block-Level Grammar\n */\n\n var block = {\n newline: /^\\n+/,\n code: /^( {4}[^\\n]+\\n*)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6}) +([^\\n]*?)(?: +#+)? *(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?!\\1bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?\\\\?>\\\\n*' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?>\\\\n*' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\\\\n*' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest$1,\n table: noopTest$1,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\\n]+)*)/,\n text: /^[^\\n]+/\n };\n block._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\n block._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\n block.def = edit$1(block.def).replace('label', block._label).replace('title', block._title).getRegex();\n block.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\n block.item = /^( *)(bull) ?[^\\n]*(?:\\n(?!\\1bull ?)[^\\n]*)*/;\n block.item = edit$1(block.item, 'gm').replace(/bull/g, block.bullet).getRegex();\n block.list = edit$1(block.list).replace(/bull/g, block.bullet).replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))').replace('def', '\\\\n+(?=' + block.def.source + ')').getRegex();\n block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + '|track|ul';\n block._comment = /<!--(?!-?>)[\\s\\S]*?-->/;\n block.html = edit$1(block.html, 'i').replace('comment', block._comment).replace('tag', block._tag).replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex();\n block.paragraph = edit$1(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n block.blockquote = edit$1(block.blockquote).replace('paragraph', block.paragraph).getRegex();\n /**\n * Normal Block Grammar\n */\n\n block.normal = merge$1({}, block);\n /**\n * GFM Block Grammar\n */\n\n block.gfm = merge$1({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' *([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)',\n // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' *\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n\n });\n block.gfm.nptable = edit$1(block.gfm.nptable).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('blockquote', ' {0,3}>').replace('code', ' {4}[^\\\\n]').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n block.gfm.table = edit$1(block.gfm.table).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('blockquote', ' {0,3}>').replace('code', ' {4}[^\\\\n]').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n /**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\n block.pedantic = merge$1({}, block.normal, {\n html: edit$1('^ *(?:comment *(?:\\\\n|\\\\s*$)' + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))').replace('comment', block._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b').getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^ *(#{1,6}) *([^\\n]+?) *(?:#+ *)?(?:\\n+|$)/,\n fences: noopTest$1,\n // fences not supported\n paragraph: edit$1(block.normal._paragraph).replace('hr', block.hr).replace('heading', ' *#{1,6} *[^\\n]').replace('lheading', block.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex()\n });\n /**\n * Inline-Level Grammar\n */\n\n var inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest$1,\n tag: '^comment' + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>',\n // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n strong: {\n start: /^(?:(\\*\\*(?=[*punctuation]))|\\*\\*)(?![\\s])|__/,\n // (1) returns if starts w/ punctuation\n middle: /^\\*\\*(?:(?:(?!overlapSkip)(?:[^*]|\\\\\\*)|overlapSkip)|\\*(?:(?!overlapSkip)(?:[^*]|\\\\\\*)|overlapSkip)*?\\*)+?\\*\\*$|^__(?![\\s])((?:(?:(?!overlapSkip)(?:[^_]|\\\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\\\_)|overlapSkip)*?_)+?)__$/,\n endAst: /[^punctuation\\s]\\*\\*(?!\\*)|[punctuation]\\*\\*(?!\\*)(?:(?=[punctuation\\s]|$))/,\n // last char can't be punct, or final * must also be followed by punct (or endline)\n endUnd: /[^\\s]__(?!_)(?:(?=[punctuation\\s])|$)/ // last char can't be a space, and final _ must preceed punct or \\s (or endline)\n\n },\n em: {\n start: /^(?:(\\*(?=[punctuation]))|\\*)(?![*\\s])|_/,\n // (1) returns if starts w/ punctuation\n middle: /^\\*(?:(?:(?!overlapSkip)(?:[^*]|\\\\\\*)|overlapSkip)|\\*(?:(?!overlapSkip)(?:[^*]|\\\\\\*)|overlapSkip)*?\\*)+?\\*$|^_(?![_\\s])(?:(?:(?!overlapSkip)(?:[^_]|\\\\_)|overlapSkip)|_(?:(?!overlapSkip)(?:[^_]|\\\\_)|overlapSkip)*?_)+?_$/,\n endAst: /[^punctuation\\s]\\*(?!\\*)|[punctuation]\\*(?!\\*)(?:(?=[punctuation\\s]|$))/,\n // last char can't be punct, or final * must also be followed by punct (or endline)\n endUnd: /[^\\s]_(?!_)(?:(?=[punctuation\\s])|$)/ // last char can't be a space, and final _ must preceed punct or \\s (or endline)\n\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest$1,\n text: /^(`+|[^`])(?:[\\s\\S]*?(?:(?=[\\\\<!\\[`*]|\\b_|$)|[^ ](?= {2,}\\n))|(?= {2,}\\n))/,\n punctuation: /^([\\s*punctuation])/\n }; // list of punctuation marks from common mark spec\n // without * and _ to workaround cases with double emphasis\n\n inline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\n inline.punctuation = edit$1(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex(); // sequences em should skip over [title](link), `code`, <html>\n\n inline._blockSkip = '\\\\[[^\\\\]]*?\\\\]\\\\([^\\\\)]*?\\\\)|`[^`]*?`|<[^>]*?>';\n inline._overlapSkip = '__[^_]*?__|\\\\*\\\\*\\\\[^\\\\*\\\\]*?\\\\*\\\\*';\n inline.em.start = edit$1(inline.em.start).replace(/punctuation/g, inline._punctuation).getRegex();\n inline.em.middle = edit$1(inline.em.middle).replace(/punctuation/g, inline._punctuation).replace(/overlapSkip/g, inline._overlapSkip).getRegex();\n inline.em.endAst = edit$1(inline.em.endAst, 'g').replace(/punctuation/g, inline._punctuation).getRegex();\n inline.em.endUnd = edit$1(inline.em.endUnd, 'g').replace(/punctuation/g, inline._punctuation).getRegex();\n inline.strong.start = edit$1(inline.strong.start).replace(/punctuation/g, inline._punctuation).getRegex();\n inline.strong.middle = edit$1(inline.strong.middle).replace(/punctuation/g, inline._punctuation).replace(/blockSkip/g, inline._blockSkip).getRegex();\n inline.strong.endAst = edit$1(inline.strong.endAst, 'g').replace(/punctuation/g, inline._punctuation).getRegex();\n inline.strong.endUnd = edit$1(inline.strong.endUnd, 'g').replace(/punctuation/g, inline._punctuation).getRegex();\n inline.blockSkip = edit$1(inline._blockSkip, 'g').getRegex();\n inline.overlapSkip = edit$1(inline._overlapSkip, 'g').getRegex();\n inline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\n inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\n inline.autolink = edit$1(inline.autolink).replace('scheme', inline._scheme).replace('email', inline._email).getRegex();\n inline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n inline.tag = edit$1(inline.tag).replace('comment', block._comment).replace('attribute', inline._attribute).getRegex();\n inline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\n inline._href = /<(?:\\\\[<>]?|[^\\s<>\\\\])*>|[^\\s\\x00-\\x1f]*/;\n inline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n inline.link = edit$1(inline.link).replace('label', inline._label).replace('href', inline._href).replace('title', inline._title).getRegex();\n inline.reflink = edit$1(inline.reflink).replace('label', inline._label).getRegex();\n inline.reflinkSearch = edit$1(inline.reflinkSearch, 'g').replace('reflink', inline.reflink).replace('nolink', inline.nolink).getRegex();\n /**\n * Normal Inline Grammar\n */\n\n inline.normal = merge$1({}, inline);\n /**\n * Pedantic Inline Grammar\n */\n\n inline.pedantic = merge$1({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit$1(/^!?\\[(label)\\]\\((.*?)\\)/).replace('label', inline._label).getRegex(),\n reflink: edit$1(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace('label', inline._label).getRegex()\n });\n /**\n * GFM Inline Grammar\n */\n\n inline.gfm = merge$1({}, inline.normal, {\n escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^~+(?=\\S)([\\s\\S]*?\\S)~+/,\n text: /^(`+|[^`])(?:[\\s\\S]*?(?:(?=[\\\\<!\\[`*~]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?= {2,}\\n|[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n });\n inline.gfm.url = edit$1(inline.gfm.url, 'i').replace('email', inline.gfm._extended_email).getRegex();\n /**\n * GFM + Line Breaks Inline Grammar\n */\n\n inline.breaks = merge$1({}, inline.gfm, {\n br: edit$1(inline.br).replace('{2,}', '*').getRegex(),\n text: edit$1(inline.gfm.text).replace('\\\\b_', '\\\\b_| {2,}\\\\n').replace(/\\{2,\\}/g, '*').getRegex()\n });\n var rules = {\n block: block,\n inline: inline\n };\n\n var defaults$2 = defaults.defaults;\n var block$1 = rules.block,\n inline$1 = rules.inline;\n /**\n * smartypants text replacement\n */\n\n function smartypants(text) {\n return text // em-dashes\n .replace(/---/g, \"\\u2014\") // en-dashes\n .replace(/--/g, \"\\u2013\") // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, \"$1\\u2018\") // closing singles & apostrophes\n .replace(/'/g, \"\\u2019\") // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, \"$1\\u201C\") // closing doubles\n .replace(/\"/g, \"\\u201D\") // ellipses\n .replace(/\\.{3}/g, \"\\u2026\");\n }\n /**\n * mangle email addresses\n */\n\n\n function mangle(text) {\n var out = '',\n i,\n ch;\n var l = text.length;\n\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n\n out += '&#' + ch + ';';\n }\n\n return out;\n }\n /**\n * Block Lexer\n */\n\n\n var Lexer_1 = /*#__PURE__*/function () {\n function Lexer(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults$2;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer_1();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n var rules = {\n block: block$1.normal,\n inline: inline$1.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block$1.pedantic;\n rules.inline = inline$1.pedantic;\n } else if (this.options.gfm) {\n rules.block = block$1.gfm;\n\n if (this.options.breaks) {\n rules.inline = inline$1.breaks;\n } else {\n rules.inline = inline$1.gfm;\n }\n }\n\n this.tokenizer.rules = rules;\n }\n /**\n * Expose Rules\n */\n\n\n /**\n * Static Lex Method\n */\n Lexer.lex = function lex(src, options) {\n var lexer = new Lexer(options);\n return lexer.lex(src);\n }\n /**\n * Preprocessing\n */\n ;\n\n var _proto = Lexer.prototype;\n\n _proto.lex = function lex(src) {\n src = src.replace(/\\r\\n|\\r/g, '\\n').replace(/\\t/g, ' ');\n this.blockTokens(src, this.tokens, true);\n this.inline(this.tokens);\n return this.tokens;\n }\n /**\n * Lexing\n */\n ;\n\n _proto.blockTokens = function blockTokens(src, tokens, top) {\n if (tokens === void 0) {\n tokens = [];\n }\n\n if (top === void 0) {\n top = true;\n }\n\n src = src.replace(/^ +$/gm, '');\n var token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n\n if (token.type) {\n tokens.push(token);\n }\n\n continue;\n } // code\n\n\n if (token = this.tokenizer.code(src, tokens)) {\n src = src.substring(token.raw.length);\n\n if (token.type) {\n tokens.push(token);\n } else {\n lastToken = tokens[tokens.length - 1];\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n }\n\n continue;\n } // fences\n\n\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // heading\n\n\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // table no leading pipe (gfm)\n\n\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // hr\n\n\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // blockquote\n\n\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n } // list\n\n\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n\n tokens.push(token);\n continue;\n } // html\n\n\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // def\n\n\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n\n continue;\n } // table (gfm)\n\n\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // lheading\n\n\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // top-level paragraph\n\n\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // text\n\n\n if (token = this.tokenizer.text(src, tokens)) {\n src = src.substring(token.raw.length);\n\n if (token.type) {\n tokens.push(token);\n } else {\n lastToken = tokens[tokens.length - 1];\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n }\n\n continue;\n }\n\n if (src) {\n var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n };\n\n _proto.inline = function inline(tokens) {\n var i, j, k, l2, row, token;\n var l = tokens.length;\n\n for (i = 0; i < l; i++) {\n token = tokens[i];\n\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading':\n {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n\n case 'table':\n {\n token.tokens = {\n header: [],\n cells: []\n }; // header\n\n l2 = token.header.length;\n\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n } // cells\n\n\n l2 = token.cells.length;\n\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n\n case 'blockquote':\n {\n this.inline(token.tokens);\n break;\n }\n\n case 'list':\n {\n l2 = token.items.length;\n\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n\n break;\n }\n }\n }\n\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n ;\n\n _proto.inlineTokens = function inlineTokens(src, tokens, inLink, inRawBlock, prevChar) {\n if (tokens === void 0) {\n tokens = [];\n }\n\n if (inLink === void 0) {\n inLink = false;\n }\n\n if (inRawBlock === void 0) {\n inRawBlock = false;\n }\n\n if (prevChar === void 0) {\n prevChar = '';\n }\n\n var token; // String with links masked to avoid interference with em and strong\n\n var maskedSrc = src;\n var match; // Mask out reflinks\n\n if (this.tokens.links) {\n var links = Object.keys(this.tokens.links);\n\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n } // Mask out other blocks\n\n\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n while (src) {\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // tag\n\n\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n tokens.push(token);\n continue;\n } // link\n\n\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n\n tokens.push(token);\n continue;\n } // reflink, nolink\n\n\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n\n tokens.push(token);\n continue;\n } // strong\n\n\n if (token = this.tokenizer.strong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n } // em\n\n\n if (token = this.tokenizer.em(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n } // code\n\n\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // br\n\n\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // del (gfm)\n\n\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n } // autolink\n\n\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // url (gfm)\n\n\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // text\n\n\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n prevChar = token.raw.slice(-1);\n tokens.push(token);\n continue;\n }\n\n if (src) {\n var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n };\n\n _createClass(Lexer, null, [{\n key: \"rules\",\n get: function get() {\n return {\n block: block$1,\n inline: inline$1\n };\n }\n }]);\n\n return Lexer;\n }();\n\n var defaults$3 = defaults.defaults;\n var cleanUrl$1 = helpers.cleanUrl,\n escape$1 = helpers.escape;\n /**\n * Renderer\n */\n\n var Renderer_1 = /*#__PURE__*/function () {\n function Renderer(options) {\n this.options = options || defaults$3;\n }\n\n var _proto = Renderer.prototype;\n\n _proto.code = function code(_code, infostring, escaped) {\n var lang = (infostring || '').match(/\\S*/)[0];\n\n if (this.options.highlight) {\n var out = this.options.highlight(_code, lang);\n\n if (out != null && out !== _code) {\n escaped = true;\n _code = out;\n }\n }\n\n if (!lang) {\n return '<pre><code>' + (escaped ? _code : escape$1(_code, true)) + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"' + this.options.langPrefix + escape$1(lang, true) + '\">' + (escaped ? _code : escape$1(_code, true)) + '</code></pre>\\n';\n };\n\n _proto.blockquote = function blockquote(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n };\n\n _proto.html = function html(_html) {\n return _html;\n };\n\n _proto.heading = function heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h' + level + ' id=\"' + this.options.headerPrefix + slugger.slug(raw) + '\">' + text + '</h' + level + '>\\n';\n } // ignore IDs\n\n\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n };\n\n _proto.hr = function hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n };\n\n _proto.list = function list(body, ordered, start) {\n var type = ordered ? 'ol' : 'ul',\n startatt = ordered && start !== 1 ? ' start=\"' + start + '\"' : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n };\n\n _proto.listitem = function listitem(text) {\n return '<li>' + text + '</li>\\n';\n };\n\n _proto.checkbox = function checkbox(checked) {\n return '<input ' + (checked ? 'checked=\"\" ' : '') + 'disabled=\"\" type=\"checkbox\"' + (this.options.xhtml ? ' /' : '') + '> ';\n };\n\n _proto.paragraph = function paragraph(text) {\n return '<p>' + text + '</p>\\n';\n };\n\n _proto.table = function table(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n return '<table>\\n' + '<thead>\\n' + header + '</thead>\\n' + body + '</table>\\n';\n };\n\n _proto.tablerow = function tablerow(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n };\n\n _proto.tablecell = function tablecell(content, flags) {\n var type = flags.header ? 'th' : 'td';\n var tag = flags.align ? '<' + type + ' align=\"' + flags.align + '\">' : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n } // span level renderer\n ;\n\n _proto.strong = function strong(text) {\n return '<strong>' + text + '</strong>';\n };\n\n _proto.em = function em(text) {\n return '<em>' + text + '</em>';\n };\n\n _proto.codespan = function codespan(text) {\n return '<code>' + text + '</code>';\n };\n\n _proto.br = function br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n };\n\n _proto.del = function del(text) {\n return '<del>' + text + '</del>';\n };\n\n _proto.link = function link(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n\n if (href === null) {\n return text;\n }\n\n var out = '<a href=\"' + escape$1(href) + '\"';\n\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n\n out += '>' + text + '</a>';\n return out;\n };\n\n _proto.image = function image(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n\n if (href === null) {\n return text;\n }\n\n var out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n\n out += this.options.xhtml ? '/>' : '>';\n return out;\n };\n\n _proto.text = function text(_text) {\n return _text;\n };\n\n return Renderer;\n }();\n\n /**\n * TextRenderer\n * returns only the textual part of the token\n */\n var TextRenderer_1 = /*#__PURE__*/function () {\n function TextRenderer() {}\n\n var _proto = TextRenderer.prototype;\n\n // no need for block level renderers\n _proto.strong = function strong(text) {\n return text;\n };\n\n _proto.em = function em(text) {\n return text;\n };\n\n _proto.codespan = function codespan(text) {\n return text;\n };\n\n _proto.del = function del(text) {\n return text;\n };\n\n _proto.html = function html(text) {\n return text;\n };\n\n _proto.text = function text(_text) {\n return _text;\n };\n\n _proto.link = function link(href, title, text) {\n return '' + text;\n };\n\n _proto.image = function image(href, title, text) {\n return '' + text;\n };\n\n _proto.br = function br() {\n return '';\n };\n\n return TextRenderer;\n }();\n\n /**\n * Slugger generates header id\n */\n var Slugger_1 = /*#__PURE__*/function () {\n function Slugger() {\n this.seen = {};\n }\n /**\n * Convert string to unique id\n */\n\n\n var _proto = Slugger.prototype;\n\n _proto.slug = function slug(value) {\n var slug = value.toLowerCase().trim() // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '') // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '').replace(/\\s/g, '-');\n\n if (this.seen.hasOwnProperty(slug)) {\n var originalSlug = slug;\n\n do {\n this.seen[originalSlug]++;\n slug = originalSlug + '-' + this.seen[originalSlug];\n } while (this.seen.hasOwnProperty(slug));\n }\n\n this.seen[slug] = 0;\n return slug;\n };\n\n return Slugger;\n }();\n\n var defaults$4 = defaults.defaults;\n var unescape$1 = helpers.unescape;\n /**\n * Parsing & Compiling\n */\n\n var Parser_1 = /*#__PURE__*/function () {\n function Parser(options) {\n this.options = options || defaults$4;\n this.options.renderer = this.options.renderer || new Renderer_1();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer_1();\n this.slugger = new Slugger_1();\n }\n /**\n * Static Parse Method\n */\n\n\n Parser.parse = function parse(tokens, options) {\n var parser = new Parser(options);\n return parser.parse(tokens);\n }\n /**\n * Parse Loop\n */\n ;\n\n var _proto = Parser.prototype;\n\n _proto.parse = function parse(tokens, top) {\n if (top === void 0) {\n top = true;\n }\n\n var out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n var l = tokens.length;\n\n for (i = 0; i < l; i++) {\n token = tokens[i];\n\n switch (token.type) {\n case 'space':\n {\n continue;\n }\n\n case 'hr':\n {\n out += this.renderer.hr();\n continue;\n }\n\n case 'heading':\n {\n out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape$1(this.parseInline(token.tokens, this.textRenderer)), this.slugger);\n continue;\n }\n\n case 'code':\n {\n out += this.renderer.code(token.text, token.lang, token.escaped);\n continue;\n }\n\n case 'table':\n {\n header = ''; // header\n\n cell = '';\n l2 = token.header.length;\n\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(this.parseInline(token.tokens.header[j]), {\n header: true,\n align: token.align[j]\n });\n }\n\n header += this.renderer.tablerow(cell);\n body = '';\n l2 = token.cells.length;\n\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n cell = '';\n l3 = row.length;\n\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(this.parseInline(row[k]), {\n header: false,\n align: token.align[k]\n });\n }\n\n body += this.renderer.tablerow(cell);\n }\n\n out += this.renderer.table(header, body);\n continue;\n }\n\n case 'blockquote':\n {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n\n case 'list':\n {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n body = '';\n\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n itemBody = '';\n\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n\n case 'html':\n {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n\n case 'paragraph':\n {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n\n case 'text':\n {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n\n default:\n {\n var errMsg = 'Token with \"' + token.type + '\" type was not found.';\n\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n ;\n\n _proto.parseInline = function parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n var out = '',\n i,\n token;\n var l = tokens.length;\n\n for (i = 0; i < l; i++) {\n token = tokens[i];\n\n switch (token.type) {\n case 'escape':\n {\n out += renderer.text(token.text);\n break;\n }\n\n case 'html':\n {\n out += renderer.html(token.text);\n break;\n }\n\n case 'link':\n {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n\n case 'image':\n {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n\n case 'strong':\n {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n\n case 'em':\n {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n\n case 'codespan':\n {\n out += renderer.codespan(token.text);\n break;\n }\n\n case 'br':\n {\n out += renderer.br();\n break;\n }\n\n case 'del':\n {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n\n case 'text':\n {\n out += renderer.text(token.text);\n break;\n }\n\n default:\n {\n var errMsg = 'Token with \"' + token.type + '\" type was not found.';\n\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n };\n\n return Parser;\n }();\n\n var merge$2 = helpers.merge,\n checkSanitizeDeprecation$1 = helpers.checkSanitizeDeprecation,\n escape$2 = helpers.escape;\n var getDefaults = defaults.getDefaults,\n changeDefaults = defaults.changeDefaults,\n defaults$5 = defaults.defaults;\n /**\n * Marked\n */\n\n function marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n if (callback) {\n var highlight = opt.highlight;\n var tokens;\n\n try {\n tokens = Lexer_1.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n var done = function done(err) {\n var out;\n\n if (!err) {\n try {\n out = Parser_1.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n return err ? callback(err) : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n if (!tokens.length) return done();\n var pending = 0;\n marked.walkTokens(tokens, function (token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(function () {\n highlight(token.text, token.lang, function (err, code) {\n if (err) {\n return done(err);\n }\n\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n var _tokens = Lexer_1.lex(src, opt);\n\n if (opt.walkTokens) {\n marked.walkTokens(_tokens, opt.walkTokens);\n }\n\n return Parser_1.parse(_tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>' + escape$2(e.message + '', true) + '</pre>';\n }\n\n throw e;\n }\n }\n /**\n * Options\n */\n\n\n marked.options = marked.setOptions = function (opt) {\n merge$2(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n };\n\n marked.getDefaults = getDefaults;\n marked.defaults = defaults$5;\n /**\n * Use Extension\n */\n\n marked.use = function (extension) {\n var opts = merge$2({}, extension);\n\n if (extension.renderer) {\n (function () {\n var renderer = marked.defaults.renderer || new Renderer_1();\n\n var _loop = function _loop(prop) {\n var prevRenderer = renderer[prop];\n\n renderer[prop] = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var ret = extension.renderer[prop].apply(renderer, args);\n\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n\n return ret;\n };\n };\n\n for (var prop in extension.renderer) {\n _loop(prop);\n }\n\n opts.renderer = renderer;\n })();\n }\n\n if (extension.tokenizer) {\n (function () {\n var tokenizer = marked.defaults.tokenizer || new Tokenizer_1();\n\n var _loop2 = function _loop2(prop) {\n var prevTokenizer = tokenizer[prop];\n\n tokenizer[prop] = function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var ret = extension.tokenizer[prop].apply(tokenizer, args);\n\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n\n return ret;\n };\n };\n\n for (var prop in extension.tokenizer) {\n _loop2(prop);\n }\n\n opts.tokenizer = tokenizer;\n })();\n }\n\n if (extension.walkTokens) {\n var walkTokens = marked.defaults.walkTokens;\n\n opts.walkTokens = function (token) {\n extension.walkTokens(token);\n\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n\n marked.setOptions(opts);\n };\n /**\n * Run callback for every token\n */\n\n\n marked.walkTokens = function (tokens, callback) {\n for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {\n var token = _step.value;\n callback(token);\n\n switch (token.type) {\n case 'table':\n {\n for (var _iterator2 = _createForOfIteratorHelperLoose(token.tokens.header), _step2; !(_step2 = _iterator2()).done;) {\n var cell = _step2.value;\n marked.walkTokens(cell, callback);\n }\n\n for (var _iterator3 = _createForOfIteratorHelperLoose(token.tokens.cells), _step3; !(_step3 = _iterator3()).done;) {\n var row = _step3.value;\n\n for (var _iterator4 = _createForOfIteratorHelperLoose(row), _step4; !(_step4 = _iterator4()).done;) {\n var _cell = _step4.value;\n marked.walkTokens(_cell, callback);\n }\n }\n\n break;\n }\n\n case 'list':\n {\n marked.walkTokens(token.items, callback);\n break;\n }\n\n default:\n {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n };\n /**\n * Expose\n */\n\n\n marked.Parser = Parser_1;\n marked.parser = Parser_1.parse;\n marked.Renderer = Renderer_1;\n marked.TextRenderer = TextRenderer_1;\n marked.Lexer = Lexer_1;\n marked.lexer = Lexer_1.lex;\n marked.Tokenizer = Tokenizer_1;\n marked.Slugger = Slugger_1;\n marked.parse = marked;\n var marked_1 = marked;\n\n return marked_1;\n\n})));\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n\nvar Theme = exports.Theme = {\n\tbase: 'vs-dark', // can also be vs-dark or hc-black\n\tinherit: false, // can also be false to completely replace the builtin rules\n\t\n\tnamed: {\n\t\tbackground: '282f33',\n\t\tforeground: 'D4D4D4',\n\t\tkeyword: 'ea9b80',\n\t\toperator: 'ea9b80',\n\t\t// string: 'B7DE95'\n\t\tnumber: '598DA6',\n\t\tbool: '598DA6',\n\t\tsymbol: 'B7DE95',\n\t\tregex: 'FD9231',\n\t\tregexgroup: 'FFB26D',\n\t\tcomment: '5D6E7A',\n\t\tconstant: 'BD9AC2',\n\t\tidentifier: 'd4d4d4',\n\t\txml: 'D9BB72',\n\t\txmlref: 'd2845f',\n\t\tdecl: '75AAFF',\n\t\tkey: 'a7c9de',\n\t\tlineNumber: '3b4750',\n\t\tagentCursor: '89b0fc',\n\t\tlocalCursor: 'ffe796',\n\t\tlvar: 'dcdbc7',\n\t\tlimport: '91b7ea',\n\t\t\n\t\tstring: '72b9da', // a0c6ca 7da4b7\n\t\ttagbase: 'f1d787', // c3b17e\n\t\ttagname: 'f1d787',\n\t\ttagevent: 'f1d787',\n\t\ttagstr: 'a0c6ca',\n\t\ttagop: 'd17e53',\n\t\ttagbracket: '8e7f54',\n\t\ttagattr: 'D9BB73',\n\t\ttagmodifier: 'f6d18d',\n\t\ttaglistener: 'f6d18d',\n\t\ttagref: 'f1d787',\n\t\tspecial: 'ffdb59',\n\t\t\n\t\timbasel: 'e0ade3',\n\t\timbaselbracket: 'e9e19b'\n\t\n\t\n\t// tag str #a0c6ca\n\t// tag eq #d17e53\n\t// tag #c3b17e\n\t},\n\t\n\ttoMonaco: function() {\n\t\tvar json = JSON.stringify(this);\n\t\tvar named = this.named;\n\t\tjson = json.replace(/@(\\w+)/g,function(m,key) {\n\t\t\treturn named[key] || m;\n\t\t});\n\t\treturn JSON.parse(json);\n\t},\n\t\n\ttoTheme: function() {\n\t\tvar v_, $1;\n\t\tvar theme = this.toMonaco();\n\t\tvar colors = theme.tokenColors = [];\n\t\tfor (let i = 0, items = iter$(theme.rules), len = items.length, rule; i < len; i++) {\n\t\t\trule = items[i];\n\t\t\tif (!rule.foreground) { continue; };\n\t\t\t\n\t\t\tlet item = {\n\t\t\t\tname: rule.token,\n\t\t\t\tscope: rule.token,\n\t\t\t\tsettings: {\n\t\t\t\t\tforeground: '#' + rule.foreground\n\t\t\t\t}\n\t\t\t};\n\t\t\tcolors.push(item);\n\t\t};\n\t\t\n\t\t(((v_ = theme.rules),delete theme.rules, v_));\n\t\t((($1 = theme.colors),delete theme.colors, $1));\n\t\ttheme.type = 'dark';\n\t\ttheme.name = \"Imba Dark\";\n\t\treturn theme;\n\t},\n\t\n\trules: [\n\t\t{token: '',foreground: '@foreground',background: '@background'},\n\t\t{token: 'invalid',foreground: 'f44747'},\n\t\t{token: 'emphasis',fontStyle: 'italic'},\n\t\t{token: 'strong',fontStyle: 'bold'},\n\t\t\n\t\t{token: 'variable',foreground: '74B0DF'},\n\t\t{token: 'variable.predefined',foreground: '@keyword'},\n\t\t{token: 'variable.parameter',foreground: '9CDCFE'},\n\t\t{token: 'identifier',foreground: '@identifier'},\n\t\t{token: 'identifier..imba',foreground: 'a7c6e7'},\n\t\t{token: \"identifier.imba\",foreground: 'a7c6e7'},\n\t\t// { token: 'accessor.imba', foreground: '9DCBEA' },\n\t\t\n\t\t{token: 'identifier.const',foreground: '@constant'},\n\t\t{token: 'identifier.uppercase',foreground: '@constant'},\n\t\t{token: 'identifier.const.class',foreground: '@decl'},\n\t\t{token: 'identifier.class',foreground: '@decl'},\n\t\t{token: 'identifier.const.tag',foreground: '@decl'},\n\t\t{token: 'identifier.decl',foreground: '@decl'},\n\t\t{token: 'identifier.tag',foreground: '@decl'},\n\t\t{token: 'identifier.def',foreground: '@decl'},\n\t\t{token: 'identifier.key',foreground: '@key'},\n\t\t{token: 'identifier.env',foreground: '@keyword'},\n\t\t{token: 'identifier.special',foreground: '@special'},\n\t\t{token: 'identifier.symbol',foreground: '@keyword'},\n\t\t{token: 'accessor.symbol',foreground: '@keyword'},\n\t\t{token: 'identifier.import',foreground: '@limport'},\n\t\t\n\t\t{token: 'entity',foreground: '@decl'},\n\t\t{token: 'entity.name.type',foreground: '@decl'},\n\t\t{token: 'entity.name.function',foreground: '@decl'},\n\t\t{token: 'entity.name.tag',foreground: '@xml'},\n\t\t\n\t\t{token: 'storage.type.function',foreground: '@keyword'},\n\t\t{token: 'storage.type.class',foreground: '@keyword'},\n\t\t\n\t\t{token: 'unit',foreground: 'ff9191'},\n\t\t{token: 'comment',foreground: '@comment'},\n\t\t{token: 'operator',foreground: '@operator'},\n\t\t{token: 'number',foreground: '@number'},\n\t\t{token: 'number.hex',foreground: '@number'},\n\t\t{token: 'numeric.css',foreground: '@number'},\n\t\t{token: 'regexp',foreground: '@regex'},\n\t\t{token: 'regexp.escape',foreground: '@regexgroup'},\n\t\t{token: 'annotation',foreground: 'cc6666'},\n\t\t{token: 'type',foreground: '3DC9B0'},\n\t\t{token: 'boolean',foreground: '@bool'},\n\t\t\n\t\t{token: 'constant.numeric',foreground: '@number'},\n\t\t{token: 'constant.language.boolean',foreground: '@bool'},\n\t\t\n\t\t{token: 'delimiter',foreground: 'DCDCDC'},\n\t\t{token: 'delimiter.access.imba',foreground: 'DCDCDB'},\n\t\t{token: 'delimiter.html',foreground: '808080'},\n\t\t{token: 'delimiter.xml',foreground: '808080'},\n\t\t{token: 'delimiter.eq.tag',foreground: 'ea9b7c'},\n\t\t\n\t\t{token: 'tag',foreground: '@tagbase'},\n\t\t{token: 'tag.name',foreground: '@tagname'},\n\t\t{token: 'tag.open',foreground: '@tagbracket'},\n\t\t{token: 'tag.close',foreground: '@tagbracket'},\n\t\t{token: 'tag.attribute',foreground: '@tagattr'},\n\t\t{token: 'tag.attribute.listener',foreground: '@taglistener'},\n\t\t{token: 'tag.attribute.modifier',foreground: '@tagmodifier'},\n\t\t{token: \"tag.event\",foreground: '@tagevent',fontStyle: 'italic'},\n\t\t{token: \"tag.event-modifier\",foreground: '@tagevent',fontStyle: 'italic'},\n\t\t{token: \"tag.reference\",foreground: '@tagref',fontStyle: 'underline'},\n\t\t{token: \"operator.equals.tag-attr\",foreground: 'd9d093'},\n\t\t{token: \"operator.access\",foreground: 'e3ae9a'},\n\t\t{token: 'self',foreground: '@decl'},\n\t\t{token: 'this',foreground: '@decl'},\n\t\t\n\t\t// d9d093\n\t\t{token: 'paren.open.tag',foreground: '@taglistener'},\n\t\t{token: 'paren.close.tag',foreground: '@taglistener'},\n\t\t\n\t\t{token: 'meta.scss',foreground: 'A79873'},\n\t\t{token: 'meta.tag',foreground: '@xml'},\n\t\t{token: 'metatag',foreground: 'DD6A6F'},\n\t\t{token: 'metatag.content.html',foreground: '9CDCFE'},\n\t\t{token: 'metatag.html',foreground: '569CD6'},\n\t\t{token: 'metatag.xml',foreground: '569CD6'},\n\t\t{token: 'metatag.php',fontStyle: 'bold'},\n\t\t\n\t\t{token: 'key',foreground: '@key'},\n\t\t{token: 'string.key.json',foreground: '9CDCFE'},\n\t\t{token: 'string.value.json',foreground: 'CE9178'},\n\t\t\n\t\t{token: 'attribute.name',foreground: '@key'},\n\t\t{token: 'attribute.value',foreground: '@number'},\n\t\t{token: 'attribute.value.number.css',foreground: '@number'},\n\t\t{token: 'attribute.value.unit.css',foreground: '@number'},\n\t\t{token: 'attribute.value.hex.css',foreground: '@number'},\n\t\t\n\t\t{token: 'string',foreground: '@string'},\n\t\t{token: 'path',foreground: '@string'},\n\t\t{token: 'string.sql',foreground: '@string'},\n\t\t\n\t\t{token: 'keyword',foreground: '@keyword'},\n\t\t{token: 'keyword.flow',foreground: '@keyword'},\n\t\t{token: 'keyword.json',foreground: '@keyword'},\n\t\t{token: 'keyword.flow.scss',foreground: '@keyword'},\n\t\t\n\t\t{token: 'operator.scss',foreground: '909090'},\n\t\t{token: 'operator.sql',foreground: '778899'},\n\t\t{token: 'operator.swift',foreground: '909090'},\n\t\t{token: 'predefined.sql',foreground: 'FF00FF'},\n\t\t\n\t\t// css\n\t\t{token: \"entity.name.selector.css\",foreground: '@xml'},\n\t\t{token: \"support.type.property-name.css\",foreground: '@decl'},\n\t\t{token: \"meta.object-literal.key\",foreground: '@key'},\n\t\t\n\t\t// imba styles\n\t\t{token: \"style.selector\",foreground: 'e9e19b'},\n\t\t{token: \"style.selector.context\",foreground: 'eec49d'},\n\t\t{token: \"style.property\",foreground: 'e0ade3'},\n\t\t{token: \"style.property.var\",foreground: 'ff93d0'},\n\t\t{token: \"style.value\",foreground: 'a49feb'},\n\t\t{token: \"style.value.unit\",foreground: 'ff9191'},\n\t\t{token: \"style.value.var\",foreground: 'ff93d0'},\n\t\t{token: \"style.start-operator\",foreground: '6d829b'},\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t{token: \"style.open\",foreground: '@xml'},\n\t\t{token: \"style.close\",foreground: '@xml'}\n\t],\n\tcolors: {\n\t\t'foreground': '#@foreground',\n\t\t'editor.background': '#282f33',\n\t\t'editorGutter.background': '#282f33',\n\t\t'editor.selectionBackground': '#30455f', // #33393f\n\t\t'editorLineNumber.foreground': '#5D6E7A',\n\t\t'editorWidget.background': '#20262a',\n\t\t'editorWidget.border': '#20262a',\n\t\t'list.focusBackground': '#33393f',\n\t\t'list.hoverBackground': '#282f33',\n\t\t'list.highlightForeground': '#ffffff',\n\t\t'input.foreground': '#ffffff',\n\t\t'editorSuggestWidget.foreground': '#@foreground',\n\t\t'editorHoverWidget.background': '#20262a',\n\t\t'editorCursor.foreground': '#@agentCursor'\n\t}\n};\n\nif (true) {\n\twindow.TTH = Theme;\n};\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\n// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n// externs;\n\nfunction Adapter(defaults,selector,worker){\n\tthis._defaults = defaults;\n\tthis._selector = selector;\n\tthis._worker = worker;\n\tthis._disposables = [];\n\tthis._listener = Object.create(null);\n\tthis;\n};\n\nexports.Adapter = Adapter; // export class \nAdapter.prototype.worker = function(v){ return this._worker; }\nAdapter.prototype.setWorker = function(v){ this._worker = v; return this; };\nAdapter.prototype.selector = function(v){ return this._selector; }\nAdapter.prototype.setSelector = function(v){ this._selector = v; return this; };\n\nAdapter.prototype.dispose = function (){\n\tfor (let i = 0, items = iter$(this._disposables), len = items.length; i < len; i++) {\n\t\titems[i].dispose();\n\t};\n\t\n\tfor (let o = this._listener, val, i = 0, keys = Object.keys(o), l = keys.length, key; i < l; i++){\n\t\tkey = keys[i];val = o[key];val.dispose();\n\t};\n\t\n\tthis._disposables = [];\n\tthis._listener = Object.create(null);\n\treturn this;\n};\n\n\nvar VAR_RENDER_OPTIONS = {\n\t\"base\": {\n\t\tdark: {color: '#f3f1d5'},\n\t\tlight: {color: '#509DB5'}\n\t},\n\t\n\t\"import\": {\n\t\tdark: {color: '#e2b5e8'},\n\t\tlight: {color: '#509DB5'}\n\t}\n};\n\n\nfunction DiagnosticsAdapter(defaults,selector,worker){\n\tvar self = this;\n\tDiagnosticsAdapter.prototype.__super__.constructor.apply(self,arguments);\n\t// console.warn \"init DiagnosticsAdapter!\"\n\t\n\tvar onModelAdd = function(model) {\n\t\tif (model.getModeId() != self._selector) {\n\t\t\treturn;\n\t\t};\n\t\t\n\t\treturn self.addModel(model);\n\t};\n\t\n\tvar onModelRemoved = function(model) {\n\t\treturn self.removeModel(model);\n\t};\n\t\n\tself._disposables.push(monaco.editor.onDidCreateModel(onModelAdd));\n\tself._disposables.push(monaco.editor.onWillDisposeModel(onModelRemoved));\n\t\n\tself._disposables.push(monaco.editor.onDidChangeModelLanguage(function(event) {\n\t\tonModelRemoved(event.model);\n\t\treturn onModelAdd(event.model);\n\t}));\n\t\n\tmonaco.editor.getModels().forEach(onModelAdd);\n};\n\n\nsubclass$(DiagnosticsAdapter,Adapter);\nexports.DiagnosticsAdapter = DiagnosticsAdapter; // export class \nDiagnosticsAdapter.prototype.addModel = function (model){\n\t// console.log \"Diagnostics.addModel\",model\n\tvar self = this;\n\tvar uri = model.uri.toString();\n\t\n\tif (self._listener[uri]) {\n\t\treturn;\n\t};\n\t\n\tvar handle;\n\t\n\tmodel.IMBA_ADAPTER = self;\n\t\n\tvar sub = model.onDidChangeContent(function(e) {\n\t\t// if model.@isScrimbaSyncing\n\t\t//\treturn\n\t\t// console.log \"imba.onDidChangeContent\",e\n\t\tself.prevalidate(uri);\n\t\tclearTimeout(handle);\n\t\treturn handle = setTimeout(function() {\n\t\t\treturn self.validate(uri);\n\t\t},500);\n\t});\n\t\n\tself._listener[uri] = {\n\t\tdispose: function() {\n\t\t\tclearTimeout(handle);\n\t\t\treturn sub.dispose();\n\t\t}\n\t};\n\t\n\t// use timeout here\n\treturn self.validate(uri);\n};\n\nDiagnosticsAdapter.prototype.removeModel = function (model){\n\tvar v_;\n\tvar key = model.uri.toString();\n\t// console.log \"removeModel\",model,key\n\tif (this._listener[key]) {\n\t\tthis._listener[key].dispose();\n\t\treturn (((v_ = this._listener[key]),delete this._listener[key], v_));\n\t};\n};\n\nDiagnosticsAdapter.prototype.locToRange = function (model,loc){\n\tvar a = model.getPositionAt(loc[0]);\n\tvar b = model.getPositionAt(loc[1]);\n\treturn new (monaco.Range)(a.lineNumber,a.column,b.lineNumber,b.column);\n};\n\nDiagnosticsAdapter.prototype.varToDecoration = function (model,item,loc){\n\tvar range = this.locToRange(model,loc);\n\trange.name = item.name;\n\tvar renderOpts = VAR_RENDER_OPTIONS[item.type] || VAR_RENDER_OPTIONS.base;\n\treturn {\n\t\trange: range,\n\t\trenderOptions: {\n\t\t\tdark: {color: '#f3f1d5'},\n\t\t\tlight: {color: '#509DB5'}\n\t\t},\n\t\thoverMessage: \"Variable\",\n\t\tstickiness: 1,\n\t\toptions: {\n\t\t\tstickiness: 1,\n\t\t\tinlineClassName: 'l' + item.type,\n\t\t\thoverMessage: \"Variable\",\n\t\t\tname: item.name || 'itemname'\n\t\t}\n\t};\n};\n\nDiagnosticsAdapter.prototype.warningToMarker = function (model,original){\n\tvar item = this.locToRange(model,original.loc);\n\titem.severity = 3;\n\titem.message = original.message;\n\treturn item;\n};\n\nDiagnosticsAdapter.prototype.warningToDecoration = function (model,orig){\n\tvar range = this.locToRange(model,orig.loc);\n\treturn {\n\t\trange: range,\n\t\toptions: {\n\t\t\tname: 'error',\n\t\t\tlinesDecorationsClassName: 'error'\n\t\t}\n\t};\n};\n\nDiagnosticsAdapter.prototype.prevalidate = function (uri){\n\tvar model = monaco.editor.getModel(uri);\n\tvar meta = model._imbaEntities || {};\n\tif (meta.warnings) {\n\t\t// remove error markers immediately\n\t\tmonaco.editor.setModelMarkers(model,this._selector,[]);\n\t};\n\treturn this;\n};\n\nDiagnosticsAdapter.prototype.validate = async function (uri){\n\tvar worker = await this._worker(uri);\n\tvar meta = await worker.getDiagnostics(uri);\n\t// console.log \"returned from worker?\",meta\n\tvar model = monaco.editor.getModel(uri);\n\tvar decorations = [];\n\tvar markers = [];\n\tmodel._imbaEntities = meta;\n\t\n\tfor (let i = 0, items = iter$(meta.scopes), len = items.length, scope; i < len; i++) {\n\t\tscope = items[i];\n\t\tfor (let j = 0, ary = iter$(scope.vars), len = ary.length, item; j < len; j++) {\n\t\t\titem = ary[j];\n\t\t\tfor (let k = 0, array = iter$(item.refs), len = array.length; k < len; k++) {\n\t\t\t\tdecorations.push(this.varToDecoration(model,item,array[k].loc));\n\t\t\t};\n\t\t};\n\t};\n\t\n\tfor (let i = 0, items = iter$(meta.warnings), len = items.length, warn; i < len; i++) {\n\t\t// var loc = locToRange(model, warn:loc)\n\t\twarn = items[i];\n\t\tdecorations.push(this.warningToDecoration(model,warn));\n\t\tmarkers.push(this.warningToMarker(model,warn));\n\t};\n\t\n\tmonaco.editor.setModelMarkers(model,this._selector,markers);\n\t// console.log(\"now setting model markers\",markers,decorations)\n\t\n\tif (!len$(markers)) {\n\t\tmodel._varDecorations = model.deltaDecorations(model._varDecorations || (model._varDecorations = []),decorations);\n\t};\n\treturn [];\n};\n", "// externs;\n\nvar STOP_WHEN_IDLE_FOR = 2 * 60 * 1000; // 2min\n\nfunction WorkerManager(defaults){\n\tvar self = this;\n\tself._defaults = defaults;\n\tself._worker = null;\n\tself._idleCheckInterval = setInterval(function() { return self.checkIfIdle(); },30 * 1000);\n\tself._lastUsedTime = 0;\n};\n\nexports.WorkerManager = WorkerManager; // export class \nWorkerManager.prototype.stopWorker = function (){\n\tif (this._worker) {\n\t\tthis._worker.dispose();\n\t\tthis._worker = null;\n\t};\n\treturn this._client = null;\n};\n\nWorkerManager.prototype.dispose = function (){\n\tclearInterval(this._idleCheckInterval);\n\treturn this.stopWorker();\n};\n\n// should be disabled\nWorkerManager.prototype.checkIfIdle = function (){\n\tif (!this._worker) { return };\n\tvar elapsed = Date.now() - this._lastUsedTime;\n\tif (elapsed > STOP_WHEN_IDLE_FOR) {\n\t\treturn this.stopWorker();\n\t};\n};\n\nWorkerManager.prototype.getClient = function (){\n\t// console.log \"worker getClient!\"\n\tthis._lastUsedTime = Date.now();\n\t\n\tif (!this._client) {\n\t\tthis._worker = monaco.editor.createWebWorker(\n\t\t\t{moduleId: SCRIMBA_API.assetsPath('imba-worker.js'),\n\t\t\tlabel: 'imba',\n\t\t\tcreateData: {\n\t\t\t\tdefaults: this._defaults\n\t\t\t}}\n\t\t);\n\t\tthis._client = this._worker.getProxy();\n\t};\n\t\n\treturn this._client;\n};\n\nWorkerManager.prototype.getLanguageServiceWorker = function (){\n\tvar self = this;\n\tvar $0 = arguments, i = $0.length;\n\tvar resources = new Array(i>0 ? i : 0);\n\twhile(i>0) resources[i-1] = $0[--i];\n\treturn self.getClient().then(function(client) {\n\t\treturn self._worker.withSyncedResources(resources).then(function() {\n\t\t\treturn client;\n\t\t});\n\t});\n};\n", "var self = {};\n// externs;\n\nvar DiagnosticsAdapter = require('./adapters').DiagnosticsAdapter;\nvar WorkerManager = require('./workerManager').WorkerManager;\n\nexports.setupMode = self.setupMode = function (defaults){\n\t// console.warn \"imba setupMode\"\n\t\n\tvar modeId = 'imba1';\n\tvar env = window.MonacoEnvironment.imba;\n\tvar client = new WorkerManager(modeId,defaults);\n\tvar worker = function() { var $0 = arguments, i = $0.length;\n\tvar uris = new Array(i>0 ? i : 0);\n\twhile(i>0) uris[i-1] = $0[--i];\n\treturn client.getLanguageServiceWorker.apply(client,uris); };\n\t\n\tvar disposables = [client];\n\t\n\t// disposables.push(monaco.languages.registerCompletionItemProvider(modeId, new languageFeatures.SuggestAdapter(worker)));\n\t// disposables.push(monaco.languages.registerSignatureHelpProvider(modeId, new languageFeatures.SignatureHelpAdapter(worker)));\n\t// disposables.push(monaco.languages.registerHoverProvider(modeId, new languageFeatures.QuickInfoAdapter(worker)));\n\t// disposables.push(monaco.languages.registerDocumentHighlightProvider(modeId, new languageFeatures.OccurrencesAdapter(worker)));\n\t// disposables.push(monaco.languages.registerDefinitionProvider(modeId, new languageFeatures.DefinitionAdapter(worker)));\n\t// disposables.push(monaco.languages.registerReferenceProvider(modeId, new languageFeatures.ReferenceAdapter(worker)));\n\t// disposables.push(monaco.languages.registerDocumentSymbolProvider(modeId, new languageFeatures.OutlineAdapter(worker)));\n\t// disposables.push(monaco.languages.registerDocumentRangeFormattingEditProvider(modeId, new languageFeatures.FormatAdapter(worker)));\n\t// disposables.push(monaco.languages.registerOnTypeFormattingEditProvider(modeId, new languageFeatures.FormatOnTypeAdapter(worker)));\n\t\n\tdisposables.push(new DiagnosticsAdapter(defaults,modeId,worker));\n\tenv && disposables.push(monaco.languages.setMonarchTokensProvider(modeId,env.language));\n\tenv && disposables.push(monaco.languages.setLanguageConfiguration(modeId,env.conf));\n\t\n\treturn worker;\n};\n", "var self = {};\nvar setupMode = require('./mode').setupMode;\n\nvar names = {\n\taccess: 'delimiter.access',\n\tivar: 'variable.instance',\n\tconstant: 'identifier.const'\n};\n\nvar eolpop = [/^/,{token: '@rematch',next: '@pop'}];\n\nexports.setup = self.setup = function (monaco){\n\tmonaco.IMBA1_WORKER = setupMode({});\n\treturn self;\n};\n\nvar conf = exports.conf = {\n\twordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#%\\^\\&\\*\\(\\)\\=\\$\\-\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\n\tcomments: {\n\t\tblockComment: ['###','###'],\n\t\tlineComment: '#'\n\t},\n\tbrackets: [\n\t\t['{','}','delimiter.curly'],\n\t\t['[',']','delimiter.square'],\n\t\t['(',')','delimiter.parenthesis'],\n\t\t['<','>','delimiter.angle']\n\t],\n\tautoClosingPairs: [\n\t\t{open: '\"',close: '\"',notIn: ['string','comment']},\n\t\t{open: '\\'',close: '\\'',notIn: ['string','comment']},\n\t\t{open: '{',close: '}',notIn: ['comment']},\n\t\t{open: '[',close: ']',notIn: ['string','comment']},\n\t\t{open: '(',close: ')',notIn: ['string','comment']},\n\t\t{open: '<',close: '>',notIn: ['string','comment','operators']}\n\t],\n\tonEnterRules: [{\n\t\tbeforeText: /^\\s*(?:css |def|get \\w|set \\w|class|for|if|elif|else|while|try|with|finally|except|async).*?$/,\n\t\taction: {indentAction: 1}\n\t},{\n\t\tbeforeText: /\\s*(?:do)\\s*(\\|.*\\|\\s*)?$/,\n\t\taction: {indentAction: 1}\n\t}]\n};\n\n// ivar namespace.instance.identifier\n// constant constructor.identifier\nvar language = exports.language = {\n\tdefaultToken: 'invalid',\n\tignoreCase: false,\n\ttokenPostfix: '.imba',\n\tbrackets: [\n\t\t{open: '{',close: '}',token: 'delimiter.curly'},\n\t\t{open: '[',close: ']',token: 'delimiter.square'},\n\t\t{open: '(',close: ')',token: 'delimiter.parenthesis'}\n\t],\n\tkeywords: [\n\t\t'def','and','or','is','isnt','not','on','yes','@','no','off',\n\t\t'true','false','null','this','self',\n\t\t'new','delete','typeof','in','instanceof',\n\t\t'return','throw','break','continue','debugger',\n\t\t'if','elif','else','switch','for','while','do','try','catch','finally',\n\t\t'class','extends','super',\n\t\t'undefined','then','unless','until','loop','of','by','when',\n\t\t'tag','prop','export','import','extend',\n\t\t'var','let','const','require','isa','await','static'\n\t],\n\tboolean: ['true','false','yes','no','undefined'],\n\tcontextual_keywords: [\n\t\t'from','global','attr'\n\t],\n\toperators: [\n\t\t'=','!','~','?',':','!!',\n\t\t'&','|','^','%','<<',\n\t\t'>>','>>>','+=','-=','*=','/=','&=','|=','?=',\n\t\t'^=','%=','<<=','>>=','>>>=','..','...'\n\t],\n\tlogic: [\n\t\t'>','<','==','<=','>=','!=','&&','||','===','!=='\n\t],\n\tranges: ['..','...'],\n\tdot: ['.'],\n\tmath: [\n\t\t'+','-','*','/','++','--'\n\t],\n\t\n\t// we include these common regular expressions\n\tsymbols: /[=><!~?&%|+\\-*\\/\\^\\.,\\:]+/,\n\tescapes: /\\\\(?:[abfnrtv\\\\\"'$]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\tpostaccess: /(:(?=\\w))?/,\n\tivar: /\\@[a-zA-Z_]\\w*/,\n\tconstant: /[A-Z][A-Za-z\\d\\-\\_]*/,\n\tclassName: /[A-Z][A-Za-z\\d\\-\\_]*|[A-Za-z\\d\\-\\_]+/,\n\tmethodName: /[A-Za-z\\_\\$][A-Za-z\\d\\$\\_]*(\\-+[\\w\\$]+)*[\\?\\!\\=]?/,\n\tidentifier: /[a-z_][A-Za-z\\d\\_\\$]*(\\-+[\\w\\$]+)*[\\?\\!]?/,\n\tanyIdentifier: /[A-Za-z_\\$][A-Za-z\\d\\-\\_\\$]*/,\n\tnewline: /\\n/,\n\t\n\tregEx: /\\/(?!\\/\\/)(?:[^\\/\\\\]|\\\\.)*\\/[igm]*/,\n\t\n\tregexpctl: /[(){}\\[\\]\\$\\^|\\-*+?\\.]/,\n\tregexpesc: /\\\\(?:[bBdDfnrstvwWn0\\\\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,\n\t\n\t// The main tokenizer for our languages\n\ttokenizer: {\n\t\troot: [\n\t\t\t{include: '@body'}\n\t\t],\n\t\tbody: [\n\t\t\t[/([a-z]\\w*)(\\:)(?=\\w)/,{\n\t\t\t\tcases: {\n\t\t\t\t\t'this:': ['variable.predefined.this','delimiter.access'],\n\t\t\t\t\t'self:': ['variable.predefined.self','delimiter.access'],\n\t\t\t\t\t'@default': ['identifier','delimiter.access']\n\t\t\t\t}\n\t\t\t}],\n\t\t\t\n\t\t\t[/(@ivar)(\\:)(?=\\w)/,[names.ivar,names.access]],\n\t\t\t[/(@constant)(\\:)(?=\\w)/,[names.constant,names.access]],\n\t\t\t\n\t\t\t[/(class|tag|module)(?=\\s)/,{token: 'keyword.$1',next: '@declstart.$1'}],\n\t\t\t{include: '@css_statement'},\n\t\t\t[/(def|get|set)(?=\\s)/,{token: 'keyword.$1',next: '@defstart.$1'}],\n\t\t\t[/(prop|attr)(?=\\s)/,{token: 'keyword.$1',next: '@propstart.$1'}],\n\t\t\t\n\t\t\t[/(import)(?=\\s)/,{token: 'keyword.$1',next: '@importstart.$1'}],\n\t\t\t\n\t\t\t[/([a-z]\\w*)(:?(?!\\w))/,{\n\t\t\t\tcases: {\n\t\t\t\t\t'$2': ['key.identifier','delimiter'],\n\t\t\t\t\t'this': 'variable.predefined.this',\n\t\t\t\t\t'self': 'variable.predefined.self',\n\t\t\t\t\t'$1@boolean': {token: 'boolean.$0'},\n\t\t\t\t\t'$1@keywords': {token: 'keyword.$0'},\n\t\t\t\t\t'$1@contextual_keywords': {token: 'identifier.$0'},\n\t\t\t\t\t'@default': ['identifier','delimiter']\n\t\t\t\t}\n\t\t\t}],\n\t\t\t\n\t\t\t// [/([a-z]\\w*)(:)(?!\\w))/, { cases: {\n\t\t\t// \t\t'$2': ['key.identifier','delimiter'],\n\t\t\t// \t\t'this': 'variable.predefined.this',\n\t\t\t// \t\t'self': 'variable.predefined.self',\n\t\t\t// \t\t'$1@keywords': { token: 'keyword.$0' },\n\t\t\t// \t\t'$1@contextual_keywords': { token: 'identifier.$0' },\n\t\t\t// \t\t'@default': ['identifier','delimiter']\n\t\t\t// \t}\n\t\t\t\n\t\t\t// }],\n\t\t\t\n\t\t\t// identifiers and keywords\n\t\t\t[/\\@[a-zA-Z_\\$]\\w*(\\-\\w+)*[\\?\\!]?/,'variable.instance'],\n\t\t\t[/\\$\\w+\\$/,'identifier.env'],\n\t\t\t[/\\$\\d+/,'identifier.special'],\n\t\t\t[/\\$[a-zA-Z_\\$]\\w*(\\-\\w+)*/,'identifier.sys'],\n\t\t\t[/[A-Z][A-Za-z\\d\\-\\_]*/,{token: 'identifier.const'}],\n\t\t\t[/[a-z_][A-Za-z\\d\\_]*(\\-\\w+)*[\\?\\!]?/,{token: 'identifier'}],\n\t\t\t[/\\$/,{token: 'identifier.special'}],\n\t\t\t\n\t\t\t[/\\(/,{token: 'paren.open',next: '@parens'}],\n\t\t\t\n\t\t\t// whitespace\n\t\t\t{include: '@whitespace'},\n\t\t\t{include: '@tag'},\n\t\t\t{include: '@tag_singleton_ref'},\n\t\t\t\n\t\t\t// Comments\n\t\t\t[/### (javascript|compiles to)\\:/,{token: 'comment',next: '@js_comment',nextEmbedded: 'text/javascript'}],\n\t\t\t[/### (css\\b.*)/,{token: 'comment',next: '@style_comment',nextEmbedded: 'text/css'}],\n\t\t\t[/### (less\\b.*)/,{token: 'comment',next: '@style_comment',nextEmbedded: 'text/less'}],\n\t\t\t[/### (sass\\b.*)/,{token: 'comment',next: '@style_comment',nextEmbedded: 'text/css'}],\n\t\t\t[/### (scss\\b.*)/,{token: 'comment',next: '@style_comment',nextEmbedded: 'text/css'}],\n\t\t\t\n\t\t\t\n\t\t\t{include: '@comments'},\n\t\t\t[/(\\:)([\\@\\w\\-\\_]+)/,['symbol.start','symbol']],\n\t\t\t[/\\$\\d+/,'entity.special.arg'],\n\t\t\t[/\\&/,'operator'],\n\t\t\t\n\t\t\t// regular expressions\n\t\t\t[/\\/(?!\\ )(?=([^\\\\\\/]|\\\\.)+\\/)/,{token: 'regexp.slash',bracket: '@open',next: '@regexp'}],\n\t\t\t\n\t\t\t// ['///', { token: 'regexp', next: '@hereregexp' }],\n\t\t\t// [/^(\\s*)(@regEx)/, ['', 'regexp']],\n\t\t\t// [/(\\()(\\s*)(@regEx)/, ['@brackets', '', 'regexp']],\n\t\t\t// [/(\\,)(\\s*)(@regEx)/, ['delimiter', '', 'regexp']],\n\t\t\t// [/(\\=)(\\s*)(@regEx)/, ['delimiter', '', 'regexp']],\n\t\t\t// [/(\\:)(\\s*)(@regEx)/, ['delimiter', '', 'regexp']],\n\t\t\t// [/(\\[)(\\s*)(@regEx)/, ['@brackets', '', 'regexp']],\n\t\t\t// [/(\\!)(\\s*)(@regEx)/, ['delimiter', '', 'regexp']],\n\t\t\t// [/(\\&)(\\s*)(@regEx)/, ['delimiter', '', 'regexp']],\n\t\t\t// [/(\\|)(\\s*)(@regEx)/, ['delimiter', '', 'regexp']],\n\t\t\t// [/(\\?)(\\s*)(@regEx)/, ['delimiter', '', 'regexp']],\n\t\t\t// [/(\\{)(\\s*)(@regEx)/, ['@brackets', '', 'regexp']],\n\t\t\t// [/(\\;)(\\s*)(@regEx)/, ['', '', 'regexp']],\n\t\t\t// \n\t\t\t[/}/,{cases: {\n\t\t\t\t'$S2==interpolatedstring': {token: 'string',next: '@pop'},\n\t\t\t\t'@default': '@brackets'\n\t\t\t}}],\n\t\t\t[/[\\{\\}\\(\\)\\[\\]]/,'@brackets'],\n\t\t\t{include: '@operators'},\n\t\t\t\n\t\t\t// numbers\n\t\t\t{include: '@number'},\n\t\t\t// delimiter: after number because of .\\d floats\n\t\t\t[/[,]/,'delimiter.comma'],\n\t\t\t[/[.]/,'delimiter.dot'],\n\t\t\t// strings:\n\t\t\t[/\"\"\"/,'string','@herestring.\"\"\"'],\n\t\t\t[/'''/,'string','@herestring.\\'\\'\\''],\n\t\t\t[/\"/,{cases: {'@eos': 'string','@default': {token: 'string',next: '@string.\"'}}}],\n\t\t\t[/'/,{cases: {'@eos': 'string','@default': {token: 'string',next: '@string.\\''}}}],\n\t\t\t[/`/,{cases: {'@eos': 'string','@default': {token: 'string',next: '@string.\\`'}}}]\n\t\t],\n\t\tjs_comment: [\n\t\t\t[/###/,{token: 'comment',next: '@pop',nextEmbedded: '@pop'}]\n\t\t],\n\t\t\n\t\tstyle_comment: [\n\t\t\t[/###/,{token: 'comment',next: '@pop',nextEmbedded: '@pop'}]\n\t\t],\n\t\t\n\t\tstring_start: [\n\t\t\t[/\"\"\"/,'string','@herestring.\"\"\"'],\n\t\t\t[/'''/,'string','@herestring.\\'\\'\\''],\n\t\t\t[/\"/,{cases: {'@eos': 'string','@default': {token: 'string',next: '@string.\"'}}}],\n\t\t\t[/'/,{cases: {'@eos': 'string','@default': {token: 'string',next: '@string.\\''}}}],\n\t\t\t[/`/,{cases: {'@eos': 'string','@default': {token: 'string',next: '@string.`'}}}]\n\t\t],\n\t\tvalue: [\n\t\t\t{include: 'string_start'},\n\t\t\t{include: '@number'}\n\t\t],\n\t\tunspaced_expr: [\n\t\t\t[/([a-z]\\w*)(\\:)(?=\\w)/,{\n\t\t\t\tcases: {\n\t\t\t\t\t'this:': ['variable.predefined.this','delimiter.access'],\n\t\t\t\t\t'self:': ['variable.predefined.self','delimiter.access'],\n\t\t\t\t\t'@default': ['identifier','delimiter.access']\n\t\t\t\t}\n\t\t\t}],\n\t\t\t\n\t\t\t[/(@ivar)(\\:)(?=\\w)/,[names.ivar,names.access]],\n\t\t\t[/(@constant)(\\:)(?=\\w)/,[names.constant,names.access]]\n\t\t],\n\t\tnumber: [\n\t\t\t[/\\d+[eE]([\\-+]?\\d+)?/,'number.float'],\n\t\t\t[/\\d+\\.\\d+([eE][\\-+]?\\d+)?/,'number.float'],\n\t\t\t[/0[xX][0-9a-fA-F]+/,'number.hex'],\n\t\t\t[/0[0-7]+(?!\\d)/,'number.octal'],\n\t\t\t[/\\d+/,'number']\n\t\t],\n\t\toperators: [\n\t\t\t[/@symbols/,{cases: {\n\t\t\t\t'@operators': 'operator',\n\t\t\t\t'@math': 'operator.math',\n\t\t\t\t'@logic': 'operator.logic',\n\t\t\t\t'@dot': 'operator.dot',\n\t\t\t\t'@default': 'delimiter'\n\t\t\t}}],\n\t\t\t[/\\&\\b/,'operator']\n\t\t],\n\t\twhitespace: [\n\t\t\t[/[ \\t\\r\\n]+/,'white']\n\t\t],\n\t\tcomments: [\n\t\t\t[/###/,'comment','@comment'],\n\t\t\t[/#(\\s.*)?$/,'comment']\n\t\t],\n\t\t\n\t\ttag: [\n\t\t\t[/\\<\\>/,{token: 'tag.empty'}],\n\t\t\t[/(<)([a-z][a-z\\-\\d]*(?:\\:[A-Za-z\\-\\d]+)?)/,['tag.open',{token: 'tag.name.tag-$2',next: '@tag_start'}]],\n\t\t\t[/(<)([A-Z][A-Za-z\\-\\d]*)/,['tag.open',{token: 'tag.name.local',next: '@tag_start'}]],\n\t\t\t[/(<)(?=[a-z\\d\\#\\.\\{\\@])/,{token: 'tag.open',next: '@tag_start'}]\n\t\t],\n\t\ttag_singleton_ref: [\n\t\t\t[/\\#(-*[a-zA-Z][\\w\\-]*)+/,'tag.singleton.ref']\n\t\t],\n\t\ttag_parts: [\n\t\t\t[/\\.\\(/,{token: 'style.open',next: '@style_properties.)'}],\n\t\t\t[/\\#(-*[a-zA-Z][\\w\\-]*)/,'tag.id'],\n\t\t\t[/\\.(-*[a-zA-Z][\\w\\-]*)/,'tag.class'],\n\t\t\t[/\\@(-*[a-zA-Z][\\w\\-]*)/,'tag.iref'],\n\t\t\t[/[\\#\\.\\@]\\{/,{token: 'tag.interpolated.open',next: '@tag_inter'}]\n\t\t],\n\t\ttag_start: [\n\t\t\t[/[ \\t\\r\\n]+/,{token: 'white',switchTo: '@tag_content'}],\n\t\t\t{include: 'tag_parts'},\n\t\t\t[/\\[/,{token: 'tag.data.open',next: '@tag_data'}],\n\t\t\t[/[\\=\\-]?\\>/,{token: 'tag.close',next: '@pop'}]\n\t\t],\n\t\ttag_inter: [\n\t\t\t['}',{token: 'tag.interpolated.close',next: '@pop'}],\n\t\t\t{include: 'body'}\n\t\t],\n\t\ttag_data: [\n\t\t\t[']',{token: 'tag.data.close',next: '@pop'}],\n\t\t\t{include: 'body'}\n\t\t],\n\t\ttag_content: [\n\t\t\t// [/(\\:[a-zA-Z][\\w\\-]*)((?:\\.[a-zA-Z][\\w\\-]*)+|)\\s*(\\=)\\s*/, ['tag.attribute.listener','tag.attribute.modifier','tag.attribute'], '@tag_attr_value'],\n\t\t\t[/(\\:[a-zA-Z][\\w\\-]*)((?:\\.[a-zA-Z][\\w\\-]*)+)/,['tag.attribute.listener','tag.attribute.modifier']],\n\t\t\t\n\t\t\t[/(\\:[a-zA-Z][\\w\\-]*)/,{token: 'tag.attribute.listener'}],\n\t\t\t// [/(\\.[a-zA-Z\\-][\\w\\-]*)/, { token: 'tag.class.conditional'}],\n\t\t\t[/([a-zA-Z\\-][\\w\\-]*(\\:[a-zA-Z][\\w\\-]*)?)/,{token: 'tag.attribute.name'}],\n\t\t\t// [/([\\:][a-zA-Z][\\w\\-]*([\\:\\.][a-zA-Z][\\w\\-]*)*)\\s*(\\=)\\s*/, { token: 'tag.attribute.listener', next: '@tag_attr_value' }],\n\t\t\t// [/([@\\.]?[a-zA-Z][\\w\\-]*([\\:\\.][a-zA-Z][\\w\\-]*)*)\\s*(\\=)\\s*/, { token: 'tag.attribute', next: '@tag_attr_value' }],\n\t\t\t\n\t\t\t{include: 'tag_parts'},\n\t\t\t{include: '@whitespace'},\n\t\t\t// ['>', { token: 'tag.close', next: '@pop' }],\n\t\t\t[/[\\=\\-]?\\>/,{token: 'tag.close',next: '@pop'}],\n\t\t\t// [/\\s*\\=\\s*(?!\\>)/, { token: 'tag.attribute.operator', next: '@tag_attr_value' }],\n\t\t\t[/(\\=)\\s*/,{token: 'delimiter.eq.tag',next: '@tag_attr_value'}], // switch to rather?\n\t\t\t[/\\(/,{token: 'paren.open.tag',next: '@tag_parens'}]\n\t\t],\n\t\ttag_attr_value: [\n\t\t\t[/(?=(\\:?[\\w]+\\=))/,{token: '',next: '@pop'}],\n\t\t\t[/(?=(\\>|\\s))/,{token: '',next: '@pop'}],\n\t\t\t[/\\(/,{token: 'paren.open',next: '@parens'}],\n\t\t\t[/\\{/,{token: 'brace.open',next: '@braces'}],\n\t\t\t[/\\[/,{token: 'bracket.open',next: '@brackets'}],\n\t\t\t{include: 'body'}\n\t\t// { include: 'unspaced_expr'},\n\t\t// [/\\(/, { token: 'paren.open', next: '@parens' }],\n\t\t// [/\\{/, { token: 'brace.open', next: '@braces' }]\n\t\t],\n\t\ttag_parens: [\n\t\t\t[/\\)/,{token: 'paren.close.tag',next: '@pop'}],\n\t\t\t[/(\\))(\\:?)/,['paren.close.tag','delimiter.colon'],'@pop'],\n\t\t\t{include: 'body'}\n\t\t],\n\t\t\n\t\t\n\t\tcss_statement: [\n\t\t\t[/^(\\t*)(css)(\\s)/,['white',{token: 'keyword.$2'},{token: 'white',next: '@indented_style_selector.$1\\t'}]]\n\t\t],\n\t\t\n\t\tindented_style_selector: [\n\t\t\t[/\\=/,{token: 'style.start-operator',switchTo: 'indented_style_body.$S2'}],\n\t\t\t[/\\{/,{token: 'style.open',switchTo: 'style_properties.}'}],\n\t\t\t[/^/,{token: '@rematch',switchTo: '@indented_style_body.$S2'}],\n\t\t\t[/\\:([\\w\\-]+)/,'style.selector.pseudostate'],\n\t\t\t[/\\.([\\w\\-]+)/,'style.selector.class-name'],\n\t\t\t[/([\\w\\-]+)/,'style.selector.element'],\n\t\t\t[/(>|~|\\+)/,'style.selector.operator'],\n\t\t\t[/\\&/,'style.selector.context'],\n\t\t\t[/[^\\{\\=]+/,'style.selector.name']\n\t\t// push into [ and (\n\t\t],\n\t\t\n\t\tindented_style_body: [\n\t\t\t[/^(\\t*)(?=[^\\{\\t]*&)/,{cases: {\n\t\t\t\t'$1==$S2': {token: 'white',next: 'indented_style_selector.$1\\t'},\n\t\t\t\t'@default': {token: '@rematch',next: '@pop'}\n\t\t\t}}],\n\t\t\t[/^(\\t*)(?=[^\\t\\n])/,{\n\t\t\t\tcases: {\n\t\t\t\t\t'$1==$S2': 'still-here',\n\t\t\t\t\t'@default': {token: '@rematch',next: '@pop'}\n\t\t\t\t}\n\t\t\t}],\n\t\t\t{include: 'style_properties'}\n\t\t],\n\t\t\n\t\tstyle_properties: [\n\t\t\t[/(\\}|\\)|\\])/,{cases: {\n\t\t\t\t'$1==$S2': {token: 'style.close',next: '@pop'},\n\t\t\t\t'@default': 'invalid'\n\t\t\t}}],\n\t\t\t{include: 'comments'},\n\t\t\t{include: 'style_property'},\n\t\t\t[/([\\:]\\s*)/,'style.property.operator','@style_value'],\n\t\t\t[/\\s+/,'style.whitespace'],\n\t\t\t[/[\\;]/,'style.delimiter']\n\t\t],\n\t\t\n\t\tstyle_property: [\n\t\t\t[/(@anyIdentifier)\\|/,'style.property.scope'],\n\t\t\t[/(--@anyIdentifier)/,'style.property.var'],\n\t\t\t[/(-*@anyIdentifier)/,'style.property.name'],\n\t\t\t[/\\@(@anyIdentifier)/,'style.property.mixin'],\n\t\t\t[/\\.(@anyIdentifier)/,'style.property.scope']\n\t\t],\n\t\t\n\t\tstyle_value: [\n\t\t\teolpop,\n\t\t\t[/\\s([\\$\\w\\-]+(\\.[\\w\\-]+)*[\\:\\=])/,{token: '@rematch',next: '@pop'}],\n\t\t\t[/[;\\)\\}\\]]/,{token: '@rematch',next: '@pop'}],\n\t\t\t[/(xs|sm|md|lg|xl|\\dxl)\\b/,'style.value.size'],\n\t\t\t[/(--@anyIdentifier)/,'style.value.var'],\n\t\t\t{include: 'number_with_unit'},\n\t\t\t{include: 'operators'},\n\t\t\t{include: 'number'},\n\t\t\t{include: 'string_start'},\n\t\t\t{include: 'comments'},\n\t\t\t[/\\(/,{token: 'delimiter.style.parens.open',next: '@style_expressions.)'}],\n\t\t\t[/(@anyIdentifier)/,'style.value']\n\t\t],\n\t\t\n\t\tstyle_expressions: [\n\t\t\t[/\\)/,{token: 'delimiter.style.parens.close',next: '@pop'}],\n\t\t\t[/\\(/,{token: 'delimiter.style.parens.open',next: '@style_expressions.)'}],\n\t\t\t{include: '@style_value'}\n\t\t],\n\t\t\n\t\tnumber_with_unit: [\n\t\t\t[/(\\d+)([a-z]+|\\%)/,['number','unit']],\n\t\t\t[/(\\d*\\.\\d+(?:[eE][\\-+]?\\d+)?)([a-z]+|\\%)/,['number.float','unit']]\n\t\t],\n\t\t\n\t\timportstart: [\n\t\t\t[/^./,{token: '@rematch',next: '@pop'}],\n\t\t\t[/(from|as)/,{token: 'keyword.$1'}],\n\t\t\t[/[\\{\\}\\,]/,{token: 'keyword'}],\n\t\t\t[/\"\"\"/,'string','@herestring.\"\"\"'],\n\t\t\t[/'''/,'string','@herestring.\\'\\'\\''],\n\t\t\t[/\"/,{cases: {'@eos': 'string','@default': {token: 'string',next: '@string.\"'}}}],\n\t\t\t[/'/,{cases: {'@eos': 'string','@default': {token: 'string',next: '@string.\\''}}}],\n\t\t\t[/[a-z_A-Z][A-Za-z\\d\\-\\_]*/,{token: 'identifier.import'}]\n\t\t],\n\t\t\n\t\tparens: [\n\t\t\t[/\\)/,{token: 'paren.close',next: '@pop'}],\n\t\t\t[/(\\))(\\:?)/,['paren.close','delimiter.colon'],'@pop'],\n\t\t\t{include: 'body'}\n\t\t],\n\t\tbraces: [\n\t\t\t['}',{token: 'brace.close',next: '@pop'}],\n\t\t\t{include: 'body'}\n\t\t],\n\t\tbrackets: [\n\t\t\t[']',{token: 'bracket.close',next: '@pop'}],\n\t\t\t{include: 'body'}\n\t\t],\n\t\t\n\t\tdeclstart: [\n\t\t\t[/^./,{token: '@rematch',next: '@pop'}],\n\t\t\t[/[A-Z][A-Za-z\\d\\-\\_]*/,{token: 'identifier.decl.$S2'}],\n\t\t\t[/\\./,{token: 'delimiter.dot'}],\n\t\t\t[/[a-z_][A-Za-z\\d\\-\\_]*/,{token: 'identifier.decl.$S2'}],\n\t\t\t[/[ \\t\\<\\>]+/,'operator.inherits string']\n\t\t],\n\t\t\n\t\tdefstart: [\n\t\t\t[/(self)\\./,{token: 'identifier.decl.def.self'}],\n\t\t\t[/@methodName/,{token: 'identifier.decl.def',next: '@pop'}],\n\t\t\t[/^./,{token: '@rematch',next: '@pop'}]\n\t\t],\n\t\t\n\t\tpropstart: [\n\t\t\t[/@identifier/,{token: 'identifier.decl.$S2',next: '@pop'}],\n\t\t\t[/^./,{token: '@rematch',next: '@pop'}]\n\t\t],\n\t\t\n\t\t\n\t\tstring: [\n\t\t\t[/[^\"'`\\{\\\\]+/,'string'],\n\t\t\t[/@escapes/,'string.escape'],\n\t\t\t[/\\./,'string.escape.invalid'],\n\t\t\t[/\\./,'string.escape.invalid'],\n\t\t\t[/\\{/,{\n\t\t\t\tcases: {\n\t\t\t\t\t'$S2==\"': {token: 'string',next: 'root.interpolatedstring'},\n\t\t\t\t\t'$S2==`': {token: 'string',next: 'root.interpolatedstring'},\n\t\t\t\t\t'@default': 'string'\n\t\t\t\t}\n\t\t\t}],\n\t\t\t[/[\"'\\`]/,{cases: {'$#==$S2': {token: 'string',next: '@pop'},'@default': 'string'}}],\n\t\t\t[/#/,'string']\n\t\t],\n\t\therestring: [\n\t\t\t[/(\"\"\"|''')/,{cases: {'$1==$S2': {token: 'string',next: '@pop'},'@default': 'string'}}],\n\t\t\t[/[^#\\\\'\"\\{]+/,'string'],\n\t\t\t[/['\"]+/,'string'],\n\t\t\t[/@escapes/,'string.escape'],\n\t\t\t[/\\./,'string.escape.invalid'],\n\t\t\t[/\\{/,{cases: {'$S2==\"\"\"': {token: 'string',next: 'root.interpolatedstring'},'@default': 'string'}}],\n\t\t\t[/#/,'string']\n\t\t],\n\t\tcomment: [\n\t\t\t[/[^#]+/,'comment'],\n\t\t\t[/###/,'comment','@pop'],\n\t\t\t[/#/,'comment']\n\t\t],\n\t\thereregexp: [\n\t\t\t[/[^\\\\\\/#]/,'regexp'],\n\t\t\t[/\\\\./,'regexp'],\n\t\t\t[/#.*$/,'comment'],\n\t\t\t['///[igm]*',{token: 'regexp',next: '@pop'}],\n\t\t\t[/\\//,'regexp']\n\t\t],\n\t\t\n\t\tregexp: [\n\t\t\t[/(\\{)(\\d+(?:,\\d*)?)(\\})/,['regexp.escape.control','regexp.escape.control','regexp.escape.control']],\n\t\t\t[/(\\[)(\\^?)(?=(?:[^\\]\\\\\\/]|\\\\.)+)/,['regexp.escape.control',{token: 'regexp.escape.control',next: '@regexrange'}]],\n\t\t\t[/(\\()(\\?:|\\?=|\\?!)/,['regexp.escape.control','regexp.escape.control']],\n\t\t\t[/[()]/,'regexp.escape.control'],\n\t\t\t[/@regexpctl/,'regexp.escape.control'],\n\t\t\t[/[^\\\\\\/]/,'regexp'],\n\t\t\t[/@regexpesc/,'regexp.escape'],\n\t\t\t[/\\\\\\./,'regexp.invalid'],\n\t\t\t['/',{token: 'regexp.slash',bracket: '@close'},'@pop']\n\t\t],\n\t\t\n\t\tregexrange: [\n\t\t\t[/-/,'regexp.escape.control'],\n\t\t\t[/\\^/,'regexp.invalid'],\n\t\t\t[/@regexpesc/,'regexp.escape'],\n\t\t\t[/[^\\]]/,'regexp'],\n\t\t\t[/\\]/,'regexp.escape.control','@pop']\n\t\t]\n\t}\n};\n", "var Ke=Object.defineProperty;var qt=s=>Ke(s,\"__esModule\",{value:!0});var Dt=(s,e)=>{for(var t in e)Ke(s,t,{get:e[t],enumerable:!0})};qt(exports);Dt(exports,{CompletionTypes:()=>N,Group:()=>E,ImbaDocument:()=>re,KeywordTypes:()=>g,Keywords:()=>Y,M:()=>z,Monarch:()=>_e,Node:()=>ee,Position:()=>Z,Range:()=>j,Scope:()=>K,SemanticTokenModifiers:()=>Be,SemanticTokenTypes:()=>X,Sym:()=>V,SymbolFlags:()=>d,SymbolKind:()=>L,Token:()=>P,grammar:()=>ne,highlight:()=>Ve,lexer:()=>W});var fe=Symbol.for(\"#init\"),ur=Symbol.for(\"#source\"),hr=Symbol.for(\"#lineText\"),Gt=Symbol.for(\"#version\"),mr=new WeakMap,Z=class{[fe](e=null){this.line=e?e.line:void 0,this.character=e?e.character:void 0,this.offset=e?e.offset:void 0}constructor(e,t,r,n=null){this[fe](),this.line=e,this.character=t,this.offset=r,this[Gt]=n}toString(){return\"\"+this.line+\":\"+this.character}valueOf(){return this.offset}},j=class{[fe](e=null){this.start=e?e.start:void 0,this.end=e?e.end:void 0}constructor(e,t){this[fe](),this.start=e,this.end=t}get offset(){return this.start.offset}get length(){return this.end.offset-this.start.offset}get[\"0\"](){return this.start.offset}get[\"1\"](){return this.end.offset}getText(e){return e.slice(this.start,this.end)}equals(e){return e.offset==this.offset&&e.length==this.length}};function Zt(s){let e;return s?(e=s.toIterable)?e.call(s):s:[]}function ue(s,e,t=1e5){let r=s;for(;r&&t>0;){if(r.match(e))return r;t--,r=r.prev}return null}function xe(s,e,t){t===void 0&&(t=0);for(var r=e?[t]:[],n=0;n<s.length;){var i=s.charCodeAt(n);(i===13||i===10)&&(i===13&&n+1<s.length&&s.charCodeAt(n+1)===10&&n++,r.push(t+n+1)),n++}return r}function qe(s){var e=s.start,t=s.end;return e.line>t.line||e.line===t.line&&e.character>t.character?new j(t,e):s instanceof j?s:new j(e,t)}function De(s){return s!=null&&typeof s.text==\"string\"&&s.range===void 0}function Ge(s){let e=s.split(/\\n/),t=[],r={indent:-1,children:[]},n=r,i,a=Date.now();for(let o=0,f=Zt(e),c=f.length;o<c;o++){let l=f[o];if(l.match(/^\\s*$/))continue;let p=l.match(/^\\t*/)[0].length;for(;r.indent>=p;)r=r.parent||n;if(i=l.match(/^(\\t*((?:export )?(?:static )?(?:extend )?)(class|tag|def|get|set|prop|attr) )(\\@?[\\w\\-\\$\\:]+(?:\\.[\\w\\-\\$]+)?)/),i){let u=i[3],h=i[4],T=r.name?r.name+\".\":\"\",v=i[2].trim().split(/\\s+/),A=\"\",k={start:{line:o,character:i[1].length},end:{line:o,character:i[0].length}},m={kind:u,ownName:h,name:T+h,span:k,indent:p,modifiers:v,children:[],parent:r==n?null:r,type:u,data:{},static:v.indexOf(\"static\")>=0,extends:v.indexOf(\"extend\")>=0};m.static&&(m.containerName=\"static\"),m.containerName=i[2]+i[3],u==\"tag\"&&(i=l.match(/\\<\\s+([\\w\\-\\$\\:]+(?:\\.[\\w\\-\\$]+)?)/))&&(m.superclass=i[1]),r.type==\"tag\"&&(A=\"```html\\n<\"+r.name+\" \"+h+\">\\n```\\n\",m.description={kind:\"markdown\",value:A}),r.children.push(m),r=m,t.push(m)}}return n.all=t,console.log(\"fast outline\",s.length,Date.now()-a),n}function we(s){let e;return s?(e=s.toIterable)?e.call(s):s:[]}var ve=[/^/,{token:\"@rematch\",next:\"@pop\"}],Ze={token:\"@rematch\",next:\"@pop\"},He={token:\"white.indent\",next:\"@>illegal_indent\"};function Ht(s,e=\"#\"){typeof s==\"string\"&&(s=s.split(\" \"));let t=s.slice().sort(function(r,n){return n.length-r.length});return t=t.map(function(r){let n=r.replace(/[.*+\\-?^${}()|[\\]\\\\]/g,\"\\\\$&\");return e.replace(\"#\",n)}),new RegExp(\"(?:\"+t.join(\"|\")+\")\")}function I(s,e,t,r={}){var n;s==null?s=He:s==1?s={next:\"@>\"}:s==2?s={next:\"@>_indent&-_indent\"}:typeof s==\"string\"&&(s={next:s}),e==-1&&(e=Ze),t==-1?t=Ze:t==0&&(r.comment==null?r.comment=!0:r.comment,t={}),s=Object.assign({token:\"white.tabs\"},s||{}),t=Object.assign({token:\"white.tabs\"},t||{}),e=Object.assign({token:\"@rematch\",next:\"@pop\"},e||{});let i={\"$1==$S2\t\":s,\"$1==$S2\":{cases:{\"$1==$S6\":t,\"@default\":{token:\"@rematch\",switchTo:\"@*$1\"}}},\"@default\":e};n=0;for(let o of[\"next\",\"switchTo\"]){let f=n++;s[o]&&s[o].indexOf(\"*\")==-1&&(s[o]+=\"*$1\")}let a=[/^(\\t*)(?=[^\\t\\n])/,{cases:i}];if(r.comment){let o={};for(let f=0,c=Object.keys(i),l=c.length,p,u;f<l;f++){p=c[f],u=i[p];let h=Object.assign({},u);!h.next&&!h.switchTo&&(h.next=\"@>_comment\"),o[p]=h}return[[/^(\\t*)(?=#\\s|#$)/,{cases:o}],a]}return a}var Te={root:[[/^@comment/,\"comment\",\"@>_comment\"],[/^(\\t+)(?=[^\\t\\n])/,{cases:{\"$1==$S2\t\":{token:\"white.indent\",next:\"@>_indent*$1\"},\"@default\":\"white.indent\"}}],\"block_\"],_comment:[[/^([\\t\\s\\n]*)$/,\"comment\"],[/^(\\t*)([\\S\\s]*)/,{cases:{\"$1~$S2\t*\":{token:\"comment\"},\"@default\":{token:\"@rematch\",next:\"@pop\"}}}],[/[\\S\\s]+/,\"comment\"]],illegal_indent:[I()],identifier_:[[/\\$\\w+\\$/,\"identifier.env\"],[/\\$\\d+/,\"identifier.special\"],[/\\#+@id/,\"identifier.symbol\"],[/\\\u00B6@id/,\"ivar\"],[/@id\\!?/,{cases:{this:\"this\",self:\"self\",\"@keywords\":\"keyword.$#\",\"$0~[A-Z].*\":\"identifier.uppercase.$F\",\"@default\":\"identifier.$F\"}}]],block_:[[/^(\\t+)(?=[\\r\\n]|$)/,\"white.tabs\"],\"class_\",\"tagclass_\",\"var_\",\"func_\",\"import_\",\"export_\",\"flow_\",\"for_\",\"try_\",\"catch_\",\"while_\",\"css_\",\"tag_\",\"do_\",\"block_comment_\",\"expr_\",[/[ ]+/,\"white\"],\"common_\"],indentable_:[I(\"@>_paren_indent&-_indent\",null,null),[/^(\\t+)(?=[\\r\\n]|$)/,\"white.tabs\"],\"whitespace\"],_indent:[I(2,-1,0),\"block_\"],_paren_indent:[I(2,-1,0),\"block_\",[/\\)|\\}|\\]/,\"@rematch\",\"@pop\"]],block:[I(\"@>\",-1,0),\"block_\"],bool_:[[/(true|false|yes|no|undefined|null)(?![\\:\\-\\w\\.\\_])/,\"boolean\"]],op_:[[/\\s+\\:\\s+/,\"operator.ternary\"],[/(@unspaced_ops)/,{cases:{\"@spread\":\"operator.spread\",\"@access\":\"operator.access\",\"@default\":\"operator\"}}],[/\\/(?!\\/)/,\"operator.math\"],[/\\&(?=[,\\)])/,\"operator.special.blockparam\"],[/(\\s*)(@symbols)(\\s*)/,{cases:{\"$2@assignments\":\"operator.assign\",\"$2@math\":\"operator.math\",\"$2@operators\":\"operator\",\"$2@logic\":\"operator.logic\",\"$2@access\":\"operator.access\",\"@default\":\"delimiter\"}}],[/\\&\\b/,\"operator\"]],keyword_:[[/new@B/,\"keyword.new\"],[/isa@B/,\"keyword.isa\"],[/is@B/,\"keyword.is\"],[/(switch|when|throw|continue|break|then|await|typeof|by)@B/,\"keyword.$1\"],[/delete@B/,\"keyword.delete\"],[/and@B|or@B/,\"operator.flow\"]],return_:[[/return@B/,\"keyword.new\"]],primitive_:[\"string_\",\"number_\",\"regexp_\",\"bool_\"],value_:[\"primitive_\",\"keyword_\",\"implicit_call_\",\"parens_\",\"key_\",\"access_\",\"identifier_\",\"array_\",\"object_\"],expr_:[\"comment_\",\"inline_var_\",\"return_\",\"value_\",\"tag_\",\"op_\",\"type_\",\"spread_\"],attr_expr_:[\"primitive_\",\"parens_\",\"access_\",\"identifier_\",\"array_\",\"object_\",\"tag_\",\"op_\"],access_:[[/(\\.\\.?)(@propid\\!?)/,{cases:{\"$2~[A-Z].*\":[\"operator.access\",\"accessor.uppercase\"],\"$2~#.*\":[\"operator.access\",\"accessor.symbol\"],\"@default\":[\"operator.access\",\"accessor\"]}}]],call_:[[/\\(/,\"(\",\"@call_body\"]],key_:[[/(\\#+@id)(\\:\\s*)/,[\"key.symbol\",\"operator.assign.key-value\"]],[/(@propid)(\\:\\s*)/,{cases:{\"@default\":[\"key\",\"operator.assign.key-value\"]}}]],implicit_call_:[[/(\\.\\.?)(@propid)@implicitCall/,{cases:{\"$2~[A-Z].*\":[\"operator.access\",\"accessor.uppercase\",\"@implicit_call_body\"],\"@default\":[\"operator.access\",\"accessor\",\"@implicit_call_body\"]}}],[/(@propid)@implicitCall/,{cases:{\"$2~[A-Z].*\":[\"identifier.uppercase\",\"@implicit_call_body\"],\"@default\":[\"identifier\",\"@implicit_call_body\"]}}]],implicit_call_body:[ve,[/\\)|\\}|\\]|\\>/,\"@rematch\",\"@pop\"],\"arglist_\",\"whitespace\"],arglist_:[\"do_\",\"expr_\",[/\\s*\\,\\s*/,\"delimiter.comma\"]],params_:[[/\\[/,\"array.[\",\"@array_var_body=decl-param\"],[/\\{/,\"object.{\",\"@object_body=decl-param\"],[/(@variable)/,\"identifier.decl-param\"],\"spread_\",\"type_\",[/\\s*\\=\\s*/,\"operator\",\"@var_value=\"],[/\\s*\\,\\s*/,\"separator\"]],object_:[[/\\{/,\"object.{\",\"@object_body\"]],parens_:[[/\\(/,\"parens.(\",\"@parens_body\"]],parens_body:[[/\\)/,\")\",\"@pop\"],\"indentable_\",\"arglist_\"],array_:[[/\\[/,\"array.[\",\"@array_body\"]],array_body:[[/\\]@implicitCall/,{token:\"]\",switchTo:\"@implicit_call_body=\"}],[/\\]/,\"]\",\"@pop\"],\"indentable_\",\"expr_\",[\",\",\"delimiter\"]],object_body:[[/\\}/,\"}\",\"@pop\"],[/(@id)(\\s*:\\s*)/,[\"key\",\"operator.assign.key-value\",\"@object_value\"]],[/(@id)/,\"identifier.$F\"],[/\\[/,\"[\",\"@object_dynamic_key=\"],[/\\s*=\\s*/,\"operator.assign\",\"@object_value=\"],[/:/,\"operator.assign.key-value\",\"@object_value=\"],[/\\,/,\"delimiter.comma\"],\"indentable_\",\"expr_\"],object_value:[ve,[/,|\\}|\\]|\\)/,\"@rematch\",\"@pop\"],\"expr_\"],object_dynamic_key:[[\"]\",\"]\",\"@pop\"],\"expr_\"],comment_:[[/#(\\s.*)?(\\n|$)/,\"comment\"]],block_comment_:[[/###/,\"comment.start\",\"@_block_comment\"]],_block_comment:[[/###/,\"comment.end\",\"@pop\"],[/[^#]+/,\"comment\"],[/#(?!##)/,\"comment\"]],try_:[[/try@B/,\"keyword.try\",\"@>_try&try\"]],catch_:[[/(catch\\s+)(?=@id(\\s|$))/,\"keyword.catch\",\"@catch_start&catch\"],[/catch@B/,\"keyword.catch\",\"@catch_start&catch\"]],catch_start:[[/@id/,\"identifier.decl-const\",{switchTo:\"@>_catch\"}],[/.?/,\"@rematch\",{switchTo:\"@>_catch\"}]],_catch:[I(\"@>block\",-1,0),\"block_\"],_try:[I(\"@>block\",-1,0),\"block_\"],do_:[[/do(?=\\()/,\"keyword.do\",\"@>do_start&do\"],[/do(?=\\s*\\|)/,\"keyword.do\",\"@>do_piped&do\"],[/do@B/,\"keyword.do\",\"@>_do&do\"]],do_start:[I(null,-1,-1),[/\\(/,\"(\",{switchTo:\"@_do_params\"}],[/./,\"@rematch\",{switchTo:\"@_do\"}]],do_piped:[I(null,-1,-1),[/\\s*\\|/,\"args.open\",{switchTo:\"@_do_piped_params\"}],[/./,\"@rematch\",{switchTo:\"@_do\"}]],_do_piped_params:[[/\\|/,\"args.close\",{switchTo:\"@_do\"}],\"params_\"],_do_params:[[/\\)/,\")\",{switchTo:\"@_do\"}],\"params_\"],_do:[I(2,-1,0),[/(\\}|\\)|\\])/,\"@rematch\",\"@pop\"],\"block_\"],class_:[[/(extend)(?=\\s+class )/,\"keyword.$1\"],[/(global)(?=\\s+class )/,\"keyword.$1\"],[/(class)(\\s)(@id)/,[\"keyword.$1\",\"white.$1name\",\"entity.name.class.decl-const\",\"@class_start=\"]],[/(class)(?=\\n)/,\"keyword.$1\",\"@>_class&class=\"]],class_start:[[/(\\s+\\<\\s+)(@id)/,[\"keyword.extends\",\"identifier.superclass\"]],[/@comment/,\"comment\"],[/^/,\"@rematch\",{switchTo:\"@>_class&class=\"}]],tagclass_:[[/(extend)(?=\\s+tag )/,\"keyword.$1\"],[/(global)(?=\\s+tag )/,\"keyword.$1\"],[/(tag)(\\s)(@constant)/,[\"keyword.tag\",\"white.tagname\",\"entity.name.component.local\",\"@tagclass_start=\"]],[/(tag)(\\s)(@id)/,[\"keyword.tag\",\"white.tagname\",\"entity.name.component.global\",\"@tagclass_start=\"]]],tagclass_start:[[/(\\s+\\<\\s+)(@id)/,[\"keyword.extends\",\"identifier.superclass\"]],[/@comment/,\"comment\"],[/^/,\"@rematch\",{switchTo:\"@>_tagclass&component=\"}]],import_:[[/(import)(?=\\s+['\"])/,\"keyword.import\",\"@>import_source\"],[/(import)(\\s+type)(?=\\s[\\w\\$\\@\\{])/,[\"keyword.import\",\"keyword.type\",\"@>import_body&-_imports=decl-import/part\"]],[/(import)@B/,\"keyword.import\",\"@>import_body&-_imports=decl-import/part\"]],import_body:[I(null,-1,0),[/(@esmIdentifier)( +from)/,[\"identifier.$F.default\",\"keyword.from\",{switchTo:\"@import_source\"}]],[/(\\*)(\\s+as\\s+)(@esmIdentifier)(\\s+from)/,[\"keyword.star\",\"keyword.as\",\"identifier.$F.ns\",\"keyword.from\",{switchTo:\"@import_source\"}]],[/(@esmIdentifier)(\\s*,\\s*)(\\*)(\\s+as\\s+)(@esmIdentifier)(from)/,[\"identifier.$F.default\",\"delimiter.comma\",\"keyword.star\",\"keyword.as\",\"identifier.$F.ns\",\"keyword.from\",{switchTo:\"@import_source\"}]],[/\\ *from/,\"keyword.from\",{switchTo:\"@import_source\"}],[/\\{/,\"specifiers.{\",\"@esm_specifiers/part\"],[/(@esmIdentifier)/,\"identifier.$F\",{switchTo:\"@/delim\"}],[/\\s*\\,\\s*/,\"delimiter.comma\",{switchTo:\"@/part\"}],\"comma_\",\"common_\"],import_source:[I(null,-1,0),[/[\"']/,\"path.open\",\"@_path=$#\"],ve],export_:[[/(export)( +)(default)@B/,[\"keyword.export\",\"white\",\"keyword.default\"]],[/(export)(?= +(let|const|var|class|tag)@B)/,\"keyword.export\"],[/(export)( +)(global)@B/,[\"keyword.export\",\"white\",\"keyword.global\"]],[/(export)(\\s+\\*\\s+)(from)@B/,[\"keyword.export\",\"operator.star\",\"keyword.from\",\"@>import_source\"]],[/(export)@B/,\"keyword.export\",\"@>export_body\"]],export_body:[I(null,-1,0),[/(\\*)(\\s+as\\s+)(@esmIdentifier)/,[\"keyword.star\",\"keyword.as\",\"identifier.const.export\"]],[/(@esmIdentifier)(\\s+as\\s+)(default)/,[\"alias\",\"keyword.as\",\"alias.default\"]],[/(@esmIdentifier)(\\s+as\\s+)(@esmIdentifier)/,[\"alias\",\"keyword.as\",\"identifier.const.export\"]],[/from/,\"keyword.from\",{switchTo:\"@import_source\"}],[/\\{/,\"{\",\"@esm_specifiers=export/part\"],[/(@esmIdentifier)/,\"identifier.const.export\"],[/\\*/,\"operator.star\"],\"comma_\",\"common_\"],esm_specifiers:[[/\\}/,\"}\",\"@pop\"],[/(@esmIdentifier)(\\s+as\\s+)(@esmIdentifier)/,[\"alias\",\"keyword.as\",\"identifier.const.$F\",{switchTo:\"@/delim\"}]],[/@esmIdentifier/,{cases:{\"$/==part\":{token:\"identifier.const.$S4\",switchTo:\"@/delim\"},\"@default\":{token:\"invalid\"}}}],[/\\s*\\,\\s*/,\"delimiter.comma\",{switchTo:\"@/part\"}],\"whitespace\"],_path:[[/[^\"'\\`\\{\\\\]+/,\"path\"],[/@escapes/,\"path.escape\"],[/\\./,\"path.escape.invalid\"],[/\\{/,\"invalid\"],[/[\"'`]/,{cases:{\"$#==$F\":{token:\"path.close\",next:\"@pop\"},\"@default\":\"path\"}}]],member_:[[/(constructor)@B/,\"entity.name.constructor\",\"@>def_params&def/def\"],[/(def|get|set)(\\s)(@defid)/,[\"keyword.$1\",\"white.entity\",\"entity.name.$1\",\"@>def_params&$1/$1\"]],[/(def|get|set)(\\s)(\\[)/,[\"keyword.$1\",\"white.entity\",\"$$\",\"@>def_dynamic_name/$1\"]]],func_:[[/export(?=\\s+(get|set|def|global) )/,\"keyword.export\"],[/global(?=\\s+(get|set|def) )/,\"keyword.global\"],[/(def)(\\s)(@id)(\\.)(@defid)/,[\"keyword.$1\",\"white.entity\",\"identifier.target\",\"operator\",\"entity.name.def\",\"@>def_params&$1/$1\"]],[/(def)(\\s)(@defid)/,[\"keyword.$1\",\"white.entity\",\"entity.name.function.decl-const-func\",\"@>def_params&$1/$1\"]]],flow_:[[/(if|else|elif|unless)(?=\\s|$)/,[\"keyword.$1\",\"@flow_start=$1\"]]],flow_start:[I({switchTo:\"@>_flow&$F\"},-1,-1),[/[ \\t]+/,\"white\"],\"expr_\"],for_:[[/for(?: own)?@B/,\"keyword.$#\",\"@for_start&forscope=decl-for\"]],while_:[[/(while|until)@B/,\"keyword.$#\",\"@>while_body\"]],while_body:[I(2,-1,0),\"block_\"],for_start:[I({switchTo:\"@>for_body\"},-1,-1),[/\\[/,\"array.[\",\"@array_var_body\"],[/\\{/,\"object.{\",\"@object_body\"],[/(@variable)/,\"identifier.$F\"],[/(\\s*\\,\\s*)/,\"separator\",\"@=decl-for-index\"],[/\\s(in|of)@B/,\"keyword.$1\",{switchTo:\"@>for_source=\"}],[/[ \\t]+/,\"white\"],\"type_\"],for_source:[I({switchTo:\"@>for_body\"},-1,{switchTo:\"@for_body\"}),\"expr_\",[/[ \\t]+/,\"white\"]],for_body:[I(2,-1,0),\"block_\"],decorator_:[[/(@decid)(\\()/,[\"decorator\",\"$2\",\"@_decorator_params\"]],[/(@decid)/,\"decorator\"]],_decorator_params:[[/\\)/,\")\",\"@pop\"],\"params_\"],field_:[[/((?:lazy )?)((?:static )?)(const|let|attr)(?=\\s|$)/,[\"keyword.lazy\",\"keyword.static\",\"keyword.$1\",\"@_vardecl=field-$3\"]],[/(static\\s+)(?=@fieldid)/,\"keyword.static\"],[/(@fieldid)(?=$)/,\"entity.name.field\"],[/(@fieldid)/,[\"entity.name.field\",\"@_field_1\"]]],_field_1:[I(null,-1,-1),\"type_\",[/(\\s*=)(?!\\=)/,[\"operator.assign\",\"@>_field_value&field\"]],[/(\\s*(?:\\@)set\\s*)/,[\"keyword.spy\",\"@>_def&spy\"]]],_field_value:[I(2,-1,0),\"block_\",[/(\\s*(?:\\@)set\\s*)/,[\"@rematch\",\"@pop\"]]],var_:[[/((?:export )?)(const|let)(?=\\s[\\[\\{\\$a-zA-Z]|\\s*$)/,[\"keyword.export\",\"keyword.$1\",\"@_vardecl=decl-$2\"]],[/((?:export )?)(const|let)(?=\\s|$)/,[\"keyword.export\",\"keyword.$1\"]]],inline_var_:[[/(const|let)(?=\\s[\\[\\{\\$a-zA-Z]|\\s*$)/,[\"keyword.$1\",\"@inline_var_body=decl-$1\"]]],string_:[[/\"\"\"/,\"string\",'@_herestring=\"\"\"'],[/'''/,\"string\",\"@_herestring='''\"],[/[\"'`]/,\"string.open\",\"@_string=$#\"]],number_:[[/0[xX][0-9a-fA-F_]+/,\"number.hex\"],[/0[b][01_]+/,\"number.binary\"],[/0[o][0-9_]+/,\"number.octal\"],[/(\\d+)([a-z]+|\\%)/,[\"number\",\"unit\"]],[/(\\d*\\.\\d+(?:[eE][\\-+]?\\d+)?)([a-z]+|\\%)/,[\"number.float\",\"unit\"]],[/\\d+[eE]([\\-+]?\\d+)?/,\"number.float\"],[/\\d[\\d_]*\\.\\d[\\d_]*([eE][\\-+]?\\d+)?/,\"number.float\"],[/\\d[\\d_]*/,\"number.integer\"],[/0[0-7]+(?!\\d)/,\"number.octal\"],[/\\d+/,\"number\"]],_string:[[/[^\"'\\`\\{\\\\]+/,\"string\"],[/@escapes/,\"string.escape\"],[/\\./,\"string.escape.invalid\"],[/\\{/,{cases:{\"$F=='\":\"string\",\"@default\":{token:\"string.bracket.open\",next:\"@interpolation_body\"}}}],[/[\"'`]/,{cases:{\"$#==$F\":{token:\"string.close\",next:\"@pop\"},\"@default\":\"string\"}}],[/#/,\"string\"]],_herestring:[[/(\"\"\"|''')/,{cases:{\"$1==$F\":{token:\"string\",next:\"@pop\"},\"@default\":\"string\"}}],[/[^#\\\\'\"\\{]+/,\"string\"],[/['\"]+/,\"string\"],[/@escapes/,\"string.escape\"],[/\\./,\"string.escape.invalid\"],[/\\{/,{cases:{'$F==\"\"\"':{token:\"string\",next:\"@interpolation_body\"},\"@default\":\"string\"}}],[/#/,\"string\"]],interpolation_body:[[/\\}/,\"string.bracket.close\",\"@pop\"],\"expr_\"],_class:[I(He,-1,0),\"css_\",\"member_\",\"comment_\",\"decorator_\",[/(get|set|def|static|prop|attr)@B/,\"keyword.$0\"],\"field_\",\"common_\"],_tagclass:[\"_class\",[/(?=\\<self)/,\"entity.name.def.render\",\"@_render&def\"]],def_params:[[/\\(/,\"(\",\"@def_parens\"],[/^/,\"@rematch\",{switchTo:\"@_def\"}],[/do@B/,\"keyword.do\",{switchTo:\"@_def\"}],\"params_\",[/@comment/,\"comment\"]],def_parens:[[/\\)/,\")\",\"@pop\"],\"params_\"],def_dynamic_name:[[\"]\",{token:\"square.close\",switchTo:\"@def_params&$/\"}],\"expr_\"],_render:[I(2,-1,-1),\"block_\"],_def:[I(2,-1,0),\"block_\"],_flow:[I(2,-1,0),\"block_\"],_varblock:[I(1,-1,-1),[/\\[/,\"array.[\",\"@array_var_body\"],[/\\{/,\"object.{\",\"@object_body\"],[/(@variable)/,\"identifier.$F\"],[/\\s*\\,\\s*/,\"separator\"],[/(\\s*\\=\\s*)(?=(for|while|until|if|unless|try)\\s)/,\"operator\",\"@pop\"],[/(\\s*\\=\\s*)/,\"operator\",\"@var_value=\"],\"type_\",[/#(\\s.*)?\\n?$/,\"comment\"]],_vardecl:[I(null,-1,-1),[/\\[/,\"array.[\",\"@array_var_body\"],[/\\{/,\"object.{\",\"@object_body\"],[/(@variable)(?=\\n|,|$)/,\"identifier.$F\",\"@pop\"],[/(@variable)/,\"identifier.$F\"],[/(\\s*\\=\\s*)/,\"operator.declval\",{switchTo:\"@var_value&value=\"}],\"type_\"],array_var_body:[[/\\]/,\"]\",\"@pop\"],[/\\{/,\"object.{\",\"@object_body\"],[/\\[/,\"array.[\",\"@array_var_body\"],\"spread_\",[/(@variable)/,\"identifier.$F\"],[/(\\s*\\=\\s*)/,\"operator.assign\",\"@array_var_body_value=\"],[\",\",\"delimiter\"]],array_var_body_value:[[/(?=,|\\)|]|})/,\"delimiter\",\"@pop\"],\"expr_\"],inline_var_body:[[/\\[/,\"array.[\",\"@array_var_body\"],[/\\{/,\"object.{\",\"@object_body\"],[/(@variable)/,\"identifier.$F\"],[/(\\s*\\=\\s*)/,\"operator\",\"@pop\"],\"type_\"],var_value:[[/(?=,|\\)|]|})/,\"delimiter\",\"@pop\"],I({switchTo:\"@>block\"},-1,-1),\"block_\"],common_:[[/^(\\t+)(?=\\n|$)/,\"white.tabs\"],\"whitespace\"],comma_:[[/\\s*,\\s*/,\"delimiter.comma\"]],spread_:[[/\\.\\.\\./,\"operator.spread\"]],type_:[[/\\\\/,\"@rematch\",\"@_type&-_type/0\"]],_type:[I(-1,-1,-1),[/\\\\/,\"delimiter.type.prefix\"],[/\\[/,\"delimiter.type\",\"@/]\"],[/\\(/,\"delimiter.type\",\"@/)\"],[/\\{/,\"delimiter.type\",\"@/}\"],[/\\</,\"delimiter.type\",\"@/>\"],[/\\|/,\"delimiter.type.union\"],[/\\,|\\s|\\=|\\./,{cases:{\"$/==0\":{token:\"@rematch\",next:\"@pop\"},\"@default\":\"type\"}}],[/[\\]\\}\\)\\>]/,{cases:{\"$#==$/\":{token:\"delimiter.type\",next:\"@pop\"},\"@default\":{token:\"@rematch\",next:\"@pop\"}}}],[/[\\w\\-\\$]+/,\"type\"]],css_:[[/global(?=\\s+css@B)/,\"keyword.$#\"],[/css(?:\\s+)?/,\"keyword.css\",\"@>css_selector&rule-_sel\"]],sel_:[[/(\\%)((?:@id)?)/,[\"style.selector.mixin.prefix\",\"style.selector.mixin\"]],[/(\\@)(\\.{0,2}[\\w\\-\\<\\>\\!]*\\+?)/,\"style.selector.modifier\"],[/(\\@)(\\.{0,2}[\\w\\-\\<\\>\\!]*)/,\"style.selector.modifier\"],[/\\.([\\w\\-]+)/,\"style.selector.class-name\"],[/\\#([\\w\\-]+)/,\"style.selector.id\"],[/([\\w\\-]+)/,\"style.selector.element\"],[/(>+|~|\\+)/,\"style.selector.operator\"],[/(\\*+)/,\"style.selector.element.any\"],[/(\\$)((?:@id)?)/,[\"style.selector.reference.prefix\",\"style.selector.reference\"]],[/\\&/,\"style.selector.context\"],[/\\(/,\"delimiter.selector.parens.open\",\"@css_selector_parens\"],[/\\[/,\"delimiter.selector.attr.open\",\"@css_selector_attr\"],[/\\s+/,\"white\"],[/,/,\"style.selector.delimiter\"],[/#(\\s.*)?\\n?$/,\"comment\"]],css_props:[I(null,-1,0),[/(?=@cssPropertyKey2)/,\"\",\"@css_property&-_styleprop-_stylepropkey\"],[/#(\\s.*)?\\n?$/,\"comment\"],[/(?=[\\%\\*\\w\\&\\$\\>\\.\\[\\@\\!]|\\#[\\w\\-])/,\"\",\"@>css_selector&rule-_sel\"],[/\\s+/,\"white\"]],css_selector:[I({switchTo:\"@css_props\"},-1,{token:\"@rematch\",switchTo:\"@css_props&_props\"}),[/(\\}|\\)|\\])/,\"@rematch\",\"@pop\"],[/(?=\\s*@cssPropertyKey2)/,\"\",{switchTo:\"@css_props&_props\"}],[/\\s*#\\s/,\"@rematch\",{switchTo:\"@css_props&_props\"}],\"sel_\"],css_inline:[[/\\]/,\"style.close\",\"@pop\"],[/(?=@cssPropertyKey2)/,\"\",\"@css_property&-_styleprop-_stylepropkey\"],[/(?=@cssPropertyPath\\])/,\"\",\"@css_property&-_styleprop-_stylepropkey\"]],css_selector_parens:[[/\\)/,\"delimiter.selector.parens.close\",\"@pop\"],\"sel_\"],css_selector_attr:[[/\\]/,\"delimiter.selector.parens.close\",\"@pop\"],\"sel_\"],css_property:[I(null,-1,-1),[/\\]/,\"@rematch\",\"@pop\"],[/(\\d+)(@id)/,[\"style.property.unit.number\",\"style.property.unit.name\"]],[/((--|\\$)@id)/,\"style.property.var\"],[/(-*@id)/,\"style.property.name\"],[/@cssModifier/,\"style.property.modifier\"],[/(\\@+|\\.+)(@id\\-?)/,[\"style.property.modifier.start\",\"style.property.modifier\"]],[/\\+(@id)/,\"style.property.scope\"],[/\\s*([\\:]\\s*)(?=@br|$)/,\"style.property.operator\",{switchTo:\"@>css_multiline_value&_stylevalue\"}],[/\\s*([\\:]\\s*)/,\"style.property.operator\",{switchTo:\"@>css_value&_stylevalue\"}]],css_value_:[[/(x?xs|sm\\-?|md\\-?|lg\\-?|xx*l|\\dxl|hg|x+h)\\b/,\"style.value.size\"],[/\\#[0-9a-fA-F]+/,\"style.value.color.hex\"],[/((--|\\$)@id)/,\"style.value.var\"],[/(@optid)(\\@+|\\.+)(@optid)/,[\"style.property.name\",\"style.property.modifier.prefix\",\"style.property.modifier\"]],\"op_\",\"string_\",\"number_\",\"comment_\",[/\\s+/,\"style.value.white\"],[/\\(/,\"delimiter.style.parens.open\",\"@css_expressions\"],[/\\{/,\"delimiter.style.curly.open\",\"@css_interpolation&-_styleinterpolation\"],[/(@id)/,\"style.value\"]],css_value:[I({switchTo:\"@>css_multiline_value\"},-1,-1),[/@cssPropertyKey2/,\"@rematch\",\"@pop\"],[/;/,\"style.delimiter\",\"@pop\"],[/(\\}|\\)|\\])/,\"@rematch\",\"@pop\"],\"css_value_\"],css_multiline_value:[I(null,-1,0),[/@cssPropertyKey2/,\"invalid\"],\"css_value_\"],css_expressions:[[/\\)/,\"delimiter.style.parens.close\",\"@pop\"],[/\\(/,\"delimiter.style.parens.open\",\"@css_expressions\"],\"css_value\"],css_interpolation:[[/\\}/,\"delimiter.style.curly.close\",\"@pop\"],\"expr_\"],expressions:[[/\\,/,\"delimiter.comma\"]],whitespace:[[/[\\r\\n]+/,\"br\"],[/[ \\t\\r\\n]+/,\"white\"]],space:[[/[ \\t]+/,\"white\"]],tag_:[[/(\\s*)(<)(?=\\.)/,[\"white\",\"tag.open\",\"@_tag/flag\"]],[/(\\s*)(<)(?=\\w|\\{|\\[|\\%|\\#|>)/,[\"white\",\"tag.open\",\"@_tag/name\"]]],tag_content:[I(2,-1,0),[/\\)|\\}|\\]/,\"@rematch\",\"@pop\"],\"common_\",\"flow_\",\"var_\",\"for_\",\"css_\",\"expr_\",\"do_\"],tag_children:[],_tag:[[/\\/>/,\"tag.close\",\"@pop\"],[/>/,\"tag.close\",{switchTo:\"@>tag_content=&-_tagcontent\"}],[/>/,\"tag.close\",\"@pop\"],[/(\\-?\\d+)/,\"tag.$S3\"],[/(\\%)(@id)/,[\"tag.mixin.prefix\",\"tag.mixin\"]],[/\\#@id/,\"tag.id\"],[/\\./,{cases:{\"$/==event\":{token:\"tag.event-modifier.start\",switchTo:\"@/event-modifier\"},\"$/==event-modifier\":{token:\"tag.event-modifier.start\",switchTo:\"@/event-modifier\"},\"$/==modifier\":{token:\"tag.modifier.start\",switchTo:\"@/modifier\"},\"$/==rule\":{token:\"tag.rule-modifier.start\",switchTo:\"@/rule-modifier\"},\"$/==rule-modifier\":{token:\"tag.rule-modifier.start\",switchTo:\"@/rule-modifier\"},\"@default\":{token:\"tag.flag.start\",switchTo:\"@/flag\"}}}],[/(\\$@id)/,{cases:{\"$/==name\":\"tag.reference\",\"@default\":\"tag.$/\"}}],[/\\{/,\"tag.$/.interpolation.open\",\"@_tag_interpolation\"],[/\\[/,\"style.open\",\"@css_inline\"],[/(\\s*\\=\\s*)/,\"operator.equals.tagop.tag-$/\",\"@_tag_value&-value\"],[/\\:/,{token:\"tag.event.start\",switchTo:\"@/event\"}],\"tag_event_\",[/(\\-?@tagIdentifier)(\\:@id)?/,{cases:{\"$/==attr\":{token:\"@rematch\",next:\"@_tag_attr&-_tagattr\"},\"@default\":{token:\"tag.$/\"}}}],[/\\(/,{token:\"tag.$/.parens.open\",next:\"@_tag_parens/0\"}],[/\\s+/,{token:\"tag.white\",switchTo:\"@/attr\"}],\"comment_\"],tag_event_:[[/(?=\\@@optid)/,\"\",\"@_tag_event&-_listener\"]],_tag_part:[[/\\)|\\}|\\]|\\>/,\"@rematch\",\"@pop\"]],_tag_event:[\"_tag_part\",[/(\\@)(@optid)/,[\"tag.event.start\",\"tag.event.name\"]],[/(\\.)(@optid)/,[\"tag.event-modifier.start\",\"tag.event-modifier.name\"]],[/\\(/,{token:\"tag.$/.parens.open\",next:\"@_tag_parens/0\"}],[/(\\s*\\=\\s*)/,\"operator.equals.tagop.tag-$/\",\"@_tag_value&handler\"],[/\\s+/,\"@rematch\",\"@pop\"]],tag_attr_:[[/(?=@tagIdentifier(\\:@id)?)/,\"\",\"@_tag_attr&-_attribute\"]],_tag_attr:[\"_tag_part\",[/(\\-?@tagIdentifier)(\\:@id)?/,\"tag.attr\"],[/\\.(@optid)/,\"tag.event-modifierzz\"],[/\\(/,{token:\"tag.parens.open.$/\",next:\"@_tag_parens/0\"}],[/(\\s*\\=\\s*)/,\"operator.equals.tagop.tag-$/\",\"@_tag_value&-tagattrvalue\"],[/\\s+/,\"@rematch\",\"@pop\"]],_tag_interpolation:[[/\\}/,\"tag.$/.interpolation.close\",\"@pop\"],\"expr_\",[/\\)|\\]/,\"invalid\"]],_tag_parens:[[/\\)/,\"tag.$/.parens.close\",\"@pop\"],\"arglist_\",[/\\]|\\}/,\"invalid\"]],_tag_value:[[/(?=(\\/?\\>|\\s))/,\"\",\"@pop\"],\"attr_expr_\"],regexp_:[[/\\/(?!\\ )(?=([^\\\\\\/]|\\\\.)+\\/)/,{token:\"regexp.slash.open\",bracket:\"@open\",next:\"@_regexp\"}],[/\\/\\/\\//,{token:\"regexp.slash.open\",bracket:\"@open\",next:\"@_hereregexp\"}],[/(\\/)(\\/)/,[\"regexp.slash.open\",\"regexp.slash.close\"]]],_regexp:[[/(\\{)(\\d+(?:,\\d*)?)(\\})/,[\"regexp.escape.control\",\"regexp.escape.control\",\"regexp.escape.control\"]],[/(\\[)(\\^?)(?=(?:[^\\]\\\\\\/]|\\\\.)+)/,[\"regexp.escape.control\",{token:\"regexp.escape.control\",next:\"@_regexrange\"}]],[/(\\()(\\?:|\\?=|\\?!)/,[\"regexp.escape.control\",\"regexp.escape.control\"]],[/[()]/,\"regexp.escape.control\"],[/@regexpctl/,\"regexp.escape.control\"],[/[^\\\\\\/]/,\"regexp\"],[/@regexpesc/,\"regexp.escape\"],[/\\\\:/,\"regexp.escape\"],[/\\\\\\./,\"regexp.invalid\"],[/(\\/)(\\w+)/,[{token:\"regexp.slash.close\"},{token:\"regexp.flags\",next:\"@pop\"}]],[\"/\",{token:\"regexp.slash.close\",next:\"@pop\"}],[/./,\"regexp.invalid\"]],_regexrange:[[/-/,\"regexp.escape.control\"],[/\\^/,\"regexp.invalid\"],[/@regexpesc/,\"regexp.escape\"],[/[^\\]]/,\"regexp\"],[/\\]/,\"regexp.escape.control\",\"@pop\"]],_hereregexp:[[/[^\\\\\\/#]/,\"regexp\"],[/\\\\./,\"regexp\"],[/#.*$/,\"comment\"],[\"///[igm]*\",\"regexp\",\"@pop\"],[/\\//,\"regexp\"],\"comment_\"]};function me(s){let e=[\"$S1\",\"$S2\",\"$S3\",\"$S4\",\"$S5\",\"$S6\"];if(s.match(/\\@(pop|push|popall)/)||(s[0]==\"@\"&&(s=s.slice(1)),s.indexOf(\".\")>=0))return s;s=he(s),s[0]==\">\"&&(e[1]=\"$S6\t\",s=s.slice(1));for(let t=0,r=we(s.split(/(?=[\\/\\&\\=\\*])/)),n=r.length;t<n;t++){let i=r[t];i[0]==\"&\"?i[1]==\"-\"||i[1]==\"_\"?e[2]=\"$S3\"+i.slice(1):e[2]=\"$S3-\"+i.slice(1):i[0]==\"+\"?e[3]=\"$S4-\"+i.slice(1):i[0]==\"=\"?e[3]=i.slice(1):i[0]==\"/\"?e[4]=i.slice(1):i[0]==\"*\"?e[5]=i.slice(1):e[0]=i}return e.join(\".\")}function he(s){let e=s;return s=s.replace(\"$/\",\"$S5\"),s=s.replace(\"$F\",\"$S4\"),s=s.replace(\"$&\",\"$S3\"),s=s.replace(\"$I\",\"$S2\"),s=s.replace(\"$T\",\"$S2\"),s}function Se(s,e){if(typeof s==\"string\"&&(s={token:s}),s&&s.token!=null)s.token=he(s.token),typeof e==\"string\"?s.next=e:e&&Object.assign(s,e),s.next&&(s.next=me(s.next)),s.switchTo&&(s.switchTo=me(s.switchTo));else if(s&&s.cases){let t={};for(let r=s.cases,n=0,i=Object.keys(r),a=i.length,o,f;n<a;n++){o=i[n],f=r[o];let c=he(o);t[c]=Se(f)}s.cases=t}else if(s instanceof Array){let t=[],r=null;for(let n=0,i=we(s),a=i.length;n<a;n++){let o=i[n];o[0]==\"@\"&&n==s.length-1&&r&&(o={next:o}),typeof o==\"object\"?o.token!=null||o.cases?t.push(r=Object.assign({},o)):Object.assign(r,o):typeof o==\"string\"&&t.push(r={token:he(o)})}s=t}if(s instanceof Array)for(let t=0,r=we(s),n=r.length;t<n;t++){let i=r[t];i.token&&i.token.indexOf(\"$$\")>=0&&(i.token=i.token.replace(\"$$\",\"$\"+(t+1))),i.next&&(i.next=me(i.next)),i.switchTo&&(i.switchTo=me(i.switchTo))}return s}for(let s=0,e=Object.keys(Te),t=e.length,r,n;s<t;s++){r=e[s],n=Te[r];let i=0;for(;i<n.length;){let a=n[i];if(a[0]instanceof Array){n.splice(i,1,...a);continue}else typeof a==\"string\"?n[i]={include:a}:a[1]instanceof Array?a[1]=Se(a[1]):a instanceof Array&&a.splice(1,2,Se(a[1],a[2]));i++}}var ne={defaultToken:\"invalid\",ignoreCase:!1,tokenPostfix:\"\",brackets:[{open:\"{\",close:\"}\",token:\"bracket.curly\"},{open:\"[\",close:\"]\",token:\"bracket.square\"},{open:\"(\",close:\")\",token:\"bracket.parenthesis\"}],keywords:[\"def\",\"and\",\"or\",\"is\",\"isnt\",\"not\",\"on\",\"yes\",\"@\",\"no\",\"off\",\"true\",\"false\",\"null\",\"this\",\"self\",\"as\",\"new\",\"delete\",\"typeof\",\"in\",\"instanceof\",\"return\",\"throw\",\"break\",\"continue\",\"debugger\",\"if\",\"elif\",\"else\",\"switch\",\"for\",\"while\",\"do\",\"try\",\"catch\",\"finally\",\"class\",\"extends\",\"super\",\"undefined\",\"then\",\"unless\",\"until\",\"loop\",\"of\",\"by\",\"when\",\"tag\",\"prop\",\"attr\",\"export\",\"import\",\"extend\",\"var\",\"let\",\"const\",\"require\",\"isa\",\"await\"],boolean:[\"true\",\"false\",\"yes\",\"no\",\"undefined\",\"null\"],operators:[\"=\",\"!\",\"~\",\"?\",\":\",\"!!\",\"??\",\"&\",\"|\",\"^\",\"%\",\"<<\",\"!&\",\">>\",\">>>\",\"+=\",\"-=\",\"*=\",\"/=\",\"&=\",\"|=\",\"?=\",\"??=\",\"^=\",\"%=\",\"~=\",\"<<=\",\">>=\",\">>>=\",\"..\",\"...\",\"||=\",\"&&=\",\"**=\",\"**\",\"|=?\",\"~=?\",\"^=?\",\"=?\",\"and\",\"or\"],assignments:[\"=\",\"|=?\",\"~=?\",\"^=?\",\"=?\",\"^=\",\"%=\",\"~=\",\"<<=\",\">>=\",\">>>=\",\"||=\",\"&&=\",\"?=\",\"??=\",\"+=\",\"-=\",\"*=\",\"/=\",\"&=\",\"|=\",\"**=\"],logic:[\">\",\"<\",\"==\",\"<=\",\">=\",\"!=\",\"&&\",\"||\",\"===\",\"!==\"],ranges:[\"..\",\"...\"],spread:[\"...\"],dot:[\".\"],access:[\".\",\"..\"],math:[\"+\",\"-\",\"*\",\"/\",\"++\",\"--\"],unspaced_ops:Ht(\"... . .. + * ++ --\"),comment:/#(\\s.*)?(\\n|$)/,symbols:/[=><!~?&%|+\\-*\\^,]+/,escapes:/\\\\(?:[abfnrtv\\\\\"'$]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,postaccess:/(:(?=\\w))?/,ivar:/\\@[a-zA-Z_]\\w*/,B:/(?=\\s|$)/,br:/[\\r\\n]+/,constant:/[A-Z][\\w\\$]*(?:\\-+[\\w\\$]+)*/,id:/[A-Za-z_\\$][\\w\\$]*(?:\\-+[\\w\\$]+)*\\??/,plainid:/[A-Za-z_\\$][\\w\\$]*(?:\\-+[\\w\\$]+)*\\??/,fieldid:/[\\@\\#]*@plainid/,propid:/[\\@\\#]*@plainid/,defid:/[\\@\\#]*@plainid/,decid:/\\@@plainid/,symid:/\\#+@plainid/,symref:/\\#\\#@plainid/,optid:/(?:@id)?/,esmIdentifier:/[A-Za-z_\\$\\@][\\w\\$]*(?:\\-+[\\w\\$]+)*\\??/,propertyPath:/(?:[A-Za-z_\\$][A-Za-z\\d\\-\\_\\$]*\\.)?(?:[A-Za-z_\\$][A-Za-z\\d\\-\\_\\$]*)/,tagNameIdentifier:/(?:[\\w\\-]+\\:)?\\w+(?:\\-\\w+)*/,variable:/[\\w\\$]+(?:-[\\w\\$]*)*\\??/,varKeyword:/var|let|const/,tagIdentifier:/-*[a-zA-Z][\\w\\-]*/,implicitCall:/(?!\\s(?:and|or|is|isa)\\s)(?=\\s[\\w\\'\\\"\\/\\[\\{])/,cssModifier:/(?:\\@+[\\<\\>\\!]?[\\w\\-]+\\+?|\\.+@id\\-?)/,cssPropertyPath:/[\\@\\.]*[\\w\\-\\$]+(?:[\\@\\.]+[\\w\\-\\$]+)*/,cssPropertyKey:/[\\@\\.]*[\\w\\-\\$]+(?:[\\@\\.]+[\\w\\-\\$]+)*(?:\\s*\\:)/,cssVariable:/(?:--|\\$)[\\w\\-\\$]+/,cssPropertyName:/[\\w\\-\\$]+/,cssPropertyKey2:/(?:@cssPropertyName(?:@cssModifier)*|@cssModifier+)(?:\\s*\\:)/,cssUpModifier:/\\.\\.[\\w\\-\\$]+/,cssIsModifier:/\\.[\\w\\-\\$]+/,regEx:/\\/(?!\\/\\/)(?:[^\\/\\\\]|\\\\.)*\\/[igm]*/,regexpctl:/[(){}\\[\\]\\$\\^|\\-*+?\\.]/,regexpesc:/\\\\(?:[bBdDfnrstvwWn0\\\\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,tokenizer:Te};var H;(function(s){s[s.None=0]=\"None\",s[s.Open=1]=\"Open\",s[s.Close=-1]=\"Close\"})(H||(H={}));function Wt(s){return Array.isArray(s)}function We(s){return!Wt(s)}function Ce(s){return typeof s==\"string\"}function Ue(s){return!Ce(s)}function Je(s){return!s}function U(s,e){return s.ignoreCase&&e?e.toLowerCase():e}function $e(s){return s.replace(/[&<>'\"_]/g,\"-\")}function Xe(s,e){console.log(`${s.languageId}: ${e}`)}function O(s,e){return new Error(`${s.languageId}: ${e}`)}var Qe={};function Ut(s){let e=[],t=0,r=s.length,n=\"\",i=0;for(;t<r;){let a=s[t++];if(a==\"$\"){let o=s[t++];if(o==\"$\"){n+=\"$\";continue}n&&e.push(n),n=\"\",o==\"#\"?e.push(0):o==\"S\"?e.push(parseInt(s[t++])+100):e.push(parseInt(o)+1)}else n+=a}return n&&e.push(n),Qe[s]=e,e}function q(s,e,t,r,n){let i=null,a=Qe[e]||Ut(e),o=\"\";for(let f=0;f<a.length;f++){let c=a[f];typeof c==\"string\"?o+=c:c>100?(i===null&&(i=n.split(\".\")),o+=i[c-101]||\"\"):c===100?o+=n:c===0?o+=t:c>0&&(o+=r[c-1])}return o}var Ie={};function de(s,e){let t=e;if(Ie[t])return s.tokenizer[Ie[t]];for(;t&&t.length>0;){let r=s.tokenizer[t];if(r)return Ie[e]=t,r;let n=t.lastIndexOf(\".\");n<0?t=null:t=t.substr(0,n)}return null}function Ye(s,e){let t=e;for(;t&&t.length>0;){if(s.stateNames[t])return!0;let n=t.lastIndexOf(\".\");n<0?t=null:t=t.substr(0,n)}return!1}function Jt(s,e){if(!e||!Array.isArray(e))return!1;for(let t of e)if(!s(t))return!1;return!0}function et(s,e){return typeof s==\"boolean\"?s:e}function tt(s,e){return typeof s==\"string\"?s:e}function Xt(s){let e={};for(let t of s)e[t]=!0;return e}function rt(s,e=!1){e&&(s=s.map(function(r){return r.toLowerCase()}));let t=Xt(s);return e?function(r){return t[r.toLowerCase()]!==void 0&&t.hasOwnProperty(r.toLowerCase())}:function(r){return t[r]!==void 0&&t.hasOwnProperty(r)}}function Ae(s,e){let t=0;for(;e.indexOf(\"@\")>=0&&t<5;)t++,e=e.replace(/@(\\w+)/g,function(r,n){let i=\"\";if(typeof s[n]==\"string\")i=s[n];else if(s[n]&&s[n]instanceof RegExp)i=s[n].source;else throw s[n]===void 0?O(s,\"language definition does not contain attribute '\"+n+\"', used at: \"+e):O(s,\"attribute reference '\"+n+\"' must be a string, used at: \"+e);return Je(i)?\"\":\"(?:\"+i+\")\"});return new RegExp(e,s.ignoreCase?\"i\":\"\")}function Qt(s,e,t,r){if(r<0)return s;if(r<e.length)return e[r];if(r>=100){r=r-100;let n=t.split(\".\");if(n.unshift(t),r<n.length)return n[r]}return null}function Yt(s,e,t,r){let n=-1,i=t,a=t.match(/^\\$(([sS]?)(\\d\\d?)|#)(.*)$/);a&&(a[3]&&(n=parseInt(a[3]),a[2]&&(n=n+100)),i=a[4]);let o=\"~\",f=i;!i||i.length===0?(o=\"!=\",f=\"\"):/^\\w*$/.test(f)?o=\"==\":(a=i.match(/^(@|!@|~|!~|==|!=)(.*)$/),a&&(o=a[1],f=a[2]));let c;if((o===\"~\"||o===\"!~\")&&/^(\\w|\\|)*$/.test(f)){let l=rt(f.split(\"|\"),s.ignoreCase);c=function(p){return o===\"~\"?l(p):!l(p)}}else if(o===\"@\"||o===\"!@\"){let l=s[f];if(!l)throw O(s,\"the @ match target '\"+f+\"' is not defined, in rule: \"+e);if(!Jt(function(u){return typeof u==\"string\"},l))throw O(s,\"the @ match target '\"+f+\"' must be an array of strings, in rule: \"+e);let p=rt(l,s.ignoreCase);c=function(u){return o===\"@\"?p(u):!p(u)}}else if(o===\"~\"||o===\"!~\")if(f.indexOf(\"$\")<0){let l=Ae(s,\"^\"+f+\"$\");c=function(p){return o===\"~\"?l.test(p):!l.test(p)}}else c=function(l,p,u,h){return Ae(s,\"^\"+q(s,f,p,u,h)+\"$\").test(l)};else if(f.indexOf(\"$\")<0){let l=U(s,f);c=function(p){return o===\"==\"?p===l:p!==l}}else{let l=U(s,f);c=function(p,u,h,T,v){let A=q(s,l,u,h,T);return o===\"==\"?p===A:p!==A}}return n===-1?{name:t,value:r,test:function(l,p,u,h){return c(l,l,p,u,h)}}:{name:t,value:r,test:function(l,p,u,h){let T=Qt(l,p,u,n);return c(T||\"\",l,p,u,h)}}}function Oe(s,e,t){if(t){if(typeof t==\"string\")return t;if(t.token||t.token===\"\"){if(typeof t.token!=\"string\")throw O(s,\"a 'token' attribute must be of type string, in rule: \"+e);{let r={token:t.token};if(t.token.indexOf(\"$\")>=0&&(r.tokenSubst=!0),typeof t.bracket==\"string\")if(t.bracket===\"@open\")r.bracket=H.Open;else if(t.bracket===\"@close\")r.bracket=H.Close;else throw O(s,\"a 'bracket' attribute must be either '@open' or '@close', in rule: \"+e);if(t.next){if(typeof t.next!=\"string\")throw O(s,\"the next state must be a string value in rule: \"+e);{let n=t.next;if(!/^(@pop|@push|@popall)$/.test(n)&&(n[0]===\"@\"&&(n=n.substr(1)),n.indexOf(\"$\")<0&&!Ye(s,q(s,n,\"\",[],\"\"))))throw O(s,\"the next state '\"+t.next+\"' is not defined in rule: \"+e);r.next=n}}return typeof t.goBack==\"number\"&&(r.goBack=t.goBack),typeof t.switchTo==\"string\"&&(r.switchTo=t.switchTo),typeof t.log==\"string\"&&(r.log=t.log),typeof t._push==\"string\"&&(r._push=t._push),typeof t._pop==\"string\"&&(r._pop=t._pop),typeof t.mark==\"string\"&&(r.mark=t.mark),typeof t.fn==\"string\"&&(r.fn=t.fn),typeof t.nextEmbedded==\"string\"&&(r.nextEmbedded=t.nextEmbedded,s.usesEmbedded=!0),r}}else if(Array.isArray(t)){let r=[];for(let n=0,i=t.length;n<i;n++)r[n]=Oe(s,e,t[n]);return{group:r}}else if(t.cases){let r=[];for(let i in t.cases)if(t.cases.hasOwnProperty(i)){let a=Oe(s,e,t.cases[i]);i===\"@default\"||i===\"@\"||i===\"\"?r.push({test:void 0,value:a,name:i}):i===\"@eos\"?r.push({test:function(o,f,c,l){return l},value:a,name:i}):r.push(Yt(s,e,i,a))}let n=s.defaultToken;return{test:function(i,a,o,f){for(let c of r)if(!c.test||c.test(i,a,o,f))return c.value;return n}}}else throw O(s,\"an action must be a string, an object with a 'token' or 'cases' attribute, or an array of actions; in rule: \"+e)}else return{token:\"\"}}var nt=class{constructor(e){this.regex=new RegExp(\"\");this.action={token:\"\"};this.matchOnlyAtLineStart=!1;this.name=\"\";this.name=e,this.stats={time:0,count:0,hits:0}}setRegex(e,t){let r;if(typeof t==\"string\")r=t;else if(t instanceof RegExp)r=t.source;else throw O(e,\"rules must start with a match string or regular expression: \"+this.name);r.length==2&&r[0]==\"\\\\\"&&/[\\{\\}\\(\\)\\[\\]]/.test(r[1])&&(this.string=r[1]),this.matchOnlyAtLineStart=r.length>0&&r[0]===\"^\",this.name=this.name+\": \"+r,this.regex=Ae(e,\"^(?:\"+(this.matchOnlyAtLineStart?r.substr(1):r)+\")\")}setAction(e,t){this.action=Oe(e,this.name,t)}};function ge(s,e){if(!e||typeof e!=\"object\")throw new Error(\"Monarch: expecting a language definition object\");let t={};t.languageId=s,t.noThrow=!1,t.maxStack=100,t.start=typeof e.start==\"string\"?e.start:null,t.ignoreCase=et(e.ignoreCase,!1),t.tokenPostfix=tt(e.tokenPostfix,\".\"+t.languageId),t.defaultToken=tt(e.defaultToken,\"source\"),t.usesEmbedded=!1;let r=e;r.languageId=s,r.ignoreCase=t.ignoreCase,r.noThrow=t.noThrow,r.usesEmbedded=t.usesEmbedded,r.stateNames=e.tokenizer,r.defaultToken=t.defaultToken;function n(a,o,f){for(let c of f){let l=c.include;if(l){if(typeof l!=\"string\")throw O(t,\"an 'include' attribute must be a string at: \"+a);if(l[0]===\"@\"&&(l=l.substr(1)),!e.tokenizer[l])throw O(t,\"include target '\"+l+\"' is not defined at: \"+a);n(a+\".\"+l,o,e.tokenizer[l])}else{let p=new nt(a);if(Array.isArray(c)&&c.length>=1&&c.length<=3)if(p.setRegex(r,c[0]),c.length>=3)if(typeof c[1]==\"string\")p.setAction(r,{token:c[1],next:c[2]});else if(typeof c[1]==\"object\"){let u=c[1];u.next=c[2],p.setAction(r,u)}else throw O(t,\"a next state as the last element of a rule can only be given if the action is either an object or a string, at: \"+a);else p.setAction(r,c[1]);else{if(!c.regex)throw O(t,\"a rule must either be an array, or an object with a 'regex' or 'include' field at: \"+a);c.name&&typeof c.name==\"string\"&&(p.name=c.name),c.matchOnlyAtStart&&(p.matchOnlyAtLineStart=et(c.matchOnlyAtLineStart,!1)),p.setRegex(r,c.regex),p.setAction(r,c.action)}o.push(p)}}}if(!e.tokenizer||typeof e.tokenizer!=\"object\")throw O(t,\"a language definition must define the 'tokenizer' attribute as an object\");t.tokenizer=[];for(let a in e.tokenizer)if(e.tokenizer.hasOwnProperty(a)){t.start||(t.start=a);let o=e.tokenizer[a];t.tokenizer[a]=new Array,n(\"tokenizer.\"+a,t.tokenizer[a],o)}if(t.usesEmbedded=r.usesEmbedded,e.brackets){if(!Array.isArray(e.brackets))throw O(t,\"the 'brackets' attribute must be defined as an array\")}else e.brackets=[{open:\"{\",close:\"}\",token:\"delimiter.curly\"},{open:\"[\",close:\"]\",token:\"delimiter.square\"},{open:\"(\",close:\")\",token:\"delimiter.parenthesis\"},{open:\"<\",close:\">\",token:\"delimiter.angle\"}];let i=[];for(let a of e.brackets){let o=a;if(o&&Array.isArray(o)&&o.length===3&&(o={token:o[2],open:o[0],close:o[1]}),o.open===o.close)throw O(t,\"open and close brackets in a 'brackets' attribute must be different: \"+o.open+`\n hint: use the 'bracket' attribute if matching on equal brackets is required.`);if(typeof o.open==\"string\"&&typeof o.token==\"string\"&&typeof o.close==\"string\")i.push({token:o.token+t.tokenPostfix,open:U(t,o.open),close:U(t,o.close)});else throw O(t,\"every element in the 'brackets' array must be a '{open,close,token}' object or array\")}return t.brackets=i,t.noThrow=!0,t}var P=class{constructor(e,t,r){this.offset=e|0,this.type=t,this.language=r,this.kind=0,this.mods=0,this.value=null,this.stack=null}toString(){return this.value||\"\"}get span(){return{offset:this.offset,length:this.value?this.value.length:0}}get indent(){return 0}get startOffset(){return this.offset}get endOffset(){return this.offset+(this.value?this.value.length:0)}clone(){let e=new P(this.offset,this.type,this.language);return e.value=this.value,e.stack=this.stack,e}match(e){if(typeof e==\"string\")if(e.indexOf(\" \")>0)e=e.split(\" \");else{let t=this.type.indexOf(e);return e[0]==\".\"?t>=0:t==0}if(e instanceof Array)for(let t of e){let r=this.type.indexOf(t);if(t[0]==\".\"?r>=0:r==0)return!0}return e instanceof RegExp?e.test(this.type):!1}},Me=class{constructor(e,t){this.tokens=e,this.endState=t}};var st=10;function se(s,e){return s.split(\".\")[e]}var Ee=class{static create(e,t){return this._INSTANCE.create(e,t)}constructor(e){this._maxCacheDepth=e,this._entries=Object.create(null)}create(e,t){if(e!==null&&e.depth>=this._maxCacheDepth)return new J(e,t);let r=J.getStackElementId(e);r.length>0&&(r+=\"|\"),r+=t;let n=this._entries[r];return n||(n=new J(e,t),this._entries[r]=n,n)}},ie=Ee;ie._INSTANCE=new Ee(st);var J=class{constructor(e,t){this.parent=e,this.state=t,this.depth=(this.parent?this.parent.depth:0)+1}static getStackElementId(e){let t=\"\";for(;e!==null;)t.length>0&&(t+=\"|\"),t+=e.state,e=e.parent;return t}static _equals(e,t){for(;e!==null&&t!==null;){if(e===t)return!0;if(e.state!==t.state)return!1;e=e.parent,t=t.parent}return e===null&&t===null}get indent(){return this.state.lastIndexOf(\"\t\")-this.state.indexOf(\"\t\")}get scope(){return this.part(2)}get detail(){return this.part(2)}part(e){return this.state.split(\".\")[e]}equals(e){return J._equals(this,e)}push(e){return ie.create(this,e)}pop(){return this.parent}popall(){let e=this;for(;e.parent;)e=e.parent;return e}switchTo(e){return ie.create(this.parent,e)}},ze=class{static create(e){return this._INSTANCE.create(e)}constructor(e){this._maxCacheDepth=e,this._entries=Object.create(null)}create(e){if(e!==null&&e.depth>=this._maxCacheDepth)return new ae(e);let t=J.getStackElementId(e),r=this._entries[t];return r||(r=new ae(e),this._entries[t]=r,r)}},oe=ze;oe._INSTANCE=new ze(st);var ae=class{constructor(e){this.stack=e}clone(){return oe.create(this.stack)}equals(e){return!(!(e instanceof ae)||!this.stack.equals(e.stack))}},it=class{constructor(){this._tokens=[],this._language=null,this._lastToken=new P(0,\"start\",\"imba\"),this._lastTokenType=null}enterMode(e,t){this._language=t}emit(e,t,r){this._lastTokenType;let n=new P(e,t,this._language);return this._lastTokenType=t,this._lastToken=n,this._tokens.push(n),n}finalize(e){return new Me(this._tokens,e)}},le=class{constructor(e,t){this._modeId=e,this._lexer=t,this._profile=!1}dispose(){}getLoadStatus(){return{loaded:!0}}getInitialState(){let e=ie.create(null,this._lexer.start);return oe.create(e)}tokenize(e,t,r){let n=new it,i=this._tokenize(e,t,r,n);return n.finalize(i)}_tokenize(e,t,r,n){return this._myTokenize(e,t,r,n)}_safeRuleName(e){return e?e.name:\"(unknown)\"}_rescope(e,t,r,n){let i=(e||\"\").split(\"-\"),a=(t||\"\").split(\"-\");if(e==t)return;let o=1;for(;i[o]&&i[o]==a[o];)o++;let f=i.length;for(;f>o;)r.push(\"pop.\"+i[--f]+\".\"+f);for(;a.length>o;){let c=\"push.\"+a[o++]+\".\"+(o-1);if(n){let l=se(n,1);c+=\".\"+l}r.push(c)}}_myTokenize(e,t,r,n){n.enterMode(r,this._modeId);let i=e.length,a=t.stack,o=null,f=0,c=this._profile,l=null,p=!0,u=[],h=0,T=[],v=null,A=-1;for(;p||f<i;){if(h++,h>1e3){if(f==A)throw console.log(\"infinite recursion\",f,i,a,n),\"infinite recursion in tokenizer?\";A=f,h=0}let k=f,m=a.depth,_=l?l.groups.length:0,w=a.state,b=null,x=null,y=null,M=null;if(l){b=l.matches;let S=l.groups.shift();x=S.matched,y=S.action,M=l.rule,l.groups.length===0&&(l=null)}else{if(!p&&f>=i)break;if(p=!1,T=this._lexer.tokenizer[w],!T&&(T=de(this._lexer,w),!T))throw O(this._lexer,\"tokenizer state is not defined: \"+w);let S=e.substr(f);for(let C of T)if(C.string!==void 0){if(S[0]===C.string){b=[C.string],x=C.string,y=C.action;break}}else if(f===0||!C.matchOnlyAtLineStart){if(c){C.stats.count++;let R=performance.now();b=S.match(C.regex),C.stats.time+=performance.now()-R,b&&C.stats.hits++}else b=S.match(C.regex);if(b){x=b[0],y=C.action;break}}}if(b||(b=[\"\"],x=\"\"),y||(f<i&&(b=[e.charAt(f)],x=b[0]),y=this._lexer.defaultToken),x===null)break;for(f+=x.length;We(y)&&Ue(y)&&y.test;)y=y.test(x,b,w,f===i);let $=null;if(typeof y==\"string\"||Array.isArray(y))$=y;else if(y.group)$=y.group;else if(y.token!==null&&y.token!==void 0){if(y.tokenSubst?$=q(this._lexer,y.token,x,b,w):$=y.token,y.goBack&&(f=Math.max(0,f-y.goBack)),y.switchTo&&typeof y.switchTo==\"string\"){let S=q(this._lexer,y.switchTo,x,b,w);if(S[0]===\"@\"&&(S=S.substr(1)),de(this._lexer,S)){let C=a.scope,R=se(S,2);C!==R&&this._rescope(C,R,u,S),a=a.switchTo(S)}else throw O(this._lexer,\"trying to switch to a state '\"+S+\"' that is undefined in rule: \"+this._safeRuleName(M))}else{if(y.transform&&typeof y.transform==\"function\")throw O(this._lexer,\"action.transform not supported\");if(y.next)if(y.next===\"@push\"){if(a.depth>=this._lexer.maxStack)throw O(this._lexer,\"maximum tokenizer stack size reached: [\"+a.state+\",\"+a.parent.state+\",...]\");a=a.push(w)}else if(y.next===\"@pop\"){if(a.depth<=1)throw O(this._lexer,\"trying to pop an empty stack in rule: \"+this._safeRuleName(M));{let S=a;a=a.pop();let C=se(S.state,2),R=se(a.state,2);C!==R&&this._rescope(C,R,u,a.state)}}else if(y.next===\"@popall\")a=a.popall();else{let S=q(this._lexer,y.next,x,b,w);S[0]===\"@\"&&(S=S.substr(1));let C=se(S,2);if(de(this._lexer,S))C!=a.scope&&this._rescope(a.scope||\"\",C,u,S),a=a.push(S);else throw O(this._lexer,\"trying to set a next state '\"+S+\"' that is undefined in rule: \"+this._safeRuleName(M))}}y.log&&typeof y.log==\"string\"&&Xe(this._lexer,this._lexer.languageId+\": \"+q(this._lexer,y.log,x,b,w)),y.mark&&n.emit(k+r,y.mark,a)}if($===null)throw O(this._lexer,\"lexer rule has no well-defined action in rule: \"+this._safeRuleName(M));if(Array.isArray($)){if(l&&l.groups.length>0)throw O(this._lexer,\"groups cannot be nested: \"+this._safeRuleName(M));if(b.length!==$.length+1)throw O(this._lexer,\"matched number of groups does not match the number of actions in rule: \"+this._safeRuleName(M));let S=0;for(let C=1;C<b.length;C++)S+=b[C].length;if(S!==x.length)throw O(this._lexer,\"with groups, all characters should be matched in consecutive groups in rule: \"+this._safeRuleName(M));l={rule:M,matches:b,groups:[]};for(let C=0;C<$.length;C++)l.groups[C]={action:$[C],matched:b[C+1]};f-=x.length;continue}else{if($===\"@rematch\"&&(f-=x.length,x=\"\",b=null,$=\"\"),x.length===0)if(i===0||m!==a.depth||w!==a.state||(l?l.groups.length:0)!==_){for(typeof $==\"string\"&&$&&n.emit(f+r,$,a);u.length>0;)n.emit(f+r,u.shift(),a);continue}else throw O(this._lexer,\"no progress in tokenizer in rule: \"+this._safeRuleName(M));let S=null;if(Ce($)&&$.indexOf(\"@brackets\")===0){let R=$.substr(\"@brackets\".length),B=er(this._lexer,x);if(!B)throw O(this._lexer,\"@brackets token returned but no bracket defined as: \"+x);S=$e(B.token+R)}else{let R=$===\"\"?\"\":$+this._lexer.tokenPostfix;S=$e(R)}let C=n.emit(k+r,S,a);for(C.stack=a,o&&o!=C&&(o.value=e.slice(o.offset-r,k)),o=C;u.length>0;)n.emit(f+r,u.shift(),a)}}return o&&!o.value&&(o.value=e.slice(o.offset-r)),oe.create(a)}};function er(s,e){if(!e)return null;e=U(s,e);let t=s.brackets;for(let r of t){if(r.open===e)return{token:r.token,bracketType:H.Open};if(r.close===e)return{token:r.token,bracketType:H.Close}}return null}function tr(s){let e;return s?(e=s.toIterable)?e.call(s):s:[]}var ot=Symbol.for(\"#init\"),ce=class{constructor(e=null){this[ot](e)}[ot](e=null){this.offset=e?e.offset:void 0,this.text=e?e.text:void 0,this.tokens=e?e.tokens:void 0,this.startState=e?e.startState:void 0,this.endState=e?e.endState:void 0}clone(e=this.offset){let t=[],r=e-this.offset;for(let n=0,i=tr(this.tokens),a=i.length;n<a;n++){let o=i[n],f=o.clone();f.offset=o.offset+r,t.push(f)}return new ce({offset:e,startState:this.startState,endState:this.endState,text:this.text,tokens:t})}},rr=ge(\"imba\",ne),W=new le(\"imba\",rr);function at(s){let e;return s?(e=s.toIterable)?e.call(s):s:[]}var X=[\"comment\",\"string\",\"keyword\",\"number\",\"regexp\",\"operator\",\"namespace\",\"type\",\"struct\",\"class\",\"interface\",\"enum\",\"typeParameter\",\"function\",\"member\",\"macro\",\"variable\",\"parameter\",\"property\",\"label\"];for(let s=0,e=at(X),t=e.length;s<t;s++){let r=e[s];X[r]=s}var z={Declaration:1<<0,Import:1<<1,Export:1<<2,Global:1<<3,ReadOnly:1<<4,Static:1<<5,Modification:1<<6,Deprecated:1<<7,Access:1<<8,Root:1<<9,Special:1<<10,Class:1<<11,Member:1<<12,Function:1<<13,Def:1<<14,Var:1<<15,Let:1<<16,Const:1<<17,Get:1<<18,Set:1<<19},Be=Object.keys(z).map(function(s){return s.toLowerCase()});for(let s=0,e=at(Object.keys(z)),t=e.length;s<t;s++){let r=e[s];z[r.toLowerCase()]=z[r]}var N={Keyword:1<<0,Access:1<<1,Key:1<<2,TagName:1<<3,TagEvent:1<<4,TagFlag:1<<5,TagProp:1<<6,TagEventModifier:1<<7,Value:1<<8,Path:1<<9,StyleProp:1<<10,StyleValue:1<<11,Type:1<<12,StyleModifier:1<<13,StyleSelector:1<<14,VarName:1<<15,ImportName:1<<16},g={Keyword:1<<0,Root:1<<1,Class:1<<2,Block:1<<3},Y={and:g.Block,await:g.Block,begin:g.Block,break:g.Block,by:g.Block,case:g.Block,catch:g.Block,class:g.Block,const:g.Block,continue:g.Block,css:g.Class|g.Root,debugger:g.Block,def:g.Class|g.Block,get:g.Class,set:g.Class,delete:g.Block,do:g.Block,elif:g.Block,else:g.Block,export:g.Root,extends:g.Block,false:g.Block,finally:g.Block,for:g.Block,if:g.Block,import:g.Root,in:g.Block,instanceof:g.Block,is:g.Block,isa:g.Block,isnt:g.Block,let:g.Block,loop:g.Block,module:g.Block,nil:g.Block,no:g.Block,not:g.Block,null:g.Block,of:g.Block,or:g.Block,require:g.Block,return:g.Block,self:g.Block,static:g.Block|g.Class,super:g.Block,switch:g.Block,tag:g.Root,then:g.Block,this:g.Block,throw:g.Block,true:g.Block,try:g.Block,typeof:g.Block,undefined:g.Block,unless:g.Block,until:g.Block,var:g.Block,when:g.Block,while:g.Block,yes:g.Block},L={File:1,Module:2,Namespace:3,Package:4,Class:5,Method:6,Property:7,Field:8,Constructor:9,Enum:10,Interface:11,Function:12,Variable:13,Constant:14,String:15,Number:16,Boolean:17,Array:18,Object:19,Key:20,Null:21,EnumMember:22,Struct:23,Event:24,Operator:25,TypeParameter:26};for(let s=0,e=Object.keys(L),t=e.length,r,n;s<t;s++)r=e[s],n=L[r],L[n]=r;function nr(s){let e;return s?(e=s.toIterable)?e.call(s):s:[]}var lt=Symbol.for(\"#init\"),ye=Symbol.for(\"#datatype\"),d={None:0,ConstVariable:1<<0,LetVariable:1<<1,Property:1<<2,EnumMember:1<<3,Function:1<<4,Class:1<<5,LocalComponent:1<<6,GlobalComponent:1<<7,RegularEnum:1<<8,ValueModule:1<<9,Parameter:1<<10,TypeLiteral:1<<11,ObjectLiteral:1<<12,Method:1<<13,Constructor:1<<14,GetAccessor:1<<15,SetAccessor:1<<16,Signature:1<<17,TypeParameter:1<<18,TypeAlias:1<<19,ExportValue:1<<20,Alias:1<<21,Prototype:1<<22,ExportStar:1<<23,Optional:1<<24,IsSpecial:1<<27,IsImport:1<<28,IsStatic:1<<29,IsGlobal:1<<30,IsRoot:1<<31};d.Component=d.LocalComponent|d.GlobalComponent;d.Variable=d.LetVariable|d.ConstVariable|d.Parameter;d.Accessor=d.GetAccessor|d.SetAccessor;d.ClassMember=d.Method|d.Accessor|d.Property;d.Scoped=d.Function|d.Variable|d.Class|d.Enum|d.LocalComponent;d.Type=d.Component|d.Class;d.GlobalVar=d.ConstVariable|d.IsGlobal;d.SpecialVar=d.ConstVariable|d.IsSpecial;var ct=[[\"entity.name.component.local\",0,d.LocalComponent],[\"entity.name.component.global\",0,d.GlobalComponent],[\"entity.name.function\",0,d.Function],[\"entity.name.class\",0,d.Class],[\"entity.name.constructor\",0,d.Method],[\"entity.name.def\",0,d.Method],[\"entity.name.get\",0,d.GetAccessor],[\"entity.name.set\",0,d.SetAccessor],[\"field\",0,d.Property],[\"decl-let\",0,d.LetVariable],[\"decl-for-index\",0,d.LetVariable,{datatype:\"\\\\number\"}],[\"decl-for\",0,d.LetVariable,{kind:\"for\"}],[\"decl-var\",0,d.LetVariable],[\"decl-param\",0,d.Parameter],[\"decl-const\",0,d.ConstVariable],[\"decl-import\",0,d.ConstVariable|d.IsImport]],Le={},V=class{[lt](e=null){var t;this.value=e?e.value:void 0,this.body=e&&(t=e.body)!==void 0?t:null}static typeMatch(e){if(Le[e]!=null)return Le[e];for(let t=0,r=nr(ct),n=r.length;t<n;t++){let[i,a,o,f]=r[t];if(e.indexOf(i)>=0)return Le[e]=ct[t]}return null}static forToken(e,t,r=0){let n=this.typeMatch(t);return n?new this(n[2],e.value,e,n[3]):null}constructor(e,t,r,n=null){this[lt](),this.flags=e,this.name=t,this.node=r,this.desc=n}get importSource(){return this.imported\u03A6?this.node.context.closest(\"imports\").sourcePath:null}get exportName(){return this.node.prev.match(\"keyword.as\")?this.node.prev.prev.value:this.node.match(\".default\")?\"default\":this.node.value}get importInfo(){if(!this.imported\u03A6)return null;let e=this.node.context.closest(\"imports\");return{exportName:this.exportName,name:this.node.value,isTypeOnly:e.isTypeOnly,path:e.sourcePath}}get datatype(){var i;let e,t=this.desc&&this.desc.datatype;if(t)return t;if(this[ye])return this[ye];let r=this.node&&this.node.nextNode;if(r&&r.type==\"type\")return r;let n=this.scope;if(n&&((i=this.desc)==null?void 0:i.kind)==\"for\"){let a=n.doc.getDestructuredPath(this.node,[[n.expression,\"__@iterable\"]]);return this[ye]||(this[ye]=a)}return(e=this.importInfo)?e:null}get static\u03A6(){return this.node&&this.node.mods&z.Static}get itervar\u03A6(){return this.node&&this.node.match(\".decl-for\")}get variable\u03A6(){return this.flags&d.Variable}get parameter\u03A6(){return this.flags&d.Parameter}get member\u03A6(){return this.flags&d.ClassMember}get scoped\u03A6(){return this.flags&d.Scoped}get type\u03A6(){return this.flags&d.Type}get global\u03A6(){return this.flags&d.IsGlobal}get imported\u03A6(){return this.flags&d.IsImport}get component\u03A6(){return this.flags&d.Component}get escapedName(){return this.name}get scope(){var e,t;return(t=(e=this.node)==null?void 0:e.context)==null?void 0:t.scope}addReference(e){return this.references||(this.references=[]),this.references.push(e),e.symbol=this,this}dereference(e){let t=this.references.indexOf(e);return t>=0&&(e.symbol=null,this.references.splice(t,1)),this}get kind(){return this.variable\u03A6?L.Variable:this.flags&d.Class?L.Class:this.flags&d.Component?L.Class:this.flags&d.Property?L.Field:this.flags&d.Method?this.escapedName==\"constructor\"?L.Constructor:L.Method:this.flags&d.Function?L.Function:L.Method}get semanticKind(){return this.flags&d.Parameter?\"parameter\":this.variable\u03A6?\"variable\":this.type\u03A6?\"type\":this.flags&d.Function?\"function\":this.member\u03A6?\"member\":this.component\u03A6?\"component\":\"variable\"}get semanticFlags(){let e=0;return this.flags&d.ConstVariable&&(e|=z.ReadOnly),this.static\u03A6&&(e|=z.Static),this.flags&d.IsImport&&(e|=z.Import),this.flags&d.IsGlobal&&(e|=z.Global),this.flags&d.IsRoot&&(e|=z.Root),this.flags&d.IsSpecial&&(e|=z.Special),e}};function sr(s){let e;return s?(e=s.toIterable)?e.call(s):s:[]}var pt=Symbol.for(\"#init\"),ft={global:{datatype:\"globalThis\"},imba:{datatype:\"globalThis.imba\"},module:{},window:{datatype:\"globalThis.window\"},document:{datatype:\"globalThis.document\"},exports:{},console:{datatype:\"globalThis.console\"},process:{datatype:\"globalThis.process\"},parseInt:{datatype:\"globalThis.parseInt\"},parseFloat:{datatype:\"globalThis.parseFloat\"},setTimeout:{datatype:\"globalThis.setTimeout\"},setInterval:{datatype:\"globalThis.setInterval\"},setImmediate:{datatype:\"globalThis.setImmediate\"},clearTimeout:{datatype:\"globalThis.clearTimeout\"},clearInterval:{datatype:\"globalThis.clearInterval\"},clearImmediate:{datatype:\"globalThis.clearImmediate\"},globalThis:{datatype:\"globalThis\"},isNaN:{datatype:\"globalThis.isNaN\"},isFinite:{datatype:\"globalThis.isFinite\"},__dirname:{datatype:\"\\\\string\"},__filename:{datatype:\"\\\\string\"},__realname:{datatype:\"\\\\string\"}},ee=class{[pt](e=null){var t;this.type=e&&(t=e.type)!==void 0?t:\"\",this.start=e?e.start:void 0,this.end=e?e.end:void 0,this.parent=e?e.parent:void 0}static build(e,t,r,n,i){return new this(e,t,r,n,i)}constructor(e,t,r,n){this[pt](),this.doc=e,this.start=t,this.end=null,this.type=n,this.parent=r,this.$name=null,t.scope=this}pop(e){return this.end=e,e.start=this.start,e.pops=this,this.start.end=e,this.visit(),this.parent}find(e){return this.findChildren(e,!0)[0]}get childNodes(){return this.doc.getNodesInScope(this)}findChildren(e,t=!1){let r=[],n=this.start;for(;n;){if(t&&r.length)return r;if(n.scope&&n.scope!=this){n.scope.match(e)&&r.push(n.scope),n=n.scope.next;continue}if(n.match(e)&&r.push(n),n==this.end)break;n=n.next}return r}closest(e){return this.match(e)?this:this.parent?this.parent.closest(e):null}visit(){return this}get member\u03A6(){return!1}get top\u03A6(){return!1}get selfScope(){return this.member\u03A6||this.top\u03A6?this:this.parent.selfScope}get name(){return this.$name||\"\"}get value(){return this.doc.content.slice(this.start.offset,this.next?this.next.offset:-1)}get next(){return this.end?this.end.next:null}get prev(){return this.start?this.start.prev:null}match(e){return typeof e==\"string\"?this.type==e:e instanceof RegExp?e.test(this.type):e instanceof Function?e(this):!0}},E=class extends ee{constructor(e,t,r,n,i=[]){super(e,t,r,n)}get scope(){return this.parent.scope}get varmap(){return this.parent.varmap}register(e){return this.parent.register(e)}lookup(...e){return this.parent.lookup(...e)}},ut=class extends E{},ht=class extends E{},mt=class extends E{get properties(){return this.findChildren(\"styleprop\")}},dt=class extends E{},K=class extends ee{constructor(e,t,r,n,i=[]){super(e,t,r,n);if(this.children=[],this.entities=[],this.refs=[],this.varmap=Object.create(r?r.varmap:{}),this instanceof te)for(let a=0,o=Object.keys(ft),f=o.length,c,l;a<f;a++){c=o[a],l=ft[c];let p={value:c,offset:-1,mods:0};this.varmap[c]=new V(d.GlobalVar,c,p,l)}return this.indent=i[3]&&i[3][0]==\"\t\"?i[3].length:0,this.setup(),this}setup(){if(this.handler\u03A6&&(this.varmap.e=new V(d.SpecialVar,\"e\",null,\"eventReference\")),(this.class\u03A6||this.property\u03A6)&&(this.ident=this.token=ue(this.start,\"entity.\"),this.ident&&(this.ident.body=this),this.ident&&this.ident.type==\"entity.name.def.render\"&&(this.$name=\"render\",this.ident.symbol)))return this.ident.symbol.name=\"render\"}get selfPath(){let e=this.path;return this.property\u03A6?e.slice(0,e.lastIndexOf(\".\")):e}get path(){let e=this.parent?this.parent.path:\"\";if(this.property\u03A6){let t=this.static\u03A6?\".\":\".prototype.\";return this.parent?\"\"+this.parent.path+t+this.name:this.name}return this.component\u03A6?this.name[0]==this.name[0].toLowerCase()?this.name.replace(/\\-/g,\"_\")+\"$$TAG$$\":this.name:this.class\u03A6?this.name:e}get allowedKeywordTypes(){return this.class\u03A6?g.Class:this.root\u03A6?g.Root|g.Block:g.Block}get component\u03A6(){return!!this.type.match(/^component/)}get root\u03A6(){return this instanceof te}get top\u03A6(){return this instanceof te}get class\u03A6(){return!!this.type.match(/^class/)||this.component\u03A6}get def\u03A6(){return!!this.type.match(/def|get|set/)}get static\u03A6(){return!!(this.ident&&this.ident.mods&z.Static)}get handler\u03A6(){return!!this.type.match(/handler|spy/)}get member\u03A6(){return!!this.type.match(/def|get|set/)}get property\u03A6(){return!!this.type.match(/def|get|set|field/)}get flow\u03A6(){return!!this.type.match(/if|else|elif|unless|for|while|until/)}get closure\u03A6(){return!!this.type.match(/class|component|def|get|set|do/)}get scope(){return this}get name(){return this.$name||(this.ident?this.ident.value:\"\")}visit(){return this}register(e){return e.scoped\u03A6&&(this.varmap[e.name]=e,this.root\u03A6&&(e.flags|=d.IsRoot)),e}lookup(e,t=d.Scoped){let r,n=e.value;return n[n.length-1]==\"!\"&&(n=n.slice(0,-1)),(r=this.varmap[n])?r:null}toOutline(){return{kind:this.type,name:this.name,children:[],span:this.ident?this.ident.span:this.start.span}}},te=class extends K{};var gt=class extends K{get expression(){return this.find(\"keyword.in keyword.of\").next.next}get forvars(){return Object.values(this.varmap).filter(function(e){return e.itervar\u03A6})}},yt=class extends K{register(e){return this.parent.register(e)}lookup(...e){return this.parent.lookup(...e)}},kt=class extends K{get selfScope(){return this}},_t=class extends E{},bt=class extends E{get propertyName(){var e;return this.start.next.match(\"style.property.name\")?this.start.next.value:(e=this.parent.prevProperty)==null?void 0:e.propertyName}get modifier(){if(this.start.next.match(\"style.property.modifier\"))return this.start.next.value}get styleValue(){return!0}},xt=class extends E{get key(){return this.parent.key}get propertyName(){return this.parent.propertyName}get modifier(){return this.parent.modifier}},wt=class extends E{get key(){return this.find(\"stylepropkey\")}get prevProperty(){return this.start.prev.pops?this.start.prev.pops:null}get propertyName(){var e;return(e=this.key)==null?void 0:e.propertyName}get modifier(){var e;return(e=this.key)==null?void 0:e.modifier}},vt=class extends E{},Tt=class extends E{get innerText(){return this.value.slice(1,-1)}},St=class extends E{get name(){let e=this.findChildren(\"tag.name\").join(\"\");return e==\"self\"?this.closest(\"component\").name:e}get local\u03A6(){return this.name[0]==this.name[0].toUpperCase()}get tagName(){return this.name}get parentTag(){var e;return(e=this.closest(\"tagcontent\"))==null?void 0:e.ownerTag}get ancestorTags(){var e;return(e=this.closest(\"tagcontent\"))==null?void 0:e.ownerTags}get ancestorPath(){return this.ancestorTags.map(function(e){return e.tagName}).join(\".\")}get pathName(){return\"<\"+this.name+\">\"}get outline(){return this.findChildren(/tag\\.(reference|name|id|white|flag|event(?!\\-))/).join(\"\")}},Ct=class extends E{get propertyName(){return this.start.next.match(\"tag.attr\")?this.start.next.value:\"\"}get tagName(){return this.parent.name}},$t=class extends E{get propertyName(){return this.parent.propertyName}get tagName(){return this.parent.tagName}},It=class extends yt{get ownerTag(){return this.start.prev.pops}get ownerTags(){let e=[this.ownerTag],t;for(;t=e[0].parentTag;)e.unshift(t);return e}},At=class extends E{get name(){return this.findChildren(\"tag.event.name\").join(\"\").replace(\"@\",\"\")}},Fe=class extends E{},pe=class extends E{static build(e,t,r,n,i){let a=this,o=e.content[t.offset-1];return!o||` [{(|=&-;\n\t:/*%+-`.indexOf(o)>=0?(n=\"array\",a=Ot):(n=\"index\",a=Mt),new a(e,t,r,n,i)}},ke=class extends E{},Et=class extends ke{},Ot=class extends pe{get delimiters(){return this.childNodes.filter(function(e){return e.match(\"delimiter\")})}indexOfNode(e){var t;let r=this.delimiters,n=0;t=0;for(let i of sr(r)){let a=t++;e.offset>i.offset&&n++}return n}},Mt=class extends pe{},zt=class extends E{constructor(){super(...arguments);this.prev.datatype=this}toString(){return this.value}},Bt=class extends E{},Lt=class extends ke{},Ft=class extends E{get isTypeOnly(){return this.start.prev.match(\"keyword.type\")}get sourcePath(){let e=this.childNodes.find(function(t){return t.match(\"path\")});return e==null?void 0:e.innerText}get specifiers(){return this.childNodes.find(function(e){return e.match(\"specifiers\")})}get default(){return this.childNodes.find(function(e){return e.match(\".default\")})}get namespace(){return this.childNodes.find(function(e){return e.match(\".ns\")})}},D={style:mt,array:pe,stylerule:dt,sel:_t,path:Tt,value:ut,tag:St,forscope:gt,field:kt,type:zt,parens:Fe,brackets:pe,object:Lt,braces:ke,specifiers:Et,string:ht,tagattr:Ct,imports:Ft,interpolation:Bt,tagattrvalue:$t,tagcontent:It,listener:At,styleinterpolation:vt,styleprop:wt,stylepropkey:bt,stylevalue:xt,args:Fe};function ir(s,e){var t=Object.getOwnPropertyDescriptors(e);return Object.defineProperties(s,t),s}function F(s){let e;return s?(e=s.toIterable)?e.call(s):s:[]}var Ne=Symbol.for(\"#ins\"),Pe=Symbol.for(\"#del\"),Nt=Symbol.for(\"#version\"),Pt=Symbol.for(\"#multiline\"),Rt=Symbol.for(\"#significant\"),Re=Symbol.for(\"#body\"),Q=Symbol.for(\"#lexed\"),jt=class{get node(){return this.scope&&this.scope.start==this?this.scope:this.pops?this.pops:this}get nextNode(){var e;return(e=this.next)==null?void 0:e.node}get prevNode(){var e;return(e=this.prev)==null?void 0:e.node}};ir(P.prototype,jt.prototype);var re=class{static tmp(e){return new this(\"file://temporary.imba\",\"imba\",0,e)}static from(e,t,r,n){return new this(e,t,r,n)}constructor(e,t,r,n){this.uri=e,this.languageId=t,this.version=r,this.content=n,this.connection=null,this.lineTokens=[],this.isLegacy=t==\"imba1\"||e&&e.match(/\\.imba1$/),this.head=this.seed=new P(0,\"eol\",\"imba\"),this.initialState=W.getInitialState(),this.seed.stack=W.getInitialState(),this.history=[],this.lexer=W,this.versionToHistoryMap={},this.versionToHistoryMap[r]=-1,n&&n.match(/^\\#[^\\n]+imba1/m)&&(this.isLegacy=!0)}log(...e){return console.log(...e)}get lineCount(){return this.lineOffsets.length}get lineOffsets(){return this._lineOffsets||(this._lineOffsets=xe(this.content,!0))}getText(e=null){if(e){let t=this.offsetAt(e.start),r=this.offsetAt(e.end);return this.content.substring(t,r)}return this.content}getLineText(e){let t=this.lineOffsets[e],r=this.lineOffsets[e+1];return this.content.substring(t,r).replace(/[\\r\\n]/g,\"\")}positionAt(e){if(e instanceof Z)return e;typeof e==\"object\"&&(e=e.offset),e=Math.max(Math.min(e,this.content.length),0);let t=this.lineOffsets,r=0,n=t.length;if(n===0)return new Z(0,e,e,this.version);for(;r<n;){let a=Math.floor((r+n)/2);t[a]>e?n=a:r=a+1}let i=r-1;return new Z(i,e-t[i],e,this.version)}offsetAt(e){if(e.offset)return e.offset;let t=this.lineOffsets;if(e.line>=t.length)return this.content.length;if(e.line<0)return 0;let r=t[e.line],n=e.line+1<t.length?t[e.line+1]:this.content.length;return e.offset=Math.max(Math.min(r+e.character,n),r)}rangeAt(e,t=e){return new j(this.positionAt(e),this.positionAt(t))}overwrite(e,t){return this.version=t||this.version+1,this.content=e,this._lineOffsets=null,this.invalidateFromLine(0),this}update(e,t){t==null&&(t=this.version+1);let r=[],n=!1;r[Ne]=\"\",r[Pe]=\"\";for(let o=0,f=F(e),c=f.length;o<c;o++){let l=f[o];if(De(l)){this.overwrite(l.text,t),r.push([0,this.content.length,l.text]),n=!0;continue}let p=qe(l.range),u=this.offsetAt(p.start),h=this.offsetAt(p.end);l.range=p,l.offset=u,l.length=h-u,p.start.offset=u,p.end.offset=h;let v=h-u?this.content.slice(u,h):\"\";r[Pe]+=v,r[Ne]+=l.text||\"\",this.applyEdit(l,t,e),r.push([u,h-u,l.text||\"\",v]);let A=Math.max(p.start.line,0),k=Math.max(p.end.line,0),m=this.lineOffsets,_=xe(l.text,!1,u);if(k-A===_.length)for(let b=0,x=F(_),y=x.length;b<y;b++){let M=x[b];m[b+A+1]=_[o]}else _.length<1e4?m.splice.apply(m,[A+1,k-A].concat(_)):this._lineOffsets=m=m.slice(0,A+1).concat(_,m.slice(k+1));let w=l.text.length-(h-u);if(w!==0){let b=A+1+_.length;for(;b<m.length;)m[b]=m[b]+w,b++}}this.history.push(r),r[Nt]=t;let i=this.history[this.history.length-2];return(r[Ne]+r[Pe]).indexOf(`\n`)>=0&&(r[Pt]=!0,i&&!i[Pt]&&(r[Rt]=!0,r[Re]=this.content)),this.versionToHistoryMap[t]=this.history.length-1,this.updated(e,t)}get lastSignificantVersion(){let e=this.history.length;for(;e>0;){let t=this.history[--e];if(t&&t[Rt])return t[Nt]}return null}editsSinceVersion(e){let t=this.versionToHistoryMap[e],r=[];for(let n=0,i=F(this.history.slice(t+1)),a=i.length;n<a;n++){let o=i[n];r.push(...o)}return r}contentAtVersion(e){let t=this.versionToHistoryMap[e],r=this.history[t];return r[Re]!=null?r[Re]:null}offsetAtVersion(e,t,r=this.version,n=!1){let i=this.versionToHistoryMap[t],a=this.versionToHistoryMap[r],o=e,f=!1;if(i<a)for(;i<a;){let c=this.history[++i];for(let l=0,p=F(c),u=p.length;l<u;l++){let[h,T,v]=p[l];h>o||(n&&(h-=1),o>h&&o>h+T&&(o+=v.length-T))}}else if(a<i)for(;a<i;){let c=this.history[i--];for(let l=0,p=F(c),u=p.length;l<u;l++){let[h,T,v]=p[l];h>o||o>h&&o>h+T&&(o-=v.length-T)}}return o}historicalOffset(e,t){return this.offsetAtVersion(e,this.version,t,!0)}applyEdit(e,t,r){this.content=this.content.substring(0,e.range.start.offset)+e.text+this.content.substring(e.range.end.offset,this.content.length);let n=e.range.start.line;this.invalidateFromLine(n)}updated(e,t){return this.version=t,this}invalidateFromLine(e){return this.head=this.seed,this}after(e,t){let r=this.tokens.indexOf(e);if(t){for(;r<this.tokens.length;){let n=this.tokens[++r];if(n&&this.matchToken(n,t))return n}return null}return this.tokens[r+1]}matchToken(e,t){return t instanceof RegExp?e.type.match(t):typeof t==\"string\"?e.type==t:!1}before(e,t,r=0){let n=this.tokens.indexOf(e)+r;if(t){for(;n>0;){let i=this.tokens[--n];if(this.matchToken(i,t))return i}return null}return this.tokens[n-1]}getTokenRange(e){return{start:this.positionAt(e.offset),end:this.positionAt(e.offset+e.value.length)}}getTokensInScope(e){let t=this.tokens.indexOf(e.start),r=e.end?this.tokens.indexOf(e.end):this.tokens.length,n=t,i=[];for(;n<r;){let a=this.tokens[n++];a.scope&&a.scope!=e?(i.push(a.scope),n=a.scope.endIndex+1):i.push(a)}return i}getSymbols(){var e;return this.astify(),(e=this[Q]).symbols||(e.symbols=this.tokens.map(function(t){return t.symbol}).filter(function(t){return t}).filter(function(t,r,n){return n.indexOf(t)==r}))}getImportedSymbols(){return this.getSymbols().filter(function(e){return e.imported\u03A6})}getImportNodes(){return this.tokens.filter(function(t){return t.match(\"push._imports\")}).map(function(t){return t.scope})}getNodesInScope(e,t=!1){let r=e.start,n=e.end;t?n=n.next:r=r.next;let i=[];for(;r&&r!=n;){if(r.scope&&r.scope!=e){i.push(r.scope),r=r.scope.end.next;continue}else r.type!=\"white\"&&i.push(r);r=r.next}return i}getTokenAtOffset(e,t=!1){return this.tokenAtOffset(e)}getSemanticTokens(e=d.Scoped){let t=this.parse(),r=[];for(let n=0,i=F(t),a=i.length;n<a;n++){let o=i[n],f=o.symbol;if(!(f&&(!e||f.flags&e)))continue;let c=X[f.semanticKind],l=o.mods|f.semanticFlags;r.push([o.offset,o.value.length,c,l])}return r}getEncodedSemanticTokens(){let e=this.getSemanticTokens(),t=[],r=0,n=0;for(let i=0,a=F(e),o=a.length;i<o;i++){let f=a[i],c=this.positionAt(f[0]),l=c.line-r,p=l?c.character:c.character-n;t.push(l,p,f[1],f[2],f[3]),r=c.line,n=c.character}return t}getDestructuredPath(e,t=[],r=null){if(e.context.type==\"array\")return this.getDestructuredPath(e.context.start,t,r),t.push(e.context.indexOfNode(e)),t;let n=e.value;return e.prev.match(\"operator.assign.key-value\")&&(n=e.prev.prev.value),e.context.type==\"object\"&&(this.getDestructuredPath(e.context.start,t,r),t.push(n)),t}tokenAtOffset(e){let t=this.tokens[0];for(;t;){let r=t.next;if(t.offset>=e)return t.prev;if(t.end&&t.end.offset<e)t=t.end;else if(r)t=r;else return t}return t}patternAtOffset(e,t=/[\\w\\-\\.\\%]/){let r=e,n=e,i=this.content;for(;r>0&&t.test(this.content[r-1]);)r--;for(;t.test(this.content[n+1]||\"\");)n++;return[i.slice(r,n+1),r,n]}adjustmentAtOffset(e,t=1){let[r,n,i]=this.patternAtOffset(e),[a,o=\"\"]=r.split(/[\\d\\.]+/),f=parseFloat(r.slice(a.length).slice(0,o.length?-o.length:1e3));return Number.isNaN(f)?null:(f+=t,[n+a.length,r.length-a.length-o.length,String(f)])}contextAtOffset(e){var t;this.ensureParsed();let r=this.positionAt(e),n=this.tokenAtOffset(e),i=this.lineOffsets[r.line],a=e-n.offset,o=n.context,f={character:this.content[e-1],line:this.content.slice(i,e),token:n.value.slice(0,a)},c={character:this.content[e],token:n.value.slice(a),line:this.content.slice(e,this.lineOffsets[r.line+1]).replace(/[\\r\\n]+/,\"\")};n.scope&&!c.token&&(o=n.scope),n.next&&n.next.value==null&&n.next.scope&&!c.token&&n.match(\"operator.assign\")&&(o=n.next.scope);let l=ue(n,\"white.tabs\"),p=l?l.value.length:0,u=o,h=o.scope,T={},v=n,A=n.stack.state||\"\",k=N;u&&(u.start&&(f.group=this.content.slice(u.start.offset,e)),u.end&&(c.group=this.content.slice(e,u.end.offset)));let m={keywords:[]},_=0;if(n==l&&(p=a),n.match(\"br white.tabs\"))for(;h.indent>p;)h=h.parent;if(u.type==\"tag\",n.match(\"entity string regexp comment style.\")&&(_=0),n.match(\"tag.event.name tag.event-modifier.name\")&&(v=n.prev),(n.type==\"path\"||n.type==\"path.open\")&&(_|=N.Path,m.paths=1),n.match(\"identifier tag.operator.equals br white delimiter array operator ( self\")&&(_|=N.Value,v=null),n.match(\"operator.access\")&&(_|=N.Access,v=n),n.match(\"accessor\")&&(_|=N.Access,v=n.prev),n.match(\"delimiter.type.prefix type\")&&(_|=N.Type),n.match(\"tag.name tag.open\")?_|=N.TagName:n.match(\"tag.attr tag.white\")?_|=N.TagProp:n.match(\"tag.flag\")?_|=N.TagFlag:n.match(\"tag.event.modifier\")?_|=N.TagEventModifier:n.match(\"tag.event\")?_|=N.TagEvent:n.match(\"operator.equals.tagop\")&&(_|=N.Value),n.match(\"style.property.operator\")||u.closest(\"stylevalue\")){_|=k.StyleValue;try{m.styleProperty=u.closest(\"styleprop\").propertyName}catch(x){}}n.match(\"style.open style.property.name\")&&(_|=k.StyleProp),(n.match(\"style.value.white\")||n.prev&&n.prev.match(\"style.value.white\"))&&(_|=k.StyleProp),n.match(\"style.selector.element\")&&c.line.match(/^\\s*$/)&&(_|=k.StyleProp),h.closest(\"rule\")&&(_|=k.StyleProp,_&=~k.Value),n.match(\"style.property.operator\")&&(_&=~k.StyleProp),u.match(\"stylevalue\")&&f.group.indexOf(\" \")==-1&&(_=k.StyleValue),n.match(\"style.selector.modifier style.property.modifier\")&&(_=k.StyleModifier),n.match(\"style.selector.element\")&&(_|=k.StyleSelector),h.closest(\"rule\")&&f.line.match(/^\\s*$/)&&(_|=k.StyleSelector,_&=~k.StyleValue),n.match(\"operator.access accessor white.classname white.tagname\")&&(_&=~k.Value),u.closest(\"imports\")&&(_&=~k.Value,_|=k.ImportName),(A.match(/\\.decl-(let|var|const|param|for)/)||n.match(/\\.decl-(for|let|var|const|param)/))&&(_&=~k.Value,_|=k.VarName);let w=h.allowedKeywordTypes;t=[];for(let x=0,y=Object.keys(Y),M=y.length,$,S;x<M;x++)$=y[x],S=Y[$],!!(S&w)&&t.push($);m.keywords=t,m.flags=_;for(let x=0,y=Object.keys(k),M=y.length,$,S;x<M;x++)$=y[x],S=k[$],_&S&&(m[$]||(m[$]=!0));return{token:n,offset:e,position:r,linePos:i,scope:h,indent:p,group:o,mode:\"\",target:v,path:h.path,suggest:m,before:f,after:c}}textBefore(e){let t=this.content.slice(0,e),r=t.lastIndexOf(`\n`);return t.slice(r+1)}varsAtOffset(e,t=!1){let r=this.tokenAtOffset(e),n=[],i=r.context.scope,a={};for(;i;){for(let o=0,f=F(Object.values(i.varmap)),c=f.length;o<c;o++){let l=f[o];l.global\u03A6&&!t||a[l.name]||(!l.node||l.node.offset<e)&&(n.push(l),a[l.name]=l)}i=i.parent}return n}getOutline(e=null){var t,r,n,i;if(this.isLegacy){let k=Ge(this.content);for(let m=0,_=F(k.all),w=_.length;m<w;m++){let b=_[m];t=b.parent,delete b.parent,b.path=b.name,b.name=b.ownName,e&&e(b,k.all)}return k}this.ensureParsed();let a=Date.now(),o=[],f={children:[]},c=f,l=null,p={},u=new Set,h=null;function T(k,m){return k instanceof V&&(u.add(k),k={name:k.name,kind:k.kind}),p=k,k.token=m,k.children||(k.children=[]),k.span||(k.span=m.span),k.name||(k.name=m.value),o.push(k),c.children.push(k)}function v(k){return p.children||(p.children=[]),p.parent||(p.parent=c),c=p,c.end=k}function A(k){return c=c.parent}for(let k=0,m=F(this.tokens),_=m.length;k<_;k++){let w=m[k],b=w.symbol,x=w.scope;if(w.type==\"key\")T({kind:L.Key},w);else if(b){if(b.parameter\u03A6)continue;u.has(b)||T(b,w),b.body&&(h=b.body.start)}else if(x&&x.type==\"do\"){let y=this.textBefore(w.offset-3).replace(/^\\s*(return\\s*)?/,\"\");y+=\" callback\",T({kind:L.Function,name:y},w.prev),h=w}else x&&x.type==\"tag\"&&T({kind:L.Field,name:x.outline},w);w==h&&v(w.end),w==c.end&&A()}for(let k=0,m=F(o),_=m.length;k<_;k++){let w=m[k];if(w.span){let b=w.span.length;w.span.start=this.positionAt(w.span.offset),w.span.end=b?this.positionAt(w.span.offset+b):w.span.start}e&&e(w,o),r=w.parent,delete w.parent,n=w.end,delete w.end,i=w.token,delete w.token}return f}getContextAtOffset(e,t=!1){return this.contextAtOffset(e)}ensureParsed(){return this.parse(),this}reparse(){return this.invalidateFromLine(0),this.parse()}profileReparse(){let e=Date.now(),t=this.reparse();return console.log(\"took\",Date.now()-e),t}tokenize(e=!1){var t;let r=this[Q]||{lines:[],version:-1};if(r.version==this.version&&!e)return r;let n=this.content;this.isLegacy&&(n=n.replace(/\\@\\w/g,function(u){return\"\u00B6\"+u.slice(1)}),n=n.replace(/\\w\\:(?=\\w)/g,function(u){return u[0]+\".\"}),n=n.replace(/(do)(\\s?)\\|([^\\|]*)\\|/g,function(u,h,T,v){return h+\"(\"+(T||\"\")+v+\")\"}));let i=this.lineOffsets,a=[],f=this.seed,c=Date.now(),l=this.initialState;this[Q]={version:this.version,lines:[],tokens:a};let p={};this[Q].cache=p;for(let u=0,h=F(r.lines),T=h.length;u<T;u++){let v=h[u];(p[t=v.text]||(p[t]=[])).push(v)}for(let u=0,h=F(i),T=h.length;u<T;u++){let v=h[u],k=i[u+1]||n.length,m=n.slice(v,k),_=l,w=p[m],b=w&&w.filter(function(M){return M.startState==_}),x=b&&(b.find(function(M){return M.offset==v})||b[0]),y=null;if(x&&(x.offset==v,y=x.clone(v)),!y){let M=W.tokenize(m,_,v);y=new ce({offset:v,text:m,startState:_,endState:M.endState,tokens:M.tokens})}for(let M=0,$=F(y.tokens),S=$.length;M<S;M++){let C=$[M];a.push(C)}this[Q].lines.push(y),l=y.endState}return this[Q]}get tokens(){return this.astify(),this[Q].tokens}getTokens(e=null){return this.tokens}astify(){let e=this.tokenize();if(e.root)return this;let t={\"]\":\"[\",\")\":\"(\",\"}\":\"{\",\">\":\"<\"},r={\"[\":\"]\",\"(\":\")\",\"{\":\"}\",\"<\":\">\"},n=/[\\w\\$\\)\\]\\?]/,i=Date.now(),a=null,o=e.root=new te(this,this.seed,null,\"root\"),f=this.content,c=console.log.bind(console),l=null,p=null,u=null,h=null,T=0;for(let v=0,A=F(e.tokens),k=A.length;v<k;v++){let m=A[v],_=m.type.split(\".\"),w=m.value,b=e.tokens[v+1],[x,y,M]=_,$=_[_.length-1],S=_[_.length-2],C=null,R=0;if(x==\"ivar\"&&(w=m.value=\"@\"+w.slice(1)),h&&(h.next=m),m.prev=h,m.context=o,x==\"(\"&&h){let B=f[m.offset-1]||\"\";n.test(B)&&(o=m.scope=D.args.build(this,m,o,\"args\",_))}if(x==\"operator\"&&(m.op=m.value.trim()),x==\"keyword\"&&(z[y]&&(T|=z[y]),(w==\"let\"||w==\"const\")&&(p=m,u=null)),x==\"entity\"&&(m.mods|=T,T=0),x==\"push\"){let B=y,G=y.lastIndexOf(\"_\"),be=G>=0?E:K;G>=0?(B=B.slice(G+1),be=D[B]||E):D[B]&&(be=D[B]),o=m.scope=new be(this,m,o,B,_),l&&(l.body=o,o.symbol=l,l=null),o==o.scope&&(p=null,u=null)}else x==\"pop\"?(y==\"value\"&&(u=null),o=o.pop(m)):(y==\"open\"||r[y])&&D[x]?o=m.scope=D[x].build(this,m,o,x,_):$==\"open\"&&(C=D[S])?o=m.scope=C.build(this,m,o,S,_):($==\"close\"&&o.type==S||y==\"close\"&&D[x]||t[x]&&o&&o.start.value==t[x])&&(o=o.pop(m));if(m.match(/entity\\.name|decl-/)){let B=V.forToken(m,m.type,m.mods);B&&(l=m.symbol=B,m.symbol.keyword=p,o.register(m.symbol)),m.mods|=z.Declaration}if(y==\"declval\"&&(u=m),m.match(\"identifier\")&&!m.symbol){let B=o.lookup(m,p);if(B&&B.scoped\u03A6&&(u&&B.keyword==p||B.addReference(m)),h&&h.op==\"=\"&&B){let G=h.prev;G&&G.symbol==B&&(G.mods&z.Declaration?B.dereference(m):(!b||b.match(\"br\"))&&B.dereference(G))}}h=m}return this}parse(){return this.tokens}getMatchingTokens(e){let t=this.getTokens();return t=t.slice(0).filter(function(r){return r.match(e)}),t}migrateToImba2(){let e=this.content;e=e.replace(/\\bdef self\\./g,\"static def \"),e=e.replace(/\\b(var|let|const) def /g,\"def \"),e=e.replace(/\\?\\./g,\"..\"),e=e.replace(/def ([\\w\\-]+)\\=/g,\"set $1\"),e=e.replace(/do\\s?\\|([^\\|]+)\\|/g,\"do($1)\"),e=e.replace(/(prop) ([\\w\\-]+) (.+)$/gm,function(i,a,o,f){var c,l;let p={};f.split(/,\\s*/).map(function(h){return h.split(/\\:\\s*/)}).map(function(h){return p[h[0]]=h[1]});let u=\"\"+a+\" \"+o;return p.watch&&p.watch[0].match(/[\\'\\\"\\:]/)?u=\"@watch(\"+p.watch+\") \"+u:p.watch&&(u=\"@watch \"+u),c=p.watch,delete p.watch,p.default&&(u=\"\"+u+\" = \"+p.default,l=p.default,delete p.default),Object.keys(p).length&&console.log(\"more prop values\",i,p),u});let r=re.tmp(e).getTokens(),n=\"\";for(let i=0,a=F(r),o=a.length;i<o;i++){let f=a[i],c=r[i+1],{value:l,type:p,offset:u}=f,h=u+l.length;p==\"operator.dot.legacy\"&&(l=\".\",c&&(c.access=!0)),p==\"operator.spread.legacy\"&&(l=\"...\"),p==\"identifier.tagname\"&&l.indexOf(\":\")>=0&&(l=l.replace(\":\",\"-\")),p==\"identifier.def.propname\"&&l==\"initialize\"&&(l=\"constructor\"),p==\"decorator\"&&!e.slice(h).match(/^\\s(prop|def|get|set)/)&&(l=n+l.slice(1)),p==\"property\"&&(l[0]==\"@\"?(l=l.replace(/^\\@/,n),f.access=!0):l==\"len\"?l=\"length\":/^(\\n|\\s\\:|\\)|\\,|\\.)/.test(e.slice(h))&&!f.access&&l[0]==l[0].toLowerCase()&&(l=l+\"!\")),p==\"identifier\"&&!f.access&&l[0]==l[0].toLowerCase()&&l[0]!=\"_\"&&!f.variable&&/^(\\n|\\s\\:|\\)|\\,|\\.)/.test(e.slice(h))&&l!=\"new\"&&(l=l+\"!\"),f.value=l}return r.map(function(i){return i.value}).join(\"\")}createImportEdit(e,t,r=t){e=e.replace(/\\.imba$/,\"\");let n=this.getImportNodes().filter(function(c){return c.sourcePath==e}),i=\"\",a=0,o=[],f={changes:o};if(this.getImportedSymbols().map(function(p){return p.importInfo}).find(function(p){return p.path==e&&p.name==r&&p.exportName==t}))return f;t!=\"default\"&&t!=\"*\"&&(n=n.filter(function(c){return c.specifiers||!c.ns}));for(let c=0,l=F(n),p=l.length;c<p;c++){let u=l[c],h=u.default,T=u.specifiers,v=u.namespace;if(t==\"default\")if(a=u.start.offset+1,h){if(h.value==r)return f;f.alias=h.value,a=0;continue}else i=r,(v||T)&&(i+=\", \");else if(t==\"*\"){if(T)continue;h?(a=h.endOffset,i=\", * as \"+r):(a=u.start.offset+1,i=\"* as \"+r+\" \")}else if(v){f.alias=\"\"+v.value+\".\"+t;continue}else{let A=t;r!=t&&(A+=\" as \"+r),T?(a=T.start.offset+1,i=\" \"+A+\",\"):h?(a=h.endOffset,i=\", { \"+A+\" }\"):(i=\"{ \"+A+\" }\",a=u.start.offset+1)}if(i)break}return i||(t==\"default\"?i=\"import \"+r+\" from '\"+e+\"'\":t==\"*\"?i=\"import * as \"+r+\" from '\"+e+\"'\":r!=t?i=\"import { \"+t+\" as \"+r+\" } from '\"+e+\"'\":i=\"import { \"+t+\" } from '\"+e+\"'\",i+=`\n`),o.push({newText:i,range:this.rangeAt(a,a)}),f}};var Vt={defaultToken:\"\",tokenPostfix:\".xml\",ignoreCase:!0,qualifiedName:/(?:[\\w\\.\\-]+:)?[\\w\\.\\-]+/,tokenizer:{root:[[/[^<&]+/,\"\"],{include:\"@whitespace\"},[/(<)(@qualifiedName)/,[{token:\"delimiter\"},{token:\"tag\",next:\"@tag\"}]],[/(<\\/)(@qualifiedName)(\\s*)(>)/,[{token:\"delimiter\"},{token:\"tag\"},\"\",{token:\"delimiter\"}]],[/(<\\?)(@qualifiedName)/,[{token:\"delimiter\"},{token:\"metatag\",next:\"@tag\"}]],[/(<\\!)(@qualifiedName)/,[{token:\"delimiter\"},{token:\"metatag\",next:\"@tag\"}]],[/<\\!\\[CDATA\\[/,{token:\"delimiter.cdata\",next:\"@cdata\"}],[/&\\w+;/,\"string.escape\"]],cdata:[[/[^\\]]+/,\"\"],[/\\]\\]>/,{token:\"delimiter.cdata\",next:\"@pop\"}],[/\\]/,\"\"]],tag:[[/[ \\t\\r\\n]+/,\"\"],[/(@qualifiedName)(\\s*=\\s*)(\"[^\"]*\"|'[^']*')/,[\"attribute.name\",\"\",\"attribute.value\"]],[/(@qualifiedName)(\\s*=\\s*)(\"[^\">?\\/]*|'[^'>?\\/]*)(?=[\\?\\/]\\>)/,[\"attribute.name\",\"\",\"attribute.value\"]],[/(@qualifiedName)(\\s*=\\s*)(\"[^\">]*|'[^'>]*)/,[\"attribute.name\",\"\",\"attribute.value\"]],[/@qualifiedName/,\"attribute.name\"],[/\\?>/,{token:\"delimiter\",next:\"@pop\"}],[/(\\/)(>)/,[{token:\"tag\"},{token:\"delimiter\",next:\"@pop\"}]],[/>/,{token:\"delimiter\",next:\"@pop\"}]],whitespace:[[/[ \\t\\r\\n]+/,\"\"],[/<!--/,{token:\"comment\",next:\"@comment\"}]],comment:[[/[^<\\-]+/,\"comment.content\"],[/-->/,{token:\"comment\",next:\"@pop\"}],[/<!--/,\"comment.content.invalid\"],[/[<\\-]/,\"comment.content\"]]}};var je={},_e=class{static getTokenizer(e){return e==\"xml\"&&!je[e]?this.createTokenizer(\"xml\",Vt):je[e]}static createTokenizer(e,t){let r=ge(e,t);return je[e]=new le(e,r)}};function or(s){let e;return s?(e=s.toIterable)?e.call(s):s:[]}var ar={\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\"},lr={\"[\":\"square open\",\"]\":\"square close\",\"{\":\"curly open\",\"}\":\"curly close\",\"(\":\"paren open\",\")\":\"paren close\"};function Kt(s){return s.replace(/[\\&\\<\\>]/g,function(e){return ar[e]})}function cr(s){return s.join(\" \").replace(/[\\[\\]\\{\\}\\(\\)]/g,function(e){return lr[e]})}function Ve(s,{verbose:e=!1}){let t=[],r=0,n=0,i=[];for(let a=0,o=or(s),f=o.length;a<f;a++){let c=o[a],l=c.value,p=c.type.split(\".\"),[u,h]=p,T=c.mods;if(c.var){let v=i.indexOf(c.var);v==-1&&(v=i.push(c.var)-1),p.push(\"vref\"),p.push(\"var\"+v),p.push(c.var.type+\"-ref\"),T|=c.var.mods}if(T&z.Declaration&&p.push(\"decl\"),T&z.Root&&p.push(\"root\"),T&z.Local&&p.push(\"local\"),c.end&&c.end.start==c&&t.push(\"<b>\"),!((h==\"start\"||h==\"open\")&&(t.push(\"<b class='\"+u+\"'>\"),!l))){if((h==\"end\"||h==\"close\")&&!l){t.push(\"</b>\");continue}if(u==\"push\"){l=String(++r);let v=h.indexOf(\"_\")>=0?\"group\":\"scope\",A=c.scope&&c.scope.end;t.push(\"<div class='\"+v+\"-\"+h.split(\"_\").pop()+\" _\"+h+\" l\"+r+\" o\"+c.offset+\" e\"+(A&&A.offset)+\"'>\");continue}else if(u==\"pop\"){l=String(--r),t.push(\"</div>\");continue}u!=\"white\"&&u!=\"line\"?l=\"<i class='\"+cr(p)+\" o\"+c.offset+\"'>\"+Kt(l||\"\")+\"</i>\":u==\"white\"&&l!=`\n`&&(l=\"<i raw='\"+JSON.stringify(l)+\"'>\"+Kt(l||\"\")+\"</i>\"),t.push(l),(h==\"end\"||h==\"close\"||c.start)&&t.push(\"</b>\")}}return t.join(\"\")}0&&(module.exports={CompletionTypes,Group,ImbaDocument,KeywordTypes,Keywords,M,Monarch,Node,Position,Range,Scope,SemanticTokenModifiers,SemanticTokenTypes,Sym,SymbolFlags,SymbolKind,Token,grammar,highlight,lexer});\n", "import { WorkerManager, setupMode } from './client'\nimport { grammar } from './grammar'\n\nexport const id = 'imba'\nexport const extensions = ['.imba']\nexport const aliases = ['Imba', 'imba']\nexport const mimetypes = ['application/imba']\n\nexport const conf = {\n\twordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#%\\^\\&\\*\\(\\)\\=\\$\\-\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\n\tcomments: {\n\t\tblockComment: ['###', '###'],\n\t\tlineComment: '#'\n\t},\n\tbrackets: [\n\t\t['{', '}','delimiter.curly'],\n\t\t['[', ']','delimiter.square'],\n\t\t['(', ')','delimiter.parenthesis'],\n\t\t['<', '>','delimiter.angle']\n\t],\n\tautoClosingPairs: [\n\t\t{ open: '\"', close: '\"', notIn: ['string', 'comment'] },\n\t\t{ open: '\\'', close: '\\'', notIn: ['string', 'comment'] },\n\t\t{ open: '{', close: '}', notIn: ['comment'] },\n\t\t{ open: '[', close: ']', notIn: ['string', 'comment'] },\n\t\t{ open: '(', close: ')', notIn: ['string', 'comment'] },\n\t\t{ open: '<', close: '>', notIn: ['string','comment','operators'] },\n\t],\n\tonEnterRules: [{\n\t\tbeforeText: /^\\s*(?:(?:def|get|set) [\\[\\w]|class|for|if|elif|else|while|try|with|finally|except|tag |extend |augment ).*?$/,\n\t\taction: { indentAction: 1 }\n\t},{\n\t\tbeforeText: /\\s*(?:do)\\s*(\\|.*\\|\\s*)?$/,\n\t\taction: { indentAction: 1 }\n\t},{\n\t\tbeforeText: /\\s*(?:do)\\s*(\\(.*\\)\\s*)?$/,\n\t\taction: { indentAction: 1 }\n\t}]\n}\n\n\ngrammar.tokenPostfix = '.imba'\n\nexport let language = grammar\n\nexport def setup monaco, lang\n\tsetupMode('imba',monaco)\n\t\n\n\t# monaco.languages.register({id,extensions,aliases})\n\t# monaco.languages.onLanguage(id) do\n\t#\tconsole.log 'monaco onLanguage',id,language\n\t#\t# monaco.languages.setMonarchTokensProvider(id, language)\n\t#\t# monaco.languages.setLanguageConfiguration(id, configuration)\n\t#\tsetupMode(id)", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n\nexport const conf= {\n\tcomments: {\n\t\tlineComment: '--',\n\t\tblockComment: ['/*', '*/']\n\t},\n\tbrackets: [\n\t\t['{', '}'],\n\t\t['[', ']'],\n\t\t['(', ')']\n\t],\n\tautoClosingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: \"'\", close: \"'\" }\n\t],\n\tsurroundingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: \"'\", close: \"'\" }\n\t]\n};\n\nexport const language = {\n\tdefaultToken: '',\n\ttokenPostfix: '.sql',\n\tignoreCase: true,\n\n\tbrackets: [\n\t\t{ open: '[', close: ']', token: 'delimiter.square' },\n\t\t{ open: '(', close: ')', token: 'delimiter.parenthesis' }\n\t],\n\n\tkeywords: [\n\t\t// This list is generated using `keywords.js`\n\t\t'ABORT',\n\t\t'ABSOLUTE',\n\t\t'ACTION',\n\t\t'ADA',\n\t\t'ADD',\n\t\t'AFTER',\n\t\t'ALL',\n\t\t'ALLOCATE',\n\t\t'ALTER',\n\t\t'ALWAYS',\n\t\t'ANALYZE',\n\t\t'AND',\n\t\t'ANY',\n\t\t'ARE',\n\t\t'AS',\n\t\t'ASC',\n\t\t'ASSERTION',\n\t\t'AT',\n\t\t'ATTACH',\n\t\t'AUTHORIZATION',\n\t\t'AUTOINCREMENT',\n\t\t'AVG',\n\t\t'BACKUP',\n\t\t'BEFORE',\n\t\t'BEGIN',\n\t\t'BETWEEN',\n\t\t'BIT',\n\t\t'BIT_LENGTH',\n\t\t'BOTH',\n\t\t'BREAK',\n\t\t'BROWSE',\n\t\t'BULK',\n\t\t'BY',\n\t\t'CASCADE',\n\t\t'CASCADED',\n\t\t'CASE',\n\t\t'CAST',\n\t\t'CATALOG',\n\t\t'CHAR',\n\t\t'CHARACTER',\n\t\t'CHARACTER_LENGTH',\n\t\t'CHAR_LENGTH',\n\t\t'CHECK',\n\t\t'CHECKPOINT',\n\t\t'CLOSE',\n\t\t'CLUSTERED',\n\t\t'COALESCE',\n\t\t'COLLATE',\n\t\t'COLLATION',\n\t\t'COLUMN',\n\t\t'COMMIT',\n\t\t'COMPUTE',\n\t\t'CONFLICT',\n\t\t'CONNECT',\n\t\t'CONNECTION',\n\t\t'CONSTRAINT',\n\t\t'CONSTRAINTS',\n\t\t'CONTAINS',\n\t\t'CONTAINSTABLE',\n\t\t'CONTINUE',\n\t\t'CONVERT',\n\t\t'CORRESPONDING',\n\t\t'COUNT',\n\t\t'CREATE',\n\t\t'CROSS',\n\t\t'CURRENT',\n\t\t'CURRENT_DATE',\n\t\t'CURRENT_TIME',\n\t\t'CURRENT_TIMESTAMP',\n\t\t'CURRENT_USER',\n\t\t'CURSOR',\n\t\t'DATABASE',\n\t\t'DATE',\n\t\t'DAY',\n\t\t'DBCC',\n\t\t'DEALLOCATE',\n\t\t'DEC',\n\t\t'DECIMAL',\n\t\t'DECLARE',\n\t\t'DEFAULT',\n\t\t'DEFERRABLE',\n\t\t'DEFERRED',\n\t\t'DELETE',\n\t\t'DENY',\n\t\t'DESC',\n\t\t'DESCRIBE',\n\t\t'DESCRIPTOR',\n\t\t'DETACH',\n\t\t'DIAGNOSTICS',\n\t\t'DISCONNECT',\n\t\t'DISK',\n\t\t'DISTINCT',\n\t\t'DISTRIBUTED',\n\t\t'DO',\n\t\t'DOMAIN',\n\t\t'DOUBLE',\n\t\t'DROP',\n\t\t'DUMP',\n\t\t'EACH',\n\t\t'ELSE',\n\t\t'END',\n\t\t'END-EXEC',\n\t\t'ERRLVL',\n\t\t'ESCAPE',\n\t\t'EXCEPT',\n\t\t'EXCEPTION',\n\t\t'EXCLUDE',\n\t\t'EXCLUSIVE',\n\t\t'EXEC',\n\t\t'EXECUTE',\n\t\t'EXISTS',\n\t\t'EXIT',\n\t\t'EXPLAIN',\n\t\t'EXTERNAL',\n\t\t'EXTRACT',\n\t\t'FAIL',\n\t\t'FALSE',\n\t\t'FETCH',\n\t\t'FILE',\n\t\t'FILLFACTOR',\n\t\t'FILTER',\n\t\t'FIRST',\n\t\t'FLOAT',\n\t\t'FOLLOWING',\n\t\t'FOR',\n\t\t'FOREIGN',\n\t\t'FORTRAN',\n\t\t'FOUND',\n\t\t'FREETEXT',\n\t\t'FREETEXTTABLE',\n\t\t'FROM',\n\t\t'FULL',\n\t\t'FUNCTION',\n\t\t'GENERATED',\n\t\t'GET',\n\t\t'GLOB',\n\t\t'GLOBAL',\n\t\t'GO',\n\t\t'GOTO',\n\t\t'GRANT',\n\t\t'GROUP',\n\t\t'GROUPS',\n\t\t'HAVING',\n\t\t'HOLDLOCK',\n\t\t'HOUR',\n\t\t'IDENTITY',\n\t\t'IDENTITYCOL',\n\t\t'IDENTITY_INSERT',\n\t\t'IF',\n\t\t'IGNORE',\n\t\t'IMMEDIATE',\n\t\t'IN',\n\t\t'INCLUDE',\n\t\t'INDEX',\n\t\t'INDEXED',\n\t\t'INDICATOR',\n\t\t'INITIALLY',\n\t\t'INNER',\n\t\t'INPUT',\n\t\t'INSENSITIVE',\n\t\t'INSERT',\n\t\t'INSTEAD',\n\t\t'INT',\n\t\t'INTEGER',\n\t\t'INTERSECT',\n\t\t'INTERVAL',\n\t\t'INTO',\n\t\t'IS',\n\t\t'ISNULL',\n\t\t'ISOLATION',\n\t\t'JOIN',\n\t\t'KEY',\n\t\t'KILL',\n\t\t'LANGUAGE',\n\t\t'LAST',\n\t\t'LEADING',\n\t\t'LEFT',\n\t\t'LEVEL',\n\t\t'LIKE',\n\t\t'LIMIT',\n\t\t'LINENO',\n\t\t'LOAD',\n\t\t'LOCAL',\n\t\t'LOWER',\n\t\t'MATCH',\n\t\t'MATERIALIZED',\n\t\t'MAX',\n\t\t'MERGE',\n\t\t'MIN',\n\t\t'MINUTE',\n\t\t'MODULE',\n\t\t'MONTH',\n\t\t'NAMES',\n\t\t'NATIONAL',\n\t\t'NATURAL',\n\t\t'NCHAR',\n\t\t'NEXT',\n\t\t'NO',\n\t\t'NOCHECK',\n\t\t'NONCLUSTERED',\n\t\t'NONE',\n\t\t'NOT',\n\t\t'NOTHING',\n\t\t'NOTNULL',\n\t\t'NULL',\n\t\t'NULLIF',\n\t\t'NULLS',\n\t\t'NUMERIC',\n\t\t'OCTET_LENGTH',\n\t\t'OF',\n\t\t'OFF',\n\t\t'OFFSET',\n\t\t'OFFSETS',\n\t\t'ON',\n\t\t'ONLY',\n\t\t'OPEN',\n\t\t'OPENDATASOURCE',\n\t\t'OPENQUERY',\n\t\t'OPENROWSET',\n\t\t'OPENXML',\n\t\t'OPTION',\n\t\t'OR',\n\t\t'ORDER',\n\t\t'OTHERS',\n\t\t'OUTER',\n\t\t'OUTPUT',\n\t\t'OVER',\n\t\t'OVERLAPS',\n\t\t'PAD',\n\t\t'PARTIAL',\n\t\t'PARTITION',\n\t\t'PASCAL',\n\t\t'PERCENT',\n\t\t'PIVOT',\n\t\t'PLAN',\n\t\t'POSITION',\n\t\t'PRAGMA',\n\t\t'PRECEDING',\n\t\t'PRECISION',\n\t\t'PREPARE',\n\t\t'PRESERVE',\n\t\t'PRIMARY',\n\t\t'PRINT',\n\t\t'PRIOR',\n\t\t'PRIVILEGES',\n\t\t'PROC',\n\t\t'PROCEDURE',\n\t\t'PUBLIC',\n\t\t'QUERY',\n\t\t'RAISE',\n\t\t'RAISERROR',\n\t\t'RANGE',\n\t\t'READ',\n\t\t'READTEXT',\n\t\t'REAL',\n\t\t'RECONFIGURE',\n\t\t'RECURSIVE',\n\t\t'REFERENCES',\n\t\t'REGEXP',\n\t\t'REINDEX',\n\t\t'RELATIVE',\n\t\t'RELEASE',\n\t\t'RENAME',\n\t\t'REPLACE',\n\t\t'REPLICATION',\n\t\t'RESTORE',\n\t\t'RESTRICT',\n\t\t'RETURN',\n\t\t'RETURNING',\n\t\t'REVERT',\n\t\t'REVOKE',\n\t\t'RIGHT',\n\t\t'ROLLBACK',\n\t\t'ROW',\n\t\t'ROWCOUNT',\n\t\t'ROWGUIDCOL',\n\t\t'ROWS',\n\t\t'RULE',\n\t\t'SAVE',\n\t\t'SAVEPOINT',\n\t\t'SCHEMA',\n\t\t'SCROLL',\n\t\t'SECOND',\n\t\t'SECTION',\n\t\t'SECURITYAUDIT',\n\t\t'SELECT',\n\t\t'SEMANTICKEYPHRASETABLE',\n\t\t'SEMANTICSIMILARITYDETAILSTABLE',\n\t\t'SEMANTICSIMILARITYTABLE',\n\t\t'SESSION',\n\t\t'SESSION_USER',\n\t\t'SET',\n\t\t'SETUSER',\n\t\t'SHUTDOWN',\n\t\t'SIZE',\n\t\t'SMALLINT',\n\t\t'SOME',\n\t\t'SPACE',\n\t\t'SQL',\n\t\t'SQLCA',\n\t\t'SQLCODE',\n\t\t'SQLERROR',\n\t\t'SQLSTATE',\n\t\t'SQLWARNING',\n\t\t'STATISTICS',\n\t\t'SUBSTRING',\n\t\t'SUM',\n\t\t'SYSTEM_USER',\n\t\t'TABLE',\n\t\t'TABLESAMPLE',\n\t\t'TEMP',\n\t\t'TEMPORARY',\n\t\t'TEXTSIZE',\n\t\t'THEN',\n\t\t'TIES',\n\t\t'TIME',\n\t\t'TIMESTAMP',\n\t\t'TIMEZONE_HOUR',\n\t\t'TIMEZONE_MINUTE',\n\t\t'TO',\n\t\t'TOP',\n\t\t'TRAILING',\n\t\t'TRAN',\n\t\t'TRANSACTION',\n\t\t'TRANSLATE',\n\t\t'TRANSLATION',\n\t\t'TRIGGER',\n\t\t'TRIM',\n\t\t'TRUE',\n\t\t'TRUNCATE',\n\t\t'TRY_CONVERT',\n\t\t'TSEQUAL',\n\t\t'UNBOUNDED',\n\t\t'UNION',\n\t\t'UNIQUE',\n\t\t'UNKNOWN',\n\t\t'UNPIVOT',\n\t\t'UPDATE',\n\t\t'UPDATETEXT',\n\t\t'UPPER',\n\t\t'USAGE',\n\t\t'USE',\n\t\t'USER',\n\t\t'USING',\n\t\t'VACUUM',\n\t\t'VALUE',\n\t\t'VALUES',\n\t\t'VARCHAR',\n\t\t'VARYING',\n\t\t'VIEW',\n\t\t'VIRTUAL',\n\t\t'WAITFOR',\n\t\t'WHEN',\n\t\t'WHENEVER',\n\t\t'WHERE',\n\t\t'WHILE',\n\t\t'WINDOW',\n\t\t'WITH',\n\t\t'WITHIN GROUP',\n\t\t'WITHOUT',\n\t\t'WORK',\n\t\t'WRITE',\n\t\t'WRITETEXT',\n\t\t'YEAR',\n\t\t'ZONE'\n\t],\n\toperators: [\n\t\t// Logical\n\t\t'ALL',\n\t\t'AND',\n\t\t'ANY',\n\t\t'BETWEEN',\n\t\t'EXISTS',\n\t\t'IN',\n\t\t'LIKE',\n\t\t'NOT',\n\t\t'OR',\n\t\t'SOME',\n\t\t// Set\n\t\t'EXCEPT',\n\t\t'INTERSECT',\n\t\t'UNION',\n\t\t// Join\n\t\t'APPLY',\n\t\t'CROSS',\n\t\t'FULL',\n\t\t'INNER',\n\t\t'JOIN',\n\t\t'LEFT',\n\t\t'OUTER',\n\t\t'RIGHT',\n\t\t// Predicates\n\t\t'CONTAINS',\n\t\t'FREETEXT',\n\t\t'IS',\n\t\t'NULL',\n\t\t// Pivoting\n\t\t'PIVOT',\n\t\t'UNPIVOT',\n\t\t// Merging\n\t\t'MATCHED'\n\t],\n\tbuiltinFunctions: [\n\t\t// Aggregate\n\t\t'AVG',\n\t\t'CHECKSUM_AGG',\n\t\t'COUNT',\n\t\t'COUNT_BIG',\n\t\t'GROUPING',\n\t\t'GROUPING_ID',\n\t\t'MAX',\n\t\t'MIN',\n\t\t'SUM',\n\t\t'STDEV',\n\t\t'STDEVP',\n\t\t'VAR',\n\t\t'VARP',\n\t\t// Analytic\n\t\t'CUME_DIST',\n\t\t'FIRST_VALUE',\n\t\t'LAG',\n\t\t'LAST_VALUE',\n\t\t'LEAD',\n\t\t'PERCENTILE_CONT',\n\t\t'PERCENTILE_DISC',\n\t\t'PERCENT_RANK',\n\t\t// Collation\n\t\t'COLLATE',\n\t\t'COLLATIONPROPERTY',\n\t\t'TERTIARY_WEIGHTS',\n\t\t// Azure\n\t\t'FEDERATION_FILTERING_VALUE',\n\t\t// Conversion\n\t\t'CAST',\n\t\t'CONVERT',\n\t\t'PARSE',\n\t\t'TRY_CAST',\n\t\t'TRY_CONVERT',\n\t\t'TRY_PARSE',\n\t\t// Cryptographic\n\t\t'ASYMKEY_ID',\n\t\t'ASYMKEYPROPERTY',\n\t\t'CERTPROPERTY',\n\t\t'CERT_ID',\n\t\t'CRYPT_GEN_RANDOM',\n\t\t'DECRYPTBYASYMKEY',\n\t\t'DECRYPTBYCERT',\n\t\t'DECRYPTBYKEY',\n\t\t'DECRYPTBYKEYAUTOASYMKEY',\n\t\t'DECRYPTBYKEYAUTOCERT',\n\t\t'DECRYPTBYPASSPHRASE',\n\t\t'ENCRYPTBYASYMKEY',\n\t\t'ENCRYPTBYCERT',\n\t\t'ENCRYPTBYKEY',\n\t\t'ENCRYPTBYPASSPHRASE',\n\t\t'HASHBYTES',\n\t\t'IS_OBJECTSIGNED',\n\t\t'KEY_GUID',\n\t\t'KEY_ID',\n\t\t'KEY_NAME',\n\t\t'SIGNBYASYMKEY',\n\t\t'SIGNBYCERT',\n\t\t'SYMKEYPROPERTY',\n\t\t'VERIFYSIGNEDBYCERT',\n\t\t'VERIFYSIGNEDBYASYMKEY',\n\t\t// Cursor\n\t\t'CURSOR_STATUS',\n\t\t// Datatype\n\t\t'DATALENGTH',\n\t\t'IDENT_CURRENT',\n\t\t'IDENT_INCR',\n\t\t'IDENT_SEED',\n\t\t'IDENTITY',\n\t\t'SQL_VARIANT_PROPERTY',\n\t\t// Datetime\n\t\t'CURRENT_TIMESTAMP',\n\t\t'DATEADD',\n\t\t'DATEDIFF',\n\t\t'DATEFROMPARTS',\n\t\t'DATENAME',\n\t\t'DATEPART',\n\t\t'DATETIME2FROMPARTS',\n\t\t'DATETIMEFROMPARTS',\n\t\t'DATETIMEOFFSETFROMPARTS',\n\t\t'DAY',\n\t\t'EOMONTH',\n\t\t'GETDATE',\n\t\t'GETUTCDATE',\n\t\t'ISDATE',\n\t\t'MONTH',\n\t\t'SMALLDATETIMEFROMPARTS',\n\t\t'SWITCHOFFSET',\n\t\t'SYSDATETIME',\n\t\t'SYSDATETIMEOFFSET',\n\t\t'SYSUTCDATETIME',\n\t\t'TIMEFROMPARTS',\n\t\t'TODATETIMEOFFSET',\n\t\t'YEAR',\n\t\t// Logical\n\t\t'CHOOSE',\n\t\t'COALESCE',\n\t\t'IIF',\n\t\t'NULLIF',\n\t\t// Mathematical\n\t\t'ABS',\n\t\t'ACOS',\n\t\t'ASIN',\n\t\t'ATAN',\n\t\t'ATN2',\n\t\t'CEILING',\n\t\t'COS',\n\t\t'COT',\n\t\t'DEGREES',\n\t\t'EXP',\n\t\t'FLOOR',\n\t\t'LOG',\n\t\t'LOG10',\n\t\t'PI',\n\t\t'POWER',\n\t\t'RADIANS',\n\t\t'RAND',\n\t\t'ROUND',\n\t\t'SIGN',\n\t\t'SIN',\n\t\t'SQRT',\n\t\t'SQUARE',\n\t\t'TAN',\n\t\t// Metadata\n\t\t'APP_NAME',\n\t\t'APPLOCK_MODE',\n\t\t'APPLOCK_TEST',\n\t\t'ASSEMBLYPROPERTY',\n\t\t'COL_LENGTH',\n\t\t'COL_NAME',\n\t\t'COLUMNPROPERTY',\n\t\t'DATABASE_PRINCIPAL_ID',\n\t\t'DATABASEPROPERTYEX',\n\t\t'DB_ID',\n\t\t'DB_NAME',\n\t\t'FILE_ID',\n\t\t'FILE_IDEX',\n\t\t'FILE_NAME',\n\t\t'FILEGROUP_ID',\n\t\t'FILEGROUP_NAME',\n\t\t'FILEGROUPPROPERTY',\n\t\t'FILEPROPERTY',\n\t\t'FULLTEXTCATALOGPROPERTY',\n\t\t'FULLTEXTSERVICEPROPERTY',\n\t\t'INDEX_COL',\n\t\t'INDEXKEY_PROPERTY',\n\t\t'INDEXPROPERTY',\n\t\t'OBJECT_DEFINITION',\n\t\t'OBJECT_ID',\n\t\t'OBJECT_NAME',\n\t\t'OBJECT_SCHEMA_NAME',\n\t\t'OBJECTPROPERTY',\n\t\t'OBJECTPROPERTYEX',\n\t\t'ORIGINAL_DB_NAME',\n\t\t'PARSENAME',\n\t\t'SCHEMA_ID',\n\t\t'SCHEMA_NAME',\n\t\t'SCOPE_IDENTITY',\n\t\t'SERVERPROPERTY',\n\t\t'STATS_DATE',\n\t\t'TYPE_ID',\n\t\t'TYPE_NAME',\n\t\t'TYPEPROPERTY',\n\t\t// Ranking\n\t\t'DENSE_RANK',\n\t\t'NTILE',\n\t\t'RANK',\n\t\t'ROW_NUMBER',\n\t\t// Replication\n\t\t'PUBLISHINGSERVERNAME',\n\t\t// Rowset\n\t\t'OPENDATASOURCE',\n\t\t'OPENQUERY',\n\t\t'OPENROWSET',\n\t\t'OPENXML',\n\t\t// Security\n\t\t'CERTENCODED',\n\t\t'CERTPRIVATEKEY',\n\t\t'CURRENT_USER',\n\t\t'HAS_DBACCESS',\n\t\t'HAS_PERMS_BY_NAME',\n\t\t'IS_MEMBER',\n\t\t'IS_ROLEMEMBER',\n\t\t'IS_SRVROLEMEMBER',\n\t\t'LOGINPROPERTY',\n\t\t'ORIGINAL_LOGIN',\n\t\t'PERMISSIONS',\n\t\t'PWDENCRYPT',\n\t\t'PWDCOMPARE',\n\t\t'SESSION_USER',\n\t\t'SESSIONPROPERTY',\n\t\t'SUSER_ID',\n\t\t'SUSER_NAME',\n\t\t'SUSER_SID',\n\t\t'SUSER_SNAME',\n\t\t'SYSTEM_USER',\n\t\t'USER',\n\t\t'USER_ID',\n\t\t'USER_NAME',\n\t\t// String\n\t\t'ASCII',\n\t\t'CHAR',\n\t\t'CHARINDEX',\n\t\t'CONCAT',\n\t\t'DIFFERENCE',\n\t\t'FORMAT',\n\t\t'LEFT',\n\t\t'LEN',\n\t\t'LOWER',\n\t\t'LTRIM',\n\t\t'NCHAR',\n\t\t'PATINDEX',\n\t\t'QUOTENAME',\n\t\t'REPLACE',\n\t\t'REPLICATE',\n\t\t'REVERSE',\n\t\t'RIGHT',\n\t\t'RTRIM',\n\t\t'SOUNDEX',\n\t\t'SPACE',\n\t\t'STR',\n\t\t'STUFF',\n\t\t'SUBSTRING',\n\t\t'UNICODE',\n\t\t'UPPER',\n\t\t// System\n\t\t'BINARY_CHECKSUM',\n\t\t'CHECKSUM',\n\t\t'CONNECTIONPROPERTY',\n\t\t'CONTEXT_INFO',\n\t\t'CURRENT_REQUEST_ID',\n\t\t'ERROR_LINE',\n\t\t'ERROR_NUMBER',\n\t\t'ERROR_MESSAGE',\n\t\t'ERROR_PROCEDURE',\n\t\t'ERROR_SEVERITY',\n\t\t'ERROR_STATE',\n\t\t'FORMATMESSAGE',\n\t\t'GETANSINULL',\n\t\t'GET_FILESTREAM_TRANSACTION_CONTEXT',\n\t\t'HOST_ID',\n\t\t'HOST_NAME',\n\t\t'ISNULL',\n\t\t'ISNUMERIC',\n\t\t'MIN_ACTIVE_ROWVERSION',\n\t\t'NEWID',\n\t\t'NEWSEQUENTIALID',\n\t\t'ROWCOUNT_BIG',\n\t\t'XACT_STATE',\n\t\t// TextImage\n\t\t'TEXTPTR',\n\t\t'TEXTVALID',\n\t\t// Trigger\n\t\t'COLUMNS_UPDATED',\n\t\t'EVENTDATA',\n\t\t'TRIGGER_NESTLEVEL',\n\t\t'UPDATE',\n\t\t// ChangeTracking\n\t\t'CHANGETABLE',\n\t\t'CHANGE_TRACKING_CONTEXT',\n\t\t'CHANGE_TRACKING_CURRENT_VERSION',\n\t\t'CHANGE_TRACKING_IS_COLUMN_IN_MASK',\n\t\t'CHANGE_TRACKING_MIN_VALID_VERSION',\n\t\t// FullTextSearch\n\t\t'CONTAINSTABLE',\n\t\t'FREETEXTTABLE',\n\t\t// SemanticTextSearch\n\t\t'SEMANTICKEYPHRASETABLE',\n\t\t'SEMANTICSIMILARITYDETAILSTABLE',\n\t\t'SEMANTICSIMILARITYTABLE',\n\t\t// FileStream\n\t\t'FILETABLEROOTPATH',\n\t\t'GETFILENAMESPACEPATH',\n\t\t'GETPATHLOCATOR',\n\t\t'PATHNAME',\n\t\t// ServiceBroker\n\t\t'GET_TRANSMISSION_STATUS'\n\t],\n\tbuiltinVariables: [\n\t\t// Configuration\n\t\t'@@DATEFIRST',\n\t\t'@@DBTS',\n\t\t'@@LANGID',\n\t\t'@@LANGUAGE',\n\t\t'@@LOCK_TIMEOUT',\n\t\t'@@MAX_CONNECTIONS',\n\t\t'@@MAX_PRECISION',\n\t\t'@@NESTLEVEL',\n\t\t'@@OPTIONS',\n\t\t'@@REMSERVER',\n\t\t'@@SERVERNAME',\n\t\t'@@SERVICENAME',\n\t\t'@@SPID',\n\t\t'@@TEXTSIZE',\n\t\t'@@VERSION',\n\t\t// Cursor\n\t\t'@@CURSOR_ROWS',\n\t\t'@@FETCH_STATUS',\n\t\t// Datetime\n\t\t'@@DATEFIRST',\n\t\t// Metadata\n\t\t'@@PROCID',\n\t\t// System\n\t\t'@@ERROR',\n\t\t'@@IDENTITY',\n\t\t'@@ROWCOUNT',\n\t\t'@@TRANCOUNT',\n\t\t// Stats\n\t\t'@@CONNECTIONS',\n\t\t'@@CPU_BUSY',\n\t\t'@@IDLE',\n\t\t'@@IO_BUSY',\n\t\t'@@PACKET_ERRORS',\n\t\t'@@PACK_RECEIVED',\n\t\t'@@PACK_SENT',\n\t\t'@@TIMETICKS',\n\t\t'@@TOTAL_ERRORS',\n\t\t'@@TOTAL_READ',\n\t\t'@@TOTAL_WRITE'\n\t],\n\tpseudoColumns: ['$ACTION', '$IDENTITY', '$ROWGUID', '$PARTITION'],\n\ttokenizer: {\n\t\troot: [\n\t\t\t{ include: '@comments' },\n\t\t\t{ include: '@whitespace' },\n\t\t\t{ include: '@pseudoColumns' },\n\t\t\t{ include: '@numbers' },\n\t\t\t{ include: '@strings' },\n\t\t\t{ include: '@complexIdentifiers' },\n\t\t\t{ include: '@scopes' },\n\t\t\t[/[;,.]/, 'delimiter'],\n\t\t\t[/[()]/, '@brackets'],\n\t\t\t[\n\t\t\t\t/[\\w@#$]+/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@operators': 'operator',\n\t\t\t\t\t\t'@builtinVariables': 'predefined',\n\t\t\t\t\t\t'@builtinFunctions': 'predefined',\n\t\t\t\t\t\t'@keywords': 'keyword',\n\t\t\t\t\t\t'@default': 'identifier'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t[/[<>=!%&+\\-*/|~^]/, 'operator']\n\t\t],\n\t\twhitespace: [[/\\s+/, 'white']],\n\t\tcomments: [\n\t\t\t[/--+.*/, 'comment'],\n\t\t\t[/\\/\\*/, { token: 'comment.quote', next: '@comment' }]\n\t\t],\n\t\tcomment: [\n\t\t\t[/[^*/]+/, 'comment'],\n\t\t\t// Not supporting nested comments, as nested comments seem to not be standard?\n\t\t\t// i.e. http://stackoverflow.com/questions/728172/are-there-multiline-comment-delimiters-in-sql-that-are-vendor-agnostic\n\t\t\t// [/\\/\\*/, { token: 'comment.quote', next: '@push' }], // nested comment not allowed :-(\n\t\t\t[/\\*\\//, { token: 'comment.quote', next: '@pop' }],\n\t\t\t[/./, 'comment']\n\t\t],\n\t\tpseudoColumns: [\n\t\t\t[\n\t\t\t\t/[$][A-Za-z_][\\w@#$]*/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@pseudoColumns': 'predefined',\n\t\t\t\t\t\t'@default': 'identifier'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t],\n\t\tnumbers: [\n\t\t\t[/0[xX][0-9a-fA-F]*/, 'number'],\n\t\t\t[/[$][+-]*\\d*(\\.\\d*)?/, 'number'],\n\t\t\t[/((\\d+(\\.\\d*)?)|(\\.\\d+))([eE][\\-+]?\\d+)?/, 'number']\n\t\t],\n\t\tstrings: [\n\t\t\t[/N'/, { token: 'string', next: '@string' }],\n\t\t\t[/'/, { token: 'string', next: '@string' }]\n\t\t],\n\t\tstring: [\n\t\t\t[/[^']+/, 'string'],\n\t\t\t[/''/, 'string'],\n\t\t\t[/'/, { token: 'string', next: '@pop' }]\n\t\t],\n\t\tcomplexIdentifiers: [\n\t\t\t[/\\[/, { token: 'identifier.quote', next: '@bracketedIdentifier' }],\n\t\t\t[/\"/, { token: 'identifier.quote', next: '@quotedIdentifier' }]\n\t\t],\n\t\tbracketedIdentifier: [\n\t\t\t[/[^\\]]+/, 'identifier'],\n\t\t\t[/]]/, 'identifier'],\n\t\t\t[/]/, { token: 'identifier.quote', next: '@pop' }]\n\t\t],\n\t\tquotedIdentifier: [\n\t\t\t[/[^\"]+/, 'identifier'],\n\t\t\t[/\"\"/, 'identifier'],\n\t\t\t[/\"/, { token: 'identifier.quote', next: '@pop' }]\n\t\t],\n\t\tscopes: [\n\t\t\t[/BEGIN\\s+(DISTRIBUTED\\s+)?TRAN(SACTION)?\\b/i, 'keyword'],\n\t\t\t[/BEGIN\\s+TRY\\b/i, { token: 'keyword.try' }],\n\t\t\t[/END\\s+TRY\\b/i, { token: 'keyword.try' }],\n\t\t\t[/BEGIN\\s+CATCH\\b/i, { token: 'keyword.catch' }],\n\t\t\t[/END\\s+CATCH\\b/i, { token: 'keyword.catch' }],\n\t\t\t[/(BEGIN|CASE)\\b/i, { token: 'keyword.block' }],\n\t\t\t[/END\\b/i, { token: 'keyword.block' }],\n\t\t\t[/WHEN\\b/i, { token: 'keyword.choice' }],\n\t\t\t[/THEN\\b/i, { token: 'keyword.choice' }]\n\t\t]\n\t}\n};\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n\nexport const conf= {\n\tcomments: {\n\t\tlineComment: '//',\n\t\tblockComment: ['/*', '*/']\n\t},\n\tbrackets: [\n\t\t['{', '}'],\n\t\t['[', ']'],\n\t\t['(', ')']\n\t],\n\tautoClosingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '`', close: '`', notIn: ['string'] },\n\t\t{ open: '\"', close: '\"', notIn: ['string'] },\n\t\t{ open: \"'\", close: \"'\", notIn: ['string', 'comment'] }\n\t],\n\tsurroundingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '`', close: '`' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: \"'\", close: \"'\" }\n\t]\n};\n\nexport const language = {\n\tdefaultToken: '',\n\ttokenPostfix: '.go',\n\n\tkeywords: [\n\t\t'break',\n\t\t'case',\n\t\t'chan',\n\t\t'const',\n\t\t'continue',\n\t\t'default',\n\t\t'defer',\n\t\t'else',\n\t\t'fallthrough',\n\t\t'for',\n\t\t'func',\n\t\t'go',\n\t\t'goto',\n\t\t'if',\n\t\t'import',\n\t\t'interface',\n\t\t'map',\n\t\t'package',\n\t\t'range',\n\t\t'return',\n\t\t'select',\n\t\t'struct',\n\t\t'switch',\n\t\t'type',\n\t\t'var',\n\t\t'bool',\n\t\t'true',\n\t\t'false',\n\t\t'uint8',\n\t\t'uint16',\n\t\t'uint32',\n\t\t'uint64',\n\t\t'int8',\n\t\t'int16',\n\t\t'int32',\n\t\t'int64',\n\t\t'float32',\n\t\t'float64',\n\t\t'complex64',\n\t\t'complex128',\n\t\t'byte',\n\t\t'rune',\n\t\t'uint',\n\t\t'int',\n\t\t'uintptr',\n\t\t'string',\n\t\t'nil'\n\t],\n\n\toperators: [\n\t\t'+',\n\t\t'-',\n\t\t'*',\n\t\t'/',\n\t\t'%',\n\t\t'&',\n\t\t'|',\n\t\t'^',\n\t\t'<<',\n\t\t'>>',\n\t\t'&^',\n\t\t'+=',\n\t\t'-=',\n\t\t'*=',\n\t\t'/=',\n\t\t'%=',\n\t\t'&=',\n\t\t'|=',\n\t\t'^=',\n\t\t'<<=',\n\t\t'>>=',\n\t\t'&^=',\n\t\t'&&',\n\t\t'||',\n\t\t'<-',\n\t\t'++',\n\t\t'--',\n\t\t'==',\n\t\t'<',\n\t\t'>',\n\t\t'=',\n\t\t'!',\n\t\t'!=',\n\t\t'<=',\n\t\t'>=',\n\t\t':=',\n\t\t'...',\n\t\t'(',\n\t\t')',\n\t\t'',\n\t\t']',\n\t\t'{',\n\t\t'}',\n\t\t',',\n\t\t';',\n\t\t'.',\n\t\t':'\n\t],\n\n\t// we include these common regular expressions\n\tsymbols: /[=><!~?:&|+\\-*\\/\\^%]+/,\n\tescapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\n\t// The main tokenizer for our languages\n\ttokenizer: {\n\t\troot: [\n\t\t\t// identifiers and keywords\n\t\t\t[\n\t\t\t\t/[a-zA-Z_]\\w*/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@keywords': { token: 'keyword.$0' },\n\t\t\t\t\t\t'@default': 'identifier'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\n\t\t\t// whitespace\n\t\t\t{ include: '@whitespace' },\n\n\t\t\t// [[ attributes ]].\n\t\t\t[/\\[\\[.*\\]\\]/, 'annotation'],\n\n\t\t\t// Preprocessor directive\n\t\t\t[/^\\s*#\\w+/, 'keyword'],\n\n\t\t\t// delimiters and operators\n\t\t\t[/[{}()\\[\\]]/, '@brackets'],\n\t\t\t[/[<>](?!@symbols)/, '@brackets'],\n\t\t\t[\n\t\t\t\t/@symbols/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@operators': 'delimiter',\n\t\t\t\t\t\t'@default': ''\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\n\t\t\t// numbers\n\t\t\t[/\\d*\\d+[eE]([\\-+]?\\d+)?/, 'number.float'],\n\t\t\t[/\\d*\\.\\d+([eE][\\-+]?\\d+)?/, 'number.float'],\n\t\t\t[/0[xX][0-9a-fA-F']*[0-9a-fA-F]/, 'number.hex'],\n\t\t\t[/0[0-7']*[0-7]/, 'number.octal'],\n\t\t\t[/0[bB][0-1']*[0-1]/, 'number.binary'],\n\t\t\t[/\\d[\\d']*/, 'number'],\n\t\t\t[/\\d/, 'number'],\n\n\t\t\t// delimiter: after number because of .\\d floats\n\t\t\t[/[;,.]/, 'delimiter'],\n\n\t\t\t// strings\n\t\t\t[/\"([^\"\\\\]|\\\\.)*$/, 'string.invalid'], // non-teminated string\n\t\t\t[/\"/, 'string', '@string'],\n\t\t\t[/`/, 'string', '@rawstring'],\n\n\t\t\t// characters\n\t\t\t[/'[^\\\\']'/, 'string'],\n\t\t\t[/(')(@escapes)(')/, ['string', 'string.escape', 'string']],\n\t\t\t[/'/, 'string.invalid']\n\t\t],\n\n\t\twhitespace: [\n\t\t\t[/[ \\t\\r\\n]+/, ''],\n\t\t\t[/\\/\\*\\*(?!\\/)/, 'comment.doc', '@doccomment'],\n\t\t\t[/\\/\\*/, 'comment', '@comment'],\n\t\t\t[/\\/\\/.*$/, 'comment']\n\t\t],\n\n\t\tcomment: [\n\t\t\t[/[^\\/*]+/, 'comment'],\n\t\t\t// [/\\/\\*/, 'comment', '@push' ], // nested comment not allowed :-(\n\t\t\t// [/\\/\\*/, 'comment.invalid' ], // this breaks block comments in the shape of /* //*/\n\t\t\t[/\\*\\//, 'comment', '@pop'],\n\t\t\t[/[\\/*]/, 'comment']\n\t\t],\n\t\t//Identical copy of comment above, except for the addition of .doc\n\t\tdoccomment: [\n\t\t\t[/[^\\/*]+/, 'comment.doc'],\n\t\t\t// [/\\/\\*/, 'comment.doc', '@push' ], // nested comment not allowed :-(\n\t\t\t[/\\/\\*/, 'comment.doc.invalid'],\n\t\t\t[/\\*\\//, 'comment.doc', '@pop'],\n\t\t\t[/[\\/*]/, 'comment.doc']\n\t\t],\n\n\t\tstring: [\n\t\t\t[/[^\\\\\"]+/, 'string'],\n\t\t\t[/@escapes/, 'string.escape'],\n\t\t\t[/\\\\./, 'string.escape.invalid'],\n\t\t\t[/\"/, 'string', '@pop']\n\t\t],\n\n\t\trawstring: [\n\t\t\t[/[^\\`]/, 'string'],\n\t\t\t[/`/, 'string', '@pop']\n\t\t]\n\t}\n};\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n\nexport const conf= {\n\t// the default separators except `@$`\n\twordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\n\tcomments: {\n\t\tlineComment: '//',\n\t\tblockComment: ['/*', '*/']\n\t},\n\tbrackets: [\n\t\t['{', '}'],\n\t\t['[', ']'],\n\t\t['(', ')']\n\t],\n\tautoClosingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: \"'\", close: \"'\" }\n\t],\n\tsurroundingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: \"'\", close: \"'\" },\n\t\t{ open: '<', close: '>' }\n\t],\n\tfolding: {\n\t\tmarkers: {\n\t\t\tstart: new RegExp('^\\\\s*//\\\\s*(?:(?:#?region\\\\b)|(?:<editor-fold\\\\b))'),\n\t\t\tend: new RegExp('^\\\\s*//\\\\s*(?:(?:#?endregion\\\\b)|(?:</editor-fold>))')\n\t\t}\n\t}\n};\n\nexport const language = {\n\tdefaultToken: '',\n\ttokenPostfix: '.kt',\n\n\tkeywords: [\n\t\t'as',\n\t\t'as?',\n\t\t'break',\n\t\t'class',\n\t\t'continue',\n\t\t'do',\n\t\t'else',\n\t\t'false',\n\t\t'for',\n\t\t'fun',\n\t\t'if',\n\t\t'in',\n\t\t'!in',\n\t\t'interface',\n\t\t'is',\n\t\t'!is',\n\t\t'null',\n\t\t'object',\n\t\t'package',\n\t\t'return',\n\t\t'super',\n\t\t'this',\n\t\t'throw',\n\t\t'true',\n\t\t'try',\n\t\t'typealias',\n\t\t'val',\n\t\t'var',\n\t\t'when',\n\t\t'while',\n\t\t'by',\n\t\t'catch',\n\t\t'constructor',\n\t\t'delegate',\n\t\t'dynamic',\n\t\t'field',\n\t\t'file',\n\t\t'finally',\n\t\t'get',\n\t\t'import',\n\t\t'init',\n\t\t'param',\n\t\t'property',\n\t\t'receiver',\n\t\t'set',\n\t\t'setparam',\n\t\t'where',\n\t\t'actual',\n\t\t'abstract',\n\t\t'annotation',\n\t\t'companion',\n\t\t'const',\n\t\t'crossinline',\n\t\t'data',\n\t\t'enum',\n\t\t'expect',\n\t\t'external',\n\t\t'final',\n\t\t'infix',\n\t\t'inline',\n\t\t'inner',\n\t\t'internal',\n\t\t'lateinit',\n\t\t'noinline',\n\t\t'open',\n\t\t'operator',\n\t\t'out',\n\t\t'override',\n\t\t'private',\n\t\t'protected',\n\t\t'public',\n\t\t'reified',\n\t\t'sealed',\n\t\t'suspend',\n\t\t'tailrec',\n\t\t'vararg',\n\t\t'field',\n\t\t'it'\n\t],\n\n\toperators: [\n\t\t'+',\n\t\t'-',\n\t\t'*',\n\t\t'/',\n\t\t'%',\n\t\t'=',\n\t\t'+=',\n\t\t'-=',\n\t\t'*=',\n\t\t'/=',\n\t\t'%=',\n\t\t'++',\n\t\t'--',\n\t\t'&&',\n\t\t'||',\n\t\t'!',\n\t\t'==',\n\t\t'!=',\n\t\t'===',\n\t\t'!==',\n\t\t'>',\n\t\t'<',\n\t\t'<=',\n\t\t'>=',\n\t\t'[',\n\t\t']',\n\t\t'!!',\n\t\t'?.',\n\t\t'?:',\n\t\t'::',\n\t\t'..',\n\t\t':',\n\t\t'?',\n\t\t'->',\n\t\t'@',\n\t\t';',\n\t\t'$',\n\t\t'_'\n\t],\n\n\t// we include these common regular expressions\n\tsymbols: /[=><!~?:&|+\\-*\\/\\^%]+/,\n\tescapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\tdigits: /\\d+(_+\\d+)*/,\n\toctaldigits: /[0-7]+(_+[0-7]+)*/,\n\tbinarydigits: /[0-1]+(_+[0-1]+)*/,\n\thexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,\n\n\t// The main tokenizer for our languages\n\ttokenizer: {\n\t\troot: [\n\t\t\t// class name highlighting\n\t\t\t[/[A-Z][\\w\\$]*/, 'type.identifier'],\n\n\t\t\t// identifiers and keywords\n\t\t\t[\n\t\t\t\t/[a-zA-Z_$][\\w$]*/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@keywords': { token: 'keyword.$0' },\n\t\t\t\t\t\t'@default': 'identifier'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\n\t\t\t// whitespace\n\t\t\t{ include: '@whitespace' },\n\n\t\t\t// delimiters and operators\n\t\t\t[/[{}()\\[\\]]/, '@brackets'],\n\t\t\t[/[<>](?!@symbols)/, '@brackets'],\n\t\t\t[\n\t\t\t\t/@symbols/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@operators': 'delimiter',\n\t\t\t\t\t\t'@default': ''\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\n\t\t\t// @ annotations.\n\t\t\t[/@\\s*[a-zA-Z_\\$][\\w\\$]*/, 'annotation'],\n\n\t\t\t// numbers\n\t\t\t[/(@digits)[eE]([\\-+]?(@digits))?[fFdD]?/, 'number.float'],\n\t\t\t[/(@digits)\\.(@digits)([eE][\\-+]?(@digits))?[fFdD]?/, 'number.float'],\n\t\t\t[/0[xX](@hexdigits)[Ll]?/, 'number.hex'],\n\t\t\t[/0(@octaldigits)[Ll]?/, 'number.octal'],\n\t\t\t[/0[bB](@binarydigits)[Ll]?/, 'number.binary'],\n\t\t\t[/(@digits)[fFdD]/, 'number.float'],\n\t\t\t[/(@digits)[lL]?/, 'number'],\n\n\t\t\t// delimiter: after number because of .\\d floats\n\t\t\t[/[;,.]/, 'delimiter'],\n\n\t\t\t// strings\n\t\t\t[/\"([^\"\\\\]|\\\\.)*$/, 'string.invalid'], // non-teminated string\n\t\t\t[/\"\"\"/, 'string', '@multistring'],\n\t\t\t[/\"/, 'string', '@string'],\n\n\t\t\t// characters\n\t\t\t[/'[^\\\\']'/, 'string'],\n\t\t\t[/(')(@escapes)(')/, ['string', 'string.escape', 'string']],\n\t\t\t[/'/, 'string.invalid']\n\t\t],\n\n\t\twhitespace: [\n\t\t\t[/[ \\t\\r\\n]+/, ''],\n\t\t\t[/\\/\\*\\*(?!\\/)/, 'comment.doc', '@javadoc'],\n\t\t\t[/\\/\\*/, 'comment', '@comment'],\n\t\t\t[/\\/\\/.*$/, 'comment']\n\t\t],\n\n\t\tcomment: [\n\t\t\t[/[^\\/*]+/, 'comment'],\n\t\t\t[/\\/\\*/, 'comment', '@comment'],\n\t\t\t[/\\*\\//, 'comment', '@pop'],\n\t\t\t[/[\\/*]/, 'comment']\n\t\t],\n\t\t//Identical copy of comment above, except for the addition of .doc\n\t\tjavadoc: [\n\t\t\t[/[^\\/*]+/, 'comment.doc'],\n\t\t\t[/\\/\\*/, 'comment.doc', '@push'],\n\t\t\t[/\\/\\*/, 'comment.doc.invalid'],\n\t\t\t[/\\*\\//, 'comment.doc', '@pop'],\n\t\t\t[/[\\/*]/, 'comment.doc']\n\t\t],\n\n\t\tstring: [\n\t\t\t[/[^\\\\\"]+/, 'string'],\n\t\t\t[/@escapes/, 'string.escape'],\n\t\t\t[/\\\\./, 'string.escape.invalid'],\n\t\t\t[/\"/, 'string', '@pop']\n\t\t],\n\n\t\tmultistring: [\n\t\t\t[/[^\\\\\"]+/, 'string'],\n\t\t\t[/@escapes/, 'string.escape'],\n\t\t\t[/\\\\./, 'string.escape.invalid'],\n\t\t\t[/\"\"\"/, 'string', '@pop'],\n\t\t\t[/./, 'string']\n\t\t]\n\t}\n};\n", "/*!---------------------------------------------------------------------------------------------\n * Copyright (C) David Owens II, owensd.io. All rights reserved.\n *--------------------------------------------------------------------------------------------*/\n\n\nexport const conf= {\n\tcomments: {\n\t\tlineComment: '//',\n\t\tblockComment: ['/*', '*/']\n\t},\n\tbrackets: [\n\t\t['{', '}'],\n\t\t['[', ']'],\n\t\t['(', ')']\n\t],\n\tautoClosingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: \"'\", close: \"'\" },\n\t\t{ open: '`', close: '`' }\n\t],\n\tsurroundingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: \"'\", close: \"'\" },\n\t\t{ open: '`', close: '`' }\n\t]\n};\n\nexport const language = {\n\tdefaultToken: '',\n\ttokenPostfix: '.swift',\n\n\t// TODO(owensd): Support the full range of unicode valid identifiers.\n\tidentifier: /[a-zA-Z_][\\w$]*/,\n\n\tattributes: [\n\t\t'@GKInspectable',\n\t\t'@IBAction',\n\t\t'@IBDesignable',\n\t\t'@IBInspectable',\n\t\t'@IBOutlet',\n\t\t'@IBSegueAction',\n\t\t'@NSApplicationMain',\n\t\t'@NSCopying',\n\t\t'@NSManaged',\n\t\t'@Sendable',\n\t\t'@UIApplicationMain',\n\n\t\t'@autoclosure',\n\t\t'@actorIndependent',\n\t\t'@asyncHandler',\n\t\t'@available',\n\t\t'@convention',\n\t\t'@derivative',\n\t\t'@differentiable',\n\t\t'@discardableResult',\n\t\t'@dynamicCallable',\n\t\t'@dynamicMemberLookup',\n\t\t'@escaping',\n\t\t'@frozen',\n\t\t'@globalActor',\n\t\t'@inlinable',\n\t\t'@inline',\n\t\t'@main',\n\t\t'@noDerivative',\n\t\t'@nonobjc',\n\t\t'@noreturn',\n\t\t'@objc',\n\t\t'@objcMembers',\n\t\t'@preconcurrency',\n\t\t'@propertyWrapper',\n\t\t'@requires_stored_property_inits',\n\t\t'@resultBuilder',\n\t\t'@testable',\n\t\t'@unchecked',\n\t\t'@unknown',\n\t\t'@usableFromInline',\n\t\t'@warn_unqualified_access'\n\t],\n\taccessmodifiers: ['open', 'public', 'internal', 'fileprivate', 'private'],\n\tkeywords: [\n\t\t'#available',\n\t\t'#colorLiteral',\n\t\t'#column',\n\t\t'#dsohandle',\n\t\t'#else',\n\t\t'#elseif',\n\t\t'#endif',\n\t\t'#error',\n\t\t'#file',\n\t\t'#fileID',\n\t\t'#fileLiteral',\n\t\t'#filePath',\n\t\t'#function',\n\t\t'#if',\n\t\t'#imageLiteral',\n\t\t'#keyPath',\n\t\t'#line',\n\t\t'#selector',\n\t\t'#sourceLocation',\n\t\t'#warning',\n\n\t\t'Any',\n\t\t'Protocol',\n\t\t'Self',\n\t\t'Type',\n\n\t\t'actor',\n\t\t'as',\n\t\t'assignment',\n\t\t'associatedtype',\n\t\t'associativity',\n\t\t'async',\n\t\t'await',\n\t\t'break',\n\t\t'case',\n\t\t'catch',\n\t\t'class',\n\t\t'continue',\n\t\t'convenience',\n\t\t'default',\n\t\t'defer',\n\t\t'deinit',\n\t\t'didSet',\n\t\t'do',\n\t\t'dynamic',\n\t\t'dynamicType',\n\t\t'else',\n\t\t'enum',\n\t\t'extension',\n\t\t'fallthrough',\n\t\t'false',\n\t\t'fileprivate',\n\t\t'final',\n\t\t'for',\n\t\t'func',\n\t\t'get',\n\t\t'guard',\n\t\t'higherThan',\n\t\t'if',\n\t\t'import',\n\t\t'in',\n\t\t'indirect',\n\t\t'infix',\n\t\t'init',\n\t\t'inout',\n\t\t'internal',\n\t\t'is',\n\t\t'isolated',\n\t\t'lazy',\n\t\t'left',\n\t\t'let',\n\t\t'lowerThan',\n\t\t'mutating',\n\t\t'nil',\n\t\t'none',\n\t\t'nonisolated',\n\t\t'nonmutating',\n\t\t'open',\n\t\t'operator',\n\t\t'optional',\n\t\t'override',\n\t\t'postfix',\n\t\t'precedence',\n\t\t'precedencegroup',\n\t\t'prefix',\n\t\t'private',\n\t\t'protocol',\n\t\t'public',\n\t\t'repeat',\n\t\t'required',\n\t\t'rethrows',\n\t\t'return',\n\t\t'right',\n\t\t'safe',\n\t\t'self',\n\t\t'set',\n\t\t'some',\n\t\t'static',\n\t\t'struct',\n\t\t'subscript',\n\t\t'super',\n\t\t'switch',\n\t\t'throw',\n\t\t'throws',\n\t\t'true',\n\t\t'try',\n\t\t'typealias',\n\t\t'unowned',\n\t\t'unsafe',\n\t\t'var',\n\t\t'weak',\n\t\t'where',\n\t\t'while',\n\t\t'willSet',\n\n\t\t'__consuming',\n\t\t'__owned'\n\t],\n\n\tsymbols: /[=(){}\\[\\].,:;@#\\_&\\-<>`?!+*\\\\\\/]/,\n\n\t// Moved . to operatorstart so it can be a delimiter\n\toperatorstart:\n\t\t/[\\/=\\-+!*%<>&|^~?\\u00A1-\\u00A7\\u00A9\\u00AB\\u00AC\\u00AE\\u00B0-\\u00B1\\u00B6\\u00BB\\u00BF\\u00D7\\u00F7\\u2016-\\u2017\\u2020-\\u2027\\u2030-\\u203E\\u2041-\\u2053\\u2055-\\u205E\\u2190-\\u23FF\\u2500-\\u2775\\u2794-\\u2BFF\\u2E00-\\u2E7F\\u3001-\\u3003\\u3008-\\u3030]/,\n\toperatorend: /[\\u0300-\\u036F\\u1DC0-\\u1DFF\\u20D0-\\u20FF\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uE0100-\\uE01EF]/,\n\toperators: /(@operatorstart)((@operatorstart)|(@operatorend))*/,\n\n\t// TODO(owensd): These are borrowed from C#; need to validate correctness for Swift.\n\tescapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\n\ttokenizer: {\n\t\troot: [\n\t\t\t{ include: '@whitespace' },\n\t\t\t{ include: '@comment' },\n\t\t\t{ include: '@attribute' },\n\t\t\t{ include: '@literal' },\n\t\t\t{ include: '@keyword' },\n\t\t\t{ include: '@invokedmethod' },\n\t\t\t{ include: '@symbol' }\n\t\t],\n\n\t\twhitespace: [\n\t\t\t[/\\s+/, 'white'],\n\t\t\t[/\"\"\"/, 'string.quote', '@endDblDocString']\n\t\t],\n\n\t\tendDblDocString: [\n\t\t\t[/[^\"]+/, 'string'],\n\t\t\t[/\\\\\"/, 'string'],\n\t\t\t[/\"\"\"/, 'string.quote', '@popall'],\n\t\t\t[/\"/, 'string']\n\t\t],\n\n\t\tsymbol: [\n\t\t\t[/[{}()\\[\\]]/, '@brackets'],\n\t\t\t[/[<>](?!@symbols)/, '@brackets'],\n\t\t\t[/[.]/, 'delimiter'],\n\t\t\t[/@operators/, 'operator'],\n\t\t\t[/@symbols/, 'operator']\n\t\t],\n\n\t\tcomment: [\n\t\t\t[/\\/\\/\\/.*$/, 'comment.doc'],\n\t\t\t[/\\/\\*\\*/, 'comment.doc', '@commentdocbody'],\n\t\t\t[/\\/\\/.*$/, 'comment'],\n\t\t\t[/\\/\\*/, 'comment', '@commentbody']\n\t\t],\n\t\tcommentdocbody: [\n\t\t\t[/\\/\\*/, 'comment', '@commentbody'],\n\t\t\t[/\\*\\//, 'comment.doc', '@pop'],\n\t\t\t[/\\:[a-zA-Z]+\\:/, 'comment.doc.param'],\n\t\t\t[/./, 'comment.doc']\n\t\t],\n\t\tcommentbody: [\n\t\t\t[/\\/\\*/, 'comment', '@commentbody'],\n\t\t\t[/\\*\\//, 'comment', '@pop'],\n\t\t\t[/./, 'comment']\n\t\t],\n\n\t\tattribute: [\n\t\t\t[\n\t\t\t\t/@@@identifier/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@attributes': 'keyword.control',\n\t\t\t\t\t\t'@default': ''\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t],\n\n\t\tliteral: [\n\t\t\t[/\"/, { token: 'string.quote', next: '@stringlit' }],\n\t\t\t[/0[b]([01]_?)+/, 'number.binary'],\n\t\t\t[/0[o]([0-7]_?)+/, 'number.octal'],\n\t\t\t[/0[x]([0-9a-fA-F]_?)+([pP][\\-+](\\d_?)+)?/, 'number.hex'],\n\t\t\t[/(\\d_?)*\\.(\\d_?)+([eE][\\-+]?(\\d_?)+)?/, 'number.float'],\n\t\t\t[/(\\d_?)+/, 'number']\n\t\t],\n\n\t\tstringlit: [\n\t\t\t[/\\\\\\(/, { token: 'operator', next: '@interpolatedexpression' }],\n\t\t\t[/@escapes/, 'string'],\n\t\t\t[/\\\\./, 'string.escape.invalid'],\n\t\t\t[/\"/, { token: 'string.quote', next: '@pop' }],\n\t\t\t[/./, 'string']\n\t\t],\n\n\t\tinterpolatedexpression: [\n\t\t\t[/\\(/, { token: 'operator', next: '@interpolatedexpression' }],\n\t\t\t[/\\)/, { token: 'operator', next: '@pop' }],\n\t\t\t{ include: '@literal' },\n\t\t\t{ include: '@keyword' },\n\t\t\t{ include: '@symbol' }\n\t\t],\n\n\t\tkeyword: [\n\t\t\t[/`/, { token: 'operator', next: '@escapedkeyword' }],\n\t\t\t[\n\t\t\t\t/@identifier/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@keywords': 'keyword',\n\t\t\t\t\t\t'[A-Z][a-zA-Z0-9$]*': 'type.identifier',\n\t\t\t\t\t\t'@default': 'identifier'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t],\n\n\t\tescapedkeyword: [\n\t\t\t[/`/, { token: 'operator', next: '@pop' }],\n\t\t\t[/./, 'identifier']\n\t\t],\n\n\t\tinvokedmethod: [\n\t\t\t[\n\t\t\t\t/([.])(@identifier)/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t$2: ['delimeter', 'type.identifier'],\n\t\t\t\t\t\t'@default': ''\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t]\n\t}\n};\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n\nexport const conf= {\n\twordPattern:\n\t\t/(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\n\n\tcomments: {\n\t\tlineComment: '//',\n\t\tblockComment: ['/*', '*/']\n\t},\n\n\tbrackets: [\n\t\t['{', '}'],\n\t\t['[', ']'],\n\t\t['(', ')']\n\t],\n\n\tautoClosingPairs: [\n\t\t{ open: '{', close: '}', notIn: ['string'] },\n\t\t{ open: '[', close: ']', notIn: ['string'] },\n\t\t{ open: '(', close: ')', notIn: ['string'] },\n\t\t{ open: '\"', close: '\"', notIn: ['string'] },\n\t\t{ open: \"'\", close: \"'\", notIn: ['string', 'comment'] }\n\t],\n\n\tfolding: {\n\t\tmarkers: {\n\t\t\tstart: new RegExp('^\\\\s*(#|//)region\\\\b'),\n\t\t\tend: new RegExp('^\\\\s*(#|//)endregion\\\\b')\n\t\t}\n\t}\n};\n\nexport const language = {\n\tdefaultToken: '',\n\ttokenPostfix: '',\n\t// ignoreCase: true,\n\n\t// The main tokenizer for our languages\n\ttokenizer: {\n\t\troot: [\n\t\t\t[/<\\?((php)|=)?/, { token: '@rematch', switchTo: '@phpInSimpleState.root' }],\n\t\t\t[/<!DOCTYPE/, 'metatag.html', '@doctype'],\n\t\t\t[/<!--/, 'comment.html', '@comment'],\n\t\t\t[/(<)(\\w+)(\\/>)/, ['delimiter.html', 'tag.html', 'delimiter.html']],\n\t\t\t[/(<)(script)/, ['delimiter.html', { token: 'tag.html', next: '@script' }]],\n\t\t\t[/(<)(style)/, ['delimiter.html', { token: 'tag.html', next: '@style' }]],\n\t\t\t[/(<)([:\\w]+)/, ['delimiter.html', { token: 'tag.html', next: '@otherTag' }]],\n\t\t\t[/(<\\/)(\\w+)/, ['delimiter.html', { token: 'tag.html', next: '@otherTag' }]],\n\t\t\t[/</, 'delimiter.html'],\n\t\t\t[/[^<]+/] // text\n\t\t],\n\n\t\tdoctype: [\n\t\t\t[/<\\?((php)|=)?/, { token: '@rematch', switchTo: '@phpInSimpleState.comment' }],\n\t\t\t[/[^>]+/, 'metatag.content.html'],\n\t\t\t[/>/, 'metatag.html', '@pop']\n\t\t],\n\n\t\tcomment: [\n\t\t\t[/<\\?((php)|=)?/, { token: '@rematch', switchTo: '@phpInSimpleState.comment' }],\n\t\t\t[/-->/, 'comment.html', '@pop'],\n\t\t\t[/[^-]+/, 'comment.content.html'],\n\t\t\t[/./, 'comment.content.html']\n\t\t],\n\n\t\totherTag: [\n\t\t\t[/<\\?((php)|=)?/, { token: '@rematch', switchTo: '@phpInSimpleState.otherTag' }],\n\t\t\t[/\\/?>/, 'delimiter.html', '@pop'],\n\t\t\t[/\"([^\"]*)\"/, 'attribute.value'],\n\t\t\t[/'([^']*)'/, 'attribute.value'],\n\t\t\t[/[\\w\\-]+/, 'attribute.name'],\n\t\t\t[/=/, 'delimiter'],\n\t\t\t[/[ \\t\\r\\n]+/] // whitespace\n\t\t],\n\n\t\t// -- BEGIN <script> tags handling\n\n\t\t// After <script\n\t\tscript: [\n\t\t\t[/<\\?((php)|=)?/, { token: '@rematch', switchTo: '@phpInSimpleState.script' }],\n\t\t\t[/type/, 'attribute.name', '@scriptAfterType'],\n\t\t\t[/\"([^\"]*)\"/, 'attribute.value'],\n\t\t\t[/'([^']*)'/, 'attribute.value'],\n\t\t\t[/[\\w\\-]+/, 'attribute.name'],\n\t\t\t[/=/, 'delimiter'],\n\t\t\t[\n\t\t\t\t/>/,\n\t\t\t\t{\n\t\t\t\t\ttoken: 'delimiter.html',\n\t\t\t\t\tnext: '@scriptEmbedded.text/javascript',\n\t\t\t\t\tnextEmbedded: 'text/javascript'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[\n\t\t\t\t/(<\\/)(script\\s*)(>)/,\n\t\t\t\t['delimiter.html', 'tag.html', { token: 'delimiter.html', next: '@pop' }]\n\t\t\t]\n\t\t],\n\n\t\t// After <script ... type\n\t\tscriptAfterType: [\n\t\t\t[\n\t\t\t\t/<\\?((php)|=)?/,\n\t\t\t\t{\n\t\t\t\t\ttoken: '@rematch',\n\t\t\t\t\tswitchTo: '@phpInSimpleState.scriptAfterType'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[/=/, 'delimiter', '@scriptAfterTypeEquals'],\n\t\t\t[\n\t\t\t\t/>/,\n\t\t\t\t{\n\t\t\t\t\ttoken: 'delimiter.html',\n\t\t\t\t\tnext: '@scriptEmbedded.text/javascript',\n\t\t\t\t\tnextEmbedded: 'text/javascript'\n\t\t\t\t}\n\t\t\t], // cover invalid e.g. <script type>\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[/<\\/script\\s*>/, { token: '@rematch', next: '@pop' }]\n\t\t],\n\n\t\t// After <script ... type =\n\t\tscriptAfterTypeEquals: [\n\t\t\t[\n\t\t\t\t/<\\?((php)|=)?/,\n\t\t\t\t{\n\t\t\t\t\ttoken: '@rematch',\n\t\t\t\t\tswitchTo: '@phpInSimpleState.scriptAfterTypeEquals'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[\n\t\t\t\t/\"([^\"]*)\"/,\n\t\t\t\t{\n\t\t\t\t\ttoken: 'attribute.value',\n\t\t\t\t\tswitchTo: '@scriptWithCustomType.$1'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[\n\t\t\t\t/'([^']*)'/,\n\t\t\t\t{\n\t\t\t\t\ttoken: 'attribute.value',\n\t\t\t\t\tswitchTo: '@scriptWithCustomType.$1'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[\n\t\t\t\t/>/,\n\t\t\t\t{\n\t\t\t\t\ttoken: 'delimiter.html',\n\t\t\t\t\tnext: '@scriptEmbedded.text/javascript',\n\t\t\t\t\tnextEmbedded: 'text/javascript'\n\t\t\t\t}\n\t\t\t], // cover invalid e.g. <script type=>\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[/<\\/script\\s*>/, { token: '@rematch', next: '@pop' }]\n\t\t],\n\n\t\t// After <script ... type = $S2\n\t\tscriptWithCustomType: [\n\t\t\t[\n\t\t\t\t/<\\?((php)|=)?/,\n\t\t\t\t{\n\t\t\t\t\ttoken: '@rematch',\n\t\t\t\t\tswitchTo: '@phpInSimpleState.scriptWithCustomType.$S2'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[\n\t\t\t\t/>/,\n\t\t\t\t{\n\t\t\t\t\ttoken: 'delimiter.html',\n\t\t\t\t\tnext: '@scriptEmbedded.$S2',\n\t\t\t\t\tnextEmbedded: '$S2'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[/\"([^\"]*)\"/, 'attribute.value'],\n\t\t\t[/'([^']*)'/, 'attribute.value'],\n\t\t\t[/[\\w\\-]+/, 'attribute.name'],\n\t\t\t[/=/, 'delimiter'],\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[/<\\/script\\s*>/, { token: '@rematch', next: '@pop' }]\n\t\t],\n\n\t\tscriptEmbedded: [\n\t\t\t[\n\t\t\t\t/<\\?((php)|=)?/,\n\t\t\t\t{\n\t\t\t\t\ttoken: '@rematch',\n\t\t\t\t\tswitchTo: '@phpInEmbeddedState.scriptEmbedded.$S2',\n\t\t\t\t\tnextEmbedded: '@pop'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[/<\\/script/, { token: '@rematch', next: '@pop', nextEmbedded: '@pop' }]\n\t\t],\n\n\t\t// -- END <script> tags handling\n\n\t\t// -- BEGIN <style> tags handling\n\n\t\t// After <style\n\t\tstyle: [\n\t\t\t[/<\\?((php)|=)?/, { token: '@rematch', switchTo: '@phpInSimpleState.style' }],\n\t\t\t[/type/, 'attribute.name', '@styleAfterType'],\n\t\t\t[/\"([^\"]*)\"/, 'attribute.value'],\n\t\t\t[/'([^']*)'/, 'attribute.value'],\n\t\t\t[/[\\w\\-]+/, 'attribute.name'],\n\t\t\t[/=/, 'delimiter'],\n\t\t\t[\n\t\t\t\t/>/,\n\t\t\t\t{\n\t\t\t\t\ttoken: 'delimiter.html',\n\t\t\t\t\tnext: '@styleEmbedded.text/css',\n\t\t\t\t\tnextEmbedded: 'text/css'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[\n\t\t\t\t/(<\\/)(style\\s*)(>)/,\n\t\t\t\t['delimiter.html', 'tag.html', { token: 'delimiter.html', next: '@pop' }]\n\t\t\t]\n\t\t],\n\n\t\t// After <style ... type\n\t\tstyleAfterType: [\n\t\t\t[\n\t\t\t\t/<\\?((php)|=)?/,\n\t\t\t\t{\n\t\t\t\t\ttoken: '@rematch',\n\t\t\t\t\tswitchTo: '@phpInSimpleState.styleAfterType'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[/=/, 'delimiter', '@styleAfterTypeEquals'],\n\t\t\t[\n\t\t\t\t/>/,\n\t\t\t\t{\n\t\t\t\t\ttoken: 'delimiter.html',\n\t\t\t\t\tnext: '@styleEmbedded.text/css',\n\t\t\t\t\tnextEmbedded: 'text/css'\n\t\t\t\t}\n\t\t\t], // cover invalid e.g. <style type>\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[/<\\/style\\s*>/, { token: '@rematch', next: '@pop' }]\n\t\t],\n\n\t\t// After <style ... type =\n\t\tstyleAfterTypeEquals: [\n\t\t\t[\n\t\t\t\t/<\\?((php)|=)?/,\n\t\t\t\t{\n\t\t\t\t\ttoken: '@rematch',\n\t\t\t\t\tswitchTo: '@phpInSimpleState.styleAfterTypeEquals'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[\n\t\t\t\t/\"([^\"]*)\"/,\n\t\t\t\t{\n\t\t\t\t\ttoken: 'attribute.value',\n\t\t\t\t\tswitchTo: '@styleWithCustomType.$1'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[\n\t\t\t\t/'([^']*)'/,\n\t\t\t\t{\n\t\t\t\t\ttoken: 'attribute.value',\n\t\t\t\t\tswitchTo: '@styleWithCustomType.$1'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[\n\t\t\t\t/>/,\n\t\t\t\t{\n\t\t\t\t\ttoken: 'delimiter.html',\n\t\t\t\t\tnext: '@styleEmbedded.text/css',\n\t\t\t\t\tnextEmbedded: 'text/css'\n\t\t\t\t}\n\t\t\t], // cover invalid e.g. <style type=>\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[/<\\/style\\s*>/, { token: '@rematch', next: '@pop' }]\n\t\t],\n\n\t\t// After <style ... type = $S2\n\t\tstyleWithCustomType: [\n\t\t\t[\n\t\t\t\t/<\\?((php)|=)?/,\n\t\t\t\t{\n\t\t\t\t\ttoken: '@rematch',\n\t\t\t\t\tswitchTo: '@phpInSimpleState.styleWithCustomType.$S2'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[\n\t\t\t\t/>/,\n\t\t\t\t{\n\t\t\t\t\ttoken: 'delimiter.html',\n\t\t\t\t\tnext: '@styleEmbedded.$S2',\n\t\t\t\t\tnextEmbedded: '$S2'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[/\"([^\"]*)\"/, 'attribute.value'],\n\t\t\t[/'([^']*)'/, 'attribute.value'],\n\t\t\t[/[\\w\\-]+/, 'attribute.name'],\n\t\t\t[/=/, 'delimiter'],\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[/<\\/style\\s*>/, { token: '@rematch', next: '@pop' }]\n\t\t],\n\n\t\tstyleEmbedded: [\n\t\t\t[\n\t\t\t\t/<\\?((php)|=)?/,\n\t\t\t\t{\n\t\t\t\t\ttoken: '@rematch',\n\t\t\t\t\tswitchTo: '@phpInEmbeddedState.styleEmbedded.$S2',\n\t\t\t\t\tnextEmbedded: '@pop'\n\t\t\t\t}\n\t\t\t],\n\t\t\t[/<\\/style/, { token: '@rematch', next: '@pop', nextEmbedded: '@pop' }]\n\t\t],\n\n\t\t// -- END <style> tags handling\n\n\t\tphpInSimpleState: [\n\t\t\t[/<\\?((php)|=)?/, 'metatag.php'],\n\t\t\t[/\\?>/, { token: 'metatag.php', switchTo: '@$S2.$S3' }],\n\t\t\t{ include: 'phpRoot' }\n\t\t],\n\n\t\tphpInEmbeddedState: [\n\t\t\t[/<\\?((php)|=)?/, 'metatag.php'],\n\t\t\t[\n\t\t\t\t/\\?>/,\n\t\t\t\t{\n\t\t\t\t\ttoken: 'metatag.php',\n\t\t\t\t\tswitchTo: '@$S2.$S3',\n\t\t\t\t\tnextEmbedded: '$S3'\n\t\t\t\t}\n\t\t\t],\n\t\t\t{ include: 'phpRoot' }\n\t\t],\n\n\t\tphpRoot: [\n\t\t\t[\n\t\t\t\t/[a-zA-Z_]\\w*/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@phpKeywords': { token: 'keyword.php' },\n\t\t\t\t\t\t'@phpCompileTimeConstants': { token: 'constant.php' },\n\t\t\t\t\t\t'@default': 'identifier.php'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t[\n\t\t\t\t/[$a-zA-Z_]\\w*/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@phpPreDefinedVariables': {\n\t\t\t\t\t\t\ttoken: 'variable.predefined.php'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'@default': 'variable.php'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\n\t\t\t// brackets\n\t\t\t[/[{}]/, 'delimiter.bracket.php'],\n\t\t\t[/[\\[\\]]/, 'delimiter.array.php'],\n\t\t\t[/[()]/, 'delimiter.parenthesis.php'],\n\n\t\t\t// whitespace\n\t\t\t[/[ \\t\\r\\n]+/],\n\n\t\t\t// comments\n\t\t\t[/(#|\\/\\/)$/, 'comment.php'],\n\t\t\t[/(#|\\/\\/)/, 'comment.php', '@phpLineComment'],\n\n\t\t\t// block comments\n\t\t\t[/\\/\\*/, 'comment.php', '@phpComment'],\n\n\t\t\t// strings\n\t\t\t[/\"/, 'string.php', '@phpDoubleQuoteString'],\n\t\t\t[/'/, 'string.php', '@phpSingleQuoteString'],\n\n\t\t\t// delimiters\n\t\t\t[/[\\+\\-\\*\\%\\&\\|\\^\\~\\!\\=\\<\\>\\/\\?\\;\\:\\.\\,\\@]/, 'delimiter.php'],\n\n\t\t\t// numbers\n\t\t\t[/\\d*\\d+[eE]([\\-+]?\\d+)?/, 'number.float.php'],\n\t\t\t[/\\d*\\.\\d+([eE][\\-+]?\\d+)?/, 'number.float.php'],\n\t\t\t[/0[xX][0-9a-fA-F']*[0-9a-fA-F]/, 'number.hex.php'],\n\t\t\t[/0[0-7']*[0-7]/, 'number.octal.php'],\n\t\t\t[/0[bB][0-1']*[0-1]/, 'number.binary.php'],\n\t\t\t[/\\d[\\d']*/, 'number.php'],\n\t\t\t[/\\d/, 'number.php']\n\t\t],\n\n\t\tphpComment: [\n\t\t\t[/\\*\\//, 'comment.php', '@pop'],\n\t\t\t[/[^*]+/, 'comment.php'],\n\t\t\t[/./, 'comment.php']\n\t\t],\n\n\t\tphpLineComment: [\n\t\t\t[/\\?>/, { token: '@rematch', next: '@pop' }],\n\t\t\t[/.$/, 'comment.php', '@pop'],\n\t\t\t[/[^?]+$/, 'comment.php', '@pop'],\n\t\t\t[/[^?]+/, 'comment.php'],\n\t\t\t[/./, 'comment.php']\n\t\t],\n\n\t\tphpDoubleQuoteString: [\n\t\t\t[/[^\\\\\"]+/, 'string.php'],\n\t\t\t[/@escapes/, 'string.escape.php'],\n\t\t\t[/\\\\./, 'string.escape.invalid.php'],\n\t\t\t[/\"/, 'string.php', '@pop']\n\t\t],\n\n\t\tphpSingleQuoteString: [\n\t\t\t[/[^\\\\']+/, 'string.php'],\n\t\t\t[/@escapes/, 'string.escape.php'],\n\t\t\t[/\\\\./, 'string.escape.invalid.php'],\n\t\t\t[/'/, 'string.php', '@pop']\n\t\t]\n\t},\n\n\tphpKeywords: [\n\t\t'abstract',\n\t\t'and',\n\t\t'array',\n\t\t'as',\n\t\t'break',\n\t\t'callable',\n\t\t'case',\n\t\t'catch',\n\t\t'cfunction',\n\t\t'class',\n\t\t'clone',\n\t\t'const',\n\t\t'continue',\n\t\t'declare',\n\t\t'default',\n\t\t'do',\n\t\t'else',\n\t\t'elseif',\n\t\t'enddeclare',\n\t\t'endfor',\n\t\t'endforeach',\n\t\t'endif',\n\t\t'endswitch',\n\t\t'endwhile',\n\t\t'extends',\n\t\t'false',\n\t\t'final',\n\t\t'for',\n\t\t'foreach',\n\t\t'function',\n\t\t'global',\n\t\t'goto',\n\t\t'if',\n\t\t'implements',\n\t\t'interface',\n\t\t'instanceof',\n\t\t'insteadof',\n\t\t'namespace',\n\t\t'new',\n\t\t'null',\n\t\t'object',\n\t\t'old_function',\n\t\t'or',\n\t\t'private',\n\t\t'protected',\n\t\t'public',\n\t\t'resource',\n\t\t'static',\n\t\t'switch',\n\t\t'throw',\n\t\t'trait',\n\t\t'try',\n\t\t'true',\n\t\t'use',\n\t\t'var',\n\t\t'while',\n\t\t'xor',\n\t\t'die',\n\t\t'echo',\n\t\t'empty',\n\t\t'exit',\n\t\t'eval',\n\t\t'include',\n\t\t'include_once',\n\t\t'isset',\n\t\t'list',\n\t\t'require',\n\t\t'require_once',\n\t\t'return',\n\t\t'print',\n\t\t'unset',\n\t\t'yield',\n\t\t'__construct'\n\t],\n\n\tphpCompileTimeConstants: [\n\t\t'__CLASS__',\n\t\t'__DIR__',\n\t\t'__FILE__',\n\t\t'__LINE__',\n\t\t'__NAMESPACE__',\n\t\t'__METHOD__',\n\t\t'__FUNCTION__',\n\t\t'__TRAIT__'\n\t],\n\n\tphpPreDefinedVariables: [\n\t\t'$GLOBALS',\n\t\t'$_SERVER',\n\t\t'$_GET',\n\t\t'$_POST',\n\t\t'$_FILES',\n\t\t'$_REQUEST',\n\t\t'$_SESSION',\n\t\t'$_ENV',\n\t\t'$_COOKIE',\n\t\t'$php_errormsg',\n\t\t'$HTTP_RAW_POST_DATA',\n\t\t'$http_response_header',\n\t\t'$argc',\n\t\t'$argv'\n\t],\n\n\tescapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/\n};\n\n// TESTED WITH\n\n// <style type=\"text/css\" >\n// .boo { background: blue;\n// <?=''?>\n// }\n// .boo { background: blue; <?=''?> }\n// </style>\n// <!--\n\n// <?= '' ?>\n\n// -->\n// <?php\n// // The next line contains a syntax error:\n// __construct\n// if () {\n// \treturn \"The parser recovers from this type of syntax error\";\n// }\n// ?>\n// <html>\n// <head>\n// \t<title <?=''?>>Example page</title>\n// <style <?=''?>>\n// .boo { background: blue; <?=''?> }\n// </style>\n// </head>\n\n// <body>\n\n// <script <?=''?> type<?=''?>=<?=''?>\"text/javascript\"<?=''?>>\n// \t// Some PHP embedded inside JS\n// \t// Generated <?=date('l, F jS, Y')?>\n\n// \tvar server_token = <?=rand(5, 10000)?>\n// \tif (typeof server_token === 'number') {\n// \t\talert('token: ' + server_token);\n// \t}\n// </script>\n\n// <div>\n// Hello\n// <? if (isset($user)) { ?>\n// \t<b><?=$user?></b>\n// <? } else { ?>\n// \t<i>guest</i>\n// <? } ?>\n// !\n// </div>\n\n// <?php\n\n// \t/* Example PHP file\n// \tmultiline comment\n// \t*/\n\n// # Another single line comment\n\n// \t$cards = array(\"ah\", \"ac\", \"ad\", \"as\",\n// \t\t\"2h\", \"2c\", \"2d\", \"2s\",\n// \t\t\"3h\", \"3c\", \"3d\", \"3s\",\n// \t\t\"4h\", \"4c\", \"4d\", \"4s\",\n// \t\t\"5h\", \"5c\", \"5d\", \"5s\",\n// \t\t\"6h\", \"6c\", \"6d\", \"6s\",\n// \t\t\"7h\", \"7c\", \"7d\", \"7s\",\n// \t\t\"8h\", \"8c\", \"8d\", \"8s\",\n// \t\t\"9h\", \"9c\", \"9d\", \"9s\",\n// \t\t\"th\", \"tc\", \"td\", \"ts\",\n// \t\t\"jh\", \"jc\", \"jd\", \"js\",\n// \t\t\"qh\", \"qc\", \"qd\", \"qs\",\n// \t\t\"kh\", \"kc\", \"kd\", \"ks\");\n\n// \tsrand(time());\n\n// \tfor($i = 0; $i < 52; $i++) {\n// \t\t$count = count($cards);\n// \t\t$random = (rand()%$count);\n\n// \t\tif($cards[$random] == \"\") {\n// \t\t\t$i--;\n// \t\t} else {\n// \t\t\t$deck[] = $cards[$random];\n// \t\t\t$cards[$random] = \"\";\n// \t\t}\n// \t}\n// $_GET\n// __CLASS__\n\n// \tsrand(time());\n// \t$starting_point = (rand()%51);\n// \tprint(\"Starting point for cut cards is: $starting_point<p>\");\n\n// \t// display shuffled cards (EXAMPLE ONLY)\n// \tfor ($index = 0; $index < 52; $index++) {\n// \t\tif ($starting_point == 52) { $starting_point = 0; }\n// \t\tprint(\"Uncut Point: <strong>$deck[$index]</strong> \");\n// \t\tprint(\"Starting Point: <strong>$deck[$starting_point]</strong><br>\");\n// \t\t$starting_point++;\n// \t}\n// ?>\n\n// </body>\n// </html>\n", "export const conf = {\n comments: {\n lineComment: '//',\n blockComment: ['/*', '*/'],\n },\n brackets: [\n ['{', '}'],\n ['[', ']'],\n ],\n autoClosingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '\"', close: '\"', notIn: ['string'] },\n ],\n}\n\nexport const language = {\n comments: {\n lineComment: '//',\n blockComment: ['/*', '*/'],\n },\n autoClosingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '\"', close: '\"', notIn: ['string'] },\n ],\n\n tokenizer: {\n root: [\n { include: '@whitespace' },\n { include: '@strings' },\n [/{/, '@brackets', '@push'],\n [/}/, '@brackets', '@pop'],\n [/\\[/, '@brackets', '@push'],\n [/\\]/, '@brackets', '@pop'],\n [/[{}\\[\\]]/, '@brackets'],\n [/,/, 'delimiter'],\n [/-?\\d+(\\.\\d+)?/, 'number'],\n [/(true|false|null)/, 'keyword'],\n ],\n whitespace: [\n [/\\s+/, 'white'],\n ],\n strings: [\n [/\"/, { token: 'string', next: '@string' }],\n ],\n string: [\n [/[^\\\\\"]+/, 'string'],\n [/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9A-Fa-f]{4})/, 'string.escape'],\n [/\"/, { token: 'string', next: '@pop' }],\n ],\n\n object: [\n [/\"/, { token: 'key', next: '@key' }],\n [/[{}\\[\\]]/, '@brackets'],\n [/,/, 'delimiter'],\n [/-?\\d+(\\.\\d+)?/, 'number'],\n [/(true|false|null)/, 'keyword'],\n ],\n key: [\n [/[^\\\\\"]+/, 'key'],\n [/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9A-Fa-f]{4})/, 'key.escape'],\n [/\"/, { token: 'key', next: '@pop' }],\n [/{/, { token: 'delimiter', next: '@pop', nextEmbedded: 'json' }],\n ],\n },\n};\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n\nexport const conf= {\n\tcomments: {\n\t\tlineComment: '//',\n\t\tblockComment: ['/*', '*/']\n\t},\n\tbrackets: [\n\t\t['{', '}'],\n\t\t['[', ']'],\n\t\t['(', ')']\n\t],\n\tautoClosingPairs: [\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: \"'\", close: \"'\", notIn: ['string', 'comment'] },\n\t\t{ open: '\"', close: '\"', notIn: ['string'] }\n\t],\n\tsurroundingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: \"'\", close: \"'\" }\n\t],\n\tfolding: {\n\t\tmarkers: {\n\t\t\tstart: new RegExp('^\\\\s*#pragma\\\\s+region\\\\b'),\n\t\t\tend: new RegExp('^\\\\s*#pragma\\\\s+endregion\\\\b')\n\t\t}\n\t}\n};\n\nexport const language = {\n\tdefaultToken: '',\n\ttokenPostfix: '.cpp',\n\n\tbrackets: [\n\t\t{ token: 'delimiter.curly', open: '{', close: '}' },\n\t\t{ token: 'delimiter.parenthesis', open: '(', close: ')' },\n\t\t{ token: 'delimiter.square', open: '[', close: ']' },\n\t\t{ token: 'delimiter.angle', open: '<', close: '>' }\n\t],\n\n\tkeywords: [\n\t\t'abstract',\n\t\t'amp',\n\t\t'array',\n\t\t'auto',\n\t\t'bool',\n\t\t'break',\n\t\t'case',\n\t\t'catch',\n\t\t'char',\n\t\t'class',\n\t\t'const',\n\t\t'constexpr',\n\t\t'const_cast',\n\t\t'continue',\n\t\t'cpu',\n\t\t'decltype',\n\t\t'default',\n\t\t'delegate',\n\t\t'delete',\n\t\t'do',\n\t\t'double',\n\t\t'dynamic_cast',\n\t\t'each',\n\t\t'else',\n\t\t'enum',\n\t\t'event',\n\t\t'explicit',\n\t\t'export',\n\t\t'extern',\n\t\t'false',\n\t\t'final',\n\t\t'finally',\n\t\t'float',\n\t\t'for',\n\t\t'friend',\n\t\t'gcnew',\n\t\t'generic',\n\t\t'goto',\n\t\t'if',\n\t\t'in',\n\t\t'initonly',\n\t\t'inline',\n\t\t'int',\n\t\t'interface',\n\t\t'interior_ptr',\n\t\t'internal',\n\t\t'literal',\n\t\t'long',\n\t\t'mutable',\n\t\t'namespace',\n\t\t'new',\n\t\t'noexcept',\n\t\t'nullptr',\n\t\t'__nullptr',\n\t\t'operator',\n\t\t'override',\n\t\t'partial',\n\t\t'pascal',\n\t\t'pin_ptr',\n\t\t'private',\n\t\t'property',\n\t\t'protected',\n\t\t'public',\n\t\t'ref',\n\t\t'register',\n\t\t'reinterpret_cast',\n\t\t'restrict',\n\t\t'return',\n\t\t'safe_cast',\n\t\t'sealed',\n\t\t'short',\n\t\t'signed',\n\t\t'sizeof',\n\t\t'static',\n\t\t'static_assert',\n\t\t'static_cast',\n\t\t'struct',\n\t\t'switch',\n\t\t'template',\n\t\t'this',\n\t\t'thread_local',\n\t\t'throw',\n\t\t'tile_static',\n\t\t'true',\n\t\t'try',\n\t\t'typedef',\n\t\t'typeid',\n\t\t'typename',\n\t\t'union',\n\t\t'unsigned',\n\t\t'using',\n\t\t'virtual',\n\t\t'void',\n\t\t'volatile',\n\t\t'wchar_t',\n\t\t'where',\n\t\t'while',\n\n\t\t'_asm', // reserved word with one underscores\n\t\t'_based',\n\t\t'_cdecl',\n\t\t'_declspec',\n\t\t'_fastcall',\n\t\t'_if_exists',\n\t\t'_if_not_exists',\n\t\t'_inline',\n\t\t'_multiple_inheritance',\n\t\t'_pascal',\n\t\t'_single_inheritance',\n\t\t'_stdcall',\n\t\t'_virtual_inheritance',\n\t\t'_w64',\n\n\t\t'__abstract', // reserved word with two underscores\n\t\t'__alignof',\n\t\t'__asm',\n\t\t'__assume',\n\t\t'__based',\n\t\t'__box',\n\t\t'__builtin_alignof',\n\t\t'__cdecl',\n\t\t'__clrcall',\n\t\t'__declspec',\n\t\t'__delegate',\n\t\t'__event',\n\t\t'__except',\n\t\t'__fastcall',\n\t\t'__finally',\n\t\t'__forceinline',\n\t\t'__gc',\n\t\t'__hook',\n\t\t'__identifier',\n\t\t'__if_exists',\n\t\t'__if_not_exists',\n\t\t'__inline',\n\t\t'__int128',\n\t\t'__int16',\n\t\t'__int32',\n\t\t'__int64',\n\t\t'__int8',\n\t\t'__interface',\n\t\t'__leave',\n\t\t'__m128',\n\t\t'__m128d',\n\t\t'__m128i',\n\t\t'__m256',\n\t\t'__m256d',\n\t\t'__m256i',\n\t\t'__m512',\n\t\t'__m512d',\n\t\t'__m512i',\n\t\t'__m64',\n\t\t'__multiple_inheritance',\n\t\t'__newslot',\n\t\t'__nogc',\n\t\t'__noop',\n\t\t'__nounwind',\n\t\t'__novtordisp',\n\t\t'__pascal',\n\t\t'__pin',\n\t\t'__pragma',\n\t\t'__property',\n\t\t'__ptr32',\n\t\t'__ptr64',\n\t\t'__raise',\n\t\t'__restrict',\n\t\t'__resume',\n\t\t'__sealed',\n\t\t'__single_inheritance',\n\t\t'__stdcall',\n\t\t'__super',\n\t\t'__thiscall',\n\t\t'__try',\n\t\t'__try_cast',\n\t\t'__typeof',\n\t\t'__unaligned',\n\t\t'__unhook',\n\t\t'__uuidof',\n\t\t'__value',\n\t\t'__virtual_inheritance',\n\t\t'__w64',\n\t\t'__wchar_t'\n\t],\n\n\toperators: [\n\t\t'=',\n\t\t'>',\n\t\t'<',\n\t\t'!',\n\t\t'~',\n\t\t'?',\n\t\t':',\n\t\t'==',\n\t\t'<=',\n\t\t'>=',\n\t\t'!=',\n\t\t'&&',\n\t\t'||',\n\t\t'++',\n\t\t'--',\n\t\t'+',\n\t\t'-',\n\t\t'*',\n\t\t'/',\n\t\t'&',\n\t\t'|',\n\t\t'^',\n\t\t'%',\n\t\t'<<',\n\t\t'>>',\n\t\t'>>>',\n\t\t'+=',\n\t\t'-=',\n\t\t'*=',\n\t\t'/=',\n\t\t'&=',\n\t\t'|=',\n\t\t'^=',\n\t\t'%=',\n\t\t'<<=',\n\t\t'>>=',\n\t\t'>>>='\n\t],\n\n\t// we include these common regular expressions\n\tsymbols: /[=><!~?:&|+\\-*\\/\\^%]+/,\n\tescapes: /\\\\(?:[0abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\tintegersuffix: /([uU](ll|LL|l|L)|(ll|LL|l|L)?[uU]?)/,\n\tfloatsuffix: /[fFlL]?/,\n\tencoding: /u|u8|U|L/,\n\n\t// The main tokenizer for our languages\n\ttokenizer: {\n\t\troot: [\n\t\t\t// C++ 11 Raw String\n\t\t\t[/@encoding?R\\\"(?:([^ ()\\\\\\t]*))\\(/, { token: 'string.raw.begin', next: '@raw.$1' }],\n\n\t\t\t// identifiers and keywords\n\t\t\t[\n\t\t\t\t/[a-zA-Z_]\\w*/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@keywords': { token: 'keyword.$0' },\n\t\t\t\t\t\t'@default': 'identifier'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\n\t\t\t// The preprocessor checks must be before whitespace as they check /^\\s*#/ which\n\t\t\t// otherwise fails to match later after other whitespace has been removed.\n\n\t\t\t// Inclusion\n\t\t\t[/^\\s*#\\s*include/, { token: 'keyword.directive.include', next: '@include' }],\n\n\t\t\t// Preprocessor directive\n\t\t\t[/^\\s*#\\s*\\w+/, 'keyword.directive'],\n\n\t\t\t// whitespace\n\t\t\t{ include: '@whitespace' },\n\n\t\t\t// [[ attributes ]].\n\t\t\t[/\\[\\s*\\[/, { token: 'annotation', next: '@annotation' }],\n\t\t\t// delimiters and operators\n\t\t\t[/[{}()\\[\\]]/, '@brackets'],\n\t\t\t[/[<>](?!@symbols)/, '@brackets'],\n\t\t\t[\n\t\t\t\t/@symbols/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@operators': 'delimiter',\n\t\t\t\t\t\t'@default': ''\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\n\t\t\t// numbers\n\t\t\t[/\\d*\\d+[eE]([\\-+]?\\d+)?(@floatsuffix)/, 'number.float'],\n\t\t\t[/\\d*\\.\\d+([eE][\\-+]?\\d+)?(@floatsuffix)/, 'number.float'],\n\t\t\t[/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/, 'number.hex'],\n\t\t\t[/0[0-7']*[0-7](@integersuffix)/, 'number.octal'],\n\t\t\t[/0[bB][0-1']*[0-1](@integersuffix)/, 'number.binary'],\n\t\t\t[/\\d[\\d']*\\d(@integersuffix)/, 'number'],\n\t\t\t[/\\d(@integersuffix)/, 'number'],\n\n\t\t\t// delimiter: after number because of .\\d floats\n\t\t\t[/[;,.]/, 'delimiter'],\n\n\t\t\t// strings\n\t\t\t[/\"([^\"\\\\]|\\\\.)*$/, 'string.invalid'], // non-teminated string\n\t\t\t[/\"/, 'string', '@string'],\n\n\t\t\t// characters\n\t\t\t[/'[^\\\\']'/, 'string'],\n\t\t\t[/(')(@escapes)(')/, ['string', 'string.escape', 'string']],\n\t\t\t[/'/, 'string.invalid']\n\t\t],\n\n\t\twhitespace: [\n\t\t\t[/[ \\t\\r\\n]+/, ''],\n\t\t\t[/\\/\\*\\*(?!\\/)/, 'comment.doc', '@doccomment'],\n\t\t\t[/\\/\\*/, 'comment', '@comment'],\n\t\t\t[/\\/\\/.*\\\\$/, 'comment', '@linecomment'],\n\t\t\t[/\\/\\/.*$/, 'comment']\n\t\t],\n\n\t\tcomment: [\n\t\t\t[/[^\\/*]+/, 'comment'],\n\t\t\t[/\\*\\//, 'comment', '@pop'],\n\t\t\t[/[\\/*]/, 'comment']\n\t\t],\n\n\t\t//For use with continuous line comments\n\t\tlinecomment: [\n\t\t\t[/.*[^\\\\]$/, 'comment', '@pop'],\n\t\t\t[/[^]+/, 'comment']\n\t\t],\n\n\t\t//Identical copy of comment above, except for the addition of .doc\n\t\tdoccomment: [\n\t\t\t[/[^\\/*]+/, 'comment.doc'],\n\t\t\t[/\\*\\//, 'comment.doc', '@pop'],\n\t\t\t[/[\\/*]/, 'comment.doc']\n\t\t],\n\n\t\tstring: [\n\t\t\t[/[^\\\\\"]+/, 'string'],\n\t\t\t[/@escapes/, 'string.escape'],\n\t\t\t[/\\\\./, 'string.escape.invalid'],\n\t\t\t[/\"/, 'string', '@pop']\n\t\t],\n\n\t\traw: [\n\t\t\t[\n\t\t\t\t/(.*)(\\))(?:([^ ()\\\\\\t\"]*))(\\\")/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'$3==$S2': [\n\t\t\t\t\t\t\t'string.raw',\n\t\t\t\t\t\t\t'string.raw.end',\n\t\t\t\t\t\t\t'string.raw.end',\n\t\t\t\t\t\t\t{ token: 'string.raw.end', next: '@pop' }\n\t\t\t\t\t\t],\n\t\t\t\t\t\t'@default': ['string.raw', 'string.raw', 'string.raw', 'string.raw']\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t[/.*/, 'string.raw']\n\t\t],\n\n\t\tannotation: [\n\t\t\t{ include: '@whitespace' },\n\t\t\t[/using|alignas/, 'keyword'],\n\t\t\t[/[a-zA-Z0-9_]+/, 'annotation'],\n\t\t\t[/[,:]/, 'delimiter'],\n\t\t\t[/[()]/, '@brackets'],\n\t\t\t[/\\]\\s*\\]/, { token: 'annotation', next: '@pop' }]\n\t\t],\n\n\t\tinclude: [\n\t\t\t[\n\t\t\t\t/(\\s*)(<)([^<>]*)(>)/,\n\t\t\t\t[\n\t\t\t\t\t'',\n\t\t\t\t\t'keyword.directive.include.begin',\n\t\t\t\t\t'string.include.identifier',\n\t\t\t\t\t{ token: 'keyword.directive.include.end', next: '@pop' }\n\t\t\t\t]\n\t\t\t],\n\t\t\t[\n\t\t\t\t/(\\s*)(\")([^\"]*)(\")/,\n\t\t\t\t[\n\t\t\t\t\t'',\n\t\t\t\t\t'keyword.directive.include.begin',\n\t\t\t\t\t'string.include.identifier',\n\t\t\t\t\t{ token: 'keyword.directive.include.end', next: '@pop' }\n\t\t\t\t]\n\t\t\t]\n\t\t]\n\t}\n};\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n\nexport const conf = {\n\twordPattern:\n\t\t/(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\#\\$\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\n\tcomments: {\n\t\tlineComment: '//',\n\t\tblockComment: ['/*', '*/']\n\t},\n\tbrackets: [\n\t\t['{', '}'],\n\t\t['[', ']'],\n\t\t['(', ')']\n\t],\n\tautoClosingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: \"'\", close: \"'\", notIn: ['string', 'comment'] },\n\t\t{ open: '\"', close: '\"', notIn: ['string', 'comment'] }\n\t],\n\tsurroundingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '<', close: '>' },\n\t\t{ open: \"'\", close: \"'\" },\n\t\t{ open: '\"', close: '\"' }\n\t],\n\tfolding: {\n\t\tmarkers: {\n\t\t\tstart: new RegExp('^\\\\s*#region\\\\b'),\n\t\t\tend: new RegExp('^\\\\s*#endregion\\\\b')\n\t\t}\n\t}\n};\n\nexport const language = {\n\tdefaultToken: '',\n\ttokenPostfix: '.cs',\n\n\tbrackets: [\n\t\t{ open: '{', close: '}', token: 'delimiter.curly' },\n\t\t{ open: '[', close: ']', token: 'delimiter.square' },\n\t\t{ open: '(', close: ')', token: 'delimiter.parenthesis' },\n\t\t{ open: '<', close: '>', token: 'delimiter.angle' }\n\t],\n\n\tkeywords: [\n\t\t'extern',\n\t\t'alias',\n\t\t'using',\n\t\t'bool',\n\t\t'decimal',\n\t\t'sbyte',\n\t\t'byte',\n\t\t'short',\n\t\t'ushort',\n\t\t'int',\n\t\t'uint',\n\t\t'long',\n\t\t'ulong',\n\t\t'char',\n\t\t'float',\n\t\t'double',\n\t\t'object',\n\t\t'dynamic',\n\t\t'string',\n\t\t'assembly',\n\t\t'is',\n\t\t'as',\n\t\t'ref',\n\t\t'out',\n\t\t'this',\n\t\t'base',\n\t\t'new',\n\t\t'typeof',\n\t\t'void',\n\t\t'checked',\n\t\t'unchecked',\n\t\t'default',\n\t\t'delegate',\n\t\t'var',\n\t\t'const',\n\t\t'if',\n\t\t'else',\n\t\t'switch',\n\t\t'case',\n\t\t'while',\n\t\t'do',\n\t\t'for',\n\t\t'foreach',\n\t\t'in',\n\t\t'break',\n\t\t'continue',\n\t\t'goto',\n\t\t'return',\n\t\t'throw',\n\t\t'try',\n\t\t'catch',\n\t\t'finally',\n\t\t'lock',\n\t\t'yield',\n\t\t'from',\n\t\t'let',\n\t\t'where',\n\t\t'join',\n\t\t'on',\n\t\t'equals',\n\t\t'into',\n\t\t'orderby',\n\t\t'ascending',\n\t\t'descending',\n\t\t'select',\n\t\t'group',\n\t\t'by',\n\t\t'namespace',\n\t\t'partial',\n\t\t'class',\n\t\t'field',\n\t\t'event',\n\t\t'method',\n\t\t'param',\n\t\t'public',\n\t\t'protected',\n\t\t'internal',\n\t\t'private',\n\t\t'abstract',\n\t\t'sealed',\n\t\t'static',\n\t\t'struct',\n\t\t'readonly',\n\t\t'volatile',\n\t\t'virtual',\n\t\t'override',\n\t\t'params',\n\t\t'get',\n\t\t'set',\n\t\t'add',\n\t\t'remove',\n\t\t'operator',\n\t\t'true',\n\t\t'false',\n\t\t'implicit',\n\t\t'explicit',\n\t\t'interface',\n\t\t'enum',\n\t\t'null',\n\t\t'async',\n\t\t'await',\n\t\t'fixed',\n\t\t'sizeof',\n\t\t'stackalloc',\n\t\t'unsafe',\n\t\t'nameof',\n\t\t'when'\n\t],\n\n\tnamespaceFollows: ['namespace', 'using'],\n\n\tparenFollows: ['if', 'for', 'while', 'switch', 'foreach', 'using', 'catch', 'when'],\n\n\toperators: [\n\t\t'=',\n\t\t'??',\n\t\t'||',\n\t\t'&&',\n\t\t'|',\n\t\t'^',\n\t\t'&',\n\t\t'==',\n\t\t'!=',\n\t\t'<=',\n\t\t'>=',\n\t\t'<<',\n\t\t'+',\n\t\t'-',\n\t\t'*',\n\t\t'/',\n\t\t'%',\n\t\t'!',\n\t\t'~',\n\t\t'++',\n\t\t'--',\n\t\t'+=',\n\t\t'-=',\n\t\t'*=',\n\t\t'/=',\n\t\t'%=',\n\t\t'&=',\n\t\t'|=',\n\t\t'^=',\n\t\t'<<=',\n\t\t'>>=',\n\t\t'>>',\n\t\t'=>'\n\t],\n\n\tsymbols: /[=><!~?:&|+\\-*\\/\\^%]+/,\n\n\t// escape sequences\n\tescapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\n\t// The main tokenizer for our languages\n\ttokenizer: {\n\t\troot: [\n\t\t\t// identifiers and keywords\n\t\t\t[\n\t\t\t\t/\\@?[a-zA-Z_]\\w*/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@namespaceFollows': {\n\t\t\t\t\t\t\ttoken: 'keyword.$0',\n\t\t\t\t\t\t\tnext: '@namespace'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'@keywords': {\n\t\t\t\t\t\t\ttoken: 'keyword.$0',\n\t\t\t\t\t\t\tnext: '@qualified'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'@default': { token: 'identifier', next: '@qualified' }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\n\t\t\t// whitespace\n\t\t\t{ include: '@whitespace' },\n\n\t\t\t// delimiters and operators\n\t\t\t[\n\t\t\t\t/}/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'$S2==interpolatedstring': {\n\t\t\t\t\t\t\ttoken: 'string.quote',\n\t\t\t\t\t\t\tnext: '@pop'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'$S2==litinterpstring': {\n\t\t\t\t\t\t\ttoken: 'string.quote',\n\t\t\t\t\t\t\tnext: '@pop'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'@default': '@brackets'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t[/[{}()\\[\\]]/, '@brackets'],\n\t\t\t[/[<>](?!@symbols)/, '@brackets'],\n\t\t\t[\n\t\t\t\t/@symbols/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@operators': 'delimiter',\n\t\t\t\t\t\t'@default': ''\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\n\t\t\t// numbers\n\t\t\t[/[0-9_]*\\.[0-9_]+([eE][\\-+]?\\d+)?[fFdD]?/, 'number.float'],\n\t\t\t[/0[xX][0-9a-fA-F_]+/, 'number.hex'],\n\t\t\t[/0[bB][01_]+/, 'number.hex'], // binary: use same theme style as hex\n\t\t\t[/[0-9_]+/, 'number'],\n\n\t\t\t// delimiter: after number because of .\\d floats\n\t\t\t[/[;,.]/, 'delimiter'],\n\n\t\t\t// strings\n\t\t\t[/\"([^\"\\\\]|\\\\.)*$/, 'string.invalid'], // non-teminated string\n\t\t\t[/\"/, { token: 'string.quote', next: '@string' }],\n\t\t\t[/\\$\\@\"/, { token: 'string.quote', next: '@litinterpstring' }],\n\t\t\t[/\\@\"/, { token: 'string.quote', next: '@litstring' }],\n\t\t\t[/\\$\"/, { token: 'string.quote', next: '@interpolatedstring' }],\n\n\t\t\t// characters\n\t\t\t[/'[^\\\\']'/, 'string'],\n\t\t\t[/(')(@escapes)(')/, ['string', 'string.escape', 'string']],\n\t\t\t[/'/, 'string.invalid']\n\t\t],\n\n\t\tqualified: [\n\t\t\t[\n\t\t\t\t/[a-zA-Z_][\\w]*/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@keywords': { token: 'keyword.$0' },\n\t\t\t\t\t\t'@default': 'identifier'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t[/\\./, 'delimiter'],\n\t\t\t['', '', '@pop']\n\t\t],\n\n\t\tnamespace: [\n\t\t\t{ include: '@whitespace' },\n\t\t\t[/[A-Z]\\w*/, 'namespace'],\n\t\t\t[/[\\.=]/, 'delimiter'],\n\t\t\t['', '', '@pop']\n\t\t],\n\n\t\tcomment: [\n\t\t\t[/[^\\/*]+/, 'comment'],\n\t\t\t// [/\\/\\*/, 'comment', '@push' ], // no nested comments :-(\n\t\t\t['\\\\*/', 'comment', '@pop'],\n\t\t\t[/[\\/*]/, 'comment']\n\t\t],\n\n\t\tstring: [\n\t\t\t[/[^\\\\\"]+/, 'string'],\n\t\t\t[/@escapes/, 'string.escape'],\n\t\t\t[/\\\\./, 'string.escape.invalid'],\n\t\t\t[/\"/, { token: 'string.quote', next: '@pop' }]\n\t\t],\n\n\t\tlitstring: [\n\t\t\t[/[^\"]+/, 'string'],\n\t\t\t[/\"\"/, 'string.escape'],\n\t\t\t[/\"/, { token: 'string.quote', next: '@pop' }]\n\t\t],\n\n\t\tlitinterpstring: [\n\t\t\t[/[^\"{]+/, 'string'],\n\t\t\t[/\"\"/, 'string.escape'],\n\t\t\t[/{{/, 'string.escape'],\n\t\t\t[/}}/, 'string.escape'],\n\t\t\t[/{/, { token: 'string.quote', next: 'root.litinterpstring' }],\n\t\t\t[/\"/, { token: 'string.quote', next: '@pop' }]\n\t\t],\n\n\t\tinterpolatedstring: [\n\t\t\t[/[^\\\\\"{]+/, 'string'],\n\t\t\t[/@escapes/, 'string.escape'],\n\t\t\t[/\\\\./, 'string.escape.invalid'],\n\t\t\t[/{{/, 'string.escape'],\n\t\t\t[/}}/, 'string.escape'],\n\t\t\t[/{/, { token: 'string.quote', next: 'root.interpolatedstring' }],\n\t\t\t[/\"/, { token: 'string.quote', next: '@pop' }]\n\t\t],\n\n\t\twhitespace: [\n\t\t\t[/^[ \\t\\v\\f]*#((r)|(load))(?=\\s)/, 'directive.csx'],\n\t\t\t[/^[ \\t\\v\\f]*#\\w.*$/, 'namespace.cpp'],\n\t\t\t[/[ \\t\\v\\f\\r\\n]+/, ''],\n\t\t\t[/\\/\\*/, 'comment', '@comment'],\n\t\t\t[/\\/\\/.*$/, 'comment']\n\t\t]\n\t}\n};\n", "\nexport const conf = {\n\tcomments: {\n\t\tlineComment: '#'\n\t},\n\tbrackets: [\n\t\t['{', '}'],\n\t\t['[', ']'],\n\t\t['(', ')']\n\t],\n\tautoClosingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: \"'\", close: \"'\" }\n\t],\n\tsurroundingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: \"'\", close: \"'\" }\n\t],\n\tfolding: {\n\t\toffSide: true\n\t},\n\tonEnterRules: [\n\t\t{\n\t\t\tbeforeText: /:\\s*$/,\n\t\t\taction: {\n\t\t\t\t// indentAction: languages.IndentAction.Indent\n indentAction: 1\n\t\t\t}\n\t\t}\n\t]\n};\n\nexport const language = {\n\ttokenPostfix: '.yaml',\n\n\tbrackets: [\n\t\t{ token: 'delimiter.bracket', open: '{', close: '}' },\n\t\t{ token: 'delimiter.square', open: '[', close: ']' }\n\t],\n\n\tkeywords: ['true', 'True', 'TRUE', 'false', 'False', 'FALSE', 'null', 'Null', 'Null', '~'],\n\n\tnumberInteger: /(?:0|[+-]?[0-9]+)/,\n\tnumberFloat: /(?:0|[+-]?[0-9]+)(?:\\.[0-9]+)?(?:e[-+][1-9][0-9]*)?/,\n\tnumberOctal: /0o[0-7]+/,\n\tnumberHex: /0x[0-9a-fA-F]+/,\n\tnumberInfinity: /[+-]?\\.(?:inf|Inf|INF)/,\n\tnumberNaN: /\\.(?:nan|Nan|NAN)/,\n\tnumberDate: /\\d{4}-\\d\\d-\\d\\d([Tt ]\\d\\d:\\d\\d:\\d\\d(\\.\\d+)?(( ?[+-]\\d\\d?(:\\d\\d)?)|Z)?)?/,\n\n\tescapes: /\\\\(?:[btnfr\\\\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,\n\n\ttokenizer: {\n\t\troot: [\n\t\t\t{ include: '@whitespace' },\n\t\t\t{ include: '@comment' },\n\n\t\t\t// Directive\n\t\t\t[/%[^ ]+.*$/, 'meta.directive'],\n\n\t\t\t// Document Markers\n\t\t\t[/---/, 'operators.directivesEnd'],\n\t\t\t[/\\.{3}/, 'operators.documentEnd'],\n\n\t\t\t// Block Structure Indicators\n\t\t\t[/[-?:](?= )/, 'operators'],\n\n\t\t\t{ include: '@anchor' },\n\t\t\t{ include: '@tagHandle' },\n\t\t\t{ include: '@flowCollections' },\n\t\t\t{ include: '@blockStyle' },\n\n\t\t\t// Numbers\n\t\t\t[/@numberInteger(?![ \\t]*\\S+)/, 'number'],\n\t\t\t[/@numberFloat(?![ \\t]*\\S+)/, 'number.float'],\n\t\t\t[/@numberOctal(?![ \\t]*\\S+)/, 'number.octal'],\n\t\t\t[/@numberHex(?![ \\t]*\\S+)/, 'number.hex'],\n\t\t\t[/@numberInfinity(?![ \\t]*\\S+)/, 'number.infinity'],\n\t\t\t[/@numberNaN(?![ \\t]*\\S+)/, 'number.nan'],\n\t\t\t[/@numberDate(?![ \\t]*\\S+)/, 'number.date'],\n\n\t\t\t// Key:Value pair\n\t\t\t[/(\".*?\"|'.*?'|[^#'\"]*?)([ \\t]*)(:)( |$)/, ['type', 'white', 'operators', 'white']],\n\n\t\t\t{ include: '@flowScalars' },\n\n\t\t\t// String nodes\n\t\t\t[\n\t\t\t\t/.+?(?=(\\s+#|$))/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@keywords': 'keyword',\n\t\t\t\t\t\t'@default': 'string'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t],\n\n\t\t// Flow Collection: Flow Mapping\n\t\tobject: [\n\t\t\t{ include: '@whitespace' },\n\t\t\t{ include: '@comment' },\n\n\t\t\t// Flow Mapping termination\n\t\t\t[/\\}/, '@brackets', '@pop'],\n\n\t\t\t// Flow Mapping delimiter\n\t\t\t[/,/, 'delimiter.comma'],\n\n\t\t\t// Flow Mapping Key:Value delimiter\n\t\t\t[/:(?= )/, 'operators'],\n\n\t\t\t// Flow Mapping Key:Value key\n\t\t\t[/(?:\".*?\"|'.*?'|[^,\\{\\[]+?)(?=: )/, 'type'],\n\n\t\t\t// Start Flow Style\n\t\t\t{ include: '@flowCollections' },\n\t\t\t{ include: '@flowScalars' },\n\n\t\t\t// Scalar Data types\n\t\t\t{ include: '@tagHandle' },\n\t\t\t{ include: '@anchor' },\n\t\t\t{ include: '@flowNumber' },\n\n\t\t\t// Other value (keyword or string)\n\t\t\t[\n\t\t\t\t/[^\\},]+/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@keywords': 'keyword',\n\t\t\t\t\t\t'@default': 'string'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t],\n\n\t\t// Flow Collection: Flow Sequence\n\t\tarray: [\n\t\t\t{ include: '@whitespace' },\n\t\t\t{ include: '@comment' },\n\n\t\t\t// Flow Sequence termination\n\t\t\t[/\\]/, '@brackets', '@pop'],\n\n\t\t\t// Flow Sequence delimiter\n\t\t\t[/,/, 'delimiter.comma'],\n\n\t\t\t// Start Flow Style\n\t\t\t{ include: '@flowCollections' },\n\t\t\t{ include: '@flowScalars' },\n\n\t\t\t// Scalar Data types\n\t\t\t{ include: '@tagHandle' },\n\t\t\t{ include: '@anchor' },\n\t\t\t{ include: '@flowNumber' },\n\n\t\t\t// Other value (keyword or string)\n\t\t\t[\n\t\t\t\t/[^\\],]+/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@keywords': 'keyword',\n\t\t\t\t\t\t'@default': 'string'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t],\n\n\t\t// First line of a Block Style\n\t\tmultiString: [[/^( +).+$/, 'string', '@multiStringContinued.$1']],\n\n\t\t// Further lines of a Block Style\n\t\t// Workaround for indentation detection\n\t\tmultiStringContinued: [\n\t\t\t[\n\t\t\t\t/^( *).+$/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'$1==$S2': 'string',\n\t\t\t\t\t\t'@default': { token: '@rematch', next: '@popall' }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t],\n\n\t\twhitespace: [[/[ \\t\\r\\n]+/, 'white']],\n\n\t\t// Only line comments\n\t\tcomment: [[/#.*$/, 'comment']],\n\n\t\t// Start Flow Collections\n\t\tflowCollections: [\n\t\t\t[/\\[/, '@brackets', '@array'],\n\t\t\t[/\\{/, '@brackets', '@object']\n\t\t],\n\n\t\t// Start Flow Scalars (quoted strings)\n\t\tflowScalars: [\n\t\t\t[/\"([^\"\\\\]|\\\\.)*$/, 'string.invalid'],\n\t\t\t[/'([^'\\\\]|\\\\.)*$/, 'string.invalid'],\n\t\t\t[/'[^']*'/, 'string'],\n\t\t\t[/\"/, 'string', '@doubleQuotedString']\n\t\t],\n\n\t\tdoubleQuotedString: [\n\t\t\t[/[^\\\\\"]+/, 'string'],\n\t\t\t[/@escapes/, 'string.escape'],\n\t\t\t[/\\\\./, 'string.escape.invalid'],\n\t\t\t[/\"/, 'string', '@pop']\n\t\t],\n\n\t\t// Start Block Scalar\n\t\tblockStyle: [[/[>|][0-9]*[+-]?$/, 'operators', '@multiString']],\n\n\t\t// Numbers in Flow Collections (terminate with ,]})\n\t\tflowNumber: [\n\t\t\t[/@numberInteger(?=[ \\t]*[,\\]\\}])/, 'number'],\n\t\t\t[/@numberFloat(?=[ \\t]*[,\\]\\}])/, 'number.float'],\n\t\t\t[/@numberOctal(?=[ \\t]*[,\\]\\}])/, 'number.octal'],\n\t\t\t[/@numberHex(?=[ \\t]*[,\\]\\}])/, 'number.hex'],\n\t\t\t[/@numberInfinity(?=[ \\t]*[,\\]\\}])/, 'number.infinity'],\n\t\t\t[/@numberNaN(?=[ \\t]*[,\\]\\}])/, 'number.nan'],\n\t\t\t[/@numberDate(?=[ \\t]*[,\\]\\}])/, 'number.date']\n\t\t],\n\n\t\ttagHandle: [[/\\![^ ]*/, 'tag']],\n\n\t\tanchor: [[/[&*][^ ]+/, 'namespace']]\n\t}\n};\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const conf = {\n\tcomments: {\n\t\tlineComment: '//',\n\t\tblockComment: ['/*', '*/']\n\t},\n\tbrackets: [\n\t\t['{', '}'],\n\t\t['[', ']'],\n\t\t['(', ')']\n\t],\n\tautoClosingPairs: [\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"', notIn: ['string'] }\n\t],\n\tsurroundingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: \"'\", close: \"'\" }\n\t],\n\tfolding: {\n\t\tmarkers: {\n\t\t\tstart: new RegExp('^\\\\s*#pragma\\\\s+region\\\\b'),\n\t\t\tend: new RegExp('^\\\\s*#pragma\\\\s+endregion\\\\b')\n\t\t}\n\t}\n};\n\nexport const language = {\n\ttokenPostfix: '.rust',\n\tdefaultToken: 'invalid',\n\tkeywords: [\n\t\t'as',\n\t\t'async',\n\t\t'await',\n\t\t'box',\n\t\t'break',\n\t\t'const',\n\t\t'continue',\n\t\t'crate',\n\t\t'dyn',\n\t\t'else',\n\t\t'enum',\n\t\t'extern',\n\t\t'false',\n\t\t'fn',\n\t\t'for',\n\t\t'if',\n\t\t'impl',\n\t\t'in',\n\t\t'let',\n\t\t'loop',\n\t\t'match',\n\t\t'mod',\n\t\t'move',\n\t\t'mut',\n\t\t'pub',\n\t\t'ref',\n\t\t'return',\n\t\t'self',\n\t\t'static',\n\t\t'struct',\n\t\t'super',\n\t\t'trait',\n\t\t'true',\n\t\t'try',\n\t\t'type',\n\t\t'unsafe',\n\t\t'use',\n\t\t'where',\n\t\t'while',\n\t\t'catch',\n\t\t'default',\n\t\t'union',\n\t\t'static',\n\t\t'abstract',\n\t\t'alignof',\n\t\t'become',\n\t\t'do',\n\t\t'final',\n\t\t'macro',\n\t\t'offsetof',\n\t\t'override',\n\t\t'priv',\n\t\t'proc',\n\t\t'pure',\n\t\t'sizeof',\n\t\t'typeof',\n\t\t'unsized',\n\t\t'virtual',\n\t\t'yield'\n\t],\n\n\ttypeKeywords: [\n\t\t'Self',\n\t\t'm32',\n\t\t'm64',\n\t\t'm128',\n\t\t'f80',\n\t\t'f16',\n\t\t'f128',\n\t\t'int',\n\t\t'uint',\n\t\t'float',\n\t\t'char',\n\t\t'bool',\n\t\t'u8',\n\t\t'u16',\n\t\t'u32',\n\t\t'u64',\n\t\t'f32',\n\t\t'f64',\n\t\t'i8',\n\t\t'i16',\n\t\t'i32',\n\t\t'i64',\n\t\t'str',\n\t\t'Option',\n\t\t'Either',\n\t\t'c_float',\n\t\t'c_double',\n\t\t'c_void',\n\t\t'FILE',\n\t\t'fpos_t',\n\t\t'DIR',\n\t\t'dirent',\n\t\t'c_char',\n\t\t'c_schar',\n\t\t'c_uchar',\n\t\t'c_short',\n\t\t'c_ushort',\n\t\t'c_int',\n\t\t'c_uint',\n\t\t'c_long',\n\t\t'c_ulong',\n\t\t'size_t',\n\t\t'ptrdiff_t',\n\t\t'clock_t',\n\t\t'time_t',\n\t\t'c_longlong',\n\t\t'c_ulonglong',\n\t\t'intptr_t',\n\t\t'uintptr_t',\n\t\t'off_t',\n\t\t'dev_t',\n\t\t'ino_t',\n\t\t'pid_t',\n\t\t'mode_t',\n\t\t'ssize_t'\n\t],\n\n\tconstants: ['true', 'false', 'Some', 'None', 'Left', 'Right', 'Ok', 'Err'],\n\n\tsupportConstants: [\n\t\t'EXIT_FAILURE',\n\t\t'EXIT_SUCCESS',\n\t\t'RAND_MAX',\n\t\t'EOF',\n\t\t'SEEK_SET',\n\t\t'SEEK_CUR',\n\t\t'SEEK_END',\n\t\t'_IOFBF',\n\t\t'_IONBF',\n\t\t'_IOLBF',\n\t\t'BUFSIZ',\n\t\t'FOPEN_MAX',\n\t\t'FILENAME_MAX',\n\t\t'L_tmpnam',\n\t\t'TMP_MAX',\n\t\t'O_RDONLY',\n\t\t'O_WRONLY',\n\t\t'O_RDWR',\n\t\t'O_APPEND',\n\t\t'O_CREAT',\n\t\t'O_EXCL',\n\t\t'O_TRUNC',\n\t\t'S_IFIFO',\n\t\t'S_IFCHR',\n\t\t'S_IFBLK',\n\t\t'S_IFDIR',\n\t\t'S_IFREG',\n\t\t'S_IFMT',\n\t\t'S_IEXEC',\n\t\t'S_IWRITE',\n\t\t'S_IREAD',\n\t\t'S_IRWXU',\n\t\t'S_IXUSR',\n\t\t'S_IWUSR',\n\t\t'S_IRUSR',\n\t\t'F_OK',\n\t\t'R_OK',\n\t\t'W_OK',\n\t\t'X_OK',\n\t\t'STDIN_FILENO',\n\t\t'STDOUT_FILENO',\n\t\t'STDERR_FILENO'\n\t],\n\n\tsupportMacros: [\n\t\t'format!',\n\t\t'print!',\n\t\t'println!',\n\t\t'panic!',\n\t\t'format_args!',\n\t\t'unreachable!',\n\t\t'write!',\n\t\t'writeln!'\n\t],\n\n\toperators: [\n\t\t'!',\n\t\t'!=',\n\t\t'%',\n\t\t'%=',\n\t\t'&',\n\t\t'&=',\n\t\t'&&',\n\t\t'*',\n\t\t'*=',\n\t\t'+',\n\t\t'+=',\n\t\t'-',\n\t\t'-=',\n\t\t'->',\n\t\t'.',\n\t\t'..',\n\t\t'...',\n\t\t'/',\n\t\t'/=',\n\t\t':',\n\t\t';',\n\t\t'<<',\n\t\t'<<=',\n\t\t'<',\n\t\t'<=',\n\t\t'=',\n\t\t'==',\n\t\t'=>',\n\t\t'>',\n\t\t'>=',\n\t\t'>>',\n\t\t'>>=',\n\t\t'@',\n\t\t'^',\n\t\t'^=',\n\t\t'|',\n\t\t'|=',\n\t\t'||',\n\t\t'_',\n\t\t'?',\n\t\t'#'\n\t],\n\n\tescapes: /\\\\([nrt0\\\"''\\\\]|x\\h{2}|u\\{\\h{1,6}\\})/,\n\tdelimiters: /[,]/,\n\tsymbols: /[\\#\\!\\%\\&\\*\\+\\-\\.\\/\\:\\;\\<\\=\\>\\@\\^\\|_\\?]+/,\n\tintSuffixes: /[iu](8|16|32|64|128|size)/,\n\tfloatSuffixes: /f(32|64)/,\n\n\ttokenizer: {\n\t\troot: [\n\t\t\t// Raw string literals\n\t\t\t[/r(#*)\"/, { token: 'string.quote', bracket: '@open', next: '@stringraw.$1' }],\n\t\t\t[\n\t\t\t\t/[a-zA-Z][a-zA-Z0-9_]*!?|_[a-zA-Z0-9_]+/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@typeKeywords': 'keyword.type',\n\t\t\t\t\t\t'@keywords': 'keyword',\n\t\t\t\t\t\t'@supportConstants': 'keyword',\n\t\t\t\t\t\t'@supportMacros': 'keyword',\n\t\t\t\t\t\t'@constants': 'keyword',\n\t\t\t\t\t\t'@default': 'identifier'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t// Designator\n\t\t\t[/\\$/, 'identifier'],\n\t\t\t// Lifetime annotations\n\t\t\t[/'[a-zA-Z_][a-zA-Z0-9_]*(?=[^\\'])/, 'identifier'],\n\t\t\t// Byte literal\n\t\t\t[/'(\\S|@escapes)'/, 'string.byteliteral'],\n\t\t\t// Strings\n\t\t\t[/\"/, { token: 'string.quote', bracket: '@open', next: '@string' }],\n\t\t\t{ include: '@numbers' },\n\t\t\t// Whitespace + comments\n\t\t\t{ include: '@whitespace' },\n\t\t\t[\n\t\t\t\t/@delimiters/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@keywords': 'keyword',\n\t\t\t\t\t\t'@default': 'delimiter'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\n\t\t\t[/[{}()\\[\\]<>]/, '@brackets'],\n\t\t\t[/@symbols/, { cases: { '@operators': 'operator', '@default': '' } }]\n\t\t],\n\n\t\twhitespace: [\n\t\t\t[/[ \\t\\r\\n]+/, 'white'],\n\t\t\t[/\\/\\*/, 'comment', '@comment'],\n\t\t\t[/\\/\\/.*$/, 'comment']\n\t\t],\n\n\t\tcomment: [\n\t\t\t[/[^\\/*]+/, 'comment'],\n\t\t\t[/\\/\\*/, 'comment', '@push'],\n\t\t\t['\\\\*/', 'comment', '@pop'],\n\t\t\t[/[\\/*]/, 'comment']\n\t\t],\n\n\t\tstring: [\n\t\t\t[/[^\\\\\"]+/, 'string'],\n\t\t\t[/@escapes/, 'string.escape'],\n\t\t\t[/\\\\./, 'string.escape.invalid'],\n\t\t\t[/\"/, { token: 'string.quote', bracket: '@close', next: '@pop' }]\n\t\t],\n\n\t\tstringraw: [\n\t\t\t[/[^\"#]+/, { token: 'string' }],\n\t\t\t[\n\t\t\t\t/\"(#*)/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'$1==$S2': { token: 'string.quote', bracket: '@close', next: '@pop' },\n\t\t\t\t\t\t'@default': { token: 'string' }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t[/[\"#]/, { token: 'string' }]\n\t\t],\n\n\t\tnumbers: [\n\t\t\t//Octal\n\t\t\t[/(0o[0-7_]+)(@intSuffixes)?/, { token: 'number' }],\n\t\t\t//Binary\n\t\t\t[/(0b[0-1_]+)(@intSuffixes)?/, { token: 'number' }],\n\t\t\t//Exponent\n\t\t\t[/[\\d][\\d_]*(\\.[\\d][\\d_]*)?[eE][+-][\\d_]+(@floatSuffixes)?/, { token: 'number' }],\n\t\t\t//Float\n\t\t\t[/\\b(\\d\\.?[\\d_]*)(@floatSuffixes)?\\b/, { token: 'number' }],\n\t\t\t//Hexadecimal\n\t\t\t[/(0x[\\da-fA-F]+)_?(@intSuffixes)?/, { token: 'number' }],\n\t\t\t//Integer\n\t\t\t[/[\\d][\\d_]*(@intSuffixes?)?/, { token: 'number' }]\n\t\t]\n\t}\n};\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexport const conf = {\n\tcomments: {\n\t\tblockComment: ['<!--', '-->']\n\t},\n\tbrackets: [\n\t\t['{', '}'],\n\t\t['[', ']'],\n\t\t['(', ')']\n\t],\n\tautoClosingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '<', close: '>', notIn: ['string'] }\n\t],\n\tsurroundingPairs: [\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '`', close: '`' }\n\t],\n\tfolding: {\n\t\tmarkers: {\n\t\t\tstart: new RegExp('^\\\\s*<!--\\\\s*#?region\\\\b.*-->'),\n\t\t\tend: new RegExp('^\\\\s*<!--\\\\s*#?endregion\\\\b.*-->')\n\t\t}\n\t}\n};\n\nexport const language = {\n\tdefaultToken: '',\n\ttokenPostfix: '.md',\n\n\t// escape codes\n\tcontrol: /[\\\\`*_\\[\\]{}()#+\\-\\.!]/,\n\tnoncontrol: /[^\\\\`*_\\[\\]{}()#+\\-\\.!]/,\n\tescapes: /\\\\(?:@control)/,\n\n\t// escape codes for javascript/CSS strings\n\tjsescapes: /\\\\(?:[btnfr\\\\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,\n\n\t// non matched elements\n\tempty: [\n\t\t'area',\n\t\t'base',\n\t\t'basefont',\n\t\t'br',\n\t\t'col',\n\t\t'frame',\n\t\t'hr',\n\t\t'img',\n\t\t'input',\n\t\t'isindex',\n\t\t'link',\n\t\t'meta',\n\t\t'param'\n\t],\n\n\ttokenizer: {\n\t\troot: [\n\t\t\t// markdown tables\n\t\t\t[/^\\s*\\|/, '@rematch', '@table_header'],\n\n\t\t\t// headers (with #)\n\t\t\t[/^(\\s{0,3})(#+)((?:[^\\\\#]|@escapes)+)((?:#+)?)/, ['white', 'keyword', 'keyword', 'keyword']],\n\n\t\t\t// headers (with =)\n\t\t\t[/^\\s*(=+|\\-+)\\s*$/, 'keyword'],\n\n\t\t\t// headers (with ***)\n\t\t\t[/^\\s*((\\*[ ]?)+)\\s*$/, 'meta.separator'],\n\n\t\t\t// quote\n\t\t\t[/^\\s*>+/, 'comment'],\n\n\t\t\t// list (starting with * or number)\n\t\t\t[/^\\s*([\\*\\-+:]|\\d+\\.)\\s/, 'keyword'],\n\n\t\t\t// code block (4 spaces indent)\n\t\t\t[/^(\\t|[ ]{4})[^ ].*$/, 'string'],\n\n\t\t\t// code block (3 tilde)\n\t\t\t[/^\\s*~~~\\s*((?:\\w|[\\/\\-#])+)?\\s*$/, { token: 'string', next: '@codeblock' }],\n\n\t\t\t// github style code blocks (with backticks and language)\n\t\t\t[\n\t\t\t\t/^\\s*```\\s*((?:\\w|[\\/\\-#])+).*$/,\n\t\t\t\t{ token: 'string', next: '@codeblockgh', nextEmbedded: '$1' }\n\t\t\t],\n\n\t\t\t// github style code blocks (with backticks but no language)\n\t\t\t[/^\\s*```\\s*$/, { token: 'string', next: '@codeblock' }],\n\n\t\t\t// markup within lines\n\t\t\t{ include: '@linecontent' }\n\t\t],\n\n\t\ttable_header: [\n\t\t\t{ include: '@table_common' },\n\t\t\t[/[^\\|]+/, 'keyword.table.header'] // table header\n\t\t],\n\n\t\ttable_body: [{ include: '@table_common' }, { include: '@linecontent' }],\n\n\t\ttable_common: [\n\t\t\t[/\\s*[\\-:]+\\s*/, { token: 'keyword', switchTo: 'table_body' }], // header-divider\n\t\t\t[/^\\s*\\|/, 'keyword.table.left'], // opening |\n\t\t\t[/^\\s*[^\\|]/, '@rematch', '@pop'], // exiting\n\t\t\t[/^\\s*$/, '@rematch', '@pop'], // exiting\n\t\t\t[\n\t\t\t\t/\\|/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@eos': 'keyword.table.right', // closing |\n\t\t\t\t\t\t'@default': 'keyword.table.middle' // inner |\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t],\n\n\t\tcodeblock: [\n\t\t\t[/^\\s*~~~\\s*$/, { token: 'string', next: '@pop' }],\n\t\t\t[/^\\s*```\\s*$/, { token: 'string', next: '@pop' }],\n\t\t\t[/.*$/, 'variable.source']\n\t\t],\n\n\t\t// github style code blocks\n\t\tcodeblockgh: [\n\t\t\t[/```\\s*$/, { token: 'string', next: '@pop', nextEmbedded: '@pop' }],\n\t\t\t[/[^`]+/, 'variable.source']\n\t\t],\n\n\t\tlinecontent: [\n\t\t\t// escapes\n\t\t\t[/&\\w+;/, 'string.escape'],\n\t\t\t[/@escapes/, 'escape'],\n\n\t\t\t// various markup\n\t\t\t[/\\b__([^\\\\_]|@escapes|_(?!_))+__\\b/, 'strong'],\n\t\t\t[/\\*\\*([^\\\\*]|@escapes|\\*(?!\\*))+\\*\\*/, 'strong'],\n\t\t\t[/\\b_[^_]+_\\b/, 'emphasis'],\n\t\t\t[/\\*([^\\\\*]|@escapes)+\\*/, 'emphasis'],\n\t\t\t[/`([^\\\\`]|@escapes)+`/, 'variable'],\n\n\t\t\t// links\n\t\t\t[/\\{+[^}]+\\}+/, 'string.target'],\n\t\t\t[/(!?\\[)((?:[^\\]\\\\]|@escapes)*)(\\]\\([^\\)]+\\))/, ['string.link', '', 'string.link']],\n\t\t\t[/(!?\\[)((?:[^\\]\\\\]|@escapes)*)(\\])/, 'string.link'],\n\n\t\t\t// or html\n\t\t\t{ include: 'html' }\n\t\t],\n\n\t\t// Note: it is tempting to rather switch to the real HTML mode instead of building our own here\n\t\t// but currently there is a limitation in Monarch that prevents us from doing it: The opening\n\t\t// '<' would start the HTML mode, however there is no way to jump 1 character back to let the\n\t\t// HTML mode also tokenize the opening angle bracket. Thus, even though we could jump to HTML,\n\t\t// we cannot correctly tokenize it in that mode yet.\n\t\thtml: [\n\t\t\t// html tags\n\t\t\t[/<(\\w+)\\/>/, 'tag'],\n\t\t\t[\n\t\t\t\t/<(\\w+)(\\-|\\w)*/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'@empty': { token: 'tag', next: '@tag.$1' },\n\t\t\t\t\t\t'@default': { token: 'tag', next: '@tag.$1' }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\t[/<\\/(\\w+)(\\-|\\w)*\\s*>/, { token: 'tag' }],\n\n\t\t\t[/<!--/, 'comment', '@comment']\n\t\t],\n\n\t\tcomment: [\n\t\t\t[/[^<\\-]+/, 'comment.content'],\n\t\t\t[/-->/, 'comment', '@pop'],\n\t\t\t[/<!--/, 'comment.content.invalid'],\n\t\t\t[/[<\\-]/, 'comment.content']\n\t\t],\n\n\t\t// Almost full HTML tag matching, complete with embedded scripts & styles\n\t\ttag: [\n\t\t\t[/[ \\t\\r\\n]+/, 'white'],\n\t\t\t[\n\t\t\t\t/(type)(\\s*=\\s*)(\")([^\"]+)(\")/,\n\t\t\t\t[\n\t\t\t\t\t'attribute.name.html',\n\t\t\t\t\t'delimiter.html',\n\t\t\t\t\t'string.html',\n\t\t\t\t\t{ token: 'string.html', switchTo: '@tag.$S2.$4' },\n\t\t\t\t\t'string.html'\n\t\t\t\t]\n\t\t\t],\n\t\t\t[\n\t\t\t\t/(type)(\\s*=\\s*)(')([^']+)(')/,\n\t\t\t\t[\n\t\t\t\t\t'attribute.name.html',\n\t\t\t\t\t'delimiter.html',\n\t\t\t\t\t'string.html',\n\t\t\t\t\t{ token: 'string.html', switchTo: '@tag.$S2.$4' },\n\t\t\t\t\t'string.html'\n\t\t\t\t]\n\t\t\t],\n\t\t\t[/(\\w+)(\\s*=\\s*)(\"[^\"]*\"|'[^']*')/, ['attribute.name.html', 'delimiter.html', 'string.html']],\n\t\t\t[/\\w+/, 'attribute.name.html'],\n\t\t\t[/\\/>/, 'tag', '@pop'],\n\t\t\t[\n\t\t\t\t/>/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'$S2==style': {\n\t\t\t\t\t\t\ttoken: 'tag',\n\t\t\t\t\t\t\tswitchTo: 'embeddedStyle',\n\t\t\t\t\t\t\tnextEmbedded: 'text/css'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'$S2==script': {\n\t\t\t\t\t\t\tcases: {\n\t\t\t\t\t\t\t\t$S3: {\n\t\t\t\t\t\t\t\t\ttoken: 'tag',\n\t\t\t\t\t\t\t\t\tswitchTo: 'embeddedScript',\n\t\t\t\t\t\t\t\t\tnextEmbedded: '$S3'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t'@default': {\n\t\t\t\t\t\t\t\t\ttoken: 'tag',\n\t\t\t\t\t\t\t\t\tswitchTo: 'embeddedScript',\n\t\t\t\t\t\t\t\t\tnextEmbedded: 'text/javascript'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'@default': { token: 'tag', next: '@pop' }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t],\n\n\t\tembeddedStyle: [\n\t\t\t[/[^<]+/, ''],\n\t\t\t[/<\\/style\\s*>/, { token: '@rematch', next: '@pop', nextEmbedded: '@pop' }],\n\t\t\t[/</, '']\n\t\t],\n\n\t\tembeddedScript: [\n\t\t\t[/[^<]+/, ''],\n\t\t\t[/<\\/script\\s*>/, { token: '@rematch', next: '@pop', nextEmbedded: '@pop' }],\n\t\t\t[/</, '']\n\t\t]\n\t}\n};\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexports.conf = {\n\tcomments: {\n\t\tlineComment: '#',\n\t\tblockComment: ['=begin', '=end'],\n\t},\n\tbrackets: [\n\t\t['(', ')'],\n\t\t['{', '}'],\n\t\t['[', ']']\n\t],\n\tautoClosingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: '\\'', close: '\\'' },\n\t],\n\tsurroundingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: '\\'', close: '\\'' },\n\t]\n};\n\n/*\n * Ruby language definition\n *\n * Quite a complex language due to elaborate escape sequences\n * and quoting of literate strings/regular expressions, and\n * an 'end' keyword that does not always apply to modifiers like until and while,\n * and a 'do' keyword that sometimes starts a block, but sometimes is part of\n * another statement (like 'while').\n *\n * (1) end blocks:\n * 'end' may end declarations like if or until, but sometimes 'if' or 'until'\n * are modifiers where there is no 'end'. Also, 'do' sometimes starts a block\n * that is ended by 'end', but sometimes it is part of a 'while', 'for', or 'until'\n * To do proper brace matching we do some elaborate state manipulation.\n * some examples:\n *\n * until bla do\n * work until tired\n * list.each do\n * something if test\n * end\n * end\n *\n * or\n *\n * if test\n * something (if test then x end)\n * bar if bla\n * end\n *\n * or, how about using class as a property..\n *\n * class Test\n * def endpoint\n * self.class.endpoint || routes\n * end\n * end\n *\n * (2) quoting:\n * there are many kinds of strings and escape sequences. But also, one can\n * start many string-like things as '%qx' where q specifies the kind of string\n * (like a command, escape expanded, regular expression, symbol etc.), and x is\n * some character and only another 'x' ends the sequence. Except for brackets\n * where the closing bracket ends the sequence.. and except for a nested bracket\n * inside the string like entity. Also, such strings can contain interpolated\n * ruby expressions again (and span multiple lines). Moreover, expanded\n * regular expression can also contain comments.\n */\n\nexports.language = {\n\ttokenPostfix: '.ruby',\n\n\tkeywords: [\n\t\t'__LINE__', '__ENCODING__', '__FILE__', 'BEGIN', 'END', 'alias', 'and', 'begin',\n\t\t'break', 'case', 'class', 'def', 'defined?', 'do', 'else', 'elsif', 'end',\n\t\t'ensure', 'for', 'false', 'if', 'in', 'module', 'next', 'nil', 'not', 'or', 'redo',\n\t\t'rescue', 'retry', 'return', 'self', 'super', 'then', 'true', 'undef', 'unless',\n\t\t'until', 'when', 'while', 'yield',\n\t],\n\n\tkeywordops: [\n\t\t'::', '..', '...', '?', ':', '=>'\n\t],\n\n\tbuiltins: [\n\t\t'require', 'public', 'private', 'include', 'extend', 'attr_reader',\n\t\t'protected', 'private_class_method', 'protected_class_method', 'new'\n\t],\n\n\t// these are closed by 'end' (if, while and until are handled separately)\n\tdeclarations: [\n\t\t'module', 'class', 'def', 'case', 'do', 'begin', 'for', 'if', 'while', 'until', 'unless'\n\t],\n\n\tlinedecls: [\n\t\t'def', 'case', 'do', 'begin', 'for', 'if', 'while', 'until', 'unless'\n\t],\n\n\toperators: [\n\t\t'^', '&', '|', '<=>', '==', '===', '!~', '=~', '>', '>=', '<', '<=', '<<', '>>', '+',\n\t\t'-', '*', '/', '%', '**', '~', '+@', '-@', '[]', '[]=', '`',\n\t\t'+=', '-=', '*=', '**=', '/=', '^=', '%=', '<<=', '>>=', '&=', '&&=', '||=', '|='\n\t],\n\n\tbrackets: [\n\t\t{ open: '(', close: ')', token: 'delimiter.parenthesis' },\n\t\t{ open: '{', close: '}', token: 'delimiter.curly' },\n\t\t{ open: '[', close: ']', token: 'delimiter.square' }\n\t],\n\n\t// we include these common regular expressions\n\tsymbols: /[=><!~?:&|+\\-*\\/\\^%\\.]+/,\n\n\t// escape sequences\n\tescape: /(?:[abefnrstv\\\\\"'\\n\\r]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2}|u[0-9A-Fa-f]{4})/,\n\tescapes: /\\\\(?:C\\-(@escape|.)|c(@escape|.)|@escape)/,\n\n\tdecpart: /\\d(_?\\d)*/,\n\tdecimal: /0|@decpart/,\n\n\tdelim: /[^a-zA-Z0-9\\s\\n\\r]/,\n\theredelim: /(?:\\w+|'[^']*'|\"[^\"]*\"|`[^`]*`)/,\n\n\tregexpctl: /[(){}\\[\\]\\$\\^|\\-*+?\\.]/,\n\tregexpesc: /\\\\(?:[AzZbBdDfnrstvwWn0\\\\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})?/,\n\n\n\t// The main tokenizer for our languages\n\ttokenizer: {\n\t\t// Main entry.\n\t\t// root.<decl> where decl is the current opening declaration (like 'class')\n\t\troot: [\n\t\t\t// identifiers and keywords\n\t\t\t// most complexity here is due to matching 'end' correctly with declarations.\n\t\t\t// We distinguish a declaration that comes first on a line, versus declarations further on a line (which are most likey modifiers)\n\t\t\t[/^(\\s*)([a-z_]\\w*[!?=]?)/, ['white',\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'for|until|while': { token: 'keyword.$2', next: '@dodecl.$2' },\n\t\t\t\t\t\t'@declarations': { token: 'keyword.$2', next: '@root.$2' },\n\t\t\t\t\t\t'end': { token: 'keyword.$S2', next: '@pop' },\n\t\t\t\t\t\t'@keywords': 'keyword',\n\t\t\t\t\t\t'@builtins': 'predefined',\n\t\t\t\t\t\t'@default': 'identifier'\n\t\t\t\t\t}\n\t\t\t\t}]],\n\t\t\t[/[a-z_]\\w*[!?=]?/,\n\t\t\t\t{\n\t\t\t\t\tcases: {\n\t\t\t\t\t\t'if|unless|while|until': { token: 'keyword.$0x', next: '@modifier.$0x' },\n\t\t\t\t\t\t'for': { token: 'keyword.$2', next: '@dodecl.$2' },\n\t\t\t\t\t\t'@linedecls': { token: 'keyword.$0', next: '@root.$0' },\n\t\t\t\t\t\t'end': { token: 'keyword.$S2', next: '@pop' },\n\t\t\t\t\t\t'@keywords': 'keyword',\n\t\t\t\t\t\t'@builtins': 'predefined',\n\t\t\t\t\t\t'@default': 'identifier'\n\t\t\t\t\t}\n\t\t\t\t}],\n\n\t\t\t[/[A-Z][\\w]*[!?=]?/, 'constructor.identifier'], // constant\n\t\t\t[/\\$[\\w]*/, 'global.constant'], // global\n\t\t\t[/@[\\w]*/, 'namespace.instance.identifier'], // instance\n\t\t\t[/@@[\\w]*/, 'namespace.class.identifier'], // class\n\n\t\t\t// here document\n\t\t\t[/<<-(@heredelim).*/, { token: 'string.heredoc.delimiter', next: '@heredoc.$1' }],\n\t\t\t[/[ \\t\\r\\n]+<<(@heredelim).*/, { token: 'string.heredoc.delimiter', next: '@heredoc.$1' }],\n\t\t\t[/^<<(@heredelim).*/, { token: 'string.heredoc.delimiter', next: '@heredoc.$1' }],\n\n\n\t\t\t// whitespace\n\t\t\t{ include: '@whitespace' },\n\n\t\t\t// strings\n\t\t\t[/\"/, { token: 'string.d.delim', next: '@dstring.d.\"' }],\n\t\t\t[/'/, { token: 'string.sq.delim', next: '@sstring.sq' }],\n\n\t\t\t// % literals. For efficiency, rematch in the 'pstring' state\n\t\t\t[/%([rsqxwW]|Q?)/, { token: '@rematch', next: 'pstring' }],\n\n\t\t\t// commands and symbols\n\t\t\t[/`/, { token: 'string.x.delim', next: '@dstring.x.`' }],\n\t\t\t[/:(\\w|[$@])\\w*[!?=]?/, 'string.s'],\n\t\t\t[/:\"/, { token: 'string.s.delim', next: '@dstring.s.\"' }],\n\t\t\t[/:'/, { token: 'string.s.delim', next: '@sstring.s' }],\n\n\t\t\t// regular expressions. Lookahead for a (not escaped) closing forwardslash on the same line\n\t\t\t[/\\/(?=(\\\\\\/|[^\\/\\n])+\\/)/, { token: 'regexp.delim', next: '@regexp' }],\n\n\t\t\t// delimiters and operators\n\t\t\t[/[{}()\\[\\]]/, '@brackets'],\n\t\t\t[/@symbols/, {\n\t\t\t\tcases: {\n\t\t\t\t\t'@keywordops': 'keyword',\n\t\t\t\t\t'@operators': 'operator',\n\t\t\t\t\t'@default': ''\n\t\t\t\t}\n\t\t\t}],\n\n\t\t\t[/[;,]/, 'delimiter'],\n\n\t\t\t// numbers\n\t\t\t[/0[xX][0-9a-fA-F](_?[0-9a-fA-F])*/, 'number.hex'],\n\t\t\t[/0[_oO][0-7](_?[0-7])*/, 'number.octal'],\n\t\t\t[/0[bB][01](_?[01])*/, 'number.binary'],\n\t\t\t[/0[dD]@decpart/, 'number'],\n\t\t\t[/@decimal((\\.@decpart)?([eE][\\-+]?@decpart)?)/, {\n\t\t\t\tcases: {\n\t\t\t\t\t'$1': 'number.float',\n\t\t\t\t\t'@default': 'number'\n\t\t\t\t}\n\t\t\t}],\n\n\t\t],\n\n\t\t// used to not treat a 'do' as a block opener if it occurs on the same\n\t\t// line as a 'do' statement: 'while|until|for'\n\t\t// dodecl.<decl> where decl is the declarations started, like 'while'\n\t\tdodecl: [\n\t\t\t[/^/, { token: '', switchTo: '@root.$S2' }], // get out of do-skipping mode on a new line\n\t\t\t[/[a-z_]\\w*[!?=]?/, {\n\t\t\t\tcases: {\n\t\t\t\t\t'end': { token: 'keyword.$S2', next: '@pop' }, // end on same line\n\t\t\t\t\t'do': { token: 'keyword', switchTo: '@root.$S2' }, // do on same line: not an open bracket here\n\t\t\t\t\t'@linedecls': { token: '@rematch', switchTo: '@root.$S2' }, // other declaration on same line: rematch\n\t\t\t\t\t'@keywords': 'keyword',\n\t\t\t\t\t'@builtins': 'predefined',\n\t\t\t\t\t'@default': 'identifier'\n\t\t\t\t}\n\t\t\t}],\n\t\t\t{ include: '@root' }\n\t\t],\n\n\t\t// used to prevent potential modifiers ('if|until|while|unless') to match\n\t\t// with 'end' keywords.\n\t\t// modifier.<decl>x where decl is the declaration starter, like 'if'\n\t\tmodifier: [\n\t\t\t[/^/, '', '@pop'], // it was a modifier: get out of modifier mode on a new line\n\t\t\t[/[a-z_]\\w*[!?=]?/, {\n\t\t\t\tcases: {\n\t\t\t\t\t'end': { token: 'keyword.$S2', next: '@pop' }, // end on same line\n\t\t\t\t\t'then|else|elsif|do': { token: 'keyword', switchTo: '@root.$S2' }, // real declaration and not a modifier\n\t\t\t\t\t'@linedecls': { token: '@rematch', switchTo: '@root.$S2' }, // other declaration => not a modifier\n\t\t\t\t\t'@keywords': 'keyword',\n\t\t\t\t\t'@builtins': 'predefined',\n\t\t\t\t\t'@default': 'identifier'\n\t\t\t\t}\n\t\t\t}],\n\t\t\t{ include: '@root' }\n\t\t],\n\n\t\t// single quote strings (also used for symbols)\n\t\t// sstring.<kind> where kind is 'sq' (single quote) or 's' (symbol)\n\t\tsstring: [\n\t\t\t[/[^\\\\']+/, 'string.$S2'],\n\t\t\t[/\\\\\\\\|\\\\'|\\\\$/, 'string.$S2.escape'],\n\t\t\t[/\\\\./, 'string.$S2.invalid'],\n\t\t\t[/'/, { token: 'string.$S2.delim', next: '@pop' }]\n\t\t],\n\n\t\t// double quoted \"string\".\n\t\t// dstring.<kind>.<delim> where kind is 'd' (double quoted), 'x' (command), or 's' (symbol)\n\t\t// and delim is the ending delimiter (\" or `)\n\t\tdstring: [\n\t\t\t[/[^\\\\`\"#]+/, 'string.$S2'],\n\t\t\t[/#/, 'string.$S2.escape', '@interpolated'],\n\t\t\t[/\\\\$/, 'string.$S2.escape'],\n\t\t\t[/@escapes/, 'string.$S2.escape'],\n\t\t\t[/\\\\./, 'string.$S2.escape.invalid'],\n\t\t\t[/[`\"]/, {\n\t\t\t\tcases: {\n\t\t\t\t\t'$#==$S3': { token: 'string.$S2.delim', next: '@pop' },\n\t\t\t\t\t'@default': 'string.$S2'\n\t\t\t\t}\n\t\t\t}]\n\t\t],\n\n\t\t// literal documents\n\t\t// heredoc.<close> where close is the closing delimiter\n\t\theredoc: [\n\t\t\t[/^(\\s*)(@heredelim)$/, {\n\t\t\t\tcases: {\n\t\t\t\t\t'$2==$S2': ['string.heredoc', { token: 'string.heredoc.delimiter', next: '@pop' }],\n\t\t\t\t\t'@default': ['string.heredoc', 'string.heredoc']\n\t\t\t\t}\n\t\t\t}],\n\t\t\t[/.*/, 'string.heredoc'],\n\t\t],\n\n\t\t// interpolated sequence\n\t\tinterpolated: [\n\t\t\t[/\\$\\w*/, 'global.constant', '@pop'],\n\t\t\t[/@\\w*/, 'namespace.class.identifier', '@pop'],\n\t\t\t[/@@\\w*/, 'namespace.instance.identifier', '@pop'],\n\t\t\t[/[{]/, { token: 'string.escape.curly', switchTo: '@interpolated_compound' }],\n\t\t\t['', '', '@pop'], // just a # is interpreted as a #\n\t\t],\n\n\t\t// any code\n\t\tinterpolated_compound: [\n\t\t\t[/[}]/, { token: 'string.escape.curly', next: '@pop' }],\n\t\t\t{ include: '@root' },\n\t\t],\n\n\t\t// %r quoted regexp\n\t\t// pregexp.<open>.<close> where open/close are the open/close delimiter\n\t\tpregexp: [\n\t\t\t{ include: '@whitespace' },\n\t\t\t// turns out that you can quote using regex control characters, aargh!\n\t\t\t// for example; %r|kgjgaj| is ok (even though | is used for alternation)\n\t\t\t// so, we need to match those first\n\t\t\t[/[^\\(\\{\\[\\\\]/, {\n\t\t\t\tcases: {\n\t\t\t\t\t'$#==$S3': { token: 'regexp.delim', next: '@pop' },\n\t\t\t\t\t'$#==$S2': { token: 'regexp.delim', next: '@push' }, // nested delimiters are allowed..\n\t\t\t\t\t'~[)}\\\\]]': '@brackets.regexp.escape.control',\n\t\t\t\t\t'~@regexpctl': 'regexp.escape.control',\n\t\t\t\t\t'@default': 'regexp'\n\t\t\t\t}\n\t\t\t}],\n\t\t\t{ include: '@regexcontrol' },\n\t\t],\n\n\t\t// We match regular expression quite precisely\n\t\tregexp: [\n\t\t\t{ include: '@regexcontrol' },\n\t\t\t[/[^\\\\\\/]/, 'regexp'],\n\t\t\t['/[ixmp]*', { token: 'regexp.delim' }, '@pop'],\n\t\t],\n\n\t\tregexcontrol: [\n\t\t\t[/(\\{)(\\d+(?:,\\d*)?)(\\})/, ['@brackets.regexp.escape.control', 'regexp.escape.control', '@brackets.regexp.escape.control']],\n\t\t\t[/(\\[)(\\^?)/, ['@brackets.regexp.escape.control', { token: 'regexp.escape.control', next: '@regexrange' }]],\n\t\t\t[/(\\()(\\?[:=!])/, ['@brackets.regexp.escape.control', 'regexp.escape.control']],\n\t\t\t[/\\(\\?#/, { token: 'regexp.escape.control', next: '@regexpcomment' }],\n\t\t\t[/[()]/, '@brackets.regexp.escape.control'],\n\t\t\t[/@regexpctl/, 'regexp.escape.control'],\n\t\t\t[/\\\\$/, 'regexp.escape'],\n\t\t\t[/@regexpesc/, 'regexp.escape'],\n\t\t\t[/\\\\\\./, 'regexp.invalid'],\n\t\t\t[/#/, 'regexp.escape', '@interpolated'],\n\t\t],\n\n\t\tregexrange: [\n\t\t\t[/-/, 'regexp.escape.control'],\n\t\t\t[/\\^/, 'regexp.invalid'],\n\t\t\t[/\\\\$/, 'regexp.escape'],\n\t\t\t[/@regexpesc/, 'regexp.escape'],\n\t\t\t[/[^\\]]/, 'regexp'],\n\t\t\t[/\\]/, '@brackets.regexp.escape.control', '@pop'],\n\t\t],\n\n\t\tregexpcomment: [\n\t\t\t[/[^)]+/, 'comment'],\n\t\t\t[/\\)/, { token: 'regexp.escape.control', next: '@pop' }]\n\t\t],\n\n\n\t\t// % quoted strings\n\t\t// A bit repetitive since we need to often special case the kind of ending delimiter\n\t\tpstring: [\n\t\t\t[/%([qws])\\(/, { token: 'string.$1.delim', switchTo: '@qstring.$1.(.)' }],\n\t\t\t[/%([qws])\\[/, { token: 'string.$1.delim', switchTo: '@qstring.$1.[.]' }],\n\t\t\t[/%([qws])\\{/, { token: 'string.$1.delim', switchTo: '@qstring.$1.{.}' }],\n\t\t\t[/%([qws])</, { token: 'string.$1.delim', switchTo: '@qstring.$1.<.>' }],\n\t\t\t[/%([qws])(@delim)/, { token: 'string.$1.delim', switchTo: '@qstring.$1.$2.$2' }],\n\n\t\t\t[/%r\\(/, { token: 'regexp.delim', switchTo: '@pregexp.(.)' }],\n\t\t\t[/%r\\[/, { token: 'regexp.delim', switchTo: '@pregexp.[.]' }],\n\t\t\t[/%r\\{/, { token: 'regexp.delim', switchTo: '@pregexp.{.}' }],\n\t\t\t[/%r</, { token: 'regexp.delim', switchTo: '@pregexp.<.>' }],\n\t\t\t[/%r(@delim)/, { token: 'regexp.delim', switchTo: '@pregexp.$1.$1' }],\n\n\t\t\t[/%(x|W|Q?)\\(/, { token: 'string.$1.delim', switchTo: '@qqstring.$1.(.)' }],\n\t\t\t[/%(x|W|Q?)\\[/, { token: 'string.$1.delim', switchTo: '@qqstring.$1.[.]' }],\n\t\t\t[/%(x|W|Q?)\\{/, { token: 'string.$1.delim', switchTo: '@qqstring.$1.{.}' }],\n\t\t\t[/%(x|W|Q?)</, { token: 'string.$1.delim', switchTo: '@qqstring.$1.<.>' }],\n\t\t\t[/%(x|W|Q?)(@delim)/, { token: 'string.$1.delim', switchTo: '@qqstring.$1.$2.$2' }],\n\n\t\t\t[/%([rqwsxW]|Q?)./, { token: 'invalid', next: '@pop' }], // recover\n\t\t\t[/./, { token: 'invalid', next: '@pop' }], // recover\n\t\t],\n\n\t\t// non-expanded quoted string.\n\t\t// qstring.<kind>.<open>.<close>\n\t\t// kind = q|w|s (single quote, array, symbol)\n\t\t// open = open delimiter\n\t\t// close = close delimiter\n\t\tqstring: [\n\t\t\t[/\\\\$/, 'string.$S2.escape'],\n\t\t\t[/\\\\./, 'string.$S2.escape'],\n\t\t\t[/./, {\n\t\t\t\tcases: {\n\t\t\t\t\t'$#==$S4': { token: 'string.$S2.delim', next: '@pop' },\n\t\t\t\t\t'$#==$S3': { token: 'string.$S2.delim', next: '@push' }, // nested delimiters are allowed..\n\t\t\t\t\t'@default': 'string.$S2'\n\t\t\t\t}\n\t\t\t}],\n\t\t],\n\n\t\t// expanded quoted string.\n\t\t// qqstring.<kind>.<open>.<close>\n\t\t// kind = Q|W|x (double quote, array, command)\n\t\t// open = open delimiter\n\t\t// close = close delimiter\n\t\tqqstring: [\n\t\t\t[/#/, 'string.$S2.escape', '@interpolated'],\n\t\t\t{ include: '@qstring' }\n\t\t],\n\n\n\t\t// whitespace & comments\n\t\twhitespace: [\n\t\t\t[/[ \\t\\r\\n]+/, ''],\n\t\t\t[/^\\s*=begin\\b/, 'comment', '@comment'],\n\t\t\t[/#.*$/, 'comment'],\n\t\t],\n\n\t\tcomment: [\n\t\t\t[/[^=]+/, 'comment'],\n\t\t\t[/^\\s*=begin\\b/, 'comment.invalid'], // nested comment\n\t\t\t[/^\\s*=end\\b.*/, 'comment', '@pop'],\n\t\t\t[/[=]/, 'comment']\n\t\t],\n\t}\n};\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexports.conf = {\n\twordPattern: /(#?-?\\d*\\.\\d\\w*%?)|((::|[@#.!:])?[\\w-?]+%?)|::|[@#.!:]/g,\n\n\tcomments: {\n\t\tblockComment: ['/*', '*/']\n\t},\n\n\tbrackets: [\n\t\t['{', '}'],\n\t\t['[', ']'],\n\t\t['(', ')']\n\t],\n\n\tautoClosingPairs: [\n\t\t{ open: '{', close: '}', notIn: ['string', 'comment'] },\n\t\t{ open: '[', close: ']', notIn: ['string', 'comment'] },\n\t\t{ open: '(', close: ')', notIn: ['string', 'comment'] },\n\t\t{ open: '\"', close: '\"', notIn: ['string', 'comment'] },\n\t\t{ open: '\\'', close: '\\'', notIn: ['string', 'comment'] }\n\t],\n\n\tsurroundingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: '\\'', close: '\\'' }\n\t]\n};\n\nexports.language = {\n\tdefaultToken: '',\n\ttokenPostfix: '.css',\n\n\tws: '[ \\t\\n\\r\\f]*', // whitespaces (referenced in several rules)\n\tidentifier: '-?-?([a-zA-Z]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))([\\\\w\\\\-]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))*',\n\n\tbrackets: [\n\t\t{ open: '{', close: '}', token: 'delimiter.bracket' },\n\t\t{ open: '[', close: ']', token: 'delimiter.bracket' },\n\t\t{ open: '(', close: ')', token: 'delimiter.parenthesis' },\n\t\t{ open: '<', close: '>', token: 'delimiter.angle' }\n\t],\n\n\ttokenizer: {\n\t\troot: [\n\t\t\t{ include: '@selector' },\n\t\t],\n\n\t\tselector: [\n\t\t\t{ include: '@comments' },\n\t\t\t{ include: '@import' },\n\t\t\t{ include: '@strings' },\n\t\t\t['[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)', { token: 'keyword', next: '@keyframedeclaration' }],\n\t\t\t['[@](page|content|font-face|-moz-document)', { token: 'keyword' }],\n\t\t\t['[@](charset|namespace)', { token: 'keyword', next: '@declarationbody' }],\n\t\t\t['(url-prefix)(\\\\()', ['attribute.value', { token: 'delimiter.parenthesis', next: '@urldeclaration' }]],\n\t\t\t['(url)(\\\\()', ['attribute.value', { token: 'delimiter.parenthesis', next: '@urldeclaration' }]],\n\t\t\t{ include: '@selectorname' },\n\t\t\t['[\\\\*]', 'tag'], // selector symbols\n\t\t\t['[>\\\\+,]', 'delimiter'], // selector operators\n\t\t\t['\\\\[', { token: 'delimiter.bracket', next: '@selectorattribute' }],\n\t\t\t['{', { token: 'delimiter.bracket', next: '@selectorbody' }]\n\t\t],\n\n\t\tselectorbody: [\n\t\t\t{ include: '@comments' },\n\t\t\t['[*_]?@identifier@ws:(?=(\\\\s|\\\\d|[^{;}]*[;}]))', 'attribute.name', '@rulevalue'], // rule definition: to distinguish from a nested selector check for whitespace, number or a semicolon\n\t\t\t['}', { token: 'delimiter.bracket', next: '@pop' }]\n\t\t],\n\n\t\tselectorname: [\n\t\t\t['(\\\\.|#(?=[^{])|%|(@identifier)|:)+', 'tag'], // selector (.foo, div, ...)\n\t\t],\n\n\t\tselectorattribute: [\n\t\t\t{ include: '@term' },\n\t\t\t[']', { token: 'delimiter.bracket', next: '@pop' }],\n\t\t],\n\n\t\tterm: [\n\t\t\t{ include: '@comments' },\n\t\t\t['(url-prefix)(\\\\()', ['attribute.value', { token: 'delimiter.parenthesis', next: '@urldeclaration' }]],\n\t\t\t['(url)(\\\\()', ['attribute.value', { token: 'delimiter.parenthesis', next: '@urldeclaration' }]],\n\t\t\t{ include: '@functioninvocation' },\n\t\t\t{ include: '@numbers' },\n\t\t\t{ include: '@name' },\n\t\t\t['([<>=\\\\+\\\\-\\\\*\\\\/\\\\^\\\\|\\\\~,])', 'delimiter'],\n\t\t\t[',', 'delimiter']\n\t\t],\n\n\t\trulevalue: [\n\t\t\t{ include: '@comments' },\n\t\t\t{ include: '@strings' },\n\t\t\t{ include: '@term' },\n\t\t\t['!important', 'keyword'],\n\t\t\t[';', 'delimiter', '@pop'],\n\t\t\t['(?=})', { token: '', next: '@pop' }] // missing semicolon\n\t\t],\n\n\t\twarndebug: [\n\t\t\t['[@](warn|debug)', { token: 'keyword', next: '@declarationbody' }]\n\t\t],\n\n\t\timport: [\n\t\t\t['[@](import)', { token: 'keyword', next: '@declarationbody' }]\n\t\t],\n\n\t\turldeclaration: [\n\t\t\t{ include: '@strings' },\n\t\t\t['[^)\\r\\n]+', 'string'],\n\t\t\t['\\\\)', { token: 'delimiter.parenthesis', next: '@pop' }]\n\t\t],\n\n\t\tparenthizedterm: [\n\t\t\t{ include: '@term' },\n\t\t\t['\\\\)', { token: 'delimiter.parenthesis', next: '@pop' }]\n\t\t],\n\n\t\tdeclarationbody: [\n\t\t\t{ include: '@term' },\n\t\t\t[';', 'delimiter', '@pop'],\n\t\t\t['(?=})', { token: '', next: '@pop' }] // missing semicolon\n\t\t],\n\n\t\tcomments: [\n\t\t\t['\\\\/\\\\*', 'comment', '@comment'],\n\t\t\t['\\\\/\\\\/+.*', 'comment']\n\t\t],\n\n\t\tcomment: [\n\t\t\t['\\\\*\\\\/', 'comment', '@pop'],\n\t\t\t[/[^*/]+/, 'comment'],\n\t\t\t[/./, 'comment'],\n\t\t],\n\n\t\tname: [\n\t\t\t['@identifier', 'attribute.value']\n\t\t],\n\n\t\tnumbers: [\n\t\t\t['-?(\\\\d*\\\\.)?\\\\d+([eE][\\\\-+]?\\\\d+)?', { token: 'attribute.value.number', next: '@units' }],\n\t\t\t['#[0-9a-fA-F_]+(?!\\\\w)', 'attribute.value.hex']\n\t\t],\n\n\t\tunits: [\n\t\t\t['(em|ex|ch|rem|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?', 'attribute.value.unit', '@pop']\n\t\t],\n\n\t\tkeyframedeclaration: [\n\t\t\t['@identifier', 'attribute.value'],\n\t\t\t['{', { token: 'delimiter.bracket', switchTo: '@keyframebody' }],\n\t\t],\n\n\t\tkeyframebody: [\n\t\t\t{ include: '@term' },\n\t\t\t['{', { token: 'delimiter.bracket', next: '@selectorbody' }],\n\t\t\t['}', { token: 'delimiter.bracket', next: '@pop' }],\n\t\t],\n\n\t\tfunctioninvocation: [\n\t\t\t['@identifier\\\\(', { token: 'attribute.value', next: '@functionarguments' }],\n\t\t],\n\n\t\tfunctionarguments: [\n\t\t\t['\\\\$@identifier@ws:', 'attribute.name'],\n\t\t\t['[,]', 'delimiter'],\n\t\t\t{ include: '@term' },\n\t\t\t['\\\\)', { token: 'attribute.value', next: '@pop' }],\n\t\t],\n\n\t\tstrings: [\n\t\t\t['~?\"', { token: 'string', next: '@stringenddoublequote' }],\n\t\t\t['~?\\'', { token: 'string', next: '@stringendquote' }]\n\t\t],\n\n\t\tstringenddoublequote: [\n\t\t\t['\\\\\\\\.', 'string'],\n\t\t\t['\"', { token: 'string', next: '@pop' }],\n\t\t\t[/[^\\\\\"]+/, 'string'],\n\t\t\t['.', 'string']\n\t\t],\n\n\t\tstringendquote: [\n\t\t\t['\\\\\\\\.', 'string'],\n\t\t\t['\\'', { token: 'string', next: '@pop' }],\n\t\t\t[/[^\\\\']+/, 'string'],\n\t\t\t['.', 'string']\n\t\t]\n\t}\n};\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexports.conf = {\n\tcomments: {\n\t\tlineComment: '#',\n\t\tblockComment: ['\\'\\'\\'', '\\'\\'\\''],\n\t},\n\tbrackets: [\n\t\t['{', '}'],\n\t\t['[', ']'],\n\t\t['(', ')']\n\t],\n\tautoClosingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"', notIn: ['string'] },\n\t\t{ open: '\\'', close: '\\'', notIn: ['string', 'comment'] },\n\t],\n\tsurroundingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: '\\'', close: '\\'' },\n\t]\n};\n\nexports.language = {\n\tdefaultToken: '',\n\ttokenPostfix: '.python',\n\n\tkeywords: [\n\t\t'and',\n\t\t'as',\n\t\t'assert',\n\t\t'break',\n\t\t'class',\n\t\t'continue',\n\t\t'def',\n\t\t'del',\n\t\t'elif',\n\t\t'else',\n\t\t'except',\n\t\t'exec',\n\t\t'finally',\n\t\t'for',\n\t\t'from',\n\t\t'global',\n\t\t'if',\n\t\t'import',\n\t\t'in',\n\t\t'is',\n\t\t'lambda',\n\t\t'None',\n\t\t'not',\n\t\t'or',\n\t\t'pass',\n\t\t'print',\n\t\t'raise',\n\t\t'return',\n\t\t'self',\n\t\t'try',\n\t\t'while',\n\t\t'with',\n\t\t'yield',\n\n\t\t'int',\n\t\t'float',\n\t\t'long',\n\t\t'complex',\n\t\t'hex',\n\n\t\t'abs',\n\t\t'all',\n\t\t'any',\n\t\t'apply',\n\t\t'basestring',\n\t\t'bin',\n\t\t'bool',\n\t\t'buffer',\n\t\t'bytearray',\n\t\t'callable',\n\t\t'chr',\n\t\t'classmethod',\n\t\t'cmp',\n\t\t'coerce',\n\t\t'compile',\n\t\t'complex',\n\t\t'delattr',\n\t\t'dict',\n\t\t'dir',\n\t\t'divmod',\n\t\t'enumerate',\n\t\t'eval',\n\t\t'execfile',\n\t\t'file',\n\t\t'filter',\n\t\t'format',\n\t\t'frozenset',\n\t\t'getattr',\n\t\t'globals',\n\t\t'hasattr',\n\t\t'hash',\n\t\t'help',\n\t\t'id',\n\t\t'input',\n\t\t'intern',\n\t\t'isinstance',\n\t\t'issubclass',\n\t\t'iter',\n\t\t'len',\n\t\t'locals',\n\t\t'list',\n\t\t'map',\n\t\t'max',\n\t\t'memoryview',\n\t\t'min',\n\t\t'next',\n\t\t'object',\n\t\t'oct',\n\t\t'open',\n\t\t'ord',\n\t\t'pow',\n\t\t'print',\n\t\t'property',\n\t\t'reversed',\n\t\t'range',\n\t\t'raw_input',\n\t\t'reduce',\n\t\t'reload',\n\t\t'repr',\n\t\t'reversed',\n\t\t'round',\n\t\t'set',\n\t\t'setattr',\n\t\t'slice',\n\t\t'sorted',\n\t\t'staticmethod',\n\t\t'str',\n\t\t'sum',\n\t\t'super',\n\t\t'tuple',\n\t\t'type',\n\t\t'unichr',\n\t\t'unicode',\n\t\t'vars',\n\t\t'xrange',\n\t\t'zip',\n\n\t\t'True',\n\t\t'False',\n\n\t\t'__dict__',\n\t\t'__methods__',\n\t\t'__members__',\n\t\t'__class__',\n\t\t'__bases__',\n\t\t'__name__',\n\t\t'__mro__',\n\t\t'__subclasses__',\n\t\t'__init__',\n\t\t'__import__'\n\t],\n\n\tbrackets: [\n\t\t{ open: '{', close: '}', token: 'delimiter.curly' },\n\t\t{ open: '[', close: ']', token: 'delimiter.bracket' },\n\t\t{ open: '(', close: ')', token: 'delimiter.parenthesis' }\n\t],\n\n\ttokenizer: {\n\t\troot: [\n\t\t\t{ include: '@whitespace' },\n\t\t\t{ include: '@numbers' },\n\t\t\t{ include: '@strings' },\n\n\t\t\t[/[,:;]/, 'delimiter'],\n\t\t\t[/[{}\\[\\]()]/, '@brackets'],\n\n\t\t\t[/@[a-zA-Z]\\w*/, 'tag'],\n\t\t\t[/[a-zA-Z]\\w*/, {\n\t\t\t\tcases: {\n\t\t\t\t\t'@keywords': 'keyword',\n\t\t\t\t\t'@default': 'identifier'\n\t\t\t\t}\n\t\t\t}]\n\t\t],\n\n\t\t// Deal with white space, including single and multi-line comments\n\t\twhitespace: [\n\t\t\t[/\\s+/, 'white'],\n\t\t\t[/(^#.*$)/, 'comment'],\n\t\t\t[/('''.*''')|(\"\"\".*\"\"\")/, 'string'],\n\t\t\t[/'''.*$/, 'string', '@endDocString'],\n\t\t\t[/\"\"\".*$/, 'string', '@endDblDocString']\n\t\t],\n\t\tendDocString: [\n\t\t\t[/\\\\'/, 'string'],\n\t\t\t[/.*'''/, 'string', '@popall'],\n\t\t\t[/.*$/, 'string']\n\t\t],\n\t\tendDblDocString: [\n\t\t\t[/\\\\\"/, 'string'],\n\t\t\t[/.*\"\"\"/, 'string', '@popall'],\n\t\t\t[/.*$/, 'string']\n\t\t],\n\n\t\t// Recognize hex, negatives, decimals, imaginaries, longs, and scientific notation\n\t\tnumbers: [\n\t\t\t[/-?0x([abcdef]|[ABCDEF]|\\d)+[lL]?/, 'number.hex'],\n\t\t\t[/-?(\\d*\\.)?\\d+([eE][+\\-]?\\d+)?[jJ]?[lL]?/, 'number']\n\t\t],\n\n\t\t// Recognize strings, including those broken across lines with \\ (but not without)\n\t\tstrings: [\n\t\t\t[/'$/, 'string.escape', '@popall'],\n\t\t\t[/'/, 'string.escape', '@stringBody'],\n\t\t\t[/\"$/, 'string.escape', '@popall'],\n\t\t\t[/\"/, 'string.escape', '@dblStringBody']\n\t\t],\n\t\tstringBody: [\n\t\t\t[/\\\\./, 'string'],\n\t\t\t[/'/, 'string.escape', '@popall'],\n\t\t\t[/.(?=.*')/, 'string'],\n\t\t\t[/.*\\\\$/, 'string'],\n\t\t\t[/.*$/, 'string', '@popall']\n\t\t],\n\t\tdblStringBody: [\n\t\t\t[/\\\\./, 'string'],\n\t\t\t[/\"/, 'string.escape', '@popall'],\n\t\t\t[/.(?=.*\")/, 'string'],\n\t\t\t[/.*\\\\$/, 'string'],\n\t\t\t[/.*$/, 'string', '@popall']\n\t\t]\n\t}\n};\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nconst EMPTY_ELEMENTS = ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr'];\n\nexports.conf = {\n\twordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\$\\^\\&\\*\\(\\)\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\s]+)/g,\n\n\tcomments: {\n\t\tblockComment: ['<!--', '-->']\n\t},\n\n\tbrackets: [\n\t\t['<!--', '-->'],\n\t\t['<', '>'],\n\t\t['{', '}'],\n\t\t['(', ')']\n\t],\n\n\tautoClosingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: '\\'', close: '\\'' }\n\t],\n\n\tsurroundingPairs: [\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: '\\'', close: '\\'' },\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '<', close: '>' },\n\t],\n\n\tonEnterRules: [\n\t\t{\n\t\t\tbeforeText: new RegExp(\"<(?!(?:\" + EMPTY_ELEMENTS.join('|') + \"))([_:\\\\w][_:\\\\w-.\\\\d]*)([^/>]*(?!/)>)[^<]*$\", 'i'),\n\t\t\tafterText: /^<\\/([_:\\w][_:\\w-.\\d]*)\\s*>$/i,\n\t\t\taction: { indentAction: 2 }\n\t\t},\n\t\t{\n\t\t\tbeforeText: new RegExp(\"<(?!(?:\" + EMPTY_ELEMENTS.join('|') + \"))(\\\\w[\\\\w\\\\d]*)([^/>]*(?!/)>)[^<]*$\", 'i'),\n\t\t\taction: { indentAction: 1 }\n\t\t}\n\t],\n};\n\nexports.language = {\n\tdefaultToken: '',\n\ttokenPostfix: '.html',\n\tignoreCase: true,\n\n\t// The main tokenizer for our languages\n\ttokenizer: {\n\t\troot: [\n\t\t\t[/<!DOCTYPE/, 'metatag', '@doctype'],\n\t\t\t[/<!--/, 'comment', '@comment'],\n\t\t\t[/(<)((?:[\\w\\-]+:)?[\\w\\-]+)(\\s*)(\\/>)/, ['delimiter', 'tag', '', 'delimiter']],\n\t\t\t[/(<)(script)/, ['delimiter', { token: 'tag', next: '@script' }]],\n\t\t\t[/(<)(style)/, ['delimiter', { token: 'tag', next: '@style' }]],\n\t\t\t[/(<)((?:[\\w\\-]+:)?[\\w\\-]+)/, ['delimiter', { token: 'tag', next: '@otherTag' }]],\n\t\t\t[/(<\\/)((?:[\\w\\-]+:)?[\\w\\-]+)/, ['delimiter', { token: 'tag', next: '@otherTag' }]],\n\t\t\t[/</, 'delimiter'],\n\t\t\t[/[^<]+/], // text\n\t\t],\n\n\t\tdoctype: [\n\t\t\t[/[^>]+/, 'metatag.content'],\n\t\t\t[/>/, 'metatag', '@pop'],\n\t\t],\n\n\t\tcomment: [\n\t\t\t[/-->/, 'comment', '@pop'],\n\t\t\t[/[^-]+/, 'comment.content'],\n\t\t\t[/./, 'comment.content']\n\t\t],\n\n\t\totherTag: [\n\t\t\t[/\\/?>/, 'delimiter', '@pop'],\n\t\t\t[/\"([^\"]*)\"/, 'attribute.value'],\n\t\t\t[/'([^']*)'/, 'attribute.value'],\n\t\t\t[/[\\w\\-]+/, 'attribute.name'],\n\t\t\t[/=/, 'delimiter'],\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t],\n\n\t\t// -- BEGIN <script> tags handling\n\n\t\t// After <script\n\t\tscript: [\n\t\t\t[/type/, 'attribute.name', '@scriptAfterType'],\n\t\t\t[/\"([^\"]*)\"/, 'attribute.value'],\n\t\t\t[/'([^']*)'/, 'attribute.value'],\n\t\t\t[/[\\w\\-]+/, 'attribute.name'],\n\t\t\t[/=/, 'delimiter'],\n\t\t\t[/>/, { token: 'delimiter', next: '@scriptEmbedded', nextEmbedded: 'text/javascript' }],\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[/(<\\/)(script\\s*)(>)/, ['delimiter', 'tag', { token: 'delimiter', next: '@pop' }]]\n\t\t],\n\n\t\t// After <script ... type\n\t\tscriptAfterType: [\n\t\t\t[/=/, 'delimiter', '@scriptAfterTypeEquals'],\n\t\t\t[/>/, { token: 'delimiter', next: '@scriptEmbedded', nextEmbedded: 'text/javascript' }], // cover invalid e.g. <script type>\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[/<\\/script\\s*>/, { token: '@rematch', next: '@pop' }]\n\t\t],\n\n\t\t// After <script ... type =\n\t\tscriptAfterTypeEquals: [\n\t\t\t[/('|\")module('|\")/, { token: 'string', next: '@scriptTypeModule.$2'}],\n\t\t\t[/\"([^\"]*)\"/, { token: 'attribute.value', switchTo: '@scriptWithCustomType.$1' }],\n\t\t\t[/'([^']*)'/, { token: 'attribute.value', switchTo: '@scriptWithCustomType.$1' }],\n\t\t\t[/>/, { token: 'delimiter', next: '@scriptEmbedded', nextEmbedded: 'text/javascript' }], // cover invalid e.g. <script type=>\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[/<\\/script\\s*>/, { token: '@rematch', next: '@pop' }]\n\t\t],\n\n\t\t// After <script ... type = $S2\n\t\tscriptWithCustomType: [\n\t\t\t[/>/, { token: 'delimiter', next: '@scriptEmbedded.$S2', nextEmbedded: '$S2' }],\n\t\t\t[/\"([^\"]*)\"/, 'attribute.value'],\n\t\t\t[/'([^']*)'/, 'attribute.value'],\n\t\t\t[/[\\w\\-]+/, 'attribute.name'],\n\t\t\t[/=/, 'delimiter'],\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[/<\\/script\\s*>/, { token: '@rematch', next: '@pop' }]\n\t\t],\n\n\t\tscriptEmbedded: [\n\t\t\t[/<\\/script/, { token: '@rematch', next: '@pop', nextEmbedded: '@pop' }],\n\t\t\t[/[^<]+/, '']\n\t\t],\n\n\t\tscriptTypeModule: [\n\t\t\t[/>/, { token: 'delimiter', nextEmbedded: 'text/javascript' }],\n\t\t\t[/<\\/script/, { token: '@rematch', next: '@pop', nextEmbedded: '@pop' }],\n\t\t],\n\n\t\t// After <style\n\t\tstyle: [\n\t\t\t[/type/, 'attribute.name', '@styleAfterType'],\n\t\t\t[/lang/, 'attribute.name', '@styleAfterType'],\n\t\t\t[/\"([^\"]*)\"/, 'attribute.value'],\n\t\t\t[/'([^']*)'/, 'attribute.value'],\n\t\t\t[/[\\w\\-]+/, 'attribute.name'],\n\t\t\t[/=/, 'delimiter'],\n\t\t\t[/>/, { token: 'delimiter', next: '@styleEmbedded', nextEmbedded: 'text/css' }],\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[/(<\\/)(style\\s*)(>)/, ['delimiter', 'tag', { token: 'delimiter', next: '@pop' }]]\n\t\t],\n\n\t\t// After <style ... type\n\t\tstyleAfterType: [\n\t\t\t[/=/, 'delimiter', '@styleAfterTypeEquals'],\n\t\t\t[/>/, { token: 'delimiter', next: '@styleEmbedded', nextEmbedded: 'text/css' }], // cover invalid e.g. <style type>\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[/<\\/style\\s*>/, { token: '@rematch', next: '@pop' }]\n\t\t],\n\n\t\t// After <style ... type =\n\t\tstyleAfterTypeEquals: [\n\t\t\t[/\"([^\"]*)\"/, { token: 'attribute.value', switchTo: '@styleWithCustomType.$1' }],\n\t\t\t[/'([^']*)'/, { token: 'attribute.value', switchTo: '@styleWithCustomType.$1' }],\n\t\t\t[/>/, { token: 'delimiter', next: '@styleEmbedded', nextEmbedded: 'text/css' }], // cover invalid e.g. <style type=>\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[/<\\/style\\s*>/, { token: '@rematch', next: '@pop' }]\n\t\t],\n\n\t\t// After <style ... type = $S2\n\t\tstyleWithCustomType: [\n\t\t\t[/>/, { token: 'delimiter', next: '@styleEmbedded.$S2', nextEmbedded: '$S2' }],\n\t\t\t[/\"([^\"]*)\"/, 'attribute.value'],\n\t\t\t[/'([^']*)'/, 'attribute.value'],\n\t\t\t[/[\\w\\-]+/, 'attribute.name'],\n\t\t\t[/=/, 'delimiter'],\n\t\t\t[/[ \\t\\r\\n]+/], // whitespace\n\t\t\t[/<\\/style\\s*>/, { token: '@rematch', next: '@pop' }]\n\t\t],\n\n\t\tstyleEmbedded: [\n\t\t\t[/<\\/style/, { token: '@rematch', next: '@pop', nextEmbedded: '@pop' }],\n\t\t\t[/[^<]+/, '']\n\t\t]\n\t}\n};", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexports.conf = {\n\twordPattern: /(#?-?\\d*\\.\\d\\w*%?)|([@#!.:]?[\\w-?]+%?)|[@#!.]/g,\n\tcomments: {\n\t\tblockComment: ['/*', '*/'],\n\t\tlineComment: '//'\n\t},\n\tbrackets: [\n\t\t['{', '}'],\n\t\t['[', ']'],\n\t\t['(', ')'],\n\t],\n\tautoClosingPairs: [\n\t\t{ open: '{', close: '}', notIn: ['string', 'comment'] },\n\t\t{ open: '[', close: ']', notIn: ['string', 'comment'] },\n\t\t{ open: '(', close: ')', notIn: ['string', 'comment'] },\n\t\t{ open: '\"', close: '\"', notIn: ['string', 'comment'] },\n\t\t{ open: '\\'', close: '\\'', notIn: ['string', 'comment'] },\n\t],\n\tsurroundingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: '\\'', close: '\\'' },\n\t]\n};\n\nexports.language = {\n\tdefaultToken: '',\n\ttokenPostfix: '.less',\n\n\tidentifier: '-?-?([a-zA-Z]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))([\\\\w\\\\-]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))*',\n\tidentifierPlus: '-?-?([a-zA-Z:.]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))([\\\\w\\\\-:.]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))*',\n\n\tbrackets: [\n\t\t{ open: '{', close: '}', token: 'delimiter.curly' },\n\t\t{ open: '[', close: ']', token: 'delimiter.bracket' },\n\t\t{ open: '(', close: ')', token: 'delimiter.parenthesis' },\n\t\t{ open: '<', close: '>', token: 'delimiter.angle' }\n\t],\n\n\ttokenizer: {\n\t\troot: [\n\t\t\t{ include: '@nestedJSBegin' },\n\n\t\t\t['[ \\\\t\\\\r\\\\n]+', ''],\n\n\t\t\t{ include: '@comments' },\n\t\t\t{ include: '@keyword' },\n\t\t\t{ include: '@strings' },\n\t\t\t{ include: '@numbers' },\n\t\t\t['[*_]?[a-zA-Z\\\\-\\\\s]+(?=:.*(;|(\\\\\\\\$)))', 'attribute.name', '@attribute'],\n\n\t\t\t['url(\\\\-prefix)?\\\\(', { token: 'tag', next: '@urldeclaration' }],\n\n\t\t\t['[{}()\\\\[\\\\]]', '@brackets'],\n\t\t\t['[,:;]', 'delimiter'],\n\n\t\t\t['#@identifierPlus', 'tag.id'],\n\t\t\t['&', 'tag'],\n\n\t\t\t['\\\\.@identifierPlus(?=\\\\()', 'tag.class', '@attribute'],\n\t\t\t['\\\\.@identifierPlus', 'tag.class'],\n\n\t\t\t['@identifierPlus', 'tag'],\n\t\t\t{ include: '@operators' },\n\n\t\t\t['@(@identifier(?=[:,\\\\)]))', 'variable', '@attribute'],\n\t\t\t['@(@identifier)', 'variable'],\n\t\t\t['@', 'key', '@atRules']\n\t\t],\n\n\t\tnestedJSBegin: [\n\t\t\t['``', 'delimiter.backtick'],\n\t\t\t['`', { token: 'delimiter.backtick', next: '@nestedJSEnd', nextEmbedded: 'text/javascript' }],\n\t\t],\n\n\t\tnestedJSEnd: [\n\t\t\t['`', { token: 'delimiter.backtick', next: '@pop', nextEmbedded: '@pop' }],\n\t\t],\n\n\t\toperators: [\n\t\t\t['[<>=\\\\+\\\\-\\\\*\\\\/\\\\^\\\\|\\\\~]', 'operator']\n\t\t],\n\n\t\tkeyword: [\n\t\t\t['(@[\\\\s]*import|![\\\\s]*important|true|false|when|iscolor|isnumber|isstring|iskeyword|isurl|ispixel|ispercentage|isem|hue|saturation|lightness|alpha|lighten|darken|saturate|desaturate|fadein|fadeout|fade|spin|mix|round|ceil|floor|percentage)\\\\b', 'keyword']\n\t\t],\n\n\t\turldeclaration: [\n\t\t\t{ include: '@strings' },\n\t\t\t['[^)\\r\\n]+', 'string'],\n\t\t\t['\\\\)', { token: 'tag', next: '@pop' }],\n\t\t],\n\n\t\tattribute: [\n\t\t\t{ include: '@nestedJSBegin' },\n\t\t\t{ include: '@comments' },\n\t\t\t{ include: '@strings' },\n\t\t\t{ include: '@numbers' },\n\n\t\t\t{ include: '@keyword' },\n\n\t\t\t['[a-zA-Z\\\\-]+(?=\\\\()', 'attribute.value', '@attribute'],\n\t\t\t['>', 'operator', '@pop'],\n\t\t\t['@identifier', 'attribute.value'],\n\t\t\t{ include: '@operators' },\n\t\t\t['@(@identifier)', 'variable'],\n\n\t\t\t['[)\\\\}]', '@brackets', '@pop'],\n\t\t\t['[{}()\\\\[\\\\]>]', '@brackets'],\n\n\t\t\t['[;]', 'delimiter', '@pop'],\n\t\t\t['[,=:]', 'delimiter'],\n\n\t\t\t['\\\\s', ''],\n\t\t\t['.', 'attribute.value']\n\t\t],\n\n\t\tcomments: [\n\t\t\t['\\\\/\\\\*', 'comment', '@comment'],\n\t\t\t['\\\\/\\\\/+.*', 'comment'],\n\t\t],\n\n\t\tcomment: [\n\t\t\t['\\\\*\\\\/', 'comment', '@pop'],\n\t\t\t['.', 'comment'],\n\t\t],\n\n\t\tnumbers: [\n\t\t\t['(\\\\d*\\\\.)?\\\\d+([eE][\\\\-+]?\\\\d+)?', { token: 'attribute.value.number', next: '@units' }],\n\t\t\t['#[0-9a-fA-F_]+(?!\\\\w)', 'attribute.value.hex']\n\t\t],\n\n\t\tunits: [\n\t\t\t['(em|ex|ch|rem|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?', 'attribute.value.unit', '@pop']\n\t\t],\n\n\t\tstrings: [\n\t\t\t['~?\"', { token: 'string.delimiter', next: '@stringsEndDoubleQuote' }],\n\t\t\t['~?\\'', { token: 'string.delimiter', next: '@stringsEndQuote' }]\n\t\t],\n\n\t\tstringsEndDoubleQuote: [\n\t\t\t['\\\\\\\\\"', 'string'],\n\t\t\t['\"', { token: 'string.delimiter', next: '@popall' }],\n\t\t\t['.', 'string']\n\t\t],\n\n\t\tstringsEndQuote: [\n\t\t\t['\\\\\\\\\\'', 'string'],\n\t\t\t['\\'', { token: 'string.delimiter', next: '@popall' }],\n\t\t\t['.', 'string']\n\t\t],\n\n\t\tatRules: [\n\t\t\t{ include: '@comments' },\n\t\t\t{ include: '@strings' },\n\t\t\t['[()]', 'delimiter'],\n\t\t\t['[\\\\{;]', 'delimiter', '@pop'],\n\t\t\t['.', 'key']\n\t\t]\n\t}\n};\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nexports.conf = {\n\tcomments: {\n\t\tblockComment: ['<!--', '-->'],\n\t},\n\tbrackets: [\n\t\t['<', '>']\n\t],\n\tautoClosingPairs: [\n\t\t{ open: '<', close: '>' },\n\t\t{ open: '\\'', close: '\\'' },\n\t\t{ open: '\"', close: '\"' },\n\t],\n\tsurroundingPairs: [\n\t\t{ open: '<', close: '>' },\n\t\t{ open: '\\'', close: '\\'' },\n\t\t{ open: '\"', close: '\"' },\n\t]\n};\n\nexports.language = {\n\tdefaultToken: '',\n\ttokenPostfix: '.xml',\n\n\tignoreCase: true,\n\n\t// Useful regular expressions\n\tqualifiedName: /(?:[\\w\\.\\-]+:)?[\\w\\.\\-]+/,\n\n\ttokenizer: {\n\t\troot: [\n\t\t\t[/[^<&]+/, ''],\n\n\t\t\t{ include: '@whitespace' },\n\n\t\t\t// Standard opening tag\n\t\t\t[/(<)(@qualifiedName)/, [\n\t\t\t\t{ token: 'delimiter' },\n\t\t\t\t{ token: 'tag', next: '@tag' }]],\n\n\t\t\t// Standard closing tag\n\t\t\t[/(<\\/)(@qualifiedName)(\\s*)(>)/, [\n\t\t\t\t{ token: 'delimiter' },\n\t\t\t\t{ token: 'tag' },\n\t\t\t\t'',\n\t\t\t\t{ token: 'delimiter' }]],\n\n\t\t\t// Meta tags - instruction\n\t\t\t[/(<\\?)(@qualifiedName)/, [\n\t\t\t\t{ token: 'delimiter' },\n\t\t\t\t{ token: 'metatag', next: '@tag' }]],\n\n\t\t\t// Meta tags - declaration\n\t\t\t[/(<\\!)(@qualifiedName)/, [\n\t\t\t\t{ token: 'delimiter' },\n\t\t\t\t{ token: 'metatag', next: '@tag' }]],\n\n\t\t\t// CDATA\n\t\t\t[/<\\!\\[CDATA\\[/, { token: 'delimiter.cdata', next: '@cdata' }],\n\n\t\t\t[/&\\w+;/, 'string.escape'],\n\t\t],\n\n\t\tcdata: [\n\t\t\t[/[^\\]]+/, ''],\n\t\t\t[/\\]\\]>/, { token: 'delimiter.cdata', next: '@pop' }],\n\t\t\t[/\\]/, '']\n\t\t],\n\n\t\ttag: [\n\t\t\t[/[ \\t\\r\\n]+/, ''],\n\t\t\t[/(@qualifiedName)(\\s*=\\s*)(\"[^\"]*\"|'[^']*')/, ['attribute.name', '', 'attribute.value']],\n\t\t\t[/(@qualifiedName)(\\s*=\\s*)(\"[^\">?\\/]*|'[^'>?\\/]*)(?=[\\?\\/]\\>)/, ['attribute.name', '', 'attribute.value']],\n\t\t\t[/(@qualifiedName)(\\s*=\\s*)(\"[^\">]*|'[^'>]*)/, ['attribute.name', '', 'attribute.value']],\n\t\t\t[/@qualifiedName/, 'attribute.name'],\n\t\t\t[/\\?>/, { token: 'delimiter', next: '@pop' }],\n\t\t\t[/(\\/)(>)/, [\n\t\t\t\t{ token: 'tag' },\n\t\t\t\t{ token: 'delimiter', next: '@pop' }]],\n\t\t\t[/>/, { token: 'delimiter', next: '@pop' }],\n\t\t],\n\n\t\twhitespace: [\n\t\t\t[/[ \\t\\r\\n]+/, ''],\n\t\t\t[/<!--/, { token: 'comment', next: '@comment' }]\n\t\t],\n\n\t\tcomment: [\n\t\t\t[/[^<\\-]+/, 'comment.content'],\n\t\t\t[/-->/, { token: 'comment', next: '@pop' }],\n\t\t\t[/<!--/, 'comment.content.invalid'],\n\t\t\t[/[<\\-]/, 'comment.content']\n\t\t],\n\t},\n};\n", "/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nexports.conf = {\n\t// the default separators except `@$`\n\twordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\n\tcomments: {\n\t\tlineComment: '//',\n\t\tblockComment: ['/*', '*/'],\n\t},\n\tbrackets: [\n\t\t['{', '}'],\n\t\t['[', ']'],\n\t\t['(', ')'],\n\t],\n\tautoClosingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: '\\'', close: '\\'' },\n\t],\n\tsurroundingPairs: [\n\t\t{ open: '{', close: '}' },\n\t\t{ open: '[', close: ']' },\n\t\t{ open: '(', close: ')' },\n\t\t{ open: '\"', close: '\"' },\n\t\t{ open: '\\'', close: '\\'' },\n\t\t{ open: '<', close: '>' },\n\t]\n};\n\nexports.language = {\n\tdefaultToken: '',\n\ttokenPostfix: '.java',\n\n\tkeywords: [\n\t\t'abstract', 'continue', 'for', 'new', 'switch', 'assert', 'default',\n\t\t'goto', 'package', 'synchronized', 'boolean', 'do', 'if', 'private',\n\t\t'this', 'break', 'double', 'implements', 'protected', 'throw', 'byte',\n\t\t'else', 'import', 'public', 'throws', 'case', 'enum', 'instanceof', 'return',\n\t\t'transient', 'catch', 'extends', 'int', 'short', 'try', 'char', 'final',\n\t\t'interface', 'static', 'void', 'class', 'finally', 'long', 'strictfp',\n\t\t'volatile', 'const', 'float', 'native', 'super', 'while', 'true', 'false'\n\t],\n\n\toperators: [\n\t\t'=', '>', '<', '!', '~', '?', ':',\n\t\t'==', '<=', '>=', '!=', '&&', '||', '++', '--',\n\t\t'+', '-', '*', '/', '&', '|', '^', '%', '<<',\n\t\t'>>', '>>>', '+=', '-=', '*=', '/=', '&=', '|=',\n\t\t'^=', '%=', '<<=', '>>=', '>>>='\n\t],\n\n\t// we include these common regular expressions\n\tsymbols: /[=><!~?:&|+\\-*\\/\\^%]+/,\n\tescapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\tdigits: /\\d+(_+\\d+)*/,\n\toctaldigits: /[0-7]+(_+[0-7]+)*/,\n\tbinarydigits: /[0-1]+(_+[0-1]+)*/,\n\thexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,\n\n\t// The main tokenizer for our languages\n\ttokenizer: {\n\t\troot: [\n\t\t\t// identifiers and keywords\n\t\t\t[/[a-zA-Z_$][\\w$]*/, {\n\t\t\t\tcases: {\n\t\t\t\t\t'@keywords': { token: 'keyword.$0' },\n\t\t\t\t\t'@default': 'identifier'\n\t\t\t\t}\n\t\t\t}],\n\n\t\t\t// whitespace\n\t\t\t{ include: '@whitespace' },\n\n\t\t\t// delimiters and operators\n\t\t\t[/[{}()\\[\\]]/, '@brackets'],\n\t\t\t[/[<>](?!@symbols)/, '@brackets'],\n\t\t\t[/@symbols/, {\n\t\t\t\tcases: {\n\t\t\t\t\t'@operators': 'delimiter',\n\t\t\t\t\t'@default': ''\n\t\t\t\t}\n\t\t\t}],\n\n\t\t\t// @ annotations.\n\t\t\t[/@\\s*[a-zA-Z_\\$][\\w\\$]*/, 'annotation'],\n\n\t\t\t// numbers\n\t\t\t[/(@digits)[eE]([\\-+]?(@digits))?[fFdD]?/, 'number.float'],\n\t\t\t[/(@digits)\\.(@digits)([eE][\\-+]?(@digits))?[fFdD]?/, 'number.float'],\n\t\t\t[/0[xX](@hexdigits)[Ll]?/, 'number.hex'],\n\t\t\t[/0(@octaldigits)[Ll]?/, 'number.octal'],\n\t\t\t[/0[bB](@binarydigits)[Ll]?/, 'number.binary'],\n\t\t\t[/(@digits)[fFdD]/, 'number.float'],\n\t\t\t[/(@digits)[lL]?/, 'number'],\n\n\t\t\t// delimiter: after number because of .\\d floats\n\t\t\t[/[;,.]/, 'delimiter'],\n\n\t\t\t// strings\n\t\t\t[/\"([^\"\\\\]|\\\\.)*$/, 'string.invalid'], // non-teminated string\n\t\t\t[/\"/, 'string', '@string'],\n\n\t\t\t// characters\n\t\t\t[/'[^\\\\']'/, 'string'],\n\t\t\t[/(')(@escapes)(')/, ['string', 'string.escape', 'string']],\n\t\t\t[/'/, 'string.invalid']\n\t\t],\n\n\t\twhitespace: [\n\t\t\t[/[ \\t\\r\\n]+/, ''],\n\t\t\t[/\\/\\*\\*(?!\\/)/, 'comment.doc', '@javadoc'],\n\t\t\t[/\\/\\*/, 'comment', '@comment'],\n\t\t\t[/\\/\\/.*$/, 'comment'],\n\t\t],\n\n\t\tcomment: [\n\t\t\t[/[^\\/*]+/, 'comment'],\n\t\t\t// [/\\/\\*/, 'comment', '@push' ], // nested comment not allowed :-(\n\t\t\t// [/\\/\\*/, 'comment.invalid' ], // this breaks block comments in the shape of /* //*/\n\t\t\t[/\\*\\//, 'comment', '@pop'],\n\t\t\t[/[\\/*]/, 'comment']\n\t\t],\n\t\t//Identical copy of comment above, except for the addition of .doc\n\t\tjavadoc: [\n\t\t\t[/[^\\/*]+/, 'comment.doc'],\n\t\t\t// [/\\/\\*/, 'comment.doc', '@push' ], // nested comment not allowed :-(\n\t\t\t[/\\/\\*/, 'comment.doc.invalid'],\n\t\t\t[/\\*\\//, 'comment.doc', '@pop'],\n\t\t\t[/[\\/*]/, 'comment.doc']\n\t\t],\n\n\t\tstring: [\n\t\t\t[/[^\\\\\"]+/, 'string'],\n\t\t\t[/@escapes/, 'string.escape'],\n\t\t\t[/\\\\./, 'string.escape.invalid'],\n\t\t\t[/\"/, 'string', '@pop']\n\t\t],\n\t},\n};\n", "const html = require('../html')\nhtml.language.tokenPostfix = '.svelte'\nexport const conf = html.conf\nexport let language = html.language\n\nexport const id = 'svelte'\nexport const extensions = ['.svelte']\nexport const aliases = ['Svelte', 'svelte']\nexport const mimetypes = ['application/svelte']\n\n\nimport { setupMode } from './client'\nexport def setup monaco, lang\n\tsetupMode('svelte',monaco)", "var html = require('./html');\nmodule.exports = html;\n", "const conf = exports.conf = {\n\twordPattern: /(#?-?\\d*\\.\\d\\w*%?)|([@$#!.:]?[\\w-?]+%?)|[@#!.]/g,\n\tcomments: {\n\t\tblockComment: ['/*','*/'],\n\t\tlineComment: '//'\n\t},\n\tbrackets: [\n\t\t['{','}'],\n\t\t['[',']'],\n\t\t['(',')']\n\t],\n\tautoClosingPairs: [\n\t\t{open: '{',close: '}',notIn: ['string','comment']},\n\t\t{open: '[',close: ']',notIn: ['string','comment']},\n\t\t{open: '(',close: ')',notIn: ['string','comment']},\n\t\t{open: '\"',close: '\"',notIn: ['string','comment']},\n\t\t{open: '\\'',close: '\\'',notIn: ['string','comment']}\n\t],\n\tsurroundingPairs: [\n\t\t{open: '{',close: '}'},\n\t\t{open: '[',close: ']'},\n\t\t{open: '(',close: ')'},\n\t\t{open: '\"',close: '\"'},\n\t\t{open: '\\'',close: '\\''}\n\t],\n\tfolding: {\n\t\tmarkers: {\n\t\t\tstart: new RegExp(\"^\\\\s*\\\\/\\\\*\\\\s*#region\\\\b\\\\s*(.*?)\\\\s*\\\\*\\\\/\"),\n\t\t\tend: new RegExp(\"^\\\\s*\\\\/\\\\*\\\\s*#endregion\\\\b.*\\\\*\\\\/\")\n\t\t}\n\t}\n};\n\nconst language = exports.language = {\n\tdefaultToken: '',\n\ttokenPostfix: '.scss',\n\t\n\tws: '[ \\t\\n\\r\\f]*', // whitespaces (referenced in several rules)\n\tidentifier: '-?-?([a-zA-Z]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))([\\\\w\\\\-]|(\\\\\\\\(([0-9a-fA-F]{1,6}\\\\s?)|[^[0-9a-fA-F])))*',\n\t\n\tbrackets: [\n\t\t{open: '{',close: '}',token: 'delimiter.curly'},\n\t\t{open: '[',close: ']',token: 'delimiter.bracket'},\n\t\t{open: '(',close: ')',token: 'delimiter.parenthesis'},\n\t\t{open: '<',close: '>',token: 'delimiter.angle'}\n\t],\n\t\n\ttokenizer: {\n\t\troot: [\n\t\t\t{include: '@selector'}\n\t\t],\n\t\t\n\t\tselector: [\n\t\t\t{include: '@comments'},\n\t\t\t{include: '@import'},\n\t\t\t{include: '@variabledeclaration'},\n\t\t\t{include: '@warndebug'}, // sass: log statements\n\t\t\t['[@](include)',{token: 'keyword',next: '@includedeclaration'}], // sass: include statement\n\t\t\t['[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)',{token: 'keyword',next: '@keyframedeclaration'}],\n\t\t\t['[@](page|content|font-face|-moz-document)',{token: 'keyword'}], // sass: placeholder for includes\n\t\t\t['[@](charset|namespace)',{token: 'keyword',next: '@declarationbody'}],\n\t\t\t['[@](function)',{token: 'keyword',next: '@functiondeclaration'}],\n\t\t\t['[@](mixin)',{token: 'keyword',next: '@mixindeclaration'}],\n\t\t\t['url(\\\\-prefix)?\\\\(',{token: 'meta',next: '@urldeclaration'}],\n\t\t\t{include: '@controlstatement'}, // sass control statements\n\t\t\t{include: '@selectorname'},\n\t\t\t['[&\\\\*]','tag'], // selector symbols\n\t\t\t['[>\\\\+,]','delimiter'], // selector operators\n\t\t\t['\\\\[',{token: 'delimiter.bracket',next: '@selectorattribute'}],\n\t\t\t['{',{token: 'delimiter.curly',next: '@selectorbody'}]\n\t\t],\n\t\t\n\t\tselectorbody: [\n\t\t\t['[*_]?@identifier@ws:(?=(\\\\s|\\\\d|[^{;}]*[;}]))','attribute.name','@rulevalue'], // rule definition: to distinguish from a nested selector check for whitespace, number or a semicolon\n\t\t\t{include: '@selector'}, // sass: nested selectors\n\t\t\t['[@](extend)',{token: 'keyword',next: '@extendbody'}], // sass: extend other selectors\n\t\t\t['[@](return)',{token: 'keyword',next: '@declarationbody'}],\n\t\t\t['}',{token: 'delimiter.curly',next: '@pop'}]\n\t\t],\n\t\t\n\t\tselectorname: [\n\t\t\t['#{',{token: 'meta',next: '@variableinterpolation'}], // sass: interpolation\n\t\t\t['(\\\\.|#(?=[^{])|%|(@identifier)|:)+','tag'] // selector (.foo, div, ...)\n\t\t],\n\t\t\n\t\tselectorattribute: [\n\t\t\t{include: '@term'},\n\t\t\t[']',{token: 'delimiter.bracket',next: '@pop'}]\n\t\t],\n\t\t\n\t\tterm: [\n\t\t\t{include: '@comments'},\n\t\t\t['url(\\\\-prefix)?\\\\(',{token: 'meta',next: '@urldeclaration'}],\n\t\t\t{include: '@functioninvocation'},\n\t\t\t{include: '@numbers'},\n\t\t\t{include: '@strings'},\n\t\t\t{include: '@variablereference'},\n\t\t\t['(and\\\\b|or\\\\b|not\\\\b)','operator'],\n\t\t\t{include: '@name'},\n\t\t\t['([<>=\\\\+\\\\-\\\\*\\\\/\\\\^\\\\|\\\\~,])','operator'],\n\t\t\t[',','delimiter'],\n\t\t\t['!default','literal'],\n\t\t\t['\\\\(',{token: 'delimiter.parenthesis',next: '@parenthizedterm'}]\n\t\t],\n\t\t\n\t\trulevalue: [\n\t\t\t{include: '@term'},\n\t\t\t['!important','literal'],\n\t\t\t[';','delimiter','@pop'],\n\t\t\t['{',{token: 'delimiter.curly',switchTo: '@nestedproperty'}], // sass: nested properties\n\t\t\t['(?=})',{token: '',next: '@pop'}] // missing semicolon\n\t\t],\n\t\t\n\t\tnestedproperty: [\n\t\t\t['[*_]?@identifier@ws:','attribute.name','@rulevalue'],\n\t\t\t{include: '@comments'},\n\t\t\t['}',{token: 'delimiter.curly',next: '@pop'}]\n\t\t],\n\t\t\n\t\twarndebug: [\n\t\t\t['[@](warn|debug)',{token: 'keyword',next: '@declarationbody'}]\n\t\t],\n\t\t\n\t\timport: [\n\t\t\t['[@](import)',{token: 'keyword',next: '@declarationbody'}]\n\t\t],\n\t\t\n\t\tvariabledeclaration: [ // sass variables\n\t\t\t['\\\\$@identifier@ws:','variable.decl','@declarationbody']\n\t\t],\n\t\t\n\t\turldeclaration: [\n\t\t\t{include: '@strings'},\n\t\t\t['[^)\\r\\n]+','string'],\n\t\t\t['\\\\)',{token: 'meta',next: '@pop'}]\n\t\t],\n\t\t\n\t\tparenthizedterm: [\n\t\t\t{include: '@term'},\n\t\t\t['\\\\)',{token: 'delimiter.parenthesis',next: '@pop'}]\n\t\t],\n\t\t\n\t\tdeclarationbody: [\n\t\t\t{include: '@term'},\n\t\t\t[';','delimiter','@pop'],\n\t\t\t['(?=})',{token: '',next: '@pop'}] // missing semicolon\n\t\t],\n\t\t\n\t\textendbody: [\n\t\t\t{include: '@selectorname'},\n\t\t\t['!optional','literal'],\n\t\t\t[';','delimiter','@pop'],\n\t\t\t['(?=})',{token: '',next: '@pop'}] // missing semicolon\n\t\t],\n\t\t\n\t\tvariablereference: [ // sass variable reference\n\t\t\t['\\\\$@identifier','variable.ref'],\n\t\t\t['\\\\.\\\\.\\\\.','operator'], // var args in reference\n\t\t\t['#{',{token: 'meta',next: '@variableinterpolation'}] // sass var resolve\n\t\t],\n\t\t\n\t\tvariableinterpolation: [\n\t\t\t{include: '@variablereference'},\n\t\t\t['}',{token: 'meta',next: '@pop'}]\n\t\t],\n\t\t\n\t\tcomments: [\n\t\t\t['\\\\/\\\\*','comment','@comment'],\n\t\t\t['\\\\/\\\\/+.*','comment']\n\t\t],\n\t\t\n\t\tcomment: [\n\t\t\t['\\\\*\\\\/','comment','@pop'],\n\t\t\t['.','comment']\n\t\t],\n\t\t\n\t\tname: [\n\t\t\t['@identifier','attribute.value']\n\t\t],\n\t\t\n\t\tnumbers: [\n\t\t\t['(\\\\d*\\\\.)?\\\\d+([eE][\\\\-+]?\\\\d+)?',{token: 'number',next: '@units'}],\n\t\t\t['#[0-9a-fA-F_]+(?!\\\\w)','number.hex']\n\t\t],\n\t\t\n\t\tunits: [\n\t\t\t['(em|ex|ch|rem|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?','number','@pop']\n\t\t],\n\t\t\n\t\tfunctiondeclaration: [\n\t\t\t['@identifier@ws\\\\(',{token: 'meta',next: '@parameterdeclaration'}],\n\t\t\t['{',{token: 'delimiter.curly',switchTo: '@functionbody'}]\n\t\t],\n\t\t\n\t\tmixindeclaration: [\n\t\t\t// mixin with parameters\n\t\t\t['@identifier@ws\\\\(',{token: 'meta',next: '@parameterdeclaration'}],\n\t\t\t// mixin without parameters\n\t\t\t['@identifier','meta'],\n\t\t\t['{',{token: 'delimiter.curly',switchTo: '@selectorbody'}]\n\t\t],\n\t\t\n\t\tparameterdeclaration: [\n\t\t\t['\\\\$@identifier@ws:','variable.decl'],\n\t\t\t['\\\\.\\\\.\\\\.','operator'], // var args in declaration\n\t\t\t[',','delimiter'],\n\t\t\t{include: '@term'},\n\t\t\t['\\\\)',{token: 'meta',next: '@pop'}]\n\t\t],\n\t\t\n\t\tincludedeclaration: [\n\t\t\t{include: '@functioninvocation'},\n\t\t\t['@identifier','meta'],\n\t\t\t[';','delimiter','@pop'],\n\t\t\t['(?=})',{token: '',next: '@pop'}], // missing semicolon\n\t\t\t['{',{token: 'delimiter.curly',switchTo: '@selectorbody'}]\n\t\t],\n\t\t\n\t\tkeyframedeclaration: [\n\t\t\t['@identifier','meta'],\n\t\t\t['{',{token: 'delimiter.curly',switchTo: '@keyframebody'}]\n\t\t],\n\t\t\n\t\tkeyframebody: [\n\t\t\t{include: '@term'},\n\t\t\t['{',{token: 'delimiter.curly',next: '@selectorbody'}],\n\t\t\t['}',{token: 'delimiter.curly',next: '@pop'}]\n\t\t],\n\t\t\n\t\tcontrolstatement: [\n\t\t\t['[@](if|else|for|while|each|media)',{token: 'keyword.flow',next: '@controlstatementdeclaration'}]\n\t\t],\n\t\t\n\t\tcontrolstatementdeclaration: [\n\t\t\t['(in|from|through|if|to)\\\\b',{token: 'keyword.flow'}],\n\t\t\t{include: '@term'},\n\t\t\t['{',{token: 'delimiter.curly',switchTo: '@selectorbody'}]\n\t\t],\n\t\t\n\t\tfunctionbody: [\n\t\t\t['[@](return)',{token: 'keyword'}],\n\t\t\t{include: '@variabledeclaration'},\n\t\t\t{include: '@term'},\n\t\t\t{include: '@controlstatement'},\n\t\t\t[';','delimiter'],\n\t\t\t['}',{token: 'delimiter.curly',next: '@pop'}]\n\t\t],\n\t\t\n\t\tfunctioninvocation: [\n\t\t\t['@identifier\\\\(',{token: 'meta',next: '@functionarguments'}]\n\t\t],\n\t\t\n\t\tfunctionarguments: [\n\t\t\t['\\\\$@identifier@ws:','attribute.name'],\n\t\t\t['[,]','delimiter'],\n\t\t\t{include: '@term'},\n\t\t\t['\\\\)',{token: 'meta',next: '@pop'}]\n\t\t],\n\t\t\n\t\tstrings: [\n\t\t\t['~?\"',{token: 'string.delimiter',next: '@stringenddoublequote'}],\n\t\t\t['~?\\'',{token: 'string.delimiter',next: '@stringendquote'}]\n\t\t],\n\t\t\n\t\tstringenddoublequote: [\n\t\t\t['\\\\\\\\.','string'],\n\t\t\t['\"',{token: 'string.delimiter',next: '@pop'}],\n\t\t\t['.','string']\n\t\t],\n\t\t\n\t\tstringendquote: [\n\t\t\t['\\\\\\\\.','string'],\n\t\t\t['\\'',{token: 'string.delimiter',next: '@pop'}],\n\t\t\t['.','string']\n\t\t]\n\t}\n};\n", "var language = exports.language = {\n\ttokenPostfix: '.js',\n\t\n\tkeywords: [\n\t\t'break','case','catch','class','continue','const',\n\t\t'constructor','debugger','default','delete','do','else',\n\t\t'export','extends','false','finally','for','from','function',\n\t\t'get','if','import','in','instanceof','let','new','null',\n\t\t'return','set','super','switch','symbol','this','throw','true',\n\t\t'try','typeof','undefined','var','void','while','with','yield',\n\t\t'async','await','of'\n\t],\n\t\n\tbuiltins: [\n\t\t'define','require','window','document','undefined'\n\t],\n\t\n\toperators: [\n\t\t'=','>','<','!','~','?',':',\n\t\t'==','<=','>=','!=','&&','||','++','--',\n\t\t'+','-','*','/','&','|','^','%','<<',\n\t\t'>>','>>>','+=','-=','*=','/=','&=','|=',\n\t\t'^=','%=','<<=','>>=','>>>='\n\t],\n\t\n\t// define our own brackets as '<' and '>' do not match in javascript\n\tbrackets: [\n\t\t{open: '(',close: ')',token: 'bracket.parenthesis'},\n\t\t{open: '{',close: '}',token: 'bracket.curly'},\n\t\t{open: '[',close: ']',token: 'bracket.square'}\n\t],\n\t\n\t// common regular expressions\n\tsymbols: /[=><!~?:&|+\\-*\\/\\^%]+/,\n\tescapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\texponent: /[eE][\\-+]?[0-9]+/,\n\t\n\tdigits: /\\d+(_+\\d+)*/,\n\toctaldigits: /[0-7]+(_+[0-7]+)*/,\n\tbinarydigits: /[0-1]+(_+[0-1]+)*/,\n\thexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,\n\t\n\tregexpctl: /[(){}\\[\\]\\$\\^|\\-*+?\\.]/,\n\tregexpesc: /\\\\(?:[bBdDfnrstvwWn0\\\\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,\n\t\n\ttokenizer: {\n\t\troot: [\n\t\t\t// identifiers and keywords\n\t\t\t[/([a-zA-Z_\\$][\\w\\$]*)(\\s*)(:?)/,{\n\t\t\t\tcases: {\n\t\t\t\t\t'$1==import': {token: 'keyword',next: '@import'}, // ['keyword','white','delimiter', '@import'],\n\t\t\t\t\t'$1@keywords': ['keyword','white','delimiter'],\n\t\t\t\t\t'$3': ['key.identifier','white','delimiter'], // followed by :\n\t\t\t\t\t'$1@builtins': ['predefined.identifier','white','delimiter'],\n\t\t\t\t\t'@default': ['identifier','white','delimiter']\n\t\t\t\t}\n\t\t\t}],\n\t\t\t\n\t\t\t// whitespace\n\t\t\t{include: '@whitespace'},\n\t\t\t\n\t\t\t// regular expression: ensure it is terminated before beginning (otherwise it is an opeator)\n\t\t\t[/\\/(?=([^\\\\\\/]|\\\\.)+\\/(?!\\/))/,{token: 'regexp.slash',bracket: '@open',next: '@regexp'}],\n\t\t\t\n\t\t\t[/(<)([\\:\\w\\.]+)/,['start.delimiter.tag',{token: 'tag',next: '@tagContent'}]],\n\t\t\t[/(<)(>)/,['start.delimiter.tag',{token: 'end.delimiter.tag',next: '@tagBody'}]],\n\t\t\t\n\t\t\t// delimiters and operators\n\t\t\t[/[{}()\\[\\]]/,'@brackets'],\n\t\t\t[/[;,.]/,'delimiter'],\n\t\t\t[/@symbols/,{cases: {'@operators': 'operator','@default': ''}}],\n\t\t\t\n\t\t\t// numbers\n\t\t\t[/\\d+\\.\\d*(@exponent)?/,'number.float'],\n\t\t\t[/\\.\\d+(@exponent)?/,'number.float'],\n\t\t\t[/\\d+@exponent/,'number.float'],\n\t\t\t[/0[xX][\\da-fA-F]+/,'number.hex'],\n\t\t\t[/0[0-7]+/,'number.octal'],\n\t\t\t[/\\d+/,'number'],\n\t\t\t\n\t\t\t{include: '@strings'}\n\t\t],\n\t\t\n\t\tstrings: [\n\t\t\t// strings: recover on non-terminated strings\n\t\t\t[/\"([^\"\\\\]|\\\\.)*$/,'string.invalid'], // non-teminated string\n\t\t\t[/'([^'\\\\]|\\\\.)*$/,'string.invalid'], // non-teminated string\n\t\t\t[/\"/,'string','@string.\"'],\n\t\t\t[/'/,'string','@string.\\''],\n\t\t\t[/`/,'string','@string_backtick']\n\t\t],\n\t\t\n\t\trootInBrace: [\n\t\t\t[/\\}/,'delimiter','@pop'],\n\t\t\t{include: '@root'}\n\t\t],\n\t\t\n\t\ttagContent: [\n\t\t\t[/\\/\\s*>/,'end.delimiter.tag','@pop'],\n\t\t\t[/>/,{token: 'end.delimiter.tag',switchTo: '@tagBody'}],\n\t\t\t[/\"([^\"]*)\"/,'attribute.value'],\n\t\t\t[/'([^']*)'/,'attribute.value'],\n\t\t\t[/[\\w\\-]+/,'attribute.name'],\n\t\t\t[/\\=/,'delimiter'],\n\t\t\t[/\\{/,'delimiter','@rootInBrace'],\n\t\t\t{include: '@whitespace'}\n\t\t],\n\t\t\n\t\ttagBody: [\n\t\t\t[/\\{/,'delimiter','@rootInBrace'],\n\t\t\t[/(<\\/)([:\\w\\.]*)(>)/,['start.delimiter.tag','tag',{token: 'end.delimiter.tag',next: '@pop'}]],\n\t\t\t[/(<)([:\\w\\.]+)/,['start.delimiter.tag',{token: 'tag',next: '@tagContent'}]]\n\t\t],\n\t\t\n\t\timport: [\n\t\t\t[/;/,'delimiter','@pop'],\n\t\t\t[/^/,'white','@pop'],\n\t\t\t[/\\b(from|as)\\b/,'keyword'],\n\t\t\t{include: '@whitespace'},\n\t\t\t{include: '@strings'}\n\t\t],\n\t\t\n\t\twhitespace: [\n\t\t\t[/[ \\t\\r\\n]+/,'white'],\n\t\t\t[/\\/\\*/,'comment','@comment'],\n\t\t\t[/\\/\\/.*$/,'comment']\n\t\t],\n\t\t\n\t\tcomment: [\n\t\t\t[/[^\\/*]+/,'comment'],\n\t\t\t// [/\\/\\*/, 'comment', '@push' ], # nested comment not allowed :-(\n\t\t\t[/\\/\\*/,'comment.invalid'],\n\t\t\t[\"\\\\*/\",'comment','@pop'],\n\t\t\t[/[\\/*]/,'comment']\n\t\t],\n\t\t\n\t\tstring: [\n\t\t\t[/[^\\\\\"']+/,'string'],\n\t\t\t[/@escapes/,'string.escape'],\n\t\t\t[/\\\\./,'string.escape.invalid'],\n\t\t\t[/[\"']/,{\n\t\t\t\tcases: {\n\t\t\t\t\t'$#==$S2': {token: 'string',next: '@pop'},\n\t\t\t\t\t'@default': 'string'\n\t\t\t\t}\n\t\t\t}]\n\t\t],\n\t\tstring_backtick: [\n\t\t\t[/\\$\\{/,{token: 'delimiter.bracket',next: '@bracketCounting'}],\n\t\t\t[/[^\\\\`$]+/,'string'],\n\t\t\t[/@escapes/,'string.escape'],\n\t\t\t[/\\\\./,'string.escape.invalid'],\n\t\t\t[/`/,'string','@pop']\n\t\t],\n\t\tbracketCounting: [\n\t\t\t[/\\{/,'delimiter.bracket','@bracketCounting'],\n\t\t\t// numbers\n\t\t\t[/(@digits)[eE]([\\-+]?(@digits))?/,'number.float'],\n\t\t\t[/(@digits)\\.(@digits)([eE][\\-+]?(@digits))?/,'number.float'],\n\t\t\t[/0[xX](@hexdigits)n?/,'number.hex'],\n\t\t\t[/0[oO]?(@octaldigits)n?/,'number.octal'],\n\t\t\t[/0[bB](@binarydigits)n?/,'number.binary'],\n\t\t\t[/(@digits)n?/,'number'],\n\t\t\t\n\t\t\t// delimiter: after number because of .\\d floats\n\t\t\t[/[;,.]/,'delimiter'],\n\t\t\t[/\\}/,'delimiter.bracket','@pop']\n\t\t],\n\t\t\n\t\t// We match regular expression quite precisely\n\t\tregexp: [\n\t\t\t[/(\\{)(\\d+(?:,\\d*)?)(\\})/,['@brackets.regexp.escape.control','regexp.escape.control','@brackets.regexp.escape.control']],\n\t\t\t[/(\\[)(\\^?)(?=(?:[^\\]\\\\\\/]|\\\\.)+)/,['@brackets.regexp.escape.control',{token: 'regexp.escape.control',next: '@regexrange'}]],\n\t\t\t[/(\\()(\\?:|\\?=|\\?!)/,['@brackets.regexp.escape.control','regexp.escape.control']],\n\t\t\t[/[()]/,'@brackets.regexp.escape.control'],\n\t\t\t[/@regexpctl/,'regexp.escape.control'],\n\t\t\t[/[^\\\\\\/]/,'regexp'],\n\t\t\t[/@regexpesc/,'regexp.escape'],\n\t\t\t[/\\\\\\./,'regexp.invalid'],\n\t\t\t['/',{token: 'regexp.slash',bracket: '@close'},'@pop']\n\t\t],\n\t\t\n\t\tregexrange: [\n\t\t\t[/-/,'regexp.escape.control'],\n\t\t\t[/\\^/,'regexp.invalid'],\n\t\t\t[/@regexpesc/,'regexp.escape'],\n\t\t\t[/[^\\]]/,'regexp'],\n\t\t\t[/\\]/,'@brackets.regexp.escape.control','@pop']\n\t\t]\n\t}\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar self = {}, Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/);\n\n\n\n// predefine javascript grammar\n\n// externs;\n\nvar marked = require('marked');\nvar resolvedEditor = null;\n\nvar protocol$ = require('./protocol'), LCRange = protocol$.LCRange, SCON = protocol$.SCON;\n\nvar api = SCRIMBA_API;\nvar font = 'Source Code Pro';\n\nvar listeners = [];\nvar loaded = false;\n\nvar Theme = require('./views/Theme').Theme;\n\nvar extensionMap = {\n\tjs: 'javascript',\n\tts: 'typescript',\n\tsvelte: 'svelte',\n\tpy: 'python',\n\tmd: 'markdown'\n};\n\nvar config = window.MonacoEnvironment = {\n\tdefaults: {\n\t\tcodeLens: false,\n\t\tcolorDecorators: true,\n\t\tcontextmenu: false,\n\t\tcursorBlinking: 'smooth',\n\t\tdetectIndentation: true,\n\t\tdragAndDrop: false,\n\t\tfolding: false,\n\t\tfontFamily: font,\n\t\tfontIsMonospace: true,\n\t\tfontSize: 14,\n\t\tfontWeight: 'normal',\n\t\tglyphMargin: 0,\n\t\thideCursorInOverviewRuler: true,\n\t\ticonsInSuggestions: false, // disabled for now\n\t\tlineDecorationsWidth: \"1ch\",\n\t\tlineNumbersMinChars: 5,\n\t\tlinks: false,\n\t\tminimap: {enabled: false},\n\t\tmultiCursorModifier: 'alt',\n\t\toccurrencesHighlight: false,\n\t\toutlineMarkers: false,\n\t\tquickSuggestions: true,\n\t\treadOnly: false,\n\t\trenderIndentGuides: false,\n\t\trenderLineHighlight: 'gutter',\n\t\trenderWhitespace: 'none',\n\t\troundedSelection: true,\n\t\tscrollBeyondLastLine: true,\n\t\tselectionHighlight: false,\n\t\tfixedOverflowWidgets: true,\n\t\t\n\t\t// suggestFontSize: 13,\n\t\tsuggestOnTriggerCharacters: true,\n\t\tacceptSuggestionOnEnter: true,\n\t\t// tabSize: 4\n\t\ttheme: 'scrimba-dark',\n\t\twordBasedSuggestions: true,\n\t\twordWrapColumn: 100,\n\t\twordWrap: 'wordWrapColumn',\n\t\twrappingIndent: \"same\",\n\t\tscrollbar: {\n\t\t\tuseShadows: false,\n\t\t\tverticalScrollbarSize: 8,\n\t\t\thorizontalScrollbarSize: 8\n\t\t}\n\t},\n\tlanguages: [{\n\t\tid: 'imba1',\n\t\textensions: ['.imba1'],\n\t\taliases: ['Imba1','imba1'],\n\t\tmimetypes: ['application/imba1'],\n\t\tlanguage: require('./monaco/imba1')\n\t},{\n\t\tid: 'imba',\n\t\textensions: ['.imba','.imba2'],\n\t\taliases: ['Imba','imba'],\n\t\tmimetypes: ['application/imba'],\n\t\tlanguage: require('./monaco/imba2')\n\t},\n\t{\n\t\tid: 'sql',\n\t\textensions: ['sql','ddl','dml'],\n\t\taliases: ['SQL'],\n\t\tlanguage: require('./monaco/sql')\n\t},\n\t{\n\t\tid: 'go',\n\t\textensions: ['go'],\n\t\taliases: ['Go'],\n\t\tlanguage: require('./monaco/go')\n\t},\n\t{\n\t\tid: 'kotlin',\n\t\textensions: ['kt','kts'],\n\t\taliases: ['Kotlin'],\n\t\tlanguage: require('./monaco/kotlin')\n\t},\n\t{\n\t\tid: 'swift',\n\t\textensions: ['swift','xcodeproj'],\n\t\taliases: ['Swift'],\n\t\tlanguage: require('./monaco/swift')\n\t},\n\t{\n\t\tid: 'php',\n\t\textensions: ['php'],\n\t\taliases: ['php'],\n\t\tlanguage: require('./monaco/php')\n\t},\n\t{\n\t\tid: 'json',\n\t\textensions: ['json'],\n\t\taliases: ['JSON'],\n\t\tlanguage: require('./monaco/json')\n\t},\n\t{\n\t\tid: 'cpp',\n\t\textensions: ['cpp','c','h'],\n\t\taliases: ['C++','c++','c','C'],\n\t\tlanguage: require('./monaco/cpp')\n\t},\n\t{\n\t\tid: 'csharp',\n\t\textensions: ['cs','csproj','sln'],\n\t\taliases: ['C#','C-sharp'],\n\t\tlanguage: require('./monaco/csharp')\n\t},\n\t{\n\t\tid: 'yaml',\n\t\textensions: ['yml','yaml'],\n\t\taliases: ['YAML'],\n\t\tlanguage: require('./monaco/yaml')\n\t},\n\t{\n\t\tid: 'rust',\n\t\textensions: ['rs'],\n\t\taliases: ['Rust','rs'],\n\t\tlanguage: require('./monaco/rust')\n\t},\n\t{\n\t\tid: 'markdown',\n\t\textensions: ['md'],\n\t\taliases: ['Markdown','md'],\n\t\tlanguage: require('./monaco/markdown')\n\t},\n\t{\n\t\tid: 'ruby',\n\t\textensions: ['.rb','.rbx','.rjs','.gemspec','.pp'],\n\t\tfilenames: ['rakefile'],\n\t\taliases: ['Ruby','rb'],\n\t\tlanguage: require('./monaco/ruby')\n\t},{\n\t\tid: 'css',\n\t\textensions: ['.css','.scss'],\n\t\taliases: ['CSS','css','scss'],\n\t\tmimetypes: ['text/css'],\n\t\tlanguage: require('./monaco/css')\n\t},{\n\t\tid: 'python',\n\t\textensions: ['.py','.rpy','.pyw','.cpy','.gyp','.gypi'],\n\t\taliases: ['Python','py'],\n\t\tfirstLine: '^#!/.*\\\\bpython[0-9.-]*\\\\b',\n\t\tlanguage: require('./monaco/python')\n\t},{\n\t\tid: 'html',\n\t\textensions: ['.html','.htm','.shtml','.xhtml','.mdoc','.jsp','.asp','.aspx','.jshtm'],\n\t\taliases: ['HTML','htm','html','xhtml'],\n\t\tmimetypes: ['text/html','text/x-jshtm','text/template','text/ng-template'],\n\t\tlanguage: require('./monaco/html')\n\t},{\n\t\tid: 'less',\n\t\textensions: ['.less'],\n\t\taliases: ['Less','less'],\n\t\tmimetypes: ['text/x-less','text/less'],\n\t\tlanguage: require('./monaco/less')\n\t},{\n\t\tid: 'xml',\n\t\textensions: ['.xml','.dtd','.ascx','.csproj','.config','.wxi','.wxl','.wxs','.xaml','.svg','.svgz'],\n\t\tfirstLine: '(\\\\<\\\\?xml.*)|(\\\\<svg)|(\\\\<\\\\!doctype\\\\s+svg)',\n\t\taliases: ['XML','xml'],\n\t\tmimetypes: ['text/xml','application/xml','application/xaml+xml','application/xml-dtd'],\n\t\tlanguage: require('./monaco/xml')\n\t},{\n\t\tid: 'java',\n\t\textensions: ['.java','.jav'],\n\t\taliases: ['Java','java'],\n\t\tmimetypes: ['text/x-java-source','text/x-java'],\n\t\tlanguage: require('./monaco/java')\n\t},{\n\t\tid: 'svelte',\n\t\textensions: ['.svelte'],\n\t\taliases: ['Svelte','svelte'],\n\t\tlanguage: require('./monaco/svelte')\n\t},{\n\t\tid: 'vue',\n\t\textensions: ['.vue'],\n\t\taliases: ['Vue','vue'],\n\t\tlanguage: require('./monaco/vue')\n\t},{\n\t\tid: 'scss',\n\t\textensions: ['.scss'],\n\t\taliases: ['Scss'],\n\t\tlanguage: require('./monaco/scss')\n\t}],\n\t\n\tjavascript: require('./monaco/javascript'),\n\t\n\tmarked: marked,\n\tgetWorkerUrl: function() { return api.monacoPath() + \"/monaco.worker.js\"; },\n\tdidLoad: function() {\n\t\tif (loaded) { return };\n\t\tloaded = true;\n\t\tmonaco.editor.defineTheme('scrimba-dark',Theme.toMonaco());\n\t\t// register languages\n\t\tconfig.languages.map(function(lang) {\n\t\t\tvar mod = lang.language;\n\t\t\tmonaco.languages.register(lang);\n\t\t\treturn monaco.languages.onLanguage(lang.id,function() {\n\t\t\t\tmod.language && monaco.languages.setMonarchTokensProvider(lang.id,mod.language);\n\t\t\t\tmod.conf && monaco.languages.setLanguageConfiguration(lang.id,mod.conf);\n\t\t\t\treturn mod.setup && mod.setup(monaco,lang);\n\t\t\t});\n\t\t});\n\t\tvar ctx;\n\t\t\n\t\ttry {\n\t\t\t\n\t\t\tvar canvas = document.createElement('canvas');\n\t\t\tctx = canvas.getContext('2d');\n\t\t\t\n\t\t\tctx.font = (\"bold 14px '\" + font + \"'\");\n\t\t\tctx.measureText('0123456789');\n\t\t\t\n\t\t\tctx.font = (\"italic 14px '\" + font + \"'\");\n\t\t\tctx.measureText('0123456789');\n\t\t\t\n\t\t\tctx.font = (\"14px '\" + font + \"'\");\n\t\t\tlet res = ctx.measureText('0123456789');\n\t\t\t// console.log 'measured text?',res\n\t\t} catch (e) { };\n\t\t\n\t\tvar setModelMarkers = monaco.editor.setModelMarkers;\n\t\tmonaco.editor.setModelMarkers = function(model,selector,markers) {\n\t\t\tmarkers = markers.filter(function(_0) { return !/Cannot find module/.test(_0.message); });\n\t\t\treturn setModelMarkers.apply(monaco.editor,arguments);\n\t\t};\n\t\t\n\t\t\n\t\tvar count = 0;\n\t\tvar checker = function() {\n\t\t\tcount++;\n\t\t\t\n\t\t\ttry {\n\t\t\t\t// This seems to (sometimes?) fail in Firefox\n\t\t\t\tctx.font = (\"14px '\" + font + \"'\");\n\t\t\t\tvar text = ctx.measureText('0123456789');\n\t\t\t\t// console.log \"textwidth\",text:width\n\t\t\t\t\n\t\t\t\t// if Math.round(text:width) != 84 and count < 30\n\t\t\t\t// \treturn setTimeout(checker,5)\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(\"failed font checker\",e);\n\t\t\t};\n\t\t\t\n\t\t\ttry {\n\t\t\t\tvar lint = monaco.languages.css.cssDefaults.diagnosticsOptions.lint;\n\t\t\t\tlint.emptyRules = 'ignore';\n\t\t\t\tlint.duplicateProperties = 'ignore';\n\t\t\t} catch (e) { };\n\t\t\t\n\t\t\tresolvedEditor = monaco;\n\t\t\t\n\t\t\tfor (let i = 0, len = listeners.length; i < len; i++) {\n\t\t\t\tlisteners[i](monaco);\n\t\t\t};\n\t\t\treturn listeners = [];\n\t\t};\n\t\t\n\t\treturn setTimeout(checker,0);\n\t\t// checker()\n\t}\n};\n\nexports.load = self.load = function (){\n\treturn new Promise(function(resolve,reject) {\n\t\tif (resolvedEditor) {\n\t\t\treturn resolve(resolvedEditor);\n\t\t} else {\n\t\t\treturn listeners.push(resolve);\n\t\t};\n\t});\n};\n\n\nexports.injectStyles = self.injectStyles = function (theme){\n\tif (config.CUSTOMCSS) { return };\n\tlet css = '.delimiter.access.imba:before {\\n\tposition: absolute;\\n\tcontent: \".\";\\n\tcolor: #ea9b80;\\n}';\n\t\n\tlet mkt = theme._tokenTheme._match(\"delimiter.access.imba\");\n\tlet style = config.CUSTOMCSS = document.createElement('style');\n\tstyle.innerHTML = css.replace(\"delimiter.access.imba\",(\"mtk\" + (mkt._foreground)));\n\tdocument.head.appendChild(style);\n\treturn;\n};\n\nexports.patchEditor = self.patchEditor = function (editor){\n\tif (config.PATCHED) { return editor };\n\t\n\twindow.SE = editor;\n\tconfig.PATCHED = true;\n\tconfig.THEME = editor._themeService._theme;\n\tself.injectStyles(config.THEME);\n\teditor._view.viewCursors.constructor.prototype._getCursorBlinking = function() {\n\t\ttry {\n\t\t\tvar file = this._context.model.model.FILE_MODEL;\n\t\t\tif (file && file.space().primaryEditor().hasFocus()) {\n\t\t\t\treturn 2;\n\t\t\t} else {\n\t\t\t\treturn 1;\n\t\t\t};\n\t\t} catch (e) { };\n\t\treturn 2;\n\t};\n\treturn editor;\n};\n\nwindow.require = function() {\n\t// nothinfg\n};\n\nwindow.define = function() {\n\t// nothing\n};\n\nexports.rangeToArray = self.rangeToArray = function (range){\n\treturn LCRange.lclcToArray(range.startLineNumber,range.startColumn,range.endLineNumber,range.endColumn);\n\t// var ary = [range:startLineNumber,range:startColumn,range:endLineNumber,range:endColumn]\n\t// return (ary[0] == ary[2] and ary[1] == ary[3]) ? ary.slice(2) : ary\n};\n\nexports.selectionToArray = self.selectionToArray = function (val){\n\treturn LCRange.lclcToArray(\n\t\tval.selectionStartLineNumber,\n\t\tval.selectionStartColumn,\n\t\tval.positionLineNumber,\n\t\tval.positionColumn\n\t);\n};\n\nexports.arrayToSelection = self.arrayToSelection = function (val){\n\t// TODO should be mocked until monaco is available\n\treturn new (monaco.Selection)(val[0],val[1],val[0] + (val[3] || 0),val[1] + (val[2] || 0));\n};\n\nexports.arrayToRange = self.arrayToRange = function (val){\n\tif (val.length == 5) {\n\t\treturn new (monaco.Range)(val[0],val[1],val[2],val[3]);\n\t};\n\t// TODO should be mocked until monaco is available\n\treturn new (monaco.Range)(val[0],val[1],val[0] + (val[3] || 0),val[1] + (val[2] || 0));\n};\n\nexports.stringToRange = self.stringToRange = function (str){\n\tlet val = SCON.decodeRangeString(str);\n\treturn new (monaco.Range)(val[0],val[1],val[2],val[3]);\n};\n\nexports.uriToMode = self.uriToMode = function (uri){\n\tlet ext = (uri.match(/\\.(\\w+)(\\#|$)/) || [])[1]; // or uri\n\treturn extensionMap[ext || uri] || ext || uri;\n};\n\nexports.colorize = self.colorize = function (code,lang,opts){\n\tif(opts === undefined) opts = {};\n\tif (!resolvedEditor) {\n\t\treturn Promise.resolve(code);\n\t};\n\tlet mode = self.uriToMode(lang);\n\tlet promise = monaco.editor.colorize(code,mode);\n\t\n\treturn promise.then(function(value) {\n\t\tvar _t1;\n\t\tvar wrapper = (_1('code').flag('monaco-hl')).flagIf('show-lines',(opts.startLine)).dataset('mode',mode).end();\n\t\tif (opts.startLine) {\n\t\t\twrapper.css({counterReset: (\"code-line \" + (parseInt(opts.startLine) - 1))});\n\t\t};\n\t\t// var pars = \"class='monaco-hl' data-mode='{mode}'\"\n\t\treturn wrapper.dom().outerHTML.slice(0,-7) + value + '</code>';\n\t\t// return \"<code >{value}</code>\"\n\t});\n\t\n\t// return monaco:editor.colorize(code,mode)\n};\n\nexports.opToSelections = self.opToSelections = function (op){\n\tif (op[0] instanceof Array) {\n\t\tlet res = [];\n\t\tfor (let i = 0, items = iter$(op), len = items.length; i < len; i++) {\n\t\t\tres.push(self.arrayToSelection(items[i]));\n\t\t};\n\t\treturn res;\n\t} else if ((typeof op[0]=='number'||op[0] instanceof Number)) {\n\t\treturn [self.arrayToSelection(op)];\n\t} else {\n\t\treturn op;\n\t};\n};\n\nif (window.monaco) {\n\tconfig.didLoad();\n};\n\n\n// now loading monaco\nif (true) {\n\tlet script = document.createElement('script');\n\tscript.src = (\"\" + (api.monacoPath()) + \"/monaco.editor.js\");\n\tdocument.head.appendChild(script);\n};\n\n// <script src=\"{env.MONACO_PATH}/monaco.editor.js\" defer>\n", "var self = {};\n\nvar CONTAINS_EMOJI = /(?:[\\u231A\\u231B\\u23F0\\u23F3\\u2600-\\u27BF\\u2B50\\u2B55]|\\uD83C[\\uDDE6-\\uDDFF\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDE4F\\uDE80-\\uDEF8]|\\uD83E[\\uDD00-\\uDDE6])/;;\n\nexports.containsEmoji = self.containsEmoji = function (str){\n\treturn CONTAINS_EMOJI.test(str);\n};\n\n// Extremely flexible email check => *@*.*\nexports.isEmail = self.isEmail = function (email){\n\treturn /^\\S+@\\S+\\.\\S+$/.test(email);\n};\n\n\nexports.describeDuration = self.describeDuration = function (ms){\n\tvar seconds = (ms / 1000).toFixed(0);\n\tvar minutes = (seconds / 60).toFixed(0);\n\tvar hours = (seconds / (60 * 60)).toFixed(0);\n\tif (seconds > 3600) {\n\t\treturn (\"\" + hours + \" \" + ((hours > 1) ? ' hours' : ' hour'));\n\t} else if (seconds > 60) {\n\t\treturn (\"\" + minutes + \" min\");\n\t} else {\n\t\treturn (\"\" + seconds + \" sec\");\n\t};\n};\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nfunction len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n// externs;\n\nvar Widget = require('./widget').Widget;\nvar PaneWidget = require('./PaneWidget').PaneWidget;\n\nvar protocol$ = require('../protocol'), WIDGET = protocol$.WIDGET, FILE = protocol$.FILE, SCON = protocol$.SCON, ACTION = protocol$.ACTION, LCRange = protocol$.LCRange;\n\nvar List = require('../util/List').List;\nvar TextModel = require('../util/TextModel').TextModel;\n\nvar editor;\nif (true) {\n\teditor = require('../editor');\n};\nvar strutil = require('../util/strings');\n\nvar Dimensions = require('../core/Dimensions').Dimensions;\n\n// var tracking = require '../../scrimba/tracking'\n\n// wrapper around monaco editor and model\nfunction FileModel(file){\n\tthis._file = file;\n\tthis._batch = [];\n\tthis._batchState = {};\n\tthis._changes = [];\n\tthis._raw = new TextModel(this._file.initialBody());\n\t// Preload model for the worker\n\tthis.model();\n\t\n\tthis;\n};\n\nFileModel.prototype.file = function(v){ return this._file; }\nFileModel.prototype.setFile = function(v){ this._file = v; return this; };\nFileModel.prototype.model = function(v){ return this._model; }\nFileModel.prototype.setModel = function(v){ this._model = v; return this; };\n\nFileModel.prototype.id = function (){\n\treturn this.file().__uid();\n};\n\nFileModel.prototype.space = function (){\n\treturn this.file().space();\n};\n\nFileModel.prototype.body = function (){\n\treturn this._raw.getValue();\n};\n\nFileModel.prototype.logLine = function (nr){\n\tvar ret;\n\tvar raw = this._raw._lines[nr];\n\tvar monaco = this._model._lines[nr];\n\treturn ret = [raw,monaco._text,raw.length,monaco._text.length];\n};\n\nFileModel.prototype.applyEdits = function (edit,silent){\n\tif(silent === undefined) silent = false;\n\tif (!edit.MONACO) {\n\t\tlet res = [];\n\t\tfor (let i = 0, items = iter$(edit), len = items.length, item; i < len; i++) {\n\t\t\titem = items[i];\n\t\t\tres.push({range: editor.arrayToRange(item[0]),text: item[1]});\n\t\t};\n\t\tedit.MONACO = res;\n\t};\n\treturn this._applyEditsRaw.call(this._model,edit.MONACO);\n};\n\nFileModel.prototype.isSyncing = function (){\n\treturn this._syncing || this.space().isSyncing();\n};\n\nFileModel.prototype.model = function (){\n\tif (true) this.setupMonaco();\n\treturn this._model;\n};\n\nFileModel.prototype.didCompile = function (result){\n\t// if meta.css\n\t//\t\tif file.#css != meta.css\n\t// console.log 'didCompile',result,@file.lang\n\t\n\t// push info about css\n\t\n\tif (this._file.lang() == 'imba' && result.css) {\n\t\tlet old = this._css || '';\n\t\tif (result.css != old) {\n\t\t\t// console.log 'changed css!',result:id,old:length,result:css:length\n\t\t\t// console.log old\n\t\t\t// console.log \"-----\"\n\t\t\t// console.log result:css\n\t\t\tthis._css = result.css;\n\t\t\tlet browser = this._file.space().browser().node();\n\t\t\tlet runner = browser.runner();\n\t\t\tif (runner && runner.isActive()) {\n\t\t\t\treturn runner.post({type: 'stylesync',id: result.id,body: this._css});\n\t\t\t};\n\t\t};\n\t};\n};\n\nFileModel.prototype.setupMonaco = function (){\n\tvar self = this;\n\tif (!true || self._model || self._initing || !window.monaco) { return };\n\t\n\tself._initing = true;\n\t\n\tself._uri = monaco.Uri.parse(self.file().uri());\n\t// console.warn \"setup file\",file,file.uri,body,@queue\n\tself._changes = [];\n\t\n\tlet existing = monaco.editor.getModel(self._uri);\n\t\n\tif (existing) {\n\t\t// console.log \"model already exists!!!\",existing\n\t\texisting.FILE_MODEL.dispose();\n\t};\n\t\n\tself._model = monaco.editor.createModel(self._raw.getValue(),null,self._uri); // 'text'\n\tself._initing = false;\n\tself._model.FILE_MODEL = self;\n\t\n\tvar opts = {\n\t\ttrimAutoWhitespace: false\n\t};\n\t\n\tif (self._file.useTabs()) {\n\t\topts.insertSpaces = false;\n\t\topts.tabSize = 4;\n\t};\n\t\n\tself._model.updateOptions(opts);\n\t\n\t\n\tvar applyEditsRaw = self._applyEditsRaw = self._model.applyEdits;\n\t\n\tself._model.applyEdits = function(operations) {\n\t\tvar rev = applyEditsRaw.call(self._model,operations);\n\t\tif (!(self.isSyncing())) {\n\t\t\tself._batchState.significant = true;\n\t\t\tself._batchState.preapplied = true;\n\t\t\t\n\t\t\tvar scrimbaOps = [];\n\t\t\tvar count = len$(operations);\n\t\t\t// workaround for our version of monaco where backspace-deleting\n\t\t\t// an emoji would return an incorrect range\n\t\t\tfor (let i = 0, items = iter$(operations), len = items.length, op; i < len; i++) {\n\t\t\t\top = items[i];\n\t\t\t\tif (rev[i] && strutil.containsEmoji(rev[i].text)) {\n\t\t\t\t\t// console.log \"reversed operation contains emoji!!!\",rev[i]\n\t\t\t\t\top.range.startColumn = rev[i].range.startColumn;\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tlet range = editor.rangeToArray(op.range);\n\t\t\t\t\n\t\t\t\tif (op.text) {\n\t\t\t\t\tscrimbaOps.push([range,op.text]);\n\t\t\t\t} else {\n\t\t\t\t\tscrimbaOps.push([range]);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\t// single inserts from collaped range\n\t\t\t\tif (count == 1) {\n\t\t\t\t\tif (op.text && range.length == 2) {\n\t\t\t\t\t\t// console.log \"LCINSERT\",range,op:text\n\t\t\t\t\t\tself.pushEvent(ACTION.LCINSERT,[self.id(),range[0],range[1],op.text]);\n\t\t\t\t\t\treturn rev;\n\t\t\t\t\t} else if (!op.text) {\n\t\t\t\t\t\t// range[0],range[1],range[2],range[3]\n\t\t\t\t\t\tself.pushEvent(ACTION.LCDELETE,[self.id()].concat(range));\n\t\t\t\t\t\treturn rev;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\t// console.log \"LCEDIT\",id,scrimbaOps\n\t\t\tself.pushEvent(ACTION.LCEDIT,[self.id(),scrimbaOps]);\n\t\t};\n\t\treturn rev;\n\t};\n\t\n\treturn self;\n};\n\nFileModel.prototype.onDidChangeCursorSelection = function (event){\n\tvar ary, items;\n\tif (!(this.isSyncing())) {\n\t\tvar sel = editor.selectionToArray(event.selection);\n\t\tvar msel = [sel];\n\t\t\n\t\tfor (let i = 0, items = iter$(event.secondarySelections), len = items.length; i < len; i++) {\n\t\t\tsel = null;\n\t\t\tmsel.push(editor.selectionToArray(items[i]));\n\t\t};\n\t\t\n\t\tlet last = this._batch[len$(this._batch) - 1] || {};\n\t\t\n\t\tif (last.TYPE == ACTION.LCINSERT) {\n\t\t\t// console.log \"cursor selection after LCINSERT?\"\n\t\t\tvar ary = iter$(last);let tid = ary[0],tline = ary[1],tcol = ary[2],tins = ary[3];\n\t\t\tif (tins.indexOf('\\n') >= 0 || !sel || sel[0] != tline || (sel[1] - (tcol + tins.length)) != 0) {\n\t\t\t\tlast.push(sel || msel);\n\t\t\t};\n\t\t} else if (last.TYPE == ACTION.LCDELETE) {\n\t\t\t\n\t\t\tvar items = iter$(last);let tid = items[0],l0 = items[1],c0 = items[2];\n\t\t\tif (!sel || sel[0] != l0 || sel[1] != c0 || sel.length > 2) {\n\t\t\t\tlast[5] = sel || msel;\n\t\t\t};\n\t\t} else if (last.TYPE == ACTION.LCEDIT) {\n\t\t\tlast.push(sel || msel);\n\t\t} else if (!this.file().space().isEditing()) {\n\t\t\t// setting the localSelection\n\t\t\tthis.file().setLocalSel(sel || msel);\n\t\t\tif (this.file().space().isPlaying()) {\n\t\t\t\tthis.file().space().timeline().pause();\n\t\t\t};\n\t\t} else {\n\t\t\tthis.pushEvent(ACTION.LCSELECTION,[this.id()].concat(sel || msel));\n\t\t};\n\t\t// cursorSelection will always be the last event we want in a batch\n\t\t// so we should force flush the batch immediately\n\t\tthis.flushEvents();\n\t};\n\treturn this;\n};\n\nFileModel.prototype.pushEvent = function (type,params){\n\tvar self = this;\n\tparams.TYPE = type;\n\tself._batch.push(params);\n\tsetTimeout(function() { return self.flushEvents(); },0);\n\treturn self;\n};\n\nFileModel.prototype.flushEvents = function (){\n\tif (len$(this._batch)) {\n\t\tvar items = this._batch.slice(0);\n\t\tvar state = this._batchState;\n\t\tthis._batch = [];\n\t\tthis._batchState = {};\n\t\t// console.log 'flush events',items.len\n\t\tthis.file().setLocalSel(null);\n\t\t\n\t\tif (len$(items) == 1) {\n\t\t\tthis.file().push_(items[0].TYPE,items[0],state);\n\t\t} else {\n\t\t\tlet batched;\n\t\t\tlet res = [];\n\t\t\tfor (let i = 0, ary = iter$(items), len = ary.length, item; i < len; i++) {\n\t\t\t\titem = ary[i];\n\t\t\t\tres.push([item.TYPE,item]);\n\t\t\t};\n\t\t\tbatched = res;\n\t\t\tthis.file().batch_(batched,state);\n\t\t};\n\t};\n\treturn this;\n};\n\n\nFileModel.prototype.apply = function (edits,isLocal){\n\tif(isLocal === undefined) isLocal = false;\n\tthis._raw.apply(edits);\n\tif (!isLocal || !isLocal.preapplied) {\n\t\tthis._changes.push(edits);\n\t};\n\treturn this;\n};\n\nFileModel.prototype.undo = function (edits){\n\tthis._raw.apply(edits.UNDO,-1);\n\tfor (let i = 0, items = iter$(edits.UNDO), len = items.length; i < len; i++) {\n\t\tthis._changes.push([items[i]]);\n\t};\n\treturn this;\n};\n\n\nFileModel.prototype.flushChanges = function (){\n\tvar self = this;\n\tif (!self._model) { return };\n\t\n\tvar editor = self._file._editor;\n\tvar ops = self._changes;\n\tvar now = Date.now();\n\t\n\tif (len$(ops) == 0) {\n\t\treturn self;\n\t};\n\t\n\tself._changes = [];\n\tself._syncing = true;\n\t\n\t// just update the body directly\n\tif (len$(ops) > 3) {\n\t\t// window.FE = self\n\t\t\n\t\t// TODO should delay rendering for editor even if we batch\n\t\t\n\t\tself._changeDiff = {\n\t\t\tmodel: self._model.getValue(),\n\t\t\traw: self._raw.getValue()\n\t\t};\n\t\t// @lastOps = ops\n\t\tvar diff = self._raw.getDiff(self._model._lines);\n\t\t\n\t\tself._changeDiff.diff = diff;\n\t\t\n\t\tif (diff && diff[0][0] == 1) {\n\t\t\t// should rather check whether we have many changes\n\t\t\tself._model.setValue(self._raw.getValue());\n\t\t} else if (diff) {\n\t\t\tself.applyEdits([diff]);\n\t\t\t// @applyEditsRaw.call(@model,[patch])\n\t\t};\n\t\t// console.log \"applied patch\",diff\n\t} else if (editor) {\n\t\t// should we ever use these?\n\t\teditor.batchEdits(function() {\n\t\t\t// console.log \"flush applyEdits\",ops\n\t\t\tlet res = [];\n\t\t\tfor (let i = 0, items = iter$(ops), len = items.length; i < len; i++) {\n\t\t\t\tres.push(self.applyEdits(items[i]));\n\t\t\t};\n\t\t\treturn res;\n\t\t});\n\t} else {\n\t\tfor (let i = 0, items = iter$(ops), len = items.length; i < len; i++) {\n\t\t\tself.applyEdits(items[i]);\n\t\t};\n\t};\n\t\n\t// console.log 'flushChanges',ops.len,Date.now - now\n\tself._syncing = false;\n\tself._file.async('modified');\n\treturn self;\n};\n\nFileModel.prototype.enable = function (){\n\tthis._enabled = true;\n\treturn this;\n};\n\nFileModel.prototype.disable = function (){\n\tthis._enabled = false;\n\treturn this;\n};\n\nFileModel.prototype.dispose = function (){\n\tthis._model && this._model.dispose && this._model.dispose();\n\tthis._model = null;\n\treturn this;\n};\n\nfunction FileWidget(){ return PaneWidget.apply(this,arguments) };\n\nsubclass$(FileWidget,PaneWidget);\nexports.FileWidget = FileWidget; // export class \nFileWidget.register('file',FILE);\n\n// attr name\nFileWidget.prototype.body = function(v){ return this.getAttribute('body'); }\nFileWidget.prototype.setBody = function(v){ this.setAttribute('body',v); return this; };\nFileWidget.prototype.lang = function(v){ return this.getAttribute('lang'); }\nFileWidget.prototype.setLang = function(v){ this.setAttribute('lang',v); return this; };\nFileWidget.prototype.blobId = function(v){ return this.getAttribute('blobId'); }\nFileWidget.prototype.setBlobId = function(v){ this.setAttribute('blobId',v); return this; };\n\nFileWidget.prototype.buffer = function(v){ return this._buffer; }\nFileWidget.prototype.setBuffer = function(v){ this._buffer = v; return this; };\nFileWidget.prototype.diff = function(v){ return this._diff; }\nFileWidget.prototype.setDiff = function(v){ this._diff = v; return this; };\nFileWidget.prototype.stream = function(v){ return this._stream; }\nFileWidget.prototype.setStream = function(v){ this._stream = v; return this; };\nFileWidget.prototype.editor = function(v){ return this._editor; }\nFileWidget.prototype.setEditor = function(v){ this._editor = v; return this; };\n\nFileWidget.prototype.scrollState = function(v){ return this._scrollState; }\nFileWidget.prototype.setScrollState = function(v){ this._scrollState = v; return this; };\nFileWidget.prototype.selState = function(v){ return this._selState; }\nFileWidget.prototype.setSelState = function(v){ this._selState = v; return this; };\nFileWidget.prototype.__localSel = {watch: 'localSelDidSet',name: 'localSel'};\nFileWidget.prototype.localSel = function(v){ return this._localSel; }\nFileWidget.prototype.setLocalSel = function(v){\n\tvar a = this.localSel();\n\tif(v != a) { this._localSel = v; }\n\tif(v != a) { this.localSelDidSet && this.localSelDidSet(v,a,this.__localSel) }\n\treturn this;\n};\nFileWidget.prototype.localScroll = function(v){ return this._localScroll; }\nFileWidget.prototype.setLocalScroll = function(v){ this._localScroll = v; return this; };\n// prop decorations\n\nFileWidget.option('name');\nFileWidget.option('parent',{type: 'widget'});\n\n// only for text-files. Should probably be stored on the editor-widget instead\n// or on a subwidget of file representing the actual ViewModel\nFileWidget.option('scrollTop');\nFileWidget.option('scrollLeft');\n\nFileWidget.prototype.setup = function (){\n\tthis._localScroll = false;\n\tthis._selState = [[1,1]];\n\tthis._stream = [];\n\tthis._edits = 0;\n\tthis._initialBody = this.data().body;\n\tthis._decorations = {};\n\t// @decorations = List.new(self)\n\treturn this;\n};\n\nFileWidget.prototype.posToScreen = function (x,y,sl,cl){\n\tif (this._editor) {\n\t\tlet layout = this.agentLayout();\n\t\tlet pars = {\n\t\t\ttop: layout.top(),\n\t\t\tleft: layout.left(),\n\t\t\tcontentTop: 0,\n\t\t\tcontentLeft: 0,\n\t\t\tscrollTop: layout.scrollTop(),\n\t\t\tscrollLeft: layout.scrollLeft(),\n\t\t\tfontSize: layout.scaleX(),\n\t\t\tlineHeight: layout.scaleY()\n\t\t};\n\t\t\n\t\treturn this.space().primaryEditor().agentToLocalPoint(x,y,pars);\n\t};\n\t\n\treturn null;\n};\n\nFileWidget.prototype.model = function (){\n\treturn this._model || (this._model = new FileModel(this));\n};\n\nFileWidget.prototype.localLayout = function (){\n\treturn this._editor ? this.clientLayout() : null;\n};\n\nFileWidget.prototype.uri = function (){\n\treturn (\"\" + (this.space().namespace()) + this.path());\n};\n\nFileWidget.prototype.ext = function (){\n\tlet idx = this.name().lastIndexOf('.');\n\treturn (idx > 0) ? this.name().substr(idx + 1) : '';\n};\n\nFileWidget.prototype.lang = function (){\n\treturn this.data().lang || this.ext() || 'text';\n};\n\nFileWidget.prototype.isLanguageStale = function (){\n\t// In the unlikely case this causes an exception, default to\n\t// false. Considering this code path is executed a lot,\n\t// it does not hurt to be paranoid ;-)\n\ttry {\n\t\tlet current = this.ext();\n\t\tlet inModel = this.model()._uri.path.split('.')[1];\n\t\treturn current !== inModel;\n\t} catch (err) {\n\t\treturn false;\n\t};\n};\n\nFileWidget.prototype.syncExtension = function (){\n\tconsole.log('syncing extension',this.model()._uri,this.uri());\n\treturn this.model()._uri = this.uri();\n};\n\nFileWidget.prototype.title = function (){\n\treturn this.name();\n};\n\nFileWidget.prototype.commitAdd = function (){\n\tFileWidget.prototype.__super__.commitAdd.apply(this,arguments);\n\t// space.files.add(self,id)\n\tthis._initialBody = this.data().body; // really?\n\treturn this;\n};\n\nFileWidget.prototype.mount_ = function (){\n\tFileWidget.prototype.__super__.mount_.apply(this,arguments);\n\tthis.space().files().add(this,this.id());\n\treturn this.parentDir().entries().add(this);\n};\n\nFileWidget.prototype.unmount_ = function (){\n\tFileWidget.prototype.__super__.unmount_.apply(this,arguments);\n\t// what if parentDir no longer exists?\n\tthis.space().files().remove(this,this.id());\n\treturn this.parentDir().entries().remove(this);\n};\n\nFileWidget.prototype.parentDir = function (){\n\treturn this.parent() || this.space().fs();\n};\n\nFileWidget.prototype.replaceBody = function (newBody,hard){\n\tif(hard === undefined) hard = false;\n\tvar prev = this.body();\n\tvar diff = new TextModel(newBody).getDiff(this.model().body());\n\t\n\tif (hard) {\n\t\tvar range = this.model()._raw.expandedRange([1,1],prev);\n\t\tdiff = [range,newBody];\n\t};\n\t\n\tthis.log(\"replacBody\",diff);\n\tif (diff) {\n\t\treturn this.push_(ACTION.LCEDIT,[this.id(),[diff]]);\n\t};\n};\n\nFileWidget.prototype.deltaDecorations = function (ns,decorations){\n\tvar range_;\n\tif (false) {};\n\t// what if monaco is not already loaded?\n\tfor (let i = 0, items = iter$(decorations), len = items.length, item; i < len; i++) {\n\t\titem = items[i];\n\t\tif ((typeof (range_ = item.range)=='string'||range_ instanceof String)) {\n\t\t\titem.range = editor.stringToRange(item.range);\n\t\t} else if (item.range instanceof Array) {\n\t\t\titem.range = editor.arrayToRange(item.range);\n\t\t};\n\t};\n\t\n\tthis.log(\"deltaDecorations\",decorations);\n\t\n\treturn this._decorations[ns] = this.model().model().deltaDecorations(this._decorations[ns] || [],decorations);\n\t// @decorations = model.model.deltaDecorations(@decorations,decorations)\n};\n\nFileWidget.prototype.initialBody = function (){\n\treturn (this._initialBody == null) ? (this._initialBody = this.data().body) : this._initialBody;\n};\n\nFileWidget.prototype.currentBody = function (){\n\treturn this.model().body();\n};\n\nFileWidget.prototype.localSelDidSet = function (new$){\n\t// clearTimeout(@localSelTrackingTimeout)\n\t// if new\n\t//\t@localSelTrackingTimeout = setTimeout(&, 500) do\n\t//\t\tspace.api.sendTracking(tracking.TYPES.SELECTION, [space.timeline.currentOffset, id, new])\n\treturn this;\n};\n\nFileWidget.prototype.flushLocals = function (){\n\tif (this.localSel()) {\n\t\tthis.push_(ACTION.LCSELECTION,[this.id()].concat(this.localSel()));\n\t};\n\treturn this;\n};\n\nFileWidget.prototype.buffer = function (){\n\treturn this.data().buffer || this.data().body;\n};\n\nFileWidget.prototype.toString = function (){\n\treturn this.currentBody();\n};\n\nFileWidget.prototype.persist_ = function (){\n\tthis._data.body = this.currentBody();\n\tthis._data.selState = this._selState;\n\treturn this;\n};\n\nFileWidget.prototype.modified = function (){\n\tthis.emit('modified',this);\n\treturn this;\n};\n\nFileWidget.prototype.synced_ = function (){\n\t// TODO -- could be synced immediately\n\tthis._data.body = this.currentBody();\n\t// no need to flush until the editor tries to flush?\n\treturn this._model && this._model.flushChanges && this._model.flushChanges();\n};\n\nFileWidget.prototype.pointer = function (){\n\treturn this._editor && this._editor.pointer();\n};\n\nFileWidget.prototype.node = function (){\n\treturn this._editor;\n};\n\nFileWidget.prototype.agentIsShowing = function (){\n\treturn this.space().agent().options().get('file',false) == this;\n};\n\nFileWidget.prototype.clientIsShowing = function (){\n\treturn this.space().agent().file() == this;\n};\n\nFileWidget.prototype.isBinary = function (){\n\treturn !(!(this.blobId()));\n};\n\nFileWidget.prototype.useTabs = function (){\n\treturn this.lang() == 'imba' || this.lang() == 'imba2';\n};\n\nFileWidget.prototype.quicksave = function (){\n\tthis.space().emit('quicksave',this);\n\treturn this;\n};\n\nFileWidget.prototype.dispose = function (){\n\tthis._editor = null;\n\treturn this._model && this._model.dispose && this._model.dispose();\n};\n\nFileWidget.prototype.rename = function (name){\n\t// should check with filesystem(!)\n\tif (!name || name == this.name() || this.parentDir().entries().any(function(f) { return f.name() == name; })) {\n\t\treturn this;\n\t};\n\t\n\treturn this.push_(ACTION.FS_RENAME,[this.id(),name]);\n};\n\nFileWidget.prototype.moveTo = function (target){\n\t// should be separate action, or just change parent?\n\tthis.log(\"moveTo\",target);\n\tif (this.parent() != target) {\n\t\tthis.push_(ACTION.FS_MOVE,[this.id(),target.id()]);\n\t\treturn this;\n\t};\n};\n\nFileWidget.prototype.path = function (){\n\treturn (\"\" + (this.parentDir().path()) + \"/\" + this.name());\n};\n\nFileWidget.prototype.rm = function (){\n\t// should ask to confirm\n\t// check if we are currently in focus?\n\tif (this.space().agent().file() == this) {\n\t\t// let idx = space.files.indexOf(self)\n\t\t// let rel = space.files.at(idx - 1) or space.files.at(idx + 1)\n\t\tthis.space().agent().setFocus(null);\n\t\tthis.space().agent().setFile(null);\n\t};\n\t\n\treturn this.push_(ACTION.FS_REMOVE,[this.id()]);\n};\n\n\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar AGENT = require('../protocol').AGENT;\nvar Widget = require('./widget').Widget;\nvar FileWidget = require('./FileWidget').FileWidget;\nvar F = AGENT.FLAGS;\n\nfunction Agent(){ return Widget.apply(this,arguments) };\n\nsubclass$(Agent,Widget);\nexports.Agent = Agent; // export class \nAgent.register('agent',AGENT);\n\nAgent.prototype.name = function(v){ return this.getAttribute('name'); }\nAgent.prototype.setName = function(v){ this.setAttribute('name',v); return this; };\nAgent.prototype.body = function(v){ return this.getAttribute('body'); }\nAgent.prototype.setBody = function(v){ this.setAttribute('body',v); return this; };\nAgent.prototype.uid = function(v){ return this.getAttribute('uid'); }\nAgent.prototype.setUid = function(v){ this.setAttribute('uid',v); return this; };\nAgent.prototype.sid = function(v){ return this.getAttribute('sid'); }\nAgent.prototype.setSid = function(v){ this.setAttribute('sid',v); return this; };\nAgent.prototype.token = function(v){ return this.getAttribute('token'); }\nAgent.prototype.setToken = function(v){ this.setAttribute('token',v); return this; };\nAgent.prototype.color = function(v){ return this.getAttribute('color'); }\nAgent.prototype.setColor = function(v){ this.setAttribute('color',v); return this; };\nAgent.prototype.kind = function(v){ return this.getAttribute('kind'); }\nAgent.prototype.setKind = function(v){ this.setAttribute('kind',v); return this; };\nAgent.prototype.user_id = function(v){ return this.getAttribute('user_id'); }\nAgent.prototype.setUser_id = function(v){ this.setAttribute('user_id',v); return this; };\n\nAgent.prototype.editing = function(v){ return this._editing; }\nAgent.prototype.setEditing = function(v){ this._editing = v; return this; };\nAgent.prototype.audio = function(v){ return this._audio; }\nAgent.prototype.setAudio = function(v){ this._audio = v; return this; };\n\n// the widget that is currently in focus\nAgent.option('focus',{type: 'widget',triggerAsync: ['refocus'],overridable: true});\n\n// the main widget the agent is displaying\nAgent.option('file',{type: 'widget',triggerAsync: ['refocus'],override: 'pause'});\n\n// widget -- really? what about views then?\nAgent.option('hover',{type: 'widget',overridable: true});\n\n// should probably be declared somewhere else\nAgent.option('vw',{overridable: true});\nAgent.option('vh',{overridable: true});\n\nAgent.prototype.setup = function (){\n\tthis.space().widgets().add(this,this.id());\n\treturn this;\n};\n\nAgent.prototype.file = function (opts){\n\treturn this.options().get('file',opts) || this.space().files().at(0);\n};\n\nAgent.prototype.isLocal = function (){\n\treturn false;\n};\n\nAgent.prototype.isRecording = function (){\n\treturn false;\n};\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar protocol$ = require('../protocol'), WIDGET = protocol$.WIDGET, POINTER = protocol$.POINTER, SCON = protocol$.SCON;\n\nvar Widget = require('./widget').Widget;\nvar Delay = require('../util/Delay').Delay;\n\nvar SF = POINTER.STATEFLAGS;\n\nvar util = require('../util/index');\n\nfunction PointerWidget(){ return Widget.apply(this,arguments) };\n\nsubclass$(PointerWidget,Widget);\nexports.PointerWidget = PointerWidget; // export class \nPointerWidget.register('pointer',POINTER);\n\nPointerWidget.prototype.setup = function (){\n\treturn this;\n};\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar Widget = require('./widget').Widget;\n\nfunction LayoutWidget(){ return Widget.apply(this,arguments) };\n\nsubclass$(LayoutWidget,Widget);\nexports.LayoutWidget = LayoutWidget; // export class \nLayoutWidget.register('layout');\n\nLayoutWidget.option('renderWhitespace',{'default': false,overridable: true});\nLayoutWidget.option('viewport',{type: Array,overridable: true});\n\nLayoutWidget.prototype.setup = function (){\n\treturn this;\n};\n\nLayoutWidget.prototype.deserialized = function (){\n\treturn this;\n};\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nfunction len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _4 = Imba.createTagList, _3 = Imba.createTagMap, _5 = Imba.createTagLoopResult, _1 = Imba.createTagScope(/*SCOPEID*/), _2 = Imba.createElementFactory(/*SCOPEID*/);\n/*\n\nEverything that is logged while running examples will be tracked and recorded\nas SIMULATOR.CONSOLE events which includes a compact representation of the\nactual arguments to be logged, and Scrimba-specific information about which\nlocation the log-event originated from.\n\n[LOG,LOGLEVEL,[ARGUMENTS],[FILEID,LOGNR?]]\n\n*/\n\n\nvar PaneWidget$ = require('./PaneWidget'), PaneWidget = PaneWidget$.PaneWidget, PaneView = PaneWidget$.PaneView;\n\nvar protocol$ = require('../protocol'), CONSOLE = protocol$.CONSOLE, SIMULATOR = protocol$.SIMULATOR, POINTER = protocol$.POINTER, ACTION = protocol$.ACTION;\nvar Widget = require('./widget').Widget;\nvar List = require('../util/List').List;\n\nvar util = require('../util/index');\n\nvar depth = 0;\nvar count = 0;\nvar Shim = {};\n\nif (Imba.Events) { Imba.Events.register(['mouseover','mouseout']) };\n\nShim.Instance = function Instance(typ){\n\tthis._type = typ;\n\tthis;\n};\nShim.Instance.prototype.type = function(v){ return this._type; }\nShim.Instance.prototype.setType = function(v){ this._type = v; return this; };\n\n\n\nShim.Func = function Func(typ){\n\tthis._type = typ;\n\tthis;\n};\nShim.Func.prototype.type = function(v){ return this._type; }\nShim.Func.prototype.setType = function(v){ this._type = v; return this; };\n\n\n\nShim.Error = function Error(data){\n\tthis._data = data;\n\tthis.message = data.message;\n\tthis;\n};\n\n\nvar SPACE_CONTEXT = null;\nvar RUNNER_CONTEXT = (typeof window != 'undefined') && window;\n\nvar JSONReviver = function(k,v) {\n\tvar T = CONSOLE.TYPES;\n\t\n\tif ((v instanceof Array) && v[0] == T.MARKER) {\n\t\tswitch (v[1]) {\n\t\t\tcase T.NULL: {\n\t\t\t\treturn null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase T.UNDEFINED: {\n\t\t\t\treturn undefined;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase T.ELEMENT: {\n\t\t\t\tif (v[2] instanceof Array) {\n\t\t\t\t\treturn null;\n\t\t\t\t} else {\n\t\t\t\t\t// FIXME does not work for tables?\n\t\t\t\t\tvar fragment = document.createElement('div');\n\t\t\t\t\tfragment.innerHTML = v[2];\n\t\t\t\t};\n\t\t\t\treturn fragment.firstElementChild;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase T.INSTANCE: {\n\t\t\t\t// console.log 'Create ObjectShim!!',v\n\t\t\t\treturn new Shim.Instance(v[2]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase T.FUNCTION: {\n\t\t\t\treturn new Shim.Func(v[2]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase T.ERROR: {\n\t\t\t\treturn new Shim.Error(v[2]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t};\n\t\n\treturn v;\n};\n\n\nvar ValPart = _1.defineTag('ValPart', function(tag){\n\t\n\ttag.prototype.entry = function (){\n\t\treturn this._entry || (this._entry = this.up('.ConsoleEntry'));\n\t};\n\t\n\ttag.prototype.offsetTopFromConsole = function (){\n\t\tvar top = 0;\n\t\tvar el = this.dom();\n\t\tvar tops = [];\n\t\tvar entry = this.entry();\n\t\t\n\t\twhile (el){\n\t\t\ttop += el.offsetTop;\n\t\t\ttops.push(top);\n\t\t\t\n\t\t\tif (el.contains(entry.dom())) {\n\t\t\t\tbreak;\n\t\t\t};\n\t\t\t\n\t\t\tel = el.offsetParent;\n\t\t};\n\t\t\n\t\t// console.log tops,top\n\t\t\n\t\treturn top;\n\t};\n});\n\n// basic view\nvar Val = _1.defineTag('Val', ValPart, function(tag){\n\ttag.prototype.ref = function(v){ return this.getAttribute('ref'); }\n\ttag.prototype.setRef = function(v){ this.setAttribute('ref',v); return this; };\n\t\n\ttag.prototype.__expanded = {watch: 'expandedDidSet',name: 'expanded'};\n\ttag.prototype.expanded = function(v){ return this._expanded; }\n\ttag.prototype.setExpanded = function(v){\n\t\tvar a = this.expanded();\n\t\tif(v != a) { this._expanded = v; }\n\t\tif(v != a) { this.expandedDidSet && this.expandedDidSet(v,a,this.__expanded) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, data_, $1;\n\t\tdepth++;\n\t\tcount++;\n\t\tthis.$open(0).setChildren(\n\t\t\t((typeof (data_ = this.data())=='string'||data_ instanceof String)) ? (\n\t\t\t\t($[0] || _2(Str,$,0,this)).bindData(this,'data',[]).end()\n\t\t\t) : (((typeof ($1 = this.data())=='number'||$1 instanceof Number)) ? (\n\t\t\t\t($[1] || _2(Num,$,1,this)).bindData(this,'data',[]).end()\n\t\t\t) : ((this.data() instanceof Shim.Instance) ? (\n\t\t\t\t($[2] || _2(Instance,$,2,this)).bindData(this,'data',[]).end()\n\t\t\t) : ((this.data() instanceof Shim.Func) ? (\n\t\t\t\t($[3] || _2(Func,$,3,this)).bindData(this,'data',[]).end()\n\t\t\t) : ((this.data() instanceof Shim.Error) ? (\n\t\t\t\t($[4] || _2(Err,$,4,this)).bindData(this,'data',[]).end()\n\t\t\t) : ((this.data() == null) ? (\n\t\t\t\t($[5] || _2('div',$,5,this).flag('null').setText('null'))\n\t\t\t) : ((this.data() == undefined) ? (\n\t\t\t\t($[6] || _2('div',$,6,this).flag('cundefined').setText('undefined'))\n\t\t\t) : ((this.data() == true) ? (\n\t\t\t\t($[7] || _2('div',$,7,this).flag('cbool').flag('true').setText('true'))\n\t\t\t) : ((this.data() == false) ? (\n\t\t\t\t($[8] || _2('div',$,8,this).flag('cbool').flag('false').setText('false'))\n\t\t\t) : ((this.data() && this.data()._dom) ? (\n\t\t\t\t($[9] || _2(El,$,9,this)).bindData(this.data(),'_dom').end()\n\t\t\t) : ((this.data() instanceof Element) ? (\n\t\t\t\t($[10] || _2(El,$,10,this)).bindData(this,'data',[]).end()\n\t\t\t) : ((typeof this.data() == 'function') ? (\n\t\t\t\t($[11] || _2(Func,$,11,this)).bindData(this,'data',[]).end()\n\t\t\t) : ((depth > 3) ? (\n\t\t\t\t($[12] || _2('div',$,12,this).flag('more').setText(\"...\"))\n\t\t\t) : (Array.isArray(this.data()) ? (\n\t\t\t\t($[13] || _2(Arr,$,13,this)).bindData(this,'data',[]).end()\n\t\t\t) : (((this.data() instanceof Object) || typeof (this.data()) == 'object') ? (\n\t\t\t\t($[14] || _2(Obj,$,14,this)).bindData(this,'data',[]).end()\n\t\t\t) : (\n\t\t\t\t($[15] || _2('span',$,15,this).flag('blank').setText(\"\"))\n\t\t\t)))))))))))))))\n\t\t,3).synced();\n\t\tdepth--;\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.__uid = function (){\n\t\treturn this._uid || (this._uid = this.entry().refForElement(this.dom()));\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\tvar id;\n\t\te.halt();\n\t\treturn id = this.__uid();\n\t};\n\t\n\ttag.prototype.getChildByRef = function (id){\n\t\tvar node = this._dom.firstElementChild._tag;\n\t\t\n\t\tif (node && node.getChildByRef) {\n\t\t\treturn node.getChildByRef(id);\n\t\t};\n\t\t\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.entry().space();\n\t};\n\t\n\ttag.prototype.entry = function (){\n\t\treturn this.up('.ConsoleEntry');\n\t};\n\t\n\ttag.prototype.expandedDidSet = function (bool){\n\t\treturn this.first().flag('expanded',!!bool);\n\t};\n\t\n\ttag.prototype.first = function (){\n\t\treturn Imba.getTagForDom(this.dom().firstElementChild);\n\t};\n\t\n\ttag.prototype.up = function (sel){\n\t\tif (!sel) { return this.parent() };\n\t\treturn this.parent() && this.parent().closest(sel);\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\te.halt();\n\t\t// FIXME find the real space instead\n\t\tif (e.event().target == this.dom() || e.event().target == this.first().dom()) {\n\t\t\t// should utilize ctx instead\n\t\t\treturn this.space().console().push_(ACTION.CONSOLE_VAL_EXPAND,[this.space().console().id(),this.__uid(),!(!!this._expanded)]);\n\t\t};\n\t};\n})\nexports.Val = Val;\n\nVal.DEPTH = 0;\n\nvar Rich = _1.defineTag('Rich', ValPart, function(tag){\n\ttag.prototype.ref = function(v){ return this.getAttribute('ref'); }\n\ttag.prototype.setRef = function(v){ this.setAttribute('ref',v); return this; };\n\t\n\ttag.prototype.body = function (){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.entry = function (){\n\t\treturn this.parent().entry();\n\t};\n\t\n\ttag.prototype.getChildByRef = function (ref){\n\t\tvar entry = this.body().dom().children[ref];\n\t\treturn entry ? entry._tag : null;\n\t};\n});\n\nvar Arr = _1.defineTag('Arr', Rich, function(tag){\n\ttag.prototype.render = function (){\n\t\tvar _t1, self = this, $ = this.$, _t2;\n\t\treturn self.$open(0).setChildren([\n\t\t\t(function tagLoop($0) {\n\t\t\t\tvar _t2, $$ = $0.$iter();\n\t\t\t\tfor (let i = 0, items = iter$(self.data()), len = items.length; i < len; i++) {\n\t\t\t\t\tif (i >= 10) { continue; };\n\t\t\t\t\t$$.push(($0[i] || _2(Val,$0,i)).setData(items[i]).dataset('ref',i).end());\n\t\t\t\t};return $$;\n\t\t\t})($[0] || _3($,0)),\n\t\t\t(self.data().length > 10) ? (\n\t\t\t\t($[1] || _2('div',$,1,self).flag('more').setText(\"...\"))\n\t\t\t) : void(0)\n\t\t],1).synced();\n\t};\n});\n\nvar Str = _1.defineTag('Str', ValPart, function(tag){\n\ttag.prototype.render = function (){\n\t\tvar _t1;\n\t\treturn this.$open(0).setChildren(this.data(),3).synced();\n\t};\n});\n\nvar Num = _1.defineTag('Num', ValPart, function(tag){\n\ttag.prototype.render = function (){\n\t\tvar _t1;\n\t\treturn this.$open(0).setChildren(this.data(),3).synced();\n\t};\n});\n\nvar KeyValPair = _1.defineTag('KeyValPair', ValPart, function(tag){\n\t\n\ttag.prototype.ref = function(v){ return this.getAttribute('ref'); }\n\ttag.prototype.setRef = function(v){ this.setAttribute('ref',v); return this; };\n\t\n\ttag.prototype.entry = function (){\n\t\treturn this._entry || (this._entry = this.up('.ConsoleEntry'));\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\tvar id = this.__uid();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.__uid = function (){\n\t\treturn this._uid || (this._uid = this.entry().refForElement(this.dom()));\n\t};\n\t\n\ttag.prototype.getChildByRef = function (ref){\n\t\treturn this.dom().children[ref]._tag;\n\t};\n\t\n\ttag.prototype.scrollIntoView = function (){\n\t\t// console.log \"KeyValPair.scrollIntoView\"\n\t\tif (this.entry().data().isEnabled()) {\n\t\t\tvar top = this.offsetTopFromConsole();\n\t\t\treturn this.entry().parent().dom().scrollTop = Math.max(top - 40,0);\n\t\t};\n\t};\n});\n\nvar Obj = _1.defineTag('Obj', Rich, function(tag){\n\t\n\ttag.prototype.body = function (){\n\t\treturn this._body;\n\t};\n\t\n\ttag.prototype.name = function (){\n\t\treturn this._name || (this._name = this.data().constructor.name);\n\t};\n\t\n\ttag.prototype.keys = function (){\n\t\treturn Object.keys(this.data());\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, self = this;\n\t\treturn self.$open(0).flag('inline').setChildren(\n\t\t\t(self.name() == 'Object') ? (\n\t\t\t\t(self._body = self._body||_2('div',self).flag('body')).setContent(\n\t\t\t\t\t(function tagLoop($0) {\n\t\t\t\t\t\tvar _t3, _t4, t0;\n\t\t\t\t\t\tfor (let i = 0, items = iter$(self.keys()), len = $0.taglen = items.length, key; i < len; i++) {\n\t\t\t\t\t\t\tkey = items[i];\n\t\t\t\t\t\t\t(t0 = $0[i] || (t0=_2(KeyValPair,$0,i)).flag('pair').setContent([\n\t\t\t\t\t\t\t\t_2('div',t0.$,'A',t0).flag('key'),\n\t\t\t\t\t\t\t\t_2(Val,t0.$,'B',t0).dataset('ref','1')\n\t\t\t\t\t\t\t],2)).dataset('ref',i).setFlag(0,(\"k\" + i)).end((\n\t\t\t\t\t\t\t\tt0.$.A.setContent(key,3),\n\t\t\t\t\t\t\t\tt0.$.B.bindData(self.data(),key).end()\n\t\t\t\t\t\t\t,true));\n\t\t\t\t\t\t};return $0;\n\t\t\t\t\t})($[0] || _4($,0,self._body))\n\t\t\t\t,4)\n\t\t\t) : (\n\t\t\t\t($[1] || _2('div',$,1,self).flag('type')).setContent(self.name(),3)\n\t\t\t)\n\t\t,3).synced();\n\t};\n});\n\nvar Func = _1.defineTag('Func', ValPart, function(tag){\n\ttag.prototype.render = function (){\n\t\tvar _t1;\n\t\treturn this.$open(0).setText(\"Function\").synced();\n\t};\n});\n\nvar Err = _1.defineTag('Err', ValPart, function(tag){\n\ttag.prototype.render = function (){\n\t\tvar _t1;\n\t\treturn this.$open(0).setChildren(this.data().message,3).synced();\n\t};\n});\n\nvar Instance = _1.defineTag('Instance', ValPart, function(tag){\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\treturn this.$open(0).setChildren(\n\t\t\t$[0] || _2('div',$,0,this).flag('type')\n\t\t,2).synced((\n\t\t\t$[0].setContent(\n\t\t\t\tthis.data().type()\n\t\t\t,3)\n\t\t,true));\n\t};\n});\n\n\nvar El = _1.defineTag('El', function(tag){\n\t\n\tvar voidElements = {\n\t\tarea: true,\n\t\tbase: true,\n\t\tbr: true,\n\t\tcol: true,\n\t\tembed: true,\n\t\thr: true,\n\t\timg: true,\n\t\tinput: true,\n\t\tkeygen: true,\n\t\tlink: true,\n\t\tmeta: true,\n\t\tparam: true,\n\t\tsource: true,\n\t\ttrack: true,\n\t\twbr: true,\n\t\tcircle: true,\n\t\tline: true\n\t};\n\t\n\ttag.prototype.el = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.name = function (){\n\t\treturn (this.type() == 8) ? 'comment' : this.el().tagName.toLowerCase();\n\t};\n\t\n\ttag.prototype.type = function (){\n\t\treturn this.el().nodeType;\n\t};\n\t\n\ttag.prototype.classNames = function (){\n\t\tvar cls = (this.el().className || '');\n\t\tif (cls.baseVal != undefined) {\n\t\t\tcls = cls.baseVal;\n\t\t};\n\t\t\n\t\treturn cls.replace(/\\b(rnd(\\d+)|__hover|__focus|__active)(\\s+|$)/g,'').trim();\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, self = this;\n\t\treturn self.$open(0).flag('el').setFlag(-1,(\"type\" + self.type())).flagIf('selfclosing',(voidElements[self.name()])).setChildren(\n\t\t\t(self.type() == 8) ? (\n\t\t\t\t($[0] || _2('span',$,0,self)).setContent(self.el().textContent,3)\n\t\t\t) : Imba.static([\n\t\t\t\t($[1] || _2('div',$,1,self).flag('open')).setContent([\n\t\t\t\t\t($[2] || _2('div',$,2,1).flag('name')).setText(\"<\" + self.name()),\n\t\t\t\t\t(function tagLoop($0) {\n\t\t\t\t\t\tvar _t31, _t4, t0, $$ = $0.$iter();\n\t\t\t\t\t\tfor (let i = 0, items = iter$(self.el().attributes), len = items.length, attr; i < len; i++) {\n\t\t\t\t\t\t\tattr = items[i];\n\t\t\t\t\t\t\tvar v = (attr.name == 'class') ? self.classNames() : attr.value;\n\t\t\t\t\t\t\t$$.push((t0 = $0[i] || (t0=_2('div',$0,i)).flag('attr').setContent([\n\t\t\t\t\t\t\t\t_2('div',t0.$,'A',t0).flag('name'),\n\t\t\t\t\t\t\t\t_2('div',t0.$,'B',t0).flag('value')\n\t\t\t\t\t\t\t],2)).flagIf('hide',(attr.name == 'class' && !v)).end((\n\t\t\t\t\t\t\t\tt0.$.A.setContent(attr.name,3),\n\t\t\t\t\t\t\t\tt0.$.B.setContent(v,3)\n\t\t\t\t\t\t\t,true)));\n\t\t\t\t\t\t};return $$;\n\t\t\t\t\t})($[3] || _3($,3,$[1])),\n\t\t\t\t\t($[4] || _2('div',$,4,1).flag('rb').setText(\">\"))\n\t\t\t\t],1),\n\t\t\t\t\n\t\t\t\t($[5] || _2('div',$,5,self).flag('children')).flagIf('multi',(self.el().children.length > 0)).setContent(\n\t\t\t\t\t(function tagLoop($0,$1,$$) {\n\t\t\t\t\t\tvar _t31;\n\t\t\t\t\t\tfor (let i = 0, items = iter$(self.el().childNodes), len = items.length, child; i < len; i++) {\n\t\t\t\t\t\t\tchild = items[i];\n\t\t\t\t\t\t\tif (child.nodeType == 3) {\n\t\t\t\t\t\t\t\t$$.push(($0[i] || _2('div',$0,i).flag('text')).setContent(child.textContent,3));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$$.push(($1[i] || _2(El,$1,i)).setData(child).end());\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};return $$;\n\t\t\t\t\t})($[6] || _3($,6,$[5]),$[7] || _3($,7,$[5]),_5())\n\t\t\t\t,5),\n\t\t\t\t($[8] || _2('div',$,8,self).flag('close')).setText(\"</\" + self.name() + \">\")\n\t\t\t],2,1)\n\t\t,3).synced();\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\tvar $1;\n\t\tconsole.log('tapped element!');\n\t\tif (this.type() != 8) {\n\t\t\tvar node = Imba.getTagForDom(this.data());\n\t\t\treturn ($1 = node) && $1.ontap && $1.ontap(e);\n\t\t};\n\t};\n})\nexports.El = El;\n\nvar CommentEl = _1.defineTag('CommentEl', El, function(tag){\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1;\n\t\treturn this.$open(0).flag('el').setChildren(this.el().textContent,3).synced();\n\t};\n\t\n\ttag.prototype.ontap = function (){\n\t\treturn this;\n\t};\n})\nexports.CommentEl = CommentEl;\n\nvar ConsoleEntry = _1.defineTag('ConsoleEntry', function(tag){\n\ttag.prototype.type = function(v){ return this._type; }\n\ttag.prototype.setType = function(v){ this._type = v; return this; };\n\ttag.prototype.options = function(v){ return this._options; }\n\ttag.prototype.setOptions = function(v){ this._options = v; return this; };\n\ttag.prototype.offset = function(v){ return this._offset; }\n\ttag.prototype.setOffset = function(v){ this._offset = v; return this; };\n\ttag.prototype.entry = function(v){ return this._entry; }\n\ttag.prototype.setEntry = function(v){ this._entry = v; return this; };\n\t\n\ttag.prototype.__hover = {watch: 'hoverDidSet',name: 'hover'};\n\ttag.prototype.hover = function(v){ return this._hover; }\n\ttag.prototype.setHover = function(v){\n\t\tvar a = this.hover();\n\t\tif(v != a) { this._hover = v; }\n\t\tif(v != a) { this.hoverDidSet && this.hoverDidSet(v,a,this.__hover) }\n\t\treturn this;\n\t};\n\ttag.prototype.__selected = {watch: 'selectedDidSet',name: 'selected'};\n\ttag.prototype.selected = function(v){ return this._selected; }\n\ttag.prototype.setSelected = function(v){\n\t\tvar a = this.selected();\n\t\tif(v != a) { this._selected = v; }\n\t\tif(v != a) { this.selectedDidSet && this.selectedDidSet(v,a,this.__selected) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.hoverDidSet = function (bool){\n\t\treturn this.flag('__hover',!!bool);\n\t};\n\ttag.prototype.selectedDidSet = function (bool){\n\t\treturn this.flag('__selected',!!bool);\n\t};\n\t\n\ttag.prototype.isError = function (){\n\t\treturn this.type() == CONSOLE.LOG_TYPES.ERROR;\n\t};\n\t\n\ttag.prototype.icon = function (){\n\t\tswitch (this.type()) {\n\t\t\tcase CONSOLE.LOG_TYPES.INFO: {\n\t\t\t\treturn 'directions';\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase CONSOLE.LOG_TYPES.WARN: {\n\t\t\t\treturn 'warning';\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase CONSOLE.LOG_TYPES.ERROR: {\n\t\t\t\treturn 'error';\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase CONSOLE.LOG_TYPES.META: {\n\t\t\t\treturn 'report';\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase CONSOLE.LOG_TYPES.RESULT: {\n\t\t\t\treturn 'keyboard_arrow_left';\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault:\n\t\t\t\n\t\t\t\treturn 'info';\n\t\t\n\t\t};\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\tdepth = 0;\n\t\tcount = 0;\n\t\t\n\t\tthis.$open(0).flag('scon').setFlag(-1,(\"t\" + this.type())).setChildren([\n\t\t\t($[0] || _2('span',$,0,this).flag('gutter').flag('icon')),\n\t\t\t(this.counter() > 1) ? (\n\t\t\t\t($[1] || _2('div',$,1,this).flag('badge').flag('repeats')).setContent(this.counter(),3)\n\t\t\t) : void(0),\n\t\t\tthis.body()\n\t\t],1).synced();\n\t\t\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.type = function (){\n\t\treturn this.entry()[1];\n\t};\n\t\n\ttag.prototype.items = function (){\n\t\tvar entry_;\n\t\treturn (entry_ = this.entry()).ITEMS || (entry_.ITEMS = this.data().deserializeParams(this.entry()[0]));\n\t};\n\t\n\ttag.prototype.ref = function (){\n\t\treturn this.entry()[2];\n\t};\n\t\n\ttag.prototype.counter = function (){\n\t\treturn this.entry()[3] || 1;\n\t};\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.data().space();\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tvar _t1, $ = this.$$ || (this.$$ = {}), _t2, t0, self = this;\n\t\treturn (t0 = self._body = self._body||(t0=_2('div',self)).flag('body').flag('items')).flagIf('firstIsString',(self.items() && (typeof self.items()[0]=='string'||self.items()[0] instanceof String))).setContent([\n\t\t\tt0.$.A || _2('div',t0.$,'A',t0).flag('offset'),\n\t\t\t(function tagLoop($0) {\n\t\t\t\tvar _t21;\n\t\t\t\tfor (let i = 0, items = iter$(self.items()), len = $0.taglen = items.length; i < len; i++) {\n\t\t\t\t\t($0[i] || _2(Val,$0,i)).setData(items[i]).dataset('ref',i).end();\n\t\t\t\t};return $0;\n\t\t\t})(t0.$['B'] || _4(t0.$,'B',self._body))\n\t\t],1).end((\n\t\t\tt0.$.A.setContent(self.offset() ? util.msToStr(self.offset()) : '',3)\n\t\t,true));\n\t};\n\t\n\ttag.prototype.onmouseover = function (e){\n\t\tvar rel = e.event().relatedTarget;\n\t\treturn;\n\t\t\n\t\tif (!this.dom().contains(e.event().relatedTarget)) {\n\t\t\tif (this.data().space().recording()) {\n\t\t\t\treturn this.data().options().set('hoverEntry',this.ref());\n\t\t\t};\n\t\t};\n\t};\n\t\n\t\n\ttag.prototype.onmouseout = function (e){\n\t\tvar rel = e.event().relatedTarget;\n\t\treturn;\n\t\t\n\t\tif (!this.dom().contains(rel)) {\n\t\t\tif (this.data().space().recording() && (!rel || !rel.closest('.ConsoleEntry'))) {\n\t\t\t\treturn this.data().options().set('hoverEntry',null);\n\t\t\t};\n\t\t};\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\treturn;\n\t};\n\t\n\ttag.prototype.scrollIntoView = function (){\n\t\t// console.log \"scrollIntoView\"\n\t\t\n\t\tvar par;\n\t\tif (par = this.dom().parentNode) {\n\t\t\tvar scrollTop = par.scrollTop;\n\t\t\tvar offsetHeight = par.offsetHeight;\n\t\t\tvar scrollBottom = scrollTop + offsetHeight;\n\t\t\tvar top = this.dom().offsetTop;\n\t\t\t\n\t\t\tif (top < scrollTop) {\n\t\t\t\treturn par.scrollTop = top;\n\t\t\t} else if (top > scrollBottom) {\n\t\t\t\treturn par.scrollTop = top + 20;\n\t\t\t};\n\t\t\t\n\t\t\t// dom?.scrollIntoViewIfNeeded\n\t\t};\n\t};\n\t\n\ttag.prototype.__uid = function (){\n\t\treturn this._uid || (this._uid = [this.data().id(),this.ref()]);\n\t};\n\t\n\ttag.prototype.__lookup = function (path,idx){\n\t\t// console.log \"ConsoleWidget lookup!\",path,idx\n\t\tif(idx === undefined) idx = 0;\n\t\tvar item = this;\n\t\t\n\t\tif (path instanceof Array) {\n\t\t\twhile (idx < len$(path)){\n\t\t\t\tvar ref = path[idx++];\n\t\t\t\titem = item.getChildByRef(ref);\n\t\t\t};\n\t\t} else {\n\t\t\titem = this.getChildByRef(path);\n\t\t};\n\t\t\n\t\treturn item;\n\t};\n\t\n\ttag.prototype.getChildByRef = function (id){\n\t\treturn this._body.dom().children[id + 1]._tag;\n\t};\n\t\n\ttag.prototype.refForElement = function (el){\n\t\tvar el = el._dom || el;\n\t\tvar path = [];\n\t\tvar ref;\n\t\t\n\t\twhile (el && this.dom().contains(el)){\n\t\t\tif (ref = el.dataset.ref) {\n\t\t\t\tif (ref.match(/^\\d+$/)) {\n\t\t\t\t\tref = parseInt(ref);\n\t\t\t\t};\n\t\t\t\tpath.unshift(ref);\n\t\t\t};\n\t\t\tel = el.parentNode;\n\t\t};\n\t\t\n\t\tpath.unshift(this.ref());\n\t\tpath.unshift(this.data().id());\n\t\t\n\t\treturn path;\n\t};\n})\nexports.ConsoleEntry = ConsoleEntry;\n\n\nvar ConsolePane = _1.defineTag('ConsolePane', PaneView, function(tag){\n\t\n\ttag.prototype.__hoverEntry = {watch: 'hoverEntryDidSet',name: 'hoverEntry'};\n\ttag.prototype.hoverEntry = function(v){ return this._hoverEntry; }\n\ttag.prototype.setHoverEntry = function(v){\n\t\tvar a = this.hoverEntry();\n\t\tif(v != a) { this._hoverEntry = v; }\n\t\tif(v != a) { this.hoverEntryDidSet && this.hoverEntryDidSet(v,a,this.__hoverEntry) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.data().space();\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn this._body || (this._body = this._body||_2('div',this).flag('body'));\n\t};\n\t\n\ttag.prototype.header = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0, _t3;\n\t\treturn (t0 = this._header = this._header||(t0=_2('div',this)).flag('header').on$(0,['tap','toggleEnabled'],this).setContent([\n\t\t\t_2('div',t0.$,'A',t0).flag('title').setText(\"Console\"),\n\t\t\t_2('div',t0.$,'B',t0).flag('tools').setContent(\n\t\t\t\tt0.$.C || _2('div',t0.$,'C','B').flag('tool').flag('toggler').dataset('icon','mup')\n\t\t\t,2)\n\t\t// <btn.icon-btn.refresher icon='not_interested' label='Clear console' cmd='tryclear'>\n\t\t],2)).end((\n\t\t\tt0.$.C.end()\n\t\t,true));\n\t};\n\t\n\ttag.prototype.toggleEnabled = function (){\n\t\tvar v_;\n\t\treturn (this.data().setEnabled(v_ = !this.data().enabled()),v_);\n\t};\n\t\n\ttag.prototype.ontryclear = function (){\n\t\treturn this.data().clear();\n\t};\n\t\n\ttag.prototype.onwheel = function (e){\n\t\treturn e.halt();\n\t};\n\t\n\ttag.prototype.add = function (node){\n\t\tif (this._group) {\n\t\t\tthis._group.add(node);\n\t\t} else {\n\t\t\tthis.body().dom().appendChild(node.dom());\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.rem = function (node){\n\t\tvar par = node.parent();\n\t\tnode.orphanize();\n\t\t\n\t\tif (node == this._group) {\n\t\t\tthis._group = node.PREV_GROUP;\n\t\t};\n\t\t\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.group = function (node){\n\t\tnode.PREV_GROUP = this._group;\n\t\tthis._group = node;\n\t\tthis.body().dom().appendChild(this._group.dom());\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.refresh = function (){\n\t\tvar last = this.body().dom().lastElementChild;\n\t\t\n\t\tif (last && last.offsetParent) {\n\t\t\tthis.body().dom().scrollTop = last.offsetTop + last.offsetHeight;\n\t\t};\n\t\t\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.hoverEntryDidSet = function (new$,old){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.relayout = function (){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.clear = function (){\n\t\tlet res = [];\n\t\tfor (let i = 0, ary = iter$(this.body().dom().children), len = ary.length; i < len; i++) {\n\t\t\tres.push(ary[i]._tag);\n\t\t};\n\t\tvar items = res;\n\t\t\n\t\tthis.body().dom().innerHTML = '';\n\t\treturn items;\n\t};\n\t\n\ttag.prototype.set = function (items){\n\t\tthis.body().dom().innerHTML = '';\n\t\tfor (let i = 0, ary = iter$(items), len = ary.length; i < len; i++) {\n\t\t\tthis._body.dom().appendChild(ary[i].dom());\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.revealEntriesInline = function (){\n\t\t// if the last entry is more than 5 seconds ago we should hide\n\t\t// if it is less than that -- try to make sure the log item\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1;\n\t\tif (false) {};\n\t\t\n\t\treturn this.$open(0).setHoverEntry(this.data().getEntryForId(this.data().hoverEntry())).setChildren([\n\t\t\tthis.header(),\n\t\t\tthis.space().browser().page() ? (\n\t\t\t\tthis.space().browser().page().logs().end()\n\t\t\t) : (\n\t\t\t\tthis.body()\n\t\t\t),\n\t\t\tthis.footer()\n\t\t],1).synced();\n\t};\n})\nexports.ConsolePane = ConsolePane;\n\nfunction Console(){ return PaneWidget.apply(this,arguments) };\n\nsubclass$(Console,PaneWidget);\nexports.Console = Console; // export class \nConsole.register('console',CONSOLE);\n\nConsole.option('hoverEntry');\nConsole.option('selectedEntry');\nConsole.option('enabled',{'default': false,overridable: true});\n\nConsole.prototype.native = function (){\n\treturn console;\n};\n\nConsole.prototype.setup = function (){\n\tthis._entryMap = {};\n\tthis._activeEntries = [];\n\treturn this;\n};\n\nConsole.prototype.nextEntryId = function (){\n\treturn this.space().generateRandomId();\n};\n\nConsole.prototype.addEntry = function (type,params){\n\tvar pars = this.serializeParams(params);\n\t\n\tif (this._queue) {\n\t\tvar prev = this._queue[len$(this._queue) - 1];\n\t\t// see if it is the same type of entry\n\t\tif (prev && JSON.stringify(prev[1][0]) == JSON.stringify(pars)) {\n\t\t\tconsole.log('second entry is the same!');\n\t\t\tprev[1][3]++;\n\t\t} else {\n\t\t\tthis._queue.push([CONSOLE.LOG,[pars,type,this.nextEntryId(),1]]);\n\t\t};\n\t} else {\n\t\tthis.push_(CONSOLE.LOG,[pars,type,this.nextEntryId(),1]);\n\t};\n\t\n\treturn undefined;\n};\n\nConsole.prototype.createEntry = function (type,params,badge){\n\tif(badge === undefined) badge = 1;\n\tvar pars = this.serializeParams(params);\n\treturn [CONSOLE.LOG,[pars,type,this.nextEntryId(),badge]];\n};\n\nConsole.prototype.getEntryForId = function (id){\n\treturn id && this._entryMap[id];\n};\n\nConsole.prototype.getChildById = function (id){\n\treturn id && this._entryMap[id];\n};\n\n// basic system for batching logs during run now\n// should rather hook into push_\nConsole.prototype.startQueue = function (){\n\tthis._queue = [];\n\treturn this;\n};\n\nConsole.prototype.flushQueue = function (){\n\tif (this._queue && len$(this._queue)) {\n\t\tvar count = len$(this._queue);\n\t\tvar items = this._queue;\n\t\t// console.log('flushingQueue',count)\n\t\tif (count > 30) {\n\t\t\tvar first = this._queue.slice(0,10);\n\t\t\tvar last = this._queue.slice(-10);\n\t\t\tvar trunc = this.createEntry(CONSOLE.LOG_TYPES.META,[(\"truncated \" + (count - 20) + \" log entries\")],count - 20);\n\t\t\tfirst.push(trunc);\n\t\t\titems = first.concat(last);\n\t\t};\n\t\tthis.batch_(items);\n\t\tthis;\n\t};\n\t\n\tthis._queue = null;\n\treturn this;\n};\n\n\nConsole.prototype.log = function (){\n\tvar native_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>0 ? i : 0);\n\twhile(i>0) params[i-1] = $0[--i];\n\tthis.addEntry(CONSOLE.LOG_TYPES.LOG,params);\n\treturn (native_ = this.native()).log.apply(native_,params);\n};\n\nConsole.prototype.info = function (){\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>0 ? i : 0);\n\twhile(i>0) params[i-1] = $0[--i];\n\treturn this.addEntry(CONSOLE.LOG_TYPES.INFO,params);\n};\n\nConsole.prototype.error = function (){\n\t// console.log 'Console.error',params and params[0]\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>0 ? i : 0);\n\twhile(i>0) params[i-1] = $0[--i];\n\treturn this.addEntry(CONSOLE.LOG_TYPES.ERROR,params);\n};\n\nConsole.prototype.warn = function (){\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>0 ? i : 0);\n\twhile(i>0) params[i-1] = $0[--i];\n\treturn this.addEntry(CONSOLE.LOG_TYPES.WARN,params);\n};\n\nConsole.prototype.result = function (){\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>0 ? i : 0);\n\twhile(i>0) params[i-1] = $0[--i];\n\treturn this.addEntry(CONSOLE.LOG_TYPES.RESULT,params);\n};\n\nConsole.prototype.clear = function (){\n\treturn this.push_(ACTION.CONSOLE_CLEAR,[]);\n};\n\nConsole.prototype.serializeParams = function (obj){\n\treturn JSON.parse(JSON.stringify(obj,JSONFormatter));\n};\n\nConsole.prototype.deserializeParams = function (obj){\n\tif (obj) {\n\t\tobj = JSON.stringify(obj);\n\t};\n\t\n\tif (typeof obj == 'string') {\n\t\tvar val = JSON.parse(obj,JSONReviver);\n\t\treturn val;\n\t} else {\n\t\treturn obj;\n\t};\n\t\n\t// return typeof obj == 'string' ? JSON.parse(obj,JSONReviver) : obj\n};\n\nConsole.prototype.isEnabled = function (){\n\treturn this.enabled();\n};\n\nConsole.prototype.clearEntryCollections = function (){\n\tthis._errors = null;\n\treturn this._warnings = null;\n};\n\nConsole.prototype.errors = function (){\n\treturn this._errors || (this._errors = this._activeEntries.filter(function(item) { return item[1] == CONSOLE.LOG_TYPES.ERROR; }));\n};\n\nConsole.prototype.apply = function (action){\n\tvar _t1, $1;\n\tvar op = action._params;\n\t\n\tswitch (action._type) {\n\t\tcase ACTION.CONSOLE_CLEAR: {\n\t\t\t// console.log \"CLEAR!\"\n\t\t\tif (true) {\n\t\t\t\top.REV = this.node().clear();\n\t\t\t\top.REVTAB || (op.REVTAB = [this.tab().warnings(),this.tab().errors()]);\n\t\t\t};\n\t\t\t\n\t\t\top.REVACTIVE = this._activeEntries || [];\n\t\t\tthis._activeEntries = [];\n\t\t\tthis.tab().setWarnings(0);\n\t\t\tthis.tab().setErrors(0);\n\t\t\tbreak;\n\t\t}\n\t\tcase ACTION.CONSOLE_LOG: {\n\t\t\tthis.clearEntryCollections();\n\t\t\tvar id = op[2];\n\t\t\tvar typ = op[1];\n\t\t\tvar new$ = !op.ENTRY;\n\t\t\t\n\t\t\tif (true) {\n\t\t\t\t// console.log \"deserialize value\",op[0],deserializeParams(op[0])\n\t\t\t\t// offset is not time(!)\n\t\t\t\tvar entry = op.ENTRY || (op.ENTRY = (_2(ConsoleEntry).flag('collapsed')).setData(this).setEntry(op).setOffset(action._offset).end());\n\t\t\t\tthis._entryMap[id] || (this._entryMap[id] = entry);\n\t\t\t\tthis.node().add(entry);\n\t\t\t};\n\t\t\t\n\t\t\tthis._activeEntries.push(op);\n\t\t\tthis.async('refresh');\n\t\t\tbreak;\n\t\t}\n\t\tcase CONSOLE.VAL_EXPAND: {\n\t\t\tvar item = this.space().__lookup(op[0]);\n\t\t\t($1 = item) && $1.setExpanded && $1.setExpanded(op[1]);\n\t\t\tbreak;\n\t\t}\n\t};\n\t\n\t// async(:refresh)\n\tthis.clearEntryCollections();\n\treturn this;\n};\n\nConsole.prototype.revert = function (action){\n\tvar $1;\n\tthis.clearEntryCollections();\n\tvar op = action._params;\n\t\n\tif (op.ENTRY) {\n\t\tif (true) {\n\t\t\tthis.node().rem(op.ENTRY);\n\t\t};\n\t\t\n\t\tlet item = this._activeEntries.pop();\n\t\tif (op != item) {\n\t\t\tconsole.warn(\"tried op.ENTRY opp\");\n\t\t};\n\t};\n\t\n\tswitch (action._type) {\n\t\tcase ACTION.CONSOLE_CLEAR: {\n\t\t\tif (true) {\n\t\t\t\tthis.node().set(op.REV);\n\t\t\t\tthis.async('refresh');\n\t\t\t};\n\t\t\t\n\t\t\t// where do the next activeEntries go?\n\t\t\tthis._activeEntries = op.REVACTIVE || [];\n\t\t\tbreak;\n\t\t}\n\t\tcase ACTION.CONSOLE_VAL_EXPAND: {\n\t\t\tvar item = this.space().__lookup(op[0]);\n\t\t\t($1 = item) && $1.setExpanded && $1.setExpanded(!(!(!op[1])));\n\t\t\tbreak;\n\t\t}\n\t};\n\t\n\tif (op.REVTAB) {\n\t\tthis.tab().setWarnings(op.REVTAB[0]);\n\t\tthis.tab().setErrors(op.REVTAB[1]);\n\t};\n\t\n\treturn this;\n};\n\nConsole.prototype.refresh = function (){\n\treturn this.node().refresh();\n};\n\nConsole.prototype.title = function (){\n\treturn 'Console';\n};\n\nConsole.prototype.valForOp = function (op){\n\tvar _t1;\n\treturn op.VAL || (op.VAL = (_2(Val)).setData(this.deserializeParams(op[0])).end());\n};\n\nConsole.prototype.dispose = function (){\n\tthis._entryMap = null;\n\treturn this;\n};\n\nConsole.prototype.persist_ = function (){\n\tvar v_;\n\tvar ae = this._activeEntries;\n\tif (ae.length) {\n\t\tthis._data.activeEntries = ae;\n\t} else {\n\t\t(((v_ = this._data.activeEntries),delete this._data.activeEntries, v_));\n\t};\n\treturn this;\n};\n\nConsole.prototype.deserialized = function (){\n\tConsole.prototype.__super__.deserialized.apply(this,arguments);\n\t// the logged items will have no offset\n\t// var e = {OFFSET: 0}\n\tvar ops = this._data.activeEntries;\n\t\n\t// run through the serialized log elements and push\n\t// them as if they were regular events\n\t// FIXME - will not work with new concepts.\n\tif (ops) {\n\t\tfor (let i = 0, items = iter$(ops), len = items.length; i < len; i++) {\n\t\t\tlet e = {_offset: 0,_params: items[i],_type: ACTION.CONSOLE_LOG};\n\t\t\tthis.apply(e);\n\t\t};\n\t};\n\treturn this;\n};\n\nConsole.prototype.node = function (){\n\tvar _t1;\n\treturn this._node || (this._node = (_2(ConsolePane).flag('normal')).setData(this).end());\n};\n", "function Stylesheet(file,options){\n\tvar self = this;\n\tif(options === undefined) options = {};\n\tself._options = options;\n\tself._file = file;\n\tself._dom = false ? true : document.createElement('style');\n\tself._dom.setAttribute('data-name',file.name());\n\tself._dom.innerHTML = '.item { }';\n\t\n\tfile.on('modified',function() { return self.refresh(); });\n\tself.refresh();\n\tself;\n};\n\nexports.Stylesheet = Stylesheet; // export class \nStylesheet.prototype.options = function(v){ return this._options; }\nStylesheet.prototype.setOptions = function(v){ this._options = v; return this; };\nStylesheet.prototype.file = function(v){ return this._file; }\nStylesheet.prototype.setFile = function(v){ this._file = v; return this; };\nStylesheet.prototype.dom = function(v){ return this._dom; }\nStylesheet.prototype.setDom = function(v){ this._dom = v; return this; };\nStylesheet.prototype.__doc = {watch: 'docDidSet',name: 'doc'};\nStylesheet.prototype.doc = function(v){ return this._doc; }\nStylesheet.prototype.setDoc = function(v){\n\tvar a = this.doc();\n\tif(v != a) { this._doc = v; }\n\tif(v != a) { this.docDidSet && this.docDidSet(v,a,this.__doc) }\n\treturn this;\n};\n\nStylesheet.forFile = function (file){\n\treturn file;\n};\n\nStylesheet.prototype.docDidSet = function (new$,prev){\n\tif (false) {};\n\t\n\tif (this.dom().parentNode) {\n\t\tthis.dom().parentNode.removeChild(this.dom());\n\t};\n\t\n\tif (new$) {\n\t\tthis.doc().adoptNode(this.dom());\n\t\treturn this.doc().head.appendChild(this.dom());\n\t} else {\n\t\t// make sure we adopt it away from sandbox\n\t\treturn window.document.adoptNode(this.dom());\n\t};\n};\n\nStylesheet.prototype.refresh = function (){\n\tvar css = this.file().currentBody();\n\tif (this.options().fakePseudoStates) {\n\t\tcss = css.replace(/:(hover|focus|active)/g,function(m,state) { return (\".__\" + state); });\n\t};\n\treturn this.dom().innerHTML = css;\n};\n", "var self = {};\nexports.patchString = self.patchString = function (str,diff){\n\tif (diff instanceof Array) {\n\t\t// diffString returns an empty array when there are no changes\n\t\tif (diff.length == 0) { return str };\n\t\treturn str.substr(0,diff[0]) + diff[2] + str.slice(diff[1]);\n\t} else {\n\t\treturn diff;\n\t};\n};\n\nexports.diffString = self.diffString = function (str0,str1){\n\tvar i = 0;\n\tvar l0 = str0.length;\n\tvar l1 = str1.length;\n\t\n\tif (l1.length < 6) {\n\t\treturn str1;\n\t};\n\t\n\tvar minLen = Math.min(l0,l1);\n\tvar maxLen = Math.max(l0,l1);\n\tvar l = maxLen;\n\t\n\tvar left = 0;\n\t// find first part that is different\n\twhile (i < minLen){\n\t\tvar chr0 = str0[i];\n\t\tvar chr1 = str1[i];\n\t\ti++;\n\t\t\n\t\tif (chr0 == chr1) {\n\t\t\tleft++;\n\t\t} else {\n\t\t\tbreak;\n\t\t};\n\t};\n\t\n\t// equal all the way\n\tif (left == i) {\n\t\t// cut it\n\t\tif (l0 > l1) {\n\t\t\treturn [left,l0,''];\n\t\t} else if (l1 > l0) {\n\t\t\treturn [left,left,str1.slice(left)];\n\t\t};\n\t\treturn [];\n\t};\n\t\n\t// go from the end -- look at first part that is the same\n\twhile (l0 >= left && l1 >= left){\n\t\tchr0 = str0[--l0];\n\t\tchr1 = str1[--l1];\n\t\t\n\t\tif (chr0 != chr1) {\n\t\t\tbreak;\n\t\t};\n\t};\n\t\n\t// right = Math.max(l0 + 1,left)\n\tvar ins = str1.slice(left,l1 + 1);\n\treturn [left,l0 + 1,ins];\n};\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n\nvar DOM = require('../../protocol').DOM;\nvar M = DOM.MUTS;\n\nvar patchString = require('./differ').patchString;\n\nvar parentForNodeType = {\n\thead: 'html',\n\tbody: 'html',\n\tthead: 'table',\n\ttbody: 'table',\n\ttr: 'tbody',\n\ttd: 'tr',\n\tth: 'td',\n\toption: 'select'\n};\n\nfunction DOMPlayer(owner,options){\n\tif(options === undefined) options = {};\n\tthis._owner = owner;\n\tthis._listener = null;\n\tthis._options = options;\n\tthis._queue = [];\n\t\n\tif (true) {\n\t\tthis._context = window;\n\t\tthis._root = document.createElement('body');\n\t};\n\tthis;\n};\n\nexports.DOMPlayer = DOMPlayer; // export class \nDOMPlayer.prototype.root = function(v){ return this._root; }\nDOMPlayer.prototype.setRoot = function(v){ this._root = v; return this; };\n\nDOMPlayer.prototype.__focusNode = {watch: 'focusNodeDidSet',name: 'focusNode'};\nDOMPlayer.prototype.focusNode = function(v){ return this._focusNode; }\nDOMPlayer.prototype.setFocusNode = function(v){\n\tvar a = this.focusNode();\n\tif(v != a) { this._focusNode = v; }\n\tif(v != a) { this.focusNodeDidSet && this.focusNodeDidSet(v,a,this.__focusNode) }\n\treturn this;\n};\nDOMPlayer.prototype.__hoverNode = {watch: 'hoverNodeDidSet',name: 'hoverNode'};\nDOMPlayer.prototype.hoverNode = function(v){ return this._hoverNode; }\nDOMPlayer.prototype.setHoverNode = function(v){\n\tvar a = this.hoverNode();\n\tif(v != a) { this._hoverNode = v; }\n\tif(v != a) { this.hoverNodeDidSet && this.hoverNodeDidSet(v,a,this.__hoverNode) }\n\treturn this;\n};\nDOMPlayer.prototype.__activeNode = {watch: 'activeNodeDidSet',name: 'activeNode'};\nDOMPlayer.prototype.activeNode = function(v){ return this._activeNode; }\nDOMPlayer.prototype.setActiveNode = function(v){\n\tvar a = this.activeNode();\n\tif(v != a) { this._activeNode = v; }\n\tif(v != a) { this.activeNodeDidSet && this.activeNodeDidSet(v,a,this.__activeNode) }\n\treturn this;\n};\nDOMPlayer.prototype.scrollNode = function(v){ return this._scrollNode; }\nDOMPlayer.prototype.setScrollNode = function(v){ this._scrollNode = v; return this; };\nDOMPlayer.prototype.__selection = {watch: 'selectionDidSet',name: 'selection'};\nDOMPlayer.prototype.selection = function(v){ return this._selection; }\nDOMPlayer.prototype.setSelection = function(v){\n\tvar a = this.selection();\n\tif(v != a) { this._selection = v; }\n\tif(v != a) { this.selectionDidSet && this.selectionDidSet(v,a,this.__selection) }\n\treturn this;\n};\n\nDOMPlayer.prototype.attachTo = function (win,root){\n\t\n\tif (this._root) { // .hasChildNodes\n\t\t// console.warn 'already have a root!!!'\n\t\tvar body = win.document.body;\n\t\twin.document.adoptNode(this._root);\n\t\troot.parentNode.replaceChild(this._root,root);\n\t\tthis.reindexNodes();\n\t} else {\n\t\tthis._root = root;\n\t};\n\t\n\tthis._context = win;\n\t\n\t// should not be able to submit anyhow no?\n\tthis._context.onsubmit = function(e) {\n\t\te.stopPropagation();\n\t\te.preventDefault();\n\t\treturn false;\n\t};\n\t\n\treturn this;\n};\n\nDOMPlayer.prototype.win = function (){\n\treturn this._context;\n};\n\nDOMPlayer.prototype.doc = function (){\n\treturn this.win().document;\n};\n\nDOMPlayer.prototype.indexNode = function (node,includeSelf){\n\tif(includeSelf === undefined) includeSelf = true;\n\tif (!node.hasChildNodes()) {\n\t\tif (!includeSelf) { return this };\n\t\tlet len = this._nodes.push(node);\n\t\tnode.SCRIMBA_INDEX = len - 1;\n\t\treturn this;\n\t};\n\t\n\tvar show = NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_COMMENT;\n\tvar walker = this.doc().createNodeIterator(node,show,null);\n\tvar item;\n\twhile (item = walker.nextNode()){\n\t\tif (includeSelf || item != node) {\n\t\t\titem.SCRIMBA_INDEX = this._nodes.push(item) - 1;\n\t\t};\n\t};\n\t\n\treturn this;\n};\n\nDOMPlayer.prototype.reindexNodes = function (){\n\tthis._nodes = [];\n\tthis.indexNode(this.root());\n\treturn this;\n};\n\nDOMPlayer.prototype.nodeForPath = function (path){\n\treturn this._nodes ? this._nodes[path] : null;\n};\n\nDOMPlayer.prototype.deserializeNode = function (value){\n\tif ((typeof value=='number'||value instanceof Number)) {\n\t\treturn this.nodeForPath(value);\n\t} else {\n\t\treturn this.nodeForHTML(value);\n\t};\n};\n\nDOMPlayer.prototype.serializeRoot = function (){\n\t// should remove certain classes etc?\n\treturn this.root().innerHTML;\n};\n\nDOMPlayer.prototype.toSnapshot = function (o){\n\t// how will this work with\n\tif(o === undefined) o = {};\n\treturn {html: this.serializeRoot()};\n};\n\nDOMPlayer.prototype.fromSnapshot = function (o){\n\tif (o && o.html) {\n\t\tthis.root().innerHTML = o.html;\n\t};\n\treturn this;\n};\n\nDOMPlayer.prototype.nodeForHTML = function (html){\n\tif (html instanceof Array) {\n\t\t// really?\n\t\thtml = \"<div>placeholder</div>\";\n\t} else if (html.text) {\n\t\treturn this.doc().createTextNode(html.text);\n\t} else if (html.comment) {\n\t\treturn this.doc().createComment(html.comment);\n\t} else if (html.TYPE == 8) {\n\t\treturn this.doc().createComment(html.value);\n\t};\n\t\n\tvar type = html.slice(1).match(/^\\w+/)[0];\n\tvar wrap = this.doc().createElement(parentForNodeType[type] || 'div');\n\twrap.innerHTML = html;\n\treturn (type == 'body') ? wrap.lastElementChild : wrap.firstElementChild;\n};\n\n\nDOMPlayer.prototype.cleanTextSplitters = function (node){\n\t\n\tvar walker = this.doc().createNodeIterator(node,NodeFilter.SHOW_COMMENT,null);\n\tvar item;\n\twhile (item = walker.nextNode()){\n\t\tif (item.textContent == '\u00A7S\u00A7') {\n\t\t\titem.parentNode.removeChild(item);\n\t\t} else if (item.textContent == '\u00A7S\u00A7B') {\n\t\t\titem.parentNode.replaceChild(this.doc().createTextNode(\"\"),item);\n\t\t};\n\t};\n\treturn node;\n};\n\n\nDOMPlayer.prototype.applyMutations = function (muts){\n\t// console.log 'applying mutations!!',muts\n\tvar node;\n\tvar reindex = false;\n\t\n\tfor (let i = 0, items = iter$(muts), len = items.length, mut; i < len; i++) {\n\t\tmut = items[i];\n\t\tif (mut[0] == M.INIT) {\n\t\t\t// we do want to reuse the same nodes on subsequent loads\n\t\t\treindex = true;\n\t\t\tthis.setSelection(null);\n\t\t\tmut.PREV || (mut.PREV = [].slice.call(this.root().childNodes));\n\t\t\t\n\t\t\t// could the init refer to nodes that already exist?\n\t\t\tif (mut.NODES) {\n\t\t\t\tthis.root().innerHTML = '';\n\t\t\t\tfor (let j = 0, ary = iter$(mut.NODES), len = ary.length; j < len; j++) {\n\t\t\t\t\tthis.root().appendChild(ary[j]);\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tthis.root().innerHTML = mut[1];\n\t\t\t\tif (mut[1].indexOf('\u00A7S\u00A7') >= 0) {\n\t\t\t\t\tthis.cleanTextSplitters(this.root());\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tmut.NODES = [].slice.call(this.root().childNodes);\n\t\t\t};\n\t\t} else if (mut[0] == M.INSERT) {\n\t\t\treindex = true;\n\t\t\tvar parentNode = this.nodeForPath(mut[1]);\n\t\t\tvar insertIndex = mut[2];\n\t\t\tvar nodeToInsert = mut.NODE || (mut.NODE = this.deserializeNode(mut[3]));\n\t\t\t\n\t\t\tvar rel = parentNode.childNodes[insertIndex];\n\t\t\tif (rel) {\n\t\t\t\t// console.log 'insert at index?',rel\n\t\t\t\tparentNode.insertBefore(nodeToInsert,rel);\n\t\t\t} else {\n\t\t\t\tparentNode.appendChild(nodeToInsert);\n\t\t\t};\n\t\t\t\n\t\t\tthis.indexNode(nodeToInsert);\n\t\t} else if (mut[0] == M.INSERT_ADJACENT) {\n\t\t\t// console.log 'INSERT_ADJACENT',mut\n\t\t\treindex = true;\n\t\t\t\n\t\t\tlet relNode = mut.RELNODE || (mut.RELNODE = this.nodeForPath(mut[1]));\n\t\t\tlet relPos = M.POS[mut[2]];\n\t\t\t\n\t\t\t// if this has already been applied before - just redo\n\t\t\tif (mut.NODES) {\n\t\t\t\tfor (let j = 0, ary = iter$(mut.NODES), len = ary.length, el; j < len; j++) {\n\t\t\t\t\tel = ary[j];\n\t\t\t\t\tif (mut[2] == 0) { // beforebegin\n\t\t\t\t\t\trelNode.parentNode.insertBefore(el,relNode);\n\t\t\t\t\t} else if (mut[2] == 2) { // beforeend\n\t\t\t\t\t\trelNode.appendChild(el); // .insertAdjacentElement( relPos, el )\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log(\"node not added in M.INSERT_ADJACENT!!\",mut);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\t// continue?\n\t\t\t\tcontinue;\n\t\t\t};\n\t\t\t\n\t\t\tlet elements = mut[3];\n\t\t\tlet relPrev = relNode.previousSibling;\n\t\t\tlet relNext = relNode.nextSibling;\n\t\t\tlet relPar = relNode.parentNode;\n\t\t\tlet relLastChild = relNode.lastChild;\n\t\t\tlet mockNode;\n\t\t\tlet mockHTML = '';\n\t\t\t\n\t\t\t// if we have preindexed items -- skip indexing these\n\t\t\tlet skipIndexing = [];\n\t\t\t\n\t\t\t/*\n\t\t\t\t\t\t\tWe need to track which events we are adding. Since\n\t\t\t\t\t\t\tinsertAdjacentHTML could add several elements we want a\n\t\t\t\t\t\t\tclean general way to track it. The easiest is to simply\n\t\t\t\t\t\t\tlook at the common parent -- then iterate over all of them\n\t\t\t\t\t\t\tat the end\n\t\t\t\t\t\t\t*/\n\t\t\t\n\t\t\t\n\t\t\t// if we are supposed to insert before a non-element node\n\t\t\t// we need to hack around it to still allow using insertAdjacent\n\t\t\tif (mut[2] == 0 && relNode.nodeType != Node.ELEMENT_NODE) {\n\t\t\t\tmockNode = document.createElement('span');\n\t\t\t\trelPar.insertBefore(mockNode,relNode);\n\t\t\t\trelNode = mockNode;\n\t\t\t};\n\t\t\t\n\t\t\tif (typeof elements == 'number') {\n\t\t\t\tlet insNode = this.nodeForPath(elements);\n\t\t\t\trelNode.insertAdjacentElement(relPos,insNode);\n\t\t\t\tskipIndexing.push(insNode); // should it skip though?\n\t\t\t\tmut.NODES = [insNode];\n\t\t\t\tif (mockNode) { relPar.removeChild(mockNode) };\n\t\t\t\tcontinue;\n\t\t\t} else if (typeof elements == 'string') {\n\t\t\t\t\n\t\t\t\trelNode.insertAdjacentHTML(relPos,elements);\n\t\t\t\tmockHTML += elements;\n\t\t\t} else {\n\t\t\t\t// add all the nodes into a shared node first?\n\t\t\t\t// or add a helpernode at the first place and remove it later\n\t\t\t\tfor (let i = 0, ary = iter$(elements), len = ary.length, el; i < len; i++) {\n\t\t\t\t\tel = ary[i];\n\t\t\t\t\tif (typeof el == 'string') {\n\t\t\t\t\t\trelNode.insertAdjacentHTML(relPos,el);\n\t\t\t\t\t\tmockHTML += el;\n\t\t\t\t\t} else if (typeof el == 'number') {\n\t\t\t\t\t\tlet insNode = this.nodeForPath(el);\n\t\t\t\t\t\trelNode.insertAdjacentElement(relPos,insNode);\n\t\t\t\t\t\tskipIndexing.push(insNode);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\t// not needed for single preindexed elements\n\t\t\tlet addEl;\n\t\t\tlet addedElements = [];\n\t\t\t\n\t\t\t// are there textsplitters here we need to erase?\n\t\t\tif (mockHTML.indexOf('\u00A7S\u00A7') >= 0) {\n\t\t\t\tthis.cleanTextSplitters(relPar);\n\t\t\t};\n\t\t\t\n\t\t\tif (relPos == 'beforeend') {\n\t\t\t\taddEl = relLastChild ? relLastChild.nextSibling : relNode.firstChild;\n\t\t\t} else if (relPos == 'beforebegin') {\n\t\t\t\taddEl = relPrev ? relPrev.nextSibling : relPar.firstChild;\n\t\t\t};\n\t\t\t\n\t\t\twhile (addEl){\n\t\t\t\tif (addEl == relNode) { break; };\n\t\t\t\t\n\t\t\t\tif (skipIndexing.indexOf(addEl) < 0) {\n\t\t\t\t\t// should we really skip?\n\t\t\t\t\tthis.indexNode(addEl);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\taddedElements.push(addEl);\n\t\t\t\taddEl = addEl.nextSibling;\n\t\t\t};\n\t\t\t\n\t\t\tif (mockNode) {\n\t\t\t\trelPar.removeChild(mockNode);\n\t\t\t};\n\t\t\t// console.log \"added elements\",addedElements\n\t\t\tmut.NODES = addedElements;\n\t\t} else if (mut[0] == M.REMOVE) {\n\t\t\treindex = true;\n\t\t\t// var node = nodeForPath(mut[1])\n\t\t\tif (node = (mut.NODE || (mut.NODE = this.nodeForPath(mut[1])))) {\n\t\t\t\t// to remember where to reinsert it?\n\t\t\t\t// what if the sibling is also altered within the same mutation?\n\t\t\t\tmut.REL || (mut.REL = node.nextSibling);\n\t\t\t\tmut.PARENT || (mut.PARENT = node.parentNode);\n\t\t\t\t\n\t\t\t\tif (node.parentNode) {\n\t\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"M.REMOVE has no parent\",node,node.parentNode,mut,mut.PARENT);\n\t\t\t\t};\n\t\t\t};\n\t\t} else if (mut[0] == M.SETTEXT) {\n\t\t\tif (node = mut.NODE = this.nodeForPath(mut[1])) {\n\t\t\t\tmut.PREV = node.textContent;\n\t\t\t\tnode.textContent = patchString(mut.PREV,mut[2]);\n\t\t\t};\n\t\t} else {\n\t\t\tnode = mut.NODE = this.nodeForPath(mut[1]);\n\t\t\t\n\t\t\tif (node && mut[0] == M.SETPROP) {\n\t\t\t\tvar key = M.NAME_MAP[mut[2]] || mut[2];\n\t\t\t\tmut.PREV || (mut.PREV = node[key]);\n\t\t\t\tnode[key] = mut[3];\n\t\t\t} else if (node && mut[0] == M.SETATTR) {\n\t\t\t\tkey = M.NAME_MAP[mut[2]] || mut[2];\n\t\t\t\tmut.PREV || (mut.PREV = node.getAttribute(key));\n\t\t\t\t\n\t\t\t\tif (key == 'class') {\n\t\t\t\t\tmut.STATEFLAGS || (mut.STATEFLAGS = node.className.split(\" \").filter(function(f) { return f.match(/^__\\w+/); }));\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (mut[3] == null) {\n\t\t\t\t\tnode.removeAttribute(key);\n\t\t\t\t} else {\n\t\t\t\t\tnode.setAttribute(key,mut[3]);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (mut.STATEFLAGS) {\n\t\t\t\t\t// add stateflags afterwards\n\t\t\t\t\tmut.STATEFLAGS.map(function(f) { return node.classList.add(f); });\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n\t\n\tif (reindex) this.reindexNodes();\n\treturn this;\n};\n\nDOMPlayer.prototype.revertMutations = function (muts){\n\tvar node;\n\tvar reindex = false;\n\tvar nr = len$(muts) - 1;\n\t\n\twhile (nr >= 0){\n\t\tvar mut = muts[nr--];\n\t\t\n\t\t// we should remove it instead\n\t\tif (mut[0] == M.INIT) {\n\t\t\tthis.root().innerHTML = '';\n\t\t\tfor (let i = 0, items = iter$(mut.PREV), len = items.length; i < len; i++) {\n\t\t\t\tthis.root().appendChild(items[i]);\n\t\t\t};\n\t\t\tthis.setSelection(null);\n\t\t\treindex = true;\n\t\t} else if (mut[0] == M.INSERT) {\n\t\t\treindex = true;\n\t\t\tif (node = mut.NODE) {\n\t\t\t\tif (node.parentNode) {\n\t\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"revert INSERT - no parent!\",node);\n\t\t\t\t};\n\t\t\t};\n\t\t} else if (mut[0] == M.INSERT_ADJACENT) {\n\t\t\treindex = true;\n\t\t\tfor (let i = 0, items = iter$(mut.NODES), len = items.length, node; i < len; i++) {\n\t\t\t\tnode = items[i];\n\t\t\t\tif (node.parentNode) {\n\t\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.warn(\"revert INSERT_ADJACENT - no parent!\",node,mut);\n\t\t\t\t};\n\t\t\t};\n\t\t} else if (mut[0] == M.REMOVE) {\n\t\t\treindex = true;\n\t\t\t// insert it where it was when removed.. including index?\n\t\t\tvar par = mut.PARENT;\n\t\t\tmut.REL ? par.insertBefore(mut.NODE,mut.REL) : par.appendChild(mut.NODE);\n\t\t} else if (mut[0] == M.SETTEXT && mut.NODE) {\n\t\t\tmut.NODE.textContent = mut.PREV;\n\t\t} else if (mut[0] == M.SETPROP && mut.NODE) {\n\t\t\tvar key = M.NAME_MAP[mut[2]] || mut[2];\n\t\t\tmut.NODE[key] = mut.PREV;\n\t\t} else if (mut[0] == M.SETATTR && mut.NODE) {\n\t\t\tkey = M.NAME_MAP[mut[2]] || mut[2];\n\t\t\t\n\t\t\tif (mut.PREV == null) {\n\t\t\t\tmut.NODE.removeAttribute(key);\n\t\t\t} else {\n\t\t\t\tmut.NODE.setAttribute(key,mut.PREV);\n\t\t\t};\n\t\t};\n\t};\n\t\n\tif (reindex) this.reindexNodes();\n\treturn this;\n};\n\nDOMPlayer.prototype.synced_ = function (){\n\treturn this;\n};\n\nDOMPlayer.prototype.refreshPseudoClass = function (flag,new$,old){\n\t// remove hover classes upwards\n\twhile (old && old != this.root() && (!(new$) || !old.contains(new$))){\n\t\tif (old.classList) {\n\t\t\told.classList.remove(flag);\n\t\t};\n\t\told = old.parentNode;\n\t};\n\t\n\t// old.removeAttribute('mhover') if old\n\t// new.setAttribute('mhover','hover') if new\n\twhile (new$ && new$ != this.root() && this.root().contains(new$)){\n\t\tif (new$.classList) { new$.classList.add(flag) };\n\t\tnew$ = new$.parentNode;\n\t};\n\treturn;\n};\n\nDOMPlayer.prototype.focusNodeDidSet = function (new$,old){\n\t// refreshPseudoClass('__focus',new,old)\n\tif (old && old.classList) {\n\t\told.classList.remove('__focus');\n\t};\n\tif (new$ && new$.classList) {\n\t\treturn new$.classList.add('__focus');\n\t};\n};\n\n\nDOMPlayer.prototype.hoverNodeDidSet = function (new$,old){\n\t// TODO should happen async?\n\treturn this.refreshPseudoClass('__hover',new$,old);\n};\n\nDOMPlayer.prototype.activeNodeDidSet = function (new$,old){\n\t// TODO should happen async?\n\treturn this.refreshPseudoClass('__active',new$,old);\n};\n\nDOMPlayer.prototype.selectionDidSet = function (op,old){\n\t// TODO should happen async?\n\tif (this.win() == window || !(this.win()) || !this.win().getSelection) {\n\t\t// console.log 'in local window -- dropping'\n\t\treturn this;\n\t};\n\t\n\tvar sel = this.win().getSelection();\n\t\n\tif (!sel) { return };\n\t\n\tif (!op || !op.NODE || op.NODE == this.root()) {\n\t\tif (sel) { sel.removeAllRanges() };\n\t\treturn this;\n\t};\n\t\n\tvar anchor = op.NODE;\n\tvar a = op[1];\n\tvar b = op[2];\n\t// FIXME should we not cache the endNode as well?\n\tvar endNode = op[3] ? this.nodeForPath(op[3]) : anchor;\n\t\n\tif (anchor.nodeName == 'INPUT' || anchor.nodeName == 'TEXTAREA') {\n\t\tvar reg = /text|search|password|tel|url/;\n\t\t\n\t\tif (anchor.nodeName == 'INPUT' && !reg.test(anchor.type)) {\n\t\t\treturn;\n\t\t};\n\t\t\n\t\tif (a < b) {\n\t\t\tanchor.setSelectionRange(a,b,'forward');\n\t\t} else if (a > b) {\n\t\t\tanchor.setSelectionRange(b,a,'backward');\n\t\t} else {\n\t\t\tanchor.setSelectionRange(a,b,'none');\n\t\t};\n\t} else {\n\t\t// if anchor:nodeType == 3\n\t\tvar range = this.doc().createRange();\n\t\t\n\t\tif (anchor != endNode) {\n\t\t\tvar diff = anchor.compareDocumentPosition(endNode); // & Node.DOCUMENT_POSITION_FOLLOWING\n\t\t\tvar preceding = diff & Node.DOCUMENT_POSITION_PRECEDING;\n\t\t\t// console.warn \"SELECTION\",diff,preceding\n\t\t\t\n\t\t\tif (preceding) {\n\t\t\t\trange.setStart(endNode,b);\n\t\t\t\trange.setEnd(anchor,a);\n\t\t\t} else {\n\t\t\t\trange.setStart(anchor,a);\n\t\t\t\trange.setEnd(endNode,b);\n\t\t\t};\n\t\t} else {\n\t\t\t// text\n\t\t\tif (anchor.nodeType == 3) {\n\t\t\t\ta = Math.min(anchor.length,a);\n\t\t\t\tb = Math.min(anchor.length,b);\n\t\t\t};\n\t\t\t\n\t\t\tif (a <= b) {\n\t\t\t\trange.setStart(anchor,a);\n\t\t\t\trange.setEnd(anchor,b);\n\t\t\t} else {\n\t\t\t\trange.setStart(anchor,b);\n\t\t\t\trange.setEnd(anchor,a);\n\t\t\t};\n\t\t\tif (a == b) {\n\t\t\t\trange.collapse();\n\t\t\t};\n\t\t};\n\t\t\n\t\tsel.removeAllRanges();\n\t\tsel.addRange(range);\n\t};\n\t\n\treturn;\n};\n\nDOMPlayer.prototype.dispose = function (){\n\tthis.setActiveNode(null);\n\tthis.setFocusNode(null);\n\tthis.setHoverNode(null);\n\tthis.setSelection(null);\n\tthis._nodes = [];\n\tthis._context = null;\n\treturn this;\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar Imba = require('imba1');\nfunction ScrimbaGesture(touch,options){\n\tvar self = this;\n\tScrimbaGesture.Active.push(self);\n\tself._catcher = function(e) {\n\t\te.preventDefault();\n\t\treturn e.stopPropagation();\n\t};\n\t\n\tself._options = options;\n\tself._touch = touch;\n\tself._type = options.type || 'gesture';\n\tself._handler = options.handler || touch.target();\n\tdocument.addEventListener('selectstart',self._catcher,true);\n\t\n\tself._checkForMultitouch = setTimeout(function() {\n\t\tif (Imba.Touch.count() > 1 && !touch._cancelled) {\n\t\t\ttouch._active = false;\n\t\t\treturn self.ontouchcancel(touch);\n\t\t};\n\t},300);\n\t\n\tself.delegate((\"on\" + (self._type) + \"init\"));\n\tself;\n};\n\nsubclass$(ScrimbaGesture,Imba.TouchGesture);\nexports.ScrimbaGesture = ScrimbaGesture; // export class \nScrimbaGesture.prototype.prevCursor = function(v){ return this._prevCursor; }\nScrimbaGesture.prototype.setPrevCursor = function(v){ this._prevCursor = v; return this; };\nScrimbaGesture.prototype.cursor = function(v){ return this._cursor; }\nScrimbaGesture.prototype.setCursor = function(v){ this._cursor = v; return this; };\nScrimbaGesture.prototype.type = function(v){ return this._type; }\nScrimbaGesture.prototype.setType = function(v){ this._type = v; return this; };\nScrimbaGesture.prototype.box = function(v){ return this._box; }\nScrimbaGesture.prototype.setBox = function(v){ this._box = v; return this; };\nScrimbaGesture.prototype.options = function(v){ return this._options; }\nScrimbaGesture.prototype.setOptions = function(v){ this._options = v; return this; };\nScrimbaGesture.prototype.touch = function(v){ return this._touch; }\nScrimbaGesture.prototype.setTouch = function(v){ this._touch = v; return this; };\nScrimbaGesture.prototype.handler = function(v){ return this._handler; }\nScrimbaGesture.prototype.setHandler = function(v){ this._handler = v; return this; };\n\nScrimbaGesture.Active = [];\n\nScrimbaGesture.options = function (touch,o){\n\tif(o === undefined) o = {};\n\tvar handler = touch.sourceTarget().closest('[data-gesture]');\n\t// var type = handler and handler.dataset('gesture') or 'gesture'\n\to.type || (o.type = handler && handler.dataset('gesture'));\n\to.handler || (o.handler = handler);\n\to.cursor || (o.cursor = window.getComputedStyle(touch.sourceTarget().dom()).cursor);\n\t\n\tif (o.type) {\n\t\tlet parts = o.type.split(\",\");\n\t\to.type = parts[0];\n\t\t\n\t\tfor (let i = 0, items = iter$(parts), len = items.length; i < len; i++) {\n\t\t\to[items[i]] || (o[items[i]] = true);\n\t\t};\n\t};\n\treturn o;\n};\n\nScrimbaGesture.wrap = function (touch,o){\n\tif(o === undefined) o = {};\n\tvar handler = touch.sourceTarget().closest('[data-gesture]');\n\t// var type = handler and handler.dataset('gesture') or 'gesture'\n\to.type || (o.type = handler && handler.dataset('gesture'));\n\to.handler || (o.handler = handler);\n\to.cursor || (o.cursor = window.getComputedStyle(touch.sourceTarget().dom()).cursor);\n\t\n\t// dont do for multitouch\n\tif (Imba.Touch.count() > 1) {\n\t\treturn;\n\t};\n\t\n\tif (o.type) {\n\t\tlet parts = o.type.split(\",\");\n\t\to.type = parts[0];\n\t\t\n\t\tfor (let i = 0, items = iter$(parts), len = items.length; i < len; i++) {\n\t\t\to[items[i]] || (o[items[i]] = true);\n\t\t};\n\t\treturn touch.extend(new this(touch,o));\n\t};\n};\n\nScrimbaGesture.prototype.dx = function (){\n\treturn this._touch.dx();\n};\nScrimbaGesture.prototype.dy = function (){\n\treturn this._touch.dy();\n};\nScrimbaGesture.prototype.x = function (){\n\treturn this._touch.x();\n};\nScrimbaGesture.prototype.y = function (){\n\treturn this._touch.y();\n};\n\nScrimbaGesture.prototype.clamp = function (min,val,max,round){\n\tif(round === undefined) round = 1;\n\treturn Math.min(Math.max(Math.round(val / round) * round,min),max);\n};\n\nScrimbaGesture.prototype.target = function (){\n\treturn this._touch.target();\n};\n\nScrimbaGesture.prototype.onstart = function (t){\n\tvar target_, v_;\n\tthis._started = true;\n\tdocument.body.classList.add('touching');\n\t(target_ = this.target()) && target_.flag && target_.flag('gesturing');\n\tif ((this.setCursor(v_ = this._options.cursor),v_)) {\n\t\tthis.setPrevCursor(document.body.style.cursor);\n\t\tdocument.body.style.cursor = this.cursor();\n\t};\n\treturn this.delegate((\"on\" + (this._type) + \"start\"));\n};\n\nScrimbaGesture.prototype.onupdate = function (t){\n\treturn this.delegate((\"on\" + (this._type) + \"update\"));\n};\n\nScrimbaGesture.prototype.ontouchupdate = function (t){\n\tif (!this._started) {\n\t\tthis.onstart(t);\n\t\tthis._started = true;\n\t};\n\tif (this._started) { this.onupdate(t) };\n\treturn this;\n};\n\nScrimbaGesture.prototype.ontouchend = function (t){\n\tvar target_;\n\tif (this._started) {\n\t\t(target_ = this.target()) && target_.unflag && target_.unflag('gesturing');\n\t\tthis.delegate((\"on\" + (this._type) + \"end\"));\n\t};\n\tthis.teardown(t);\n\treturn this;\n};\n\nScrimbaGesture.prototype.ontouchcancel = function (t){\n\tvar target_;\n\tif (this._started) {\n\t\t(target_ = this.target()) && target_.unflag && target_.unflag('gesturing');\n\t\tthis.delegate((\"on\" + (this._type) + \"cancel\"));\n\t};\n\tthis.teardown(t);\n\treturn this;\n};\n\nScrimbaGesture.prototype.delegate = function (name){\n\tif (this[name]) {\n\t\treturn this[name](this);\n\t} else if (this._handler && this._handler[name]) {\n\t\treturn this._handler[name](this);\n\t} else if (this.target()[name]) {\n\t\treturn this.target()[name](this);\n\t};\n};\n\nScrimbaGesture.prototype.teardown = function (){\n\tlet idx = ScrimbaGesture.Active.indexOf(this);\n\tif (idx >= 0) { ScrimbaGesture.Active.splice(idx,1) };\n\tclearTimeout(this._checkForMultitouch);\n\tdocument.body.style.cursor = this.prevCursor() || '';\n\tdocument.body.classList.remove('touching'); // what if there are other gestures?\n\treturn document.removeEventListener('selectstart',this._catcher,true);\n};\n\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar ScrimbaGesture = require('./ScrimbaGesture').ScrimbaGesture;\n\nfunction WindowGesture(){\n\tWindowGesture.prototype.__super__.constructor.apply(this,arguments);\n\tthis.touch().capture();\n\tthis;\n};\n\nsubclass$(WindowGesture,ScrimbaGesture);\nexports.WindowGesture = WindowGesture; // export class \nWindowGesture.prototype.box = function(v){ return this._box; }\nWindowGesture.prototype.setBox = function(v){ this._box = v; return this; };\n\nWindowGesture.prototype.getLayout = function (target){\n\tif(target === undefined) target = this.target();\n\tvar el = target.dom();\n\t\n\treturn {\n\t\ttop: el.offsetTop,\n\t\tleft: el.offsetLeft,\n\t\twidth: el.offsetWidth,\n\t\theight: el.offsetHeight\n\t};\n};\n\nWindowGesture.prototype.onstart = function (){\n\tthis._box = this.target().dom().getBoundingClientRect();\n\tthis._outer = this.target().dom().offsetParent.getBoundingClientRect();\n\tthis._layout = this.getLayout();\n\tWindowGesture.prototype.__super__.onstart.apply(this,arguments);\n\treturn this;\n};\n\nWindowGesture.prototype.onmoveupdate = function (t){\n\tvar dy = Math.max(-(this._box.top - 34),this.dy());\n\tif (this.options().noTranslate) {\n\t\tthis.target().css({left: this._layout.left + this.dx(),top: this._layout.top + dy});\n\t} else {\n\t\tthis.target().css({transform: (\"translate(\" + this.dx() + \"px,\" + dy + \"px)\")});\n\t};\n\treturn this;\n};\n\nWindowGesture.prototype.onmoveend = function (){\n\tvar target_, $1;\n\tvar top = this.target().dom().offsetTop;\n\tvar left = this.target().dom().offsetLeft;\n\tvar dy = Math.max(-(this._box.top - 34),this.dy());\n\t\n\tthis._layout.top += dy;\n\tthis._layout.left += this.dx();\n\t\n\tthis.target().css(\n\t\t{transform: \"none\",\n\t\ttop: this._layout.top,\n\t\tleft: this._layout.left,\n\t\tright: 'auto',\n\t\tbottom: 'auto'}\n\t);\n\t\n\t(target_ = this.target()) && target_.onmove && target_.onmove(this,this.getLayout());\n\t($1 = this.target()) && $1.onmoveend && $1.onmoveend(this);\n\treturn this;\n};\n\n// resize\nWindowGesture.prototype.onresizestart = function (){\n\t// console.log \"onresizestart\",self\n\tvar layout = this.getLayout();\n\t\n\tthis.target().css(\n\t\t{transform: \"none\",\n\t\ttop: layout.top,\n\t\tleft: layout.left,\n\t\tright: 'auto',\n\t\tbottom: 'auto'}\n\t);\n\t\n\treturn this;\n};\n\nWindowGesture.prototype.onresizeupdate = function (){\n\tvar target_;\n\tvar o = this.options();\n\tvar box = this._layout;\n\t\n\tif (o.l) {\n\t\tthis.target().css({left: (box.left + this.dx()),width: box.width - this.dx()});\n\t};\n\tif (o.r) {\n\t\tthis.target().css({width: box.width + this.dx()});\n\t};\n\tif (o.b) {\n\t\tthis.target().css({height: box.height + this.dy()});\n\t};\n\tif (o.t) {\n\t\tthis.target().css({top: box.top + this.dy(),height: box.height - this.dy()});\n\t};\n\t\n\t(target_ = this.target()) && target_.onresize && target_.onresize(this,this.getLayout());\n\treturn this;\n};\n\nWindowGesture.prototype.onresizeend = function (){\n\tvar target_;\n\tvar layout = this.getLayout();\n\t// target.css bottom: 'auto', right: 'auto'\n\tlayout.width = Math.min(layout.width,window.innerWidth);\n\tlayout.height = Math.min(layout.height,window.innerHeight - 20);\n\tthis.target().css(layout);\n\t(target_ = this.target()) && target_.onresize && target_.onresize(this,layout);\n\t// @layout:top = target.dom:offsetTop\n\t// @layout:left = target.dom:offsetLeft\n\t// @layout:width = target.dom:offsetWidth\n\t// @layout:width = target.dom:offsetWidth\n\treturn this;\n};\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar ScrimbaGesture = require('./ScrimbaGesture').ScrimbaGesture;\n\nfunction LayoutGesture(){\n\tLayoutGesture.prototype.__super__.constructor.apply(this,arguments);\n\tthis.touch().capture();\n\tthis._vp = this.target().data().space().layout().viewport();\n\tthis._layout = this._options.layout.clone();\n\tthis._left = this._layout[0];\n\tthis._top = this._layout[1];\n\tthis._width = this._layout[2];\n\tthis._height = this._layout[3];\n\tthis._tracker = this.target().data().space().pointerTracker();\n\t\n\tthis._ax = 0;\n\tthis._ay = 0;\n\tthis;\n};\n\nsubclass$(LayoutGesture,ScrimbaGesture);\nexports.LayoutGesture = LayoutGesture; // export class \nLayoutGesture.prototype.box = function(v){ return this._box; }\nLayoutGesture.prototype.setBox = function(v){ this._box = v; return this; };\nLayoutGesture.prototype.layout = function(v){ return this._layout; }\nLayoutGesture.prototype.setLayout = function(v){ this._layout = v; return this; };\nLayoutGesture.prototype.top = function(v){ return this._top; }\nLayoutGesture.prototype.setTop = function(v){ this._top = v; return this; };\nLayoutGesture.prototype.left = function(v){ return this._left; }\nLayoutGesture.prototype.setLeft = function(v){ this._left = v; return this; };\nLayoutGesture.prototype.width = function(v){ return this._width; }\nLayoutGesture.prototype.setWidth = function(v){ this._width = v; return this; };\nLayoutGesture.prototype.height = function(v){ return this._height; }\nLayoutGesture.prototype.setHeight = function(v){ this._height = v; return this; };\nLayoutGesture.prototype.vp = function(v){ return this._vp; }\nLayoutGesture.prototype.setVp = function(v){ this._vp = v; return this; };\n\nLayoutGesture.prototype.ax = function(v){ return this._ax; }\nLayoutGesture.prototype.setAx = function(v){ this._ax = v; return this; };\nLayoutGesture.prototype.ay = function(v){ return this._ay; }\nLayoutGesture.prototype.setAy = function(v){ this._ay = v; return this; };\n\nLayoutGesture.prototype.onresizestart = function (){\n\tvar target_;\n\tvar o = this.options();\n\tvar box = this.target().dom().getBoundingClientRect();\n\tvar rx = this.x() - box.left;\n\tvar ry = this.y() - box.top;\n\t\n\tif (o.l || o.r || o.b || o.t) {\n\t\tif (o.l) {\n\t\t\tthis.setAx(-1);\n\t\t} else if (o.r) {\n\t\t\tthis.setAx(1);\n\t\t};\n\t\t\n\t\tif (o.b) {\n\t\t\tthis.setAy(1);\n\t\t} else if (o.t) {\n\t\t\tthis.setAy(-1);\n\t\t};\n\t} else {\n\t\tif (rx > (box.width - 20)) {\n\t\t\tthis.setAx(1);\n\t\t} else if (rx < 20) {\n\t\t\tthis.setAx(-1);\n\t\t};\n\t\t\n\t\tif (ry > (box.height - 20)) {\n\t\t\tthis.setAy(1);\n\t\t} else if (ry < 20) {\n\t\t\tthis.setAy(-1);\n\t\t};\n\t};\n\t\n\treturn (target_ = this.target()) && target_.onresizestart && target_.onresizestart(this);\n};\n\nLayoutGesture.prototype.onstart = function (t){\n\tif (this._tracker) {\n\t\tthis._prevTargetLock = this._tracker.lockedOnTarget();\n\t\tthis._tracker.setLockedOnTarget(this._tracker.targetForElement(this.target().dom()));\n\t};\n\treturn LayoutGesture.prototype.__super__.onstart.apply(this,arguments);\n};\n\nLayoutGesture.prototype.teardown = function (){\n\tif (this._tracker) {\n\t\tthis._tracker.setLockedOnTarget(this._prevTargetLock);\n\t};\n\treturn LayoutGesture.prototype.__super__.teardown.apply(this,arguments);\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/), _2 = Imba.createElementFactory(/*SCOPEID*/);\n\n\nvar protocol$ = require('../protocol'), SIMULATOR = protocol$.SIMULATOR, SCON = protocol$.SCON;\n\nvar List = require('../util/List').List;\n\nvar DOMPlayer = require('./simulator/player').DOMPlayer;\nvar Stylesheet = require('./simulator/stylesheet').Stylesheet;\nvar WindowGesture = require('../util/WindowGesture').WindowGesture;\nvar LayoutGesture = require('../util/LayoutGesture').LayoutGesture;\n\nvar Delay = require('../util/Delay').Delay;\n\nvar Dimensions = require('../core/Dimensions').Dimensions;\n\nvar Frame = _1.defineTag('Frame', 'iframe', function(tag){\n\t\n\ttag.prototype.sandbox = function(v){ return this.getAttribute('sandbox'); }\n\ttag.prototype.setSandbox = function(v){ this.setAttribute('sandbox',v); return this; };\n\t\n\ttag.prototype.zoom = function(v){ return this._zoom; }\n\ttag.prototype.setZoom = function(v){ this._zoom = v; return this; };\n\ttag.prototype.src = function(v){ return this._src; }\n\ttag.prototype.setSrc = function(v){ this._src = v; return this; };\n\ttag.prototype.__baseStyle = {watch: 'baseStyleDidSet',name: 'baseStyle'};\n\ttag.prototype.baseStyle = function(v){ return this._baseStyle; }\n\ttag.prototype.setBaseStyle = function(v){\n\t\tvar a = this.baseStyle();\n\t\tif(v != a) { this._baseStyle = v; }\n\t\tif(v != a) { this.baseStyleDidSet && this.baseStyleDidSet(v,a,this.__baseStyle) }\n\t\treturn this;\n\t};\n\ttag.prototype.cssFiles = function(v){ return this._cssFiles; }\n\ttag.prototype.setCssFiles = function(v){ this._cssFiles = v; return this; };\n\ttag.prototype.__frameContext = {watch: 'frameContextDidSet',name: 'frameContext'};\n\ttag.prototype.frameContext = function(v){ return this._frameContext; }\n\ttag.prototype.setFrameContext = function(v){\n\t\tvar a = this.frameContext();\n\t\tif(v != a) { this._frameContext = v; }\n\t\tif(v != a) { this.frameContextDidSet && this.frameContextDidSet(v,a,this.__frameContext) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.didFocus = function (){\n\t\treturn this.data().focus_();\n\t};\n\t\n\ttag.prototype.cssOptions = function (){\n\t\treturn {};\n\t};\n\t\n\ttag.prototype.addCSSFile = function (file){\n\t\tvar id_;\n\t\tthis._cssFiles.add(file);\n\t\tvar sheet = this._cssSheets[id_ = file.id()] || (this._cssSheets[id_] = new Stylesheet(file,this.cssOptions()));\n\t\t\n\t\tif (sheet) {\n\t\t\tsheet.setDoc(this.doc());\n\t\t};\n\t\t// @cssSheets.add Stylesheet.new(file,null)\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.removeCSSFile = function (file){\n\t\tvar sheet;\n\t\tif (sheet = this._cssSheets[file.id()]) {\n\t\t\tsheet.setDoc(null);\n\t\t};\n\t\tthis._cssFiles.remove(file);\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.getSheetForCSSFile = function (file){\n\t\treturn this._cssSheets[file.id()];\n\t};\n\t\n\ttag.prototype.setup = function (){\n\t\tvar self = this;\n\t\tself._cssSheets = {};\n\t\tself._cssFiles = new List(self,[]);\n\t\tself._docflags = {};\n\t\t// FIX\n\t\tself.dom().src = self.src();\n\t\tself.dom().onload = function(e) {\n\t\t\tself.setFrameContext(self.dom().contentWindow);\n\t\t\treturn self.loaded(e);\n\t\t};\n\t\treturn tag.prototype.__super__.setup.apply(self,arguments);\n\t};\n\t\n\ttag.prototype.reload = function (cb){\n\t\tif (cb) { Imba.once(this,'ready',cb) };\n\t\treturn this.ctx().location.reload();\n\t};\n\t\n\ttag.prototype.ctx = function (){\n\t\treturn this.dom().contentWindow;\n\t};\n\t\n\ttag.prototype.doc = function (){\n\t\treturn this.dom().contentDocument || (this.ctx() && this.ctx().document);\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\treturn this.doc().body;\n\t};\n\t\n\ttag.prototype.scripts = function (){\n\t\treturn [];\n\t};\n\t\n\ttag.prototype.isReady = function (){\n\t\treturn this._isReady;\n\t};\n\t\n\ttag.prototype.resetStylesheets = function (){\n\t\tvar v_;\n\t\tfor (let i = 0, items = iter$(this.cssFiles()), len = items.length; i < len; i++) {\n\t\t\tvar sheet = this.getSheetForCSSFile(items[i]);\n\t\t\tsheet && ((sheet.setDoc(v_ = this.doc()),v_));\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.cssSuffix = function (){\n\t\treturn '';\n\t};\n\t\n\ttag.prototype.loaded = function (e){\n\t\tvar self = this;\n\t\tvar html = (\"<link href='/static/simulator/\" + (self.baseStyle() || 'normalize') + self.cssSuffix() + \".css' rel='stylesheet' type='text/css' id='scrimbaBaseStyleLink' />\");\n\t\tself.doc().head.innerHTML = html;\n\t\t\n\t\tself.resetStylesheets();\n\t\t\n\t\tvar externaljs = self.scripts().slice(0);\n\t\t\n\t\tvar loader = function() {\n\t\t\tvar src;\n\t\t\tif (src = externaljs.shift()) {\n\t\t\t\tvar el = self.doc().createElement(\"script\");\n\t\t\t\tel.type = 'text/javascript';\n\t\t\t\tel.src = src;\n\t\t\t\tself.doc().head.appendChild(el);\n\t\t\t\treturn el.onload = loader;\n\t\t\t} else {\n\t\t\t\treturn self.onready(self);\n\t\t\t};\n\t\t};\n\t\tloader();\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.onready = function (){\n\t\tthis._isReady = true;\n\t\tthis.trigger('frameload');\n\t\tImba.emit(this,'ready');\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.setZoom = function (zoom){\n\t\tthis._zoom = zoom;\n\t\tthis;\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.commit = function (){\n\t\tthis.setBaseStyle(this.data().baseStyle());\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.resize = function (){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.baseStyleDidSet = function (new$,old){\n\t\tif (this.ctx() && this.ctx().scrimbaBaseStyleLink) {\n\t\t\tthis.ctx().scrimbaBaseStyleLink.setAttribute('href',(\"/static/simulator/\" + (new$ || 'blank') + this.cssSuffix() + \".css\"));\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.frameContextDidSet = function (new$,old){\n\t\tif (old) {\n\t\t\t// remove some stuff for the recorder as well?\n\t\t\told.ScrimbaConsole = null;\n\t\t};\n\t\t\n\t\tif (new$) {\n\t\t\tnew$.NativeConsole = new$.console;\n\t\t};\n\t\t\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.dispose = function (){\n\t\tvar self = this;\n\t\tself.dom().onload = null;\n\t\tself.setFrameContext(null);\n\t\t// Remove stylesheets!\n\t\tself._cssFiles.toClonedArray().map(function(item) {\n\t\t\treturn self.removeCSSFile(item);\n\t\t});\n\t\t\n\t\tself._cssSheets = null;\n\t\tself._cssFiles = null;\n\t\t\n\t\tif (self.ctx()) {\n\t\t\tself.ctx().location.reload(); // reload - really?\n\t\t};\n\t\treturn self;\n\t};\n});\n\nvar Player = _1.defineTag('Player', Frame, function(tag){\n\t\n\ttag.prototype.cssOptions = function (){\n\t\treturn {fakePseudoStates: true};\n\t};\n\t\n\ttag.prototype.cssSuffix = function (){\n\t\treturn '.preview';\n\t};\n\t\n\ttag.prototype.src = function (){\n\t\treturn (\"/cast/\" + (this.data().space().id()) + \".preview\");\n\t};\n\t\n\ttag.prototype.mutator = function (){\n\t\treturn this._mutator || (this._mutator = new DOMPlayer(this));\n\t};\n\t\n\ttag.prototype.bridge = function (){\n\t\treturn this.mutator();\n\t};\n\t\n\ttag.prototype.onready = function (){\n\t\tthis.bridge().attachTo(this.ctx(),this.body());\n\t\ttag.prototype.__super__.onready.apply(this,arguments);\n\t\t\n\t\tif (this._snapshot) {\n\t\t\tthis.bridge().fromSnapshot(this._snapshot);\n\t\t\tthis._snapshot = null;\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.nodeForPath = function (path){\n\t\treturn this.bridge().nodeForPath(path);\n\t};\n\t\n\ttag.prototype.dispose = function (){\n\t\tthis._mutator && this._mutator.dispose && this._mutator.dispose();\n\t\tthis._mutator = null;\n\t\treturn tag.prototype.__super__.dispose.apply(this,arguments);\n\t};\n\t\n\ttag.prototype.deserialized = function (){\n\t\tif (false) {};\n\t\tvar body = this.data().data().body;\n\t\tthis.bridge().fromSnapshot(body);\n\t\treturn this;\n\t};\n});\n\n\nvar Resizer = _1.defineTag('Resizer');\n\nvar SimulatorHeader = _1.defineTag('SimulatorHeader', function(tag){\n\t\n\ttag.prototype.zoom = function(v){ return this._zoom; }\n\ttag.prototype.setZoom = function(v){ this._zoom = v; return this; }; // watch: :render\n\t\n\ttag.prototype.close = function (e){\n\t\te.halt();\n\t\treturn this.api().log('warn',\"SIM_CLOSE - not implemented - should stop running\");\n\t};\n\t\n\ttag.prototype.min = function (e){\n\t\te.halt();\n\t\treturn this.data().blur_();\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, _t4, _t5;\n\t\treturn this.$open(0).dataset('gesture','move').setChildren($.$ = $.$ || [\n\t\t\t_2('div',$,0,this).flag('center').setContent([\n\t\t\t\t_2('div',$,1,0).flag('title').setText(\"Preview\"),\n\t\t\t\t_2('div',$,2,0).flag('sizing').setContent([\n\t\t\t\t\t_2('span',$,3,2).flag('size').setContent([\n\t\t\t\t\t\t_2('span',$,4,3).flag('w'),\n\t\t\t\t\t\t_2('span',$,5,3).flag('x').setText('\u00D7'),\n\t\t\t\t\t\t_2('span',$,6,3).flag('h')\n\t\t\t\t\t],2),\n\t\t\t\t\t_2('span',$,7,2).flag('zoom')\n\t\t\t\t],2)\n\t\t\t],2),\n\t\t\t_2('div',$,8,this).flag('lft')\n\t\t],2).synced((\n\t\t\t$[4].setContent(this.data().width(false),3),\n\t\t\t$[6].setContent(this.data().height(false),3),\n\t\t\t$[7].setText(\" (\" + ((this.zoom() || 1) * 100).toFixed(0) + \"%)\")\n\t\t,true));\n\t};\n});\n\nvar SimulatorView = _1.defineTag('SimulatorView', function(tag){\n\t\n\ttag.prototype.title = function(v){ return this._title; }\n\ttag.prototype.setTitle = function(v){ this._title = v; return this; };\n\ttag.prototype.__playback = {'default': true,name: 'playback'};\n\ttag.prototype.playback = function(v){ return this._playback; }\n\ttag.prototype.setPlayback = function(v){ this._playback = v; return this; }\n\ttag.prototype._playback = true; // should really move to SimulatorWidget\n\ttag.prototype.__show = {watch: 'showDidSet',name: 'show'};\n\ttag.prototype.show = function(v){ return this._show; }\n\ttag.prototype.setShow = function(v){\n\t\tvar a = this.show();\n\t\tif(v != a) { this._show = v; }\n\t\tif(v != a) { this.showDidSet && this.showDidSet(v,a,this.__show) }\n\t\treturn this;\n\t};\n\ttag.prototype.zoom = function(v){ return this._zoom; }\n\ttag.prototype.setZoom = function(v){ this._zoom = v; return this; };\n\ttag.prototype.__autoPos = {'default': true,name: 'autoPos'};\n\ttag.prototype.autoPos = function(v){ return this._autoPos; }\n\ttag.prototype.setAutoPos = function(v){ this._autoPos = v; return this; }\n\ttag.prototype._autoPos = true;\n\ttag.prototype.__autoSize = {'default': true,name: 'autoSize'};\n\ttag.prototype.autoSize = function(v){ return this._autoSize; }\n\ttag.prototype.setAutoSize = function(v){ this._autoSize = v; return this; }\n\ttag.prototype._autoSize = true;\n\t\n\ttag.prototype.setup = function (){\n\t\tthis._zoom = 1;\n\t\tthis.body();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.mount = function (){\n\t\tvar self = this;\n\t\tself.data().space().on('reflow',function() {\n\t\t\treturn self.reflow(true);\n\t\t});\n\t\t\n\t\tself.data().space().on('resize',function() {\n\t\t\tvar vp = self.data().space().view().box();\n\t\t\treturn self.log('viewport resized',vp);\n\t\t});\n\t\t\n\t\tself._mounted = true;\n\t\tself.reflow(true);\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn (this._body = this._body||_2('div',this).flag('body'));\n\t};\n\t\n\ttag.prototype.onresizeupdate = function (g){\n\t\t// autoSize should be toggled back on when we resume playback?\n\t\tvar v_;\n\t\tthis.setAutoSize(false);\n\t\t\n\t\tlet l = g.layout();\n\t\tlet o = {\n\t\t\twidth: l.width() + g.dx() * g.ax(),\n\t\t\theight: l.height() + g.dy() * g.ay(),\n\t\t\tleft: l.left(),\n\t\t\ttop: l.top()\n\t\t};\n\t\t\n\t\tif (g.ax() < 0) {\n\t\t\to.left += (o.width - l.width()) * g.ax();\n\t\t};\n\t\t\n\t\tif (g.ay() < 0) {\n\t\t\to.top += (o.height - l.height()) * g.ay();\n\t\t};\n\t\t\n\t\tthis.redraw(this._layout.set(o));\n\t\treturn (this.data().setLayout(v_ = this._layout.clone()),v_);\n\t};\n\t\n\ttag.prototype.onmoveupdate = function (g){\n\t\tthis.setAutoPos(false);\n\t\tvar x = Math.round(g.layout().left() + g.dx());\n\t\tvar y = Math.round(Math.max(g.layout().top() + g.dy(),40));\n\t\tthis._layout.set({left: x,top: y});\n\t\t// if data.space.isEditing\n\t\tthis.data().setLayout(this._layout.clone());\n\t\treturn this.redraw();\n\t};\n\t\n\ttag.prototype.ondblclick = function (){\n\t\tthis.setAutoPos(true);\n\t\tthis.setAutoSize(true);\n\t\treturn this.reflow(true);\n\t};\n\t\n\ttag.prototype.relayout = function (){\n\t\t// console.log 'relayout'\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.redraw = function (layout){\n\t\tif(layout === undefined) layout = this._layout;\n\t\tlet zoom = 100;\n\t\tlet left = (\"calc((100% - \" + (layout.width()) + \"px) * \" + (layout.anchorX()) + \")\");\n\t\tlet top = (\"calc((100% - \" + (layout.height()) + \"px) * \" + (layout.anchorY()) + \")\");\n\t\t\n\t\tthis._body.css(\n\t\t\t{width: (10000 / zoom) + \"%\",\n\t\t\theight: (10000 / zoom) + \"%\",\n\t\t\ttransform: (\"scale(\" + (100 / zoom) + \")\")}\n\t\t);\n\t\t\n\t\tthis.css({width: layout.width(),height: layout.height(),left: left,top: top});\n\t\treturn this.flag('narrow',layout.width() < 150);\n\t};\n\t\n\t\n\ttag.prototype.reflow = function (force){\n\t\tif(force === undefined) force = false;\n\t\tvar remote = this.data().agentLayout();\n\t\tvar v = remote._v; // version\n\t\t\n\t\tif (v == this._v && !force) { return };\n\t\t\n\t\tif (!remote._data) { return };\n\t\t// console.log 'reflow',force,@v\n\t\t\n\t\tvar vp = this.data().space().view().box();\n\t\tvar vw = vp.width;\n\t\tvar vh = vp.height;\n\t\t\n\t\tvar layout = this._layout || (this._layout = remote.clone());\n\t\t\n\t\tif (v != this._v) {\n\t\t\t// console.log 'streamLayout has changed!'\n\t\t\tif (this.autoPos() && this.autoSize()) {\n\t\t\t\tlayout.set(remote.toObject()).resizeParent(vw,vh);\n\t\t\t} else if (this.autoSize()) {\n\t\t\t\tlayout.resizeParent(vw,vh).resize(remote.width(),remote.height());\n\t\t\t\t// should autosize no matter what?\n\t\t\t} else if (this.autoPos()) {\n\t\t\t\tthis;\n\t\t\t};\n\t\t} else {\n\t\t\tlayout.resizeParent(vw,vh);\n\t\t};\n\t\t\n\t\tthis._v = v;\n\t\tlayout.round();\n\t\tthis.redraw(this._layout = layout);\n\t\treturn;\n\t};\n\t\n\ttag.prototype.isMovable = function (){\n\t\treturn !this.api().isMobile();\n\t};\n\t\n\ttag.prototype.ontouchstart = function (t){\n\t\tif (this.isMovable()) {\n\t\t\treturn LayoutGesture.wrap(t,{layout: this._layout});\n\t\t};\n\t};\n\t\n\ttag.prototype.discardLocalSize = function (){\n\t\tthis.setAutoSize(true);\n\t\treturn this.reflow();\n\t};\n\t\n\ttag.prototype.dirty = function (){\n\t\treturn this._dirty = true;\n\t};\n\t\n\ttag.prototype.showDidSet = function (bool,prev){\n\t\treturn this.flag('show',!!bool);\n\t};\n\t\n\ttag.prototype.shouldFocus = function (){\n\t\treturn this.data().isFocused();\n\t};\n\t\n\ttag.prototype.focus_ = function (){\n\t\treturn this.data().focus_();\n\t};\n\t\n\ttag.prototype.ontap = function (){\n\t\t// console.log 'tapped simulator!'\n\t\tif (!(this._resizedAt && (Date.now() - this._resizedAt) < 200)) {\n\t\t\tif (this.data().space().branch().canPush()) {\n\t\t\t\treturn this.data().focus_();\n\t\t\t};\n\t\t};\n\t};\n\t\n\ttag.prototype.interact = function (){\n\t\treturn this.data().space().actions().exec('run');\n\t};\n\t\n\ttag.prototype.onwheel = function (e){\n\t\te.silence();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.clientLayout = function (){\n\t\treturn this._layout;\n\t};\n\t\n\ttag.prototype.dispose = function (){\n\t\tthis._player && this._player.dispose && this._player.dispose();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.player = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn this._player || (this._player = this._player||_2(Player,this).flag('player').setSandbox(\"allow-same-origin\")).bindData(this,'data',[]).end();\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, t0;\n\t\tif (!this.data().visible() && this._rendered) {\n\t\t\tthis.setShow(false);\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\tif (this._mounted) {\n\t\t\tthis.reflow();\n\t\t};\n\t\t\n\t\tthis._rendered = true;\n\t\treturn this.$open(0).flag('reflow').dataset('gesture','move').flagIf('focus',(this.shouldFocus())).flagIf('running',(this.data().running())).setShow((this.data().visible())).setChildren($.$ = $.$ || [\n\t\t\tt0 = this._chrome = this._chrome||(t0=_2('div',this)).flag('chrome').setContent([\n\t\t\t\tthis._header = this._header||_2(SimulatorHeader,t0).flag('header').flag('handle'),\n\t\t\t\t_2(Resizer,$,0,t0).flag('left').dataset('gesture','resize,l'),\n\t\t\t\t_2(Resizer,$,1,t0).flag('right').dataset('gesture','resize,r'),\n\t\t\t\t_2(Resizer,$,2,t0).flag('bottom').dataset('gesture','resize,b'),\n\t\t\t\t_2(Resizer,$,3,t0).flag('br').dataset('gesture','resize,b,r'),\n\t\t\t\t_2(Resizer,$,4,t0).flag('bl').dataset('gesture','resize,b,l')\n\t\t\t],2),\n\t\t\tthis._pointerframe = this._pointerframe||_2('div',this).flag('pointerframe'),\n\t\t\tthis._body = this._body||_2('div',this).flag('body')\n\t\t],2).synced((\n\t\t\tthis._header.bindData(this,'data',[]).setZoom(this._zoom).end(),\n\t\t\t$[0].end(),\n\t\t\t$[1].end(),\n\t\t\t$[2].end(),\n\t\t\t$[3].end(),\n\t\t\t$[4].end(),\n\t\t\tthis._body.setContent(\n\t\t\t\tthis.player().end()\n\t\t\t,3)\n\t\t,true));\n\t};\n})\nexports.SimulatorView = SimulatorView;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Actions = exports.Actions = {};\n\nvar Mousetrap = require('../util/mousetrap');\n\nvar F = {\n\tENABLED: 1,\n\tBUSY: 2\n};\n\nfunction Action(options){\n\tthis._options = options;\n\tif (options.enabled != false) { this._enabled = true };\n\tthis._cooldown = this._options.cooldown || 0;\n\tthis._mousetraps = []; // memory leaks ftw\n\tthis._scopes = this._options.scope || [];\n\tif ((typeof this._scopes=='string'||this._scopes instanceof String)) { this._scopes = [this._scopes] };\n\tthis;\n};\n\nexports.Action = Action; // export class \nAction.register = function (name,o,cb){\n\tif(cb==undefined && typeof o == 'function') cb = o,o = {};\n\tif(o==undefined) o = {};\n\tif (name instanceof Object) {\n\t\to = name;\n\t\tname = o.name;\n\t} else {\n\t\to.name || (o.name = name);\n\t\to.cmd || (o.cmd = cb);\n\t};\n\t\n\treturn Actions[name] = new Action(o);\n};\n\nAction.lookup = function (name){\n\treturn Actions[name];\n};\n\nAction.prototype.active = function(v){ return this._active; }\nAction.prototype.setActive = function(v){ this._active = v; return this; };\nAction.prototype.cooldown = function(v){ return this._cooldown; }\nAction.prototype.setCooldown = function(v){ this._cooldown = v; return this; };\nAction.prototype.options = function(v){ return this._options; }\nAction.prototype.setOptions = function(v){ this._options = v; return this; };\nAction.prototype.scopes = function(v){ return this._scopes; }\nAction.prototype.setScopes = function(v){ this._scopes = v; return this; };\n\nAction.prototype.exec = function (context,params,e){\n\tvar ctx = context || this.context();\n\tif (!this.available(ctx)) { return false }; // should it be stopped?\n\tvar res = this._options.cmd.call(this,ctx,params || this._options.params,e);\n\tthis._lastExec = Date.now();\n\treturn res || true;\n};\n\nAction.prototype.available = function (ctx){\n\tif(ctx === undefined) ctx = this.context();\n\treturn this.enabled(ctx) && (!this._lastExec || (Date.now() - this._lastExec) > this._cooldown);\n};\n\nAction.prototype.enabled = function (ctx){\n\tif(ctx === undefined) ctx = this.context();\n\tvar val = this.getOption('enabled',ctx);\n\treturn (val == undefined) ? ((this._enabled || false)) : val;\n};\n\nAction.prototype.setEnabled = function (value){\n\tthis._enabled = value;\n\treturn this;\n};\n\nAction.prototype.getOption = function (name,ctx){\n\tif(ctx === undefined) ctx = this.context();\n\tvar val = this._options[name];\n\tif (val instanceof Function) {\n\t\tval = val.call(this,ctx);\n\t};\n\treturn val;\n};\n\nAction.prototype.name = function (ctx){\n\treturn this._options.name;\n};\nAction.prototype.desc = function (ctx){\n\treturn this.getOption('desc',ctx);\n};\nAction.prototype.icon = function (ctx){\n\treturn this.getOption('icon',ctx);\n};\nAction.prototype.shortcut = function (){\n\treturn this._options.shortcut;\n};\n\nAction.prototype.o = function (key){\n\treturn this._options[key];\n};\n\nAction.prototype.state = function (ctx){\n\tif(ctx === undefined) ctx = this.context();\n\treturn this.getOption('state',ctx);\n};\n\nAction.prototype.context = function (){\n\treturn this._options.context;\n};\n\nAction.prototype.space = function (){\n\treturn this.context();\n};\n\nAction.prototype.clone = function (opts){\n\t// console.log \"clone options\",opts\n\tif(opts === undefined) opts = {};\n\tvar o = Object.create(this._options,{});\n\t\n\tfor (let v, i = 0, keys = Object.keys(opts), l = keys.length, k; i < l; i++){\n\t\tk = keys[i];v = opts[k];o[k] = v;\n\t};\n\t\n\treturn new Action(o);\n};\n\nAction.prototype.mousetrap = function (){\n\tvar self = this;\n\treturn self._mousetrap || (self._mousetrap = function(e,combo) {\n\t\tif (e.target.matches('textarea,input,button,.input')) {\n\t\t\t// TODO make this work again\n\t\t\t// (client.state == 'paused' or client.state == 'play')\n\t\t\tif (combo == 'space' && false) {\n\t\t\t\te.preventDefault();\n\t\t\t} else if (!(/mod|ctrl|shift/).test(combo)) {\n\t\t\t\treturn;\n\t\t\t};\n\t\t} else if (e.target.closest('.Overlay')) {\n\t\t\tconsole.log('no mousetrap inside overlay');\n\t\t\treturn;\n\t\t};\n\t\t\n\t\t// console.log \"mousetrap trigger\",e,combo\n\t\tif (self.exec(self.context(),combo,e)) {\n\t\t\treturn false;\n\t\t} else {\n\t\t\treturn true;\n\t\t};\n\t});\n};\n\nAction.prototype.bindToMousetrap = function (trap){\n\tif (this.shortcut()) {\n\t\ttrap.bind(this.shortcut(),this.mousetrap());\n\t\ttrap._toDispose || (trap._toDispose = []);\n\t\treturn trap._toDispose.push(this.shortcut());\n\t};\n};\n\nfunction ActionManager(context){\n\tvar self = this;\n\tself._context = context;\n\tself._actions = [];\n\tself._mousetraps = [];\n\tself._mappings = {};\n\tself._combinations = [];\n\tself.onkeycombo = self.onkeycombo.bind(self);\n\t\n\tself._scopes = {\n\t\tslides: function() { return self.space().slides().visible(); },\n\t\trecording: function() { return self.space().recording(); },\n\t\tbrowser: function() { return self.space().browser().visible(); },\n\t\twatching: function() { return !self.space().isEditing(); },\n\t\tpaused: function() { return self.space().isPaused(); },\n\t\tplaying: function() { return self.space().isPlaying(); },\n\t\tplayback: function() { return self.space().isPlaying() || self.space().isPaused(); },\n\t\tediting: function() { return self.space().isEditing(); },\n\t\tbrushup: function() { return self.space().isAnnotating(); },\n\t\tspace: function() { return true; }\n\t};\n\t\n\tfor (let action, i = 0, keys = Object.keys(Actions), l = keys.length, name; i < l; i++){\n\t\tname = keys[i];action = Actions[name];self.get(name);\n\t};\n\tself;\n};\n\nexports.ActionManager = ActionManager; // export class \nActionManager.prototype.context = function(v){ return this._context; }\nActionManager.prototype.setContext = function(v){ this._context = v; return this; };\nActionManager.prototype.scopes = function(v){ return this._scopes; }\nActionManager.prototype.setScopes = function(v){ this._scopes = v; return this; };\n\nActionManager.prototype.space = function (){\n\treturn this._context;\n};\n\nActionManager.prototype.get = function (name){\n\tvar action = this._actions[name];\n\t\n\tif (!action && Action.lookup(name)) {\n\t\taction = Action.lookup(name);\n\t\taction = this._actions[name] = Action.lookup(name).clone({context: this.context()});\n\t\tthis._actions.push(action);\n\t\tlet combos = action.shortcut();\n\t\tif (!((combos instanceof Array))) { combos = [combos] };\n\t\t\n\t\tfor (let i = 0, len = combos.length, combo; i < len; i++) {\n\t\t\tcombo = combos[i];\n\t\t\tif (!combo) { continue; };\n\t\t\tif (this._combinations.indexOf(combo) < 0) {\n\t\t\t\tthis._combinations.push(combo);\n\t\t\t};\n\t\t\tthis._mappings[combo] || (this._mappings[combo] = []);\n\t\t\tthis._mappings[combo].push(action);\n\t\t};\n\t};\n\t\n\treturn action;\n};\n\nActionManager.prototype.exec = function (name){\n\tvar action = this.get(name);\n\treturn action && action.exec();\n};\n\nActionManager.prototype.trap = function (mousetrap,scope){\n\t// dont care about scope here?\n\tif (this._mousetraps.indexOf(mousetrap) == -1) {\n\t\tthis._mousetraps.push(mousetrap);\n\t};\n\t\n\tmousetrap.bind(this._combinations,this.onkeycombo);\n\treturn this;\n};\n\nActionManager.prototype.onkeycombo = function (e,combo){\n\t// console.log \"triggered combo!\",combo,e:target\n\tvar self = this;\n\tif (e.target.matches('textarea,input,button,.input')) {\n\t\tif (!(/mod|ctrl|shift/).test(combo)) {\n\t\t\treturn;\n\t\t};\n\t};\n\t\n\tif (e.target.closest('.Overlay')) {\n\t\t// log 'no mousetrap inside overlay'\n\t\treturn;\n\t};\n\t\n\tlet actions = self._mappings[combo];\n\t\n\tfor (let i = 0, items = iter$(actions), len = items.length, action; i < len; i++) {\n\t\taction = items[i];\n\t\tlet allow = action.scopes().some(function(scope) {\n\t\t\treturn scope.split(\"+\").every(function(item) { return !self._scopes[item] || self._scopes[item](action); });\n\t\t});\n\t\t\n\t\t// unless allow\n\t\t// \tconsole.log \"action was blocked\",action.o(:name),action.scopes\n\t\t\n\t\tif (!(allow && action.enabled(action.context()))) {\n\t\t\tcontinue;\n\t\t};\n\t\t\n\t\tif (action.exec(action.context(),combo,e)) {\n\t\t\treturn false;\n\t\t};\n\t};\n\t\n\treturn true;\n};\n\nActionManager.prototype.mousetrap = function (el,scope){\n\tif (!el.MOUSETRAP) {\n\t\tel.MOUSETRAP = new Mousetrap(el);\n\t\tthis.trap(el.MOUSETRAP,scope);\n\t};\n\treturn el.MOUSETRAP;\n};\n\nActionManager.prototype.dispose = function (){\n\tfor (let i = 0, items = iter$(this._mousetraps), len = items.length, trap; i < len; i++) {\n\t\ttrap = items[i];\n\t\ttrap.unbind(this._combinations);\n\t\t// console.log \"dispose mousetrap\"\n\t\t// for combo in trap.@toDispose\n\t\t//\ttrap.unbind(combo)\n\t\ttrap.reset();\n\t};\n\tthis._mousetraps = [];\n\tthis._actions = [];\n\treturn this._context = null;\n};\n\n\n\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\n// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/);\nvar protocol$ = require('../protocol'), SIMULATOR = protocol$.SIMULATOR, ACTION = protocol$.ACTION, SPIV = protocol$.SPIV;\n\nvar List = require('../util/List').List;\nvar Widget = require('./widget').Widget;\nvar PaneWidget = require('./PaneWidget').PaneWidget;\n\nvar Stylesheet = require('./simulator/stylesheet').Stylesheet;\nvar SimulatorView = require('./SimulatorView').SimulatorView;\n\nvar Action = require('../util/Action').Action;\nvar Dimensions = require('../core/Dimensions').Dimensions;\n\nfunction Simulator(){ return PaneWidget.apply(this,arguments) };\n\nsubclass$(Simulator,PaneWidget);\nexports.Simulator = Simulator; // export class \nSimulator.register('simulator',SIMULATOR);\n\nSimulator.prototype.ctx = function(v){ return this._ctx; }\nSimulator.prototype.setCtx = function(v){ this._ctx = v; return this; };\nSimulator.prototype.player = function(v){ return this._player; }\nSimulator.prototype.setPlayer = function(v){ this._player = v; return this; };\nSimulator.prototype.bundle = function(v){ return this._bundle; }\nSimulator.prototype.setBundle = function(v){ this._bundle = v; return this; };\nSimulator.prototype.elements = function(v){ return this._elements; }\nSimulator.prototype.setElements = function(v){ this._elements = v; return this; };\nSimulator.prototype.running = function(v){ return this._running; }\nSimulator.prototype.setRunning = function(v){ this._running = v; return this; };\nSimulator.prototype.loading = function(v){ return this._loading; }\nSimulator.prototype.setLoading = function(v){ this._loading = v; return this; };\nSimulator.prototype.mode = function(v){ return this.getAttribute('mode'); }\nSimulator.prototype.setMode = function(v){ this.setAttribute('mode',v); return this; };\n\nSimulator.option('baseStyle',{'default': 'normalize'});\n\n// DEPRECATED\nSimulator.option('area',{'default': 'aside',overridable: true});\nSimulator.option('resizing',{'default': false}); // very different\nSimulator.option('autoIncludeCSS',{'default': true});\nSimulator.option('externaljs');\nSimulator.option('visible',{'default': false});\nSimulator.option('spiv');\n\nSimulator.prototype.width = function (){\n\treturn this.layout() ? this.layout()[2] : 300;\n};\n\nSimulator.prototype.height = function (){\n\treturn this.layout() ? this.layout()[3] : 400;\n};\n\nSimulator.prototype.clientLayout = function (){\n\treturn (this._clientLayout || (this._clientLayout = new Dimensions(null))).wrap(this._node ? this._node._layout : null);\n};\n\nSimulator.prototype.defaultLayout = function (){\n\tvar dims;\n\tvar vw = this.space().vw(),vh = this.space().vh();\n\tvar width = 300,height = 400;\n\tvar left = vw - width - 40;\n\tvar top = (vh - height) * 0.3;\n\treturn dims = Dimensions.build(\n\t\t{left: left,\n\t\ttop: top,\n\t\twidth: width,\n\t\theight: height,\n\t\tvw: vw,\n\t\tvh: vh,\n\t\tscaleX: 100,\n\t\tscaleY: 100}\n\t).round();\n};\n\nSimulator.prototype.console = function (){\n\treturn this.root_().console();\n};\n\nSimulator.prototype.node = function (){\n\tvar _t1;\n\treturn this._node || (this._node = (_1(SimulatorView).setTitle(\"Preview\")).setData(this).end());\n};\n\nSimulator.prototype.setup = function (){\n\tvar self = this;\n\tself.node();\n\tself.setPlayer(self.node().player());\n\t\n\tif (true) {\n\t\tfor (let i = 0, items = iter$(self.space().files()), len = items.length; i < len; i++) {\n\t\t\tself.bindFile(items[i]);\n\t\t};\n\t\tself.space().files().on('add',function(file) { return self.bindFile(file); });\n\t\tself.space().files().on('remove',function(file) { return self.unbindFile(file); });\n\t};\n\treturn self;\n};\n\nSimulator.prototype.bindFile = function (file){\n\t// console.log 'sim.bindFile',file\n\tfile.on('modified',this,'onfilemodified');\n\t\n\tif (file.lang() == 'css') {\n\t\tthis.player().addCSSFile(file);\n\t\treturn this;\n\t};\n};\n\nSimulator.prototype.unbindFile = function (file){\n\t// console.log 'sim.unbindFile',file\n\tfile.un('modified',this,'onfilemodified');\n\t\n\tif (file.lang() == 'css') {\n\t\tthis.player().removeCSSFile(file);\n\t};\n\treturn this;\n};\n\nSimulator.prototype.onfilemodified = function (file){\n\tif (file.lang() != 'css') {\n\t\treturn this;\n\t};\n};\n\nSimulator.prototype.persist_ = function (){\n\t// should we also include the current css for easy styling?\n\tif (true) {\n\t\tthis._data.body = this.player().bridge().toSnapshot();\n\t};\n\treturn this;\n};\n\nSimulator.prototype.refresh = function (){\n\treturn this;\n};\n\nSimulator.prototype.root = function (){\n\treturn this.player().doc() && this.player().doc().body;\n};\n\nSimulator.prototype.enabled = function (){\n\treturn true;\n};\n\nSimulator.prototype.deserializeWidgets = function (){\n\treturn this;\n};\n\nSimulator.prototype.deserialized = function (){\n\tvar player_;\n\tSimulator.prototype.__super__.deserialized.apply(this,arguments);\n\treturn (player_ = this.player()) && player_.deserialized && player_.deserialized();\n};\n\nSimulator.prototype.title = function (){\n\treturn 'Preview';\n};\n\nSimulator.prototype.stop = function (){\n\tif (this.running()) {\n\t\tthis.setRunning(false);\n\t};\n\treturn this;\n};\n\nSimulator.prototype.apply = function (action){\n\tlet pars = action.params();\n\t\n\tif (action._type == ACTION.SIM_BUILD) {\n\t\taction.PREV = this.bundle();\n\t\tif (!this.space().timeline().isPaused()) { (this.setLoading(true),true) };\n\t} else if (action._type == ACTION.SIM_RESULT) {\n\t\tthis.setLoading(false);\n\t\tthis.setVisible(!(!pars[1]));\n\t\t// node.render\n\t};\n\treturn this;\n};\n\nSimulator.prototype.revert = function (action){\n\tswitch (action._type) {\n\t\tcase ACTION.SIM_BUILD: {\n\t\t\tthis.setLoading(false);\n\t\t\tbreak;\n\t\t}\n\t};\n\treturn this;\n};\n\nSimulator.prototype.convertToBrowser = function (){\n\t// need a special converter action actually\n\tif (this.spiv() == SPIV) { return };\n\t// see if there is an index.html\n\tvar files = {};\n\tfor (let i = 0, items = iter$(this.space().files()), len = items.length, file; i < len; i++) {\n\t\tfile = items[i];\n\t\tfiles[file.name()] = file;\n\t};\n\t\n\tvar html = files['index.html'];\n\tvar css = files['index.css'];\n\tvar js = files['index.js'];\n\tvar ins = [];\n\tvar head = [];\n\t\n\tfor (let i = 0, items = iter$(this.externaljs()), len = items.length; i < len; i++) {\n\t\thead.push('\\t<script src=\"' + items[i] + '\"></script>');\n\t};\n\t\n\tif (css) {\n\t\t// multiple stylesheets or?\n\t\thead.push('\\t<link rel=\"stylesheet\" href=\"' + css.name() + '\">');\n\t};\n\t\n\tif (js) {\n\t\tlet name = js.name();\n\t\tif (js.body().indexOf('require') >= 0) {\n\t\t\tname = name + '.pack.js';\n\t\t};\n\t\tins.push('\\t<script src=\"' + name + '\"></script>');\n\t};\n\t\n\tvar body = html ? html.body() : '';\n\t\n\tif (body.indexOf('<body') < 0) {\n\t\tbody = (\"<html>\\n<head>\\n\" + head.join('\\n') + \"\\n</head>\\n<body>\\n\" + body + \"\\n\" + ins.join(\"\\n\") + \"\\n</body>\\n</html>\");\n\t} else {\n\t\tbody = head.join('\\n') + body + \"\\n\" + ins.join(\"\\n\");\n\t};\n\t\n\tif (!html) {\n\t\tthis.space().createWidget({\n\t\t\ttype: 'file',\n\t\t\tname: 'index.html',\n\t\t\tbody: body\n\t\t});\n\t} else {\n\t\thtml.replaceBody(body,true);\n\t};\n\t\n\t// console.log layout\n\tif (this.layout()) {\n\t\tthis.space().browser().setLayout(this.streamLayout().clone().set({targetRef: this.space().browser().id()}));\n\t};\n\t\n\tthis.setVisible(false);\n\tthis.setSpiv(SPIV);\n\treturn this;\n};\n\nSimulator.prototype.dispose = function (){\n\tthis._lastResultEvent = null;\n\treturn this.node().dispose();\n};\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/), _2 = Imba.createElementFactory(/*SCOPEID*/);\nvar WIDGET = require('../protocol').WIDGET;\nvar Widget = require('./widget').Widget;\n\nvar InspectorView = _1.defineTag('InspectorView', function(tag){\n\t\n\ttag.prototype.flex = function (){\n\t\treturn \"0 0 \" + Math.round(this.data().colspan() / 1.2).toFixed() + \"%\";\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1;\n\t\treturn this.$open(0).flag('dark').flag('abs').flag('scroll').setFlag(-1,this.data().dock()).flagIf('show',(this.data().shouldShow())).css('flex',this.flex()).setChildren(\n\t\t\tthis.data().space().console().node().end()\n\t\t,3).synced();\n\t};\n})\nexports.InspectorView = InspectorView;\n\n// could this be a tag directly\nfunction InspectorWidget(){ return Widget.apply(this,arguments) };\n\nsubclass$(InspectorWidget,Widget);\nexports.InspectorWidget = InspectorWidget; // export class \nInspectorWidget.register('inspector',WIDGET);\n\nInspectorWidget.option('dock',{options: ['right','bottom','detached'],'default': 'right'});\nInspectorWidget.option('colspan',{'default': 40}); // just span instead?\n\nInspectorWidget.prototype.__reveal = {'default': -1,chainable: true,watch: 'revealDidSet',name: 'reveal'};\nInspectorWidget.prototype.reveal = function(v){ return v !== undefined ? (this.setReveal(v),this) : this._reveal; }\nInspectorWidget.prototype.setReveal = function(v){\n\tvar a = this.reveal();\n\tif(v != a) { this._reveal = v; }\n\tif(v != a) { this.revealDidSet && this.revealDidSet(v,a,this.__reveal) }\n\treturn this;\n}\nInspectorWidget.prototype._reveal = -1;\n\nInspectorWidget.prototype.cssWidth = function (){\n\treturn Math.round(this.colspan() / 1.2).toFixed() + '%';\n};\n\nInspectorWidget.prototype.shouldShow = function (){\n\treturn this.space().console().isEnabled();\n};\n\nInspectorWidget.prototype.node = function (){\n\tlet _t1, $ = this.$$ || (this.$$ = {});\n\treturn this._node || (this._node = this._node||_2(InspectorView,this).flag('node')).setData(this).end();\n};\n\nInspectorWidget.prototype.revealDidSet = function (value){\n\treturn this;\n};\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\n\n\n/*\n\t\nnull: regular -- push to history at current index\n0: replace current\n-n: go n back\n+n: go n forward\n\nAll PAGE_REQUEST items has [method,url,history]\n\n*/\n\n\nvar ACTION = require('../../protocol').ACTION;\n\nfunction History(browser){\n\tthis._browser = browser;\n\tthis._index = 0;\n\tthis._stack = [];\n\tthis;\n};\n\nexports.History = History; // export class \nHistory.prototype.index = function(v){ return this._index; }\nHistory.prototype.setIndex = function(v){ this._index = v; return this; };\n\nHistory.prototype.replace = function (item){\n\tthis._stack[this._index] = item;\n\treturn this;\n};\n\nHistory.prototype.push = function (item){\n\tthis._stack = this._stack.slice(0,this._index + 1);\n\tthis._index = (this._stack.push(item) - 1);\n\treturn this;\n};\n\nHistory.prototype.trim = function (){\n\tthis._stack = this._stack.slice(0,this._index + 1);\n\treturn this;\n};\n\nHistory.prototype.go = function (n,force){\n\tif(force === undefined) force = false;\n\tvar to = this._index + n;\n\tvar item = this._stack[this._index = to];\n\treturn item;\n};\n\nHistory.prototype.apply = function (url,typ){\n\tvar state = [this._index,this._stack.slice()];\n\tif (typ == null) {\n\t\tthis.push(url);\n\t} else if (typ == 0) {\n\t\tthis.replace(url);\n\t} else {\n\t\tlet rel = this.go(typ);\n\t\tthis.replace(url);\n\t};\n\t\n\treturn state;\n};\n\nHistory.prototype.reset = function (state){\n\tstate || (state = [-1,[]]);\n\tthis._index = state[0];\n\tthis._stack = state[1];\n\treturn this;\n};\n\nHistory.prototype.current = function (){\n\treturn this._stack[this._index];\n};\n\nHistory.prototype.relative = function (n){\n\treturn this._stack[this._index + n];\n};\n\nHistory.prototype.len = function (){\n\treturn this._stack.length;\n};\n\nHistory.prototype.hasNext = function (){\n\treturn len$(this) > this._index + 1;\n};\n\nHistory.prototype.hasPrev = function (){\n\treturn this._index > 0;\n};\n\nHistory.prototype.isInvalidated = function (){\n\treturn this.current() && this.current().match(/^\\/([345]\\d\\d)\\.html/);\n};\n\nHistory.prototype.state = function (){\n\treturn [this._index,this._stack];\n};\n", "\nfunction ContentEditable(dom,options){\n\tvar self = this;\n\tif(options === undefined) options = {};\n\tself._dom = dom;\n\tself._node = dom._tag;\n\tself._state = 'init';\n\tself._options = options;\n\tself._contentEditableMode = 'true';\n\t\n\tself.supportsPlaintextEditables = function (){\n\t\tvar testdiv = document.createElement('div');\n\t\ttestdiv.setAttribute('contenteditable','plaintext-only');\n\t\treturn testdiv.contentEditable === 'plaintext-only';\n\t};\n\t\n\tif (self.supportsPlaintextEditables()) {\n\t\tself._contentEditableMode = 'plaintext-only';\n\t};\n\t\n\tif (dom.ContentEditableInstance) {\n\t\treturn;\n\t};\n\t\n\tdom.ContentEditableInstance = self;\n\t\n\tself._handlers = {};\n\t\n\tself._handlers.keydown = function(e) {\n\t\te.stopPropagation();\n\t\t\n\t\t// enter\n\t\tif (e.keyCode == 13) {\n\t\t\te.preventDefault();\n\t\t\treturn self.submit();\n\t\t};\n\t};\n\t\n\tself._handlers.keyup = function(e) {\n\t\te.stopPropagation();\n\t\tif (e.keyCode == 27) {\n\t\t\te.preventDefault();\n\t\t\treturn self.cancel();\n\t\t};\n\t};\n\t\n\tself._handlers.blur = function(e) {\n\t\te.stopPropagation();\n\t\tif (self._state == 'init') {\n\t\t\treturn self.cancel();\n\t\t};\n\t};\n\tself.activate();\n\tself;\n};\n\nexports.ContentEditable = ContentEditable; // export class \nContentEditable.prototype.node = function(v){ return this._node; }\nContentEditable.prototype.setNode = function(v){ this._node = v; return this; };\nContentEditable.prototype.dom = function(v){ return this._dom; }\nContentEditable.prototype.setDom = function(v){ this._dom = v; return this; };\n\nContentEditable.prototype.value = function (){\n\treturn this._dom.innerText;\n};\n\nContentEditable.prototype.isValid = function (){\n\tif (this._options.pattern) {\n\t\treturn this._options.pattern.test(this.value());\n\t} else {\n\t\treturn true;\n\t};\n};\n\nContentEditable.prototype.submit = function (){\n\tif (!(this.isValid())) { return this.cancel() };\n\tthis._state = 'submit';\n\tlet val = this.value();\n\tthis.deactivate();\n\tthis._node.trigger('change',val);\n\t// @node.@text_ = @node.@tree_ = null\n\treturn this;\n};\n\nContentEditable.prototype.cancel = function (){\n\tthis._state = 'cancel';\n\tthis._dom.innerText = this._initialValue;\n\tthis.deactivate();\n\treturn this;\n};\n\nContentEditable.prototype.activate = function (){\n\tvar self = this;\n\tself._initialValue = self.value();\n\tself.dom().tabindex = 0;\n\tself.dom().contenteditable = true;\n\tself.dom().setAttribute('contenteditable',self._contentEditableMode);\n\tself.dom().focus();\n\t\n\tfor (let o = self._handlers, handler, i = 0, keys = Object.keys(o), l = keys.length, e; i < l; i++){\n\t\te = keys[i];handler = o[e];self.dom().addEventListener(e,handler,true);\n\t};\n\t\n\treturn setTimeout(function() {\n\t\tself.dom().focus();\n\t\treturn self.selectAll();\n\t},5);\n};\n\nContentEditable.prototype.deactivate = function (){\n\tthis.dom().contenteditable = false;\n\tthis.dom().removeAttribute('contenteditable');\n\tthis.dom().blur();\n\tthis.dom().tabindex = null;\n\twindow.getSelection().removeAllRanges();\n\tthis.dom().ContentEditableInstance = null;\n\tthis._node._text_ = this._node._tree_ = null;\n\tfor (let o = this._handlers, handler, i = 0, keys = Object.keys(o), l = keys.length, e; i < l; i++){\n\t\te = keys[i];handler = o[e];this.dom().removeEventListener(e,handler,true);\n\t};\n\treturn this;\n};\n\nContentEditable.prototype.selectAll = function (){\n\tvar sel,range;\n\t\n\tif (window.getSelection && document.createRange) {\n\t\trange = document.createRange();\n\t\trange.selectNodeContents(this._dom);\n\t\tsel = window.getSelection();\n\t\tsel.removeAllRanges();\n\t\tsel.addRange(range);\n\t} else if (document.body.createTextRange) {\n\t\trange = document.body.createTextRange();\n\t\trange.moveToElementText(this._dom);\n\t\trange.select();\n\t};\n\treturn this;\n};\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\n\n\nvar SKCubeGrid = _2.defineTag('SKCubeGrid', function(tag){\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\treturn this.$open(0).flag('sk-cube-grid').setChildren($.$ = $.$ || [\n\t\t\t_1('div',$,0,this).flag('sk-cube').flag('sk-cube1'),\n\t\t\t_1('div',$,1,this).flag('sk-cube').flag('sk-cube2'),\n\t\t\t_1('div',$,2,this).flag('sk-cube').flag('sk-cube3'),\n\t\t\t_1('div',$,3,this).flag('sk-cube').flag('sk-cube4'),\n\t\t\t_1('div',$,4,this).flag('sk-cube').flag('sk-cube5'),\n\t\t\t_1('div',$,5,this).flag('sk-cube').flag('sk-cube6'),\n\t\t\t_1('div',$,6,this).flag('sk-cube').flag('sk-cube7'),\n\t\t\t_1('div',$,7,this).flag('sk-cube').flag('sk-cube8'),\n\t\t\t_1('div',$,8,this).flag('sk-cube').flag('sk-cube9')\n\t\t],2).synced();\n\t};\n})\nexports.SKCubeGrid = SKCubeGrid;\n\nvar SKCubeMove = _2.defineTag('SKCubeMove', function(tag){\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\treturn this.$open(0).flag('sk-cube-move').setChildren($.$ = $.$ || [\n\t\t\t_1('div',$,0,this).flag('cube'),\n\t\t\t_1('div',$,1,this).flag('cube')\n\t\t],2).synced();\n\t};\n})\nexports.SKCubeMove = SKCubeMove;\n\nvar SKDoubleBounce = _2.defineTag('SKDoubleBounce', function(tag){\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\treturn this.$open(0).setChildren($.$ = $.$ || [\n\t\t\t_1('div',$,0,this),\n\t\t\t_1('div',$,1,this)\n\t\t],2).synced();\n\t};\n})\nexports.SKDoubleBounce = SKDoubleBounce;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar uxa1$ = require('uxa1'), Dialog = uxa1$.Dialog, TextField = uxa1$.TextField;\n\nvar BrowserConfigurationDialog = _2.defineTag('BrowserConfigurationDialog', Dialog, function(tag){\n\ttag.prototype.browser = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._body = this._body||(t0=_1('div',this)).flag('body').setContent([\n\t\t\t_1(TextField,t0.$,'A',t0).setType('text').setName('rootPath').setLabel('Root directory').setRequired(false).setPlaceholder('/').setDesc(\"The browser will serve files from this directory\"),\n\t\t\t_1(TextField,t0.$,'B',t0).setType('text').setName('catchallPath').setLabel('Catch-all filename').setDesc(\"This file will be served if the URL doesn't match a static file. Relative to root path.\")\n\t\t],2)).end((\n\t\t\tt0.$.A.end(),\n\t\t\tt0.$.B.end()\n\t\t,true));\n\t};\n\t\n\ttag.prototype.onuxasubmit = function (e){\n\t\tvar self = this;\n\t\treturn self.uxa().queue().add(200,function() {\n\t\t\tvar v_;\n\t\t\tvar vals = self.formData();\n\t\t\tself.browser().setRootPath((vals.rootPath + \"/\").replace(/\\/+/g,\"/\"));\n\t\t\treturn (self.browser().setCatchallPath(v_ = (vals.catchallPath || null)),v_);\n\t\t});\n\t};\n})\nexports.BrowserConfigurationDialog = BrowserConfigurationDialog;\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\n// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/), _2 = Imba.createElementFactory(/*SCOPEID*/);\nvar protocol$ = require('../protocol'), ACTION = protocol$.ACTION, DOM = protocol$.DOM, KEYS = protocol$.KEYS, LAYOUTMASK = protocol$.LAYOUTMASK;\n\nvar Dimensions = require('../core/Dimensions').Dimensions;\n\nvar IconButton = require('uxa1').IconButton;\nvar PaneWidget = require('./PaneWidget').PaneWidget;\nvar LayoutGesture = require('../util/LayoutGesture').LayoutGesture;\nvar Delay = require('../util/Delay').Delay;\nvar PlayerPage = require('./browser/PlayerPage').PlayerPage;\nvar History = require('./browser/History').History;\n\nvar ContentEditable = require('../util/ContentEditable').ContentEditable;\n\nvar Indicator = require('uxa1').Indicator;\n\nvar SpinKit$ = require('../legacy/SpinKit'), SKCubeGrid = SpinKit$.SKCubeGrid, SKCubeMove = SpinKit$.SKCubeMove, SKDoubleBounce = SpinKit$.SKDoubleBounce;\n\nvar BrowserConfigurationDialog = require('../views/BrowserConfigurationDialog').BrowserConfigurationDialog;\n\nvar styleProcessor = require('./browser/styleProcessor');\n\nvar BROWSER_MAX = exports.BROWSER_MAX = 'max';\nvar BROWSER_MIN = exports.BROWSER_MIN = 'min';\nvar BROWSER_WINDOWED = exports.BROWSER_WINDOWED = 'win';\n\n\n// externs;\n\nvar BrowserPathField = _1.defineTag('BrowserPathField', function(tag){\n\t\n\ttag.prototype.ontap = function (e){\n\t\te.halt();\n\t\tnew ContentEditable(this.dom());\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.ontouchstart = function (t){\n\t\treturn this;\n\t};\n});\n\n_1.extendTag('iframe', function(tag){\n\ttag.prototype.srcdoc = function(v){ return this.getAttribute('srcdoc'); }\n\ttag.prototype.setSrcdoc = function(v){ this.setAttribute('srcdoc',v); return this; };\n});\n\nvar PlayerFrame = _1.defineTag('PlayerFrame', 'iframe', function(tag){\n\ttag.prototype.allow = function(v){ return this.getAttribute('allow'); }\n\ttag.prototype.setAllow = function(v){ this.setAttribute('allow',v); return this; };\n\ttag.prototype.__data = {watch: 'dataDidSet',name: 'data'};\n\ttag.prototype.data = function(v){ return this._data; }\n\ttag.prototype.setData = function(v){\n\t\tvar a = this.data();\n\t\tif(v != a) { this._data = v; }\n\t\tif(v != a) { this.dataDidSet && this.dataDidSet(v,a,this.__data) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.build = function (){\n\t\tvar self = this;\n\t\tself._dom.onload = function() {\n\t\t\tself._loaded = true;\n\t\t\treturn self.render();\n\t\t};\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.dataDidSet = function (data){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tif (this._loaded && this.data() && this.dom().contentWindow) {\n\t\t\tthis.data().render(this.dom().contentWindow);\n\t\t};\n\t\treturn this;\n\t};\n});\n\nvar RunnerFrame = _1.defineTag('RunnerFrame', 'iframe', function(tag){\n\ttag.prototype.allow = function(v){ return this.getAttribute('allow'); }\n\ttag.prototype.setAllow = function(v){ this.setAttribute('allow',v); return this; };\n\ttag.prototype.history = function(v){ return this._history; }\n\ttag.prototype.setHistory = function(v){ this._history = v; return this; };\n\t\n\ttag.prototype.page = function (){\n\t\treturn this.data().browser().page();\n\t};\n\t\n\ttag.prototype.build = function (){\n\t\tvar self = this;\n\t\tself._history = new History(self);\n\t\t\n\t\tself._queuedMessages = [];\n\t\tself._onmessage = function(e) {\n\t\t\tif (self.parent() && e.source === self.dom().contentWindow) {\n\t\t\t\tif (self._winUnload && (Date.now() - self._winUnload) < 5000) {\n\t\t\t\t\tself.log(\"winUnload\",Date.now() - self._winUnload);\n\t\t\t\t\treturn self._queuedMessages.push(e);\n\t\t\t\t} else {\n\t\t\t\t\treturn self.data().onrunnermessage(e,e.data);\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t\t\n\t\tself._onunload = function(e) {\n\t\t\tself._winUnload = Date.now();\n\t\t\treturn setTimeout(function() {\n\t\t\t\tself.log(\"removed winUnload again\",Date.now() - self._winUnload);\n\t\t\t\treturn self._winUnload = null;\n\t\t\t},100);\n\t\t};\n\t\t\n\t\tself.dom().onload = function(e) {\n\t\t\tself.log('onload',e);\n\t\t\tlet req = self.data().currentRequest();\n\t\t\tif (!req || req.loaded) {\n\t\t\t\tsetTimeout(function() { return self.go(\"/403.html\"); },20);\n\t\t\t};\n\t\t\t\n\t\t\tif (req) {\n\t\t\t\treturn req.loaded = true;\n\t\t\t};\n\t\t};\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.onloadexternal = function (e){\n\t\te.halt();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.post = function (msg){\n\t\treturn this.dom().contentWindow.postMessage(msg,'*');\n\t};\n\t\n\ttag.prototype.isActive = function (){\n\t\treturn !(!this.dom().offsetParent) && !(!this.dom().contentWindow);\n\t};\n\t\n\ttag.prototype.start = function (){\n\t\tthis.log('start');\n\t\tif (!(this.parent())) {\n\t\t\tthis.data()._body.dom().appendChild(this.dom());\n\t\t\tthis.data()._body.flag('running');\n\t\t\twindow.addEventListener('message',this._onmessage);\n\t\t\twindow.addEventListener('beforeunload',this._onunload,true);\n\t\t\tthis.history().reset();\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.stop = function (){\n\t\tthis.log('stop');\n\t\tif (this.parent()) {\n\t\t\tthis.parent().unflag('running');\n\t\t\tthis.parent().dom().removeChild(this.dom());\n\t\t\twindow.removeEventListener('message',this._onmessage);\n\t\t\twindow.removeEventListener('beforeunload',this._onunload,true);\n\t\t\tthis.history().reset();\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.go = function (path){\n\t\tlet url = this.data().browser().encodeURI(path);\n\t\t// console.log \"go url\",src,url, data.browser:catchAllPath\n\t\tif (this.parent() && this.src() == url) {\n\t\t\treturn this.data().browser().refresh(path);\n\t\t} else {\n\t\t\tthis.setSrc(url);\n\t\t\treturn this.start();\n\t\t};\n\t};\n});\n\nvar BrowserFrame = _1.defineTag('BrowserFrame', function(tag){\n\t\n\ttag.prototype.layoutMask = function (){\n\t\treturn LAYOUTMASK.SCALED | LAYOUTMASK.BOUNDLESS;\n\t};\n});\n\nvar BrowserView = _1.defineTag('BrowserView', function(tag){\n\t\n\ttag.prototype.__autoPos = {'default': true,name: 'autoPos'};\n\ttag.prototype.autoPos = function(v){ return this._autoPos; }\n\ttag.prototype.setAutoPos = function(v){ this._autoPos = v; return this; }\n\ttag.prototype._autoPos = true;\n\ttag.prototype.__autoSize = {'default': true,name: 'autoSize'};\n\ttag.prototype.autoSize = function(v){ return this._autoSize; }\n\ttag.prototype.setAutoSize = function(v){ this._autoSize = v; return this; }\n\ttag.prototype._autoSize = true;\n\ttag.prototype.__autoMinimize = {'default': false,name: 'autoMinimize'};\n\ttag.prototype.autoMinimize = function(v){ return this._autoMinimize; }\n\ttag.prototype.setAutoMinimize = function(v){ this._autoMinimize = v; return this; }\n\ttag.prototype._autoMinimize = false;\n\ttag.prototype.__page = {watch: 'pageDidSet',name: 'page'};\n\ttag.prototype.page = function(v){ return this._page; }\n\ttag.prototype.setPage = function(v){\n\t\tvar a = this.page();\n\t\tif(v != a) { this._page = v; }\n\t\tif(v != a) { this.pageDidSet && this.pageDidSet(v,a,this.__page) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.__pipScale = {watch: 'pipScaleDidSet',name: 'pipScale'};\n\ttag.prototype.pipScale = function(v){ return this._pipScale; }\n\ttag.prototype.setPipScale = function(v){\n\t\tvar a = this.pipScale();\n\t\tif(v != a) { this._pipScale = v; }\n\t\tif(v != a) { this.pipScaleDidSet && this.pipScaleDidSet(v,a,this.__pipScale) }\n\t\treturn this;\n\t};\n\ttag.prototype.fullScale = function(v){ return this._fullScale; }\n\ttag.prototype.setFullScale = function(v){ this._fullScale = v; return this; };\n\t\n\ttag.prototype.__visible = {watch: 'visibleDidSet',name: 'visible'};\n\ttag.prototype.visible = function(v){ return this._visible; }\n\ttag.prototype.setVisible = function(v){\n\t\tvar a = this.visible();\n\t\tif(v != a) { this._visible = v; }\n\t\tif(v != a) { this.visibleDidSet && this.visibleDidSet(v,a,this.__visible) }\n\t\treturn this;\n\t};\n\ttag.prototype.__minimized = {watch: 'minimizedDidSet',name: 'minimized'};\n\ttag.prototype.minimized = function(v){ return this._minimized; }\n\ttag.prototype.setMinimized = function(v){\n\t\tvar a = this.minimized();\n\t\tif(v != a) { this._minimized = v; }\n\t\tif(v != a) { this.minimizedDidSet && this.minimizedDidSet(v,a,this.__minimized) }\n\t\treturn this;\n\t};\n\ttag.prototype.__windowed = {watch: 'windowedDidSet',name: 'windowed'};\n\ttag.prototype.windowed = function(v){ return this._windowed; }\n\ttag.prototype.setWindowed = function(v){\n\t\tvar a = this.windowed();\n\t\tif(v != a) { this._windowed = v; }\n\t\tif(v != a) { this.windowedDidSet && this.windowedDidSet(v,a,this.__windowed) }\n\t\treturn this;\n\t};\n\ttag.prototype.__focused = {watch: 'focusedDidSet',name: 'focused'};\n\ttag.prototype.focused = function(v){ return this._focused; }\n\ttag.prototype.setFocused = function(v){\n\t\tvar a = this.focused();\n\t\tif(v != a) { this._focused = v; }\n\t\tif(v != a) { this.focusedDidSet && this.focusedDidSet(v,a,this.__focused) }\n\t\treturn this;\n\t};\n\ttag.prototype.userMinimized = function(v){ return this._userMinimized; }\n\ttag.prototype.setUserMinimized = function(v){ this._userMinimized = v; return this; };\n\ttag.prototype.__hasUserFocus = {watch: 'hasUserFocusDidSet',name: 'hasUserFocus'};\n\ttag.prototype.hasUserFocus = function(v){ return this._hasUserFocus; }\n\ttag.prototype.setHasUserFocus = function(v){\n\t\tvar a = this.hasUserFocus();\n\t\tif(v != a) { this._hasUserFocus = v; }\n\t\tif(v != a) { this.hasUserFocusDidSet && this.hasUserFocusDidSet(v,a,this.__hasUserFocus) }\n\t\treturn this;\n\t};\n\ttag.prototype.__hasPointerFocus = {watch: 'hasPointerFocusDidSet',name: 'hasPointerFocus'};\n\ttag.prototype.hasPointerFocus = function(v){ return this._hasPointerFocus; }\n\ttag.prototype.setHasPointerFocus = function(v){\n\t\tvar a = this.hasPointerFocus();\n\t\tif(v != a) { this._hasPointerFocus = v; }\n\t\tif(v != a) { this.hasPointerFocusDidSet && this.hasPointerFocusDidSet(v,a,this.__hasPointerFocus) }\n\t\treturn this;\n\t};\n\ttag.prototype.currentRequest = function(v){ return this._currentRequest; }\n\ttag.prototype.setCurrentRequest = function(v){ this._currentRequest = v; return this; };\n\t\n\ttag.prototype.__mode = {watch: 'modeDidSet',name: 'mode'};\n\ttag.prototype.mode = function(v){ return this._mode; }\n\ttag.prototype.setMode = function(v){\n\t\tvar a = this.mode();\n\t\tif(v != a) { this._mode = v; }\n\t\tif(v != a) { this.modeDidSet && this.modeDidSet(v,a,this.__mode) }\n\t\treturn this;\n\t};\n\ttag.prototype.runner = function(v){ return this._runner; }\n\ttag.prototype.setRunner = function(v){ this._runner = v; return this; };\n\t\n\ttag.prototype.__minWidth = {watch: 'syncStyleVar',unit: 'px',name: 'minWidth'};\n\ttag.prototype.minWidth = function(v){ return this._minWidth; }\n\ttag.prototype.setMinWidth = function(v){\n\t\tvar a = this.minWidth();\n\t\tif(v != a) { this._minWidth = v; }\n\t\tif(v != a) { this.syncStyleVar && this.syncStyleVar(v,a,this.__minWidth) }\n\t\treturn this;\n\t};\n\ttag.prototype.__maxWidth = {watch: 'syncStyleVar',unit: 'px',name: 'maxWidth'};\n\ttag.prototype.maxWidth = function(v){ return this._maxWidth; }\n\ttag.prototype.setMaxWidth = function(v){\n\t\tvar a = this.maxWidth();\n\t\tif(v != a) { this._maxWidth = v; }\n\t\tif(v != a) { this.syncStyleVar && this.syncStyleVar(v,a,this.__maxWidth) }\n\t\treturn this;\n\t};\n\ttag.prototype.__maxHeight = {watch: 'syncStyleVar',unit: 'px',name: 'maxHeight'};\n\ttag.prototype.maxHeight = function(v){ return this._maxHeight; }\n\ttag.prototype.setMaxHeight = function(v){\n\t\tvar a = this.maxHeight();\n\t\tif(v != a) { this._maxHeight = v; }\n\t\tif(v != a) { this.syncStyleVar && this.syncStyleVar(v,a,this.__maxHeight) }\n\t\treturn this;\n\t};\n\ttag.prototype.__winHeight = {watch: 'syncStyleVar',unit: 'px',name: 'winHeight'};\n\ttag.prototype.winHeight = function(v){ return this._winHeight; }\n\ttag.prototype.setWinHeight = function(v){\n\t\tvar a = this.winHeight();\n\t\tif(v != a) { this._winHeight = v; }\n\t\tif(v != a) { this.syncStyleVar && this.syncStyleVar(v,a,this.__winHeight) }\n\t\treturn this;\n\t};\n\ttag.prototype.__winWidth = {watch: 'syncStyleVar',unit: 'px',name: 'winWidth'};\n\ttag.prototype.winWidth = function(v){ return this._winWidth; }\n\ttag.prototype.setWinWidth = function(v){\n\t\tvar a = this.winWidth();\n\t\tif(v != a) { this._winWidth = v; }\n\t\tif(v != a) { this.syncStyleVar && this.syncStyleVar(v,a,this.__winWidth) }\n\t\treturn this;\n\t};\n\ttag.prototype.__winTop = {watch: 'syncStyleVar',unit: 'px',name: 'winTop'};\n\ttag.prototype.winTop = function(v){ return this._winTop; }\n\ttag.prototype.setWinTop = function(v){\n\t\tvar a = this.winTop();\n\t\tif(v != a) { this._winTop = v; }\n\t\tif(v != a) { this.syncStyleVar && this.syncStyleVar(v,a,this.__winTop) }\n\t\treturn this;\n\t};\n\ttag.prototype.__winLeft = {watch: 'syncStyleVar',unit: 'px',name: 'winLeft'};\n\ttag.prototype.winLeft = function(v){ return this._winLeft; }\n\ttag.prototype.setWinLeft = function(v){\n\t\tvar a = this.winLeft();\n\t\tif(v != a) { this._winLeft = v; }\n\t\tif(v != a) { this.syncStyleVar && this.syncStyleVar(v,a,this.__winLeft) }\n\t\treturn this;\n\t};\n\ttag.prototype.__winScale = {watch: 'syncStyleVar',name: 'winScale'};\n\ttag.prototype.winScale = function(v){ return this._winScale; }\n\ttag.prototype.setWinScale = function(v){\n\t\tvar a = this.winScale();\n\t\tif(v != a) { this._winScale = v; }\n\t\tif(v != a) { this.syncStyleVar && this.syncStyleVar(v,a,this.__winScale) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.__winMinScale = {watch: 'syncStyleVar',name: 'winMinScale'};\n\ttag.prototype.winMinScale = function(v){ return this._winMinScale; }\n\ttag.prototype.setWinMinScale = function(v){\n\t\tvar a = this.winMinScale();\n\t\tif(v != a) { this._winMinScale = v; }\n\t\tif(v != a) { this.syncStyleVar && this.syncStyleVar(v,a,this.__winMinScale) }\n\t\treturn this;\n\t};\n\ttag.prototype.__maxMinScale = {watch: 'syncStyleVar',name: 'maxMinScale'};\n\ttag.prototype.maxMinScale = function(v){ return this._maxMinScale; }\n\ttag.prototype.setMaxMinScale = function(v){\n\t\tvar a = this.maxMinScale();\n\t\tif(v != a) { this._maxMinScale = v; }\n\t\tif(v != a) { this.syncStyleVar && this.syncStyleVar(v,a,this.__maxMinScale) }\n\t\treturn this;\n\t};\n\ttag.prototype.__maxScale = {watch: 'syncStyleVar',name: 'maxScale'};\n\ttag.prototype.maxScale = function(v){ return this._maxScale; }\n\ttag.prototype.setMaxScale = function(v){\n\t\tvar a = this.maxScale();\n\t\tif(v != a) { this._maxScale = v; }\n\t\tif(v != a) { this.syncStyleVar && this.syncStyleVar(v,a,this.__maxScale) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.browser = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.browser().space();\n\t};\n\t\n\ttag.prototype.syncStyleVar = function (value,prev,key){\n\t\tlet name = key.name;\n\t\tlet unit = key.unit;\n\t\treturn this.dom().style.setProperty('--' + name,unit ? ((value + unit)) : value);\n\t};\n\t\n\ttag.prototype.setup = function (){\n\t\tvar _t1;\n\t\tthis._sentStyleSheets = {};\n\t\tthis._layoutMask = 0;\n\t\tthis._runner = (_2(RunnerFrame).flag('runner').setAllow(\"geolocation; camera; microphone\")).setData(this).end();\n\t\tthis.setSref(this.data().id());\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.stop = function (){\n\t\treturn this.runner().stop();\n\t};\n\t\n\ttag.prototype.mount = function (){\n\t\tvar self = this;\n\t\tself.data().space().on('reflow',function() { return self.reflow(true); });\n\t\t\n\t\tself.data().space().on('playing',function() {\n\t\t\treturn self.browser().options().discardLocals(['minimized','windowed','focused']);\n\t\t});\n\t\t\n\t\tself._mounted = true;\n\t\tself.reflow(true);\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.go = function (url,nav){\n\t\t// check if we are allowed to go here though\n\t\tif(nav === undefined) nav = null;\n\t\tthis.runner().go(url);\n\t\tthis.render();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.history = function (){\n\t\treturn this.runner().history();\n\t};\n\t\n\ttag.prototype.back = function (){\n\t\tif (this.history().hasPrev()) {\n\t\t\tif (this.history().isInvalidated()) {\n\t\t\t\tlet rel = this.history().relative(-1);\n\t\t\t\tthis.history().reset();\n\t\t\t\tthis.runner().go(rel);\n\t\t\t} else {\n\t\t\t\tthis.runner().post({type: 'back'});\n\t\t\t};\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.forward = function (){\n\t\tif (this.history().hasNext()) {\n\t\t\tthis.runner().post({type: 'forward'});\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.refresh = function (){\n\t\t// what if runner is already active?\n\t\t// console.log \"::refresh\", runner.isActive, @path\n\t\tvar self = this;\n\t\tif (self.runner().isActive()) {\n\t\t\tif (self._path) {\n\t\t\t\tself.runner().post({type: 'reload',url: self._path});\n\t\t\t\tself._path = '';\n\t\t\t} else {\n\t\t\t\tself.runner().post({type: 'reload'});\n\t\t\t};\n\t\t} else {\n\t\t\tself.go(self.browser().url(),0);\n\t\t};\n\t\t\n\t\tself.api().analytics().castRun(self.space().id(),self.space().type());\n\t\treturn setTimeout(function() {\n\t\t\tif (!(self.windowed())) { return self._frame.dom().focus() };\n\t\t},20);\n\t};\n\t\n\ttag.prototype.onpathchange = function (e){\n\t\tlet url = e.data() || '/';\n\t\tthis._path = url;\n\t\treturn (url == this.browser().url()) ? this.refresh(url) : this.go(url);\n\t};\n\t\n\ttag.prototype.oncontainermessage = function (e){\n\t\tthis.log('oncontainermessage',e);\n\t\tif (e.type == 'request') {\n\t\t\tthis.setCurrentRequest(e);\n\t\t\tlet url = this.browser().normalizeURL(e.url);\n\t\t\tif (!e.isHistoryNavigation) {\n\t\t\t\tif (url != this.history().current()) {\n\t\t\t\t\tthis.history().push(url);\n\t\t\t\t};\n\t\t\t};\n\t\t\tthis.browser().push_(ACTION.PAGE_REQUEST,[KEYS.GET,url || null]);\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.onrunnermessage = function (e,op){\n\t\tvar self = this, hasBody, v_;\n\t\tif (op.type == 'actions') {\n\t\t\tlet hasPointer = self.space().pointerTracker().isActive();\n\t\t\t\n\t\t\tlet res = [];\n\t\t\tfor (let i = 0, items = iter$(op.actions), len = items.length, item, content; i < len; i++) {\n\t\t\t\titem = items[i];\n\t\t\t\tlet c = item[0];\n\t\t\t\t// dont include pointer-related events if we are in lab\n\t\t\t\tif (!hasPointer && (c == ACTION.DOM_ACTIVEIN || c == ACTION.DOM_HOVERIN || c == ACTION.DOM_FOCUSIN)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tself.data().push_(item[0],item[1]);\n\t\t\t\tres.push((item[0] == ACTION.PAGE_LOADED) ? (\n\t\t\t\t\tcontent = item[1][0],\n\t\t\t\t\tcontent = content.replace(/<script\\b[^>]*>([^]*?)<\\/script>/g,\"\"),\n\t\t\t\t\thasBody = !/<body\\b[^>]*>\\s*<\\/body>/.test(content),\n\t\t\t\t\thasBody && (\n\t\t\t\t\t\tself.browser().setVisible(true)\n\t\t\t\t\t)\n\t\t\t\t) : ((item[0] == DOM.MUTATE) ? (\n\t\t\t\t\tself.browser().setVisible(true)\n\t\t\t\t) : ((item[0] == ACTION.PAGE_LOG) && (\n\t\t\t\t\ttrue\n\t\t\t\t))));\n\t\t\t};\n\t\t\treturn res;\n\t\t} else if (op.type == 'domevent') {\n\t\t\treturn self.browser().space().emit('browserevent',op.data);\n\t\t} else if (op.type == 'location') {\n\t\t\treturn (self.browser().setUrl(v_ = self.browser().normalizeURL(op.url)),v_);\n\t\t} else if (op.type == 'history') {\n\t\t\tself.log('history',op);\n\t\t\tif (op.action == 'go') {\n\t\t\t\tself.history().go(op.delta);\n\t\t\t\treturn;\n\t\t\t};\n\t\t\t\n\t\t\tif (!op.url) { return };\n\t\t\t\n\t\t\tlet url = self.browser().normalizeURL(op.url);\n\t\t\tself.browser().push_(ACTION.PAGE_HISTORY,[op.action,op.state,url]);\n\t\t\t\n\t\t\tif (op.action == 'pushState') {\n\t\t\t\treturn self.history().push(url);\n\t\t\t} else if (op.action == 'replaceState') {\n\t\t\t\treturn self.history().replace(url).trim();\n\t\t\t};\n\t\t} else if (op.type == 'beforeunload') {\n\t\t\treturn self.log('beforeunload',op.predictedTarget);\n\t\t\t// do we always \n\t\t\t// let url = browser.normalizeURL(op:predictedTarget or '')\n\t\t\t// browser.push_(ACTION.PAGE_REQUEST,[KEYS.GET,url or null])\n\t\t} else if (op.type == 'cancelled') {\n\t\t\tself.log(\"cancelled\");\n\t\t\tself.browser().page().setCancelled(true);\n\t\t\tself.runner().stop();\n\t\t\treturn self.render();\n\t\t} else if (op.type == 'pageload') {\n\t\t\tvar status = op.status;\n\t\t\tvar url = self.browser().normalizeURL(op.url);\n\t\t\tself.browser().push_(ACTION.PAGE_LOAD,[status,url]);\n\t\t\tif (self.currentRequest()) {\n\t\t\t\treturn self.currentRequest().loading = true;\n\t\t\t};\n\t\t} else if (op.type == 'loader:busy') {\n\t\t\t// console.log \"loader:busy\"\n\t\t\tself.browser().page().setLoading(true);\n\t\t\treturn self.render();\n\t\t} else if (op.type == 'loader:done') {\n\t\t\t// console.log \"loader:done\"\n\t\t\treturn setTimeout(function() {\n\t\t\t\tself.browser().page().setLoading(false);\n\t\t\t\treturn self.render();\n\t\t\t},100);\n\t\t} else {\n\t\t\treturn self.log(\"tracker message\",op.type);\n\t\t};\n\t};\n\t\n\ttag.prototype.posToScreen = function (x,y){\n\t\treturn this.data().posToScreen(x,y);\n\t};\n\t\n\ttag.prototype.sendStyleSheets = function (){\n\t\tvar path, body;\n\t\tlet res = [];\n\t\tfor (let i = 0, items = iter$(this.data().space().files()), len = items.length, file; i < len; i++) {\n\t\t\tfile = items[i];\n\t\t\tres.push((file.lang() == 'css') && (\n\t\t\t\tpath = file.path(),\n\t\t\t\tbody = file.currentBody(),\n\t\t\t\t(this._sentStyleSheets[path] != body) && (\n\t\t\t\t\tthis._sentStyleSheets[path] = body,\n\t\t\t\t\t// what if we are not running?!?\n\t\t\t\t\tthis.runner().post({type: 'stylesheet',path: path,body: styleProcessor.process(body)})\n\t\t\t\t)\n\t\t\t));\n\t\t};\n\t\treturn res;\n\t};\n\t\n\ttag.prototype.isMovable = function (){\n\t\treturn !this.api().isMobile();\n\t};\n\t\n\ttag.prototype.ontouchstart = function (t){\n\t\t// experimental - just a hacky way to make\n\t\t// the mobile experience work ok.\n\t\tif (this.autoMinimize()) {\n\t\t\tthis.setHasUserFocus(!(this.hasUserFocus()));\n\t\t\treturn this.render();\n\t\t};\n\t\t\n\t\tif (this.minimized()) {\n\t\t\tt.event().preventDefault();\n\t\t\tthis._frame.dom().focus();\n\t\t\treturn (this.browser().setMinimized(false),false);\n\t\t} else if (this.isMovable()) {\n\t\t\tlet el = t.event().target;\n\t\t\tif (el && !el.matches('input,.tool')) {\n\t\t\t\treturn LayoutGesture.wrap(t,{layout: this._layout});\n\t\t\t};\n\t\t};\n\t};\n\t\n\ttag.prototype.onmoveupdate = function (g,done){\n\t\tif(done === undefined) done = false;\n\t\tif (!(this.windowed() && !(this.minimized()))) { return };\n\t\t\n\t\tif (g.dx() || g.dy()) {\n\t\t\tthis.setAutoPos(false);\n\t\t};\n\t\t\n\t\tif (this.autoPos() == false) {\n\t\t\tvar mask = done ? this._layoutMask : Dimensions.MOVING;\n\t\t\tvar x = Math.round(g.layout().left() + g.dx());\n\t\t\tvar y = Math.round(Math.max(g.layout().top() + g.dy(),40));\n\t\t\tthis._layout.set({left: x,top: y,targetRef: this.data().id(),mask: mask}).ensureInsideParent();\n\t\t\tthis.data().setLayout(this._layout.clone());\n\t\t\tthis.redraw();\n\t\t\treturn this.data().space().emit('rearranging',this.data());\n\t\t};\n\t};\n\t\n\ttag.prototype.onmoveend = function (g){\n\t\tif (!(this.windowed() && !(this.minimized()))) { return };\n\t\treturn this.onmoveupdate(g,true);\n\t};\n\t\n\ttag.prototype.onresizestart = function (g){\n\t\tthis.flag('resizing');\n\t\tlet pad = 40;\n\t\tlet sbox = this.space().view().box();\n\t\tlet x = g.x() - sbox.left;\n\t\tlet y = g.y() - sbox.top;\n\t\tg._dxClamp = [sbox.width - x - pad,-x + pad];\n\t\tg._dyClamp = [sbox.height - y - pad,-y + pad];\n\t\t// log \"onresizestart\",g\n\t\tlet mask = Dimensions.RESIZING;\n\t\t\n\t\tif (!(this.windowed())) {\n\t\t\tg._maxWidth = this.browser().maxWidth();\n\t\t\tg._maxHeight = this.browser().maxHeight();\n\t\t};\n\t\t\n\t\tif (g.ax()) {\n\t\t\tmask |= ((g.ax() > 0) ? Dimensions.PIN_LEFT : Dimensions.PIN_RIGHT);\n\t\t};\n\t\tif (g.ay()) {\n\t\t\tmask |= ((g.ay() > 0) ? Dimensions.PIN_TOP : Dimensions.PIN_BOTTOM);\n\t\t};\n\t\treturn this._layoutMask = mask;\n\t};\n\t\n\ttag.prototype.clamp = function (min,val,max,round){\n\t\tif(round === undefined) round = 1;\n\t\treturn Math.min(Math.max(Math.round(val / round) * round,min),max);\n\t};\n\t\n\ttag.prototype.onresizeupdate = function (g,done){\n\t\tif(done === undefined) done = false;\n\t\tthis.setAutoSize(false);\n\t\t\n\t\tlet dx = g.dx();\n\t\tlet dy = g.dy();\n\t\t\n\t\tdx = Math.min(g._dxClamp[0],Math.max(dx,g._dxClamp[1]));\n\t\tdy = Math.min(g._dyClamp[0],Math.max(dy,g._dyClamp[1]));\n\t\t\n\t\tif (!(this.windowed())) {\n\t\t\tlet w = g._maxWidth + (dx * g.ax() * 2);\n\t\t\tlet h = g._maxHeight + (dy * g.ay() * 2);\n\t\t\t// should round to nearest 2 px\n\t\t\tthis.browser().setMaxWidth(this.clamp(240,w,1280,2)); // Math.round((g.@maxWidth + (dx * g.ax * 2)) / 2) * 2 \n\t\t\tthis.browser().setMaxHeight(this.clamp(140,h,1080,2)); // Math.round((g.@maxHeight + (dy * g.ay * 2)) / 2) * 2\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\t\n\t\t// log \"onresizeupdate\",g\n\t\tlet l = g.layout();\n\t\tlet o = {\n\t\t\twidth: l.width() + dx * g.ax(),\n\t\t\theight: l.height() + dy * g.ay(),\n\t\t\tleft: l.left(),\n\t\t\ttop: l.top(),\n\t\t\ttargetRef: this.data().id(),\n\t\t\tmask: (this._layoutMask || 0)\n\t\t};\n\t\t\n\t\to.width = Math.round(Math.max(o.width,120) / 2) * 2;\n\t\to.height = Math.round(Math.max(o.height,80) / 2) * 2;\n\t\t\n\t\tif (g.ax() < 0) {\n\t\t\to.left += (o.width - l.width()) * g.ax();\n\t\t\to.left = Math.max(o.left,20);\n\t\t};\n\t\t\n\t\tif (g.ay() < 0) {\n\t\t\to.top += (o.height - l.height()) * g.ay();\n\t\t};\n\t\t\n\t\tthis.redraw(this._layout.set(o).ensureInsideParent());\n\t\tthis.data().setLayout(this._layout.clone());\n\t\treturn this.data().space().emit('rearranging',this.data());\n\t};\n\t\n\ttag.prototype.onresizeend = function (g){\n\t\tthis.log(\"onresizeend\",this._layoutMask);\n\t\tthis._layoutMask = 0;\n\t\tthis.onresizeupdate(g,true);\n\t\treturn this.unflag('resizing');\n\t};\n\t\n\ttag.prototype.clientLayout = function (){\n\t\treturn this._layout;\n\t};\n\t\n\ttag.prototype.redraw = function (layout){\n\t\tif(layout === undefined) layout = this._layout;\n\t\tlet prev = this._prevLayout;\n\t\t\n\t\tlet ax = layout.anchorX();\n\t\tlet ay = layout.anchorY();\n\t\tlet vw = this.space().vw();\n\t\tlet vh = this.space().vh();\n\t\t\n\t\tlet left = Math.round(layout.left()) + 'px';\n\t\tlet top = Math.round(layout.top()) + 'px';\n\t\t\n\t\t// set css variables\n\t\tthis.setMinWidth((vw < 500) ? 100 : 140);\n\t\tthis.setWinHeight(Math.round(layout.height()));\n\t\tthis.setWinWidth(Math.round(layout.width()));\n\t\tthis.setWinMinScale(this.minWidth() / this.winWidth());\n\t\tthis.setWinTop(Math.round(layout.top()) + (this.winHeight() * 0.5));\n\t\tthis.setWinLeft(Math.round(layout.left()) + (this.winWidth() * 0.5));\n\t\tthis.setWinScale((vw && vh) ? Math.min((vw - 40) / this.winWidth(),(vh - 100) / this.winHeight(),1) : 1);\n\t\t\n\t\tthis.setAutoMinimize((this.winWidth() > vw * 0.3 && (vw < 900 || vh < 500)));\n\t\tthis.flag('autofit',this.autoMinimize());\n\t\treturn this.flag('narrow',layout.width() < 150);\n\t};\n\t\n\ttag.prototype.reflow = function (force){\n\t\tif(force === undefined) force = false;\n\t\tvar remote = this.browser().agentLayout();\n\t\t\n\t\tvar vp = this.browser().space().view().box();\n\t\tvar vw = vp.width;\n\t\tvar vh = vp.height;\n\t\t\n\t\tthis.setMinWidth((vw < 500) ? 100 : 140);\n\t\tthis.setMaxWidth(this.browser().maxWidth() || Math.min(vw - 200,600));\n\t\tthis.setMaxHeight(this.browser().maxHeight() || Math.min(vh - 200,460));\n\t\tthis.setMaxMinScale(this.minWidth() / this.maxWidth()); // Math.min(vw / (maxWidth + ),yratio,1)\n\t\tthis.setMaxScale((vw && vh) ? Math.min((vw - 40) / this.maxWidth(),(vh - 100) / this.maxHeight(),1) : 1);\n\t\t\n\t\tthis.setWindowed(this.browser().windowed());\n\t\tthis.setMinimized((this.browser().minimized() || (this.autoMinimize() && !(this.hasPointerFocus()) && !(this.hasUserFocus()))));\n\t\tthis.setFocused(this.space().agent().focus() == this.browser());\n\t\t\n\t\tvar v = remote._v;\n\t\tif (v == this._v && !force) { return };\n\t\tif (!remote._data) { return };\n\t\t\n\t\tvar layout = this._layout || (this._layout = remote.clone());\n\t\tvar mask = remote.mask();\n\t\t\n\t\tif (v != this._v || force) {\n\t\t\tif (this.autoPos() && this.autoSize()) {\n\t\t\t\tif (mask & Dimensions.RESIZING) {\n\t\t\t\t\tlayout.resizeParent(vw,vh).resize(remote.width(),remote.height(),mask);\n\t\t\t\t} else {\n\t\t\t\t\tlayout.set(remote.toObject()).resizeParent(vw,vh);\n\t\t\t\t};\n\t\t\t} else if (this.autoSize()) {\n\t\t\t\tlayout.resizeParent(vw,vh).resize(remote.width(),remote.height());\n\t\t\t\t// should autosize no matter what?\n\t\t\t} else if (this.autoPos()) {\n\t\t\t\tthis;\n\t\t\t};\n\t\t} else {\n\t\t\tlayout.resizeParent(vw,vh);\n\t\t};\n\t\t\n\t\tthis._v = v;\n\t\tlayout.round();\n\t\t\n\t\tthis.redraw(this._layout = layout);\n\t\t\n\t\tif (force || !this.browser().space().isEditing()) {\n\t\t\tthis.data().setLayout(layout.clone());\n\t\t};\n\t\treturn;\n\t};\n\t\n\ttag.prototype.visibleDidSet = function (bool){\n\t\tthis.flag('visible',bool);\n\t\tif (this._layout) {\n\t\t\tvar fit = this._layout.clone().ensureInsideParent();\n\t\t\treturn this.data().setLayout(fit);\n\t\t};\n\t};\n\t\n\t\n\ttag.prototype.minimizedDidSet = function (bool){\n\t\tthis.transitioning();\n\t\tthis.flag('minimized',bool);\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.transitioning = function (time){\n\t\tvar self = this;\n\t\tif(time === undefined) time = 400;\n\t\tlet mode = self.space().timeline().mode();\n\t\tif (mode == 'seeking') { return };\n\t\tclearTimeout(self._transitioningTimeout);\n\t\tself.flag('transitioning');\n\t\treturn self._transitioningTimeout = setTimeout(function() {\n\t\t\treturn self.unflag('transitioning');\n\t\t},time);\n\t};\n\t\n\ttag.prototype.windowedDidSet = function (bool){\n\t\tthis.transitioning();\n\t\tif (bool) {\n\t\t\tthis.flag('windowed');\n\t\t\treturn this.unflag('centered');\n\t\t} else {\n\t\t\tthis.flag('centered');\n\t\t\treturn this.unflag('windowed');\n\t\t};\n\t};\n\t\n\t\n\ttag.prototype.targetForPointer = function (){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.nodeForLayout = function (){\n\t\treturn this._frame;\n\t};\n\t\n\ttag.prototype.resetLayout = function (){\n\t\tthis.setAutoSize(true);\n\t\tthis.setAutoPos(true);\n\t\tthis._v = -1;\n\t\tthis.reflow(true);\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.hasLocalLayout = function (){\n\t\treturn !this.data().space().isEditing() && (!(this.autoPos()) || !(this.autoSize()));\n\t};\n\t\n\ttag.prototype.dispose = function (){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.isLoading = function (){\n\t\treturn this.browser().page() && this.browser().page().isLoading();\n\t};\n\t\n\ttag.prototype.gotoUrlInput = function (e){\n\t\ttry {\n\t\t\te.stop().prevent();\n\t\t\tlet url = e.target().value();\n\t\t\tif (url != this.browser().url()) { this.go(url) };\n\t\t\treturn e.target().blur();\n\t\t} catch (e) { };\n\t};\n\t\n\ttag.prototype.showSettings = function (){\n\t\tvar _t1;\n\t\treturn this.uxa().open((_2(BrowserConfigurationDialog).flag('modal')).bindData(this,'browser',[]).setFormData(this.browser().configurationData()).end());\n\t};\n\t\n\ttag.prototype.closeWindow = function (){\n\t\tthis.browser().setVisible(false);\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.minimize = function (){\n\t\tthis.browser().setMinimized(true);\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.toggleMinimized = function (){\n\t\tvar v_;\n\t\treturn (this.browser().setMinimized(v_ = !this.browser().minimized()),v_);\n\t};\n\t\n\ttag.prototype.toggleWindowed = function (){\n\t\tthis.browser().setWindowed(!this.browser().windowed());\n\t\t\n\t\tif (this.browser().windowed()) {\n\t\t\tvar fit = this._layout.clone().ensureInsideParent();\n\t\t\tfit.set({height: Math.min(this.space().vh() - 180,fit.height())});\n\t\t\tfit.set({width: Math.min(this.space().vw() - 80,fit.width())});\n\t\t\tthis.redraw(this._layout = fit);\n\t\t\tthis.browser().setLayout(this._layout.clone());\n\t\t} else if (!this.browser().maxWidth()) {\n\t\t\tthis.browser().setMaxWidth(this.clamp(800,this._layout.width(),this.space().vw() - 200));\n\t\t\tthis.browser().setMaxHeight(this.clamp(460,this._layout.height(),this.space().vh() - 200));\n\t\t};\n\t\treturn;\n\t\t// console.log \"set windowed layout\",fit\n\t\t// browser.setLayout(fit)\n\t};\n\t\n\t\n\ttag.prototype.focusWidgetForNode = function (){\n\t\treturn this.browser();\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, _t4, _t5, _t6, _t7, t0, t1, t2;\n\t\tif (false) {};\n\t\t\n\t\t// decide on loading etc\n\t\tif (this.browser().page() != this.page()) {\n\t\t\tlet live = this.space().isPlaying() || this.space().isLive();\n\t\t\tlet req = this.browser().page();\n\t\t\t\n\t\t\tif (live) {\n\t\t\t\tthis._indicator && this._indicator.start && this._indicator.start();\n\t\t\t};\n\t\t\t\n\t\t\tif (req && req.loaded()) {\n\t\t\t\tthis._indicator && this._indicator.stop && this._indicator.stop();\n\t\t\t\tthis.setPage(req);\n\t\t\t};\n\t\t\t\n\t\t\tthis;\n\t\t};\n\t\t\n\t\tif (this.runner().isActive() && !(this.isLoading())) {\n\t\t\tthis.sendStyleSheets();\n\t\t};\n\t\t\n\t\tif (this.page()) {\n\t\t\tthis.page().syncStyleSheets(this.data().space().files());\n\t\t\tthis.setFlag('status',(\"status-\" + (this.page().status())));\n\t\t};\n\t\t\n\t\tif (this._mounted) {\n\t\t\tthis.reflow();\n\t\t};\n\t\t\n\t\treturn this.$open(0).flagIf('loading',this.isLoading()).dataset('gesture','move').setVisible(this.browser().visible()).flagIf('detached',this.hasLocalLayout()).setChildren($.$ = $.$ || [\n\t\t\tthis._cover = this._cover||_2('div',this).flag('cover').on$(0,['tap','minimize'],this),\n\t\t\tt0 = this._frame = this._frame||(t0=_2(BrowserFrame,this)).flag('frame').setContent([\n\t\t\t\tt1 = this._chrome = this._chrome||(t1=_2('div',t0)).flag('chrome').setContent([\n\t\t\t\t\t_2('div',$,0,this._chrome).flag('resizer').flag('left').dataset('gesture','resize,l'),\n\t\t\t\t\t_2('div',$,1,this._chrome).flag('resizer').flag('right').dataset('gesture','resize,r'),\n\t\t\t\t\tthis._header = this._header||_2('div',t1).flag('header').setContent([\n\t\t\t\t\t\t_2('div',$,2,this._header).flag('tools').setContent([\n\t\t\t\t\t\t\t_2('div',$,3,2).flag('tool').flag('round').flag('close').on$(0,['tap','stop','closeWindow'],this),\n\t\t\t\t\t\t\t_2('div',$,4,2).flag('tool').flag('round').flag('min').on$(0,['tap','stop','minimize'],this),\n\t\t\t\t\t\t\t_2('div',$,5,2).flag('tool').flag('round').flag('max').on$(0,['tap','stop','toggleWindowed'],this),\n\t\t\t\t\t\t\t_2('div',$,6,2).flag('tool').on$(0,['tap','stop','back'],this).dataset('icon','browserback'),\n\t\t\t\t\t\t\t_2('div',$,7,2).flag('tool').on$(0,['tap','stop','forward'],this).dataset('icon','browserforward'),\n\t\t\t\t\t\t\t_2('div',$,8,2).flag('tool').on$(0,['tap','stop','refresh'],this).dataset('icon','browserrefresh')\n\t\t\t\t\t\t],2),\n\t\t\t\t\t\t\n\t\t\t\t\t\t// visible input elements \n\t\t\t\t\t\t_2(BrowserPathField,$,9,this._header).flag('path').on$(0,['change','onpathchange'],this),\n\t\t\t\t\t\t// <input.path type='text' value=(browser.url or \"\") :keydown.enter.gotoUrlInput>\n\t\t\t\t\t\t_2('div',$,10,this._header).flag('tool').dataset('icon','morevert').on$(0,['tap','stop','showSettings'],this)\n\t\t\t\t\t],2),\n\t\t\t\t\t\n\t\t\t\t\t_2('div',$,11,t1).flag('resizer').flag('bottom').dataset('gesture','resize,b'),\n\t\t\t\t\t_2('div',$,12,t1).flag('resizer').flag('br').dataset('gesture','resize,b,r'),\n\t\t\t\t\t_2('div',$,13,t1).flag('resizer').flag('bl').dataset('gesture','resize,b,l')\n\t\t\t\t],2),\n\t\t\t\t\n\t\t\t\tt2 = this._body = this._body||(t2=_2('div',t0)).flag('body'),\n\t\t\t\t\n\t\t\t\tthis._indicator = this._indicator||_2(Indicator,t0).flag('indicator').flag('abs').flag('manual').setType('forward')\n\t\t\t// if !browser.windowed\n\t\t\t// <shortcut shortcut='esc' :exec.stop.minimize>\n\t\t\t// <shortcut shortcut='command+r' :exec.stop.refresh>\n\t\t\t],2)\n\t\t],2).synced((\n\t\t\tthis._frame.setTabindex(-1).end((\n\t\t\t\t$[0].end(),\n\t\t\t\t$[1].end(),\n\t\t\t\t$[5].flagIf('active',(!(this.windowed()))),\n\t\t\t\t$[6].flagIf('disabled',!this.history().hasPrev()).end(),\n\t\t\t\t$[7].flagIf('disabled',!this.history().hasNext()).end(),\n\t\t\t\t$[8].end(),\n\t\t\t\t$[9].setContent(this.browser().url() || \"/index.html\",3).end(),\n\t\t\t\t$[10].end(),\n\t\t\t\t$[11].end(),\n\t\t\t\t$[12].end(),\n\t\t\t\t$[13].end(),\n\t\t\t\tthis._body.setContent([\n\t\t\t\t\t(this._frameCover = this._frameCover||_2('div',t2).flag('frameCover').flag('mainCover').setContent([\n\t\t\t\t\t\t_2('div',$,14,this._frameCover).flag('tool').flag('run').dataset('icon','browserrefresh').on$(0,['tap','stop','refresh'],this),\n\t\t\t\t\t\t_2('div',$,15,this._frameCover).flag('tool').flag('follow').dataset('icon','visibility').on$(0,['tap','stop','resetLayout'],this)\n\t\t\t\t\t],2)).end((\n\t\t\t\t\t\t$[14].end(),\n\t\t\t\t\t\t$[15].flagIf('disabled',(!(this.hasLocalLayout()))).end()\n\t\t\t\t\t,true)),\n\t\t\t\t\t\n\t\t\t\t\t(this.page() && this.page().loading()) ? (\n\t\t\t\t\t\t($[16] || _2('div',$,16,t2).flag('frameCover').flag('bundler').setContent(\n\t\t\t\t\t\t\t$[17] || _2(SKDoubleBounce,$,17,16)\n\t\t\t\t\t\t,2)).end((\n\t\t\t\t\t\t\t$[17].end()\n\t\t\t\t\t\t,true))\n\t\t\t\t\t) : void(0),\n\t\t\t\t\t\n\t\t\t\t\t(this.page() && this.page().cancelled()) ? (\n\t\t\t\t\t\t($[18] || _2('div',$,18,t2).flag('frameCover').flag('error').flag('sm').setContent($[19] || _2('div',$,19,18).setContent([\n\t\t\t\t\t\t\t_2('h2',$,20,19).setText(\"Something went wrong\"),\n\t\t\t\t\t\t\t_2('p',$,21,19).setText(\"The tracker has stopped because of excessive amount of events originating from the page.\\nThis could be due to certain browser extensions. Try disabling extensions to see if it helps.\"),\n\t\t\t\t\t\t\t_2('p',$,22,19).setContent([\n\t\t\t\t\t\t\t\t_2('span',$,23,22).setText(\"For more help, \"),\n\t\t\t\t\t\t\t\t_2('a',$,24,22).setHref(\"https://gitter.im/scrimba_community/Lobby\").setTarget(\"_blank\").setText(\"chat with us\"),\n\t\t\t\t\t\t\t\t_2('span',$,25,22).setText(\" or \"),\n\t\t\t\t\t\t\t\t_2('a',$,26,22).setHref(\"https://github.com/scrimba/community/issues\").setTarget(\"_blank\").setText(\"file an issue\")\n\t\t\t\t\t\t\t],2)\n\t\t\t\t\t\t// For more help, [chat with us](https://gitter.im/scrimba_community/Lobby) or [file an issue](https://github.com/scrimba/community/issues).\n\t\t\t\t\t\t],2),2)).end((\n\t\t\t\t\t\t\t$[24].end(),\n\t\t\t\t\t\t\t$[26].end()\n\t\t\t\t\t\t,true))\n\t\t\t\t\t) : void(0),\n\t\t\t\t\t(this._player = this._player||_2(PlayerFrame,t2).flag('player').setSrc(\"/__sw__blank.html\").setSandbox(\"allow-same-origin\").setAllow(\"geolocation\")).bindData(this,'page',[]).end()\n\t\t\t\t],1),\n\t\t\t\tthis._indicator.end()\n\t\t\t,true))\n\t\t,true));\n\t};\n});\n\nfunction Browser(){ return PaneWidget.apply(this,arguments) };\n\nsubclass$(Browser,PaneWidget);\nexports.Browser = Browser; // export class \nBrowser.register('browser');\n\nBrowser.option('npmPackages');\nBrowser.option('layout',{overridable: true,type: Dimensions,action: ACTION.BROWSER_LAYOUT});\nBrowser.option('page',{type: PlayerPage});\nBrowser.option('url');\nBrowser.option('rootPath',{'default': '/'});\nBrowser.option('catchallPath');\n\nBrowser.option('visible',{'default': false});\nBrowser.option('minimized',{'default': false,overridable: true});\nBrowser.option('windowed',{'default': true,overridable: true});\n\nBrowser.option('maxWidth');\nBrowser.option('maxHeight');\n\nBrowser.prototype.isResolvingPackages = function(v){ return this._isResolvingPackages; }\nBrowser.prototype.setIsResolvingPackages = function(v){ this._isResolvingPackages = v; return this; };\n\nBrowser.prototype.configurationData = function (){\n\treturn {\n\t\trootPath: this.rootPath(),\n\t\tcatchallPath: this.catchallPath()\n\t};\n};\n\nBrowser.prototype.browser = function (){\n\treturn this;\n};\n\nBrowser.prototype.posToScreen = function (x,y,sl,cl){\n\t\n\t// fallback to autopos?\n\tif (this.minimized() || !(this.windowed()) || this.node().autoMinimize()) {\n\t\treturn null;\n\t};\n\t\n\treturn Browser.prototype.__super__.posToScreen.apply(this,arguments);\n};\n\nBrowser.prototype.setup = function (){\n\tvar self = this;\n\tself.space().on('quicksave',function(file) {\n\t\tself.log(\"quicksave\",file);\n\t\tif (file) { return self.fileDidSave(file) };\n\t});\n\tself.node();\n\treturn self;\n};\n\nBrowser.prototype.baseURI = function (){\n\treturn this.space().container().origin();\n};\n\nBrowser.prototype.normalizeURL = function (url){\n\tif (url.startsWith(this.baseURI())) {\n\t\treturn url.slice(this.baseURI().length);\n\t} else {\n\t\treturn url;\n\t};\n};\n\nBrowser.prototype.encodeURI = function (str){\n\tif (str.indexOf(this.baseURI()) == 0) { return str };\n\tif (str[0] != '/') { str = '/' + str };\n\treturn (\"\" + this.baseURI() + str);\n};\n\nBrowser.prototype.clientLayout = function (){\n\treturn (this._clientLayout || (this._clientLayout = new Dimensions(null))).wrap(this._node ? this._node._layout : null);\n};\n\nBrowser.prototype.deserialize = function (o,state){\n\tif (o.page && true) {\n\t\to.page = PlayerPage.fromOptionValue(o.page,this);\n\t};\n\treturn Browser.prototype.__super__.deserialize.apply(this,arguments);\n};\n\nBrowser.prototype.node = function (){\n\tvar _t1;\n\treturn this._node || (this._node = (_2(BrowserView)).setData(this).end());\n};\n\nBrowser.prototype.stop = function (){\n\treturn this._node && this._node.stop && this._node.stop();\n};\n\nBrowser.prototype.run = function (){\n\tif (this.space().simulator()) {\n\t\tthis.space().simulator().convertToBrowser();\n\t};\n\t\n\tthis.refresh();\n\treturn this;\n};\n\nBrowser.prototype.refresh = function (){\n\tthis.node().refresh();\n\treturn this;\n};\n\nBrowser.prototype.fileDidSave = function (file){\n\tif (this.space().simulator()) {\n\t\treturn;\n\t};\n\t\n\tif (file.ext() == 'css') {\n\t\t// saving css files should not trigger a reload\n\t\treturn this;\n\t} else if (file.ext() == 'html') {\n\t\t// saving should only trigger reload if this is the\n\t\t// current page of browser\n\t\tif (this.url().indexOf(file.name()) >= 0) {\n\t\t\tthis.refresh();\n\t\t};\n\t} else {\n\t\tthis.refresh();\n\t};\n\treturn this;\n};\n\nBrowser.prototype.enabled = function (){\n\treturn true;\n};\n\nBrowser.prototype.title = function (){\n\treturn 'Preview';\n};\n\nBrowser.prototype.npmPackageNames = function (){\n\treturn (this.npmPackages() || {resolved: []}).resolved;\n};\n\nBrowser.prototype.parsePackageQuery = function (query,map){\n\tvar name = query.match(/.[^@]*/)[0];\n\tvar version = query.substr(len$(name) + 1);\n\t\n\treturn map[name] = version || \"*\";\n};\n\nBrowser.prototype.currentPackageMap = function (){\n\tvar map = {};\n\tfor (let i = 0, items = iter$(this.npmPackageNames()), len = items.length; i < len; i++) {\n\t\tthis.parsePackageQuery(items[i],map);\n\t};\n\treturn map;\n};\n\nBrowser.prototype.addPackages = function (entries){\n\tvar map = Object.assign(this.packageMap(),entries);\n\treturn this.overwritePackages(map);\n};\n\nBrowser.prototype.overwritePackages = async function (map){\n\tvar items = [];\n\tfor (let name in map){\n\t\tlet version;\n\t\tversion = map[name];items.push((\"\" + name + \"@\" + version));\n\t};\n\tvar bundle = await this.resolvePackages(items);\n\tthis.setNpmPackages(bundle);\n\treturn this;\n};\n\nBrowser.prototype.addPackage = function (query){\n\tif (query == 'imba') {\n\t\tquery = 'imba@latest';\n\t};\n\tthis.api().analytics().dependencyAdded(query,this.space().type());\n\tvar map = this.currentPackageMap();\n\tthis.parsePackageQuery(query,map);\n\treturn this.overwritePackages(map);\n};\n\nBrowser.prototype.removePackage = function (name){\n\tvar v_;\n\tvar map = this.currentPackageMap();\n\t(((v_ = map[name]),delete map[name], v_));\n\treturn this.overwritePackages(map);\n};\n\nBrowser.prototype.upgradePackage = function (name){\n\treturn this.addPackage(name);\n};\n\nBrowser.prototype.resolvePackages = async function (packages){\n\tthis.setIsResolvingPackages(true);\n\ttry {\n\t\tvar result = await this._resolvePackages(packages);\n\t} finally {\n\t\tthis.setIsResolvingPackages(false);\n\t\tImba.commit();\n\t};\n\treturn result;\n};\n\nBrowser.prototype._resolvePackages = async function (packages){\n\t\n\tif (len$(packages) == 0) {\n\t\treturn;\n\t};\n\t\n\tvar url = (\"/rpc/yaas/resolve?patterns=\" + window.encodeURIComponent(packages.join(\",\")));\n\tvar result = await window.fetch(url);\n\tthis.setIsResolvingPackages(false);\n\t\n\tif (result.status == 200) {\n\t\tvar json = await result.json();\n\t\tthis.log(\"returned from yaas\",result,json);\n\t\treturn json;\n\t} else {\n\t\tthrow new Error((\"could not resolve \" + packages));\n\t};\n};\n\n\nBrowser.prototype.dispose = function (){\n\treturn this._node && this._node.dispose && this._node.dispose();\n};\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar Widget = require('./widget').Widget;\n\nfunction EditorWidget(){ return Widget.apply(this,arguments) };\n\nsubclass$(EditorWidget,Widget);\nexports.EditorWidget = EditorWidget; // export class \nEditorWidget.register('editor');\n\n// option :renderWhitespace, default: no, overridable: yes\n\n// layout related options\nEditorWidget.option('left');\nEditorWidget.option('top');\nEditorWidget.option('width');\nEditorWidget.option('height');\nEditorWidget.option('contentTop'); // relative to top\nEditorWidget.option('contentLeft'); // relative to left\nEditorWidget.option('fontSize');\nEditorWidget.option('lineHeight');\nEditorWidget.option('renderIndentGuides',{'default': false});\nEditorWidget.option('renderWhitespace',{'default': false,overridable: true});\nEditorWidget.option('wordWrap',{'default': true,overridable: true});\nEditorWidget.option('wordWrapColumn',{'default': 100,overridable: true});\nEditorWidget.option('wrappingIndent',{'default': 'same',overridable: true});\n\nEditorWidget.prototype.view = function(v){ return this._view; }\nEditorWidget.prototype.setView = function(v){ this._view = v; return this; };\n\nEditorWidget.prototype.setup = function (){\n\treturn this;\n};\n\n// should at some point store on EditorWidget instead\nEditorWidget.prototype.currentFile = function (){\n\treturn this.space().agent().file();\n};\n\nEditorWidget.prototype.agentFile = function (){\n\treturn this.space().agent().file(false);\n};\n\nEditorWidget.prototype.hasFocus = function (){\n\treturn this.space().agent().focus() == this || this.space().agent().focus(false) == this;\n};\n\nEditorWidget.prototype.posToScreen = function (x,y){\n\treturn this.agentToLocalPoint(x,y);\n};\n\n// calculate pointer\nEditorWidget.prototype.agentToLocalPoint = function (x,y,pars){\n\t\n\t// what about using the targetFrame for this?\n\t\n\t// get the local point for pointer\n\tif(pars === undefined) pars = this._data;\n\tvar file = this.currentFile();\n\t\n\t// we are not looking at the same target\n\tif (!file || file != this.agentFile()) {\n\t\treturn null;\n\t};\n\t\n\tvar agentViewTop = pars.top + pars.contentTop;\n\tvar agentViewLeft = pars.left + pars.contentLeft;\n\t\n\tvar localViewTop = this.view().top() + this.view().contentTop();\n\tvar localViewLeft = this.view().left() + this.view().contentLeft();\n\t\n\t// calculate the line,column for agent\n\tvar agentX = x - (pars.left + pars.contentLeft) + (pars.scrollLeft || file.scrollLeft() || 0);\n\tvar agentY = y - (pars.top + pars.contentTop) + (pars.scrollTop || file.scrollTop() || 0);\n\t\n\t// var agentScrollTop = file.scrollTop # based on agent\n\t// var agentScrollLeft = file.scrollLeft # based on agent\n\t// if fontSize,lineHeight,scrollTop and scrollLeft are the same\n\t// skip converting\n\t// need to know if we have the same currentFile(!)\n\t\n\tvar line = agentX;\n\tvar scaleX = this.view().fontSize() / (pars.fontSize || 14);\n\tvar scaleY = this.view().lineHeight() / (pars.lineHeight || 21);\n\t\n\tvar localX = agentX * scaleX - this.view().scrollLeft();\n\tvar localY = agentY * scaleY - this.view().scrollTop();\n\t\n\t// offset relative to scrollTop and scrollLeft\n\t// first calculate how many lines down \n\t\n\tif (this.view()) {\n\t\tthis.view()._agentPointerX = agentX * scaleX;\n\t\tthis.view()._agentPointerY = agentY * scaleY;\n\t};\n\t\n\t// assuming the same position round to 0.5?\n\tvar spaceY = Math.round(localViewTop + localY);\n\tvar spaceX = Math.round(localViewLeft + localX);\n\t\n\t// log 'agentToLocalPoint',point,pars,agentX,agentY,spaceX - point.x,spaceY - point.y\n\t\n\treturn [spaceX,spaceY];\n};\n", "var Widget = require('./widget').Widget;\n\nrequire('./AgentWidget');\nrequire('./PointerWidget');\nrequire('./LayoutWidget');\nrequire('./FileWidget');\nrequire('./ConsoleWidget');\nrequire('./SimulatorWidget');\nrequire('./InspectorWidget');\nrequire('./BrowserWidget');\nrequire('./EditorWidget');\n\nexports.Widget = Widget;\n", "var self = {};\n// externs;\n\nvar selectionModel;\n\n\nexports.inlineCompiledCode = self.inlineCompiledCode = function (model,editor,o){\n\tif(o === undefined) o = {};\n\treturn new (monaco.Promise)(async function(resolve,reject) {\n\t\tlet header = \"compiles to:\";\n\t\tlet uri = String(model.uri);\n\t\t\n\t\tlet worker = monaco.IMBA_WORKER;\n\t\tlet code = model.getValue();\n\t\tlet file = model.FILE_MODEL.file();\n\t\tlet selection = model.getValueInRange(editor.getSelection());\n\t\t\n\t\tcode = code.split(\"\\n### \" + header)[0];\n\t\t\n\t\tif (selection.length > 0) {\n\t\t\tlet suffix = model.getModeId();\n\t\t\tselectionModel || (selectionModel = monaco.editor.createModel(\"\",null,(\"tempSelFile.\" + suffix)));\n\t\t\tselection += '\\n';\n\t\t\tselectionModel.setValue(selection);\n\t\t\turi = String(selectionModel.uri);\n\t\t};\n\t\t\n\t\tworker = await worker(uri);\n\t\tvar out = await worker.getCompiledCode(uri);\n\t\t\n\t\t\n\t\t// this includes the actual js as well\n\t\t// console.log \"result!\",out\n\t\tout = out.split((\"\\n/* \" + header))[0];\n\t\t\n\t\t// remove the first line\n\t\tif (out.slice(0,20).indexOf(\"var Imba =\") >= 0) {\n\t\t\tout = out.slice(out.indexOf(\"\\n\") + 1);\n\t\t};\n\t\t\n\t\t// replace all code for now\n\t\tcode = code + \"\\n### \" + header + \"\\n\\n\" + out; // + \"\\n###\"\n\t\t\n\t\tif (file) {\n\t\t\tfile.replaceBody(code);\n\t\t};\n\t\treturn resolve(true);\n\t});\n};\n", "var $_;\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _2 = Imba.createTagCache, _1 = Imba.createElementFactory(/*SCOPEID*/), _3 = Imba.createTagScope(/*SCOPEID*/);\n\nvar protocol$ = require('../protocol'), FILE = protocol$.FILE, SCON = protocol$.SCON, DIRTY = protocol$.DIRTY;\n\nvar Delay = require('../util/Delay').Delay;\n\nvar Dimensions = require('../core/Dimensions').Dimensions;\n\n// externs;\n\nvar tracking = require('../tracking');\n\nif (true) {\n\tvar monacoBridge = require('../editor');\n};\n\nvar imbaActions = require('../monaco/imbaActions');\n\nvar CodePreview = _3.defineTag('CodePreview', function(tag){\n\ttag.prototype.file = function(v){ return this._file; }\n\ttag.prototype.setFile = function(v){ this._file = v; return this; };\n\ttag.prototype.__value = {watch: 'valueDidSet',name: 'value'};\n\ttag.prototype.value = function(v){ return this._value; }\n\ttag.prototype.setValue = function(v){\n\t\tvar a = this.value();\n\t\tif(v != a) { this._value = v; }\n\t\tif(v != a) { this.valueDidSet && this.valueDidSet(v,a,this.__value) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.build = function (){\n\t\tvar _t1, _t2, $ = ($_ = this.$).$build$ || ($_.$build$ = _2(this));\n\t\treturn this.$open('build0').setChildren(this._code = this._code||_1('pre',this).flag('code'),2).synced();\n\t};\n\t\n\ttag.prototype.valueDidSet = function (value){\n\t\treturn this._code.dom().innerText = value;\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tif (!(this.file())) { return };\n\t\tthis.setValue(this.file().currentBody());\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.setScrollPosition = function (pos){\n\t\tif (pos.scrollLeft != undefined) {\n\t\t\tthis.dom().scrollLeft = this._scrollLeft = pos.scrollLeft;\n\t\t};\n\t\t\n\t\tif (pos.scrollTop != undefined) {\n\t\t\tthis.dom().scrollTop = this._scrollTop = pos.scrollTop;\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.getScrollTop = function (){\n\t\treturn this.dom().scrollTop;\n\t};\n\t\n\ttag.prototype.getScrollLeft = function (){\n\t\treturn this.dom().scrollLeft;\n\t};\n\t\n\ttag.prototype.getScrollWidth = function (){\n\t\treturn 0;\n\t};\n\t\n\ttag.prototype.getScrollHeight = function (){\n\t\treturn 0;\n\t};\n});\n\nvar EditorView = _3.defineTag('EditorView', function(tag){\n\t\n\ttag.prototype.layout = function(v){ return this._layout; }\n\ttag.prototype.setLayout = function(v){ this._layout = v; return this; };\n\ttag.prototype.__file = {watch: 'fileDidSet',name: 'file'};\n\ttag.prototype.file = function(v){ return this._file; }\n\ttag.prototype.setFile = function(v){\n\t\tvar a = this.file();\n\t\tif(v != a) { this._file = v; }\n\t\tif(v != a) { this.fileDidSet && this.fileDidSet(v,a,this.__file) }\n\t\treturn this;\n\t};\n\ttag.prototype.__fontSize = {watch: 'fontSizeDidSet',name: 'fontSize'};\n\ttag.prototype.fontSize = function(v){ return this._fontSize; }\n\ttag.prototype.setFontSize = function(v){\n\t\tvar a = this.fontSize();\n\t\tif(v != a) { this._fontSize = v; }\n\t\tif(v != a) { this.fontSizeDidSet && this.fontSizeDidSet(v,a,this.__fontSize) }\n\t\treturn this;\n\t};\n\ttag.prototype.__selState = {watch: 'selStateDidSet',name: 'selState'};\n\ttag.prototype.selState = function(v){ return this._selState; }\n\ttag.prototype.setSelState = function(v){\n\t\tvar a = this.selState();\n\t\tif(v != a) { this._selState = v; }\n\t\tif(v != a) { this.selStateDidSet && this.selStateDidSet(v,a,this.__selState) }\n\t\treturn this;\n\t};\n\ttag.prototype.__scrollState = {watch: 'scrollStateDidSet',name: 'scrollState'};\n\ttag.prototype.scrollState = function(v){ return this._scrollState; }\n\ttag.prototype.setScrollState = function(v){\n\t\tvar a = this.scrollState();\n\t\tif(v != a) { this._scrollState = v; }\n\t\tif(v != a) { this.scrollStateDidSet && this.scrollStateDidSet(v,a,this.__scrollState) }\n\t\treturn this;\n\t};\n\ttag.prototype.__streamLayout = {watch: 'streamLayoutDidSet',name: 'streamLayout'};\n\ttag.prototype.streamLayout = function(v){ return this._streamLayout; }\n\ttag.prototype.setStreamLayout = function(v){\n\t\tvar a = this.streamLayout();\n\t\tif(v != a) { this._streamLayout = v; }\n\t\tif(v != a) { this.streamLayoutDidSet && this.streamLayoutDidSet(v,a,this.__streamLayout) }\n\t\treturn this;\n\t};\n\ttag.prototype.__autoScroll = {'default': true,watch: 'autoScrollDidSet',name: 'autoScroll'};\n\ttag.prototype.autoScroll = function(v){ return this._autoScroll; }\n\ttag.prototype.setAutoScroll = function(v){\n\t\tvar a = this.autoScroll();\n\t\tif(v != a) { this._autoScroll = v; }\n\t\tif(v != a) { this.autoScrollDidSet && this.autoScrollDidSet(v,a,this.__autoScroll) }\n\t\treturn this;\n\t}\n\ttag.prototype._autoScroll = true;\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.data().space();\n\t};\n\t\n\ttag.prototype.build = function (){\n\t\tvar _t1;\n\t\tthis._syncing = false;\n\t\tthis._dirty = {};\n\t\tthis._bridge = this._preview = (_1(CodePreview)).end();\n\t\tthis._layout = {};\n\t\tthis._layouter = new Delay(this,'relayout');\n\t\tthis._scrollTarget = {};\n\t\t\n\t\tthis.dom().appendChild(this._preview.dom());\n\t\tthis.dom().appendChild(((_1('div').flag('left-shadow'))).dom());\n\t\tthis.dom().appendChild(((_1('div').flag('top-shadow'))).dom());\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.setup = function (){\n\t\tvar self = this;\n\t\tself.data().setView(self);\n\t\tself.setSref(self.data().id());\n\t\tself.layoutCodePreview();\n\t\tself.space().once('dispose',function() { return self.dispose(); });\n\t\tself._v = self.data().options()._v;\n\t\t\n\t\tself.space().on('reflow',function(dirty) {\n\t\t\t// log \"space.reflow\",dirty\n\t\t\tself._top = self._left = self._width = self._height = 0;\n\t\t\treturn self.relayout();\n\t\t});\n\t\t\n\t\tself.space().on('watch',function() {\n\t\t\tself.log('Space:watch');\n\t\t\treturn (self.setAutoScroll(true),true);\n\t\t});\n\t\t\n\t\tself.space().on('playing',function() {\n\t\t\tself.log(\"Space:playing\",self.autoScroll());\n\t\t\tself.setAutoScroll(true);\n\t\t\treturn self.space().agent().options().reset('file');\n\t\t});\n\t\t\n\t\t// data.on('configured') do\n\t\t//\tlog \"Configured\"\n\t\t//\t@editor and @editor.updateOptions(getDynamicOptions)\n\t\t\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.posToScreen = function (x,y){\n\t\treturn this.data().agentToLocalPoint(x,y);\n\t};\n\t\n\ttag.prototype.batch = function (blk){\n\t\tvar sync = this._syncing;\n\t\tthis._syncing = true;\n\t\tblk();\n\t\tthis._syncing = sync;\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.mount = function (){\n\t\tvar self = this;\n\t\tself._mounted = true;\n\t\tself.load();\n\t\tself.render();\n\t\tsetTimeout(function() { return self.relayout(); },20);\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.fontSize = function (){\n\t\treturn this.space().view().fontSize();\n\t};\n\t\n\ttag.prototype.unmount = function (){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.focus = function (){\n\t\tthis.log('called focus');\n\t\tif (this._editor) {\n\t\t\treturn this._editor.focus();\n\t\t};\n\t};\n\t\n\ttag.prototype.onfocus = function (e){\n\t\tif (e.event().target == this) {\n\t\t\tthis.log('editor onfocus');\n\t\t\t// log \"onfocus\",e.event:target\n\t\t\treturn this._editor.focus();\n\t\t};\n\t};\n\t\n\ttag.prototype.autoScrollDidSet = function (bool){\n\t\tif (bool) { return this.unsyncScroll() };\n\t};\n\t\n\ttag.prototype.getDynamicOptions = function (){\n\t\tvar opts;\n\t\tvar fontSize = this.space().view().fontSize(); // what about api.fontSize?\n\t\tvar pub = this.space().model().pub;\n\t\t\n\t\treturn opts = {\n\t\t\trenderWhitespace: this.data().renderWhitespace() ? 'boundary' : 'none',\n\t\t\trenderIndentGuides: this.data().renderIndentGuides(),\n\t\t\tfontSize: (this._fontSize = fontSize),\n\t\t\tlineHeight: this._lineHeight = Math.ceil(this._fontSize * 1.5),\n\t\t\tlineDecorationsWidth: fontSize + 4,\n\t\t\twordWrapColumn: this.data().wordWrapColumn(),\n\t\t\twordWrap: (this.data().wordWrap() && (!pub || !pub.noWordWrap)) ? 'wordWrapColumn' : 'off',\n\t\t\twrappingIndent: this.data().wrappingIndent()\n\t\t};\n\t};\n\t\n\ttag.prototype.configuration = function (){\n\t\treturn this._editor.viewModel.configuration;\n\t};\n\ttag.prototype.fontInfo = function (){\n\t\treturn this.configuration().editor.fontInfo;\n\t};\n\ttag.prototype.layoutInfo = function (){\n\t\treturn this.configuration().editor.layoutInfo;\n\t};\n\t\n\t// LAYOUT\n\ttag.prototype.leftPadding = function (){\n\t\tvar o = this.getDynamicOptions();\n\t\t// should get fontSize directly\n\t\treturn Math.round(o.fontSize * 0.6 * 5) + o.lineDecorationsWidth;\n\t};\n\t\n\ttag.prototype.top = function (){\n\t\treturn this._top || (this._top = this.dom().offsetTop);\n\t};\n\ttag.prototype.left = function (){\n\t\treturn this._left || (this._left = this.dom().offsetLeft);\n\t};\n\ttag.prototype.width = function (){\n\t\treturn this._layout.width || this._width;\n\t};\n\ttag.prototype.height = function (){\n\t\treturn this._layout.height || this._height;\n\t};\n\ttag.prototype.contentTop = function (){\n\t\treturn 20;\n\t};\n\ttag.prototype.contentLeft = function (){\n\t\treturn this._layout.contentLeft || this.leftPadding();\n\t}; // + 4\n\ttag.prototype.scrollTop = function (){\n\t\treturn this._bridge.getScrollTop();\n\t};\n\ttag.prototype.scrollLeft = function (){\n\t\treturn this._bridge.getScrollLeft();\n\t};\n\ttag.prototype.lineHeight = function (){\n\t\treturn Math.ceil(this._fontSize * 1.5);\n\t};\n\t\n\ttag.prototype.setScrollPosition = function (pos){\n\t\tlet target = this._scrollTarget;\n\t\tif (pos.scrollTop != target.scrollTop || pos.scrollLeft != target.scrollLeft) {\n\t\t\ttarget.scrollTop = pos.scrollTop;\n\t\t\ttarget.scrollLeft = pos.scrollLeft;\n\t\t\tthis._bridge.setScrollPosition(pos);\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.setSelections = function (sel){\n\t\tif (this._editor) {\n\t\t\tthis._monacoSel = monacoBridge.opToSelections(sel);\n\t\t\treturn this._editor.setSelections(this._monacoSel);\n\t\t};\n\t};\n\t\n\ttag.prototype.layoutCodePreview = function (){\n\t\treturn this._preview.css(\n\t\t\t{left: this.contentLeft() + 'px',\n\t\t\tpaddingTop: this.contentTop() + 'px',\n\t\t\tfontSize: this.fontSize() + 'px',\n\t\t\tlineHeight: this.lineHeight() + 'px'}\n\t\t);\n\t};\n\t\n\ttag.prototype.currentCodeAnchor = function (format){\n\t\tif(format === undefined) format = 'uri';\n\t\tif (!(this._editor && this._file)) {\n\t\t\treturn;\n\t\t};\n\t\t\n\t\tvar sel = this._editor.getSelection();\n\t\tvar ev = this.space().cursor().current();\n\t\tlet offset = this.space().timeline().currentOffset();\n\t\tlet data = {\n\t\t\tcid: ev.branch().id(),\n\t\t\tindex: ev.index(),\n\t\t\toffset: ev.offset(),\n\t\t\tt: offset,\n\t\t\tfid: this._file.id(),\n\t\t\ttext: this._editor.model.getValueInRange(sel)\n\t\t};\n\t\t\n\t\tvar uri = (\"scrimba://\" + (ev.branch().id()) + \"@\" + (ev.index()));\n\t\t\n\t\tif (this.file() && sel) {\n\t\t\tlet l0 = sel.startLineNumber;\n\t\t\tlet c0 = sel.startColumn;\n\t\t\tlet l1 = sel.endLineNumber;\n\t\t\tlet c1 = sel.endColumn;\n\t\t\t\n\t\t\turi += (\"\" + (this.file().path()) + \"#\");\n\t\t\t\n\t\t\t// should be possible to show without a particular selection?\n\t\t\tlet lloc = (\"L\" + l0);\n\t\t\t\n\t\t\tif (c0 == 1 && c1 == 1) {\n\t\t\t\tif ((l1 - 1) > l0) {\n\t\t\t\t\tlloc += (\"-\" + (l1 - 1));\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tlloc += (\":\" + c0);\n\t\t\t\t\n\t\t\t\t// single marker\n\t\t\t\tif (l0 == l1 && c0 == c1) {\n\t\t\t\t\ttrue;\n\t\t\t\t} else if (c1 == 1) {\n\t\t\t\t\tl1 = l1 - 1;\n\t\t\t\t\t// c1 = @editor:model.getLineMaxColumn(l1)\n\t\t\t\t\tlloc += (\"-\" + l1);\n\t\t\t\t\tif (c0 != 1) {\n\t\t\t\t\t\tlloc += (\":\" + this._editor.model.getLineMaxColumn(l1));\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tlloc += (\"-\" + l1 + \":\" + c1);\n\t\t\t\t};\n\t\t\t};\n\t\t\tdata.loc = lloc;\n\t\t\turi += lloc;\n\t\t};\n\t\t\n\t\tdata.uri = uri;\n\t\tdata.hash = (\"\" + (data.index) + \".\" + (offset - ev.offset()) + \".\" + (data.fid) + \".\" + data.loc.replace(/\\:/g,'_'));\n\t\t\n\t\tlet url = new URL(document.location.href);\n\t\turl.searchParams.set('a',data.hash);\n\t\tdata.href = url.toString();\n\t\t\n\t\tif (format == 'uri') {\n\t\t\treturn {uri: uri,text: data.text};\n\t\t} else if (format == 'hash') {\n\t\t\treturn data.hash;\n\t\t} else if (format == 'object' || true) {\n\t\t\treturn data;\n\t\t};\n\t};\n\t\n\ttag.prototype.batchEdits = function (blk){\n\t\tvar self = this;\n\t\tif (!self._editor) {\n\t\t\treturn self.batch(blk);\n\t\t};\n\t\t\n\t\tself.batch(function() {\n\t\t\tvar model = self._editor.getModel();\n\t\t\tvar cursor = self._editor.cursor;\n\t\t\tif (cursor) {\n\t\t\t\tcursor._isHandling = true;\n\t\t\t};\n\t\t\t\n\t\t\tblk(); // @editor.blockRendering(blk)\n\t\t\t\n\t\t\tif (cursor) {\n\t\t\t\treturn cursor._isHandling = false;\n\t\t\t};\n\t\t});\n\t\treturn self;\n\t};\n\t\n\t\n\ttag.prototype.render = function (){\n\t\tvar self = this;\n\t\tif (!self._mounted) { return };\n\t\t\n\t\tself.batch(function() {\n\t\t\tself.setFile(self.data().currentFile());\n\t\t\tself.flagIf('hasAgentFocus',self.file() && (self.space().agent().focus() == self.file() || self.space().agent().focus() == self.data()));\n\t\t\tif (!(self.file())) { return };\n\t\t\t\n\t\t\tif (!self._editor) {\n\t\t\t\tself._preview.render();\n\t\t\t};\n\t\t\t\n\t\t\tvar sel = self.file().selState();\n\t\t\t\n\t\t\t// update selection if changed\n\t\t\tif (sel != self.selState() && self._editor) {\n\t\t\t\tself.setSelState(sel);\n\t\t\t\tif (!sel.LOCAL) { self.setSelections(sel) };\n\t\t\t};\n\t\t\t\n\t\t\tself.syncScroll();\n\t\t\t\n\t\t\tif (self.data().options()._v != self._v && self._editor) {\n\t\t\t\tself._v = self.data().options()._v;\n\t\t\t\tself._editor.updateOptions(self.getDynamicOptions());\n\t\t\t};\n\t\t\t\n\t\t\t\n\t\t\tif (self.file().isLanguageStale()) {\n\t\t\t\tconst ext = '.' + self.file().ext();\n\t\t\t\tconst languages = monaco.languages.getLanguages();\n\t\t\t\tfor (let i = 0, items = iter$(languages), len = items.length, lang; i < len; i++) {\n\t\t\t\t\tlang = items[i];\n\t\t\t\t\tif (lang.extensions.includes(ext)) {\n\t\t\t\t\t\tmonaco.editor.setModelLanguage(self.file().model().model(),lang.id);\n\t\t\t\t\t\tself.file().syncExtension();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\t// probably not needed after fixing font-loader\n\t\t\tif (self._editor) {\n\t\t\t\tself._editor.render();\n\t\t\t};\n\t\t\t\n\t\t\t// try to update layout on every render\n\t\t\t// ensures that layout does not end up out of sync\n\t\t\treturn self.pushLayout();\n\t\t});\n\t\t\n\t\treturn self;\n\t};\n\t\n\t\n\t// calculate the local layout for the current file\n\ttag.prototype.relayout = function (){\n\t\t// this part should only happen on space-resize now\n\t\tvar w = this._width || (this._width = this.dom().offsetWidth);\n\t\tvar h = this._height || (this._height = this.dom().offsetHeight);\n\t\t\n\t\tif (!(w && this._editor)) { return };\n\t\t\n\t\tthis._compositingLayout = true;\n\t\t\n\t\tif (this._syncedFontSize != this.space().view().fontSize()) {\n\t\t\tthis._editor.updateOptions(this.getDynamicOptions());\n\t\t\tthis._syncedFontSize = this.space().view().fontSize();\n\t\t};\n\t\t\n\t\tif (w != this._syncedWidth || h != this._syncedHeight) {\n\t\t\tthis._syncedWidth = w;\n\t\t\tthis._syncedHeight = h;\n\t\t\tthis._editor.layout({height: h,width: w});\n\t\t};\n\t\t\n\t\t// pushLayout\n\t\tthis._compositingLayout = false;\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.pushLayout = function (){\n\t\tif (!(this.space().isEditing() && this._editor)) {\n\t\t\treturn;\n\t\t};\n\t\t\n\t\tthis.data().setLeft(this.left());\n\t\tthis.data().setTop(this.top());\n\t\tthis.data().setWidth(this.width());\n\t\tthis.data().setHeight(this.height());\n\t\tthis.data().setContentLeft(this.contentLeft());\n\t\tthis.data().setContentTop(this.contentTop());\n\t\tthis.data().setFontSize(this.fontSize());\n\t\tthis.data().setLineHeight(this.lineHeight());\n\t\t\n\t\tif (this.file() && this._editor) {\n\t\t\tthis.file().setScrollTop(this._editor.getScrollTop()); // :scrollTop\n\t\t\tthis.file().setScrollLeft(this._editor.getScrollLeft()); // e:scrollLeft\n\t\t};\n\t\treturn this;\n\t};\n\t\n\t/*\n\t\tsee if file-scroll has changed - sync the view accordingly\n\t\tshould probably take selection, pointer etc into account to\n\t\tintelligently decide what should be visible if the viewport\n\t\tis smaller than the agent's.\n\t\t*/\n\t\n\ttag.prototype.syncScroll = function (){\n\t\tif (this.space().isEditing() || !(this.autoScroll())) { return };\n\t\t\n\t\t// happens inside editor\n\t\t\n\t\tvar agentLineHeight = this.data().lineHeight() || 21;\n\t\tvar agentScrollTop = this.file().scrollTop() || 0;\n\t\tvar agentScrollLeft = this.file().scrollLeft() || 0;\n\t\tlet agentLineCount = this.data().height() / agentLineHeight;\n\t\tvar sel = (this._monacoSel && this._monacoSel[0]);\n\t\tvar updates = null;\n\t\t\n\t\tlet target = {};\n\t\tlet lineCount = this.height() / this.lineHeight();\n\t\tlet heightRatio = lineCount / agentLineCount;\n\t\tlet scrollTop = target.scrollTop = Math.round(agentScrollTop * (this.lineHeight() / agentLineHeight));\n\t\tlet scrollLeft = target.scrollLeft = Math.round(agentScrollLeft * (this.fontSize() / (this.data().fontSize() || 14)));\n\t\t\n\t\tlet pointerX = this._agentPointerX;\n\t\tlet pointerY = this._agentPointerY;\n\t\t\n\t\t// only if our viewport is smaller than recorder?\n\t\tlet prev = this._scrollTarget;\n\t\t\n\t\t// look at where the selection is\n\t\tif (sel && heightRatio < 1) {\n\t\t\tlet selTop = this._editor.getTopForLineNumber(sel.startLineNumber);\n\t\t\tlet selBottom = this._editor.getTopForLineNumber(sel.endLineNumber);\n\t\t\tlet selCaret = this._editor.getTopForLineNumber(sel.positionLineNumber);\n\t\t\t\n\t\t\t// converting relative to caret for now\n\t\t\t// calculating that position for agent\n\t\t\tlet agentCaret = (selCaret / this.lineHeight()) * agentLineHeight;\n\t\t\tlet agentRelCaret = (agentCaret - agentScrollTop) / this.data().height();\n\t\t\tlet relCaret = (selCaret - scrollTop) / this.height();\n\t\t\tlet relScrollTop = Math.round(selCaret - this.height() * agentRelCaret);\n\t\t\t// console.log \"relCaret\",agentRelCaret,relScrollTop\n\t\t\t\n\t\t\t\n\t\t\tlet padBottom = (1 - relCaret) * this.height();\n\t\t\tlet padTop = relCaret * this.height();\n\t\t\t\n\t\t\t// if agent has not scrolled and selCaret is still pretty far up - dont \n\t\t\t// if there is more than x amount of pixels available below or above in the original scroll-position\n\t\t\t// go with that one.\n\t\t\tif (padBottom > this.lineHeight()) {\n\t\t\t\ttrue;\n\t\t\t} else {\n\t\t\t\ttarget.scrollTop = relScrollTop;\n\t\t\t};\n\t\t\t\n\t\t\tif (pointerY < target.scrollTop) {\n\t\t\t\ttarget.scrollTop = Math.round(pointerY - this.lineHeight());\n\t\t\t};\n\t\t};\n\t\t\n\t\tthis.setScrollPosition(target);\n\t\t\n\t\tif (agentScrollTop != this._agentScrollTop) {\n\t\t\tthis._agentScrollTop = agentScrollTop;\n\t\t};\n\t\t\n\t\tif (agentScrollLeft != this._agentScrollLeft) {\n\t\t\tthis._agentScrollLeft = agentScrollLeft;\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.unsyncScroll = function (){\n\t\treturn this._agentScrollLeft = this._agentScrollTop = -1;\n\t};\n\t\n\ttag.prototype.fileDidSet = function (file,old){\n\t\tvar v_;\n\t\tthis.flag('hasFile',!!file);\n\t\tif (old) { (old.setEditor(null),null) };\n\t\tthis._preview.setFile(file);\n\t\tif (file) { (file.setEditor(this),this) };\n\t\tthis._dirty.file = true;\n\t\t\n\t\tthis.flag('binary-file',file && file.isBinary());\n\t\t\n\t\tif (!this._editor) { return };\n\t\t\n\t\t// editor is not supposed to deal with binary file at all\n\t\tif (file && file.isBinary()) {\n\t\t\tfile = null;\n\t\t};\n\t\t\n\t\t// activate autoScroll when switching between file-scroll\n\t\t// maybe opt out if paused?\n\t\tif (this.space().isPlaying() || this.space().isWatching()) { (this.setAutoScroll(true),true) };\n\t\tthis.unsyncScroll();\n\t\t\n\t\t// console.log \"editor has focus already\"\n\t\t// if the editor is focused, it will lose the focus\n\t\t// to document.body when we replace the model.\n\t\t// Therefore we move focus to MainView first.\n\t\t\n\t\tvar hadFocus = false;\n\t\tif (this._bridge.isFocused()) {\n\t\t\thadFocus = true;\n\t\t};\n\t\t\n\t\tif (file) {\n\t\t\tlet model = file.model().model();\n\t\t\tthis._editor.setModel(model);\n\t\t\tthis._editor.FILE = file;\n\t\t\t\n\t\t\ttry {\n\t\t\t\tthis._editor.viewModel.viewLayout._linesLayout.insertWhitespace(0,0,this.contentTop());\n\t\t\t} catch (e) { };\n\t\t\t\n\t\t\t// sync scrollPosition back to previous one\n\t\t\tif (this.space().isEditing()) {\n\t\t\t\tthis.setScrollPosition(\n\t\t\t\t\t{scrollTop: file.scrollTop() || 0,\n\t\t\t\t\tscrollLeft: file.scrollLeft() || 0}\n\t\t\t\t);\n\t\t\t\t// no need to relayout here - is it?\n\t\t\t\tthis.relayout(); // only if editing?\n\t\t\t} else if (!(this.autoScroll()) && file._lastScrollPosition) {\n\t\t\t\tthis.log(\"restore local scrollPosition!\");\n\t\t\t\tthis.setScrollPosition(\n\t\t\t\t\t{scrollTop: file._lastScrollPosition.scrollTop,\n\t\t\t\t\tscrollLeft: file._lastScrollPosition.scrollLeft}\n\t\t\t\t);\n\t\t\t};\n\t\t} else {\n\t\t\tthis._editor.setModel(null);\n\t\t};\n\t\t\n\t\t// set selections directly\n\t\tif (file && file.selState()) {\n\t\t\tthis.setSelState(file.selState());\n\t\t\tthis._editor.render();\n\t\t\tthis.setSelections(this.selState());\n\t\t};\n\t\t\n\t\tif (hadFocus) { // or parent.dom.contains(document:activeElement)\n\t\t\treturn this._editor.focus();\n\t\t};\n\t};\n\t\n\ttag.prototype.focusWidgetForNode = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.oncopy = function (){\n\t\t// did copy\n\t\tvar sel = monacoBridge.selectionToArray(this._editor.getSelection());\n\t\treturn this.api().sendTracking(tracking.TYPES.COPY,[this.space().timeline().currentOffset(),this.file().id(),sel]);\n\t};\n\t\n\ttag.prototype.oncut = function (){\n\t\treturn this.oncopy();\n\t};\n\t\n\t/*\n\t\tMethod for loading monaco\n\t\t*/\n\t\n\ttag.prototype.load = async function (){\n\t\tvar self = this;\n\t\tif (self._editor || self._loading) {\n\t\t\treturn self;\n\t\t};\n\t\t\n\t\tself._loading = true;\n\t\t\n\t\tawait monacoBridge.load();\n\t\t\n\t\tvar opts = SCON.clone(window.MonacoEnvironment.defaults);\n\t\t\n\t\tfor (let o = self.getDynamicOptions(), v, i = 0, keys = Object.keys(o), l = keys.length, k; i < l; i++){\n\t\t\tk = keys[i];v = o[k];opts[k] = v;\n\t\t};\n\t\t\n\t\tself._toDispose = [];\n\t\tself._timeouts = [];\n\t\t\n\t\tvar ext = self._file ? self._file.ext() : '';\n\t\t\n\t\tvar services = {logService: console};\n\t\t\n\t\tmonaco.languages.typescript.typescriptDefaults.setEagerModelSync(true);\n\t\tmonaco.languages.typescript.typescriptDefaults.setCompilerOptions(\n\t\t\t{experimentalDecorators: true,\n\t\t\t// noImplicitAny: yes,\n\t\t\t// strictNullChecks: yes,\n\t\t\t// strictFunctionTypes: yes,\n\t\t\t// strictPropertyInitialization: yes,\n\t\t\t// noImplicitThis: yes,\n\t\t\tstrict: true}\n\t\t);\n\t\t\n\t\tself._editor = monaco.editor.create(self.dom(),opts,services);\n\t\tself._lastCursorSelection = Date.now();\n\t\t\n\t\tmonacoBridge.patchEditor(self._editor);\n\t\t\n\t\t// delegate cursor-change to FileModel\n\t\tself._toDispose.push(self._editor.onDidChangeCursorSelection(function(event) {\n\t\t\tif (self.file() && !self.space().isSyncing() && !self._syncing) {\n\t\t\t\tself.file().model().onDidChangeCursorSelection(event);\n\t\t\t\tself._lastCursorSelection = Date.now();\n\t\t\t\tImba.commit(event);\n\t\t\t};\n\t\t\treturn;\n\t\t}));\n\t\t\n\t\tself._toDispose.push(self._editor.onDidScrollChange(function(e) {\n\t\t\tvar v_;\n\t\t\tif (!(self._file && (e.scrollTopChanged || e.scrollLeftChanged))) { return };\n\t\t\t\n\t\t\t// keep the last scrollObject on file\n\t\t\tself.file()._lastScrollPosition = e;\n\t\t\tself.space().touch('locals'); // should be touch scroll\n\t\t\t\n\t\t\t// no need to register anything if we are currently syncing\n\t\t\tif (self._syncing || self.space().cursor().syncing()) {\n\t\t\t\treturn;\n\t\t\t};\n\t\t\t\n\t\t\tself.setAutoScroll(false);\n\t\t\tself.log(\"scroll\",e);\n\t\t\t\n\t\t\tif (self.space().isEditing()) {\n\t\t\t\t// sync scroll\n\t\t\t\tself.file().setScrollTop(e.scrollTop);\n\t\t\t\treturn (self.file().setScrollLeft(v_ = e.scrollLeft),v_);\n\t\t\t};\n\t\t}));\n\t\t\n\t\tself._toDispose.push(self._editor.onDidLayoutChange(function(e) {\n\t\t\tself.log(\"onDidLayoutChange\",e);\n\t\t\treturn self._layout = e;\n\t\t\t// should relayout at the end of render anyway?\n\t\t\t// @layouter.delay(10) unless @compositingLayout\n\t\t}));\n\t\t\n\t\tself._toDispose.push(self._editor.onDidFocusEditor(function(e) {\n\t\t\treturn self.log(\"onDidFocusEditor\");\n\t\t\t// space.agent.focus = data\n\t\t}));\n\t\t\n\t\tself._toDispose.push(self._editor.onDidBlurEditor(function(e) {\n\t\t\treturn self.log(\"onDidBlurEditor\");\n\t\t}));\n\t\t\n\t\t\n\t\tself._editor.addAction(\n\t\t\t{id: 'inline-transpiled-code',\n\t\t\tlabel: \"Inline transpiled code\",\n\t\t\tkeybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_J],\n\t\t\trun: function(ed) {\n\t\t\t\tif (!['imba','imba2'].includes(ed.model.getModeId())) { return };\n\t\t\t\treturn imbaActions.inlineCompiledCode(ed.model,ed);\n\t\t\t}}\n\t\t);\n\t\t\n\t\tself._bridge = self._editor;\n\t\tself._layout = self._editor.getLayoutInfo();\n\t\t\n\t\tif (!self._file) {\n\t\t\tself._editor.setModel(null);\n\t\t};\n\t\t\n\t\tfor (let i = 0, items = iter$(self.space().files()), len = items.length; i < len; i++) {\n\t\t\t// Preload models\n\t\t\titems[i].model().model();\n\t\t};\n\t\t\n\t\tself.batch(function() {\n\t\t\tself._agentScrollTop = self._agentScrollLeft = -1;\n\t\t\tself._scrollTarget = {};\n\t\t\tif (self._file) { return self.fileDidSet(self._file) };\n\t\t});\n\t\t\n\t\tself.flag('loaded');\n\t\tself.render();\n\t\tif (window.performance) {\n\t\t\tconsole.log(\"editor loaded\",window.performance.now());\n\t\t};\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.dispose = function (){\n\t\tvar $1;\n\t\tfor (let i = 0, items = iter$(this._toDispose), len = items.length; i < len; i++) {\n\t\t\t($1 = items[i]) && $1.dispose && $1.dispose();\n\t\t};\n\t\t\n\t\tthis._toDispose = null;\n\t\t\n\t\tfor (let i = 0, items = iter$(this._timeouts), len = items.length; i < len; i++) {\n\t\t\tclearTimeout(items[i]);\n\t\t};\n\t\t\n\t\tthis._timeouts = null;\n\t\t\n\t\tthis.setFile(null);\n\t\twindow.SE = null;\n\t\t\n\t\tif (this._editor) {\n\t\t\tthis._editor.setModel(null);\n\t\t\tthis._editor.dispose();\n\t\t\ttry {\n\t\t\t\tthis._editor.domElement.innerHTML = '';\n\t\t\t} catch (e) { };\n\t\t\t\n\t\t\tthis._editor.domElement = null;\n\t\t};\n\t\t\n\t\tif (this._model) {\n\t\t\t// dispose all file-models?\n\t\t\tthis._model.dispose();\n\t\t\tthis._model = null;\n\t\t};\n\t\t\n\t\t// shouldnt be needed?\n\t\tthis._editor = null;\n\t\tthis._dom._tag = null;\n\t\tthis._dom.innerHTML = null;\n\t\t\n\t\tthis._data.setView(null);\n\t\tthis._data = null;\n\t\tthis._owner = null;\n\t\tthis._dom.parentNode.removeChild(this._dom);\n\t\treturn this;\n\t};\n})\nexports.EditorView = EditorView;\n", "var $_;\nvar Imba = require('imba1'), _2 = Imba.createTagCache, _1 = Imba.createElementFactory(/*SCOPEID*/), _3 = Imba.createTagScope(/*SCOPEID*/);\nvar protocol$ = require('../protocol'), POINTERMASK = protocol$.POINTERMASK, LAYOUTMASK = protocol$.LAYOUTMASK, ACTION = protocol$.ACTION;\n\nvar svg = '<svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\\n<polygon points=\"35 35 29.2102052 35.6469727 24.9999029 39 24.9987284 25\" fill=\"#8BB2FF\" fill-rule=\"evenodd\"/>\\n</svg>';\n\nvar PointerView = _3.defineTag('PointerView', function(tag){\n\t\n\ttag.prototype.keyframe = function(v){ return this._keyframe; }\n\ttag.prototype.setKeyframe = function(v){ this._keyframe = v; return this; };\n\ttag.prototype.__mask = {watch: 'maskDidSet',name: 'mask'};\n\ttag.prototype.mask = function(v){ return this._mask; }\n\ttag.prototype.setMask = function(v){\n\t\tvar a = this.mask();\n\t\tif(v != a) { this._mask = v; }\n\t\tif(v != a) { this.maskDidSet && this.maskDidSet(v,a,this.__mask) }\n\t\treturn this;\n\t};\n\ttag.prototype.__hidden = {watch: 'hiddenDidSet',name: 'hidden'};\n\ttag.prototype.hidden = function(v){ return this._hidden; }\n\ttag.prototype.setHidden = function(v){\n\t\tvar a = this.hidden();\n\t\tif(v != a) { this._hidden = v; }\n\t\tif(v != a) { this.hiddenDidSet && this.hiddenDidSet(v,a,this.__hidden) }\n\t\treturn this;\n\t};\n\ttag.prototype.__hover = {watch: 'hoverDidSet',name: 'hover'};\n\ttag.prototype.hover = function(v){ return this._hover; }\n\ttag.prototype.setHover = function(v){\n\t\tvar a = this.hover();\n\t\tif(v != a) { this._hover = v; }\n\t\tif(v != a) { this.hoverDidSet && this.hoverDidSet(v,a,this.__hover) }\n\t\treturn this;\n\t};\n\ttag.prototype.__target = {watch: 'targetDidSet',name: 'target'};\n\ttag.prototype.target = function(v){ return this._target; }\n\ttag.prototype.setTarget = function(v){\n\t\tvar a = this.target();\n\t\tif(v != a) { this._target = v; }\n\t\tif(v != a) { this.targetDidSet && this.targetDidSet(v,a,this.__target) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.build = function (){\n\t\tvar _t1, _t2, $ = ($_ = this.$).$build$ || ($_.$build$ = _2(this)), _t3, t0;\n\t\tthis.$open('build0').setChildren(\n\t\t\tt0 = $[0] || (t0=_1('div',$,0,this)).flag('pointer-body').setContent(\n\t\t\t\tthis._svg = this._svg||_1('div',t0).flag('svg').flag('Vector').flag('pointer-shape')\n\t\t\t,2)\n\t\t,2).synced();\n\t\t\n\t\tthis._svg.dom().innerHTML = svg;\n\t\tthis._sx = this._sy = 1;\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.mount = function (){\n\t\tvar self = this;\n\t\tself.space().on('resized',function() {\n\t\t\tself._frame = null;\n\t\t\treturn self.render();\n\t\t});\n\t\t// schedule(raf: yes)\n\t\tself.space().on('ticked',function(offset) {\n\t\t\treturn self.render(offset);\n\t\t});\n\t\treturn self;\n\t};\n\t\n\t// def unmount\n\t// \tunschedule\n\t\n\ttag.prototype.render = function (){\n\t\tvar hover_;\n\t\tvar frame = this.keyframe();\n\t\tvar prev = this._frame;\n\t\t// no need to check again until invalidated?\n\t\t\n\t\tif (!frame || this.space().recording() || frame._branch != this.space().branch() || this.space().isEditing()) {\n\t\t\tthis.setHidden(true);\n\t\t\treturn;\n\t\t};\n\t\t\n\t\tthis.setHidden(false);\n\t\t\n\t\t// should have a more consistent concept for invalidating\n\t\tif (this.space().counter('locals') != this._v) {\n\t\t\tthis._v = this.space().counter('locals');\n\t\t\tprev = null;\n\t\t};\n\t\t\n\t\tvar x = frame.x();\n\t\tvar y = frame.y();\n\t\tlet currOffset = this.space().timeline().currentOffset();\n\t\t// check if the target layout is different?\n\t\tif (frame == prev) {\n\t\t\tlet next = frame.nextFrame();\n\t\t\t\n\t\t\tif (next && currOffset != this._currOffset) {\n\t\t\t\tthis._currOffset = currOffset;\n\t\t\t\tlet dist = next.offset() - frame.offset();\n\t\t\t\tlet prog = Math.max(Math.min((currOffset - frame.offset()) / dist,1),0);\n\t\t\t\tif (dist < 140) {\n\t\t\t\t\tx = x + (next.x() - x) * prog;\n\t\t\t\t\ty = y + (next.y() - y) * prog;\n\t\t\t\t\tthis.drawTarget(x,y);\n\t\t\t\t} else {\n\t\t\t\t\treturn this.draw();\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn this.draw();\n\t\t\t};\n\t\t};\n\t\t\n\t\tthis._frame = frame;\n\t\t\n\t\tvar pos;\n\t\tvar over;\n\t\t\n\t\tif (prev && prev.sref() && prev.sref() == frame.sref()) {\n\t\t\tover = this._target;\n\t\t};\n\t\t\n\t\tover || (over = this.space().view().lookup(frame.sref()));\n\t\t\n\t\t// legacy\n\t\tif (!over && (typeof (hover_ = frame.hover())=='number'||hover_ instanceof Number)) {\n\t\t\tover = this.space().__lookup(frame.hover());\n\t\t};\n\t\t\n\t\tthis.flag('local',!!frame.LOCAL);\n\t\t\n\t\tvar rel = over || this._target; // no no!?\n\t\t\n\t\tvar remRect = frame ? frame.targetLayout() : null;\n\t\tvar locRect = over ? this.space().view().layoutForNode(over) : null;\n\t\t\n\t\tif (rel && rel.posToScreen) {\n\t\t\tpos = rel.posToScreen(x,y);\n\t\t};\n\t\t\n\t\tif (!pos && over && remRect && locRect) {\n\t\t\t// let x = frame.x\n\t\t\t// let y = frame.y\n\t\t\tlet lt = locRect[0];\n\t\t\tlet ll = locRect[1];\n\t\t\tlet lw = locRect[2];\n\t\t\tlet lh = locRect[3];\n\t\t\t\n\t\t\tlet rt = remRect[0];\n\t\t\tlet rl = remRect[1];\n\t\t\tlet rw = remRect[2];\n\t\t\tlet rh = remRect[3];\n\t\t\t\n\t\t\tlet dt = lt - rt;\n\t\t\tlet dl = ll - rl;\n\t\t\tlet dw = lw - rw;\n\t\t\tlet dh = lh - rh;\n\t\t\tlet rMask = remRect[4];\n\t\t\t\n\t\t\t// adjust for legacy bug where we included layouts\n\t\t\t//\n\t\t\tif (rMask == null) {\n\t\t\t\tdt += 54;\n\t\t\t\trMask = 0;\n\t\t\t};\n\t\t\t// hardcode issue from before\n\t\t\t// console.log \"converting poitner\",remRect,locRect\n\t\t\t// if size is the same - just morph position\n\t\t\t\n\t\t\tif (dw == 0 && dh == 0) {\n\t\t\t\t// if dl == 0 and dt == -54\n\t\t\t\t// \t# console.log \"correct legacy pointer issue\",remRect,locRect,frame.x,frame.y\n\t\t\t\t// \tdt = 0\n\t\t\t\tpos = [x + dl,y + dt];\n\t\t\t} else if (rMask & LAYOUTMASK.SCALED) {\n\t\t\t\t// find the relative distance from center remote and locally\n\t\t\t\tlet remRelX = (x - (rl + rw * 0.5)) / rw;\n\t\t\t\tlet remRelY = (y - (rt + rh * 0.5)) / rh;\n\t\t\t\t\n\t\t\t\t// convert x and y\n\t\t\t\tx = (ll + lw * 0.5) + (remRelX) * lw;\n\t\t\t\ty = (lt + lh * 0.5) + (remRelY) * lh;\n\t\t\t\tpos = [x,y];\n\t\t\t};\n\t\t\t// possibly convert some relative positioning?\n\t\t};\n\t\t\n\t\tif (pos) { this.drawTarget(pos[0],pos[1],over) };\n\t\tthis.flag('out-of-bounds',!over || !pos);\n\t\t// log \"render\",!!over,!!rel,pos,frame.sref, prev and prev.sref\n\t\tthis.setMask(frame.flags());\n\t\t\n\t\tif (over && this._target != over) {\n\t\t\tthis.setTarget(over);\n\t\t\t// console.log \"changed target\"\n\t\t\tthis._sx = 0.2;\n\t\t\tthis._sy = 0.2;\n\t\t};\n\t\tthis.draw();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.draw = function (){\n\t\tvar dx = this._x1 - this._x;\n\t\tvar dy = this._y1 - this._y;\n\t\t\n\t\tif (dx == 0 && dy == 0) {\n\t\t\treturn;\n\t\t};\n\t\t\n\t\tif (Math.abs(dx) < 5 && Math.abs(dy) < 5) {\n\t\t\tthis._x = this._x1;\n\t\t\tthis._y = this._y1;\n\t\t\tthis._sx = 1;\n\t\t\tthis._sy = 1;\n\t\t} else {\n\t\t\tthis._x = this._x + dx * this._sx;\n\t\t\tthis._y = this._y + dy * this._sy;\n\t\t\tif (this._sx < 0.6) { this._sx += 0.03 };\n\t\t\tif (this._sy < 0.6) { this._sy += 0.03 };\n\t\t};\n\t\t\n\t\tthis._dom.style.transform = (\"translate3d(\" + (this._x) + \"px,\" + (this._y) + \"px,0px)\");\n\t\treturn;\n\t};\n\t\n\ttag.prototype.drawTarget = function (x,y){\n\t\tthis._x1 = x;\n\t\tthis._y1 = y;\n\t\tthis._x || (this._x = x);\n\t\tthis._y || (this._y = y);\n\t\treturn;\n\t};\n\t\n\ttag.prototype.drawAt = function (x,y){\n\t\treturn this._dom.style.transform = (\"translate3d(\" + (this._x = x) + \"px,\" + (this._y = y) + \"px,0px)\");\n\t};\n\t\n\ttag.prototype.targetDidSet = function (curr,prev){\n\t\t// log \"targetDidSet\",curr,prev\n\t\tvar $1, $2, $3, $4;\n\t\tif (prev) {\n\t\t\t($1 = prev) && $1.unflag && $1.unflag('agent-over');\n\t\t\t($2 = prev) && $2.setHasPointerFocus && $2.setHasPointerFocus(false);\n\t\t};\n\t\t\n\t\tif (curr) {\n\t\t\t($3 = curr) && $3.flag && $3.flag('agent-over');\n\t\t\t($4 = curr) && $4.setHasPointerFocus && $4.setHasPointerFocus(true);\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.hiddenDidSet = function (bool){\n\t\tvar target_;\n\t\tthis.flag('hidden',!!bool);\n\t\tif (this.target()) { return (target_ = this.target()) && target_.flag && target_.flag('agent-over',!bool) };\n\t\t// stop highlighting target as well?\n\t};\n\t\n\ttag.prototype.maskDidSet = function (mask){\n\t\treturn this.flag('left-button-pressed',mask & POINTERMASK.LEFT_BUTTON);\n\t};\n\t\n\t\n\t// Where does this belong?\n\ttag.prototype.retargetStream = function (){\n\t\tlet stream = this.space().trunk().stream();\n\t\tlet pointers = stream.actionsOfType(ACTION.POINTER_UPDATE);\n\t\t\n\t\t// Let's say we have updates with these targets:\n\t\t// [-7, -7, -7, -9, -9, -9, -9, -9, -7, -7]\n\t\t// ^ idx ^ ret\n\t\t//\n\t\t// The following function takes an `idx` to the update\n\t\t// right before the target changes and will check if\n\t\t// it is right to change the target. It then returns\n\t\t// the index of where the next change happens\n\t\tlet patchAt = function(idx) {\n\t\t\tvar $1;\n\t\t\tlet startIdx = idx;\n\t\t\tlet before = pointers[idx];\n\t\t\tlet current = pointers[idx + 1];\n\t\t\t// console.log(\"Patching at idx={idx} offset={current.timeOffset} between {before.sref} and {current.sref}\")\n\t\t\tlet after;\n\t\t\t\n\t\t\t// We're using a cost model where we say that:\n\t\t\t// - Every time the target changes it costs alpha\n\t\t\t// - Every millisecond where we are retargeting costs beta\n\t\t\t\n\t\t\t// In the example above we then have two choice:\n\t\t\t// - We can keep the current targets and pay alpha*2 since\n\t\t\t// the target changes once to -9 and then to -7\n\t\t\t// - We can change all the -9 to -7 and pay beta*time\n\t\t\t\n\t\t\t// We will then choose whatever choice is cheapest\n\t\t\tlet alpha = 8000;\n\t\t\tlet beta = 10;\n\t\t\t\n\t\t\twhile (idx + 1 < pointers.length){\n\t\t\t\tlet next = pointers[idx + 1];\n\t\t\t\tif (next.sref() == current.sref()) {\n\t\t\t\t\t// continue looking for the change\n\t\t\t\t\tidx++;\n\t\t\t\t\tcurrent = next;\n\t\t\t\t} else {\n\t\t\t\t\tafter = next;\n\t\t\t\t\tbreak;\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\tlet time = current.timeOffset() - before.timeOffset();\n\t\t\t\n\t\t\t// Cost for doing nothing\n\t\t\tlet keepCost = alpha * 2;\n\t\t\t\n\t\t\t// Cost for changing all the srefs\n\t\t\tlet changeCost = beta * time;\n\t\t\tif (($1 = after) && $1.target && $1.target() != before.target()) {\n\t\t\t\tchangeCost += alpha;\n\t\t\t};\n\t\t\t\n\t\t\t// console.log(\"time={time} keep={keepCost} change={changeCost}\")\n\t\t\t\n\t\t\tif (changeCost < keepCost) {\n\t\t\t\tlet patchIdx = startIdx + 1;\n\t\t\t\twhile (patchIdx <= idx){\n\t\t\t\t\tpointers[patchIdx].setSref(before.sref());\n\t\t\t\t\tpatchIdx++;\n\t\t\t\t};\n\t\t\t};\n\t\t\treturn idx;\n\t\t};\n\t\t\n\t\t\n\t\t// Find the first index where the type changes\n\t\tlet patchIdx = 0;\n\t\twhile (patchIdx + 1 < pointers.length){\n\t\t\tif (pointers[patchIdx].sref() != pointers[patchIdx + 1].sref()) {\n\t\t\t\tbreak;\n\t\t\t};\n\t\t\tpatchIdx++;\n\t\t};\n\t\t\n\t\t// And the patch everything\n\t\tvar res = [];while (patchIdx + 1 < pointers.length){\n\t\t\tres.push((patchIdx = patchAt(patchIdx)));\n\t\t};return res;\n\t};\n})\nexports.PointerView = PointerView;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/);\nvar InterfaceView = _1.defineTag('InterfaceView', function(tag){\n\t\n\ttag.prototype.__hovered = {watch: 'hoveredDidSet',name: 'hovered'};\n\ttag.prototype.hovered = function(v){ return this._hovered; }\n\ttag.prototype.setHovered = function(v){\n\t\tvar a = this.hovered();\n\t\tif(v != a) { this._hovered = v; }\n\t\tif(v != a) { this.hoveredDidSet && this.hoveredDidSet(v,a,this.__hovered) }\n\t\treturn this;\n\t};\n\ttag.prototype.__enabled = {watch: 'enabledDidSet',name: 'enabled'};\n\ttag.prototype.enabled = function(v){ return this._enabled; }\n\ttag.prototype.setEnabled = function(v){\n\t\tvar a = this.enabled();\n\t\tif(v != a) { this._enabled = v; }\n\t\tif(v != a) { this.enabledDidSet && this.enabledDidSet(v,a,this.__enabled) }\n\t\treturn this;\n\t};\n\ttag.prototype.__transitionTime = {'default': 250,name: 'transitionTime'};\n\ttag.prototype.transitionTime = function(v){ return this._transitionTime; }\n\ttag.prototype.setTransitionTime = function(v){ this._transitionTime = v; return this; }\n\ttag.prototype._transitionTime = 250;\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.branch = function (){\n\t\treturn this.data().branch();\n\t};\n\t\n\ttag.prototype.timeline = function (){\n\t\treturn this.data().timeline();\n\t};\n\t\n\ttag.prototype.enabledDidSet = function (bool){\n\t\tvar self = this;\n\t\tif (true) {\n\t\t\tself.flag('transitioning');\n\t\t\tself.dom().offsetTop;\n\t\t\tclearTimeout(self._transitioner);\n\t\t\tself._transitioner = setTimeout(function() {\n\t\t\t\treturn self.unflag('transitioning');\n\t\t\t},self.transitionTime());\n\t\t};\n\t\t\n\t\tself.flag('enabled',bool);\n\t\tself.flag('disabled',!bool);\n\t\t\n\t\t// if bool\n\t\t//\tunflag('')\n\t\t\n\t\t// if we are currently over element\n\t\t// wait with hiding until mouse is out\n\t\treturn bool ? self.reveal() : self.conceal();\n\t};\n\t\n\ttag.prototype.invalidated = function (){\n\t\tvar $0 = arguments, i = $0.length;\n\t\tvar params = new Array(i>0 ? i : 0);\n\t\twhile(i>0) params[i-1] = $0[--i];\n\t\tlet prev = this._guard || [];\n\t\tthis._guard = params;\n\t\tfor (let i = 0, items = iter$(params), len = items.length; i < len; i++) {\n\t\t\tif (params[i] != prev[i]) {\n\t\t\t\tthis._version = (this._version || 0) + 1;\n\t\t\t\treturn true;\n\t\t\t};\n\t\t};\n\t\treturn false;\n\t};\n\t\n\ttag.prototype.reveal = function (){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.conceal = function (){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.commit = function (){\n\t\tif (this.enabled()) this.render();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.exec = function (name){\n\t\treturn this.space().actions().exec(name);\n\t};\n})\nexports.InterfaceView = InterfaceView;\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _4 = Imba.createTagList, _3 = Imba.createTagMap, _1 = Imba.createTagScope(/*SCOPEID*/), _2 = Imba.createElementFactory(/*SCOPEID*/);\nvar AudioManager = require('../util/AudioManager').AudioManager;\nvar ScrimbaGesture = require('../util/ScrimbaGesture').ScrimbaGesture;\nvar Segment = require('../util/TimelineCues').Segment;\nvar ACTION = require('../protocol').ACTION;\n\nvar uxa1$ = require('uxa1'), Menu = uxa1$.Menu, MenuItem = uxa1$.MenuItem, Button = uxa1$.Button, IconButton = uxa1$.IconButton;\n\nvar msToStr = require('../util/index').msToStr;\n\n\nvar SYMBOLS = {\n\tMUTED: \"\\ue8cc\", // E8b4\n\tCUT: \"\\ue6c7\",\n\tFF: \"\\ue730\"\n};\n\nvar round = function(val,to) {\n\tif(to === undefined) to = 0.5;\n\treturn Math.round(val / to) * to;\n};\n\nvar RangeView = _1.defineTag('RangeView', function(tag){\n\ttag.prototype.timeline = function(v){ return this._timeline; }\n\ttag.prototype.setTimeline = function(v){ this._timeline = v; return this; };\n\ttag.prototype.data = function(v){ return this._data; }\n\ttag.prototype.setData = function(v){ this._data = v; return this; };\n\t\n\ttag.prototype.left = function (){\n\t\treturn round(this.timeline().offset2px(this.data().start()));\n\t};\n\t\n\ttag.prototype.right = function (){\n\t\treturn round(this.timeline().offset2px(this.data().end()));\n\t};\n\t\n\ttag.prototype.width = function (){\n\t\treturn round(this.data().span() * this.timeline().ppms());\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1;\n\t\treturn this.$open(0).css('left',this.left()).css('width',this.width()).synced();\n\t};\n});\n\nvar SegmentView = _1.defineTag('SegmentView', RangeView, function(tag){\n\tlet types = ['cue','audio','loop'];\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3;\n\t\tlet dur = this.data().data()[3];\n\t\tlet factor = dur ? ((this.data().span() / dur)) : 0;\n\t\tlet left = this.left();\n\t\tlet width = this.right() - left + 1;\n\t\tlet o = this.data().options();\n\t\t\n\t\treturn this.$open(0).setFlag(-1,types[this.data().data()[0]]).flagIf('selected',(this.data()._selected)).css('left',left).css('width',width).setChildren([\n\t\t\t($[0] || _2('div',$,0,this).flag('handle').flag('left').dataset('gesture','segmove,start')).bindData(this,'data',[]).end(),\n\t\t\t($[1] || _2('div',$,1,this).flag('handle').flag('right').dataset('gesture','segmove,end')).bindData(this,'data',[]).end(),\n\t\t\t($[2] || _2('div',$,2,this).flag('middle').dataset('gesture','move')).end(),\n\t\t\t($[3] || _2('div',$,3,this).flag('label')).setContent([\n\t\t\t\t(dur > 0) ? (\n\t\t\t\t\t($[4] || _2('span',$,4,3).flag('dur')).setContent(dur + 'ms',3)\n\t\t\t\t) : ((dur == 0) ? (\n\t\t\t\t\t($[5] || _2('span',$,5,3).flag('dur').setText(\"\u221E\"))\n\t\t\t\t) : ((dur < 0) ? (\n\t\t\t\t\t($[6] || _2('span',$,6,3).flag('dur')).setContent(this.data().span() + 'ms',3)\n\t\t\t\t) : void(0))),\n\t\t\t\t\n\t\t\t\tfalse ? true : void(0)\n\t\t\t],1),\n\t\t\t\n\t\t\t(o && this.timeline().isOffsetBased()) ? (\n\t\t\t\t($[7] || _2('div',$,7,this).flag('subrange')).css('left',(round(this.timeline().offset2px(o[0]) - left))).css('width',(round(o[1] * this.timeline().ppms()))).end()\n\t\t\t) : void(0)\n\t\t],1).synced();\n\t};\n\t\n\ttag.prototype.ontap = function (t){\n\t\tt.halt();\n\t\treturn this.trigger('segsel',this.data());\n\t};\n});\n\nvar OffsetView = _1.defineTag('OffsetView', function(tag){\n\ttag.prototype.__left = {watch: 'draw',name: 'left'};\n\ttag.prototype.left = function(v){ return this._left; }\n\ttag.prototype.setLeft = function(v){\n\t\tvar a = this.left();\n\t\tif(v != a) { this._left = v; }\n\t\tif(v != a) { this.draw && this.draw(v,a,this.__left) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.draw = function (){\n\t\treturn this.css({transform: (\"translateX(\" + this.left() + \"px)\")});\n\t};\n});\n\nvar TimelineCanvas = _1.defineTag('TimelineCanvas', function(tag){\n\t\n\ttag.prototype.cues = function(v){ return this._cues; }\n\ttag.prototype.setCues = function(v){ this._cues = v; return this; };\n\ttag.prototype.pxps = function(v){ return this._pxps; }\n\ttag.prototype.setPxps = function(v){ this._pxps = v; return this; };\n\ttag.prototype.startOffset = function(v){ return this._startOffset; }\n\ttag.prototype.setStartOffset = function(v){ this._startOffset = v; return this; };\n\ttag.prototype.startTime = function(v){ return this._startTime; }\n\ttag.prototype.setStartTime = function(v){ this._startTime = v; return this; };\n\ttag.prototype.endTime = function(v){ return this._endTime; }\n\ttag.prototype.setEndTime = function(v){ this._endTime = v; return this; };\n\ttag.prototype.options = function(v){ return this._options; }\n\ttag.prototype.setOptions = function(v){ this._options = v; return this; };\n\ttag.prototype.__currentOffset = {watch: 'currentOffsetDidSet',name: 'currentOffset'};\n\ttag.prototype.currentOffset = function(v){ return this._currentOffset; }\n\ttag.prototype.setCurrentOffset = function(v){\n\t\tvar a = this.currentOffset();\n\t\tif(v != a) { this._currentOffset = v; }\n\t\tif(v != a) { this.currentOffsetDidSet && this.currentOffsetDidSet(v,a,this.__currentOffset) }\n\t\treturn this;\n\t};\n\ttag.prototype.markedRange = function(v){ return this._markedRange; }\n\ttag.prototype.setMarkedRange = function(v){ this._markedRange = v; return this; };\n\ttag.prototype.markers = function(v){ return this._markers; }\n\ttag.prototype.setMarkers = function(v){ this._markers = v; return this; };\n\t\n\ttag.prototype.timeline = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.cues = function (){\n\t\treturn this.timeline().cues();\n\t};\n\t\n\ttag.prototype.viewRange = function (){\n\t\treturn this._viewRange || this.data()._viewRange;\n\t};\n\t\n\ttag.prototype.scrollLeft = function (){\n\t\treturn this.startTime() * this.ppms();\n\t};\n\t\n\ttag.prototype.canvas = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn (this._canvas = this._canvas||_2('canvas',this).flag('canvas'));\n\t};\n\t\n\ttag.prototype.build = function (){\n\t\tthis._version = 0;\n\t\tthis._currentOffset = 0;\n\t\treturn this._defaults = {\n\t\t\tclipColors: ['#977f9e'],\n\t\t\tcutColor: '#c3c3c3',\n\t\t\ttickMinSpacing: 10,\n\t\t\ttockMinSpacing: 30,\n\t\t\ttickFontSize: 10,\n\t\t\tactionsHeight: 2\n\t\t};\n\t};\n\t\n\ttag.prototype.option = function (key,fallback){\n\t\tif(fallback === undefined) fallback = null;\n\t\tlet val = this._options && this._options[key] || this._defaults[key];\n\t\treturn (val != null) ? val : fallback;\n\t};\n\t\n\ttag.prototype.setup = function (){\n\t\treturn this._draws = 0;\n\t};\n\t\n\ttag.prototype.ppms = function (){\n\t\treturn this.pxps() / 1000;\n\t};\n\t\n\ttag.prototype.startTime = function (){\n\t\treturn this.cues().offsetToTime(this.startOffset());\n\t};\n\t\n\ttag.prototype.startValue = function (){\n\t\treturn this.isOffsetBased() ? this.startOffset() : this.startTime();\n\t};\n\t\n\t// nede to decide upon consistent naming for the two coordinate systems\n\ttag.prototype.isOffsetBased = function (){\n\t\treturn !(!this.options().renderCollapsed);\n\t};\n\t\n\ttag.prototype.isTimeBased = function (){\n\t\treturn !(this.isOffsetBased());\n\t};\n\t\n\t// timing methods\n\ttag.prototype.xToTimeOffset = function (x,round){\n\t\tif(round === undefined) round = 0;\n\t\tlet box = this.dom().getBoundingClientRect();\n\t\tlet val = this.startValue() + (x - box.left) / this.ppms();\n\t\tif (this.isTimeBased()) {\n\t\t\tval = this.cues().timeToOffset(val);\n\t\t};\n\t\t\n\t\treturn round ? ((Math.round(val * round) / round)) : val;\n\t};\n\t\n\ttag.prototype.screenx2val = function (x){\n\t\tvar val;\n\t\tlet box = this.dom().getBoundingClientRect();\n\t\treturn val = this.startValue() + (x - box.left) / this.ppms();\n\t};\n\t\n\ttag.prototype.absTimeToX = function (absTime,round){\n\t\tif(round === undefined) round = 0;\n\t\tlet val = (absTime - this.startTime()) * this.ppms();\n\t\treturn round ? ((Math.round(val * round) / round)) : val;\n\t};\n\t\n\ttag.prototype.round = function (val,precision){\n\t\tif(precision === undefined) precision = 0;\n\t\treturn precision ? ((Math.round(val * precision) / precision)) : val;\n\t};\n\t\n\ttag.prototype.px2val = function (x){\n\t\treturn this.startValue() + (x / this.ppms());\n\t};\n\t\n\ttag.prototype.time2px = function (time){\n\t\tif (this.isOffsetBased()) {\n\t\t\treturn this.offset2px(this.cues().timeToOffset(time));\n\t\t};\n\t\t\n\t\treturn (time - this.startTime()) * this.ppms();\n\t};\n\t\n\ttag.prototype.offset2px = function (offset){\n\t\tif (this.isTimeBased()) {\n\t\t\treturn this.time2px(this.cues().offsetToTime(offset));\n\t\t};\n\t\t\n\t\treturn (offset - this.startOffset()) * this.ppms();\n\t};\n\t\n\ttag.prototype.offset2val = function (offset){\n\t\treturn this.isOffsetBased() ? offset : this.cues().offsetToTime(offset);\n\t};\n\t\n\ttag.prototype.time2val = function (time){\n\t\treturn this.isTimeBased() ? time : this.cues().timeToOffset(time);\n\t};\n\t\n\ttag.prototype.val2offset = function (val){\n\t\treturn this.isOffsetBased() ? val : this.cues().timeToOffset(val);\n\t};\n\t\n\ttag.prototype.val2time = function (val){\n\t\treturn this.isTimeBased() ? val : this.cues().offsetToTime(val);\n\t};\n\t\n\ttag.prototype.yScale = function (){\n\t\treturn 0.6;\n\t};\n\t\n\ttag.prototype.showCues = function (){\n\t\treturn true;\n\t};\n\t\n\ttag.prototype.dpr = function (){\n\t\treturn this._dpr || (this._dpr = window.devicePixelRatio);\n\t};\n\t\n\ttag.prototype.vh = function (){\n\t\treturn this._vh;\n\t};\n\t\n\ttag.prototype.vw = function (){\n\t\treturn this._vw;\n\t};\n\t\n\ttag.prototype.invalidated = function (){\n\t\tvar $0 = arguments, i = $0.length;\n\t\tvar params = new Array(i>0 ? i : 0);\n\t\twhile(i>0) params[i-1] = $0[--i];\n\t\tlet prev = this._guard || [];\n\t\tthis._guard = params;\n\t\tfor (let i = 0, items = iter$(params), len = items.length; i < len; i++) {\n\t\t\tif (params[i] != prev[i]) {\n\t\t\t\tthis._version++;\n\t\t\t\treturn true;\n\t\t\t};\n\t\t};\n\t\treturn false;\n\t};\n\t\n\ttag.prototype.drawClips = function (clips,ctx){\n\t\tvar source_;\n\t\tvar ctx = this.canvas().dom().getContext('2d');\n\t\tlet ppms = this.ppms();\n\t\tvar colors = this.option('clipColors').slice();\n\t\tvar colorIndex = 0;\n\t\t// canvasTime, canvasOffset\n\t\t\n\t\tlet to0 = this.startOffset();\n\t\tlet to1 = this.val2offset(this.startValue() + (this._vw / ppms));\n\t\tlet tt0 = this.startTime();\n\t\tlet tt1 = tt0 + (this._vw / ppms);\n\t\t\n\t\tlet tv0 = this.isOffsetBased() ? to0 : tt0;\n\t\tlet tv1 = this.isOffsetBased() ? to1 : tt1;\n\t\t\n\t\t// var startRelTime = startTime\n\t\t// var endRelTime = startRelTime\n\t\tlet yOffset = Math.round(this._vh * this.option('waveAnchorY',0.5) * this.dpr());\n\t\tlet yAmp = ((this.vh() * 0.5) / 128) * this.dpr() * -1 * this.yScale();\n\t\t\n\t\tlet cues = [];\n\t\t\n\t\tctx.save();\n\t\t\n\t\t// for now we draw everything\t\t\n\t\tfor (let j = 0, items = iter$(clips), len = items.length, clip; j < len; j++) {\n\t\t\tclip = items[j];\n\t\t\tlet v0 = this.isOffsetBased() ? clip.o0 : clip.t0;\n\t\t\tlet v1 = this.isOffsetBased() ? clip.o1 : clip.t1;\n\t\t\t\n\t\t\tlet t0x = this.time2px(clip.t0);\n\t\t\tlet t1x = this.time2px(clip.t1);\n\t\t\t\n\t\t\tlet o0x = this.offset2px(clip.o0);\n\t\t\tlet o1x = this.offset2px(clip.o1);\n\t\t\t\n\t\t\tlet v0x = this.isOffsetBased() ? o0x : t0x;\n\t\t\tlet v1x = this.isOffsetBased() ? o1x : t1x;\n\t\t\t\n\t\t\tlet color = (source_ = clip.source).COLOR || (source_.COLOR = colors[(colorIndex++) % colors.length]);\n\t\t\tlet wave = clip.source._wave;\n\t\t\tlet cue = clip.cue;\n\t\t\t\n\t\t\tif ((v1x - v0x) == 0) {\n\t\t\t\tcontinue;\n\t\t\t};\n\t\t\t\n\t\t\t// possibly skip drawing\n\t\t\tif (v0x > this._vw || v1x < 0) {\n\t\t\t\tcontinue;\n\t\t\t};\n\t\t\t\n\t\t\tlet skip = clip.skip || 0;\n\t\t\tlet clipSkip = skip;\n\t\t\tlet dur = v1 - v0; // does not take speedup etc into effect\n\t\t\t\n\t\t\tif (this.isOffsetBased() && clip.realSkip) {\n\t\t\t\t// console.log \"draw with realSkip instead\",clip:realSkip,skip,dur\n\t\t\t\tskip = clipSkip = clip.realSkip;\n\t\t\t\t// should also include a clip for this one\n\t\t\t};\n\t\t\t\n\t\t\tif (this.pxps() < 10) {\n\t\t\t\tlet scale = Math.ceil(44100 / (this.pxps() * this.dpr()));\n\t\t\t\twave = wave._lowres || (wave._lowres = wave.resample({scale: scale}));\n\t\t\t};\n\t\t\t\n\t\t\tif (true) {\n\t\t\t\tif (tv0 > v0) {\n\t\t\t\t\tlet delta = (tv0 - v0);\n\t\t\t\t\tskip += delta;\n\t\t\t\t\tdur -= delta;\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tif (v1 > tv1) {\n\t\t\t\t\tdur -= (v1 - tv1);\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\t// the first wave-sample for this clip\n\t\t\tlet i0 = Math.max(wave.at_time(skip / 1000),0);\n\t\t\tlet i1 = Math.min(wave.at_time((skip + dur) / 1000),wave.offset_end);\n\t\t\tlet spx = wave.seconds_per_pixel;\n\t\t\t\n\t\t\tctx.save();\n\t\t\tctx.fillStyle = clip.cue ? this.option('cutColor') : color; // '#977f9e'\n\t\t\tctx.beginPath();\n\t\t\t\n\t\t\t// transform the canvas to have 0,0 at the start and scaling\n\t\t\tif (this.isOffsetBased()) {\n\t\t\t\tctx.translate(this.offset2px(v0 - clipSkip) * this.dpr(),yOffset);\n\t\t\t} else {\n\t\t\t\tctx.translate(this.time2px(v0 - clipSkip) * this.dpr(),yOffset);\n\t\t\t};\n\t\t\t\n\t\t\tctx.scale(this.dpr() * spx * this.pxps(),yAmp);\n\t\t\t// transform as if we start at the beginning of the whole wave\n\t\t\t\n\t\t\tlet i = i0;\n\t\t\t// drawing the lower part now\n\t\t\twhile (i < i1){\n\t\t\t\tctx.lineTo(i,wave.at(i * 2));\n\t\t\t\ti++;\n\t\t\t};\n\t\t\t\n\t\t\twhile (i > i0){\n\t\t\t\tctx.lineTo(--i,wave.at(i * 2 + 1));\n\t\t\t};\n\t\t\t\n\t\t\tctx.closePath();\n\t\t\tctx.fill();\n\t\t\tctx.restore();\n\t\t\t\n\t\t\t\n\t\t\tif (cue && cues.indexOf(cue) == -1) {\n\t\t\t\tcues.push(cue);\n\t\t\t\tctx.save();\n\t\t\t\tlet c0x = v0x;\n\t\t\t\tlet c1x = this.isOffsetBased() ? this.offset2px(cue.o1) : this.time2px(cue.t1);\n\t\t\t\t\n\t\t\t\t// now possibly draw some details for the clip itself\n\t\t\t\tlet h = this.option('minimap') ? 10 : ((this._vh * 0.3));\n\t\t\t\tctx.strokeStyle = this.option('cutColor');\n\t\t\t\t\n\t\t\t\tctx.lineWidth = this.option('minimap') ? ((1 / this.dpr())) : 1;\n\t\t\t\tctx.translate(0,yOffset);\n\t\t\t\tctx.scale(this.dpr(),this.dpr());\n\t\t\t\tctx.beginPath();\n\t\t\t\t\n\t\t\t\tlet icon = SYMBOLS.MUTED;\n\t\t\t\tlet iconSize = 7;\n\t\t\t\t\n\t\t\t\t// cutting\n\t\t\t\tif (cue.duration == 0) {\n\t\t\t\t\tctx.moveTo(c0x,-h);\n\t\t\t\t\tctx.lineTo(c1x,h);\n\t\t\t\t\tctx.moveTo(c0x,h);\n\t\t\t\t\tctx.lineTo(c1x,-h);\n\t\t\t\t\ticon = SYMBOLS.CUT;\n\t\t\t\t\t// iconSize = 6\n\t\t\t\t} else if (cue.duration < (cue.o1 - cue.o0)) {\n\t\t\t\t\ticon = SYMBOLS.FF;\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tctx.strokeRect(c0x,-h,c1x - c0x,h * 2);\n\t\t\t\t// draw icon\n\t\t\t\t\n\t\t\t\tthis.drawIcon(ctx,c0x + (c1x - c0x) * 0.5,-h,iconSize * this.dpr(),icon);\n\t\t\t\t\n\t\t\t\t// unless option(:minimap)\n\t\t\t\t// \th = @vh * 0.5\n\t\t\t\t\n\t\t\t\t// ctx.moveTo(c0x,-h)\n\t\t\t\t// ctx.lineTo(c0x,h)\n\t\t\t\t\n\t\t\t\t// ctx.moveTo(c1x,-h)\n\t\t\t\t// ctx.lineTo(c1x,h)\n\t\t\t\t\n\t\t\t\tctx.stroke();\n\t\t\t\tctx.restore();\n\t\t\t\t// start and end-lines\n\t\t\t};\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.drawIcon = function (ctx,x,y,size,symbol,color){\n\t\tif (this.option('minimap')) { return };\n\t\t// symbol = \"\\uE8b4\"\n\t\tctx.save();\n\t\tctx.font = (\"normal \" + size + \"px 'scrimbacon'\");\n\t\tctx.textAlign = 'center';\n\t\tctx.textBaseline = 'middle';\n\t\tctx.fillText(symbol,x,y);\n\t\treturn ctx.restore();\n\t\t// \"\\e8b4\"\n\t};\n\t\n\ttag.prototype.ctx = function (){\n\t\treturn this._ctx || (this._ctx = this.canvas().dom().getContext('2d'));\n\t};\n\t\n\ttag.prototype.draw = async function (){\n\t\tvar pxps = this.pxps();\n\t\tlet vw = this._vw = this.dom().offsetWidth;\n\t\tlet vh = this._vh = this.dom().offsetHeight;\n\t\tlet collapse = !this.options().renderCollapsed;\n\t\t\n\t\tif (pxps == undefined && this.endTime()) {\n\t\t\tpxps = (vw / (this.endTime() / 1000));\n\t\t\tthis._pxps = pxps;\n\t\t};\n\t\t\n\t\tif (!(this.invalidated(this.startOffset(),this.startTime(),pxps,this.cues().version(),vw,vh,collapse) && vw)) {\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\tlet now = Date.now();\n\t\tthis._t = now;\n\t\tvar draw = ++this._draws;\n\t\t\n\t\t// fetch clips\n\t\tfor (let i = 0, items = iter$(this.cues().audio()), len = items.length, audioItem; i < len; i++) {\n\t\t\taudioItem = items[i];\n\t\t\taudioItem._wave = await AudioManager.instance().waveformForId(audioItem[3]);\n\t\t};\n\t\t\n\t\t// another draw has been started during wave-loading\n\t\tif (draw != this._draws) {\n\t\t\treturn;\n\t\t};\n\t\t\n\t\t// this will clear the canvas\n\t\tvar ctx = this.ctx(); // canvas.dom.getContext('2d')\n\t\tthis.canvas().dom().width = vw * this.dpr();\n\t\tthis.canvas().dom().height = vh * this.dpr();\n\t\t\n\t\t// draw background\n\t\t\n\t\tlet clips = this.cues().audioclips(0,0,true);\n\t\tthis.drawTickLines(ctx);\n\t\tthis.drawClips(clips);\n\t\tthis.drawActions(ctx);\n\t\tthis._wheelStartTime = null;\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.drawTickLines = function (ctx){\n\t\tlet pxps = this.pxps();\n\t\tlet tickTime = 0;\n\t\tlet tickEvery = 0;\n\t\tlet tockEvery = 0;\n\t\tlet tickMinSpacing = this.option('tickMinSpacing');\n\t\tlet tockMinSpacing = this.option('tockMinSpacing');\n\t\tlet fontSize = this.option('tickFontSize');\n\t\t\n\t\tfor (let i = 0, items = [0.05,0.1,0.25,0.5,1,5,10,15,30,60,120,300,600,1200], len = items.length, v; i < len; i++) {\n\t\t\tv = items[i];\n\t\t\tif (pxps * v > tickMinSpacing) {\n\t\t\t\ttickEvery || (tickEvery = v);\n\t\t\t};\n\t\t\t\n\t\t\tif (pxps * v > tockMinSpacing && v >= 1) {\n\t\t\t\ttockEvery || (tockEvery = v);\n\t\t\t\tbreak;\n\t\t\t};\n\t\t};\n\t\t\n\t\tctx.strokeStyle = '#DDDDDD';\n\t\tctx.fillStyle = '#CCCCCC';\n\t\t\n\t\tctx.beginPath();\n\t\tctx.font = (\"\" + (fontSize * this.dpr()) + \"px sans-serif\");\n\t\tctx.textAlign = 'center';\n\t\tctx.textBaseline = 'bottom';\n\t\t\n\t\tlet textWidth = ctx.measureText(\"0:00\").width;\n\t\t\n\t\t// draw lines\n\t\tlet x = 0;\n\t\tlet ppms = this.ppms(),dpr = this.dpr();\n\t\t\n\t\t// add ticks directly?\n\t\tlet ticks = [];\n\t\t\n\t\tlet start = this.startOffset();\n\t\tif (this.option('renderTimeTicks')) {\n\t\t\t// add ticks for the actual time\n\t\t\twhile (x < this._vw){\n\t\t\t\tx = this.time2px(tickTime);\n\t\t\t\t// let offsetForTime = cues.timeToOffset(tickTime * 1000)\n\t\t\t\t// x = (offsetForTime * ppms) - (start * ppms)\n\t\t\t\tif (x >= 0) { ticks.push([x,0,msToStr(tickTime),tickTime]) };\n\t\t\t\ttickTime += (tickEvery * 1000);\n\t\t\t};\n\t\t};\n\t\t\n\t\tlet gap = Math.round(fontSize * 0.5) * dpr;\n\t\tlet maxX = this._vw * dpr;\n\t\tlet txtSpace = textWidth * 0.5 + 2 * dpr;\n\t\t\n\t\tfor (let i = 0, len = ticks.length, tick; i < len; i++) {\n\t\t\ttick = ticks[i];\n\t\t\tlet tx = tick[0] * dpr;\n\t\t\tlet ty = tick[1] * this._vh * dpr;\n\t\t\tlet lbl = tick[2];\n\t\t\tlet time = tick[3];\n\t\t\tlet tock = time % (tockEvery * 1000) == 0;\n\t\t\tlet lineGap = tock ? (gap * 2) : (gap * 5);\n\t\t\tif (tx >= maxX) { continue; };\n\t\t\t\n\t\t\tctx.beginPath();\n\t\t\tctx.strokeStyle = tock ? '#D2D2D2' : '#e0e0e0';\n\t\t\tctx.lineWidth = 1;\n\t\t\tctx.moveTo(tx,lineGap);\n\t\t\tctx.lineTo(tx,this._vh * dpr - lineGap);\n\t\t\tctx.stroke();\n\t\t\t\n\t\t\tif (tock) {\n\t\t\t\tctx.textBaseline = ty ? 'bottom' : 'top';\n\t\t\t\tctx.textAlign = 'left';\n\t\t\t\t\n\t\t\t\t// ctx.moveTo(tx, ty - gap)\n\t\t\t\t// ctx.lineTo(tx, ty + gap)\n\t\t\t\t\n\t\t\t\t// let lblX = tx\n\t\t\t\t\n\t\t\t\t// if tx < txtSpace\n\t\t\t\t// \ttx = txtSpace\n\t\t\t\t// elif (maxX - tx) < txtSpace\n\t\t\t\t// \ttx = maxX - txtSpace\n\t\t\t\t\n\t\t\t\tctx.fillText(lbl,tx + 4 * dpr,ty ? ((ty - gap)) : ((lineGap - 2 * dpr)));\n\t\t\t};\n\t\t\t\n\t\t\t// now add a full line as well\n\t\t\t// ctx.moveTo(tx,0)\n\t\t\t// ctx.lineTo(tx,@vh * dpr)\n\t\t};\n\t\t// ctx.stroke\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.getActions = function (){\n\t\tlet stream = this.timeline().branch().stream();\n\t\tlet action = stream.actionAtOffset(this.startOffset());\n\t\tlet endOffset = this.option('minimap') ? stream.duration() : this.val2offset(this.startValue() + (this._vw / this.ppms()));\n\t\tlet lines = this._lines = {};\n\t\t\n\t\t// base on calculations no?\n\t\tlet maxDist = (this.option('minimap') ? 3 : 2) / this.ppms();\n\t\t\n\t\t// timeOffset is absolute\n\t\twhile (action && action.timeOffset() < endOffset){\n\t\t\tlet time = action.timeOffset();\n\t\t\tlet type = action._type;\n\t\t\tlet line = lines[type] || (lines[type] = []);\n\t\t\tlet prev = line[line.length - 1];\n\t\t\t\n\t\t\tif ((prev instanceof Array) && (time - prev[1]) < maxDist) {\n\t\t\t\tprev[1] = time;\n\t\t\t} else if ((typeof prev=='number'||prev instanceof Number) && (time - prev) < maxDist) {\n\t\t\t\tline[line.length - 1] = [prev,time];\n\t\t\t} else {\n\t\t\t\tline.push(time);\n\t\t\t};\n\t\t\taction = action._next;\n\t\t};\n\t\t\n\t\treturn lines;\n\t};\n\t\n\ttag.prototype.drawActionLayer = function (ctx,data,type,color,row){\n\t\t// if option(:minimap)\n\t\t// \tconsole.log \"drawActionLayer\",type,data,color,row\n\t\t\n\t\tif (type instanceof Array) {\n\t\t\tfor (let i = 0, items = iter$(type), len = items.length; i < len; i++) {\n\t\t\t\tthis.drawActionLayer(ctx,data,items[i],color,row);\n\t\t\t};\n\t\t\treturn;\n\t\t};\n\t\t\n\t\tlet actionsHeight = this.option('actionsHeight') || 2;\n\t\tlet points = data[type];\n\t\t\n\t\t\n\t\t\n\t\tif (!points) { return };\n\t\t\n\t\tlet size = Math.max((this.ppms() * 10),actionsHeight / 2) * this.dpr();\n\t\tlet y = (this._vh - (this.option('tickFontSize') * 2) - row * (actionsHeight * 1.5)) * this.dpr();\n\t\t\n\t\tctx.strokeStyle = color;\n\t\tctx.lineWidth = actionsHeight * this.dpr();\n\t\tctx.lineCap = 'round';\n\t\tctx.beginPath();\n\t\t\n\t\tlet x0 = 0;\n\t\tlet x1 = 0;\n\t\t\n\t\tfor (let i = 0, items = iter$(points), len = items.length, pt; i < len; i++) {\n\t\t\t\n\t\t\tpt = items[i];\n\t\t\tlet next = points[i + 1];\n\t\t\tif (pt instanceof Array) {\n\t\t\t\tx0 = this.offset2px(pt[0]) * this.dpr();\n\t\t\t\tx1 = this.offset2px(pt[1]) * this.dpr();\n\t\t\t} else {\n\t\t\t\tx0 = this.offset2px(pt) * this.dpr();\n\t\t\t\tx1 = x0 + size;\n\t\t\t};\n\t\t\t\n\t\t\tctx.moveTo(x0,y);\n\t\t\tctx.lineTo(x1,y);\n\t\t};\n\t\tctx.stroke();\n\t\treturn;\n\t};\n\t\n\ttag.prototype.drawLines = function (ctx,points,color){\n\t\tif(color === undefined) color = '#ff2c42';\n\t\tctx.strokeStyle = color;\n\t\tctx.lineWidth = 1 * this.dpr();\n\t\tctx.lineCap = 'butt';\n\t\tctx.setLineDash([4 * this.dpr(),2 * this.dpr()]);\n\t\tctx.beginPath();\n\t\t\n\t\tfor (let i = 0, items = iter$(points), len = items.length; i < len; i++) {\n\t\t\tlet x = this.absTimeToX(items[i]) * this.dpr();\n\t\t\tctx.moveTo(x,0);\n\t\t\tctx.lineTo(x,this._vh * this.dpr());\n\t\t};\n\t\t\n\t\tctx.stroke();\n\t\treturn this;\n\t};\n\t\n\t\n\t\n\ttag.prototype.drawActions = function (ctx){\n\t\tvar lines = this.getActions();\n\t\tctx.save();\n\t\tthis.drawActionLayer(ctx,lines,ACTION.LCSELECTION,'#e0929e',0);\n\t\tthis.drawActionLayer(ctx,lines,[ACTION.LCINSERT,ACTION.LCDELETE,ACTION.LCEDIT],'#91bba0',0); // 6666$$\n\t\tthis.drawActionLayer(ctx,lines,ACTION.POINTER_UPDATE,'#C3C3C3',1);\n\t\tthis.drawActionLayer(ctx,lines,ACTION.LAYOUT,'#FEC2BF',1);\n\t\t// draw browser-parts\n\t\tthis.drawActionLayer(ctx,lines,[ACTION.PAGE_LOAD,ACTION.DOM_MUTATE,ACTION.PAGE_LOG],'#66CCFF',2);\n\t\t\n\t\t// if options(:minimap)\n\t\t// \tconsole.log \"drawing actions in overview\",lines,@vw,@vh\n\t\t// draw recording events\n\t\t// drawLines(ctx,lines[ACTION.RECSTART],'#ff2c42')\n\t\tctx.restore();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.ontouchstart = function (t){\n\t\tlet gesture = ScrimbaGesture.options(t,{data: this.data(),\n\t\tstartValue: this.startValue(),\n\t\tstartTime: this.startTime(),\n\t\tstartOffset: this.startOffset()});\n\t\t\n\t\tlet btn = t.button();\n\t\tlet alt = t.event().altKey;\n\t\tlet meta = t.event().metaKey;\n\t\tlet shift = t.event().shiftKey;\n\t\tlet type = gesture.type;\n\t\t\n\t\tif (!type) {\n\t\t\tif (shift && alt) {\n\t\t\t\ttype = 'mark';\n\t\t\t} else if (btn == 2 || alt) {\n\t\t\t\ttype = 'move';\n\t\t\t} else if (shift) {\n\t\t\t\ttype = 'mark';\n\t\t\t\tgesture.seek = true;\n\t\t\t} else {\n\t\t\t\ttype = 'seek';\n\t\t\t};\n\t\t};\n\t\t\n\t\tthis.log(\"ontouchstart\",btn,alt,meta,shift,type);\n\t\tgesture.type = type;\n\t\treturn ScrimbaGesture.wrap(t,gesture);\n\t};\n\t\n\ttag.prototype.ontouchend = function (t){\n\t\tif (t.dr() < 10) { this.trigger('segsel',null) };\n\t\treturn this.trigger('autosave');\n\t};\n\t\n\ttag.prototype.oncontextmenu = function (e){\n\t\treturn e.prevent().stop();\n\t};\n\t\n\ttag.prototype.onmoveupdate = function (g){\n\t\tlet val = g.options().startValue - (g.dx() / this.ppms()) * 2;\n\t\tthis.trigger('showrange',{start: this.val2offset(val)});\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.onmoveend = function (g){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.onseekstart = function (g){\n\t\t// timeline.cues.dirty # why dirty?\n\t\tthis.timeline().setState('seeking');\n\t\treturn this.render();\n\t};\n\t\n\ttag.prototype.onseekupdate = function (g){\n\t\treturn this.trigger('seek',{offset: this.val2offset(this.screenx2val(g.x()),1)});\n\t};\n\t\n\ttag.prototype.onseekend = function (g){\n\t\tvar v_;\n\t\treturn (this.timeline().setState(v_ = this.timeline().playState()),v_);\n\t};\n\t\n\ttag.prototype.onsegmoveinit = function (g){\n\t\tg.touch().capture();\n\t\tlet seg = g.handler().data();\n\t\treturn this.trigger('segsel',seg);\n\t};\n\t\n\ttag.prototype.onsegmovestart = function (g){\n\t\tlet seg = g.handler().data();\n\t\tlet val = g.options().start ? seg.start() : seg.end();\n\t\treturn g._adjustOffset = this.xToTimeOffset(g.x(),1) - val;\n\t};\n\t\n\ttag.prototype.onsegmoveupdate = function (g){\n\t\t// log \"onsegmoveupdate\"\n\t\tvar seg;\n\t\tif (seg = g.handler().data()) {\n\t\t\tif (g.options().start) {\n\t\t\t\tseg.setStart(this.xToTimeOffset(g.x(),1) - g._adjustOffset);\n\t\t\t} else {\n\t\t\t\tseg.setEnd(this.xToTimeOffset(g.x(),1) - g._adjustOffset);\n\t\t\t};\n\t\t\tthis.render();\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.onsegmoveend = function (g){\n\t\tlet seg = g.handler().data();\n\t\tif (seg.span() == 0) {\n\t\t\t// log \"should remove segment!\"\n\t\t\tthis.cues().removeCue(seg);\n\t\t\tthis.render();\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.onmarkstart = function (g){\n\t\t// start from \n\t\t\n\t\tlet end = this.xToTimeOffset(g.x(),1);\n\t\tlet start = end;\n\t\t\n\t\tif (g.options().seek) {\n\t\t\tstart = this.timeline().currentOffset();\n\t\t};\n\t\t\n\t\tthis.setMarkedRange(g._seg = new Segment([0,start,(end - start)]));\n\t\tg._seg._pin = start;\n\t\t// g.@seg = cues.addCue([0,xToTimeOffset(g.x),10])\n\t\tthis.trigger('segsel',g._seg);\n\t\treturn this.render();\n\t};\n\t\n\ttag.prototype.onmarkupdate = function (g){\n\t\tlet end = this.xToTimeOffset(g.x(),1);\n\t\tlet pin = g._seg._pin;\n\t\t\n\t\tif (end > pin) {\n\t\t\tg._seg.setStart(pin);\n\t\t\tg._seg.setEnd(end);\n\t\t} else {\n\t\t\tg._seg.setStart(end);\n\t\t\tg._seg.setEnd(pin);\n\t\t};\n\t\t\n\t\tif (g.options().seek) {\n\t\t\tthis.trigger('seek',{offset: end});\n\t\t};\n\t\t// make the seek follow the marker\n\t\treturn this.render();\n\t};\n\t\n\ttag.prototype.onmarkend = function (g){\n\t\tvar self = this, _t1, _t2, t0;\n\t\tself.log('onmarkend');\n\t\tlet seg = g._seg;\n\t\tlet start = seg.start();\n\t\tlet span = seg.span();\n\t\tif (!self._markedView) { return };\n\t\t\n\t\t// find surrounding cue\n\t\tlet wrapper = null;\n\t\tfor (let i = 0, items = iter$(self.cues().cues()), len = items.length, cue; i < len; i++) {\n\t\t\tcue = items[i];\n\t\t\tif (start >= cue.start() && cue.end() >= seg.end()) {\n\t\t\t\twrapper = cue;break;\n\t\t\t};\n\t\t};\n\t\t\n\t\tlet cancel = function(e) {\n\t\t\t// log \"didhide!\"\n\t\t\tvar v_;\n\t\t\treturn (self.setMarkedRange(null),null);\n\t\t};\n\t\t\n\t\treturn self._markedView.uxa().open((t0 = (t0=_2(Menu))).on$(0,['uxahide',cancel],self).setContent(\n\t\t\twrapper ? (\n\t\t\t\t(t0.$.A || _2(MenuItem,t0.$,'A',t0).setLabel('Set speedup audio')).on$(0,['activate',['setCueAudio',wrapper,start,span]],self).end()\n\t\t\t) : Imba.static([\n\t\t\t\t(t0.$.B || _2(MenuItem,t0.$,'B',t0).setLabel('Cut')).setAction(['segcreate',0,start,span,0]).end(),\n\t\t\t\t(t0.$.C || _2(MenuItem,t0.$,'C',t0).setLabel('Silence')).setAction(['segcreate',0,start,span,-1]).end(),\n\t\t\t\t(t0.$.D || _2(MenuItem,t0.$,'D',t0).setLabel('Speedup')).setAction(['segcreate',0,start,span,500]).end(),\n\t\t\t\t(t0.$.E || _2(MenuItem,t0.$,'E',t0).setLabel('Loop playback')).setAction(['loopcreate',2,start,span]).end()\n\t\t\t],2,1)\n\t\t,3).end());\n\t};\n\t\n\ttag.prototype.setCueAudio = function (cue,start,span){\n\t\tthis.log(\"setCueAudio\",cue,start,span);\n\t\tif (cue.duration() > 0) {\n\t\t\tcue.setDuration(span);\n\t\t\tcue.setOptions([start,span]); // and more no?\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.onsegcreate = function (e,params){\n\t\te.halt();\n\t\tthis.log('segcreate',params);\n\t\tlet seg = this.cues().addCue(params);\n\t\tthis.trigger('segsel',seg);\n\t\tthis.setMarkedRange(null);\n\t\treturn this.render();\n\t};\n\t\n\ttag.prototype.onloopcreate = function (e,params){\n\t\tthis.timeline().setLoopSegment(new Segment(params,this.timeline().cues()));\n\t\tthis.setMarkedRange(null);\n\t\treturn this.render();\n\t};\n\t\n\ttag.prototype.tick = function (){\n\t\treturn this.draw();\n\t};\n\t\n\ttag.prototype.mount = function (){\n\t\tthis._mounted = true;\n\t\tTC = this;\n\t\tthis.render();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, self = this, $ = this.$, _t2;\n\t\tif (!self._mounted) { return };\n\t\tself.draw();\n\t\t\n\t\tlet startOffset = self.startOffset();\n\t\tlet startTime = self.startTime();\n\t\tlet endTime = startTime + (self._vw / self.ppms());\n\t\tlet endOffset = self.val2offset(self.startValue() + (self._vw / self.ppms()));\n\t\t\n\t\tself.$open(0).flagIf('collapsed',(!(self.isOffsetBased()))).setChildren([\n\t\t\tself.canvas(),\n\t\t\t(function tagLoop($0) {\n\t\t\t\tvar _t2, $$ = $0.$iter();\n\t\t\t\tfor (let i = 0, items = iter$(self.timeline().cues().cues()), len = items.length, seg; i < len; i++) {\n\t\t\t\t\tseg = items[i];\n\t\t\t\t\tif (seg.end() < startOffset || seg.start() > endOffset) { continue; };\n\t\t\t\t\t$$.push(($0[i] || _2(SegmentView,$0,i)).setData(seg).setTimeline(self).end());\n\t\t\t\t};return $$;\n\t\t\t})($[0] || _3($,0)),\n\t\t\tself.timeline().loopSegment() ? (\n\t\t\t\t($[1] || _2(SegmentView,$,1,self).flag('loop')).bindData(self.timeline(),'loopSegment',[]).setTimeline(self).end()\n\t\t\t) : void(0),\n\t\t\tself.markedRange() ? (\n\t\t\t\t(self._markedView = self._markedView||_2(SegmentView,self).flag('markedView').flag('sel')).bindData(self,'markedRange',[]).setTimeline(self).end()\n\t\t\t) : void(0),\n\t\t\t\n\t\t\t(self._playhead = self._playhead||_2(OffsetView,self).flag('playhead')).setLeft(round(self.offset2px(self.currentOffset()),2)).end()\n\t\t],1).synced();\n\t\treturn self;\n\t};\n})\nexports.TimelineCanvas = TimelineCanvas;\n\n\nvar TimelineRegionCanvas = _1.defineTag('TimelineRegionCanvas', TimelineCanvas, function(tag){\n\t\n\ttag.prototype.onwheel = function (e){\n\t\tlet shift = e.event().shiftKey;\n\t\tlet alt = e.event().altKey;\n\t\tlet dx = e.event().deltaX;\n\t\tlet dy = e.event().deltaY;\n\t\tif (this._wheelStartTime == null) {\n\t\t\tthis._wheelStartTime = this.startValue();\n\t\t};\n\t\t// log 'onwheel',e.event:deltaX\n\t\t// let offset = startTime + (e.event:deltaX / ppms)\n\t\t\n\t\te.prevent();\n\t\te.silence();\n\t\t\n\t\tif (shift) {\n\t\t\tlet x = e.event().clientX;\n\t\t\tlet zoom = Math.max(10,this.pxps() + dx);\n\t\t\t// supply anchor and value ourselves\n\t\t\tlet box = this.dom().getBoundingClientRect();\n\t\t\tlet relX = (x - box.left);\n\t\t\t\n\t\t\tlet anchor = relX / (box.width);\n\t\t\tlet val = this.val2offset(this.screenx2val(x));\n\t\t\tlet time = this.xToTimeOffset(x);\n\t\t\t// now find out the pixel-position for the offset\n\t\t\t// if it has changed -- find out the offset for newpxpos - oldpxpos\n\t\t\tthis.trigger('zoom',{scale: zoom});\n\t\t\tthis.setPxps(this.parent().pxps());\n\t\t\tthis.setCurrentOffset(this.parent().viewRange().start());\n\t\t\tlet newPxValue = this.offset2px(val);\n\t\t\tlet moved = newPxValue - relX;\n\t\t\t// console.log \"after zoom\",newPxValue,relX,pxps,moved\n\t\t\tlet newStart = this.px2val(moved);\n\t\t\treturn this.parent().viewRange().moveTo(this.val2offset(newStart),0);\n\t\t} else {\n\t\t\tthis._wheelStartTime += (e.event().deltaX / this.ppms());\n\t\t\tthis._wheelStartTime = Math.max(this._wheelStartTime,-100 / this.ppms());\n\t\t\t\n\t\t\t// console.log \"seekTo\",@wheelStartTime,e.event\n\t\t\treturn this.trigger('showrange',{start: this.val2offset(Math.round(this._wheelStartTime))});\n\t\t};\n\t};\n})\nexports.TimelineRegionCanvas = TimelineRegionCanvas;\n\n\nvar TimelineOverview = _1.defineTag('TimelineOverview', TimelineCanvas, function(tag){\n\t\n\ttag.prototype.viewRange = function(v){ return this._viewRange; }\n\ttag.prototype.setViewRange = function(v){ this._viewRange = v; return this; };\n\t\n\ttag.prototype.draw = function (){\n\t\t// skip drawing while touching\n\t\tif (len$(ScrimbaGesture.Active) > 0) {\n\t\t\treturn;\n\t\t};\n\t\t\n\t\tthis.setStartOffset(0);\n\t\tlet end = this.offset2val(this.timeline().endOffset());\n\t\tlet pad = 4;\n\t\tthis.setPxps((this.dom().offsetWidth - (pad * 2)) / (end / 1000));\n\t\tthis.setStartOffset((pad / this.ppms()) * -1);\n\t\treturn tag.prototype.__super__.draw.apply(this,arguments);\n\t};\n\t\n\ttag.prototype.onwheel = function (){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.getActions = function (){\n\t\tif (this._lines) { return this._lines };\n\t\treturn tag.prototype.__super__.getActions.apply(this,arguments);\n\t};\n\t\n\ttag.prototype.canvas = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn (this._canvas = this._canvas||_2('canvas',this).flag('canvas').dataset('gesture','seek')).end();\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\tif (!this._mounted) { return };\n\t\tthis.draw();\n\t\t\n\t\treturn this.$open(0).setChildren([\n\t\t\t$[0] || _2(RangeView,$,0,this).flag('zoomed').flag('bg'),\n\t\t\tthis.canvas(),\n\t\t\t$[1] || _2(RangeView,$,1,this).flag('zoomed').flag('front'),\n\t\t\tthis._playhead = this._playhead||_2(OffsetView,this).flag('playhead')\n\t\t],1).synced((\n\t\t\t$[0].bindData(this,'viewRange',[]).setTimeline(this).end(),\n\t\t\t$[1].bindData(this,'viewRange',[]).setTimeline(this).end(),\n\t\t\tthis._playhead.setLeft(round(this.offset2px(this.currentOffset()),2)).end()\n\t\t,true));\n\t};\n\t\n\ttag.prototype.showCues = function (){\n\t\treturn false;\n\t};\n\t\n\ttag.prototype.yScale = function (){\n\t\treturn 0.6;\n\t};\n})\nexports.TimelineOverview = TimelineOverview;\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nvar Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\n\nvar util = require('../util');\n\nvar InterfaceView = require('./InterfaceView').InterfaceView;\nvar TimelineCues$ = require('../util/TimelineCues'), TimelineCues = TimelineCues$.TimelineCues, Segment = TimelineCues$.Segment;\nvar ScrimbaGesture = require('../util/ScrimbaGesture').ScrimbaGesture;\nvar WindowGesture = require('../util/WindowGesture').WindowGesture;\n\n// import TimelineOverview,TimelineRegionCanvas from '../../../test/brushup/TimelineCanvas'\nvar TimelineCanvas$ = require('./TimelineCanvas'), TimelineOverview = TimelineCanvas$.TimelineOverview, TimelineRegionCanvas = TimelineCanvas$.TimelineRegionCanvas;\nvar uxa1$ = require('uxa1'), Button = uxa1$.Button, IconButton = uxa1$.IconButton;\n\nvar Mousetrap = require('../util/mousetrap');\n\nvar WavesOptions = {\n\tclipColors: ['#977f9e','#7f939e','#7f9e89','#9e8a7f','#9e7f85'],\n\tcutColor: '#e4e3e3',\n\tbgColor: '#f0f1f1',\n\tactionsHeight: 4,\n\twaveAnchorY: 0.5,\n\t// renderOffsetTicks: yes\n\trenderTimeTicks: true,\n\trenderCollapsed: true,\n\tlog: true\n};\n\nvar OverviewOptions = {\n\tclipColors: ['#BF94CA'], // ,'#7f939e','#7f9e89','#9e8a7f','#9e7f85'\n\tcutColor: '#D6D6D6',\n\tbgColor: '#ffffff',\n\tactionsHeight: 2,\n\ttickFontSize: 8,\n\twaveAnchorY: 0.5,\n\trenderCollapsed: true,\n\tminimap: true\n};\n\n\nvar BrushupView = _2.defineTag('BrushupView', InterfaceView, function(tag){\n\t\n\ttag.prototype.__pxps = {'default': 60,watch: 'pxpsDidSet',name: 'pxps'};\n\ttag.prototype.pxps = function(v){ return this._pxps; }\n\ttag.prototype.setPxps = function(v){\n\t\tvar a = this.pxps();\n\t\tif(v != a) { this._pxps = v; }\n\t\tif(v != a) { this.pxpsDidSet && this.pxpsDidSet(v,a,this.__pxps) }\n\t\treturn this;\n\t}\n\ttag.prototype._pxps = 60;\n\ttag.prototype.__currentSegment = {watch: 'currentSegmentDidSet',name: 'currentSegment'};\n\ttag.prototype.currentSegment = function(v){ return this._currentSegment; }\n\ttag.prototype.setCurrentSegment = function(v){\n\t\tvar a = this.currentSegment();\n\t\tif(v != a) { this._currentSegment = v; }\n\t\tif(v != a) { this.currentSegmentDidSet && this.currentSegmentDidSet(v,a,this.__currentSegment) }\n\t\treturn this;\n\t};\n\ttag.prototype.__showCollapsed = {'default': true,watch: 'showCollapsedDidSet',name: 'showCollapsed'};\n\ttag.prototype.showCollapsed = function(v){ return this._showCollapsed; }\n\ttag.prototype.setShowCollapsed = function(v){\n\t\tvar a = this.showCollapsed();\n\t\tif(v != a) { this._showCollapsed = v; }\n\t\tif(v != a) { this.showCollapsedDidSet && this.showCollapsedDidSet(v,a,this.__showCollapsed) }\n\t\treturn this;\n\t}\n\ttag.prototype._showCollapsed = true;\n\ttag.prototype.viewRange = function(v){ return this._viewRange; }\n\ttag.prototype.setViewRange = function(v){ this._viewRange = v; return this; };\n\t\n\ttag.prototype.timeline = function (){\n\t\treturn this.data().timeline();\n\t};\n\t\n\ttag.prototype.branch = function (){\n\t\treturn this.data().branch();\n\t};\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.data().space();\n\t};\n\t\n\ttag.prototype.hide = function (){\n\t\treturn this.unflag('on');\n\t};\n\t\n\ttag.prototype.show = function (){\n\t\treturn this.flag('on');\n\t};\n\t\n\ttag.prototype.recording = function (){\n\t\treturn this.data().recording();\n\t};\n\t\n\ttag.prototype.shouldHide = function (){\n\t\treturn false;\n\t};\n\t\n\ttag.prototype.ondblclick = function (e){\n\t\treturn e.halt();\n\t};\n\t\n\ttag.prototype.dispose = function (){\n\t\tvar self = this;\n\t\tself.unschedule();\n\t\tself.render = function() { return self; };\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.version = function (){\n\t\treturn this._version;\n\t};\n\t\n\ttag.prototype.trim = function (){\n\t\tvar absTime = this.data().branch().currentOffset();\n\t\tvar relTime = this.data().timeline().currentTime();\n\t\t\n\t\tif (window.confirm((\"Are you sure you want to remove everything after \" + util.msToStr(relTime) + \"? This action cannot be undone\"))) {\n\t\t\treturn this.data().branch().trimToTimeOffset(absTime);\n\t\t};\n\t};\n\t\n\ttag.prototype.currentOffset = function (){\n\t\treturn this.timeline().currentOffset();\n\t};\n\t\n\ttag.prototype.cues = function (){\n\t\treturn this.timeline().cues();\n\t};\n\t\n\ttag.prototype.setup = function (){\n\t\tvar self = this;\n\t\tself.dom().tabIndex = -1;\n\t\tself._version = 0;\n\t\tself._zoomLevels = [12,30,60,120,180,240];\n\t\tself._width = 1000;\n\t\tself._viewRange = new Segment([0,0,(self._width / self.pxps()) * 1000],self);\n\t\tself.onplaying = self.onplaying.bind(self);\n\t\tself.onpaused = self.onpaused.bind(self);\n\t\t// @viewRange = [0,0,(@width / pxps) * 1000]\n\t\t\n\t\tself._shortcuts = new Mousetrap(self.dom());\n\t\tself._shortcuts.bind(['space'],function(e) {\n\t\t\te.stopPropagation();\n\t\t\treturn self.togglePlay();\n\t\t});\n\t\t\n\t\tself._shortcuts.bind(['backspace'],function(e) {\n\t\t\te.stopPropagation();\n\t\t\tif (self.currentSegment()) {\n\t\t\t\treturn self.trigger('segdel',self.currentSegment());\n\t\t\t};\n\t\t});\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.syncViewRange = function (viewRange){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.playheadIsInView = function (){\n\t\treturn this.offsetIsInView(this.currentOffset());\n\t};\n\t\n\ttag.prototype.offsetIsInView = function (offset,pad){\n\t\tif(pad === undefined) pad = 0;\n\t\tlet px = this._zoomed.offset2px(offset);\n\t\treturn px >= 0 && (this._zoomed.vw() - pad) >= px;\n\t\t// offset >= viewRange.start and viewRange.end >= offset\n\t};\n\t\n\ttag.prototype.togglePlay = function (){\n\t\t\n\t\tif (this.timeline().isPlaying()) {\n\t\t\tthis.timeline().pause();\n\t\t\tthis._autoFollowPlayhead = false;\n\t\t} else {\n\t\t\tthis.timeline().play();\n\t\t\tthis._autoFollowPlayhead = this.playheadIsInView();\n\t\t};\n\t\treturn this;\n\t};\n\t\n\t\n\t// EVENTS\n\ttag.prototype.currentSegmentDidSet = function (curr,prev){\n\t\tif (curr) {\n\t\t\t// curr.disabled = yes\n\t\t\tcurr._selected = true;\n\t\t};\n\t\tif (prev) {\n\t\t\t// prev.disabled = no\n\t\t\treturn prev._selected = false;\n\t\t};\n\t\t// cues.dirty # why dirty?\n\t};\n\t\n\ttag.prototype.pxpsDidSet = function (curr,prev){\n\t\tlet anchor = this.viewRange().anchor(0.5);\n\t\tthis.viewRange().setSpan(Math.round((this.dom().offsetWidth / this.pxps()) * 1000));\n\t\treturn this.viewRange().moveTo(anchor,0.5);\n\t};\n\t\n\ttag.prototype.onchange = function (e){\n\t\tvar value_;\n\t\te.halt();\n\t\treturn (this.setPxps(this._zoomLevels[value_ = e.target().value()]),this._zoomLevels[value_]);\n\t\t// viewRange.span = Math.round((dom:offsetWidth / pxps) * 1000)\n\t\t// render\n\t};\n\t\n\ttag.prototype.onshowrange = function (e,data){\n\t\te.halt();\n\t\tif (data.start) {\n\t\t\t// let start = Math.max(data:start,0)\n\t\t\tthis.viewRange().moveTo(data.start,0);\n\t\t\tthis._autoFollowPlayhead = false;\n\t\t};\n\t\treturn this.dirty();\n\t};\n\t\n\ttag.prototype.onzoom = function (e,data){\n\t\t// log \"onzoom\",data\n\t\tlet anchor = 0;\n\t\tlet change = data.scale / this.pxps();\n\t\tif (data.anchorTime) {\n\t\t\tanchor = (data.anchorTime - this.viewRange().start()) / this.viewRange().span();\n\t\t};\n\t\t\n\t\tthis.setPxps(Math.round(Math.max(10,data.scale)));\n\t\t\n\t\tif (data.anchorTime) {\n\t\t\tthis.viewRange().moveTo(Math.round(data.anchorTime),anchor);\n\t\t};\n\t\treturn this.dirty();\n\t};\n\t\n\ttag.prototype.onseek = function (e,data){\n\t\te.halt();\n\t\tlet offset = data.offset;\n\t\tthis.timeline().seek(offset);\n\t\t\n\t\tif (this.timeline().loopSegment() && !this.timeline().loopSegment().contains(offset)) {\n\t\t\tthis.timeline().setLoopSegment(null);\n\t\t};\n\t\t\n\t\tif (e.target() == this._overview) {\n\t\t\t// center afterwards\n\t\t\t// now update center based on px2val\n\t\t\tthis._zoomed.setStartOffset(offset);\n\t\t\tlet newOffset = this._zoomed.val2offset(this._zoomed.px2val(this._zoomed.vw() * -0.5));\n\t\t\treturn this.viewRange().moveTo(Math.max(newOffset,0),0);\n\t\t};\n\t};\n\t\n\ttag.prototype.onsegsel = function (e,data){\n\t\te.halt();\n\t\treturn (this.setCurrentSegment(data),data);\n\t};\n\t\n\ttag.prototype.onsegdel = function (e,data){\n\t\tvar v_;\n\t\tif (data == this.currentSegment()) {\n\t\t\tthis.setCurrentSegment(null);\n\t\t};\n\t\t\n\t\tthis.cues().removeCue(data);\n\t\tthis.trigger('autosave');\n\t\t\n\t\tif (data == this.timeline().loopSegment()) {\n\t\t\tthis.timeline().setLoopSegment(null);\n\t\t};\n\t\t\n\t\tif (data == this._zoomed.markedRange()) {\n\t\t\treturn (this._zoomed.setMarkedRange(null),null);\n\t\t};\n\t};\n\t\n\ttag.prototype.onfinish = function (e){\n\t\te.halt();\n\t\treturn this.timeline().space().view().trigger('brushupstop');\n\t};\n\t\n\ttag.prototype.onplaying = function (e){\n\t\treturn this._autoFollowPlayhead = this.playheadIsInView();\n\t};\n\t\n\ttag.prototype.onpaused = function (e){\n\t\treturn this._autoFollowPlayhead = false;\n\t};\n\t\n\ttag.prototype.dirty = function (){\n\t\treturn this._version++;\n\t};\n\t\n\ttag.prototype.mount = function (){\n\t\tthis._prevSpaceSize = this.space().view().size();\n\t\tthis._savedVersion = this.cues()._version;\n\t\tthis._savedCueData = JSON.stringify(this.cues()._data);\n\t\t\n\t\tthis.schedule({raf: true,events: false});\n\t\tthis.space().on('playing',this.onplaying);\n\t\treturn this.space().on('paused',this.onpaused);\n\t\t\n\t\t// if space.view.size == 'auto'\n\t\t//\tspace.view.size = 'desktop'\n\t\t//\t\n\t\t// @autoSave\n\t\t// bind to onplaying\n\t};\n\t\n\ttag.prototype.unmount = function (){\n\t\tthis.unschedule();\n\t\tif (this.space().view().size() == 'desktop') {\n\t\t\tthis.space().view().setSize(this._prevSpaceSize);\n\t\t};\n\t\t\n\t\tthis.space().un('playing',this.onplaying);\n\t\treturn this.space().un('paused',this.onpaused);\n\t};\n\t\n\ttag.prototype.onautosave = function (e){\n\t\treturn this.autosave();\n\t};\n\t\n\ttag.prototype.autosave = function (){\n\t\tvar self = this;\n\t\tif (self._savedVersion != self.cues()._version) {\n\t\t\tclearTimeout(self._autosaver);\n\t\t\t// console.log \"should autosave\", cues.@version,Imba.Touch.count\n\t\t\tself._savedVersion = self.cues()._version;\n\t\t\treturn self._autosaver = setTimeout(function() { return self.save(); },1000);\n\t\t\t// if JSON.stringify(draft) != @frozenDraft\n\t\t\t// save(draft: @draft)\n\t\t};\n\t};\n\t\n\ttag.prototype.model = function (){\n\t\treturn this.timeline().branch().model();\n\t};\n\t\n\ttag.prototype.branch = function (){\n\t\treturn this.timeline().branch();\n\t};\n\ttag.prototype.save = function (){\n\t\tif (JSON.stringify(this.cues()._data) != this._savedCueData) {\n\t\t\tthis._savedCueData = JSON.stringify(this.cues()._data);\n\t\t\tconsole.log(\"saving\");\n\t\t\t// await model.update(draft: cues.@data)\n\t\t\t// timeline.branch.model.save(draft: cues.@data)\n\t\t\t// model.\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.ontouchstart = function (t){\n\t\tif (!this.hasFlag('abs')) { return };\n\t\t\n\t\tlet o = WindowGesture.options(t);\n\t\tif (o.type == 'move') {\n\t\t\treturn WindowGesture.wrap(t,o);\n\t\t} else if (o.type == 'resize') {\n\t\t\treturn WindowGesture.wrap(t,o);\n\t\t};\n\t};\n\t\n\ttag.prototype.ontouchend = function (t){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.toggleCollapsed = function (){\n\t\tthis.setShowCollapsed(!(this.showCollapsed()));\n\t\tWavesOptions.renderCollapsed = !WavesOptions.renderCollapsed;\n\t\tOverviewOptions.renderCollapsed = !OverviewOptions.renderCollapsed;\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.cancelBrushup = async function (){\n\t\tawait this.branch().cancelAnnotating();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.finishBrushup = async function (){\n\t\tawait this.branch().finishAnnotating();\n\t\treturn console.log('did save!!');\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, _t4, t0;\n\t\tthis._viewRange.setSpan(Math.round(this.dom().offsetWidth * 1000 / this.pxps()));\n\t\tlet duration = this.cues().endOffset();\n\t\tlet now = this.currentOffset(); // timeline.timeToOffset(timeline.currentTime) # currentOffset\n\t\t\n\t\tif (Imba.Touch.count() == 0 && ScrimbaGesture.Active.length == 0) {\n\t\t\tthis.autosave();\n\t\t};\n\t\t\n\t\tif (this._zoomed && this._autoFollowPlayhead && this.timeline().isPlaying()) {\n\t\t\tlet seg = this.timeline().loopSegment();\n\t\t\tif (seg) {\n\t\t\t\tif (now > seg.end()) { this.timeline().seek(now = seg.start()) };\n\t\t\t} else if (len$(ScrimbaGesture.Active) == 0) {\n\t\t\t\tlet tx = this._zoomed.offset2px(now);\n\t\t\t\tif (tx < 10 || tx > (this._zoomed.vw() - 10)) {\n\t\t\t\t\tlet newOffset = this._zoomed.val2offset(this._zoomed.px2val(tx - 20));\n\t\t\t\t\tthis.viewRange().moveTo(newOffset,0);\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t\t\n\t\tthis._prevOffset = now;\n\t\t\n\t\treturn this.$open(0).setChildren($.$ = $.$ || [\n\t\t\t_1('header',$,0,this).dataset('gesture','move,noTranslate').setContent([\n\t\t\t\t_1('div',$,1,0).flag('title'),\n\t\t\t\t_1('div',$,7,0).flag('buttons').setContent([\n\t\t\t\t\t_1('div',$,8,7).flag('button').flag('red').on$(0,['click','stop','cancelBrushup'],this).setText(\"Cancel\"),\n\t\t\t\t\t_1('div',$,9,7).flag('button').flag('green').on$(0,['click','stop','finishBrushup'],this).setText(\"Done\")\n\t\t\t\t],2),\n\t\t\t\t_1('div',$,10,0).flag('resizer').dataset('gesture','resize,r')\n\t\t\t],2),\n\t\t\t\n\t\t\t// <input.zoom type=\"range\" min=0 max=(@zoomLevels.len - 1) step=1>\n\t\t\tthis._zoomed = this._zoomed||_1(TimelineRegionCanvas,this).flag('zoomed'),\n\t\t\tt0 = (t0=_1('footer',$,11,this)).setContent(\n\t\t\t\tthis._overview = this._overview||_1(TimelineOverview,t0).flag('overview')\n\t\t\t,2)\n\t\t],2).synced((\n\t\t\t$[0].end((\n\t\t\t\t$[1].setContent([\n\t\t\t\t\t($[2] || _1('span',$,2,1).flag('hint').setNestedAttr('uxa','md',\"*space* to play/pause\")).end(),\n\t\t\t\t\t($[3] || _1('span',$,3,1).flag('hint').setNestedAttr('uxa','md',\"*shift* to mark range\")).end(),\n\t\t\t\t\t($[4] || _1('span',$,4,1).flag('hint').setNestedAttr('uxa','md',\"*alt* to pan\")).end(),\n\t\t\t\t\tthis.currentSegment() ? (\n\t\t\t\t\t\t($[5] || _1('span',$,5,1).flag('hint').setNestedAttr('uxa','md',\"*\u232B* to remove segment\")).end()\n\t\t\t\t\t) : void(0),\n\t\t\t\t\t($[6] || _1('span',$,6,1).flag('hint').on$(0,['tap','toggleCollapsed'],this).setNestedAttr('uxa','md',\"*toggle* collapsed\")).end()\n\t\t\t\t],1),\n\t\t\t\t$[10].end()\n\t\t\t,true)),\n\t\t\tthis._zoomed.bindData(this,'timeline',[]).setStartOffset((this.viewRange().start())).setPxps(this.pxps()).setCurrentOffset(now).setOptions(WavesOptions).end(),\n\t\t\tthis._overview.bindData(this,'timeline',[]).setViewRange(this.viewRange()).setCurrentOffset(now).setOptions(OverviewOptions).end()\n\t\t,true));\n\t};\n})\nexports.BrushupView = BrushupView;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar Notification = _2.defineTag('Notification', function(tag){\n\t\n\tvar current;\n\ttag.prototype.text = function(v){ return this._text; }\n\ttag.prototype.setText = function(v){ this._text = v; return this; };\n\ttag.prototype.sticky = function(v){ return this._sticky; }\n\ttag.prototype.setSticky = function(v){ this._sticky = v; return this; };\n\t\n\ttag.show = function (content,options){\n\t\tvar _t1;\n\t\tif(options === undefined) options = {};\n\t\tif (current) {\n\t\t\tcurrent.hide();\n\t\t\tcurrent = null;\n\t\t};\n\t\tlet node = (content instanceof Notification) ? content : (((_1(Notification)).setData(options).setText(content).setSticky((options.sticky)).end()));\n\t\tlet parent = document.querySelector('.SpaceView');\n\t\treturn Imba.mount(current = node,parent);\n\t};\n\t\n\ttag.prototype.setup = function (){\n\t\tthis._data || (this._data = {});\n\t\tthis.render();\n\t\treturn this.autosize();\n\t};\n\t\n\ttag.prototype.mount = function (){\n\t\tvar self = this;\n\t\tself.dom().offsetWidth;\n\t\tself.flag('show');\n\t\tif (!(self.sticky())) {\n\t\t\treturn setTimeout(function() { return self.hide(); },self.data().duration || 2000);\n\t\t};\n\t};\n\t\n\ttag.prototype.autosize = function (){\n\t\tvar Math_;\n\t\tlet txt = this.dom().innerText;\n\t\tlet lines = txt.split(\"\\n\");\n\t\tlet longest = Math.max.apply(Math,lines.map(function(l) { return l.length; }));\n\t\tlet maxWidth = window.innerWidth * 0.8; // container:offsetWidth * 0.8\n\t\t// fontSize to fill\n\t\tlet maxFont = maxWidth / (longest * 0.6);\n\t\t// console.log \"autosize?\",txt,longest,maxFont\n\t\tlet fontSize = Math.round(Math.min(Math.max(maxFont,15),30));\n\t\tthis.css('fontSize',fontSize + 'px');\n\t\tthis.flag('overflows',maxFont < 15);\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.hide = function (){\n\t\tvar self = this;\n\t\tif (self.hasFlag('hide')) { return };\n\t\tself.flag('hide');\n\t\treturn setTimeout(function() {\n\t\t\tself.orphanize();\n\t\t\tif (current == self) { return current = null };\n\t\t},3000);\n\t};\n\t\n\ttag.prototype.ontap = function (){\n\t\treturn this.hide();\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3;\n\t\treturn this.$open(0).flagIf('info',this.data().info).setFlag(-1,this.data().type).setFlag(-2,this.data().size).setChildren(\n\t\t\t$[0] || _1('div',$,0,this).flag('main').setContent([\n\t\t\t\t_1('div',$,1,0).flag('triangle'),\n\t\t\t\t_1('div',$,2,0).flag('item')\n\t\t\t],2)\n\t\t,2).synced((\n\t\t\t$[2].setNestedAttr('uxa','md',this.text()).end()\n\t\t,true));\n\t};\n})\nexports.Notification = Notification;\n\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar uxa1$ = require('uxa1'), Dialog = uxa1$.Dialog, TextField = uxa1$.TextField;\n\nvar desc = 'You can assign specific version with \"@\", ex. \"react@0.14.7\" or \"react@next\"';\n\nvar DependencyAddDialog = _2.defineTag('DependencyAddDialog', Dialog, function(tag){\n\t\n\ttag.prototype.mount = function (){\n\t\tthis.schedule({events: true});\n\t\treturn this._packageName.input().dom().focus();\n\t};\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.submitLabel = function (){\n\t\treturn \"Add\";\n\t};\n\t\n\ttag.prototype.bundle = function (){\n\t\treturn this.space().browser().npmPackages() || {resolved: []};\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._body = this._body||(t0=_1('div',this)).flag('body').setContent([\n\t\t\t_1('h4',t0.$,'A',t0).setText(\"Add NPM package\"),\n\t\t\tthis._packageName = this._packageName||_1(TextField,t0).flag('packageName').setLabel(\"Package name\").setName('query').setPlaceholder('Submit name of package...').setAutocomplete(\"off\")\n\t\t],2)).end((\n\t\t\tthis._packageName.setDesc(desc).end()\n\t\t,true));\n\t};\n\t\n\t\n\ttag.prototype.onuxasubmit = function (e,pars){\n\t\tvar self = this;\n\t\te.prevent().halt();\n\t\tif (!pars.query) {\n\t\t\treturn;\n\t\t};\n\t\t\n\t\treturn self.uxa().queue().add(300,async function() {\n\t\t\tawait self.space().browser().addPackage(pars.query);\n\t\t\treturn self.hide();\n\t\t});\n\t};\n})\nexports.DependencyAddDialog = DependencyAddDialog;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar uxa1$ = require('uxa1'), Dialog = uxa1$.Dialog, TextField = uxa1$.TextField, TextArea = uxa1$.TextArea, Button = uxa1$.Button;\n\nvar CastDialog = _2.defineTag('CastDialog', Dialog, function(tag){\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._body = this._body||(t0=_1('div',this)).flag('body').setContent([\n\t\t\t_1(TextField,t0.$,'A',t0).setType('text').setName('title').setLabel('Title').setRequired(true).setPlaceholder('Untitled cast').setAutocomplete(\"off\"),\n\t\t\t_1(TextArea,t0.$,'B',t0).flag('mb-md').setName('description').setLabel('Description').setDesc('Short description (markdown supported)')\n\t\t// <PrivacyField[data]> # are we sure?\n\t\t],2)).end((\n\t\t\tt0.$.A.end(),\n\t\t\tt0.$.B.end()\n\t\t,true));\n\t};\n\t\n\ttag.prototype.onuxasubmit = function (e){\n\t\tvar self = this;\n\t\treturn self.uxa().queue().add(200,async function() {\n\t\t\tvar vals = self.formData();\n\t\t\tself.log('onsubmit',vals);\n\t\t\t// WARN must validate which fields one can update?\n\t\t\treturn await self.api().db().get(self.data().id).update(vals);\n\t\t});\n\t};\n})\nexports.CastDialog = CastDialog;\n", "var self = {};\n// Provides Promise-based functions around FileReader\n\nexports.readTextFile = self.readTextFile = function (file){\n\treturn new Promise(function(resolve,reject) {\n\t\tvar reader = new FileReader();\n\t\treader.onload = function(e) {\n\t\t\treturn resolve(e.target.result);\n\t\t};\n\t\treturn reader.readAsText(file);\n\t});\n};\n\nexports.readArrayBuffer = self.readArrayBuffer = function (file){\n\treturn new Promise(function(resolve,reject) {\n\t\tvar reader = new FileReader();\n\t\treader.onload = function(e) {\n\t\t\treturn resolve(e.target.result);\n\t\t};\n\t\treturn reader.readAsArrayBuffer(file);\n\t});\n};\n\nexports.readFileSystemEntry = self.readFileSystemEntry = function (entry){\n\treturn new Promise(function(resolve,reject) {\n\t\treturn entry.file(resolve,reject);\n\t});\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\n\nvar uxa1$ = require('uxa1'), Menu = uxa1$.Menu, MenuItem = uxa1$.MenuItem;\n\nvar DependencyAddDialog = require('./DependencyAddDialog').DependencyAddDialog;\nvar CastDialog = require('../legacy/CastDialog').CastDialog;\nvar readTextFile = require('../util/filereader').readTextFile;\n\nvar SpaceMenu = _2.defineTag('SpaceMenu', Menu, function(tag){\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.hide = function (){\n\t\treturn this.trigger('uxa:hide');\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\treturn this.hide();\n\t};\n\t\n\ttag.prototype.newFile = function (e){\n\t\tvar name = window.prompt(\"Name file\");\n\t\tif (name) { return this.space().fs().mkfile(name) };\n\t};\n\t\n\ttag.prototype.newDirectory = function (e){\n\t\tvar name = window.prompt(\"Name directory\");\n\t\tif (name) { return this.space().fs().mkdir(name) };\n\t};\n\t\n\ttag.prototype.addDependency = function (){\n\t\tvar _t1;\n\t\treturn this.uxa().open((_1(DependencyAddDialog)).bindData(this,'space',[]).end());\n\t};\n\t\n\ttag.prototype.importDependenciesFromFile = function (){\n\t\tvar _t1, self = this;\n\t\tvar fileInput = (_1('input').setType(\"file\")).end();\n\t\t\n\t\tfileInput.dom().onchange = async function() {\n\t\t\tfor (let i = 0, items = iter$(fileInput.dom().files), len = items.length, file; i < len; i++) {\n\t\t\t\tfile = items[i];\n\t\t\t\tif (file.name == 'package.json') {\n\t\t\t\t\tvar body = await readTextFile(file);\n\t\t\t\t\tvar parsed = JSON.parse(body);\n\t\t\t\t\t// TODO: show spinner\n\t\t\t\t\tself.space().browser().overwritePackages(parsed.dependencies);\n\t\t\t\t\tself.api().analytics().packageJSONImport(self.space().type());\n\t\t\t\t} else {\n\t\t\t\t\t// uhm?\n\t\t\t\t};\n\t\t\t};\n\t\t\treturn Imba.commit();\n\t\t};\n\t\t\n\t\treturn fileInput.dom().click();\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\tvar canEdit = this.space().model().can(this.api().user(),'edit');\n\t\treturn this.$open(0).flag('space-menu').setChildren([\n\t\t\tcanEdit ? Imba.static([\n\t\t\t\tthis.space().model().isPublished() ? (\n\t\t\t\t\t($[0] || _1(MenuItem,$,0,this).setAction('branchpublish').setLabel(\"Re-publish\")).bindData(this.space(),'trunk',[]).end()\n\t\t\t\t) : void(0),\n\t\t\t\t($[1] || _1('hr',$,1,this))\n\t\t\t],1,1) : void(0),\n\t\t\t($[2] || _1('div',$,2,this).flag('action').on$(0,['tap','newFile'],this).setText(\"New File...\")),\n\t\t\t($[3] || _1('div',$,3,this).flag('action').on$(0,['tap','newDirectory'],this).setText(\"New Folder...\")),\n\t\t\t($[4] || _1('div',$,4,this).flag('action').on$(0,['tap','addDependency'],this).setText(\"Add dependency...\")),\n\t\t\t($[5] || _1('div',$,5,this).flag('action').on$(0,['tap','importDependenciesFromFile'],this).setText(\"Import package.json\")),\n\t\t\t\n\t\t\tcanEdit ? Imba.static([\n\t\t\t\t($[6] || _1('hr',$,6,this)),\n\t\t\t\t($[7] || _1(MenuItem,$,7,this).setAction('importslides').setLabel(\"Import Google Slides\")).end(),\n\t\t\t\tthis.space().slides().url() ? (\n\t\t\t\t\t($[8] || _1(MenuItem,$,8,this).setAction('reimportslides').setLabel(\"Resync with Google Slides\")).end()\n\t\t\t\t) : void(0)\n\t\t\t],1,2) : void(0)\n\t\t// <hr>\n\t\t// <MenuItem action='spacezip' label=\"Download .zip\">\n\t\t// <.action :click.forkScrim> 'Fork scrim'\n\t\t// <MenuItem action='spacefork' label=\"Fork workspace\">\n\t\t// if space.trunk.isMine and space.model.isTutorial\n\t\t//\t<MenuItem action='spaceclone' label=\"Clone cast\">\n\t\t],1).synced();\n\t};\n})\nexports.SpaceMenu = SpaceMenu;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar util = require('../util');\n\nvar MediaRecordingStats = _2.defineTag('MediaRecordingStats', function(tag){\n\t\n\ttag.prototype.s = function (val){\n\t\treturn util.msToStr(val,3) + 's';\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3;\n\t\treturn this.$open(0).setChildren([\n\t\t\t($[0] || _1('span',$,0,this).flag('state')).setContent(this.data().state(),3),\n\t\t\t($[1] || _1('span',$,1,this).flag('mime')).setContent(this.data().mimeType(),3),\n\t\t\t($[2] || _1('span',$,2,this).flag('size')).setContent(Math.round(this.data().size() / 1000) + 'kb',3),\n\t\t\t\n\t\t\t// if data.@blobDuration\n\t\t\t//\t<span.dur.element> s(data.@blobDuration)\n\t\t\t// if data.@timecodeDuration\n\t\t\t//\t<span.dur.timecode> s(data.@timecodeDuration)\n\t\t\tthis.data()._bufferDuration ? (\n\t\t\t\t($[3] || _1('span',$,3,this).flag('dur').flag('timecode')).setContent([\n\t\t\t\t\tthis.s(this.data()._duration),\n\t\t\t\t\t$[4] || _1('b',$,4,3).flag('diff')\n\t\t\t\t],1).end((\n\t\t\t\t\t$[4].setContent(Math.round(this.data()._duration - this.data()._calcDuration) + 'ms',3)\n\t\t\t\t,true))\n\t\t\t) : (\n\t\t\t\t($[5] || _1('span',$,5,this).flag('dur')).setContent(this.s(this.data().duration()),3)\n\t\t\t)\n\t\t],1).synced();\n\t};\n})\nexports.MediaRecordingStats = MediaRecordingStats;\n", "var Imba = require('imba1'), _4 = Imba.createTagList, _2 = Imba.createTagMap, _1 = Imba.createElementFactory(/*SCOPEID*/), _3 = Imba.createTagScope(/*SCOPEID*/);\nvar uxa1$ = require('uxa1'), Dialog = uxa1$.Dialog, SelectField = uxa1$.SelectField, Button = uxa1$.Button;\n\nvar MediaRecording = require('../util/MediaRecording').MediaRecording;\nvar MediaRecordingStats = require('./MediaRecordingStats').MediaRecordingStats;\n\nvar util = require('../util');\n\nvar CONSTRAINTS = [\n\t['noiseSuppression','Noise Suppression'],\n\t['echoCancellation','Echo Cancellation'],\n\t['autoGainControl','Auto-Gain'],\n\t['typingNoiseDetection','Typing Noise Detection']\n];\n\nvar RecDialog = _3.defineTag('RecDialog', Dialog, function(tag){\n\t\n\ttag.prototype.sample = function(v){ return this._sample; }\n\ttag.prototype.setSample = function(v){ this._sample = v; return this; };\n\ttag.prototype.preferences = function(v){ return this._preferences; }\n\ttag.prototype.setPreferences = function(v){ this._preferences = v; return this; };\n\t\n\ttag.prototype.branch = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.branch().space();\n\t};\n\t\n\ttag.prototype.togglePrev = function (e){\n\t\te.target().prev().setChecked(!e.target().prev().checked());\n\t\treturn e.halt();\n\t};\n\t\n\ttag.prototype.isSupported = function (){\n\t\treturn this.space().audio().canRecordAudio(); // and api.ua.isChrome\n\t};\n\t\n\ttag.prototype.devices = function (){\n\t\tvar devices_;\n\t\treturn (devices_ = this.space().audio().devices()).OPTIONS || (devices_.OPTIONS = this.space().audio().devices().map(function(device,i) {\n\t\t\treturn [device.deviceId,device.label || (\"Mic #\" + (i + 1))];\n\t\t}));\n\t};\n\t\n\ttag.prototype.supportedConstraints = function (){\n\t\treturn this._supportedConstraints || (this._supportedConstraints = window.navigator.mediaDevices.getSupportedConstraints());\n\t};\n\t\n\ttag.prototype.constraints = function (){\n\t\tvar supported = this.supportedConstraints();\n\t\tvar options = this.formData();\n\t\t\n\t\tvar constraints = {};\n\t\t\n\t\tconstraints.deviceId = options.audioDeviceId;\n\t\tconstraints.channelCount = 1;\n\t\t\n\t\tfor (let i = 0, len = CONSTRAINTS.length; i < len; i++) {\n\t\t\tlet key = CONSTRAINTS[i][0];\n\t\t\tif (supported[key]) {\n\t\t\t\tconstraints[key] = !(!options[key]);\n\t\t\t};\n\t\t};\n\t\t\n\t\tif (supported.sampleRate) {\n\t\t\tconstraints.sampleRate = 48000;\n\t\t};\n\t\t\n\t\tif (this.api().ua().isChrome()) {\n\t\t\tconstraints.googAutoGainControl = false;\n\t\t\t// constraints:sampleSize = 20\n\t\t};\n\t\t\n\t\t// if @mandatoryFailTest?.checked\n\t\t// \tconstraints:erroneousParameter = true\n\t\t\n\t\treturn constraints;\n\t};\n\t\n\ttag.prototype.startSample = function (){\n\t\tvar self = this;\n\t\tself.setSample(new MediaRecording({constraints: self.constraints(),debug: self.formData().debug}));\n\t\tself.sample().start().then(function() { return true; }).catch(function(e) {\n\t\t\tvar v_;\n\t\t\tself.log(\"sample could not start!!\",e);\n\t\t\tself.uxa().flash(e.message);\n\t\t\treturn (self.setSample(null),null);\n\t\t});\n\t\tself.schedule({raf: true});\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.stopSample = function (){\n\t\treturn this.sample().stop();\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tvar _t1, $ = this.$$ || (this.$$ = {}), _t2, t0, _t3, self = this, _t4, _t5, t1, t2;\n\t\treturn (t0 = self._body = self._body||(t0=_1('div',self)).flag('body')).setContent([\n\t\t\t(t0.$.A || _1('h2',t0.$,'A',t0).flag('red').setText('Record')),\n\t\t\t(t0.$.B || _1('p',t0.$,'B',t0).flag('dim').setStyle(\"margin:0.5rem 0;\").setText('Choose a microphone and click \"CONFIRM\" to start the recording.')).end(),\n\t\t\t(t0.$.C || _1('p',t0.$,'C',t0).flag('info').setText(\"If you make a mistake during your recording, don't worry. You can cut away, silence or speed up parts of your recording afterward. You can also redo the entire recording if you want.\")),\n\t\t\t\n\t\t\tself.isSupported() ? (\n\t\t\t\t(t1 = t0.$.D || (t1=_1('div',t0.$,'D',t0)).flag('mic')).setContent([\n\t\t\t\t\t// <input type='checkbox' name='mic' checked=yes>\n\t\t\t\t\t(self._deviceSelect = self._deviceSelect||_1(SelectField,t1).flag('deviceSelect').flag('device').setLabel(\"Select microphone\").setName('audioDeviceId').setStyle(\"margin-top:1rem;\")).setOptions(self.devices()).end(),\n\t\t\t\t\t// if api.ua.isChrome\n\t\t\t\t\t(t0.$.E || _1('div',t0.$,'E',t1).flag('testing')).setContent([\n\t\t\t\t\t\t(function tagLoop($0) {\n\t\t\t\t\t\t\tvar _t4, _t5, t1, $$ = $0.$iter();\n\t\t\t\t\t\t\tfor (let i = 0, len = CONSTRAINTS.length, item; i < len; i++) {\n\t\t\t\t\t\t\t\titem = CONSTRAINTS[i];\n\t\t\t\t\t\t\t\tif (!self.supportedConstraints()[item[0]]) { continue; };\n\t\t\t\t\t\t\t\t$$.push((t1 = $0[i] || (t1=_1('label',$0,i)).setContent([\n\t\t\t\t\t\t\t\t\t_1('input',t1.$,'A',t1).setType(\"checkbox\"),\n\t\t\t\t\t\t\t\t\t_1('span',t1.$,'B',t1)\n\t\t\t\t\t\t\t\t],2)).end((\n\t\t\t\t\t\t\t\t\tt1.$.A.setName(item[0]).setChecked(!(!self.preferences()[item[0]])).end(),\n\t\t\t\t\t\t\t\t\tt1.$.B.setContent(item[1],3)\n\t\t\t\t\t\t\t\t,true)));\n\t\t\t\t\t\t\t};return $$;\n\t\t\t\t\t\t})(t0.$['F'] || _2(t0.$,'F',t0.$.E)),\n\t\t\t\t\t\t(t0.$.G || _1('label',t0.$,'G','E').setContent([\n\t\t\t\t\t\t\t_1('input',t0.$,'H','G').setType(\"checkbox\").setName('debug').setChecked(false),\n\t\t\t\t\t\t\t_1('span',t0.$,'I','G').setText('debug')\n\t\t\t\t\t\t],2)).end((\n\t\t\t\t\t\t\tt0.$.H.end()\n\t\t\t\t\t\t,true)),\n\t\t\t\t\t\t\n\t\t\t\t\t\t// <input@mandatoryFailTest type=\"checkbox\" name='mandatoryFail'>\n\t\t\t\t\t\t(!(self.sample()) || self.sample().audio()) ? (\n\t\t\t\t\t\t\t(t0.$.J || _1(Button,t0.$,'J','E').flag('sm').flag('primary').flag('testButton').on$(0,['click','startSample'],self).setLabel('Test')).end()\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t(t0.$.K || _1(Button,t0.$,'K','E').flag('sm').flag('primary').flag('testButton').on$(0,['click','stopSample'],self).setLabel('Stop')).end()\n\t\t\t\t\t\t)\n\t\t\t\t\t],1),\n\t\t\t\t\t\n\t\t\t\t\tself.sample() ? Imba.static([\n\t\t\t\t\t\t(t0.$.L || _1(MediaRecordingStats,t0.$,'L',t1).flag('sample')).bindData(self,'sample',[]).end(),\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.sample().error() ? (\n\t\t\t\t\t\t\t(t0.$.M || _1('div',t0.$,'M',t1).flag('sample').flag('error')).setContent((self.sample().error().message || self.sample().error()),3)\n\t\t\t\t\t\t) : void(0),\n\t\t\t\t\t\t\n\t\t\t\t\t\tself.sample().audio() ? (\n\t\t\t\t\t\t\tImba.getTagForDom(self.sample().audio())\n\t\t\t\t\t\t) : void(0)\n\t\t\t\t\t],1,1) : void(0),\n\t\t\t\t\t\n\t\t\t\t\t(self._endOffset != self._currOffset) ? (\n\t\t\t\t\t\t(t0.$.N || _1('div',t0.$,'N',t1).flag('Alert').flag('danger').flag('large').flag('rerecord').setContent(\n\t\t\t\t\t\t\tt2 = t0.$.O || (t2=_1('label',t0.$,'O','N')).setContent([\n\t\t\t\t\t\t\t\tself._recFromOffset = self._recFromOffset||_1('input',t2).flag('recFromOffset').setType(\"checkbox\"),\n\t\t\t\t\t\t\t\t_1('span',t0.$,'P',t2)\n\t\t\t\t\t\t\t],2)\n\t\t\t\t\t\t,2)).end((\n\t\t\t\t\t\t\tself._recFromOffset.end(),\n\t\t\t\t\t\t\tt0.$.P.setNestedAttr('uxa','md',(\"Re-record from current time *(\" + util.msToStr(self._currTime,3) + \")*\")).end()\n\t\t\t\t\t\t,true))\n\t\t\t\t\t) : void(0)\n\t\t\t\t],1)\n\t\t\t) : (\n\t\t\t\t(t0.$.Q || _1('div',t0.$,'Q',t0).flag('Alert').flag('danger').flag('large').setText(\"Recording / streaming is currently only available from Chrome and Firefox.\"))\n\t\t\t)\n\t\t],1);\n\t};\n\t\n\ttag.prototype.onchange = function (e){\n\t\tthis.log(\"onchange\");\n\t\tfor (let i = 0, len = CONSTRAINTS.length, item; i < len; i++) {\n\t\t\titem = CONSTRAINTS[i];\n\t\t\tif (item[0] == e._event.target.name) {\n\t\t\t\tthis.preferences()[e._event.target.name] = !this.preferences()[e._event.target.name];\n\t\t\t};\n\t\t};\n\t\t\n\t\tif (this._recFromOffset && this._recFromOffset.checked()) {\n\t\t\treturn this.space().timeline().seek(this._currOffset);\n\t\t} else {\n\t\t\treturn this.space().timeline().seekToEnd();\n\t\t};\n\t};\n\t\n\ttag.prototype.setup = function (){\n\t\tvar lastSelectedDevice = null;\n\t\ttry {\n\t\t\tthis.setPreferences(JSON.parse(this.api().localStore().get('audioPreferences')) || {lastSelectedDevice: null,\n\t\t\tnoiseSuppression: true,\n\t\t\techoCancellation: true,\n\t\t\tautoGainControl: true,\n\t\t\ttypingNoiseDetection: true});\n\t\t} catch (e) { };\n\t\t\n\t\tthis._currOffset = this.space().timeline().currentOffset();\n\t\tthis._currTime = this.space().timeline().offsetToTime(this._currOffset);\n\t\tthis._endOffset = this.space().timeline().endOffset();\n\t\tthis.log(\"initial offset\",this._currOffset);\n\t\treturn tag.prototype.__super__.setup.apply(this,arguments);\n\t};\n\t\n\ttag.prototype.mount = function (){\n\t\tif (this._recFromOffset) {\n\t\t\tthis._recFromOffset.dom().checked = true;\n\t\t};\n\t\tthis.schedule({events: true,interval: 1000});\n\t\tif (this.preferences().lastSelectedDevice) {\n\t\t\tthis._deviceSelect.setValue(this.preferences().lastSelectedDevice);\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.unmount = function (){\n\t\treturn this.unschedule();\n\t};\n\t\n\ttag.prototype.onuxasubmit = function (e){\n\t\tvar self = this;\n\t\tself.log('onsubmit',self.formData());\n\t\tif (self.sample()) {\n\t\t\tself.sample().stop();\n\t\t};\n\t\t\n\t\t// return self\n\t\tvar params = self.formData();\n\t\t\n\t\tvar options = {\n\t\t\tmic: self.constraints(),\n\t\t\tpointer: true,\n\t\t\tlive: false\n\t\t};\n\t\t\n\t\tself.preferences().lastSelectedDevice = params.audioDeviceId;\n\t\tself.api().localStore().set('audioPreferences',self.preferences());\n\t\t\n\t\tif (self._recFromOffset && self._recFromOffset.checked()) {\n\t\t\toptions.offset = self._currOffset;\n\t\t\tif (!window.confirm((\"Are you sure you want to restart recording from \" + util.msToStr(self._currTime) + \"? This cannot be undone\"))) {\n\t\t\t\treturn e.prevent().stop();\n\t\t\t};\n\t\t};\n\t\t\n\t\treturn self.uxa().queue().add(300,function() {\n\t\t\treturn self.branch().record(options);\n\t\t});\n\t};\n})\nexports.RecDialog = RecDialog;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\n\nvar uxa1$ = require('uxa1'), Dialog = uxa1$.Dialog, TextField = uxa1$.TextField, TextArea = uxa1$.TextArea, Button = uxa1$.Button;\n// import PrivacyField from '../../site/components/PrivacyField'\n\nvar SaveDialog = _2.defineTag('SaveDialog', Dialog, function(tag){\n\t\n\ttag.prototype.branch = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.model = function (){\n\t\treturn this.branch().model();\n\t};\n\t\n\ttag.prototype.toggleBusy = function (){\n\t\treturn this.toggleFlag('busy');\n\t};\n\t\n\ttag.prototype.loadFormData = function (){\n\t\treturn this.applyFormData(this.model());\n\t};\n\t\n\ttag.prototype.submitLabel = function (){\n\t\treturn this.model().isLocal() ? \"Save note\" : \"Save\";\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._body = this._body||(t0=_1('div',this)).flag('body')).setContent(\n\t\t\tthis.model().isLocal() ? Imba.static([\n\t\t\t\t(this._typefield = this._typefield||_1('input',t0).flag('typefield').setType('hidden').setName('type').setValue('note',1)).end(),\n\t\t\t\t(t0.$.A || _1(TextField,t0.$,'A',t0).flag('mb-md').setType('text').setName('title').setLabel('Title').setRequired(true).setPlaceholder('Untitled note')).end()\n\t\t\t\t// <PrivacyField label=\"Privacy\">\n\t\t\t],2,1) : Imba.static([\n\t\t\t\t(t0.$.B || _1(TextField,t0.$,'B',t0).setType('text').setName('title').setLabel('Title').setRequired(true).setPlaceholder('Untitled fork')).end(),\n\t\t\t\t(t0.$.C || _1(TextArea,t0.$,'C',t0).flag('mb-md').setName('description').setLabel('Description').setDesc('Short description (markdown supported)')).end()\n\t\t\t\t// <PrivacyField label=\"Privacy\">\n\t\t\t],2,2)\n\t\t,3);\n\t};\n\t\n\ttag.prototype.onuxasubmit = function (e,pars){\n\t\tvar self = this;\n\t\treturn self.uxa().queue().add(async function() {\n\t\t\tvar branch;\n\t\t\tvar local = self.branch().isLocal();\n\t\t\treturn branch = await self.branch().save(pars);\n\t\t\t// if local\n\t\t\t//\t# TODO Should not happen anymore!!\n\t\t\t//\tbranch.model.open(self)\n\t\t\t//\tbranch.leave\n\t\t});\n\t};\n})\nexports.SaveDialog = SaveDialog;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar uxa1$ = require('uxa1'), Dialog = uxa1$.Dialog, TextField = uxa1$.TextField, TextArea = uxa1$.TextArea;\n// import PrivacyField from '../../site/components/PrivacyField'\n\n// externs;\n\nvar PublishDialog = _2.defineTag('PublishDialog', Dialog, function(tag){\n\t\n\ttag.prototype.model = function (){\n\t\treturn this.data().model();\n\t};\n\t\n\ttag.prototype.toggleBusy = function (){\n\t\treturn this.toggleFlag('busy');\n\t};\n\t\n\ttag.prototype.submitLabel = function (){\n\t\treturn this.model().isPublished() ? \"publish again\" : \"publish\";\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._body = this._body||(t0=_1('div',this)).flag('body').setContent([\n\t\t\t_1('h2',t0.$,'A',t0).setText(\"Publish screencast\"),\n\t\t\t_1(TextField,t0.$,'B',t0).setType('text').setName('title').setLabel('Title').setRequired(true).setPlaceholder('Untitled cast').setAutocomplete(\"off\"),\n\t\t\t_1(TextArea,t0.$,'C',t0).flag('mb-md').setName('description').setLabel('Description').setDesc('Short description (markdown supported)'),\n\t\t\t// <input type=\"hidden\" name='privacy' value='public'>\n\t\t\t// <PrivacyField[data]>\n\t\t\t\"Privacy settings can be changed \"\n\t\t],2)).end((\n\t\t\tt0.$.B.end(),\n\t\t\tt0.$.C.end()\n\t\t,true));\n\t};\n\t\n\ttag.prototype.onuxashow = function (e){\n\t\t// console.log 'onuxashow',e\n\t\tvar v_;\n\t\tthis.data().model().privacy = 'public';\n\t\treturn (this.setFormData(v_ = this.data().model()),v_);\n\t};\n\t\n\ttag.prototype.onuxasubmit = function (e){\n\t\t// first validate forms no?\n\t\tvar self = this;\n\t\treturn self.uxa().queue().add(10000,async function() {\n\t\t\tvar values = self.formData();\n\t\t\tconsole.log(\"formData is\",values);\n\t\t\t// return self\n\t\t\tawait self.model().update(\n\t\t\t\t{title: values.title,\n\t\t\t\tdescription: values.description}\n\t\t\t);\n\t\t\t\n\t\t\tvar resp = await self.data().publish(values);\n\t\t\t// log \"response from await\",resp\n\t\t\treturn self.api().analytics().cast(self.model().id,'Published');\n\t\t});\n\t};\n})\nexports.PublishDialog = PublishDialog;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar uxa1$ = require('uxa1'), Dialog = uxa1$.Dialog, TextField = uxa1$.TextField;\n\nvar defaultBodies = {};\n\ndefaultBodies.html = \"<html>\\n <head></head>\\n <body>\\n \\n </body>\\n</html>\";\n\ndefaultBodies.css = (\"body \\{ \\}\");\n\ndefaultBodies.imba = \"# FILENAME\";\n\nvar NewFileDialog = _2.defineTag('NewFileDialog', Dialog, function(tag){\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.onuxasubmit = function (e){\n\t\tvar self = this;\n\t\treturn self.uxa().queue().add(200,function() {\n\t\t\treturn new Promise(function(resolve,reject) {\n\t\t\t\tvar config = self.formData();\n\t\t\t\tvar name = config.name;\n\t\t\t\t\n\t\t\t\tif (!name || self.space().files().any(function(f) { return f.name() == name; })) {\n\t\t\t\t\treturn reject(\"File already exists\");\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tvar ext = name.split(\".\").pop();\n\t\t\t\tvar body = (defaultBodies[ext] || \"\").replace(\"FILENAME\",name);\n\t\t\t\t\n\t\t\t\tvar widget = {\n\t\t\t\t\ttype: 'file',\n\t\t\t\t\tname: name,\n\t\t\t\t\tbody: body\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tvar file = self.space().createWidget(widget).widget();\n\t\t\t\tconsole.log(\"returned file\",file);\n\t\t\t\tself.space().agent().setFile(file);\n\t\t\t\tself.space().agent().setFocus(file);\n\t\t\t\treturn resolve(file);\n\t\t\t});\n\t\t});\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._body = this._body||(t0=_1('div',this)).flag('body').setContent([\n\t\t\t_1('h2',t0.$,'A',t0).setText(\"New file\"),\n\t\t\t_1(TextField,t0.$,'B',t0).flag('autofocus').setName('name').setLabel(\"Name your new file\").setType('text').setPlaceholder('index.js')\n\t\t],2)).end((\n\t\t\tt0.$.B.end()\n\t\t,true));\n\t};\n})\nexports.NewFileDialog = NewFileDialog;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _2 = Imba.createTagList, _1 = Imba.createElementFactory(/*SCOPEID*/), _3 = Imba.createTagScope(/*SCOPEID*/);\n// import PrivacyField from './PrivacyField'\n// import CastTypeField from './CastTypeField'\n\n// externs;\n\nvar uxa1$ = require('uxa1'), Dialog = uxa1$.Dialog, TextField = uxa1$.TextField;\n\nvar CastCreateDialog = _3.defineTag('CastCreateDialog', Dialog, function(tag){\n\t\n\tvar options = {selectable: true};\n\t\n\ttag.prototype.presets = function(v){ return this._presets; }\n\ttag.prototype.setPresets = function(v){ this._presets = v; return this; };\n\ttag.prototype.__preset = {watch: 'presetDidSet',name: 'preset'};\n\ttag.prototype.preset = function(v){ return this._preset; }\n\ttag.prototype.setPreset = function(v){\n\t\tvar a = this.preset();\n\t\tif(v != a) { this._preset = v; }\n\t\tif(v != a) { this.presetDidSet && this.presetDidSet(v,a,this.__preset) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.setup = function (){\n\t\ttag.prototype.__super__.setup.apply(this,arguments);\n\t\treturn this.fetch();\n\t};\n\t\n\ttag.prototype.fetch = function (){\n\t\tvar self = this;\n\t\tconsole.log(\"received templates\");\n\t\t\n\t\tself.setPresets(self.api().db().scrims().sel({sort: ['-featured_at','-created_at']},function(item) {\n\t\t\treturn item.type == 'template' && (item.featured_at || item.uid == self.api().uid()) && !item.archived_at;\n\t\t}));\n\t\tself.render();\n\t\tif (!self.api().isMod() && !self.data().parent_id) { self._parentId.dom().setCustomValidity(\"Please select template\") };\n\t\tself.setFormData(self.data());\n\t\tself.setPreset(self.presets().at(0));\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.onselectpreset = function (e,data){\n\t\tthis.setPreset(data);\n\t\treturn this.render();\n\t};\n\t\n\ttag.prototype.presetDidSet = function (preset,prev){\n\t\tthis._parentId.setValue(preset ? preset.id : null);\n\t\tthis._parentId.dom().setCustomValidity(\"\");\n\t\t\n\t\tvar prevTitle = this.formData().title;\n\t\tif (preset && (!prevTitle || (prev && prev.title == prevTitle))) {\n\t\t\tthis.setFormData({title: preset.title});\n\t\t};\n\t\treturn this.render();\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tvar _t1, $ = this.$$ || (this.$$ = {}), _t2, t0, _t3, self = this;\n\t\treturn (t0 = self._body = self._body||(t0=_1('div',self)).flag('body')).setContent([\n\t\t\tself.data().parent_id ? (\n\t\t\t\t(t0.$.A || _1('h2',t0.$,'A',t0).setText(\"Create cast from current workspace\"))\n\t\t\t) : void(0),\n\t\t\t\n\t\t\t(t0.$.B || _1('input',t0.$,'B',t0).flag('hidden').setType('text').setName('uid').setRequired(true)).end(),\n\t\t\t\n\t\t\t(!self.data().parent_id) ? Imba.static([\n\t\t\t\t(t0.$.C || _1('label',t0.$,'C',t0).flag('caption').setText(\"Select template\")),\n\t\t\t\t(t0.$.D || _1('div',t0.$,'D',t0).flag('ss-select').setContent(\n\t\t\t\t\tt0.$.E || _1('select',t0.$,'E','D').setName('parent_id')\n\t\t\t\t,2)).end((\n\t\t\t\t\tt0.$.E.bindData(self,'preset',[]).setContent((function tagLoop($0) {\n\t\t\t\t\t\tvar _t4;\n\t\t\t\t\t\tfor (let i = 0, items = iter$(self.presets()), len = $0.taglen = items.length, template; i < len; i++) {\n\t\t\t\t\t\t\ttemplate = items[i];\n\t\t\t\t\t\t\t($0[i] || _1('option',$0,i)).setValue(template,1).setContent(template.title,3).end();\n\t\t\t\t\t\t};return $0;\n\t\t\t\t\t})(t0.$['F'] || _2(t0.$,'F',t0.$.E)),4).end()\n\t\t\t\t,true))\n\t\t\t],2,1) : void(0),\n\t\t\t\n\t\t\t(self._parentId = self._parentId||_1('input',t0).flag('parentId').flag('invisible').setType('text').setName('parent_id')).setRequired((!self.api().isMod())).end(),\n\t\t\t(t0.$.G || _1(TextField,t0.$,'G',t0).setType('text').setName('title').setRequired(true).setLabel('Title').setPlaceholder('Untitled').setDesc(\"Please name your project\").setAutocomplete(\"off\")).end()\n\t\t],1);\n\t};\n\t\n\ttag.prototype.onuxasubmit = function (e){\n\t\tvar self = this, v_;\n\t\tvar params = self.formData();\n\t\tif (!params.parent_id) {\n\t\t\t(((v_ = params.parent_id),delete params.parent_id, v_));\n\t\t\tif (!self.api().isMod()) {\n\t\t\t\te.prevent();\n\t\t\t\treturn self.uxa().flash(new Error(\"Please select a template\"));\n\t\t\t};\n\t\t};\n\t\t\n\t\te.halt();\n\t\t\n\t\treturn self.uxa().queue().add(300,async function() {\n\t\t\tvar cast = await self.api().rpc('castCreate',[params,self.data().snapshot,self.data().stream],{models: true});\n\t\t\tif (cast) {\n\t\t\t\tif (self.data().parent_id) {\n\t\t\t\t\tself.api().analytics().forkCreated(cast.id,cast.type);\n\t\t\t\t} else {\n\t\t\t\t\tself.api().analytics().castCreated(cast.id,cast.type);\n\t\t\t\t};\n\t\t\t\treturn App.router().go(cast.url());\n\t\t\t};\n\t\t});\n\t};\n})\nexports.CastCreateDialog = CastCreateDialog;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar uxa1$ = require('uxa1'), Dialog = uxa1$.Dialog, TextField = uxa1$.TextField, TextArea = uxa1$.TextArea;\n\nvar AskDialog = _2.defineTag('AskDialog', Dialog, function(tag){\n\t\n\ttag.prototype.offset = function(v){ return this._offset; }\n\ttag.prototype.setOffset = function(v){ this._offset = v; return this; };\n\ttag.prototype.anchor = function(v){ return this._anchor; }\n\ttag.prototype.setAnchor = function(v){ this._anchor = v; return this; };\n\t\n\t// anchor must be rich in dialog to show filename / paths etc\n\ttag.prototype.space = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.onuxasubmit = function (e){\n\t\tvar self = this;\n\t\treturn self.uxa().queue().add(200,async function() {\n\t\t\tvar offset_;\n\t\t\tawait self.api().tryLogin();\n\t\t\t\n\t\t\tvar params = self.formData();\n\t\t\tif ((typeof (offset_ = self.offset())=='number'||offset_ instanceof Number)) { params.offset = self.offset() };\n\t\t\tif (self.anchor()) { params.anchor = self.anchor() };\n\t\t\tparams.uid = self.api().uid();\n\t\t\tconsole.log(\"commenting\",params);\n\t\t\treturn await self.api().rpc('castComment',[self.space().id(),params]);\n\t\t});\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._body = this._body||(t0=_1('div',this)).flag('body')).setContent([\n\t\t\t(t0.$.A || _1('h2',t0.$,'A',t0).setText(\"Ask question\")),\n\t\t\t(t0.$.B || _1(TextArea,t0.$,'B',t0).flag('autofocus').setName('body').setLabel(\"Your question\")).end(),\n\t\t\tthis.offset() ? (\n\t\t\t\t(t0.$.C || _1('h3',t0.$,'C',t0)).setText(\"Question is linked to offset \" + this.offset())\n\t\t\t) : void(0),\n\t\t\tthis.anchor() ? (\n\t\t\t\t(t0.$.D || _1('h3',t0.$,'D',t0)).setText(\"Question is linked to anchor \" + JSON.stringify(this.anchor()))\n\t\t\t) : void(0)\n\t\t],1);\n\t};\n})\nexports.AskDialog = AskDialog;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\n\nvar SidebarPanel = _2.defineTag('SidebarPanel', function(tag){\n\t\n\ttag.prototype.space = function(v){ return this._space; }\n\ttag.prototype.setSpace = function(v){ this._space = v; return this; };\n\ttag.prototype.name = function(v){ return this._name; }\n\ttag.prototype.setName = function(v){ this._name = v; return this; };\n\t\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3;\n\t\treturn this.$open(0).setChildren(\n\t\t\t$[0] || _1('header',$,0,this).setContent(\n\t\t\t\t$[1] || _1('div',$,1,0).flag('title')\n\t\t\t,2)\n\t\t,2).synced((\n\t\t\t$[1].setContent(this.name(),3)\n\t\t,true));\n\t};\n})\nexports.SidebarPanel = SidebarPanel;\n\n\nvar SidebarEntry = _2.defineTag('SidebarEntry')\nexports.SidebarEntry = SidebarEntry;\n", "function idx$(a,b){\n\treturn (b && b.indexOf) ? b.indexOf(a) : [].indexOf.call(a,b);\n};\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), self = {}, _5 = Imba.createTagList, _3 = Imba.createTagMap, _4 = Imba.createTagLoopResult, _1 = Imba.createTagScope(/*SCOPEID*/), _2 = Imba.createElementFactory(/*SCOPEID*/);\nvar protocol$ = require('../protocol'), ACTION = protocol$.ACTION, CAST = protocol$.CAST;\n\nvar uxa1$ = require('uxa1'), IconButton = uxa1$.IconButton, Icon = uxa1$.Icon, Menu = uxa1$.Menu, MenuItem = uxa1$.MenuItem;\nvar SidebarPanel$ = require('./SidebarPanel'), SidebarPanel = SidebarPanel$.SidebarPanel, SidebarEntry = SidebarPanel$.SidebarEntry;\nvar SpaceMenu = require('./SpaceMenu').SpaceMenu;\nvar filereader$ = require('../util/filereader'), readTextFile = filereader$.readTextFile, readArrayBuffer = filereader$.readArrayBuffer, readFileSystemEntry = filereader$.readFileSystemEntry;\n\nvar SPATH = CAST.EXPLORER_PANEL + '$';\n\nvar EntryHead = _1.defineTag('EntryHead', function(tag){\n\t\n\ttag.prototype.build = function (){\n\t\treturn this.setAttribute('draggable',true);\n\t};\n\t\n\ttag.prototype.ondragstart = function (e){\n\t\tvar dt = e.event().dataTransfer;\n\t\treturn e.event().dataTransfer.setData(\"scrimba/widget\",(\"\" + (this.data().id())));\n\t};\n});\n\nvar Entry = _1.defineTag('Entry', SidebarEntry, function(tag){\n\ttag.prototype.__level = {'default': 0,name: 'level'};\n\ttag.prototype.level = function(v){ return this._level; }\n\ttag.prototype.setLevel = function(v){ this._level = v; return this; }\n\ttag.prototype._level = 0;\n\t\n\ttag.prototype.onrename = function (e){\n\t\te.halt();\n\t\tvar name = window.prompt(\"Rename\",this.name());\n\t\tthis.log('onrename!',name);\n\t\treturn this.data().rename(name);\n\t};\n\t\n\ttag.prototype.ondel = function (e){\n\t\te.halt();\n\t\tif (window.confirm((\"Are you sure you want to delete \" + (this.data().path()) + \"?\"))) {\n\t\t\treturn this.data().rm();\n\t\t};\n\t};\n\t\n\ttag.prototype.name = function (){\n\t\treturn this.data().name();\n\t};\n\t\n\ttag.prototype.notFetched = function (){\n\t\treturn !this.data()._data.body && !this.data()._data.fetched;\n\t};\n\t\n\ttag.prototype.fullPath = function (){\n\t\treturn this.data()._data.fullPath;\n\t};\n\t\n\ttag.prototype.icon = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn (this._icon = this._icon||_2('i',this).flag('icon')).setFlag(0,this.data().ext());\n\t};\n\t\n\ttag.prototype.head = function (){\n\t\t// should measure-text\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\tlet long = this.name().length + (this.level() * 2) > 28;\n\t\tlet ext = this.data().ext();\n\t\t// let shortname = (ext ? data.name.slice(0,-ext:length - 1) : data.name)\n\t\t\n\t\treturn (t0 = this._head = this._head||(t0=_2(EntryHead,this)).flag('head')).bindData(this,'data',[]).setSref((SPATH + this.data().id())).dataset('path',this.data().path()).setContent([\n\t\t\tthis.icon(),\n\t\t\tlong ? Imba.static([\n\t\t\t\t(t0.$.A || _2('div',t0.$,'A',t0).flag('name').flag('long')).setTitle(this.name()).setContent((ext ? this.name().slice(0,-ext.length - 1) : this.name()),3).end(),\n\t\t\t\t(t0.$.B || _2('div',t0.$,'B',t0).flag('ext')).setText(\".\" + ext)\n\t\t\t],2,1) : (\n\t\t\t\t(t0.$.C || _2('div',t0.$,'C',t0).flag('name')).setContent(this.name(),3)\n\t\t\t)\n\t\t],1).end();\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1;\n\t\treturn this.$open(0).setChildren(this.head(),3).synced();\n\t};\n\t\n\ttag.prototype.oncontextmenu = function (e){\n\t\tvar _t1, _t2, t0;\n\t\te.prevent().halt();\n\t\t\n\t\treturn this._head.uxa().open((t0 = (t0=_2(Menu)).flag('dark').flag('narrow').setContent([\n\t\t\t_2(MenuItem,t0.$,'A',t0).setIcon('>').setAction('rename').setLabel(\"Rename...\"),\n\t\t\t_2(MenuItem,t0.$,'B',t0).flag('neg').setIcon('x').setAction('del').setLabel(\"Delete File\")\n\t\t],2)).end((\n\t\t\tt0.$.A.end(),\n\t\t\tt0.$.B.end()\n\t\t,true)));\n\t};\n});\n\nvar FileEntry = _1.defineTag('FileEntry', Entry, function(tag){\n\t\n\ttag.prototype.focusWidgetForNode = function (){\n\t\treturn null;\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\tvar self = this;\n\t\te.halt();\n\t\tif (self.notFetched()) {\n\t\t\tconst o = {fullPath: self.fullPath(),id: self.data()._id};\n\t\t\tconst ev = new CustomEvent('gitLoadFile',{detail: o});\n\t\t\twindow.dispatchEvent(ev);\n\t\t};\n\t\t\n\t\tself.data().space().agent().setFile(self.data());\n\t\treturn setTimeout(function() {\n\t\t\tif (self.data().space().isEditing()) {\n\t\t\t\treturn self.data().space().view().editor().focus();\n\t\t\t};\n\t\t},0);\n\t\t// should be a better way?\n\t};\n\t\n\t\n\ttag.prototype.sontouchstart = function (t){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.sontouchend = function (t){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tthis.flag('active',this.data().clientIsShowing());\n\t\tthis.flag('active-agent',this.data().agentIsShowing());\n\t\treturn tag.prototype.__super__.render.apply(this,arguments);\n\t};\n});\n\nself.checkBinary = async function (file){\n\tvar buf = await readArrayBuffer(file.slice(0,1024));\n\tvar view = new Uint8Array(buf);\n\tfor (let i = 0, items = iter$(view), len = items.length, byte; i < len; i++) {\n\t\tbyte = items[i];\n\t\tif (byte == 0) {\n\t\t\treturn true;\n\t\t};\n\t};\n\treturn false;\n};\n\nself.uploadBlob = async function (content){\n\tvar res = await window.fetch(\"/blobs\",{credentials: 'include',\n\tmethod: 'POST',\n\tbody: content,\n\theaders: {'Content-Type': 'application/octet-stream'}});\n\tvar data = await res.json();\n\treturn data.id;\n};\n\nvar kb = 1024;\nvar mb = 1024 * kb;\n\nself.addFileToDirectory = async function (dir,file){\n\tvar isBinary = await self.checkBinary(file);\n\tvar limit = isBinary ? ((5 * mb)) : ((500 * kb));\n\tif (file.size > limit) {\n\t\t// TODO: ehm, what to do?\n\t\treturn;\n\t};\n\t\n\tvar item = {name: file.name};\n\t\n\tif (isBinary) {\n\t\titem.blobId = await self.uploadBlob(file);\n\t} else {\n\t\titem.body = await readTextFile(file);\n\t};\n\t\n\treturn dir.mkfile(item.name,item);\n};\n\nself.ignoreEntry = function (entry){\n\tif (idx$(entry.name,['.DS_Store','node_modules']) >= 0) {\n\t\treturn true;\n\t};\n\t\n\treturn false;\n};\n\nvar addEntriesToDirectory = async function(dir,entries) {\n\tfor (let i = 0, items = iter$(entries), len = items.length, entry; i < len; i++) {\n\t\tentry = items[i];\n\t\tif (self.ignoreEntry(entry)) { continue; };\n\t\tif (entry.isDirectory) {\n\t\t\tlet subdir = dir.mkdir(entry.name);\n\t\t\tentry.createReader().readEntries(function(subEntries) {\n\t\t\t\treturn addEntriesToDirectory(subdir,subEntries);\n\t\t\t});\n\t\t} else if (entry.isFile) {\n\t\t\tlet file = await readFileSystemEntry(entry);\n\t\t\tawait self.addFileToDirectory(dir,file);\n\t\t};\n\t};\n\treturn null;\n};\n\n\nvar DirEntry = _1.defineTag('DirEntry', Entry, function(tag){\n\t\n\ttag.prototype.onnewfile = function (e){\n\t\tvar self = this, file;\n\t\te.stop();\n\t\tvar name = window.prompt(\"Name file\");\n\t\tif (name) {\n\t\t\tif (file = self.data().mkfile(name)) {\n\t\t\t\tself.data().space().agent().setFile(file);\n\t\t\t\treturn setTimeout(function() { return self.data().space().view().editor().focus(); },0);\n\t\t\t};\n\t\t};\n\t};\n\t\n\ttag.prototype.onnewdir = function (e){\n\t\te.stop();\n\t\tvar name = window.prompt(\"Name directory\");\n\t\tif (name) { return this.data().mkdir(name) };\n\t};\n\t\n\ttag.prototype.toggle = function (e){\n\t\tvar v_;\n\t\treturn (this.data().setExpanded(v_ = !this.data().expanded()),v_);\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\te.stop();\n\t\tif (this.notFetched()) {\n\t\t\tconst o = {fullPath: this.fullPath(),id: this.data()._id};\n\t\t\tconst ev = new CustomEvent('gitLoadFolder',{detail: o});\n\t\t\twindow.dispatchEvent(ev);\n\t\t};\n\t\treturn this.toggle();\n\t};\n\t\n\ttag.prototype.entries = function (){\n\t\treturn this.data().entries().toArray().slice().sort(function(a,b) {\n\t\t\treturn (a.TYPE == b.TYPE) ? (((a.name() > b.name()) ? 1 : (-1))) : (((a.TYPE == 'dir') ? (-1) : 1));\n\t\t});\n\t};\n\t\n\ttag.prototype.oncontextmenu = function (e){\n\t\tvar _t1, _t2, t0;\n\t\te.prevent().stop();\n\t\t\n\t\treturn this._head.uxa().open((t0 = (t0=_2(Menu)).flag('dark').flag('narrow').setContent([\n\t\t\t_2(MenuItem,t0.$,'A',t0).setIcon('>').setAction('newfile').setLabel(\"New File\"),\n\t\t\t_2(MenuItem,t0.$,'B',t0).setIcon('>').setAction('rename').setLabel(\"Rename...\"),\n\t\t\t_2('hr',t0.$,'C',t0),\n\t\t\t_2(MenuItem,t0.$,'D',t0).setIcon('>').setAction('newdir').setLabel(\"New Folder...\"),\n\t\t\t_2(MenuItem,t0.$,'E',t0).flag('neg').setIcon('x').setAction('del').setLabel(\"Delete Folder\")\n\t\t],2)).end((\n\t\t\tt0.$.A.end(),\n\t\t\tt0.$.B.end(),\n\t\t\tt0.$.D.end(),\n\t\t\tt0.$.E.end()\n\t\t,true)));\n\t};\n\t\n\t\n\ttag.prototype.head = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._head = this._head||(t0=_2(EntryHead,this)).flag('head').setContent([\n\t\t\tthis._icon = this._icon||_2('i',t0).flag('icon').flag('folder').flag('toggler'),\n\t\t\t_2('div',t0.$,'A',t0).flag('name')\n\t\t// <IconButton icon='v' action='newfile'>\n\t\t// <IconButton icon='w' action='newdir'>\n\t\t// <IconButton icon='x' action='rm'>\n\t\t],2)).bindData(this,'data',[]).setSref((SPATH + this.data().id())).end((\n\t\t\tt0.$.A.setContent(this.data().name(),3)\n\t\t,true));\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tvar _t1, $ = this.$$ || (this.$$ = {}), self = this, t0;\n\t\treturn (t0 = self._body = self._body||(t0=_2('div',self)).flag('body')).setFlag(0,(\"l\" + self.level())).setContent(\n\t\t\t(function tagLoop($0,$1,$$) {\n\t\t\t\tvar _t2;\n\t\t\t\tfor (let i = 0, items = iter$(self.entries()), len = items.length, item; i < len; i++) {\n\t\t\t\t\t// should sort by name and type\n\t\t\t\t\titem = items[i];\n\t\t\t\t\tif (item.TYPE == 'file') {\n\t\t\t\t\t\t$$.push(($0[i] || _2(FileEntry,$0,i)).setData(item).setLevel((self._level + 1)).end());\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$$.push(($1[i] || _2(DirEntry,$1,i)).setData(item).setLevel((self._level + 1)).end());\n\t\t\t\t\t};\n\t\t\t\t};return $$;\n\t\t\t})(t0.$['A'] || _3(t0.$,'A',self._body),t0.$['B'] || _3(t0.$,'B',self._body),_4())\n\t\t,5);\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1;\n\t\treturn this.$open(0).flagIf('expanded',(this.data().expanded())).setChildren([\n\t\t\tthis.head(),\n\t\t\tthis.data().expanded() ? this.body() : void(0)\n\t\t],1).synced();\n\t};\n});\n\nvar RootEntry = _1.defineTag('RootEntry', DirEntry, function(tag){\n\t\n\ttag.prototype.name = function (){\n\t\treturn \"Workspace\";\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\treturn e.halt();\n\t};\n});\n\n\nvar ExplorerView = _1.defineTag('ExplorerView', SidebarPanel, function(tag){\n\t\n\ttag.prototype.__droptarget = {watch: 'droptargetDidSet',name: 'droptarget'};\n\ttag.prototype.droptarget = function(v){ return this._droptarget; }\n\ttag.prototype.setDroptarget = function(v){\n\t\tvar a = this.droptarget();\n\t\tif(v != a) { this._droptarget = v; }\n\t\tif(v != a) { this.droptargetDidSet && this.droptargetDidSet(v,a,this.__droptarget) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.oncontextmenu = function (e){\n\t\te.prevent().stop();\n\t\treturn this.showMenu();\n\t};\n\t\n\ttag.prototype.showMenu = function (e){\n\t\tvar _t1, _t2, t0;\n\t\treturn e.uxa().open((_2(SpaceMenu).flag('sm')).bindData(this,'space',[]).end());\n\t\t\n\t\treturn this._header.uxa().open((t0 = (t0=_2(Menu)).flag('dark').flag('narrow').setContent([\n\t\t\t_2(MenuItem,t0.$,'A',t0).setIcon('+').setAction('newfile').setLabel(\"New File\"),\n\t\t\t_2(MenuItem,t0.$,'B',t0).setIcon('+').setAction('newdir').setLabel(\"New Folder\"),\n\t\t\t_2('hr',t0.$,'C',t0),\n\t\t\t_2(MenuItem,t0.$,'D',t0).setIcon('>').setAction('spacezip').setLabel(\"Download .zip\")\n\t\t],2)).end((\n\t\t\tt0.$.A.end(),\n\t\t\tt0.$.B.end(),\n\t\t\tt0.$.D.end()\n\t\t,true)));\n\t};\n\t\n\t\n\ttag.prototype.onnewfile = function (e){\n\t\te.stop();\n\t\tvar name = window.prompt(\"Name file\");\n\t\tif (name) { return this.space().fs().mkfile(name) };\n\t};\n\t\n\ttag.prototype.onnewdir = function (e){\n\t\te.stop();\n\t\tvar name = window.prompt(\"Name directory\");\n\t\tif (name) { return this.space().fs().mkdir(name) };\n\t};\n\t\n\ttag.prototype.ondragenter = function (e){\n\t\tvar v_;\n\t\te.prevent().stop();\n\t\ttry {\n\t\t\tvar dir = e.event().target.closest('.DirEntry');\n\t\t\treturn (this.setDroptarget(v_ = dir ? dir._tag : this._main),v_);\n\t\t} catch (e) { };\n\t};\n\t\n\t\n\ttag.prototype.ondragover = function (e){\n\t\treturn e.prevent().stop();\n\t};\n\t\n\ttag.prototype.ondragleave = function (e){\n\t\tvar v_;\n\t\te.prevent().stop();\n\t\tif (!this.dom().contains(e.event().relatedTarget)) {\n\t\t\treturn (this.setDroptarget(null),null);\n\t\t};\n\t};\n\t\n\ttag.prototype.ondrop = async function (e){\n\t\tvar self = this;\n\t\tif (!(self.droptarget())) { return };\n\t\t\n\t\tvar dd = e.event().dataTransfer;\n\t\tvar target = self.droptarget();\n\t\t// log 'drop!!',e,e.event,dd,dd:files[0]\n\t\te.prevent().stop();\n\t\t\n\t\tself.setDroptarget(null);\n\t\t\n\t\tvar entries = [];\n\t\t// only if browser supports files this way\n\t\t// should move into utility\n\t\t\n\t\tvar promises = [];\n\t\tvar moveWidget = null;\n\t\tentries = [];\n\t\t\n\t\tfor (let i = 0, items = iter$(dd.items), len = items.length, item; i < len; i++) {\n\t\t\titem = items[i];\n\t\t\tlet node = item;\n\t\t\tself.log(\"ondrop\",item); // ,item.getAsString\n\t\t\t\n\t\t\tif (item.type == \"scrimba/widget\") {\n\t\t\t\tpromises.push(new Promise(function(resolve) {\n\t\t\t\t\treturn item.getAsString(function(str) {\n\t\t\t\t\t\tlet widget = self.space().__lookup(str);\n\t\t\t\t\t\tself.log(\"found widget\",str);\n\t\t\t\t\t\tmoveWidget = widget;\n\t\t\t\t\t\treturn resolve(widget);\n\t\t\t\t\t});\n\t\t\t\t}));\n\t\t\t\tcontinue;\n\t\t\t\t// entries.push(space.__lookup())\n\t\t\t};\n\t\t\t\n\t\t\tif (item.webkitGetAsEntry) {\n\t\t\t\tnode = item.webkitGetAsEntry();\n\t\t\t\tconsole.log(\"webkit entry\",node);\n\t\t\t};\n\t\t\t\n\t\t\tif (node.isDirectory || node.isFile) {\n\t\t\t\tentries.push(node);\n\t\t\t};\n\t\t};\n\t\t\n\t\tawait Promise.all(promises);\n\t\t// log entries\n\t\t// this drop consisted of local moves(!)\n\t\tif (moveWidget) {\n\t\t\tmoveWidget.moveTo(target.data());\n\t\t};\n\t\t\n\t\treturn addEntriesToDirectory(target.data(),entries);\n\t};\n\t\n\ttag.prototype.droptargetDidSet = function (curr,prev){\n\t\tvar $1, $2;\n\t\t($1 = curr) && $1.flag && $1.flag('droptarget');\n\t\treturn ($2 = prev) && $2.unflag && $2.unflag('droptarget');\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, _t4;\n\t\treturn this.$open(0).setSref(this.data().id()).setChildren($.$ = $.$ || [\n\t\t\tthis._header = this._header||_2('header',this).flag('header').setContent([\n\t\t\t\t_2('div',$,0,this._header).flag('title').setText(\"Explorer\"),\n\t\t\t\t_2('div',$,1,this._header).flag('tools').setContent(\n\t\t\t\t\t$[2] || _2('div',$,2,1).flag('tool').setIcon('more-horizontal').on$(0,['tap','showMenu'],this)\n\t\t\t\t,2)\n\t\t\t],2),\n\t\t\t\n\t\t\tthis._main = this._main||_2(RootEntry,this).flag('main')\n\t\t],2).synced((\n\t\t\t$[2].end(),\n\t\t\tthis._main.bindData(this.space(),'fs',[]).end()\n\t\t,true));\n\t};\n})\nexports.ExplorerView = ExplorerView;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nfunction len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nvar Imba = require('imba1'), _3 = Imba.createTagList, _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar uxa1$ = require('uxa1'), IconButton = uxa1$.IconButton, Menu = uxa1$.Menu, MenuItem = uxa1$.MenuItem;\nvar SidebarPanel$ = require('./SidebarPanel'), SidebarPanel = SidebarPanel$.SidebarPanel, SidebarEntry = SidebarPanel$.SidebarEntry;\nvar readTextFile = require('../util/filereader').readTextFile;\n\nvar PackageEntry = _2.defineTag('PackageEntry', SidebarEntry, function(tag){\n\ttag.prototype.space = function(v){ return this._space; }\n\ttag.prototype.setSpace = function(v){ this._space = v; return this; };\n\ttag.prototype.prefix = function(v){ return this._prefix; }\n\ttag.prototype.setPrefix = function(v){ this._prefix = v; return this; };\n\t\n\ttag.prototype.name = function (){\n\t\treturn this.data().match(/.[^@]*/)[0];\n\t};\n\t\n\ttag.prototype.version = function (){\n\t\treturn this.data().substr(len$(this.name()));\n\t};\n\t\n\ttag.prototype.ondel = async function (e){\n\t\te.halt();\n\t\t// trigger('pkgremove',data)\n\t\tvar ok = await e.uxa().confirm((\"Are you sure you want to remove \" + this.name() + \"?\"));\n\t\tif (ok) { return this.space().browser().removePackage(this.name()) };\n\t};\n\t\n\t\n\ttag.prototype.onupgrade = async function (e){\n\t\te.halt();\n\t\tvar ok = await e.uxa().confirm((\"Are you sure you want to upgrade \" + this.name() + \"?\"));\n\t\tif (ok) { return this.space().browser().upgradePackage(this.name()) };\n\t};\n\t\n\ttag.prototype.oncontextmenu = function (e){\n\t\tvar _t1, _t2, t0;\n\t\te.prevent().halt();\n\t\t\n\t\treturn this._head.uxa().open((t0 = (t0=_1(Menu)).flag('dark').flag('narrow').setContent([\n\t\t\t_1(MenuItem,t0.$,'A',t0).setIcon('>').setAction('upgrade').setLabel(\"Upgrade...\"),\n\t\t\t_1(MenuItem,t0.$,'B',t0).flag('neg').setIcon('x').setAction('del').setLabel(\"Remove module\")\n\t\t],2)).end((\n\t\t\tt0.$.A.end(),\n\t\t\tt0.$.B.end()\n\t\t,true)));\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, _t4, t0;\n\t\treturn this.$open(0).flag('Entry').setChildren(\n\t\t\tt0 = this._head = this._head||(t0=_1('div',this)).flag('head').setContent([\n\t\t\t\tthis._icon = this._icon||_1('i',t0).flag('icon').flag('module'),\n\t\t\t\t_1('div',$,0,t0).flag('name').setContent([\n\t\t\t\t\t_1('span',$,1,0).flag('name'),\n\t\t\t\t\t_1('span',$,2,0).flag('semver').flag('muted')\n\t\t\t\t],2)\n\t\t\t// <IconButton icon='v' action='upgrade'>\n\t\t\t// <IconButton icon='x' action='del'>\n\t\t\t],2)\n\t\t,2).synced((\n\t\t\t$[1].setContent(this.name(),3),\n\t\t\t$[2].setContent(this.version(),3)\n\t\t,true));\n\t};\n});\n\nvar PackageEntries = _2.defineTag('PackageEntries', function(tag){\n\ttag.prototype.__data = {watch: 'dataDidSet',name: 'data'};\n\ttag.prototype.data = function(v){ return this._data; }\n\ttag.prototype.setData = function(v){\n\t\tvar a = this.data();\n\t\tif(v != a) { this._data = v; }\n\t\tif(v != a) { this.dataDidSet && this.dataDidSet(v,a,this.__data) }\n\t\treturn this;\n\t};\n\ttag.prototype.space = function(v){ return this._space; }\n\ttag.prototype.setSpace = function(v){ this._space = v; return this; };\n\ttag.prototype.path = function(v){ return this._path; }\n\ttag.prototype.setPath = function(v){ this._path = v; return this; };\n\t\n\ttag.prototype.dataDidSet = function (){\n\t\treturn this.render();\n\t};\n\t\n\ttag.prototype.sortedQueries = function (){\n\t\tvar queries = this.data().resolved.slice();\n\t\treturn queries.sort(function(a,b) { return a.localeCompare(b); });\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, self = this, $ = this.$;\n\t\treturn self.$open(0).setChildren(\n\t\t\t(function tagLoop($0) {\n\t\t\t\tvar _t2;\n\t\t\t\tfor (let i = 0, items = iter$(self.sortedQueries()), len = $0.taglen = items.length; i < len; i++) {\n\t\t\t\t\t($0[i] || _1(PackageEntry,$0,i)).setData(items[i]).setSpace(self.space()).setSref((self.path() + i)).end();\n\t\t\t\t};return $0;\n\t\t\t})($[0] || _3($,0))\n\t\t,4).synced();\n\t};\n});\n\nvar DependenciesPanel = _2.defineTag('DependenciesPanel', SidebarPanel, function(tag){\n\ttag.prototype.bundle = function (){\n\t\treturn this.space().browser().npmPackages() || {resolved: []};\n\t};\n\t\n\ttag.prototype.oncontextmenu = function (e){\n\t\te.prevent().stop();\n\t\treturn this.showMenu();\n\t};\n\t\n\ttag.prototype.onimportpackagejson = function (e){\n\t\tvar _t1, self = this;\n\t\te.stop();\n\t\t\n\t\tvar fileInput = (_1('input').setType(\"file\")).end();\n\t\t\n\t\tfileInput.dom().onchange = async function() {\n\t\t\tfor (let i = 0, items = iter$(fileInput.dom().files), len = items.length, file; i < len; i++) {\n\t\t\t\tfile = items[i];\n\t\t\t\tif (file.name == 'package.json') {\n\t\t\t\t\tvar body = await readTextFile(file);\n\t\t\t\t\tvar parsed = JSON.parse(body);\n\t\t\t\t\t// TODO: show spinner\n\t\t\t\t\tself.space().browser().overwritePackages(parsed.dependencies);\n\t\t\t\t} else {\n\t\t\t\t\t// uhm?\n\t\t\t\t};\n\t\t\t};\n\t\t\treturn Imba.commit();\n\t\t};\n\t\t\n\t\treturn fileInput.dom().click();\n\t};\n\t\n\t\n\ttag.prototype.showMenu = function (){\n\t\tvar _t1, _t2, t0;\n\t\treturn this._header.uxa().open((t0 = (t0=_1(Menu)).flag('dark').flag('narrow').setContent([\n\t\t\t_1(MenuItem,t0.$,'A',t0).setIcon('+').setAction('dependencyadd').setLabel(\"Add module\"),\n\t\t\t_1(MenuItem,t0.$,'B',t0).setIcon('+').setAction('importpackagejson').setLabel(\"Import package.json\")\n\t\t// <MenuItem.neg icon='x' action='del' label=\"Remove module\">\n\t\t],2)).end((\n\t\t\tt0.$.A.end(),\n\t\t\tt0.$.B.end()\n\t\t,true)));\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, _t4;\n\t\tlet path = (\"\" + (this.data().id()) + \"$\");\n\t\t\n\t\treturn this.$open(0).setSref(this.data().id()).setChildren($.$ = $.$ || [\n\t\t\tthis._header = this._header||_1('header',this).flag('header').setContent([\n\t\t\t\t_1('div',$,0,this._header).flag('title').setText(\"Dependencies\"),\n\t\t\t\t_1('div',$,1,this._header).flag('tools').setContent(\n\t\t\t\t\t// <IconButton.toggle icon='+' action='dependencyadd'>\n\t\t\t\t\t$[2] || _1('div',$,2,1).flag('tool').setIcon('more-horizontal').on$(0,['tap','showMenu'],this)\n\t\t\t\t,2)\n\t\t\t],2),\n\t\t\tthis._main = this._main||_1(PackageEntries,this).flag('main')\n\t\t],2).synced((\n\t\t\t$[2].end(),\n\t\t\tthis._main.setSpace(this.space()).setPath(path).setData(this.bundle()).end()\n\t\t,true));\n\t};\n})\nexports.DependenciesPanel = DependenciesPanel;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar SidebarPanel = require('./SidebarPanel').SidebarPanel;\n\nvar WidgetPanel = _2.defineTag('WidgetPanel', SidebarPanel, function(tag){\n\t\n\ttag.prototype.ontap = function (e){\n\t\tthis.log('ontap',e.target());\n\t\treturn this.toggle();\n\t};\n\t\n\ttag.prototype.state = function (){\n\t\treturn this.data().visible() ? 'on' : 'off';\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1;\n\t\treturn this.$open(0).setFlag(-1,this.state()).setSref((\"sidebar$\" + (this.data().id()))).setChildren(\n\t\t\tthis.header()\n\t\t,3).synced();\n\t};\n\t\n\ttag.prototype.header = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0;\n\t\treturn (t0 = this._header = this._header||(t0=_1('header',this)).flag('header').setContent([\n\t\t\t_1('div',t0.$,'A',t0).flag('title'),\n\t\t\t_1('div',t0.$,'B',t0).flag('tools')\n\t\t],2)).end((\n\t\t\tt0.$.A.setContent(this.name(),3)\n\t\t,true));\n\t};\n})\nexports.WidgetPanel = WidgetPanel;\n", "var Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar WidgetPanel = require('./WidgetPanel').WidgetPanel;\nvar uxa1$ = require('uxa1'), Menu = uxa1$.Menu, MenuItem = uxa1$.MenuItem, IconButton = uxa1$.IconButton;\n\nvar SlidesPanel = _2.defineTag('SlidesPanel', WidgetPanel, function(tag){\n\t\n\ttag.prototype.toggle = function (){\n\t\tif (this.data().currentSlide()) {\n\t\t\tthis.data().setVisible(!this.data().visible());\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.onshowmenu = function (e){\n\t\tvar _t1, _t2, t0;\n\t\treturn this._header.uxa().open((t0 = (t0=_1(Menu)).flag('dark')).setContent([\n\t\t\t(t0.$.A || _1(MenuItem,t0.$,'A',t0).setIcon('+').setAction('importslides').setLabel(\"Import Google Slides\")).end(),\n\t\t\tthis.data().url() ? (\n\t\t\t\t(t0.$.B || _1(MenuItem,t0.$,'B',t0).setIcon('+').setAction('reimportslides').setLabel(\"Resync with Google Slides\")).end()\n\t\t\t) : void(0)\n\t\t],1).end());\n\t};\n\t\n\ttag.prototype.header = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {}), _t2, t0, _t3;\n\t\treturn (t0 = this._header = this._header||(t0=_1('header',this)).flag('header').setContent([\n\t\t\t_1('div',t0.$,'A',t0).flag('title').setText(\"Slides\"),\n\t\t\t_1('div',t0.$,'B',t0).flag('tools').setContent(t0.$.C || _1(IconButton,t0.$,'C','B').setIcon('*').setAction('showmenu'),2)\n\t\t],2)).end((\n\t\t\tt0.$.C.end()\n\t\t,true));\n\t};\n})\nexports.SlidesPanel = SlidesPanel;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _3 = Imba.createTagList, _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar IconButton = require('uxa1').IconButton;\nvar SidebarPanel$ = require('./SidebarPanel'), SidebarPanel = SidebarPanel$.SidebarPanel, SidebarEntry = SidebarPanel$.SidebarEntry;\n\nvar BranchEntry = _2.defineTag('BranchEntry', SidebarEntry, function(tag){\n\ttag.prototype.space = function(v){ return this._space; }\n\ttag.prototype.setSpace = function(v){ this._space = v; return this; };\n\t\n\t// def name\n\t// \tdata.match(/.[^@]*/)[0]\n\t\n\t// def version\n\t// \tdata.substr(name.len)\n\t\n\ttag.prototype.ondel = async function (e){\n\t\te.halt();\n\t\t// trigger('pkgremove',data)\n\t\tvar ok = await e.uxa().confirm((\"Are you sure you want to remove \" + this.data() + \"?\"));\n\t\treturn this;\n\t\t// space.browser.removePackage(data) if ok\n\t};\n\t\n\ttag.prototype.name = function (){\n\t\tif (this.data() == this.space().trunk()) {\n\t\t\treturn \"screencast\";\n\t\t} else if (this.data().isLocal()) {\n\t\t\treturn this.data().model().title; // \"edits@0:15\"\n\t\t} else {\n\t\t\treturn this.data().model().title;\n\t\t};\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\te.halt();\n\t\treturn this.trigger('branchenter',this.data());\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, t0;\n\t\treturn this.$open(0).flag('Entry').setFlag(-1,this.data().model().type).flagIf('active',(this.space().branch() == this.data())).setChildren(\n\t\t\tt0 = this._head = this._head||(t0=_1('div',this)).flag('head').setContent([\n\t\t\t\tthis._icon = this._icon||_1('i',t0).flag('icon'),\n\t\t\t\t_1('div',$,0,t0).flag('name'),\n\t\t\t\t// \t<span.name> \"Branchname here\"\n\t\t\t\t// \t<span.semver.muted> \"\"\n\t\t\t\t// <IconButton icon='v' action='upgrade'>\n\t\t\t\t_1(IconButton,$,1,t0).setIcon('x').setAction('del')\n\t\t\t],2)\n\t\t,2).synced((\n\t\t\tthis._icon.flagIf('local',(this.data().isLocal())).setFlag(0,this.data().model().type),\n\t\t\t$[0].setContent(this.name(),3),\n\t\t\t$[1].end()\n\t\t,true));\n\t};\n})\nexports.BranchEntry = BranchEntry;\n\nvar BranchesPanel = _2.defineTag('BranchesPanel', SidebarPanel, function(tag){\n\t\n\ttag.prototype.branches = function (){\n\t\treturn [];\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, _t4, self = this;\n\t\treturn self.$open(0).setChildren($.$ = $.$ || [\n\t\t\t_1('header',$,0,self).setContent([\n\t\t\t\t_1('div',$,1,0).flag('title'),\n\t\t\t\t_1('div',$,2,0).flag('tools').setContent(\n\t\t\t\t\t// <IconButton.toggle icon='+' action='dependencyadd'>\n\t\t\t\t\t$[3] || _1(IconButton,$,3,2).flag('toggle').setIcon('>').setAction('toggle')\n\t\t\t\t,2)\n\t\t\t],2),\n\t\t\tself._main = self._main||_1('div',self).flag('main')\n\t\t],2).synced((\n\t\t\t$[1].setContent(self.name() || \"Branches\",3),\n\t\t\t$[3].end(),\n\t\t\tself._main.setContent([\n\t\t\t\t$[4] || _1(BranchEntry,$,4,self._main).flag('trunk'),\n\t\t\t\t(function tagLoop($0) {\n\t\t\t\t\tvar _t31;\n\t\t\t\t\tfor (let i = 0, items = iter$(self.space().trunk().branches()), len = $0.taglen = items.length; i < len; i++) {\n\t\t\t\t\t\t($0[i] || _1(BranchEntry,$0,i)).setData(items[i]).setSpace(self.space()).end();\n\t\t\t\t\t};return $0;\n\t\t\t\t})($[5] || _3($,5,self._main))\n\t\t\t],1).end((\n\t\t\t\t$[4].bindData(self.space(),'trunk',[]).setSpace(self.space()).end()\n\t\t\t,true))\n\t\t,true));\n\t};\n})\nexports.BranchesPanel = BranchesPanel;\n", "var Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/), _2 = Imba.createElementFactory(/*SCOPEID*/);\nvar ExplorerView = require('./ExplorerView').ExplorerView;\nvar DependenciesPanel = require('./DependenciesPanel').DependenciesPanel;\nvar SidebarPanel = require('./SidebarPanel').SidebarPanel;\nvar WidgetPanel = require('./WidgetPanel').WidgetPanel;\nvar SlidesPanel = require('./SlidesPanel').SlidesPanel;\nvar BranchesPanel$ = require('./BranchesPanel'), BranchesPanel = BranchesPanel$.BranchesPanel, BranchEntry = BranchesPanel$.BranchEntry;\n\nvar SpaceMenu = require('./SpaceMenu').SpaceMenu;\nvar uxa1$ = require('uxa1'), IconButton = uxa1$.IconButton, Dialog = uxa1$.Dialog, TextField = uxa1$.TextField, Button = uxa1$.Button;\n\n// Should move somewhere else\nvar LogEntry = require('../widgets/browser/PlayerPage').LogEntry;\nvar ScrimbaGesture = require('../util/ScrimbaGesture').ScrimbaGesture;\nvar CastDialog = require('../legacy/CastDialog').CastDialog;\n\nvar Resizer = _1.defineTag('Resizer', function(tag){\n\t\n\ttag.prototype.ontouchstart = function (t){\n\t\treturn ScrimbaGesture.wrap(t);\n\t};\n\t\n\ttag.prototype.onresizestart = function (g){\n\t\treturn g._width = this.data().width();\n\t};\n\t\n\ttag.prototype.onresizeupdate = function (g){\n\t\tvar v_;\n\t\treturn (this.data().setWidth(v_ = g.clamp(100,g._width + g.dx(),320,10)),v_);\n\t};\n});\n\nvar SidebarView = _1.defineTag('SidebarView', function(tag){\n\t\n\ttag.prototype.setup = function (){\n\t\tvar v_;\n\t\treturn (this.setSref(v_ = this.data().id()),v_);\n\t};\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.data().space();\n\t};\n\t\n\ttag.prototype.showMenu = function (e){\n\t\tvar _t1;\n\t\treturn e.uxa().open((_2(SpaceMenu).flag('sm')).bindData(this,'space',[]).end());\n\t};\n\t\n\ttag.prototype.editMetadata = function (){\n\t\tvar _t1;\n\t\treturn this.uxa().open((_2(CastDialog).flag('modal')).bindData(this.space(),'model',[]).setFormData(this.space().model()).end());\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3;\n\t\treturn this.$open(0).setChildren($.$ = $.$ || [\n\t\t\t// <.top-shadow>\n\t\t\t_2(Resizer,$,0,this).flag('resizer').flag('right').dataset('gesture','resize'),\n\t\t\t_2('section',$,1,this).flag('main').setContent([\n\t\t\t\t// <header.header>\n\t\t\t\t//\t<.title>\n\t\t\t\t// <.tool.cog icon='settings' :tap.showMenu>\n\t\t\t\t_2(ExplorerView,$,2,1),\n\t\t\t\t_2(DependenciesPanel,$,3,1)\n\t\t\t],2)\n\t\t],2).synced((\n\t\t\t$[0].bindData(this,'data',[]).end(),\n\t\t\t$[2].bindData(this.space(),'explorerPanel',[]).setSpace(this.space()).end(),\n\t\t\t$[3].bindData(this.space(),'dependenciesPanel',[]).setSpace(this.space()).end()\n\t\t,true));\n\t};\n})\nexports.SidebarView = SidebarView;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _2 = Imba.createTagList, _1 = Imba.createElementFactory(/*SCOPEID*/), _3 = Imba.createTagScope(/*SCOPEID*/);\nvar InterfaceView = require('./InterfaceView').InterfaceView;\n\nvar FilePath = _3.defineTag('FilePath', function(tag){\n\ttag.prototype.__data = {watch: 'dataDidSet',name: 'data'};\n\ttag.prototype.data = function(v){ return this._data; }\n\ttag.prototype.setData = function(v){\n\t\tvar a = this.data();\n\t\tif(v != a) { this._data = v; }\n\t\tif(v != a) { this.dataDidSet && this.dataDidSet(v,a,this.__data) }\n\t\treturn this;\n\t};\n\ttag.prototype.path = function(v){ return this._path; }\n\ttag.prototype.setPath = function(v){ this._path = v; return this; };\n\t\n\ttag.prototype.dataDidSet = function (data){\n\t\tvar v_;\n\t\treturn (this.setPath(v_ = data ? data.path().split(\"/\") : []),v_);\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, $ = this.$;\n\t\tvar path = this.path();\n\t\treturn this.$open(0).flag('path').setChildren(\n\t\t\t// <.dir> \"app\"\n\t\t\t// <.file> \"index.html\"\n\t\t\t(function tagLoop($0) {\n\t\t\t\tvar _t2;\n\t\t\t\tfor (let i = 0, items = iter$(path), len = $0.taglen = items.length; i < len; i++) {\n\t\t\t\t\t($0[i] || _1('div',$0,i).flag('part')).setContent(items[i],3);\n\t\t\t\t};return $0;\n\t\t\t})($[0] || _2($,0))\n\t\t,4).synced();\n\t};\n});\n\n\nvar TitlebarView = _3.defineTag('TitlebarView', InterfaceView, function(tag){\n\t\n\ttag.prototype.file = function (){\n\t\treturn this.space().primaryEditor().currentFile();\n\t};\n\t\n\ttag.prototype.toggleBrowser = function (){\n\t\tvar v_;\n\t\treturn (this.space().browser().setVisible(v_ = !this.space().browser().visible()),v_);\n\t};\n\t\n\ttag.prototype.toggleConsole = function (){\n\t\treturn this.space().console().setEnabled(!this.space().console().enabled());\n\t};\n\t\n\ttag.prototype.run = function (){\n\t\tif (this.file() && this.file().ext() == 'html') {\n\t\t\treturn this.openInBrowser();\n\t\t} else {\n\t\t\treturn this.reload();\n\t\t};\n\t};\n\t\n\ttag.prototype.reload = function (){\n\t\treturn this.space().browser().refresh();\n\t};\n\t\n\ttag.prototype.openInBrowser = function (){\n\t\tlet url = this.file().path().replace(/^\\//,'');\n\t\t// console.log 'open in browser!!'\n\t\treturn this.space().browser().node().go(url,true);\n\t};\n\t\n\ttag.prototype.onbeforeshortcut = function (e){\n\t\t// console.log 'onbefore shortcut!',e\n\t\tif (!SP.isEditing() && e.data().combo.indexOf('+r') > 0) {\n\t\t\treturn e.prevent();\n\t\t};\n\t};\n\t\n\ttag.prototype.hasLocalNotes = function (){\n\t\tconst note = this.space().model().usernotes(this.api().uid()).slice(-1)[0];\n\t\tif (!note || !note.isLocal()) { return false };\n\t\treturn this._lastUnsavedNote = note;\n\t};\n\t\n\ttag.prototype.saveCurrentFile = function (){\n\t\t// console.log 'saveCurrentFile'\n\t\tif (this.file()) { return this.file().quicksave() };\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, _t4;\n\t\tlet file = this.file();\n\t\tlet ext = file && file.ext();\n\t\t\n\t\tlet tip = \"Run code / Refresh\";\n\t\tif (ext == 'css') {\n\t\t\ttip = 'css is updated live';\n\t\t};\n\t\t\n\t\treturn this.$open(0).setChildren($.$ = $.$ || [\n\t\t\t_1(FilePath,$,0,this),\n\t\t\t_1('div',$,1,this).flag('tools').setContent([\n\t\t\t\t_1('shortcut',$,2,1).on$(0,['exec','saveCurrentFile'],this).setShortcut('command+s'),\n\t\t\t\t_1('div',$,3,1).flag('tool-button').flag('run').on$(0,['tap','run'],this).dataset('icon',\"play\").setShortcut('command+r').setContent($[4] || _1('b',$,4,3).setText('run'),2),\n\t\t\t\t\n\t\t\t\t// unless space.browser.visible\n\t\t\t\t_1('div',$,5,1).flag('tool-button').flag('toggleable').flag('browser').set('tip',\"Show/hide mini browser\",{tool:1}).set('shortcut',\"mod+shift+u\",{global:1}).dataset('icon',\"browsertool\").on$(0,['tap','toggleBrowser'],this).setContent($[6] || _1('b',$,6,5).setText('preview'),2),\n\t\t\t\t_1('div',$,7,1).flag('tool-button').flag('toggleable').flag('console').set('tip',\"Show/hide console\",{tool:1,tr:1}).set('shortcut',\"mod+shift+y\",{global:1}).dataset('icon',\"xsh\").on$(0,['tap','toggleConsole'],this).setContent($[8] || _1('b',$,8,7).setText('console'),2)\n\t\t\t// <scrim-user-avatar>\n\t\t\t],2)\n\t\t],2).synced((\n\t\t\t$[0].setData(file).end(),\n\t\t\t$[2].end(),\n\t\t\t$[3].set('tip',tip,{tool:1}).end(),\n\t\t\t$[5].flagIf('off',(!this.space().browser().visible())).end(),\n\t\t\t$[7].flagIf('off',(!this.space().console().enabled())).end()\n\t\t,true));\n\t};\n})\nexports.TitlebarView = TitlebarView;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\n\nvar PublishDialog = require('./PublishDialog').PublishDialog;\nvar uxa1$ = require('uxa1'), Menu = uxa1$.Menu, MenuItem = uxa1$.MenuItem;\nvar readArrayBuffer = require('../util/filereader').readArrayBuffer;\n\nvar TimelineMenu = _2.defineTag('TimelineMenu', Menu, function(tag){\n\t\n\ttag.prototype.timeline = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.branch = function (){\n\t\treturn this.data().branch();\n\t};\n\t\n\ttag.prototype.model = function (){\n\t\treturn this.branch().model();\n\t};\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.branch().space();\n\t};\n\t\n\ttag.prototype.hide = function (){\n\t\treturn this.trigger('uxa:hide');\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\treturn this.hide();\n\t};\n\t\n\ttag.prototype.playlist = function (){\n\t\tif (!window.store.playlist) {\n\t\t\treturn {};\n\t\t};\n\t\treturn window.store.playlist;\n\t};\n\t\n\ttag.prototype.uid = function (){\n\t\treturn window.store && window.store.uid || '';\n\t};\n\t\n\ttag.prototype.fork = async function (){\n\t\tlet data = this.space().clone();\n\t\tlet model = this.branch().model();\n\t\tdata.title = (\"Fork of \" + model.title.replace('Fork of',''));\n\t\tlet scrim = window.Player.Scrim.build(data);\n\t\treturn await scrim.persist();\n\t};\n\t\n\ttag.prototype.forkScrim = async function (){\n\t\tlet scrim = await this.fork();\n\t\treturn document.location.href = (\"/scrim/\" + (scrim.id));\n\t};\n\t\n\ttag.prototype.forkToPlaylist = async function (){\n\t\tvar self = this;\n\t\tlet scrim = await self.fork();\n\t\tlet pl = self.playlist();\n\t\tlet scrims = pl.scrims.map(function(i) { return i.id; });\n\t\tlet index = scrims.findIndex(function(s) { return s == self.model().id; });\n\t\tscrims.splice(index + 1,0,scrim.id);\n\t\tlet res = await window.$api.post((\"/playlist/\" + (pl.id) + \"/\"),{item_ids: scrims});\n\t\treturn document.location.href = (\"/scrim/\" + (scrim.id) + \"?pl=\" + (pl.id));\n\t};\n\t\n\ttag.prototype.cloneScrim = async function (){\n\t\tlet scrim = this.branch().model();\n\t\tlet buf = this.branch()._stream._buffer.slice(0);\n\t\tlet res = await window.$api.post((\"/scrims/\" + (scrim.id) + \"/clone\"),buf);\n\t\tconsole.log('returned',res,buf);\n\t\tif (res && res.id) {\n\t\t\tdocument.location.href = (\"/scrim/\" + (res.id));\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.downloadSlideSvg = async function (){\n\t\tconst slide = this.data().space().widgets().get(this.space().slides().currentSlideId());\n\t\tconst svg = await slide.fetchBody();\n\t\tconst blob = new Blob([svg.toString()]);\n\t\tconst url = window.URL.createObjectURL(blob);\n\t\tlet a = document.createElement('a');\n\t\tlet name = (\"\" + (this.branch().id()) + \"-slide-\" + (this.space().slides().currentSlideId()) + \"-\" + (slide.blobId()) + \".svg\");\n\t\ta.href = url;\n\t\ta.download = name;\n\t\tdocument.body.appendChild(a);\n\t\ta.click();\n\t\treturn a.remove();\n\t};\n\t\n\ttag.prototype.importSlide = function (){\n\t\tvar _t1, self = this;\n\t\tvar fileInput = (_1('input').setType(\"file\")).end();\n\t\t\n\t\tfileInput.dom().onchange = async function() {\n\t\t\tfor (let i = 0, items = iter$(fileInput.dom().files), len = items.length, file; i < len; i++) {\n\t\t\t\tfile = items[i];\n\t\t\t\tif (file.type.indexOf('svg') > -1) {\n\t\t\t\t\tvar body = await readArrayBuffer(file);\n\t\t\t\t\tconst slide = self.data().space().widgets().get(self.space().slides().currentSlideId());\n\t\t\t\t\t\n\t\t\t\t\tvar res = await window.fetch((\"/blobs/\" + (slide.blobId())),{credentials: 'include',\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\tbody: body,\n\t\t\t\t\theaders: {'Content-Type': 'application/octet-stream'}});\n\t\t\t\t};\n\t\t\t};\n\t\t\t\n\t\t\treturn Imba.commit();\n\t\t};\n\t\treturn fileInput.dom().click();\n\t};\n\t\n\ttag.prototype.editTimeline = function (){\n\t\treturn this.branch().startAnnotating();\n\t\t// trigger('annotate',branch)\n\t};\n\t\n\ttag.prototype.editMetadata = function (){\n\t\treturn this.space().view().dispatch('editscrim',this.branch().model()._raw);\n\t};\n\t\n\ttag.prototype.editEnv = function (){\n\t\treturn window.location.hash = 'env';\n\t};\n\t\n\ttag.prototype.updateTemplate = function (){\n\t\treturn this.branch().model().update({snapshot: this.space().trunk().toSnapshot()});\n\t};\n\t\n\ttag.prototype.startPublish = async function (){\n\t\tawait this.branch().publish({});\n\t\treturn console.log('published!!');\n\t};\n\ttag.prototype.unpublish = function (){\n\t\treturn this.branch().unpublish();\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\tvar canEdit = this.branch().model().can(this.api().user(),'edit');\n\t\treturn this.$open(0).flag('space-menu').setChildren([\n\t\t\t(!window.flags.contains('mod-embedded') && this.branch().parent()) ? (\n\t\t\t\t($[0] || _1('a',$,0,this).flag('action').setTarget(\"blank\").setText(\"Open in new page\")).setHref((\"/scrim/\" + (this.model().id))).end()\n\t\t\t) : void(0),\n\t\t\t(!window.flags.contains('mod-embedded') && canEdit) ? Imba.static([\n\t\t\t\t// if space.model.isPublished\n\t\t\t\t//\t<MenuItem[space.trunk] action='branchpublish' label=\"Re-publish\">\n\t\t\t\tthis.branch().isPublished() ? Imba.static([\n\t\t\t\t\t($[1] || _1('div',$,1,this).flag('action').on$(0,['tap','unpublish'],this).setText(\"Unpublish scrim\")),\n\t\t\t\t\t($[2] || _1('hr',$,2,this))\n\t\t\t\t],2,1) : (this.branch().canPublish() ? Imba.static([\n\t\t\t\t\t($[3] || _1('div',$,3,this).flag('action').on$(0,['tap','startPublish'],this).setText(\"Publish scrim\")),\n\t\t\t\t\t($[4] || _1('hr',$,4,this))\n\t\t\t\t],2,2) : void(0)),\n\t\t\t\t($[5] || _1('div',$,5,this).flag('action').on$(0,['tap','editMetadata'],this).setText(\"Edit metadata\")),\n\t\t\t\t(this.branch().type() == 'template' && this.branch().canContribute()) ? (\n\t\t\t\t\t($[6] || _1('div',$,6,this).flag('action').on$(0,['tap','updateTemplate'],this).setText(\"Update template\"))\n\t\t\t\t) : void(0),\n\t\t\t\t\n\t\t\t\t(this.space().slides().currentSlideId() && this.api().user().isTeacher()) ? (\n\t\t\t\t\t($[7] || _1('div',$,7,this).flag('action').on$(0,['tap','downloadSlideSvg'],this).setText(\"Download current slide\"))\n\t\t\t\t) : void(0),\n\t\t\t\t\n\t\t\t\t(this.space().slides().currentSlideId() && this.api().user().isTeacher()) ? (\n\t\t\t\t\t($[8] || _1('div',$,8,this).flag('action').on$(0,['tap','importSlide'],this).setText(\"Update current slide\"))\n\t\t\t\t) : void(0),\n\t\t\t\t\n\t\t\t\tthis.branch().hasRecordings() ? (\n\t\t\t\t\t($[9] || _1('div',$,9,this).flag('action').on$(0,['tap','editTimeline'],this).setText(\"Edit timeline\"))\n\t\t\t\t) : void(0),\n\t\t\t\t\n\t\t\t\t($[10] || _1('div',$,10,this).flag('action').on$(0,['tap','editEnv'],this).setText(\"Edit environment\")),\n\t\t\t\t($[11] || _1('hr',$,11,this)),\n\t\t\t\t($[12] || _1('div',$,12,this).flag('action').on$(0,['tap','cloneScrim'],this).setText(\"Create clone of Scrim\"))\n\t\t\t],1,3) : void(0),\n\t\t\twindow.flags.contains('mod-embedded') ? (\n\t\t\t\t($[13] || _1('div',$,13,this).flag('action').on$(0,['tap','editEnv'],this).setText(\"Edit environment\"))\n\t\t\t\t// <a.action href=\"https://scrimba.com/scrim/{model:id}\" target=\"_blank\"> \"See edits on scrimba.com\"\n\t\t\t) : (\n\t\t\t\t($[14] || _1('div',$,14,this).flag('action').on$(0,['tap','forkScrim'],this).setText(\"Fork to new Scrim\"))\n\t\t\t),\n\t\t\t\n\t\t\t(!window.flags.contains('mod-embedded') && this.playlist() && this.playlist().uid == this.uid()) ? (\n\t\t\t\t($[15] || _1('div',$,15,this).flag('action').on$(0,['tap','forkToPlaylist'],this).setText(\"Fork to Playlist\"))\n\t\t\t) : void(0)\n\t\t\n\t\t// <.action :tap.addDependency> \"Add dependency...\"\n\t\t// <.action :tap.importDependenciesFromFile> \"Import package.json\"\n\t\t\n\t\t// <hr>\n\t\t// <MenuItem action='spacezip' label=\"Download .zip\">\n\t\t// <.action :click.forkScrim> 'Fork scrim'\n\t\t// <MenuItem action='spacefork' label=\"Fork workspace\">\n\t\t// if space.trunk.isMine and space.model.isTutorial\n\t\t//\t<MenuItem action='spaceclone' label=\"Clone cast\">\n\t\t],1).synced();\n\t};\n})\nexports.TimelineMenu = TimelineMenu;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/), _2 = Imba.createElementFactory(/*SCOPEID*/);\nvar TimelineMenu = require('./TimelineMenu').TimelineMenu;\n\n_1.defineTag('graph:line');\n\n_1.defineTag('graph:track', 'graph:line');\n\n_1.defineTag('graph:progress-track', 'graph:track');\n\n_1.defineTag('graph:connector', 'graph:line');\n\n_1.defineTag('graph:point');\n\n_1.defineTag('graph:anchor', 'graph:point');\n\n_1.defineTag('graph:base');\n\n_1.defineTag('graph:timeline', function(tag){\n\t\n\ttag.prototype.__width = {'default': -1,watch: 'widthDidSet',name: 'width'};\n\ttag.prototype.width = function(v){ return this._width; }\n\ttag.prototype.setWidth = function(v){\n\t\tvar a = this.width();\n\t\tif(v != a) { this._width = v; }\n\t\tif(v != a) { this.widthDidSet && this.widthDidSet(v,a,this.__width) }\n\t\treturn this;\n\t}\n\ttag.prototype._width = -1;\n\t\n\ttag.prototype.branch = function (){\n\t\treturn this.data().branch();\n\t};\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.branch().space();\n\t};\n\t\n\ttag.prototype.currentDepth = function (){\n\t\treturn this.data().branch().currentNestingLevel();\n\t};\n\t\n\ttag.prototype.calcTrackWidth = function (){\n\t\tlet dur = this.data().duration();\n\t\tlet level = this.currentDepth();\n\t\tlet prev = this.dom().previousElementSibling;\n\t\tlet width = (level == -1) ? 0 : ((this.branch().parent() ? 180 : (-1))); // Math.round(Math.min(dur / 10,800))\n\t\t\n\t\tif (width != 0 && this.data().isLive()) {\n\t\t\twidth = 0;\n\t\t};\n\t\t\n\t\tif (width == -1) {\n\t\t\twidth = prev && prev.offsetWidth || (window.innerWidth - 194);\n\t\t};\n\t\t\n\t\t\n\t\t// console.log 'calcTrackWidth',width,level,dur,data.isLive\n\t\treturn width;\n\t};\n\t\n\ttag.prototype.togglePlay = function (tl){\n\t\t// console.log 'toggle play',tl\n\t\tif(tl === undefined) tl = this.data();\n\t\tif (this.space().isRecording()) {\n\t\t\treturn this.trigger('recstop',this.space().branch());\n\t\t} else {\n\t\t\treturn tl.isPaused() ? tl.play() : tl.pause();\n\t\t};\n\t};\n\t\n\ttag.prototype.toggleRecording = function (){\n\t\tif (this.space().isRecording()) {\n\t\t\treturn this.trigger('recstop',this.space().branch());\n\t\t} else {\n\t\t\treturn this.trigger('recstart',this.space().branch());\n\t\t};\n\t};\n\t\n\ttag.prototype.discardBranch = function (){\n\t\tthis.branch().discard();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.saveBranch = async function (){\n\t\tif (!window.store.user) {\n\t\t\tdocument.location.hash = '#sign-in';\n\t\t\treturn this;\n\t\t};\n\t\t\n\t\tawait this.branch().persist();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.ontouchstart = function (t){\n\t\tlet tl = t.sourceTarget().closest('._graph-timeline');\n\t\tif (!(tl && tl == this)) { return }; // data.branch.isCurrentBranch # and (data.isPlaying or data.isPaused)\n\t\tif (t.sourceTarget().closest('.marker-desc,.pb-controls,.tool')) { return };\n\t\tif (this.data().isRecording() || this.branch().isEditing()) { return };\n\t\t\n\t\tthis._box = this._bounds.dom().getBoundingClientRect();\n\t\tthis.flag('seeking');\n\t\treturn t.capture();\n\t};\n\t\n\ttag.prototype.ontouchupdate = function (t){\n\t\tif (!this._box) { return };\n\t\tlet progress = (t.x() - this._box.left) / this._box.width;\n\t\tthis.data().setState('seeking');\n\t\tthis.seek(Math.max(Math.min(progress,1),0));\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.ontouchend = function (t){\n\t\tif (!this._box) { return };\n\t\tlet progress = (t.x() - this._box.left) / this._box.width;\n\t\tlet pct = Math.max(Math.min(progress,1),0);\n\t\t\n\t\tif (pct >= 0.99 && !this.branch().isEnded()) {\n\t\t\tthis.data().seek(this.data().endOffset());\n\t\t\tthis.data().pause();\n\t\t\t\n\t\t\t// go live if we are currently editing?\n\t\t\t// (branch.isLive or branch.isHosting) ? data.goLive : data.pause\n\t\t} else {\n\t\t\tthis.data().setState(this.data().playState());\n\t\t};\n\t\t\n\t\tthis.unflag('seeking');\n\t\tthis._box = null;\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.widthDidSet = function (width,prev){\n\t\tvar self = this;\n\t\tvar delta = Math.abs(width - prev);\n\t\t\n\t\tif (delta > 18) {\n\t\t\tclearTimeout(self._animTimeout);\n\t\t\tself.flag('animated');\n\t\t\tself._animTimeout = setTimeout(function() { return self.unflag('animated'); },1000);\n\t\t};\n\t\t\n\t\tself.cssvars().set({trackwidth: width});\n\t\t\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.seek = function (progress){\n\t\tvar time = progress * this.data().duration();\n\t\tthis.data().seek(this.data().timeToOffset(time));\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.color = function (){\n\t\treturn this.data().color();\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, _t4, self = this;\n\t\tlet tl = self.data();\n\t\tlet branch = tl.branch();\n\t\tlet lvl = branch.level();\n\t\tlet dur = self.data().duration() || 0;\n\t\tlet time = Math.min(dur,self.data().currentTime() || 0);\n\t\tlet width = self.calcTrackWidth();\n\t\tlet distance = self.currentDepth();\n\t\tlet progress = (dur == 0 || self.data().isLive()) ? 1 : Math.min(time / dur,1);\n\t\tlet playIcon = (tl.isPlaying() ? 'pause' : ((tl.isLive() ? 'pause' : 'play')));\n\t\tlet showPlayback = branch.hasRecordings() && !tl.isRecording();\n\t\tlet isRecording = tl.isRecording();\n\t\tlet rectip = tl.isRecording() ? \"Stop recording\" : \"Start recording\";\n\t\tself.setWidth(width);\n\t\tself.cssvars().set({progress: progress,nesting: distance});\n\t\tself.flag('is-current',self.data().branch().isCurrentBranch());\n\t\tself.flag('in-chain',distance >= 0);\n\t\tself.flag('not-in-chain',!(distance >= 0));\n\t\tself.setFlag('state',self.data().state());\n\t\t\n\t\tself.flag('recording',self.data().isRecording());\n\t\treturn self.$open(0).setFlag(-1,self.color()).setFlag(-2,(\"level\" + lvl)).setChildren($.$ = $.$ || [\n\t\t\t_2('div',$,0,self).flag('pb-controls').on$(0,['tap','stop','prevent'],self).setContent([\n\t\t\t\t// <.tool.close icon='arrow-down-left'>\n\t\t\t\t_2('div',$,1,0).flag('toolgroup').flag('save').setContent([\n\t\t\t\t\t_2('div',$,2,1).flag('tool').flag('red').on$(0,['tap','stop','prevent','discardBranch'],self).setIcon('x').set('tip',\"Discard note/branch\",{tool:1}),\n\t\t\t\t\t_2('div',$,3,1).flag('tool').flag('green').on$(0,['tap','saveBranch'],self).setIcon('check').set('tip',\"Save note/branch\",{tool:1})\n\t\t\t\t],2),\n\t\t\t\t_2('div',$,4,0).flag('tool').flag('rec').on$(0,['tap','toggleRecording'],self),\n\t\t\t\t_2('div',$,5,0).flag('tool').flag('pb').flag('blue')\n\t\t\t],2),\n\t\t\tself._bounds = self._bounds||_2('graph:track',self).flag('bounds').flag('duration'),\n\t\t\t_2('graph:progress-track',$,6,self).flag('progress'),\n\t\t\t_2('graph:progress-marker',$,7,self).flag('progress'),\n\t\t\t_2('graph:head-marker',$,8,self),\n\t\t\t\n\t\t\t_2('div',$,9,self).flag('branches').flag('contents')\n\t\t],2).synced((\n\t\t\t$[0].setFlag(0,(\"level\" + lvl)).end((\n\t\t\t\t$[1].flagIf('hide',(!branch.isLocal() || lvl == 0)).end((\n\t\t\t\t\t$[2].flagIf('hide',(!branch.isLocal() || lvl == 0)).end(),\n\t\t\t\t\t$[3].flagIf('hide',(!branch.isLocal() || lvl == 0)).end()\n\t\t\t\t,true)),\n\t\t\t\t$[4].flagIf('tiny',(!branch.hasRecordings() && lvl != 0)).flagIf('active',(tl.isRecording())).flagIf('hide',(!branch.canRecord())).set('tip',rectip,{tool:1}).end(),\n\t\t\t\t$[5].flagIf('hide',(!showPlayback)).on$(0,['tap',['togglePlay',self.data()]],self).setIcon(playIcon).end()\n\t\t\t,true)),\n\t\t\tself._bounds.end(),\n\t\t\t$[6].end(),\n\t\t\t$[7].bindData(self,'data',[]).setFlag(0,self.data().state()).end(),\n\t\t\t$[8].bindData(self,'data',[]).setFlag(0,(\"level\" + lvl)).set('depth',distance).end(),\n\t\t\t$[9].setContent((function tagLoop($$) {\n\t\t\t\tfor (let i = 0, items = iter$(self.data().branch().branches()), len = items.length; i < len; i++) {\n\t\t\t\t\t$$.push(items[i].markerView().end());\n\t\t\t\t\t// <graph:branch[branch].branch.angled>\n\t\t\t\t};return $$;\n\t\t\t})([]),3)\n\t\t,true));\n\t};\n});\n\n_1.defineTag('graph:root', 'graph:timeline', function(tag){\n\t\n\ttag.prototype.__pivot = {watch: 'pivotDidSet',name: 'pivot'};\n\ttag.prototype.pivot = function(v){ return this._pivot; }\n\ttag.prototype.setPivot = function(v){\n\t\tvar a = this.pivot();\n\t\tif(v != a) { this._pivot = v; }\n\t\tif(v != a) { this.pivotDidSet && this.pivotDidSet(v,a,this.__pivot) }\n\t\treturn this;\n\t}; // which branch to follow\n\t\n\ttag.prototype.color = function (){\n\t\treturn this.data().color();\n\t};\n\t\n\ttag.prototype.commit = function (){\n\t\ttag.prototype.__super__.commit.apply(this,arguments);\n\t\tthis.setPivot(this.data().space().branch());\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.onfocusmarker = function (e,marker){\n\t\tlet box = marker.dom().getBoundingClientRect();\n\t\tlet ref = this.dom().getBoundingClientRect();\n\t\tlet x = Math.round(box.left - ref.left);\n\t\t// console.log box,ref,x\n\t\treturn this;\n\t\t// cssvars.set(scrollx: x)\n\t};\n\t\n\ttag.prototype.pivotDidSet = function (pivot,prev){\n\t\tthis.dom().offsetWidth;\n\t\tif (pivot && pivot != this.data().space().trunk()) {\n\t\t\tpivot.markerView().focus();\n\t\t} else {\n\t\t\tthis.cssvars().set({scrollx: 0});\n\t\t};\n\t\t\n\t\treturn this;\n\t};\n});\n\n_1.defineTag('graph:marker', function(tag){\n\t\n\ttag.prototype.__expanded = {watch: 'expandedDidSet',name: 'expanded'};\n\ttag.prototype.expanded = function(v){ return this._expanded; }\n\ttag.prototype.setExpanded = function(v){\n\t\tvar a = this.expanded();\n\t\tif(v != a) { this._expanded = v; }\n\t\tif(v != a) { this.expandedDidSet && this.expandedDidSet(v,a,this.__expanded) }\n\t\treturn this;\n\t};\n\ttag.prototype.timeline = function(v){ return this._timeline; }\n\ttag.prototype.setTimeline = function(v){ this._timeline = v; return this; };\n\ttag.prototype.color = function(v){ return this._color; }\n\ttag.prototype.setColor = function(v){ this._color = v; return this; };\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, _t4, t0;\n\t\treturn this.$open(0).setFlag(-1,this.color()).setChildren($.$ = $.$ || [\n\t\t\t_2('graph:anchor',$,0,this).flag('anchor'),\n\t\t\t_2('graph:connector',$,1,this).flag('line'),\n\t\t\tt0 = (t0=_2('graph:base',$,2,this))\n\t\t],2).synced((\n\t\t\t$[0].end(),\n\t\t\t$[1].end(),\n\t\t\t$[2].setContent([\n\t\t\t\t($[3] || _2('graph:point',$,3,2).flag('base')).end(),\n\t\t\t\t($[4] || _2('div',$,4,2).flag('marker-desc').setContent($[5] || _2('div',$,5,4).flag('state'),2)),\n\t\t\t\tthis.timeline() ? (\n\t\t\t\t\t(this._tl = this._tl||_2('graph:timeline',t0).flag('tl')).bindData(this,'timeline',[]).end()\n\t\t\t\t) : void(0)\n\t\t\t],1).end()\n\t\t,true));\n\t};\n\t\n\ttag.prototype.focus = function (){\n\t\treturn this.trigger('focusmarker',this);\n\t};\n\t\n\ttag.prototype.expandedDidSet = function (bool){\n\t\treturn this.flag('expanded',!!bool);\n\t};\n});\n\n_1.defineTag('graph:progress-marker', 'graph:marker', function(tag){\n\t\n\ttag.prototype.color = function (){\n\t\treturn this.data().color();\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\treturn this.$open(0).setFlag(-1,this.color()).setChildren(\n\t\t\t$[0] || _2('graph:anchor',$,0,this)\n\t\t,2).synced((\n\t\t\t$[0].end()\n\t\t,true));\n\t\t//\t<graph:connector>\n\t\t//\t<graph:base>\n\t\t//\t\t<graph:point.base>\n\t\t//\t\t# <.marker-desc>\n\t\t//\t\t#\tif data.isRecording\n\t\t//\t\t#\t\t<.state> \"RECORDING\"\n\t\t//\t\t#\telif data.isLive\n\t\t//\t\t#\t\t<.state> \"LIVE\"\n\t};\n});\n\n_1.defineTag('graph:head-marker', 'graph:marker', function(tag){\n\ttag.prototype.depth = function(v){ return this._depth; }\n\ttag.prototype.setDepth = function(v){ this._depth = v; return this; };\n\t\n\ttag.prototype.color = function (){\n\t\treturn this.data().color();\n\t};\n\t\n\ttag.prototype.goLive = function (){\n\t\treturn this.data().goLive();\n\t};\n\t\n\ttag.prototype.branch = function (){\n\t\treturn this.data().branch();\n\t};\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.branch().space();\n\t};\n\t\n\tObject.defineProperty(tag.prototype,'remaining',{get: function(){\n\t\treturn Math.max(0,this.data().duration() - this.data().currentTime());\n\t}, configurable: true});\n\t\n\ttag.prototype.discardBranch = function (){\n\t\tthis.branch().discard();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.saveBranch = async function (){\n\t\tconsole.log('saving branch!');\n\t\tawait this.branch().persist();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.showMenu = function (e){\n\t\tvar _t1;\n\t\te.uxa().open((_2(TimelineMenu).flag('sm')).bindData(this,'data',[]).end());\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, _t4, _t5;\n\t\tlet branch = this.data().branch();\n\t\tlet nestedNote = branch.isNote() && branch.parent();\n\t\tlet saveOrDiscard = nestedNote && branch.isLocal();\n\t\t\n\t\t// var rec = data.branch.stream.recording\n\t\t// <.tool.red icon='trash-2' :tap.discardBranch tip.tool=\"Discard note\">\n\t\t// <.tool.green icon='save' :tap.saveBranch tip.tool=\"Save note\">\n\t\t\n\t\treturn this.$open(0).setFlag(-1,this.color()).setFlag(-2,this.data().state()).flagIf('recording',(this.data().branch().isRecording())).setChildren($.$ = $.$ || [\n\t\t\t_2('graph:anchor',$,0,this).flag('anchor'),\n\t\t\t_2('graph:connector',$,1,this).flag('line'),\n\t\t\t_2('graph:base',$,2,this).setContent([\n\t\t\t\t_2('graph:point',$,3,2).flag('pulse'),\n\t\t\t\t_2('graph:point',$,4,2).flag('base'),\n\t\t\t\t_2('div',$,5,2).flag('marker-desc')\n\t\t\t],2)\n\t\t],2).synced((\n\t\t\t$[0].end(),\n\t\t\t$[1].end(),\n\t\t\t$[2].end((\n\t\t\t\t$[3].end(),\n\t\t\t\t$[4].end(),\n\t\t\t\t$[5].setContent([\n\t\t\t\t\t\n\t\t\t\t\tthis.data().isRecording() ? (\n\t\t\t\t\t\t($[6] || _2('div',$,6,5).flag('time').flag('red')).setContent(this.util().msToStr(this.space().recording().duration()),3)\n\t\t\t\t\t\t// <.time.duration> util.msToStr(rec.duration,yes)\n\t\t\t\t\t) : ((branch.isNote() && branch.parent() && !branch.hasRecordings()) ? (\n\t\t\t\t\t\t($[7] || _2('div',$,7,5).flag('state').flag('title-state').setText(\"Note\")) // data.branch.model:title\n\t\t\t\t\t) : ((branch.isLive() && branch.isMine()) ? (\n\t\t\t\t\t\t($[8] || _2('div',$,8,5).flag('state').setText(\"EDITING\"))\n\t\t\t\t\t) : (branch.isLive() ? (\n\t\t\t\t\t\t($[9] || _2('div',$,9,5).flag('state').on$(0,['tap','goLive'],this).setText(\"LIVE\"))\n\t\t\t\t\t) : (\n\t\t\t\t\t\t($[10] || _2('div',$,10,5).flag('time')).setText(\"-\" + this.util().msToStr(this.remaining))\n\t\t\t\t\t)))),\n\t\t\t\t\t\n\t\t\t\t\t// only\n\t\t\t\t\t($[11] || _2('div',$,11,5).flag('marker-controls').setContent( // external-link\n\t\t\t\t\t\t// <.tool.red .hide=(!saveOrDiscard) icon='x' :tap.stop.prevent.discardBranch tip.tool=\"Discard note\">\n\t\t\t\t\t\t// <.tool.green .hide=(!saveOrDiscard) icon='check' :tap.stop.prevent.saveBranch tip.tool=\"Save note\">\n\t\t\t\t\t\t// <a.tool.neutral .hide=(branch.level == 0 or branch.isLocal) icon='link-2' href=branch.model:url tip.tool=\"Open in new\">\n\t\t\t\t\t\t// <.tool.neutral.sm .hide=(branch.level == 0 or branch.isLocal) icon='settings'>\n\t\t\t\t\t\t// <.tool.neutral.sm .hide=(branch.level == 0 or branch.isLocal) icon='more-vertical'>\n\t\t\t\t\t\t$[12] || _2('div',$,12,11).flag('tool').flag('neutral').flag('sm').setIcon('more-horizontal').on$(0,['tap','stop','showMenu'],this)\n\t\t\t\t\t// <.tool.neutral .hide=(branch.level == 0 or branch.isLocal) icon='menu'>\n\t\t\t\t\t,2)).end((\n\t\t\t\t\t\t$[12].flagIf('hide',(this.space().isRecording() || branch.isLocal())).end()\n\t\t\t\t\t,true))\n\t\t\t\t],1)\n\t\t\t,true))\n\t\t,true));\n\t};\n});\n\n\n_1.defineTag('graph:branch-marker', 'graph:marker', function(tag){\n\t\n\ttag.prototype.ontouchstart = function (t){\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.timeline = function (){\n\t\treturn this.data().timeline();\n\t};\n\t\n\ttag.prototype.color = function (){\n\t\treturn this.timeline().color(); // data.isCurrentBranch ? timeline.color : 'yellow'\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\tthis.data().enter();\n\t\treturn e.stop();\n\t\t// focus\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\t// wait for the parent\n\t\tvar v_;\n\t\tif (!this.data().parent()) { return };\n\t\tthis.cssvars().set('offset',this.data().parent().timeline().offsetToProgress(this.data().seedOffset()));\n\t\ttag.prototype.__super__.render.apply(this,arguments);\n\t\t\n\t\tif (this.dom().parentNode) {\n\t\t\tif (!this._inserted) {\n\t\t\t\tthis._inserted = true;\n\t\t\t\tthis._tl.setFlag('state','init');\n\t\t\t\tthis.dom().offsetHeight;\n\t\t\t\tthis._tl.setFlag('state',this.timeline().state());\n\t\t\t};\n\t\t\t\n\t\t\tthis.flag('is-current',this.data().isCurrentBranch());\n\t\t\treturn (this.setExpanded(v_ = this.data().currentNestingLevel() >= 0),v_);\n\t\t};\n\t};\n});\n", "var Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/), _2 = Imba.createElementFactory(/*SCOPEID*/);\n\nvar InterfaceView = require('./InterfaceView').InterfaceView;\n\nrequire('./GraphView');\n\nvar Tool = _1.defineTag('Tool');\n\nvar SpaceControls = _1.defineTag('SpaceControls', InterfaceView, function(tag){\n\t\n\ttag.prototype.trunk = function (){\n\t\treturn this.space().trunk();\n\t};\n\t\n\t// def toggleRecording\n\t//\ttimeline.recording = !timeline.recording\n\t\n\ttag.prototype.skipInTimeline = function (delta){\n\t\tif(delta === undefined) delta = 0;\n\t\treturn this.timeline().skip(delta);\n\t};\n\t\n\ttag.prototype.increasePlaybackRate = function (){\n\t\tvar v_;\n\t\treturn (this.timeline().setPlaybackRate(v_ = Math.min(this.timeline().playbackRate() + 0.1,4)),v_);\n\t};\n\t\n\ttag.prototype.decreasePlaybackRate = function (){\n\t\tvar v_;\n\t\treturn (this.timeline().setPlaybackRate(v_ = Math.max(this.timeline().playbackRate() - 0.1,0.5)),v_);\n\t};\n\t\n\ttag.prototype.leaveBranch = function (){\n\t\tif (this.branch().parent()) {\n\t\t\tthis.branch().parent().enter();\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.discardBranch = function (){\n\t\tlet parent = this.branch().parent();\n\t\tthis.branch().discard();\n\t\tif (parent) { parent.enter() };\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.saveBranch = async function (){\n\t\tawait this.branch().persist();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.togglePlay = function (tl){\n\t\t// console.log 'toggle play',tl\n\t\tif(tl === undefined) tl = this.timeline();\n\t\tif (this.space().isRecording()) {\n\t\t\treturn this.trigger('recstop',this.space().branch());\n\t\t} else {\n\t\t\treturn tl.isPaused() ? tl.play() : tl.pause();\n\t\t};\n\t};\n\t\n\ttag.prototype.toggleRecording = function (){\n\t\tif (this.space().isRecording()) {\n\t\t\treturn this.trigger('recstop',this.space().branch());\n\t\t} else {\n\t\t\treturn this.trigger('recstart',this.space().branch());\n\t\t};\n\t};\n\t\n\ttag.prototype.stopRecording = function (){\n\t\treturn this.trigger('recstop',this.space().branch());\n\t};\n\t\n\ttag.prototype.toggleBrushup = function (){\n\t\tif (this.space().branch().isAnnotating()) {\n\t\t\tthis.trigger('brushupstop');\n\t\t} else {\n\t\t\tthis.trigger('annotate',this.space().branch());\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.openInNewTab = function (){\n\t\tif (this.space().branch().parent()) {\n\t\t\t// make sure it is saved?\n\t\t\tdocument.location.href = this.space().branch().model().url;\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.pressedBackspace = function (){\n\t\t// console.log 'pressed backspace!!'\n\t\treturn true;\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3;\n\t\tlet branch = this.space().trunk();\n\t\tlet tl = branch.timeline();\n\t\tlet playIcon = (tl.isPlaying() ? 'pause' : ((tl.isLive() ? 'pause' : 'play')));\n\t\t\n\t\tlet prepping = tl.duration() == 0 || !tl.branch().hasRecordings();\n\t\t\n\t\tif (tl.duration() == 0 || !tl.branch().hasRecordings()) {\n\t\t\tplayIcon = 'activity';\n\t\t};\n\t\t\n\t\tif (this.space().isRecording()) {\n\t\t\tplayIcon = 'square';\n\t\t};\n\t\t\n\t\tlet inNestedNote = branch.isNote() && branch.parent();\n\t\t\n\t\tif (inNestedNote) {\n\t\t\tplayIcon = 'bookmark';\n\t\t};\n\t\t\n\t\treturn this.$open(0).setChildren($.$ = $.$ || [\n\t\t\t_2('div',$,0,this).flag('shortcuts'),\n\t\t\t\n\t\t\t// <.tool.blue.fill :tap.play icon='play.filled'>\n\t\t\t_2('div',$,7,this).flag('tools').flag('left'),\n\t\t\t// <.tool.back.lg .hidden=(!branch.parent) :tap.leaveBranch icon='arrow-left' tip.tool=\"Back to Scrim\">\n\t\t\t// <.tool icon='skip-back' .disabled=(timeline.isLive)>\n\t\t\t// if inNestedNote\n\t\t\t//\t<.tool.pb.lg.blue :tap.togglePlay(branch.parent.timeline) icon='play'>\n\t\t\t// elif space.isRecording\n\t\t\t//\t<.tool.pb.lg.red :tap.stopRecording icon='square' tip.tool=\"Stop recording\">\n\t\t\t// elif prepping\n\t\t\t//\t<.tool.pb.lg.yellow icon='activity'>\n\t\t\t// else\n\t\t\t//\t<.tool.pb.lg.blue :tap.togglePlay(tl) icon=play-icon>\n\t\t\t// <.tool icon='skip-forward' .disabled=(timeline.isLive)>\n\t\t\t_2('div',$,8,this).flag('track-placeholder'),\n\t\t\t_2('graph:root',$,9,this),\n\t\t\t_2('div',$,10,this).flag('tools').flag('right').setContent(\n\t\t\t\t// <gs:microphone[api.mic].tool>\n\t\t\t\t// <.tool.rec :tap.toggleRecording .hidden=(!space.isEditingHost) icon='disc'>\n\t\t\t\t// <gs:microphone[api.mic].tool .hidden=(App.currentCall)>\n\t\t\t\t// <.tool.neutral :tap.toggleMic icon='mic'>\n\t\t\t\t// <.tool.neutral .hidden=(App.currentCall) :tap.inviteUser icon='user-plus'>\n\t\t\t\t// <.tool.neutral icon='compass'>\n\t\t\t\t// <.tool.neutral icon='terminal'>\n\t\t\t\t\n\t\t\t\t// if branch.canRecord\n\t\t\t\t//\t<.tool.rec :tap.toggleRecording icon='disc' tip.tool=\"Start Recording\">\n\t\t\t\t// if branch.canAnnotate\n\t\t\t\t//\t<.tool.neutral icon='crop' :tap.toggleBrushup tip.tool=\"Edit Timeline\"> # <span> \"\uD83D\uDE00\"\n\t\t\t\t// <.tool.neutral icon='volume-1'>\n\t\t\t\t// <.tool.neutral icon='more-vertical' tip.tool=\"More actions...\">\n\t\t\t\t$[11] || _2('scrim-player-controls',$,11,10)\n\t\t\t// <scrim-editor-menu>\n\t\t\t// <scrim-editor-menu>\n\t\t\t// <.tool.neutral icon='copy' tip.tool=\"Fork Scrim\">\n\t\t\t// <.tool.neutral icon='edit' tip.tool=\"Create note\">\n\t\t\t// <.tool.neutral icon='download' tip.tool=\"Download as zip\">\n\t\t\t\n\t\t\t// <.tool.neutral icon='map-pin'> # <span> \"\uD83D\uDE00\"\n\t\t\t// <.tool.neutral :tap.broadcastState icon='rss'>\n\t\t\t,2)\n\t\t],2).synced((\n\t\t\t$[0].setContent([\n\t\t\t\t($[1] || _2('shortcut',$,1,0).set('shortcut',\"backspace\",{prevent:1}).on$(0,['exec','pressedBackspace'],this)).end(),\n\t\t\t\t\n\t\t\t\t(!this.timeline().isLive()) ? Imba.static([\n\t\t\t\t\t($[2] || _2('shortcut',$,2,0).setShortcut(\"left\")).on$(0,['exec',['skipInTimeline',-10000]],this).end(),\n\t\t\t\t\t($[3] || _2('shortcut',$,3,0).setShortcut(\"right\").on$(0,['exec',['skipInTimeline',10000]],this)).end(),\n\t\t\t\t\t($[4] || _2('shortcut',$,4,0).setShortcut(\"shift+left\").on$(0,['exec','decreasePlaybackRate'],this)).end(),\n\t\t\t\t\t($[5] || _2('shortcut',$,5,0).setShortcut(\"shift+right\").on$(0,['exec','increasePlaybackRate'],this)).end(),\n\t\t\t\t\t($[6] || _2('shortcut',$,6,0).setShortcut(\"space\")).on$(0,['exec',['togglePlay',tl]],this).end()\n\t\t\t\t],2,1) : void(0)\n\t\t\t],1),\n\t\t\t$[7].setFlag(0,this.timeline().color()).setFlag(1,(\"tl-\" + (tl.state()))).setFlag(2,(\"branch-\" + (branch.state()))),\n\t\t\t$[9].bindData(this.trunk(),'timeline',[]).end(),\n\t\t\t$[11].end()\n\t\t,true));\n\t};\n})\nexports.SpaceControls = SpaceControls;\n", "/*! Player.js - v0.1.0 - 2017-10-24\n* http://github.com/embedly/player.js\n* Copyright (c) 2017 Embedly; Licensed BSD */\n(function(window, document){\nvar playerjs = {};\n\nplayerjs.DEBUG = false;\nplayerjs.VERSION = '0.0.11';\nplayerjs.CONTEXT = 'player.js';\nplayerjs.POST_MESSAGE = !!window.postMessage;\n\n/*\n* Utils.\n*/\nplayerjs.origin = function(url){\n // Grab the origin of a URL\n if (url.substr(0, 2) === '//'){\n url = window.location.protocol + url;\n }\n\n return url.split('/').slice(0,3).join('/');\n};\n\nplayerjs.addEvent = function(elem, type, eventHandle) {\n if (!elem) { return; }\n if ( elem.addEventListener ) {\n elem.addEventListener( type, eventHandle, false );\n } else if ( elem.attachEvent ) {\n elem.attachEvent( \"on\" + type, eventHandle );\n } else {\n elem[\"on\"+type]=eventHandle;\n }\n};\n\n// usage: log('inside coolFunc',this,arguments);\n// http://paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/\nplayerjs.log = function(){\n playerjs.log.history = playerjs.log.history || []; // store logs to an array for reference\n playerjs.log.history.push(arguments);\n if(window.console && playerjs.DEBUG){\n window.console.log( Array.prototype.slice.call(arguments) );\n }\n};\n\n// isFunctions\nplayerjs.isString = function (obj) {\n return Object.prototype.toString.call(obj) === '[object String]';\n};\n\nplayerjs.isObject = function(obj){\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n};\n\nplayerjs.isArray = function(obj){\n return Object.prototype.toString.call(obj) === \"[object Array]\";\n};\n\nplayerjs.isNone = function(obj){\n return (obj === null || obj === undefined);\n};\n\nplayerjs.has = function(obj, key){\n return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\n// ie8 doesn't support indexOf in arrays, based on underscore.\nplayerjs.indexOf = function(array, item) {\n if (array == null){ return -1; }\n var i = 0, length = array.length;\n if (Array.prototype.IndexOf && array.indexOf === Array.prototype.IndexOf) {\n return array.indexOf(item);\n }\n for (; i < length; i++) {\n if (array[i] === item) { return i; }\n }\n return -1;\n};\n\n// Assert\nplayerjs.assert = function(test, msg) {\n if (!test) {\n throw msg || \"Player.js Assert Failed\";\n }\n};\n/*\n* Keeper is just a method for keeping track of all the callbacks.\n*/\n\nplayerjs.Keeper = function(){\n this.init();\n};\n\nplayerjs.Keeper.prototype.init = function(){\n this.data = {};\n};\n\nplayerjs.Keeper.prototype.getUUID = function(){\n // Create a random id. #http://stackoverflow.com/a/2117523/564191\n return 'listener-xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);\n return v.toString(16);\n });\n};\n\nplayerjs.Keeper.prototype.has = function(event, id){\n if (!this.data.hasOwnProperty(event)){\n return false;\n }\n\n if (playerjs.isNone(id)){\n return true;\n }\n\n // Figure out if we have the event.\n var events = this.data[event];\n\n for (var i = 0; i < events.length; i++){\n if (events[i].id === id){\n return true;\n }\n }\n\n return false;\n};\n\nplayerjs.Keeper.prototype.add = function(id, event, cb, ctx, one){\n var d = {\n id: id,\n event: event,\n cb: cb,\n ctx: ctx,\n one: one\n };\n\n if (this.has(event)){\n this.data[event].push(d);\n } else {\n this.data[event] = [d];\n }\n};\n\nplayerjs.Keeper.prototype.execute = function(event, id, data, ctx){\n if (!this.has(event, id)){\n return false;\n }\n\n var keep = [],\n execute = [];\n\n for (var i=0; i< this.data[event].length; i++){\n var d = this.data[event][i];\n\n // There are omni events, in that they do not have an id. i.e \"ready\".\n // Or there is an ID and we only want to execute the right id'd method.\n if (playerjs.isNone(id) || (!playerjs.isNone(id) && d.id === id )){\n\n execute.push({\n cb: d.cb,\n ctx: d.ctx? d.ctx: ctx,\n data: data\n });\n\n // If we only wanted to execute this once.\n if (d.one === false){\n keep.push(d);\n }\n } else {\n keep.push(d);\n }\n }\n\n if (keep.length === 0){\n delete this.data[event];\n } else {\n this.data[event] = keep;\n }\n\n // We need to execute everything after we deal with the one stuff. otherwise\n // we have issues to order of operations.\n for (var n=0; n < execute.length; n++){\n var e = execute[n];\n e.cb.call(e.ctx, e.data);\n }\n};\n\nplayerjs.Keeper.prototype.on = function(id, event, cb, ctx){\n this.add(id, event, cb, ctx, false);\n};\n\nplayerjs.Keeper.prototype.one = function(id, event, cb, ctx){\n this.add(id, event, cb, ctx, true);\n};\n\nplayerjs.Keeper.prototype.off = function(event, cb){\n // We should probably restructure so this is a bit less of a pain.\n var listeners = [];\n\n if (!this.data.hasOwnProperty(event)){\n return listeners;\n }\n\n var keep = [];\n\n // Loop through everything.\n for (var i=0; i< this.data[event].length; i++){\n var data = this.data[event][i];\n // If we only keep if there was a CB and the CB is there.\n if (!playerjs.isNone(cb) && data.cb !== cb) {\n keep.push(data);\n } else if (!playerjs.isNone(data.id)) {\n listeners.push(data.id);\n }\n }\n\n if (keep.length === 0){\n delete this.data[event];\n } else {\n this.data[event] = keep;\n }\n\n return listeners;\n};\n\n/*\n* Player.js is a javascript library for interacting with iframes via\n* postMessage that use an Open Player Spec\n*\n*/\n\nplayerjs.Player = function(elem, options){\n if (!(this instanceof playerjs.Player)) {\n return new playerjs.Player(elem, options);\n }\n this.init(elem, options);\n};\n\nplayerjs.EVENTS = {\n READY: 'ready',\n PLAY: 'play',\n PAUSE: 'pause',\n ENDED: 'ended',\n TIMEUPDATE: 'timeupdate',\n PROGRESS: 'progress',\n ERROR: 'error'\n};\n\nplayerjs.EVENTS.all = function(){\n var all = [];\n for (var key in playerjs.EVENTS) {\n if (playerjs.has(playerjs.EVENTS, key) && playerjs.isString(playerjs.EVENTS[key])) {\n all.push(playerjs.EVENTS[key]);\n }\n }\n return all;\n};\n\nplayerjs.METHODS = {\n PLAY: 'play',\n PAUSE: 'pause',\n GETPAUSED: 'getPaused',\n MUTE: 'mute',\n UNMUTE: 'unmute',\n GETMUTED: 'getMuted',\n SETVOLUME: 'setVolume',\n GETVOLUME: 'getVolume',\n GETDURATION: 'getDuration',\n SETCURRENTTIME: 'setCurrentTime',\n GETCURRENTTIME:'getCurrentTime',\n SETLOOP: 'setLoop',\n GETLOOP: 'getLoop',\n REMOVEEVENTLISTENER: 'removeEventListener',\n ADDEVENTLISTENER: 'addEventListener'\n};\n\nplayerjs.METHODS.all = function(){\n var all = [];\n for (var key in playerjs.METHODS) {\n if (playerjs.has(playerjs.METHODS, key) && playerjs.isString(playerjs.METHODS[key])) {\n all.push(playerjs.METHODS[key]);\n }\n }\n return all;\n};\n\nplayerjs.READIED = [];\n\nplayerjs.Player.prototype.init = function(elem, options){\n\n var self = this;\n\n if (playerjs.isString(elem)){\n elem = document.getElementById(elem);\n }\n\n this.elem = elem;\n\n // make sure we have an iframe\n playerjs.assert(elem.nodeName === 'IFRAME',\n 'playerjs.Player constructor requires an Iframe, got \"'+elem.nodeName+'\"');\n playerjs.assert(elem.src,\n 'playerjs.Player constructor requires a Iframe with a \\'src\\' attribute.');\n\n // Figure out the origin of where we are sending messages.\n this.origin = playerjs.origin(elem.src);\n\n // Event handling.\n this.keeper = new playerjs.Keeper();\n\n // Queuing before ready.\n this.isReady = false;\n this.queue = [];\n\n // Assume that everything is supported, unless we know otherwise.\n this.events = playerjs.EVENTS.all();\n this.methods = playerjs.METHODS.all();\n\n if (playerjs.POST_MESSAGE){\n // Set up the reciever.\n playerjs.addEvent(window, 'message', function(e){\n self.receive(e);\n });\n } else {\n playerjs.log('Post Message is not Available.');\n }\n\n // See if we caught the src event first, otherwise assume we haven't loaded\n if (playerjs.indexOf(playerjs.READIED, elem.src) > -1){\n self.loaded = true;\n } else {\n // Try the onload event, just lets us give another test.\n this.elem.onload = function(){\n self.loaded = true;\n };\n }\n};\n\nplayerjs.Player.prototype.send = function(data, callback, ctx){\n // Add the context and version to the data.\n data.context = playerjs.CONTEXT;\n data.version = playerjs.VERSION;\n\n // We are expecting a response.\n if (callback) {\n // Create a UUID\n var id = this.keeper.getUUID();\n\n // Set the listener.\n data.listener = id;\n\n // Only hang on to this listener once.\n this.keeper.one(id, data.method, callback, ctx);\n }\n\n if (!this.isReady && data.value !== 'ready'){\n playerjs.log('Player.queue', data);\n this.queue.push(data);\n return false;\n }\n\n playerjs.log('Player.send', data, this.origin);\n\n if (this.loaded === true){\n this.elem.contentWindow.postMessage(JSON.stringify(data), this.origin);\n }\n\n return true;\n};\n\nplayerjs.Player.prototype.receive = function(e){\n playerjs.log('Player.receive', e);\n\n if (e.origin !== this.origin){\n return false;\n }\n\n var data;\n try {\n data = JSON.parse(e.data);\n } catch (err){\n // Not a valid response.\n return false;\n }\n\n // abort if this message wasn't a player.js message\n if (data.context !== playerjs.CONTEXT) {\n return false;\n }\n\n // We need to determine if we are ready.\n if (data.event === 'ready' && data.value && data.value.src === this.elem.src){\n this.ready(data);\n }\n\n if (this.keeper.has(data.event, data.listener)){\n this.keeper.execute(data.event, data.listener, data.value, this);\n }\n};\n\n\nplayerjs.Player.prototype.ready = function(data){\n\n if (this.isReady === true){\n return false;\n }\n\n // If we got a list of supported methods, we should set them.\n if (data.value.events){\n this.events = data.value.events;\n }\n if (data.value.methods){\n this.methods = data.value.methods;\n }\n\n // set ready.\n this.isReady = true;\n this.loaded = true;\n\n // Clear the queue\n for (var i=0; i<this.queue.length; i++){\n var obj = this.queue[i];\n\n playerjs.log('Player.dequeue', obj);\n\n if (data.event === 'ready'){\n this.keeper.execute(obj.event, obj.listener, true, this);\n }\n this.send(obj);\n }\n this.queue = [];\n};\n\nplayerjs.Player.prototype.on = function(event, callback, ctx){\n var id = this.keeper.getUUID();\n\n if (event === 'ready'){\n // We only want to call ready once.\n this.keeper.one(id, event, callback, ctx);\n } else {\n this.keeper.on(id, event, callback, ctx);\n }\n\n this.send({\n method: 'addEventListener',\n value: event,\n listener: id\n });\n\n return true;\n};\n\nplayerjs.Player.prototype.off = function(event, callback){\n\n var listeners = this.keeper.off(event, callback);\n playerjs.log('Player.off', listeners);\n\n if (listeners.length > 0) {\n for (var i in listeners){\n this.send({\n method: 'removeEventListener',\n value: event,\n listener: listeners[i]\n });\n return true;\n }\n }\n\n return false;\n};\n\n// Based on what ready passed back, we can determine if the events/method are\n// supported by the player.\nplayerjs.Player.prototype.supports = function(evtOrMethod, names){\n\n playerjs.assert(playerjs.indexOf(['method', 'event'], evtOrMethod) > -1,\n 'evtOrMethod needs to be either \"event\" or \"method\" got ' + evtOrMethod);\n\n // Make everything an array.\n names = playerjs.isArray(names) ? names : [names];\n\n var all = evtOrMethod === 'event' ? this.events : this.methods;\n\n for (var i=0; i < names.length; i++){\n if (playerjs.indexOf(all, names[i]) === -1){\n return false;\n }\n }\n\n return true;\n};\n\n//create function to add to the Player prototype\nfunction createPrototypeFunction(name) {\n\n return function() {\n\n var data = {\n method: name\n };\n\n var args = Array.prototype.slice.call(arguments);\n\n //for getters add the passed parameters to the arguments for the send call\n if (/^get/.test(name)) {\n playerjs.assert(args.length > 0, 'Get methods require a callback.');\n args.unshift(data);\n } else {\n //for setter add the first arg to the value field\n if (/^set/.test(name)) {\n playerjs.assert(args.length !== 0, 'Set methods require a value.');\n data.value = args[0];\n }\n args = [data];\n }\n\n this.send.apply(this, args);\n };\n}\n\n// Loop through the methods to add them to the prototype.\nfor (var i = 0, l = playerjs.METHODS.all().length; i < l; i++) {\n var methodName = playerjs.METHODS.all()[i];\n\n // We don't want to overwrite existing methods.\n if (!playerjs.Player.prototype.hasOwnProperty(methodName)){\n playerjs.Player.prototype[methodName] = createPrototypeFunction(methodName);\n }\n}\n\n// We need to catch all ready events in case the iframe is ready before the\n// player is invoked.\nplayerjs.addEvent(window, 'message', function(e){\n var data;\n try {\n data = JSON.parse(e.data);\n } catch (err){\n return false;\n }\n\n // abort if this message wasn't a player.js message\n if (data.context !== playerjs.CONTEXT) {\n return false;\n }\n\n // We need to determine if we are ready.\n if (data.event === 'ready' && data.value && data.value.src){\n playerjs.READIED.push(data.value.src);\n }\n});\n\n/*\n* Does all the wiring up for the backend.\n*\n* var receiver = new playerjs.Receiver();\n* receiver.on('play', function(){ video.play() });\n* receiver.on('getDuration', function(callback){ callback(video.duration) });\n* receiver.emit('timeupdate', {});\n*/\n\nplayerjs.Receiver = function(events, methods){\n this.init(events, methods);\n};\n\nplayerjs.Receiver.prototype.init = function(events, methods){\n var self = this;\n\n // Deal with the ready crap.\n this.isReady = false;\n\n // Bind the window message.\n this.origin = playerjs.origin(document.referrer);\n\n //Create a holder for all the methods.\n this.methods = {};\n\n // holds all the information about what's supported\n this.supported = {\n events: events ? events : playerjs.EVENTS.all(),\n methods: methods ? methods : playerjs.METHODS.all()\n };\n\n // Deals with the adding and removing of event listeners.\n this.eventListeners = {};\n\n // We can't send any messages.\n this.reject = !(window.self !== window.top && playerjs.POST_MESSAGE);\n\n // We aren't in an iframe, don't listen.\n if (!this.reject){\n playerjs.addEvent(window, 'message', function(e){\n self.receive(e);\n });\n }\n};\n\nplayerjs.Receiver.prototype.receive = function(e){\n // Only want to listen to events that came from our origin.\n if (e.origin !== this.origin){\n return false;\n }\n\n // Browsers that support postMessage also support JSON.\n var data = {};\n if (playerjs.isObject(e.data)){\n data = e.data;\n } else {\n try {\n data = window.JSON.parse(e.data);\n } catch (err){\n playerjs.log('JSON Parse Error', err);\n }\n }\n\n playerjs.log('Receiver.receive', e, data);\n\n // Nothing for us to do.\n if (!data.method){\n return false;\n }\n\n // make sure the context is correct.\n if (data.context !== playerjs.CONTEXT){\n return false;\n }\n\n // Make sure we have a valid method.\n if (playerjs.indexOf(playerjs.METHODS.all(), data.method) === -1){\n this.emit('error', {\n code: 2,\n msg: 'Invalid Method \"'+data.method+'\"'\n });\n return false;\n }\n\n // See if we added a listener\n var listener = !playerjs.isNone(data.listener) ? data.listener : null;\n\n // Add Event Listener.\n if (data.method === 'addEventListener') {\n if (this.eventListeners.hasOwnProperty(data.value)) {\n //If the listener is the same, i.e. null only add it once.\n if (playerjs.indexOf(this.eventListeners[data.value], listener) === -1){\n this.eventListeners[data.value].push(listener);\n }\n } else {\n this.eventListeners[data.value] = [listener];\n }\n\n if (data.value === 'ready' && this.isReady){\n this.ready();\n }\n }\n // Remove the event listener.\n else if (data.method === 'removeEventListener') {\n if (this.eventListeners.hasOwnProperty(data.value)) {\n var index = playerjs.indexOf(this.eventListeners[data.value], listener);\n\n // if we find the element, remove it.\n if (index > -1){\n this.eventListeners[data.value].splice(index, 1);\n }\n\n if (this.eventListeners[data.value].length === 0){\n delete this.eventListeners[data.value];\n }\n }\n }\n // Go get it.\n else {\n this.get(data.method, data.value, listener);\n }\n};\n\nplayerjs.Receiver.prototype.get = function(method, value, listener){\n var self = this;\n\n // Now lets do it.\n if (!this.methods.hasOwnProperty(method)){\n this.emit('error', {\n code: 3,\n msg: 'Method Not Supported\"'+method+'\"'\n });\n return false;\n }\n\n var func = this.methods[method];\n\n if (method.substr(0,3) === 'get') {\n var callback = function(val){\n self.send(method, val, listener);\n };\n func.call(this, callback);\n } else {\n func.call(this, value);\n }\n};\n\nplayerjs.Receiver.prototype.on = function(event, callback){\n this.methods[event] = callback;\n};\n\nplayerjs.Receiver.prototype.send = function(event, value, listener){\n\n playerjs.log('Receiver.send', event, value, listener);\n\n if (this.reject){\n // We are not in a frame, or we don't support POST_MESSAGE\n playerjs.log('Receiver.send.reject', event, value, listener);\n return false;\n }\n\n var data = {\n context: playerjs.CONTEXT,\n version: playerjs.VERSION,\n event: event\n };\n\n if (!playerjs.isNone(value)){\n data.value = value;\n }\n\n if (!playerjs.isNone(listener)){\n data.listener = listener;\n }\n\n var msg = JSON.stringify(data);\n window.parent.postMessage(msg, this.origin === \"\" ? '*' : this.origin);\n};\n\nplayerjs.Receiver.prototype.emit = function(event, value){\n\n if (!this.eventListeners.hasOwnProperty(event)){\n return false;\n }\n\n playerjs.log('Instance.emit', event, value, this.eventListeners[event]);\n\n for (var i=0; i < this.eventListeners[event].length; i++){\n var listener = this.eventListeners[event][i];\n this.send(event, value, listener);\n }\n\n return true;\n};\n\nplayerjs.Receiver.prototype.ready = function(){\n playerjs.log('Receiver.ready');\n this.isReady = true;\n\n var data = {\n src: window.location.toString(),\n events: this.supported.events,\n methods: this.supported.methods\n };\n\n if (!this.emit('ready', data)){\n this.send('ready', data);\n }\n\n};\n\nplayerjs.HTML5Adapter = function(video){\n if (!(this instanceof playerjs.HTML5Adapter)) {\n return new playerjs.HTML5Adapter(video);\n }\n this.init(video);\n};\n\nplayerjs.HTML5Adapter.prototype.init = function(video){\n\n playerjs.assert(video, 'playerjs.HTML5Adapter requires a video element');\n\n // Set up the actual receiver\n var receiver = this.receiver = new playerjs.Receiver();\n\n /* EVENTS */\n video.addEventListener('playing', function(){\n receiver.emit('play');\n });\n\n video.addEventListener('pause', function(){\n receiver.emit('pause');\n });\n\n video.addEventListener('ended', function(){\n receiver.emit('ended');\n });\n\n video.addEventListener('timeupdate', function(){\n receiver.emit('timeupdate', {\n seconds: video.currentTime,\n duration: video.duration\n });\n });\n\n video.addEventListener('progress', function(){\n receiver.emit('buffered', {\n percent: video.buffered.length\n });\n });\n\n /* Methods */\n receiver.on('play', function(){\n video.play();\n });\n\n receiver.on('pause', function(){\n video.pause();\n });\n\n receiver.on('getPaused', function(callback){\n callback(video.paused);\n });\n\n receiver.on('getCurrentTime', function(callback){\n callback(video.currentTime);\n });\n\n receiver.on('setCurrentTime', function(value){\n video.currentTime = value;\n });\n\n receiver.on('getDuration', function(callback){\n callback(video.duration);\n });\n\n receiver.on('getVolume', function(callback){\n callback(video.volume * 100);\n });\n\n receiver.on('setVolume', function(value){\n video.volume = value/100;\n });\n\n receiver.on('mute', function(){\n video.muted = true;\n });\n\n receiver.on('unmute', function(){\n video.muted = false;\n });\n\n receiver.on('getMuted', function(callback){\n callback(video.muted);\n });\n\n receiver.on('getLoop', function(callback){\n callback(video.loop);\n });\n\n receiver.on('setLoop', function(value){\n video.loop = value;\n });\n};\n\n/* Call when the video has loaded */\nplayerjs.HTML5Adapter.prototype.ready = function(){\n this.receiver.ready();\n};\n\n//http://www.longtailvideo.com/support/jw-player/28851/javascript-api-reference\nplayerjs.JWPlayerAdapter = function(player){\n if (!(this instanceof playerjs.JWPlayerAdapter)) {\n return new playerjs.JWPlayerAdapter(player);\n }\n this.init(player);\n};\n\nplayerjs.JWPlayerAdapter.prototype.init = function(player){\n\n playerjs.assert(player, 'playerjs.JWPlayerAdapter requires a player object');\n\n // Set up the actual receiver\n var receiver = this.receiver = new playerjs.Receiver();\n\n // JWPlayer doesn't have a seLoop, so we can do it ourself.\n this.looped = false;\n\n /* EVENTS */\n player.on('pause', function(){\n receiver.emit('pause');\n });\n\n player.on('play', function(){\n receiver.emit('play');\n });\n\n player.on('time', function(e){\n var seconds = e.position,\n duration = e.duration;\n\n if (!seconds || !duration){\n return false;\n }\n\n var value = {\n seconds: seconds,\n duration: duration\n };\n receiver.emit('timeupdate', value);\n });\n\n var self = this;\n player.on('complete', function(){\n // Fake the looping\n if (self.looped === true){\n // By default jwplayer seeks after play.\n player.seek(0);\n } else {\n // Else throw the ended event.\n receiver.emit('ended');\n }\n });\n\n player.on('error', function(){\n receiver.emit('error');\n });\n\n\n /* METHODS */\n receiver.on('play', function(){\n player.play(true);\n });\n\n receiver.on('pause', function(){\n player.pause(true);\n });\n\n receiver.on('getPaused', function(callback){\n callback(player.getState().toLowerCase() !== 'PLAYING'.toLowerCase());\n });\n\n receiver.on('getCurrentTime', function(callback){\n callback(player.getPosition());\n });\n\n receiver.on('setCurrentTime', function(value){\n player.seek(value);\n });\n\n receiver.on('getDuration', function(callback){\n callback(player.getDuration());\n });\n\n receiver.on('getVolume', function(callback){\n callback(player.getVolume());\n });\n\n receiver.on('setVolume', function(value){\n player.setVolume(value);\n });\n\n receiver.on('mute', function(){\n player.setMute(true);\n });\n\n receiver.on('unmute', function(){\n player.setMute(false);\n });\n\n receiver.on('getMuted', function(callback){\n callback(player.getMute() === true);\n });\n\n receiver.on('getLoop', function(callback){\n callback(this.looped);\n }, this);\n\n receiver.on('setLoop', function(value){\n this.looped = value;\n }, this);\n};\n\n/* Call when the video.js is ready */\nplayerjs.JWPlayerAdapter.prototype.ready = function(){\n this.receiver.ready();\n};\n\nplayerjs.MockAdapter = function(){\n if (!(this instanceof playerjs.MockAdapter)) {\n return new playerjs.MockAdapter();\n }\n this.init();\n};\n\nplayerjs.MockAdapter.prototype.init = function(){\n\n // Our mock video\n var video = {\n duration: 20,\n currentTime: 0,\n interval: null,\n timeupdate: function(){},\n volume: 100,\n mute: false,\n playing: false,\n loop : false,\n play: function(){\n video.interval = setInterval(function(){\n video.currentTime += 0.25;\n video.timeupdate({\n seconds: video.currentTime,\n duration: video.duration\n });\n }, 250);\n video.playing = true;\n },\n pause: function(){\n clearInterval(video.interval);\n video.playing = false;\n }\n };\n\n // Set up the actual receiver\n var receiver = this.receiver = new playerjs.Receiver();\n\n receiver.on('play', function(){\n var self = this;\n video.play();\n this.emit('play');\n video.timeupdate = function(data){\n self.emit('timeupdate', data);\n };\n });\n\n receiver.on('pause', function(){\n video.pause();\n this.emit('pause');\n });\n\n receiver.on('getPaused', function(callback){\n callback(!video.playing);\n });\n\n receiver.on('getCurrentTime', function(callback){\n callback(video.currentTime);\n });\n\n receiver.on('setCurrentTime', function(value){\n video.currentTime = value;\n });\n\n receiver.on('getDuration', function(callback){\n callback(video.duration);\n });\n\n receiver.on('getVolume', function(callback){\n callback(video.volume);\n });\n\n receiver.on('setVolume', function(value){\n video.volume = value;\n });\n\n receiver.on('mute', function(){\n video.mute = true;\n });\n\n receiver.on('unmute', function(){\n video.mute = false;\n });\n\n receiver.on('getMuted', function(callback){\n callback(video.mute);\n });\n\n receiver.on('getLoop', function(callback){\n callback(video.loop);\n });\n\n receiver.on('setLoop', function(value){\n video.loop = value;\n });\n};\n\n/* Call when the video has loaded */\nplayerjs.MockAdapter.prototype.ready = function(){\n this.receiver.ready();\n};\nplayerjs.VideoJSAdapter = function(player){\n if (!(this instanceof playerjs.VideoJSAdapter)) {\n return new playerjs.VideoJSAdapter(player);\n }\n this.init(player);\n};\n\nplayerjs.VideoJSAdapter.prototype.init = function(player){\n\n playerjs.assert(player, 'playerjs.VideoJSReceiver requires a player object');\n\n // Set up the actual receiver\n var receiver = this.receiver = new playerjs.Receiver();\n\n /* EVENTS */\n player.on(\"pause\", function(){\n receiver.emit('pause');\n });\n\n player.on(\"play\", function(){\n receiver.emit('play');\n });\n\n player.on(\"timeupdate\", function(e){\n var seconds = player.currentTime(),\n duration = player.duration();\n\n if (!seconds || !duration){\n return false;\n }\n\n var value = {\n seconds: seconds,\n duration: duration\n };\n receiver.emit('timeupdate', value);\n });\n\n player.on(\"ended\", function(){\n receiver.emit('ended');\n });\n\n player.on(\"error\", function(){\n receiver.emit('error');\n });\n\n\n /* METHODS */\n receiver.on('play', function(){\n player.play();\n });\n\n receiver.on('pause', function(){\n player.pause();\n });\n\n receiver.on('getPaused', function(callback){\n callback(player.paused());\n });\n\n receiver.on('getCurrentTime', function(callback){\n callback(player.currentTime());\n });\n\n receiver.on('setCurrentTime', function(value){\n player.currentTime(value);\n });\n\n receiver.on('getDuration', function(callback){\n callback(player.duration());\n });\n\n receiver.on('getVolume', function(callback){\n callback(player.volume() * 100);\n });\n\n receiver.on('setVolume', function(value){\n player.volume(value/100);\n });\n\n receiver.on('mute', function(){\n player.volume(0);\n });\n\n receiver.on('unmute', function(){\n player.volume(1);\n });\n\n receiver.on('getMuted', function(callback){\n callback(player.volume() === 0);\n });\n\n receiver.on('getLoop', function(callback){\n callback(player.loop());\n });\n\n receiver.on('setLoop', function(value){\n player.loop(value);\n });\n};\n\n/* Call when the video.js is ready */\nplayerjs.VideoJSAdapter.prototype.ready = function(){\n this.receiver.ready();\n};\n\n if (typeof define === 'function' && define.amd) {\n define(function () {\n return playerjs\n })\n } else if (typeof module === 'object' && module.exports) {\n module.exports = playerjs\n } else {\n window.playerjs = playerjs;\n }\n})(window, document);\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nvar Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar protocol$ = require('../protocol'), SCON = protocol$.SCON, DIRTY = protocol$.DIRTY, ACTION = protocol$.ACTION;\n\nvar EditorView = require('./EditorView').EditorView;\n\nvar Delay = require('../util/Delay').Delay;\nvar PointerView = require('./PointerView').PointerView;\nvar BrushupView = require('./BrushupView').BrushupView;\nvar Notification = require('./Notification').Notification;\n\n// Dialogs\nvar SpaceMenu = require('./SpaceMenu').SpaceMenu;\nvar RecDialog = require('./RecDialog').RecDialog;\nvar SaveDialog = require('./SaveDialog').SaveDialog;\nvar PublishDialog = require('./PublishDialog').PublishDialog;\nvar NewFileDialog = require('./NewFileDialog').NewFileDialog;\nvar CastCreateDialog = require('../legacy/CastCreateDialog').CastCreateDialog;\nvar DependencyAddDialog = require('./DependencyAddDialog').DependencyAddDialog;\nvar AskDialog = require('./AskDialog').AskDialog;\n\nvar BrushupView = require('./BrushupView').BrushupView;\n\nvar InterfaceView = require('./InterfaceView').InterfaceView;\nvar EditorView = require('./EditorView').EditorView;\nvar ExplorerView = require('./ExplorerView').ExplorerView;\nvar SidebarView = require('./SidebarView').SidebarView;\nvar TitlebarView = require('./TitlebarView').TitlebarView;\n\nvar SpaceControls = require('./SpaceControls').SpaceControls;\n\nvar util = require('../util');\n\nMousetrap = require('../util/mousetrap');\n\nif (true) {\n\t// only include in embeds?\n\tvar playerjs = require(\"player.js\");\n\tvar playerjsBridge;\n};\n\nvar ViewportOverlay = _2.defineTag('ViewportOverlay', InterfaceView, function(tag){\n\t\n\ttag.prototype.start = function (){\n\t\tif (window.storageBlocked) { // Open new tab if we can't access local stoarge\n\t\t\treturn window.open(window.location.origin + window.location.pathname,'_blank').focus();\n\t\t};\n\t\treturn this.space().timeline().play();\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$;\n\t\treturn this.$open(0).setChildren(\n\t\t\t$[0] || _1('div',$,0,this).flag('PlayButton').flag('button').on$(0,['click','start'],this).setIcon('play')\n\t\t,2).synced((\n\t\t\t$[0].end()\n\t\t,true));\n\t};\n});\n\n\nvar SpaceViewport = _2.defineTag('SpaceViewport', function(tag){\n\t\n\ttag.prototype.build = function (){\n\t\tvar v_;\n\t\treturn (this.setTabindex(v_ = -1),v_);\n\t};\n});\n\nvar LogEntry = require('../widgets/browser/PlayerPage').LogEntry;\n\n// Refactor to use Notification api\nvar LogEntryTip = _2.defineTag('LogEntryTip', function(tag){\n\t\n\tvar currentTip;\n\t\n\ttag.show = function (items,target){\n\t\tvar _t1;\n\t\tif (currentTip) {\n\t\t\tcurrentTip.hide();\n\t\t\tcurrentTip = null;\n\t\t};\n\t\treturn Imba.mount(currentTip = (_1(LogEntryTip)).setData(items).setContainer(target).end(),target);\n\t};\n\t\n\ttag.prototype.container = function(v){ return this._container; }\n\ttag.prototype.setContainer = function(v){ this._container = v; return this; };\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3;\n\t\treturn this.$open(0).flag('xl').flag('dark').setChildren(\n\t\t\t$[0] || _1('div',$,0,this).flag('main')\n\t\t,2).synced((\n\t\t\t$[0].setContent([\n\t\t\t\t($[1] || _1('div',$,1,0).flag('triangle')),\n\t\t\t\t(len$(this.data()) > 1) ? (\n\t\t\t\t\t($[2] || _1('div',$,2,0).flag('more').setText(\"...\"))\n\t\t\t\t) : void(0),\n\t\t\t\t($[3] || _1(LogEntry,$,3,0)).bindData(this.data(),len$(this.data()) - 1).end()\n\t\t\t],1)\n\t\t,true));\n\t};\n\t\n\ttag.prototype.mount = function (){\n\t\tvar self = this;\n\t\tself.dom().offsetWidth;\n\t\tself.flag('show');\n\t\treturn setTimeout(function() { return self.hide(); },2500);\n\t};\n\t\n\ttag.prototype.setup = function (){\n\t\tthis.render();\n\t\treturn this.autosize();\n\t};\n\t\n\ttag.prototype.autosize = function (){\n\t\tvar Math_;\n\t\tlet txt = this.dom().innerText;\n\t\tlet lines = txt.split(\"\\n\");\n\t\tlet longest = Math.max.apply(Math,lines.map(function(l) { return l.length; }));\n\t\tlet maxWidth = this.container().offsetWidth * 0.8;\n\t\t// fontSize to fill\n\t\tlet maxFont = maxWidth / (longest * 0.6);\n\t\tlet fontSize = Math.round(Math.min(Math.max(maxFont,15),30));\n\t\tthis.css('fontSize',fontSize + 'px');\n\t\tthis.flag('overflows',maxFont < 15);\n\t\treturn this;\n\t};\n\t\n\t// def ontap\n\t// \tself:hide = do yes\n\t\n\ttag.prototype.hide = function (){\n\t\tvar self = this;\n\t\tif (self.hasFlag('hide')) { return };\n\t\tself.flag('hide');\n\t\treturn setTimeout(function() {\n\t\t\tself.orphanize();\n\t\t\tif (currentTip == self) { return currentTip = null };\n\t\t},3000);\n\t};\n});\n\nvar SpaceView = _2.defineTag('SpaceView', function(tag){\n\t\n\ttag.prototype.dirty = function(v){ return this._dirty; }\n\ttag.prototype.setDirty = function(v){ this._dirty = v; return this; };\n\ttag.prototype.__activeNode = {watch: 'activeNodeDidSet',name: 'activeNode'};\n\ttag.prototype.activeNode = function(v){ return this._activeNode; }\n\ttag.prototype.setActiveNode = function(v){\n\t\tvar a = this.activeNode();\n\t\tif(v != a) { this._activeNode = v; }\n\t\tif(v != a) { this.activeNodeDidSet && this.activeNodeDidSet(v,a,this.__activeNode) }\n\t\treturn this;\n\t};\n\ttag.prototype.__activeWidget = {watch: 'activeWidgetDidSet',name: 'activeWidget'};\n\ttag.prototype.activeWidget = function(v){ return this._activeWidget; }\n\ttag.prototype.setActiveWidget = function(v){\n\t\tvar a = this.activeWidget();\n\t\tif(v != a) { this._activeWidget = v; }\n\t\tif(v != a) { this.activeWidgetDidSet && this.activeWidgetDidSet(v,a,this.__activeWidget) }\n\t\treturn this;\n\t};\n\ttag.prototype.shortcuts = function(v){ return this._shortcuts; }\n\ttag.prototype.setShortcuts = function(v){ this._shortcuts = v; return this; };\n\t\n\ttag.prototype.__showInspector = {watch: 'markLayout',name: 'showInspector'};\n\ttag.prototype.showInspector = function(v){ return this._showInspector; }\n\ttag.prototype.setShowInspector = function(v){\n\t\tvar a = this.showInspector();\n\t\tif(v != a) { this._showInspector = v; }\n\t\tif(v != a) { this.markLayout && this.markLayout(v,a,this.__showInspector) }\n\t\treturn this;\n\t};\n\ttag.prototype.__mode = {watch: 'modeDidSet',name: 'mode'};\n\ttag.prototype.mode = function(v){ return this._mode; }\n\ttag.prototype.setMode = function(v){\n\t\tvar a = this.mode();\n\t\tif(v != a) { this._mode = v; }\n\t\tif(v != a) { this.modeDidSet && this.modeDidSet(v,a,this.__mode) }\n\t\treturn this;\n\t};\n\ttag.prototype.__size = {'default': 'auto',watch: 'sizeDidSet',name: 'size'};\n\ttag.prototype.size = function(v){ return this._size; }\n\ttag.prototype.setSize = function(v){\n\t\tvar a = this.size();\n\t\tif(v != a) { this._size = v; }\n\t\tif(v != a) { this.sizeDidSet && this.sizeDidSet(v,a,this.__size) }\n\t\treturn this;\n\t}\n\ttag.prototype._size = 'auto';\n\t\n\ttag.prototype.tab = function(v){ return this._tab; }\n\ttag.prototype.setTab = function(v){ this._tab = v; return this; }; // hacky way to highlight tab\n\t\n\ttag.prototype.__fontSize = {'default': 12,watch: 'fontSizeDidSet',name: 'fontSize'};\n\ttag.prototype.fontSize = function(v){ return this._fontSize; }\n\ttag.prototype.setFontSize = function(v){\n\t\tvar a = this.fontSize();\n\t\tif(v != a) { this._fontSize = v; }\n\t\tif(v != a) { this.fontSizeDidSet && this.fontSizeDidSet(v,a,this.__fontSize) }\n\t\treturn this;\n\t}\n\ttag.prototype._fontSize = 12;\n\ttag.prototype.__userFontSize = {watch: 'userFontSizeDidSet',name: 'userFontSize'};\n\ttag.prototype.userFontSize = function(v){ return this._userFontSize; }\n\ttag.prototype.setUserFontSize = function(v){\n\t\tvar a = this.userFontSize();\n\t\tif(v != a) { this._userFontSize = v; }\n\t\tif(v != a) { this.userFontSizeDidSet && this.userFontSizeDidSet(v,a,this.__userFontSize) }\n\t\treturn this;\n\t};\n\ttag.prototype.__sidebarWidth = {watch: 'syncStyleVar',unit: 'px',reflow: true,name: 'sidebarWidth'};\n\ttag.prototype.sidebarWidth = function(v){ return this._sidebarWidth; }\n\ttag.prototype.setSidebarWidth = function(v){\n\t\tvar a = this.sidebarWidth();\n\t\tif(v != a) { this._sidebarWidth = v; }\n\t\tif(v != a) { this.syncStyleVar && this.syncStyleVar(v,a,this.__sidebarWidth) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.syncStyleVar = function (value,prev,key){\n\t\tlet name = key.name;\n\t\tlet unit = key.unit;\n\t\tthis.dom().style.setProperty('--' + name,unit ? ((value + unit)) : value);\n\t\tif (key.reflow) { return this.space().emit('reflow') };\n\t};\n\t\n\ttag.prototype.userFontSizeDidSet = function (size){\n\t\treturn (this.setFontSize(size),size);\n\t};\n\t\n\ttag.prototype.fontSizeDidSet = function (size){\n\t\tthis.setFlag('fontSize',(\"fs\" + size));\n\t\tif (true) { this.api().setFontSize(size) };\n\t\tif (this._mounted) { return this.reflow() };\n\t};\n\t\n\ttag.prototype.hasTouchInterface = function (){\n\t\treturn this.hasFlag('touch-ux');\n\t};\n\t\n\ttag.prototype.space = function (){\n\t\treturn this.data();\n\t};\n\t\n\ttag.prototype.browser = function (){\n\t\treturn this.space().browser();\n\t};\n\t\n\ttag.prototype.model = function (){\n\t\treturn this.space().model();\n\t};\n\t\n\ttag.prototype.branch = function (){\n\t\treturn this.space().branch();\n\t};\n\t\n\ttag.prototype.timeline = function (){\n\t\treturn this.space().timeline();\n\t};\n\t\n\ttag.prototype.client = function (){\n\t\treturn this.data().client();\n\t};\n\t\n\ttag.prototype.setup = function (){\n\t\tthis._t0 = Date.now();\n\t\tif (true) {\n\t\t\tthis.setUserFontSize(this.api().fontSize());\n\t\t};\n\t\tthis._autoFontSize = this.userFontSize() || 12;\n\t\tthis._dirty = DIRTY.SIZE;\n\t\t\n\t\tif (true) {\n\t\t\t// if api.ua.isPhone\n\t\t\t//\tsize = 'phone'\n\t\t\t// elif api.ua.isTablet\n\t\t\t//\tsize = 'tablet'\n\t\t\tthis._shortcuts = new Mousetrap(document.body);\n\t\t\tthis.data().actions().trap(this._shortcuts,'space');\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.mount = function (){\n\t\tvar self = this;\n\t\tself._mounted = true;\n\t\tself.setTabindex(0);\n\t\t// size = 'auto'\n\t\t// timelog 'mount'\n\t\tself.space().emit('mounted');\n\t\t\n\t\t\n\t\tself._onresized = new Delay(function() {\n\t\t\tself._dirty |= DIRTY.SIZE;\n\t\t\treturn self.reflow();\n\t\t});\n\t\t\n\t\tself._onresize = function() {\n\t\t\tself._resized = true;\n\t\t\treturn self._onresized.delay(200);\n\t\t};\n\t\t\n\t\tself._onreflow = function() {\n\t\t\tself._resized = false;\n\t\t\treturn self.reflow();\n\t\t};\n\t\t\n\t\tself._onwheel = function(e) {\n\t\t\t// disable back/forward gestures\n\t\t\tlet dx = e.deltaX;\n\t\t\tif (dx != 0) { return e.preventDefault() };\n\t\t};\n\t\t\n\t\twindow.addEventListener('resize',self._onresize,true);\n\t\twindow.addEventListener('orientationchange',self._onreflow,true);\n\t\tdocument.addEventListener('wheel',self._onwheel,{capture: true,passive: false});\n\t\tself.api().on('reflow',self._onreflow);\n\t\t\n\t\tif (self.api().isEmbed() && !playerjsBridge && self.space().timeline().audio) {\n\t\t\tplayerjsBridge = {};\n\t\t\tsetTimeout(function() {\n\t\t\t\tif (self.space().timeline().audio()) {\n\t\t\t\t\tplayerjsBridge = new (playerjs.HTML5Adapter)(self.space().timeline().audio());\n\t\t\t\t\treturn playerjsBridge.ready();\n\t\t\t\t};\n\t\t\t},10);\n\t\t};\n\t\t\n\t\tself.mountLogAlerts();\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.mountLogAlerts = function (){\n\t\tvar self = this;\n\t\tlet logs = [];\n\t\tlet showLogs = function() {\n\t\t\tlet last = logs[logs.length - 1];\n\t\t\tlet currOffset = self.space().timeline().currentOffset();\n\t\t\tif (last && Math.abs(currOffset - last.timeOffset()) < 1000) {\n\t\t\t\tLogEntryTip.show(logs.map(function(item) { return item._params; }),self._viewport.dom());\n\t\t\t};\n\t\t\treturn logs = [];\n\t\t};\n\t\t\n\t\treturn self.space().on('log',function(item) {\n\t\t\tlogs.push(item);\n\t\t\treturn logs.TIMEOUT || (logs.TIMEOUT = setTimeout(showLogs,15));\n\t\t});\n\t};\n\t\n\ttag.prototype.unmount = function (){\n\t\tvar space_;\n\t\t(space_ = this.space()) && space_.emit && space_.emit('unmounted');\n\t\twindow.removeEventListener('resize',this._onresize,true);\n\t\twindow.removeEventListener('orientationchange',this._onreflow,true);\n\t\tdocument.removeEventListener('wheel',this._onwheel,true);\n\t\tthis.api().un('reflow',this._onreflow);\n\t\t\n\t\tif (this._modeNotification) {\n\t\t\tthis._modeNotification.hide();\n\t\t\tthis._modeNotification = null;\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.dispose = function (){\n\t\tvar self = this;\n\t\tself._activeEl = null;\n\t\tself._controls && self._controls.dispose && self._controls.dispose();\n\t\tself._shortcuts && self._shortcuts.disable && self._shortcuts.disable();\n\t\tself._shortcuts = null; // ?.dispose\n\t\tself.render = function() { return self; };\n\t\t// Fix to make sure tweenmax removes the last reference\n\t\t// TweenMax.to(document.createElement('div'),0.1,{opacity: 0.1})\n\t\treturn self;\n\t};\n\t\n\ttag.prototype.alert = function (text,options){\n\t\t// automatically hide if already shown?\n\t\treturn Notification.show(text,options);\n\t};\n\t\n\ttag.prototype.box = function (){\n\t\treturn this._box || (this._box = {\n\t\t\ttop: 0,\n\t\t\tleft: 0,\n\t\t\twidth: window.innerWidth,\n\t\t\theight: window.innerHeight\n\t\t});\n\t};\n\t\n\ttag.prototype.modeDidSet = function (mode,prev){\n\t\tvar _t1;\n\t\tif (this._modeNotification) {\n\t\t\tthis._modeNotification.hide();\n\t\t\tthis._modeNotification = null;\n\t\t};\n\t\t\n\t\tlet text;\n\t\tif (mode == 'paused' && prev == 'playing' && this.space().timeline().progress() < 0.99) {\n\t\t\ttext = \"_pause_ paused\";\n\t\t} else if (mode == 'playing' && prev == 'paused' && this.space().timeline().currentTime() > 50) {\n\t\t\ttext = \"_play_ resumed\";\n\t\t} else if (mode == 'editing' && this.branch().isLocal()) {\n\t\t\tthis.trigger('enterplayground');\n\t\t\t// text = 'You have created a Note. Click \"Save Note\" to save it.'\n\t\t\ttext = 'Start editing';\n\t\t\treturn this.alert(this._modeNotification = (_1(Notification).flag('system').flag('info').setSticky(false)).setText(text).end());\n\t\t\t// return alert @modeNotification = <Notification.info.l text=text sticky=no>\n\t\t};\n\t\t\n\t\tif (text) {\n\t\t\treturn this.alert(this._modeNotification = (_1(Notification).flag('system')).setText(text).end());\n\t\t};\n\t};\n\t\n\t\n\ttag.prototype.checkActiveWidget = function (){\n\t\tvar v_;\n\t\tvar el = document.activeElement;\n\t\tif (el && el._tag && this._viewport.contains(el)) {\n\t\t\treturn (this.setActiveWidget(v_ = util.callClosest(el._tag,'focusWidgetForNode')),v_);\n\t\t};\n\t};\n\t\n\ttag.prototype.activeNodeDidSet = function (node,prev){\n\t\t// log \"activeNodeDidSet\",node,prev\n\t\tvar v_;\n\t\tif (node && this._viewport.contains(node)) {\n\t\t\treturn (this.setActiveWidget(v_ = util.callClosest(node,'focusWidgetForNode')),v_);\n\t\t};\n\t};\n\t\n\ttag.prototype.activeWidgetDidSet = function (widget,prev){\n\t\tthis.log(\"activeWidgetDidSet\",widget && widget.TYPE,prev && prev.TYPE);\n\t\tif (prev) { this._prevActiveWidget = prev };\n\t\tthis.space().agent().setFocus(widget);\n\t\tif (!this.browser().windowed()) {\n\t\t\tif (widget == this.browser()) { (this.browser().setMinimized(false),false) };\n\t\t\tif (prev == this.browser()) { return (this.browser().setMinimized(true),true) };\n\t\t};\n\t};\n\t\n\ttag.prototype.sizeDidSet = function (size,prev){\n\t\tthis.setFlag('size',(\"size-\" + size));\n\t\tthis.flagIf('centered',size && size != 'auto');\n\t\tif (this._mounted) { return this.reflow() };\n\t};\n\t\n\ttag.prototype.checkActiveElement = function (){\n\t\tthis.setActiveNode(Imba.getTagForDom(document.activeElement));\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.focusViewport = function (){\n\t\tif (!this._viewport.contains(document.activeElement)) {\n\t\t\tthis._viewport.dom().focus();\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.timelog = function (){\n\t\tvar $0 = arguments, i = $0.length;\n\t\tvar pars = new Array(i>0 ? i : 0);\n\t\twhile(i>0) pars[i-1] = $0[--i];\n\t\treturn console.log.apply(console,[].concat([Date.now() - this._t0], Array.from(pars)));\n\t};\n\t\n\ttag.prototype.reflow = function (){\n\t\tvar self = this;\n\t\tvar el = self._viewport && self._viewport.dom();\n\t\t\n\t\tif (!el) { return };\n\t\tif (self._reflowing) { return };\n\t\t\n\t\tvar box = self._box;\n\t\tvar bounds = el.getBoundingClientRect();\n\t\tvar ow = bounds.width;\n\t\tvar oh = bounds.height;\n\t\t\n\t\tif (ow == 0) { return };\n\t\t\n\t\tself._reflowing = true;\n\t\t\n\t\t// round numbers\n\t\tself._box = {\n\t\t\ttop: Math.round(bounds.top), // (el:offsetTop + dom:offsetTop + par:offsetTop)\n\t\t\tleft: Math.round(bounds.left), // (el:offsetLeft + dom:offsetLeft + par:offsetLeft)\n\t\t\twidth: Math.round(bounds.width), // ow\n\t\t\theight: Math.round(bounds.height) // oh\n\t\t};\n\t\t\n\t\tif (!(self.userFontSize())) {\n\t\t\tlet prevAutoFontSize = self._autoFontSize;\n\t\t\tself._autoFontSize = (ow < 500) ? 10 : (((ow < 900) ? 11 : (((ow < 1280) ? 12 : 13))));\n\t\t\tif (self.fontSize() == prevAutoFontSize) {\n\t\t\t\tself.setFontSize(self._autoFontSize);\n\t\t\t};\n\t\t};\n\t\t\n\t\tself._dirty |= DIRTY.SIZE;\n\t\t\n\t\tvar area = ow * oh;\n\t\t\n\t\tif (area > 0 && area < 360000 && !self.hasFlag('touch-ux')) {\n\t\t\tself.flag('touch-controls');\n\t\t};\n\t\t\n\t\tself.flag('touch-ux',area < 360000 && 'ontouchstart' in window);\n\t\tself.flag('portrait',oh >= ow);\n\t\tself.flag('landscape',oh < ow);\n\t\tself.flag('sidebar-float',(ow < 700 || window.flags.contains('mod-no-sidebar')));\n\t\t// timelog 'reflowing'\n\t\t\n\t\tif (self._dirty) {\n\t\t\tself.flag('reflowing');\n\t\t\tclearTimeout(self._reflowTimeout);\n\t\t\tself._reflowTimeout = setTimeout(function() {\n\t\t\t\treturn self.unflag('reflowing');\n\t\t\t},300);\n\t\t};\n\t\t\n\t\t// include viewport size in stream - not while loading?!\n\t\tself.space().agent().setVw(self._box.width);\n\t\tself.space().agent().setVh(self._box.height);\n\t\t\n\t\tself.space().emit('resize'); // what if it was not resized?\n\t\tself.space().emit('reflow',self._dirty);\n\t\tself.space().emit('resized');\n\t\t\n\t\tself._dirty = 0;\n\t\tself._reflowing = false;\n\t\treturn self;\n\t};\n\t\n\t\n\ttag.prototype.onfocusin = function (e){\n\t\treturn;\n\t};\n\t\n\ttag.prototype.onfocusout = function (e){\n\t\treturn;\n\t};\n\t\n\ttag.prototype.getStyleVar = function (varname){\n\t\tvar cs = window.getComputedStyle(this.dom());\n\t\tvar val = cs.getPropertyValue('--' + varname);\n\t\treturn val;\n\t};\n\t\n\ttag.prototype.setStyleVar = function (varname,value){\n\t\tthis.dom().style.setPropertyValue('--' + varname,value);\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.targetForPointer = function (el){\n\t\tlet browser = this.space().browser();\n\t\t\n\t\t// always keep pointer-focus on browser when it is front and center\n\t\tif (this.space().agent().focus() == browser && !browser.windowed() && !browser.minimized() && !browser.node().contains(el)) {\n\t\t\treturn browser.node();\n\t\t};\n\t\t\n\t\tlet target = el.closest('[data-sref]');\n\t\treturn target ? ((target._tag || target)) : null;\n\t\t// return target ? SCON.strToPath(target:dataset:ref) : null\n\t};\n\t\n\ttag.prototype.lookup = function (key){\n\t\tif (key instanceof Element) {\n\t\t\treturn key._tag;\n\t\t};\n\t\t\n\t\tif (key instanceof Imba.Tag) {\n\t\t\treturn key;\n\t\t};\n\t\t\n\t\tif (!((typeof key=='string'||key instanceof String))) {\n\t\t\tkey = SCON.pathToStr(key);\n\t\t};\n\t\t\n\t\tlet target = this.dom().querySelector((\"[data-sref=\\\"\" + key + \"\\\"]\"));\n\t\t// log \"lookup\",key,target\n\t\treturn target ? target._tag : null;\n\t};\n\t\n\ttag.prototype.layoutForNode = function (node){\n\t\tvar $1;\n\t\tif (!((node instanceof Imba.Tag))) { return null };\n\t\t\n\t\tif (node.nodeForLayout) {\n\t\t\tnode = node.nodeForLayout();\n\t\t};\n\t\t\n\t\tif (node.layoutForNode) {\n\t\t\treturn node.layoutForNode(this);\n\t\t};\n\t\t\n\t\tvar el = node._dom || node; // should be possible to force?\n\t\t\n\t\tif (!this.dom().contains(el)) {\n\t\t\treturn null;\n\t\t};\n\t\t\n\t\t// should we cache?\n\t\tlet rect = el.getBoundingClientRect();\n\t\t\n\t\tlet layout = [\n\t\t\tMath.round(rect.top - this.box().top),\n\t\t\tMath.round(rect.left - this.box().left),\n\t\t\tMath.round(rect.width),\n\t\t\tMath.round(rect.height),\n\t\t\t(($1 = node) && $1.layoutMask && $1.layoutMask() || 0)\n\t\t];\n\t\treturn layout;\n\t};\n\t\n\t\n\ttag.prototype.pushNodeLayout = function (node,layout){\n\t\t// only if element has a reference?\n\t\tif (!this.space().isEditing()) { return };\n\t\t\n\t\tvar sref = node.sref();\n\t\tlayout || (layout = this.layoutForNode(node));\n\t\t\n\t\tvar existing = this.space().branch().stream().layouts()[sref];\n\t\t\n\t\tif (String(layout) != String(existing)) {\n\t\t\tthis.log(\"force add layout!\",sref,layout,existing);\n\t\t\tthis.branch().push_(ACTION.NODE_LAYOUT,[sref,layout],{});\n\t\t};\n\t\treturn node;\n\t};\n\t\n\ttag.prototype.oncontextmenu = function (e){\n\t\treturn e.prevent().halt();\n\t};\n\t\n\t// action handlers\n\ttag.prototype.onannotate = function (e,branch){\n\t\te.stop();\n\t\tbranch.startAnnotating();\n\t\treturn this.dom().focus();\n\t\t// let mode = @brushup = <BrushupView[space].abs enabled=yes>\n\t\t// uxa.open(mode)\n\t};\n\t\n\ttag.prototype.onbrushupstop = function (e){\n\t\treturn e.halt();\n\t\t// branch.stopAnnotating\n\t\t// if @brushup\n\t\t// \t@brushup.unschedule\n\t\t// \t@brushup.trigger('uxa:hide')\n\t\t// \t@brushup = null\n\t};\n\t\n\ttag.prototype.oneditstart = function (e,branch){\n\t\tbranch.startEditing();\n\t\treturn e.halt();\n\t};\n\t\n\ttag.prototype.oneditstop = function (e,branch){\n\t\te.halt();\n\t\treturn branch.stopEditing();\n\t};\n\t\n\ttag.prototype.onrecstart = function (e,branch){\n\t\tvar _t1;\n\t\te.halt();\n\t\tbranch.space().navigateTo(branch);\n\t\treturn this.uxa().open((_1(RecDialog)).setData(branch).end());\n\t};\n\t\n\ttag.prototype.onrecstop = function (e,branch){\n\t\te.halt();\n\t\tbranch.stopRecording();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.onspacezip = async function (e){\n\t\te.halt();\n\t\tthis.uxa().flash(\"Generating .zip\");\n\t\tlet snap = this.space().toRunStaticSnapshot();\n\t\tlet name = (\"\" + (this.space().branch().id()) + \".zip\");\n\t\tlet res = await window.fetch((\"/rpc/download/\" + name),{headers: {\"Content-Type\": \"application/json\"},\n\t\tmode: 'cors',\n\t\tmethod: 'POST',\n\t\tbody: JSON.stringify(snap)});\n\t\tlet blob = await res.blob();\n\t\tvar url = window.URL.createObjectURL(blob);\n\t\tvar a = document.createElement('a');\n\t\ta.href = url;\n\t\ta.download = name;\n\t\tdocument.body.appendChild(a);\n\t\ta.click();\n\t\ta.remove();\n\t\treturn;\n\t};\n\t\n\ttag.prototype.onspacefork = async function (e){\n\t\tvar _t1;\n\t\tvar params = this.space().clone();\n\t\tthis.log('onspaceclone',e,params);\n\t\tawait this.api().tryLogin();\n\t\tif (!this.api().user()) { return };\n\t\treturn this.uxa().open((_1(CastCreateDialog)).setData(params).end());\n\t};\n\t\n\ttag.prototype.onspaceclone = async function (e){\n\t\tthis.log('onspaceclone',e);\n\t\tvar cast = await this.api().rpc('castClone',[this.space().branch().id()],{models: true});\n\t\tif (cast) { return App.router().go(cast.url()) };\n\t};\n\t\n\ttag.prototype.onspacemenu = function (e){\n\t\tvar _t1;\n\t\te.halt();\n\t\treturn e.uxa().open((_1(SpaceMenu)).bindData(this,'space',[]).end());\n\t};\n\t\n\ttag.prototype.onshowannotation = function (e,annotation){\n\t\te.halt();\n\t\treturn (this.space().setAnnotation(annotation),annotation);\n\t};\n\t\n\ttag.prototype.onbranchsave = async function (e,branch){\n\t\tvar _t1, v_;\n\t\te.halt();\n\t\tthis.log('onbranchsave',branch);\n\t\tawait this.api().tryLogin();\n\t\tif (!this.api().user()) { return };\n\t\t\n\t\tif (branch.isLocal()) {\n\t\t\t// make sure note is unlisted so users can share them easily\n\t\t\tif (branch.type() == 'note') {\n\t\t\t\tbranch.model().privacy = 'unlisted';\n\t\t\t};\n\t\t\treturn branch.save();\n\t\t};\n\t\t\n\t\t// <CastCreateDialog[params]>\n\t\tvar params = SCON.clone(branch.model());\n\t\tparams.stream = branch.model().stream().toJSON();\n\t\tparams.snapshot = branch._initialSnapshot;\n\t\t(((v_ = params.id),delete params.id, v_));\n\t\tthis.log(\"params is\",params);\n\t\treturn this.uxa().open((_1(CastCreateDialog)).setData(params).end());\n\t};\n\t\n\ttag.prototype.onbranchdiscard = function (e,branch){\n\t\te.halt();\n\t\tbranch.discard();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.onbranchpublish = function (e,branch){\n\t\tvar _t1;\n\t\te.halt();\n\t\treturn this.uxa().open((_1(PublishDialog)).setData(branch).end());\n\t};\n\t\n\ttag.prototype.onbranchunpublish = async function (e,branch){\n\t\te.halt();\n\t\tvar ok = await e.uxa().confirm((\"Are you sure you want to unpublish '\" + (branch.title()) + \"'?\"));\n\t\tif (!ok) { return };\n\t\t\n\t\treturn branch.unpublish();\n\t};\n\t\n\ttag.prototype.onbranchenter = function (e,branch){\n\t\te.halt();\n\t\treturn this.space().navigateTo(branch);\n\t};\n\t\n\ttag.prototype.onbranchdelete = async function (e,branch){\n\t\te.halt();\n\t\tvar ok = await e.uxa().confirm((\"Are you sure you want to delete '\" + (branch.title()) + \"'?\"));\n\t\tif (!ok) { return };\n\t\t\n\t\tif (this.space().branch() == branch) {\n\t\t\tthis.space().navigateTo(this.space().trunk());\n\t\t};\n\t\t\n\t\treturn await branch.model().update({archived_at: new Date()});\n\t};\n\t\n\ttag.prototype.onnotedel = async function (e,note){\n\t\te.halt();\n\t\t\n\t\tvar ok = await e.uxa().confirm((\"Are you sure you want to delete '\" + (note.title) + \"'?\"));\n\t\tif (!ok) { return };\n\t\t\n\t\t// set archived archived_at\n\t\tif (this.space().branch().model() == note) {\n\t\t\tthis.space().navigateTo(this.space().trunk());\n\t\t};\n\t\t\n\t\tawait note.destroy();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.onnotediscard = async function (e,note){\n\t\te.halt();\n\t\tlet branch = await this.space().resolveBranchForModel(note);\n\t\tif (branch && note.isLocal()) {\n\t\t\treturn branch.discard();\n\t\t};\n\t};\n\t\n\ttag.prototype.onnotesave = async function (e,note){\n\t\te.halt();\n\t\tif ((Date.now() - (this._savingNote || 0)) < 500) { return };\n\t\tthis._savingNote = Date.now();\n\t\tlet branch = await this.space().resolveBranchForModel(note);\n\t\treturn this.onbranchsave(e,branch);\n\t};\n\t\n\ttag.prototype.onbrowsertoggle = function (e){\n\t\te.halt();\n\t\tif (this.space().simulator()) {\n\t\t\tthis.space().simulator().setVisible(false);\n\t\t};\n\t\tthis.space().browser().setVisible(!this.space().browser().visible());\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.onconsoletoggle = function (e){\n\t\tvar v_;\n\t\te.halt();\n\t\treturn (this.space().console().setEnabled(v_ = !this.space().console().enabled()),v_);\n\t};\n\t\n\ttag.prototype.onbrowserrun = function (e){\n\t\t// log 'onbrowserrun',e\n\t\te.halt();\n\t\tthis.space().browser().run();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.onnewfile = function (e){\n\t\tvar _t1;\n\t\te.halt();\n\t\treturn this.uxa().open((_1(NewFileDialog)).bindData(this,'space',[]).end());\n\t};\n\t\n\ttag.prototype.onplay = function (e){\n\t\te.halt();\n\t\tvar tl = this.space().timeline();\n\t\tif (tl.isPaused()) {\n\t\t\ttl.play();\n\t\t\treturn this.trigger('spaceplay');\n\t\t};\n\t};\n\t\n\ttag.prototype.ontoggleplayback = function (e,timeline){\n\t\te.halt();\n\t\tvar tl = timeline || this.space().timeline();\n\t\t\n\t\tif (tl.isPlaying()) {\n\t\t\ttl.pause();\n\t\t\treturn this.trigger('spacepaused');\n\t\t} else if (tl.isPaused()) {\n\t\t\ttl.play();\n\t\t\t// should happen when playing through other means as well?\n\t\t\treturn this.trigger('spaceplay');\n\t\t};\n\t};\n\t\n\ttag.prototype.resume = function (){\n\t\tif (this.space().timeline().isPaused()) {\n\t\t\tthis.space().timeline().play();\n\t\t\tthis.trigger('spaceplay');\n\t\t\tthis.dom().focus();\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.ondependencyadd = function (e){\n\t\tvar _t1;\n\t\te.halt();\n\t\tthis.log(\"ondependencyadd\");\n\t\treturn this.uxa().open((_1(DependencyAddDialog)).bindData(this,'space',[]).end());\n\t};\n\t\n\ttag.prototype.oncontrolsevent = function (e){\n\t\tif (e.event() instanceof Event) {\n\t\t\treturn;\n\t\t};\n\t\t\n\t\treturn e.redirect(this);\n\t};\n\t\n\ttag.prototype.onactionevent = function (e){\n\t\t// redirect the custom events to this view\n\t\tif (e.event() instanceof Event) { return };\n\t\treturn e.redirect(this);\n\t};\n\t\n\ttag.prototype.onimportslides = function (e){\n\t\te.halt();\n\t\tvar url = window.prompt(\"Link to presentation\");\n\t\tif (url && url.match(/google\\.com(.*)\\/pub/)) {\n\t\t\treturn this.space().slides().importFromGoogleSlides(url);\n\t\t} else {\n\t\t\treturn this.uxa().flash(\"Link must be to a 'Publish to the web' link from Google Slides\");\n\t\t};\n\t};\n\t\n\ttag.prototype.onreimportslides = function (e){\n\t\te.halt();\n\t\tif (this.space().slides().url()) {\n\t\t\treturn this.space().slides().importFromGoogleSlides(this.space().slides().url());\n\t\t};\n\t};\n\t\n\ttag.prototype.ongoto = function (e,target){\n\t\te.halt();\n\t\t// log 'ongoto',target\n\t\treturn this.space().navigateTo(target);\n\t};\n\t\n\ttag.prototype.markLayout = function (value,prev,desc){\n\t\tthis.flag(desc.name,!!value);\n\t\treturn this._dirty |= DIRTY.LAYOUT;\n\t};\n\t\n\ttag.prototype.synced = function (){\n\t\ttag.prototype.__super__.synced.apply(this,arguments);\n\t\tif (this._dirty || !this._ow) {\n\t\t\tthis.reflow();\n\t\t};\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.editor = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn this._editor || (this._editor = this._editor||_1(EditorView,this).flag('editor')).bindData(this.space(),'primaryEditor',[]).end();\n\t};\n\t\n\ttag.prototype.titlebar = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn this._titlebar || (this._titlebar = this._titlebar||_1(TitlebarView,this).flag('titlebar').setEnabled(true)).bindData(this,'space',[]).end();\n\t};\n\t\n\ttag.prototype.sidebar = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn this._sidebar || (this._sidebar = this._sidebar||_1(SidebarView,this).flag('sidebar')).bindData(this.space(),'sidebar',[]).end();\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1, _t2, $ = this.$, _t3, simulator_, t0;\n\t\tif (false) {};\n\t\tif (this.data().readyState() == 'init' || this.data().readyState() == 'disposing') { return this };\n\t\t\n\t\tlet isReady = this.data().readyState() == 'complete';\n\t\t\n\t\tif (isReady) {\n\t\t\tthis.flag('browser-on',this.data().browser().visible());\n\t\t\tthis.flag('simulator-on',(simulator_ = this.data().simulator()) && simulator_.enabled && simulator_.enabled());\n\t\t\t\n\t\t\tthis.setShowInspector(this.data().console().enabled());\n\t\t\tthis.setMode(this.space().timeline().playState());\n\t\t\t\n\t\t\t// setFlag('focus',\"focus-{data.agent.focus and data.agent.focus.TYPE}\")\n\t\t\tthis.flag('play',this.data().timeline().isPlaying());\n\t\t\tthis.setFlag('playstate',\"ps-\" + this.data().timeline().state());\n\t\t\tthis.flag('is-annotating',this.branch().isAnnotating());\n\t\t\tthis.flag('ws-unstable',this.branch().syncer().latency() > 1500);\n\t\t\tthis.flag('can-edit',this.branch().canEdit());\n\t\t\tthis.flag('unsaved',this.branch().isLocal());\n\t\t\tthis.flag('mine',this.branch().isMine());\n\t\t\t\n\t\t\tthis.setSidebarWidth(this.space().sidebar().width());\n\t\t\tthis.checkActiveElement();\n\t\t};\n\t\t\n\t\tif (this.space()._isNavigating) { return };\n\t\t\n\t\treturn this.$open(0).flag('resize').flag('night').setFlag(-1,(\"trunk-\" + (this.space().trunk().type()))).setFlag(-2,this.space().state()).setFlag(-3,this.space().branch().type()).setChildren([\n\t\t\t(t0 = this._viewport = this._viewport||(t0=_1(SpaceViewport,this)).flag('viewport')).setContent([\n\t\t\t\tthis.titlebar().end(),\n\t\t\t\tthis.editor().end(),\n\t\t\t\tthis.space().inspector().node().end(),\n\t\t\t\tthis.sidebar().end(),\n\t\t\t\t\n\t\t\t\t(isReady && this.space().simulator()) ? (\n\t\t\t\t\tthis.space().simulator().node().end()\n\t\t\t\t) : void(0),\n\t\t\t\t\n\t\t\t\tthis.space().browser().node().end(),\n\t\t\t\t// these should be register by the widgets themselves instead\n\t\t\t\tthis.space().slides().node().end(),\n\t\t\t\t(this._pointer = this._pointer||_1(PointerView,t0).flag('pointer')).bindData(this,'space',[]).end(),\n\t\t\t\t(this.space().type() == 'tutorial') ? (\n\t\t\t\t\t($[0] || _1(ViewportOverlay,$,0,t0)).bindData(this,'space',[]).setEnabled((this.space().timeline().currentTime() == 0 && this.space().isPaused() && this.branch() == this.space().trunk())).end()\n\t\t\t\t) : void(0)\n\t\t\t],1).end(),\n\t\t\t\n\t\t\tthis.branch().isAnnotating() ? (\n\t\t\t\t($[1] || _1(BrushupView,$,1,this).setEnabled(true)).bindData(this,'space',[]).end()\n\t\t\t) : void(0),\n\t\t\t\n\t\t\t($[2] || _1(SpaceControls,$,2,this).flag('timeline-controls').setEnabled(true)).bindData(this,'space',[]).end()\n\t\t],1).synced();\n\t};\n})\nexports.SpaceView = SpaceView;\n", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\n/*\n\nHelper class that represents the local viewer / agent\nKeeps track of the widget options / settings viewer\noverrides, and sets up triggers to clear them when\nplayback resumes etc. Used very little as of yet, but\nit seems like a good idea to have an per-space session/client\n\n*/\n\nfunction Client(space){\n\tthis._space = space;\n\tthis._options = new Map();\n\t\n\tthis._space.on('playing',function() {\n\t\treturn space.agent().options().discardLocals();\n\t});\n\tthis;\n};\n\nexports.Client = Client; // export class \nClient.prototype.idle = function(v){ return this._idle; }\nClient.prototype.setIdle = function(v){ this._idle = v; return this; };\nClient.prototype.options = function(v){ return this._options; }\nClient.prototype.setOptions = function(v){ this._options = v; return this; };\nClient.prototype.space = function(v){ return this._space; }\nClient.prototype.setSpace = function(v){ this._space = v; return this; };\n\nClient.prototype.optionsForItem = function (item){\n\tvar params;\n\tif (!(params = this._options.get(item))) {\n\t\tthis._options.set(item,params = {});\n\t};\n\treturn params;\n};\n\nClient.prototype.set = function (obj,key,value){\n\tvar params = this.optionsForItem(obj);\n\tparams[key] = value;\n\treturn this;\n};\n\nClient.prototype.clearOptions = function (){\n\tvar updates = [];\n\tthis._options.forEach(function(params,widget) {\n\t\tvar v_;\n\t\tif (len$(Object.keys(params))) {\n\t\t\tupdates.push(widget);\n\t\t\tlet res = [];\n\t\t\tfor (let v, i = 0, keys = Object.keys(params), l = keys.length, k; i < l; i++){\n\t\t\t\tk = keys[i];v = params[k];res.push((((v_ = params[k]),delete params[k], v_)));\n\t\t\t};\n\t\t\treturn res;\n\t\t};\n\t});\n\t\n\tfor (let i = 0, len = updates.length; i < len; i++) {\n\t\tupdates[i].optionsDidUpdate();\n\t};\n\treturn this;\n};\n\nClient.prototype.flushLocals = function (){\n\tthis.options().forEach(function(params,widget) {\n\t\treturn widget.options().set(params);\n\t});\n\t\n\treturn this.space().files().forEach(function(file) {\n\t\treturn file.flushLocals();\n\t});\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nfunction len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nvar Imba = require('imba1');\nvar StreamAction = require('./StreamAction').StreamAction;\n\n/*\n\nCursor keeps track of which event we are currently at (in a stream).\nIf a space has multiple branches, the cursor takes care of correctly\nfinding the path between two events and traversing them.\n\nEvents are like commits (in git). Cursor can be asked to \"checkout\" any\ncommit, and internally apply/revert all changes to end up at said commit.\n\n*/\n\nfunction Cursor(space){\n\tthis._space = space;\n\tthis._stack = [];\n\tthis._event = {};\n\tthis._syncing = false;\n\tthis._reverting = false;\n\tthis._targets = [];\n\t\n\t// @current = @tail = @target = []\n\t// @current.OFFSET = 0\n\t// @current.INDEX = -1\n\t\n\tthis._branch = space.trunk();\n\tthis._current = this._target = this._tail = space.trunk().stream().seed();\n\tthis._branches = [this._branch];\n\tthis;\n};\n\nexports.Cursor = Cursor; // export class \nCursor.prototype.space = function(v){ return this._space; }\nCursor.prototype.setSpace = function(v){ this._space = v; return this; };\nCursor.prototype.stack = function(v){ return this._stack; }\nCursor.prototype.setStack = function(v){ this._stack = v; return this; };\nCursor.prototype.current = function(v){ return this._current; }\nCursor.prototype.setCurrent = function(v){ this._current = v; return this; };\nCursor.prototype.syncing = function(v){ return this._syncing; }\nCursor.prototype.setSyncing = function(v){ this._syncing = v; return this; };\nCursor.prototype.__branch = {watch: 'branchDidSet',name: 'branch'};\nCursor.prototype.branch = function(v){ return this._branch; }\nCursor.prototype.setBranch = function(v){\n\tvar a = this.branch();\n\tif(v != a) { this._branch = v; }\n\tif(v != a) { this.branchDidSet && this.branchDidSet(v,a,this.__branch) }\n\treturn this;\n};\nCursor.prototype.skipping = function(v){ return this._skipping; }\nCursor.prototype.setSkipping = function(v){ this._skipping = v; return this; };\nCursor.prototype.branches = function(v){ return this._branches; }\nCursor.prototype.setBranches = function(v){ this._branches = v; return this; };\n\nCursor.prototype.emit = function (name){\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.emit(this,name,params);\n};\nCursor.prototype.on = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.listen.apply(Imba,[].concat([this,name], Array.from(params)));\n};\nCursor.prototype.once = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.once.apply(Imba,[].concat([this,name], Array.from(params)));\n};\nCursor.prototype.un = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.unlisten.apply(Imba,[].concat([this,name], Array.from(params)));\n};\n\nCursor.prototype.lineage = function (e){\n\tvar branch = e.branch();\n\tvar lineage = [e];\n\t// no seeds?\n\twhile (branch && branch.seed()){\n\t\tlineage.unshift(branch._seed);\n\t\tbranch = branch._seed._branch;\n\t};\n\t\n\treturn lineage;\n};\n\nCursor.prototype.compare = function (a,b){\n\tif (a.branch() == b.branch()) {\n\t\tif (b.INDEX < a.INDEX) {\n\t\t\treturn {revertTo: b};\n\t\t} else {\n\t\t\treturn {stepTo: b};\n\t\t};\n\t};\n\t\n\tvar la = this.lineage(a);\n\tvar lb = this.lineage(b);\n\tvar l = Math.min(len$(la),len$(lb));\n\t// find first shared root\n\tvar i = 0;\n\tvar k = 0;\n\t\n\twhile (i < (l - 1)){\n\t\tif (la[i].branch() == lb[i].branch()) {\n\t\t\tk = i;\n\t\t};\n\t\ti++;\n\t};\n\t\n\tvar revTo = lb[k];\n\t\n\tif (la[k].INDEX < lb[k].INDEX) {\n\t\trevTo = la[k];\n\t};\n\t\n\treturn {revertTo: revTo,route: lb.slice(k)};\n};\n\nCursor.prototype.branchDidSet = function (branch,prev){\n\t// did leave first?\n\tvar $1, $2;\n\tthis.setBranches(branch.ancestors().concat(branch).reverse());\n\t\n\tfor (let i = 0, items = iter$(this.branches()), len = items.length; i < len; i++) {\n\t\tlet prev = this.branches()[i - 1];\n\t\titems[i].model().orig.focus = (prev ? prev.model().orig : null);\n\t};\n\t\n\t($1 = prev) && $1.didLeave && $1.didLeave(branch);\n\t($2 = branch) && $2.didEnter && $2.didEnter(prev);\n\tthis.space().emit('branch:enter',branch,prev);\n\twindow.imba && window.imba.commit();\n\treturn this;\n};\n\n\nCursor.prototype.target = function (value){\n\tif (value) {\n\t\tthis._target = value;\n\t\treturn this;\n\t} else {\n\t\treturn this._target;\n\t};\n};\n\nCursor.prototype.canPush = function (action){\n\treturn !this.current()._next && this.branch().canPush(action);\n};\n\nCursor.prototype.sync = function (next,maxTime){\n\t// if space.api.isMobile\n\t// \tmaxTime = 15\n\tif(next === undefined) next = this._target;\n\tif(maxTime === undefined) maxTime = 0;\n\tif (!next) { return };\n\tif (!this._current) {\n\t\tconsole.log(\"first cursor.sync!\",next);\n\t\tthis._current = this.space().trunk().stream().seed();\n\t};\n\t\n\tvar cursor = this.current();\n\tvar ts = Date.now();\n\tthis._syncing = true;\n\tthis._prev = cursor;\n\tthis._next = next;\n\tthis._targets = [];\n\tthis._skipping = !(this.space().timeline().state() == 'playing' || this.space().isLive()) || !this.space()._currentEvent;\n\t\n\tif (cursor == this._tail) {\n\t\t// FIXME since we're setting the cursor here\n\t\t// we cannot do immediate exit whenever we try to sync\n\t\t// next == cursor\n\t\t\n\t\tif (cursor = this._space.trunk().stream().actionAtIndex(0)) {\n\t\t\tthis.apply(cursor);\n\t\t};\n\t};\n\t\n\t// fast exit\n\tif (next == cursor) {\n\t\ttrue;\n\t\t// @syncing = no\n\t\t// console.log \"NEXT == CURSOR\",@target,@prev\n\t\t// return @targets\n\t} else if (next._prev == cursor) {\n\t\tthis.emit('sync:start',next,cursor,this);\n\t\tcursor = this.apply(next,cursor);\n\t} else {\n\t\tthis.emit('sync:start',next,cursor,this);\n\t\tvar path = this.compare(cursor,next);\n\t\t\n\t\t// console.log \"cursor.sync\",cursor,next,path,lineage(cursor),lineage(next)\n\t\t\n\t\tif (path.revertTo) {\n\t\t\t// console.log \"supposed to revert\",path:revertTo.INDEX,path:revertTo.@branch\n\t\t\twhile (cursor != path.revertTo){\n\t\t\t\tcursor = this.revert(cursor);\n\t\t\t\tif (maxTime && (Date.now() - ts) > maxTime) {\n\t\t\t\t\tnext = cursor;break;\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t\t\n\t\tif (path.stepTo) {\n\t\t\t// console.log \"step to\"\n\t\t\twhile (cursor != path.stepTo){\n\t\t\t\tlet after = cursor._next;\n\t\t\t\tcursor = this.apply(after,cursor);\n\t\t\t\tif (maxTime && (Date.now() - ts) > maxTime) {\n\t\t\t\t\tnext = cursor;break;\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t\t\n\t\tif (path.route) {\n\t\t\t// console.log \"routing\",path\n\t\t\tlet k = 0;\n\t\t\tlet r = path.route;\n\t\t\twhile (cursor != next){\n\t\t\t\tlet to = cursor._next;\n\t\t\t\tif (cursor == r[k]) {\n\t\t\t\t\t// we now need to take a different route\n\t\t\t\t\tto = r[++k].branch().stream()._first;\n\t\t\t\t\t// console.log \"jumping into branch\",to\n\t\t\t\t};\n\t\t\t\tcursor = this.apply(to);\n\t\t\t};\n\t\t};\n\t};\n\t\n\tthis._current = this._target = next;\n\tthis.setBranch(this._current.branch());\n\tthis._space.setTimeline(this._current.branch().timeline());\n\t\n\tif (this.branch().isEditing() && this._current._next) {\n\t\t// if we are not syncing to the very last item - we need to leave editing\n\t\tconsole.log(\"throw us out of editing mode\",this._current);\n\t\tthis.branch().setMode('watching');\n\t};\n\t\n\tif (this._targets.length) {\n\t\tfor (let i = 0, items = iter$(this._targets), len = items.length; i < len; i++) {\n\t\t\titems[i].synced_();\n\t\t};\n\t};\n\tthis._syncing = false;\n\treturn this._targets;\n};\n\n\nCursor.prototype.markTarget = function (target){\n\tif (this._targets.indexOf(target) == -1) {\n\t\tthis._targets.push(target);\n\t};\n\treturn;\n};\n\nCursor.prototype.apply = function (e,from){\n\tif (e == this._tail) { return };\n\t\n\t// if from.@next does not match e.@prev\n\t// we need to rollback until we get there\n\tif (from && e._prev != from) {\n\t\t// console.log \"try to apply from invalid event!!\",e,from\n\t\twhile (from && from != e._prev){\n\t\t\tfrom = this.revert(from);\n\t\t};\n\t};\n\t\n\t// add a batch?\n\t// @stack.unshift(e)\n\t\n\tif (e.isEnabled()) {\n\t\te.commitWithCursor(this);\n\t};\n\t// @stack.shift\n\treturn e;\n};\n\n\nCursor.prototype.revert = function (e){\n\t// @stack.unshift e\n\tthis._reverting = true;\n\t\n\t// console.log \"REVERT\",e\n\tif (e.isEnabled()) {\n\t\te.revertWithCursor(this);\n\t};\n\tthis._reverting = false;\n\t// @stack.shift\n\treturn e._prev;\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar protocol$ = require('../protocol'), ACTION = protocol$.ACTION, POINTERMASK = protocol$.POINTERMASK;\nvar PointerUpdate = require('../core/StreamAction').PointerUpdate;\n\nfunction PointerTracker(space){\n\tvar self = this;\n\tself._space = space;\n\tself._handler = function(e) { return self.onevent(e); };\n\tself._intercept = ['mousemove','mousedown','mouseup'];\n\tself._last = Date.now();\n\tself._captures = false;\n\tself._evoptions = {passive: true,capture: false};\n\tself._mask = 0;\n\tself._hover = null;\n\tspace.on('browserevent',function(e) { return self.onbrowserevent(e); });\n\tself;\n};\n\nexports.PointerTracker = PointerTracker; // export class \nPointerTracker.prototype.space = function(v){ return this._space; }\nPointerTracker.prototype.setSpace = function(v){ this._space = v; return this; };\nPointerTracker.prototype.hover = function(v){ return this._hover; }\nPointerTracker.prototype.setHover = function(v){ this._hover = v; return this; };\n\nPointerTracker.prototype.lockedOnTarget = function(v){ return this._lockedOnTarget; }\nPointerTracker.prototype.setLockedOnTarget = function(v){ this._lockedOnTarget = v; return this; };\n\nPointerTracker.prototype.agent = function (){\n\treturn this.space().agent();\n};\n\nPointerTracker.prototype.isActive = function (){\n\treturn this._active;\n};\n\nPointerTracker.prototype.start = function (){\n\tif (this._active) { return }; // or !agent.isRecording\n\tfor (let i = 0, items = iter$(this._intercept), len = items.length; i < len; i++) {\n\t\tthis.space().view().dom().addEventListener(items[i],this._handler,this._evoptions);\n\t};\n\tthis._active = this._ts = Date.now();\n\treturn this;\n};\n\nPointerTracker.prototype.stop = function (){\n\tif (!this._active) { return };\n\tfor (let i = 0, items = iter$(this._intercept), len = items.length; i < len; i++) {\n\t\tthis.space().view().dom().removeEventListener(items[i],this._handler,this._evoptions);\n\t};\n\tthis._active = false;\n\treturn this;\n};\n\nPointerTracker.prototype.targetForElement = function (el){\n\tvar hover = null;\n\tvar isInside = false;\n\tvar origTarget = el;\n\t// if simulator is front and center - the pointer should\n\t// stay with it. Hardcoded exception - should generalize?\n\t// if sim and (e:simX != undefined or sim.node.shouldCapturePointer)\n\t//\ttargetNode = sim.node\n\twhile (el){\n\t\tif (el._tag && el._tag.targetForPointer) {\n\t\t\tif (hover = el._tag.targetForPointer(origTarget)) {\n\t\t\t\tbreak;\n\t\t\t};\n\t\t};\n\t\tel = el.parentNode;\n\t};\n\treturn hover;\n};\n\nPointerTracker.prototype.onbrowserevent = function (e){\n\tvar browser = this.space().browser()._node;\n\t\n\tvar layout = this.space().view().layoutForNode(browser);\n\t\n\tvar data = {\n\t\ttype: e.type,\n\t\tbuttons: e.buttons,\n\t\tspaceX: layout[1] + e.clientX * (layout[2] / e.windowWidth), // browser.dom:offsetLeft\n\t\tspaceY: layout[0] + e.clientY * (layout[3] / e.windowHeight), // browser.dom:offsetTop\n\t\tspaceTarget: browser,\n\t\tshiftKey: e.shiftKey\n\t};\n\treturn this.onevent(data);\n};\n\nPointerTracker.prototype.onevent = function (e){\n\tvar rec = this.space().recording();\n\t\n\t// if !rec or rec.state != 'started'\n\t// \t# only track when recording\n\t// \treturn\n\t\n\tvar now = Date.now();\n\tvar elapsed = now - this._last;\n\t// console.log \"PointerTracker.{e:type}\",elapsed\n\tvar vp = this.space().view().box();\n\tvar x = (e.spaceX != null) ? ((e.spaceX)) : ((e.clientX - vp.left));\n\tvar y = (e.spaceY != null) ? ((e.spaceY)) : ((e.clientY - vp.top));\n\tvar hover = this.lockedOnTarget() || e.spaceTarget || this.targetForElement(e.target);\n\t\n\tx = Math.round(x);\n\ty = Math.round(y);\n\t\n\tvar trigger = (x != this._x || y != this._y);\n\t\n\tif (!rec && !e.shiftKey) {\n\t\treturn;\n\t};\n\t\n\tif (e.type != 'mousemove') {\n\t\t// space.api.log :mouse, e:type, e\n\t\ttrigger = true;\n\t};\n\t\n\tthis._mask = e.buttons;\n\t\n\tif (hover != this._hover) {\n\t\tthis.setHover(hover);\n\t\ttrigger = true;\n\t};\n\t\n\tif (trigger) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis.stamp();\n\t\treturn this._last = now;\n\t};\n\t// @last = now\n};\n\nPointerTracker.prototype.stamp = function (){\n\tvar frame = {\n\t\tx: this._x,\n\t\ty: this._y,\n\t\tflags: this._mask,\n\t\thover: (this._hover ? this._hover.sref() : null)\n\t};\n\tthis.push(frame,this._hover);\n\treturn this;\n};\n\nPointerTracker.prototype.push = function (frame,target){\n\t// console.log \"push pointerFrame\",frame\n\t// return self\n\tif (this.space().isEditing()) {\n\t\t// space.branch.stream.pointer.addFrame(frame)\n\t\t// now ensure layout tracking\n\t\tif (target) {\n\t\t\tthis.space().view().pushNodeLayout(target);\n\t\t};\n\t\tvar action = PointerUpdate.build(frame);\n\t\taction._branch = this.space().branch();\n\t\tthis.space().branch().addLocalEvent(action);\n\t\t// space.view.@pointer.keyframe = action\n\t\tthis.space().view()._pointer.render();\n\t\t// agent.push_(ACTION.POINTER,null,frame)\n\t};\n\treturn this;\n};\n\nPointerTracker.prototype.tick = function (){\n\treturn this;\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nfunction len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\n// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\n\nvar Widget = require('./widget').Widget;\nvar protocol$ = require('../protocol'), ACTION = protocol$.ACTION, SCON = protocol$.SCON;\n\nvar List = require('../util/List').List;\n\nfunction DirWidget(){ return Widget.apply(this,arguments) };\n\nsubclass$(DirWidget,Widget);\nexports.DirWidget = DirWidget; // export class \nDirWidget.register('dir');\n\nDirWidget.option('name');\nDirWidget.option('parent',{type: 'widget'});\nDirWidget.option('expanded');\n\nDirWidget.prototype.setup = function (){\n\treturn this;\n};\n\nDirWidget.prototype.entries = function (){\n\treturn this._entries || (this._entries = new List(this,[]));\n};\n\nDirWidget.prototype.uri = function (){\n\treturn (\"\" + (this.space().namespace()) + \"/\" + this.name());\n};\n\nDirWidget.prototype.ext = function (){\n\treturn this.name().substr(this.name().lastIndexOf('.') + 1);\n};\n\nDirWidget.prototype.mkdir = function (name,o){\n\tvar e;\n\tif(o === undefined) o = {};\n\tvar data = {\n\t\tname: name,\n\t\tparent: this.id(),\n\t\ttype: 'dir',\n\t\tfullPath: o.fullPath\n\t};\n\t\n\tif (e = this.entries().first(function(entry) { return entry.name() == name; })) {\n\t\tconsole.log((\"dir already exists \" + name));\n\t\treturn e;\n\t};\n\t\n\tvar dir = this.space().createWidget(data).widget();\n\treturn dir;\n};\n\nDirWidget.prototype.mkfile = function (name,o){\n\t\n\tif(o === undefined) o = {};\n\tvar data = {\n\t\tname: name,\n\t\tparent: this.id(),\n\t\ttype: 'file',\n\t\tbody: o.body || '',\n\t\tfullPath: o.fullPath\n\t};\n\t\n\tfor (let v, i = 0, keys = Object.keys(o), l = keys.length, k; i < l; i++){\n\t\tk = keys[i];v = o[k];data[k] || (data[k] = v);\n\t};\n\t\n\tif (!name || this.entries().any(function(entry) { return entry.name() == name; })) {\n\t\tconsole.log((\"file already exists \" + name));\n\t\treturn null;\n\t};\n\t\n\treturn this.space().createWidget(data).widget();\n};\n\n\nDirWidget.prototype.rename = function (name){\n\t// should check with filesystem(!)\n\tif (!name || name == this.name() || this.parentDir().entries().any(function(f) { return f.name() == name; })) {\n\t\treturn this;\n\t};\n\t\n\treturn this.push_(ACTION.FS_RENAME,[this.id(),name]);\n};\n\nDirWidget.prototype.rm = function (){\n\tif (len$(this.entries())) {\n\t\tthis.log(\"Directory is not empty\");\n\t\treturn this;\n\t};\n\t\n\treturn this.push_(ACTION.FS_REMOVE,[this.id()]);\n};\n\n\nDirWidget.prototype.moveTo = function (target){\n\t// should be separate action, or just change parent?\n\tthis.log(\"moveTo\",target);\n\tif (target.path().indexOf(this.path()) == 0) {\n\t\tthis.log(\"target is inside folder - not allowed\");\n\t\treturn this;\n\t};\n\t\n\tif (this.parent() == target) {\n\t\treturn this;\n\t};\n\t\n\tthis.push_(ACTION.FS_MOVE,[this.id(),target.id()]);\n\treturn this;\n};\n\nDirWidget.prototype.mount_ = function (){\n\tDirWidget.prototype.__super__.mount_.apply(this,arguments);\n\tif (this.parentDir()) { return this.parentDir().entries().add(this) };\n};\n\nDirWidget.prototype.unmount_ = function (){\n\tDirWidget.prototype.__super__.unmount_.apply(this,arguments);\n\tif (this.parentDir()) { return this.parentDir().entries().remove(this) };\n};\n\nDirWidget.prototype.parentDir = function (){\n\treturn this.parent() || this.space().fs();\n};\n\nDirWidget.prototype.path = function (){\n\treturn (\"\" + (this.parentDir().path()) + \"/\" + this.name());\n};\n\nfunction FileSystemWidget(){ return DirWidget.apply(this,arguments) };\n\nsubclass$(FileSystemWidget,DirWidget);\nexports.FileSystemWidget = FileSystemWidget; // export class \nFileSystemWidget.register('fs');\n\nFileSystemWidget.prototype.name = function (){\n\treturn \"project\";\n};\n\nFileSystemWidget.prototype.path = function (){\n\treturn \"\";\n};\n\nFileSystemWidget.prototype.rm = function (){\n\treturn this;\n};\n\nFileSystemWidget.prototype.parentDir = function (){\n\treturn null;\n};\n\nFileSystemWidget.prototype.findDir = function (path){\n\tif (path[0] != '/') { path = '/' + path };\n\tfor (let i = 0, items = iter$(this.space().widgets()), len = items.length, item; i < len; i++) {\n\t\titem = items[i];\n\t\tif (item.TYPE != 'dir') { continue; };\n\t\tif (item.path() == path) {\n\t\t\treturn item;\n\t\t};\n\t};\n\treturn null;\n};\n\nFileSystemWidget.prototype.find = function (path){\n\tif (path[0] != '/') { path = '/' + path };\n\tfor (let i = 0, items = iter$(this.space().widgets()), len = items.length, item; i < len; i++) {\n\t\titem = items[i];\n\t\tif (item.TYPE != 'file') { continue; };\n\t\tif (item.path() == path) {\n\t\t\treturn item;\n\t\t};\n\t};\n\treturn null;\n};\n\nFileSystemWidget.prototype.nodemap = function (){\n\tvar nodes = {};\n\tfor (let i = 0, items = iter$(this.space().widgets()), len = items.length, item; i < len; i++) {\n\t\titem = items[i];\n\t\tif (item.TYPE != 'file') { continue; };\n\t\tnodes[item.path()] = item.id();\n\t};\n\treturn nodes;\n};\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\n// externs;\n\nvar Widget = require('./widget').Widget;\nvar protocol$ = require('../protocol'), WIDGET = protocol$.WIDGET, SCON = protocol$.SCON, ACTION = protocol$.ACTION;\nvar List = require('../util/List').List;\n\nfunction SlideSteps(){ };\n\nSlideSteps.equals = function (old,new$){\n\treturn old && new$ && JSON.stringify(old) == JSON.stringify(new$);\n};\n\nvar REMAPPED_LINKS = {\n\t\"https://discord.gg/vrxpTHUzSs\": \"https://scrimba.com/links/discord-i-built-this\",\n\t\"https://discord.gg/25wb5WPWK7\": \"https://scrimba.com/links/discord-i-built-this\",\n\t\"https://discord.gg/JATbC75qb4\": \"https://scrimba.com/links/discord-announcements\",\n\t\"https://discord.gg/mkGXNwDeFA\": \"https://scrimba.com/links/scrimba-pets\",\n\t\"https://discord.gg/yCfT4yrMWH\": \"https://scrimba.com/links/power-hour\",\n\t\"https://discord.gg/FZe9mBd\": \"https://scrimba.com/links/discord-module-4-channel\",\n\t\"https://discord.gg/6ctWsxh\": \"https://scrimba.com/links/discord-module-5-channel\",\n\t\"https://discord.gg/g8HBmxc\": \"https://scrimba.com/links/discord-module-7-channel\",\n\t\"https://discord.gg/g8KjWb3\": \"https://scrimba.com/links/discord-module-8-channel\",\n\t\"https://discord.gg/QzKhtyX\": \"https://scrimba.com/links/discord-module-9-channel\",\n\t\"https://discord.gg/hjuEbDE\": \"https://scrimba.com/links/discord-module-10\"\n};\n\n\n\nfunction SlideWidget(){ return Widget.apply(this,arguments) };\n\nsubclass$(SlideWidget,Widget);\nexports.SlideWidget = SlideWidget; // export class \nSlideWidget.register('slide');\n\nSlideWidget.option('extid');\nSlideWidget.option('name');\nSlideWidget.option('title');\nSlideWidget.option('blobId');\nSlideWidget.option('body'); // svg content\nSlideWidget.option('meta');\nSlideWidget.option('width');\nSlideWidget.option('height');\nSlideWidget.option('steps',{type: SlideSteps});\nSlideWidget.option('currentStep',{'default': -1});\n\nSlideWidget.prototype.setup = function (){\n\tvar self = this;\n\tself._bodies = {};\n\tself._fetches = {inline: {then: function(cb) { return cb(self.body()); }}};\n\treturn self;\n};\n\nSlideWidget.prototype.posToScreen = function (px,py,sl,cl){\n\treturn this;\n};\n\nSlideWidget.prototype.upload = async function (){\n\tvar v_;\n\tif (this.body()) {\n\t\tvar res = await this.space().api().uploadBlob(this.body());\n\t\tthis.setBlobId(res.id);\n\t\treturn (this.setBody(null),null);\n\t};\n};\n\nSlideWidget.prototype.preload = async function (){\n\tvar svg;\n\tvar res = await this.space().api().fetchBlob(this.blobId());\n\treturn svg = await res.text();\n};\n\nSlideWidget.prototype.rewriteSVG = function (svg){\n\t// remove elements that can be tabbed to\n\tsvg = svg.replace(/\\stabindex=\\\"-?\\d+\\\"/g,'');\n\t// remove google external url redirect page from links\n\tsvg = svg.replace(/(xlink:href=\\\")([^\"]+)(\")/g,function(m,pre,url,post) {\n\t\tif (url.indexOf(\"https://www.google.com/url?q=\") == 0) {\n\t\t\turl = unescape(url.slice(29).split('&')[0]);\n\t\t};\n\t\t\n\t\tif (REMAPPED_LINKS[url]) {\n\t\t\turl = REMAPPED_LINKS[url];\n\t\t};\n\t\t\n\t\treturn pre + url + post;\n\t});\n\treturn svg;\n};\n\nSlideWidget.prototype.fetchBody = function (){\n\t// unless self.blobId\n\t// \treturn @syncFetcher ||= {then: (do |cb| cb(self.body) )}\n\tvar self = this;\n\tlet blobId = self.blobId() || 'inline';\n\treturn self._fetches[blobId] || (self._fetches[blobId] = new Promise(async function(resolve,reject) {\n\t\tvar res = await self.space().api().fetchBlob(blobId);\n\t\tvar svg = await res.text();\n\t\tsvg = self.rewriteSVG(svg);\n\t\tself._bodies[blobId] = svg;\n\t\tself._fetches[blobId] = {then: function(cb) { return cb(svg); }};\n\t\treturn resolve(svg);\n\t}));\n};\n\nSlideWidget.prototype.ext = function (){\n\treturn this.name().substr(this.name().lastIndexOf('.') + 1);\n};\n\nSlideWidget.prototype.commitAdd = function (){\n\tSlideWidget.prototype.__super__.commitAdd.apply(this,arguments);\n\treturn this;\n};\n\nSlideWidget.prototype.buffer = function (){\n\treturn this.data().buffer || this.data().body;\n};\n\nSlideWidget.prototype.toString = function (){\n\treturn this.body();\n};\n\nSlideWidget.prototype.persist_ = function (){\n\t// @data:body = currentBody\n\t// @data:selState = @selState\n\treturn this;\n};\n\nSlideWidget.prototype.node = function (){\n\treturn this._editor;\n};\n\nSlideWidget.prototype.isBinary = function (){\n\treturn !(!(this.blobId()));\n};\n", "/**\n * TinyAnimate.animate()\n */\nexports.animate = function(from, to, duration, update, easing, done) {\n\n // Early bail out if called incorrectly\n if (typeof from !== 'number' ||\n typeof to !== 'number' ||\n typeof duration !== 'number' ||\n typeof update !== 'function')\n return;\n\n // Determine easing\n if (typeof easing === 'string' && easings[easing]) {\n easing = easings[easing];\n }\n if (typeof easing !== 'function') {\n easing = easings.linear;\n }\n\n // Create mock done() function if necessary\n if (typeof done !== 'function') {\n done = function() {};\n }\n\n // Pick implementation (requestAnimationFrame | setTimeout)\n var rAF = window.requestAnimationFrame || function(callback) {\n window.setTimeout(callback, 1000 / 60);\n };\n\n // Animation loop\n var canceled = false;\n var change = to - from;\n function loop(timestamp) {\n if (canceled) {\n return;\n }\n var time = (timestamp || +new Date()) - start;\n if (time >= 0) {\n update(easing(time, from, change, duration));\n }\n if (time >= 0 && time >= duration) {\n update(to);\n done();\n } else {\n rAF(loop);\n }\n }\n update(from);\n\n // Start animation loop\n var start = window.performance && window.performance.now ? window.performance.now() : +new Date();\n\n rAF(loop);\n\n return {\n cancel: function() {\n canceled = true;\n }\n };\n};\n\n/**\n * TinyAnimate.animateCSS()\n * Shortcut method for animating css properties\n */\nexports.animateCSS = function(element, property, unit, from, to, duration, easing, done) {\n\n var update = function(value) {\n element.style[property] = value + unit;\n };\n return exports.animate(from, to, duration, update, easing, done);\n};\n\n/**\n * TinyAnimate.cancel()\n * Method for canceling animations\n */\nexports.cancel = function(animation) {\n if (!animation) {\n return;\n }\n animation.cancel();\n};\n\n/**\n * TinyAnimate.easings\n * Adapted from jQuery Easing\n */\nvar easings = exports.easings = {};\neasings.linear = function(t, b, c, d) {\n return c * t / d + b;\n};\neasings.easeInQuad = function(t, b, c, d) {\n return c * (t /= d) * t + b;\n};\neasings.easeOutQuad = function(t, b, c, d) {\n return -c * (t /= d) * (t - 2) + b;\n};\neasings.easeInOutQuad = function(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t + b;\n return -c / 2 * ((--t) * (t - 2) - 1) + b;\n};\neasings.easeInCubic = function(t, b, c, d) {\n return c * (t /= d) * t * t + b;\n};\neasings.easeOutCubic = function(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t + 1) + b;\n};\neasings.easeInOutCubic = function(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t * t + b;\n return c / 2 * ((t -= 2) * t * t + 2) + b;\n};\neasings.easeInQuart = function(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n};\neasings.easeOutQuart = function(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n};\neasings.easeInOutQuart = function(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b;\n return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n};\neasings.easeInQuint = function(t, b, c, d) {\n return c * (t /= d) * t * t * t * t + b;\n};\neasings.easeOutQuint = function(t, b, c, d) {\n return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n};\neasings.easeInOutQuint = function(t, b, c, d) {\n if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b;\n return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n};\neasings.easeInSine = function(t, b, c, d) {\n return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n};\neasings.easeOutSine = function(t, b, c, d) {\n return c * Math.sin(t / d * (Math.PI / 2)) + b;\n};\neasings.easeInOutSine = function(t, b, c, d) {\n return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n};\neasings.easeInExpo = function(t, b, c, d) {\n return (t == 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;\n};\neasings.easeOutExpo = function(t, b, c, d) {\n return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n};\neasings.easeInOutExpo = function(t, b, c, d) {\n if (t == 0) return b;\n if (t == d) return b + c;\n if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n};\neasings.easeInCirc = function(t, b, c, d) {\n return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n};\neasings.easeOutCirc = function(t, b, c, d) {\n return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n};\neasings.easeInOutCirc = function(t, b, c, d) {\n if ((t /= d / 2) < 1) return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n};\neasings.easeInElastic = function(t, b, c, d) {\n var p = 0;\n var a = c;\n if (t == 0) return b;\n if ((t /= d) == 1) return b + c;\n if (!p) p = d * .3;\n if (a < Math.abs(c)) {\n a = c;\n var s = p / 4;\n }\n else var s = p / (2 * Math.PI) * Math.asin(c / a);\n return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n};\neasings.easeOutElastic = function(t, b, c, d) {\n var p = 0;\n var a = c;\n if (t == 0) return b;\n if ((t /= d) == 1) return b + c;\n if (!p) p = d * .3;\n if (a < Math.abs(c)) {\n a = c;\n var s = p / 4;\n }\n else var s = p / (2 * Math.PI) * Math.asin(c / a);\n return a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b;\n};\neasings.easeInOutElastic = function(t, b, c, d) {\n var p = 0;\n var a = c;\n if (t == 0) return b;\n if ((t /= d / 2) == 2) return b + c;\n if (!p) p = d * (.3 * 1.5);\n if (a < Math.abs(c)) {\n a = c;\n var s = p / 4;\n }\n else var s = p / (2 * Math.PI) * Math.asin(c / a);\n if (t < 1) return -.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b;\n return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b;\n};\neasings.easeInBack = function(t, b, c, d, s) {\n if (s == undefined) s = 1.70158;\n return c * (t /= d) * t * ((s + 1) * t - s) + b;\n};\neasings.easeOutBack = function(t, b, c, d, s) {\n if (s == undefined) s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n};\neasings.easeInOutBack = function(t, b, c, d, s) {\n if (s == undefined) s = 1.70158;\n if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;\n return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;\n};\neasings.easeInBounce = function(t, b, c, d) {\n return c - easings.easeOutBounce(d - t, 0, c, d) + b;\n};\neasings.easeOutBounce = function(t, b, c, d) {\n if ((t /= d) < (1 / 2.75)) {\n return c * (7.5625 * t * t) + b;\n } else if (t < (2 / 2.75)) {\n return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;\n } else if (t < (2.5 / 2.75)) {\n return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;\n } else {\n return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;\n }\n};\neasings.easeInOutBounce = function(t, b, c, d) {\n if (t < d / 2) return easings.easeInBounce(t * 2, 0, c, d) * .5 + b;\n return easings.easeOutBounce(t * 2 - d, 0, c, d) * .5 + c * .5 + b;\n};", "function len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar animlib = require('./anim.js');\n\nfunction SlideAnimator(slide,svg,steps){\n\tvar self = this;\n\tself._slide = slide;\n\tself._space = slide.space();\n\tself._svg = svg;\n\tself._steps = steps;\n\tself._time = 0;\n\tself._duration = 0;\n\tself._stops = [];\n\tself._animations = [];\n\tself._updater = function(val) { return self.update(val); };\n\tself.build();\n\tself;\n};\n\n\nexports.SlideAnimator = SlideAnimator; // export class \nSlideAnimator.prototype.svg = function(v){ return this._svg; }\nSlideAnimator.prototype.setSvg = function(v){ this._svg = v; return this; };\nSlideAnimator.prototype.space = function(v){ return this._space; }\nSlideAnimator.prototype.setSpace = function(v){ this._space = v; return this; };\nSlideAnimator.prototype.steps = function(v){ return this._steps; }\nSlideAnimator.prototype.setSteps = function(v){ this._steps = v; return this; };\nSlideAnimator.prototype.duration = function(v){ return this._duration; }\nSlideAnimator.prototype.setDuration = function(v){ this._duration = v; return this; };\nSlideAnimator.prototype.animations = function(v){ return this._animations; }\nSlideAnimator.prototype.setAnimations = function(v){ this._animations = v; return this; };\nSlideAnimator.prototype.__animator = {watch: 'animatorDidSet',name: 'animator'};\nSlideAnimator.prototype.animator = function(v){ return this._animator; }\nSlideAnimator.prototype.setAnimator = function(v){\n\tvar a = this.animator();\n\tif(v != a) { this._animator = v; }\n\tif(v != a) { this.animatorDidSet && this.animatorDidSet(v,a,this.__animator) }\n\treturn this;\n};\nSlideAnimator.prototype.__currentStep = {'default': -1,watch: 'currentStepDidSet',name: 'currentStep'};\nSlideAnimator.prototype.currentStep = function(v){ return this._currentStep; }\nSlideAnimator.prototype.setCurrentStep = function(v){\n\tvar a = this.currentStep();\n\tif(v != a) { this._currentStep = v; }\n\tif(v != a) { this.currentStepDidSet && this.currentStepDidSet(v,a,this.__currentStep) }\n\treturn this;\n}\nSlideAnimator.prototype._currentStep = -1;\n\nSlideAnimator.prototype.build = function (){\n\tvar self = this;\n\tfor (let i = 0, items = iter$(self.steps()), len = items.length, step; i < len; i++) {\n\t\tstep = items[i];\n\t\tlet stepDur = 0;\n\t\tstep.T0 = self.duration();\n\t\tstep[0].map(function(anim) {\n\t\t\tlet t0 = step.T0;\n\t\t\t\n\t\t\t// animation for slide itself?\n\t\t\tif (anim[6] == 2) {\n\t\t\t\treturn;\n\t\t\t};\n\t\t\t\n\t\t\tanim.EL = self.svg().querySelector('#' + anim[1]); // svg.getElementById(anim[1])\n\t\t\tlet dur = anim.DUR = anim[2];\n\t\t\tlet delay = anim.DELAY = anim[3];\n\t\t\t// create the animator here?\n\t\t\tstepDur = Math.max(stepDur,anim.DELAY + anim.DUR);\n\t\t\tanim.PROGRESS = 1;\n\t\t\t\n\t\t\tanim.UPDATE = function(t) {\n\t\t\t\tlet relTime = Math.max(Math.min(t - t0 - delay,dur),0);\n\t\t\t\tlet relPct = relTime / dur;\n\t\t\t\tlet prevPct = this.PROGRESS;\n\t\t\t\tlet el = this.EL || (this.EL = self.svg().querySelector('#' + anim[1])); // svg.getElementById(this[1])\n\t\t\t\t// no need to do anything if animation is already at correct step\n\t\t\t\tif (prevPct == relPct || !this.EL) {\n\t\t\t\t\treturn;\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tthis.PROGRESS = relPct;\n\t\t\t\t\n\t\t\t\tlet obj = this.EL.style;\n\t\t\t\t\n\t\t\t\tfor (let j = 0, ary = iter$(this[0]), len = ary.length, fx; j < len; j++) {\n\t\t\t\t\tfx = ary[j];\n\t\t\t\t\tlet val;\n\t\t\t\t\t\n\t\t\t\t\tif (fx[0] == 0) { // FADE IN/OUT\n\t\t\t\t\t\tval = fx[1] + (fx[2] - fx[1]) * relPct;\n\t\t\t\t\t\tobj.opacity = val;\n\t\t\t\t\t} else if (fx[0] == 3) { // SLIDE IN/OUT\n\t\t\t\t\t\tlet eased = animlib.easings.easeInOutCubic(relPct,0,1,1);\n\t\t\t\t\t\tlet x = fx[1] + (fx[3] - fx[1]) * eased;\n\t\t\t\t\t\tlet y = fx[2] + (fx[4] - fx[2]) * eased;\n\t\t\t\t\t\t// console.log \"found slide anim!!!\",x,y,fx[1],fx[3]\n\t\t\t\t\t\tobj.transform = (\"translate(\" + (x * 100) + \"%,\" + (y * 100) + \"%)\");\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t};\n\t\t\t\n\t\t\treturn self._animations.push(anim);\n\t\t});\n\t\t\n\t\tself.setDuration(self.duration() + stepDur);\n\t\tstep.T1 = self.duration(); // there is an actual pause here after this step\n\t};\n\treturn self;\n};\n\nSlideAnimator.prototype.reset = function (){\n\tthis._time = this.duration();\n\tthis.update(0);\n\treturn this;\n};\n\nSlideAnimator.prototype.update = function (t1){\n\tlet t0 = this._time;\n\tlet anims = this.animations();\n\t// move through steps between t0 and t1 to get to the correct starting pos\n\t// console.log \"anim update\",t0,t1\n\t// console.log \"update\",t1,Date.now\n\t\n\tif (t1 > t0) {\n\t\tfor (let i = 0, items = iter$(anims), len = items.length; i < len; i++) {\n\t\t\titems[i].UPDATE(t1,t0);\n\t\t};\n\t} else if (t1 < t0) {\n\t\tlet i = len$(anims);\n\t\twhile (i > 0){\n\t\t\tanims[--i].UPDATE(t1,t0);\n\t\t};\n\t};\n\tthis._time = t1;\n\treturn this;\n};\n\nSlideAnimator.prototype.animate = function (from,to,dur){\n\tif (dur == undefined) {\n\t\tdur = Math.abs(to - from);\n\t};\n\t// console.log \"animate\",from,to,dur\n\tthis.setAnimator(animlib.animate(from,to,dur,this._updater,'linear'));\n\treturn this;\n};\n\nSlideAnimator.prototype.animatorDidSet = function (animator,prev){\n\tif (prev) { return prev.cancel() };\n};\n\nSlideAnimator.prototype.currentStepDidSet = function (value,prev){\n\tlet t = 0;\n\tlet step = this._steps[value];\n\tif (step) {\n\t\tt = step.T1;\n\t};\n\t\n\tthis.setAnimator(null);\n\t// animate forward\n\tif ((value - prev) == 1) {\n\t\t// continue animating from previous?\n\t\tlet dur = (step.T1 - step.T0) / (this.space().timeline().playbackRate() || 1);\n\t\tthis.animate(step.T0,t,dur);\n\t} else {\n\t\t\n\t\tthis.update(t);\n\t};\n\treturn this;\n};\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/), _2 = Imba.createTagScope(/*SCOPEID*/);\nvar LAYOUTMASK = require('../protocol').LAYOUTMASK;\n\nvar InterfaceView = require('./InterfaceView').InterfaceView;\nvar SlideAnimator = require('../util/SlideAnimator').SlideAnimator;\n\nvar SlideView = _2.defineTag('SlideView', function(tag){\n\t\n\ttag.prototype.__svg = {watch: 'svgDidSet',name: 'svg'};\n\ttag.prototype.svg = function(v){ return this._svg; }\n\ttag.prototype.setSvg = function(v){\n\t\tvar a = this.svg();\n\t\tif(v != a) { this._svg = v; }\n\t\tif(v != a) { this.svgDidSet && this.svgDidSet(v,a,this.__svg) }\n\t\treturn this;\n\t};\n\ttag.prototype.__fetcher = {watch: 'fetcherDidSet',name: 'fetcher'};\n\ttag.prototype.fetcher = function(v){ return this._fetcher; }\n\ttag.prototype.setFetcher = function(v){\n\t\tvar a = this.fetcher();\n\t\tif(v != a) { this._fetcher = v; }\n\t\tif(v != a) { this.fetcherDidSet && this.fetcherDidSet(v,a,this.__fetcher) }\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.setup = function (){\n\t\t// sref = data.id\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.fetcherDidSet = function (fn){\n\t\tvar self = this;\n\t\tif (fn && fn.then) {\n\t\t\tfn.then(function(res) { return (self.setSvg(res),res); });\n\t\t};\n\t\treturn;\n\t};\n\t\n\ttag.prototype.svgDidSet = function (data){\n\t\tthis.body().dom().innerHTML = data;\n\t\tthis.initAnimations();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.body = function (){\n\t\tlet _t1, $ = this.$$ || (this.$$ = {});\n\t\treturn (this._body = this._body||_1('div',this).flag('body'));\n\t};\n\t\n\ttag.prototype.isWiderThanViewport = function (){\n\t\tlet ratio = this.data().width() / this.data().height();\n\t\treturn ratio > (this.data().space().vw() / (this.data().space().vh() - 30));\n\t};\n\t\n\ttag.prototype.initAnimations = function (){\n\t\tlet svg = this._body.dom().firstElementChild;\n\t\tthis._animator = new SlideAnimator(this.data(),svg,this.data().steps());\n\t\tthis._animator.reset();\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.render = function (){\n\t\tvar _t1;\n\t\tthis.$open(0).setFetcher((this.data().fetchBody())).setChildren(\n\t\t\tthis.body()\n\t\t,3).synced();\n\t\t\n\t\tif (this._animator) {\n\t\t\tthis._animator.setCurrentStep(this.data().currentStep());\n\t\t};\n\t\t\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.ontap = function (e){\n\t\tvar link;\n\t\ttry {\n\t\t\tif (link = e.native().target.closest('a')) {\n\t\t\t\tlet target = link.getAttribute('target');\n\t\t\t\te.stop();\n\t\t\t\tif (target) {\n\t\t\t\t\te._responder = null;\n\t\t\t\t} else {\n\t\t\t\t\te.prevent();\n\t\t\t\t\twindow.open(link.getAttribute('href'),'_blank');\n\t\t\t\t};\n\t\t\t};\n\t\t} catch (e) { };\n\t\treturn this;\n\t};\n});\n\nvar SlidesBody = _2.defineTag('SlidesBody', function(tag){\n\t\n\ttag.prototype.layoutMask = function (){\n\t\treturn LAYOUTMASK.SCALED | LAYOUTMASK.BOUNDLESS;\n\t};\n});\n\nvar SlidesView = _2.defineTag('SlidesView', InterfaceView, function(tag){\n\t\n\ttag.prototype.data = function(v){ return this._data; }\n\ttag.prototype.setData = function(v){ this._data = v; return this; };\n\t\n\ttag.prototype.setup = function (){\n\t\twindow.fetched || (window.fetched = {});\n\t\treturn window.fetching || (window.fetching = {});\n\t};\n\ttag.prototype.space = function (){\n\t\treturn this.data().space();\n\t};\n\t\n\ttag.prototype.commit = function (){\n\t\tthis.setEnabled(true); // data.visible\n\t\ttag.prototype.__super__.commit.apply(this,arguments);\n\t\treturn this.flag('pip',!this.data().visible());\n\t};\n\t\n\ttag.prototype.tapBody = function (e){\n\t\te.stop().prevent();\n\t\t// if data.visible\n\t\t//\tdata.visible = false\n\t\tif (!this.data().visible() && this.data().currentSlide()) {\n\t\t\treturn (this.data().setVisible(true),true);\n\t\t};\n\t};\n\t\n\ttag.prototype.hide = function (){\n\t\tthis.data().setVisible(false);\n\t\treturn this;\n\t};\n\t\n\ttag.prototype.slideForId = function (id){\n\t\tlet _t1, id_, $ = this.$$ || (this.$$ = {}), $1;\n\t\treturn id && ($[($1 = 'id$' + id)] || _1(SlideView,$,$1,this)).setData(this.data().space().widgets().get(id)).end();\n\t};\n\t\n\t\n\ttag.prototype.targetForPointer = function (orig){\n\t\treturn this._body;\n\t};\n\t\n\ttag.prototype.reflow = function (){\n\t\tlet vw = this.space().vw();\n\t\tlet vh = this.space().vh();\n\t\t\n\t\tlet w = this.data().width();\n\t\tlet h = this.data().height();\n\t\t\n\t\tlet ratio = (this.data().width() || 16) / (this.data().height() || 9);\n\t\tlet wide = ratio > (vw / vh);\n\t\t\n\t\t// early return if nothing has changed\n\t\tif (!this.invalidated(vw,vh,w,h)) { return this._sizing };\n\t\t\n\t\tlet max = {};\n\t\tlet pip = {left: 0,bottom: 0,width: 200};\n\t\t\n\t\tif (wide) {\n\t\t\tmax.width = Math.ceil(vw * 0.9);\n\t\t\tmax.height = Math.round(max.width / ratio);\n\t\t} else {\n\t\t\tmax.height = Math.round((vh - 30) * 0.9);\n\t\t\tmax.width = Math.ceil(max.height * ratio);\n\t\t};\n\t\t\n\t\tvar vpad = (vh - max.height) * 0.5;\n\t\tvar hpad = (vw - max.width) * 0.5;\n\t\t\n\t\t// max:left = '50%'\n\t\t// max:bottom = '50%'\n\t\t// max:marginBottom = '30px'\n\t\t// max:transform = \"translate(-50%,50%)\"\n\t\t// pip:transform = \"scale({180 / max:width})\"\n\t\t\n\t\tvar yOffset = (vpad < 64) ? ((64 - vpad)) : 0;\n\t\t\n\t\tthis._body.css(max);\n\t\tthis.dom().style.setProperty('--pip-transform',(\"scale(\" + (pip.width / max.width) + \")\"));\n\t\tthis.dom().style.setProperty('--max-transform',(\"translate(-50%,50%) translateY(-\" + yOffset + \"px)\"));\n\t\treturn this._sizing = {max: max,pip: pip};\n\t};\n\ttag.prototype.fetchNextSlides = async function (n){\n\t\tif(n === undefined) n = 1;\n\t\tconst next = this.data().nextSlide(n);\n\t\tif (next) {\n\t\t\tconst _id = this.space().id() + \":\" + next.id();\n\t\t\tif (!window.fetched[_id] && !window.fetching[_id]) {\n\t\t\t\twindow.fetching[_id] = true;\n\t\t\t\tconst body = await next.fetchBody();\n\t\t\t\tconst _svg = window.document.createElement(\"div\");\n\t\t\t\t_svg.innerHTML = body;\n\t\t\t\tawait new Promise(function(resolve) {\n\t\t\t\t\tlet count = 0;\n\t\t\t\t\tlet images = _svg.querySelectorAll('image');\n\t\t\t\t\tlet res = [];\n\t\t\t\t\tfor (let i = 0, items = iter$(images), len = items.length; i < len; i++) {\n\t\t\t\t\t\tres.push(items[i].addEventListener('load',function() {\n\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\tif (count == images.length) {\n\t\t\t\t\t\t\t\treturn resolve();\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}));\n\t\t\t\t\t};\n\t\t\t\t\treturn res;\n\t\t\t\t});\n\t\t\t\twindow.fetched[_id] = true;\n\t\t\t\twindow.fetching[_id] = false;\n\t\t\t};\n\t\t\treturn this.fetchNextSlides(n + 1);\n\t\t};\n\t};\n\ttag.prototype.render = function (){\n\t\t// preload surrounding slides\n\t\tvar self = this, _t1, _t2, $ = this.$, _t3, prevSlide_, t0;\n\t\tself.fetchNextSlides();\n\t\t(prevSlide_ = self.data().prevSlide()) && prevSlide_.fetchBody && prevSlide_.fetchBody().then(function() { var $1;\n\t\treturn ($1 = self.data().prevSlide(2)) && $1.fetchBody && $1.fetchBody(); });\n\t\t\n\t\tself.$open(0).flagIf('empty',(!self.data().currentSlideId())).setChildren($.$ = $.$ || [\n\t\t\tself._cover = self._cover||_1('div',self).flag('cover').on$(0,['tap','hide'],self),\n\t\t\tt0 = self._body = self._body||(t0=_1(SlidesBody,self)).flag('body').on$(0,['tap','tapBody'],self)\n\t\t],2).synced((\n\t\t\tself._body.setSref(self.data().id()).setContent([\n\t\t\t\t(self._shadow = self._shadow||_1('div',t0).flag('shadow')),\n\t\t\t\tself.data().currentSlideId() ? (\n\t\t\t\t\tself._slideView = self.slideForId(self.data().currentSlideId())\n\t\t\t\t) : void(0)\n\t\t\t],1).end()\n\t\t,true));\n\t\tself.reflow();\n\t\t\n\t\treturn self;\n\t};\n})\nexports.SlidesView = SlidesView;\n", "function iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nfunction len$(a){\n\treturn a && (a.len instanceof Function ? a.len() : a.length) || 0;\n};\n// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar Imba = require('imba1'), _1 = Imba.createElementFactory(/*SCOPEID*/);\nvar Widget = require('./widget').Widget;\nvar SlideWidget = require('./SlideWidget').SlideWidget;\nvar SlidesView = require('../views/SlidesView').SlidesView;\n\n// import fetchFromGoogleSlides from '../util/SlidesImporter'\n\nfunction SlidesWidget(){ return Widget.apply(this,arguments) };\n\nsubclass$(SlidesWidget,Widget);\nexports.SlidesWidget = SlidesWidget; // export class \nSlidesWidget.option('url');\nSlidesWidget.option('visible',{'default': false,overridable: true});\nSlidesWidget.option('currentSlide');\nSlidesWidget.option('currentIndex',{'default': 0});\n\n// list of widget-ids referring to the slides to use\nSlidesWidget.option('items');\nSlidesWidget.option('width');\nSlidesWidget.option('height');\n\n// slides -- ids with order\n\nSlidesWidget.prototype.setup = function (){\n\treturn this;\n};\n\nSlidesWidget.prototype.node = function (){\n\tvar _t1;\n\treturn this._node || (this._node = (_1(SlidesView)).setData(this).end());\n};\n\nSlidesWidget.prototype.stepForward = function (keyframesOnly){\n\t// possibly step forward within current slide\n\tif(keyframesOnly === undefined) keyframesOnly = false;\n\tlet curr = this.currentSlide();\n\tif (curr && curr.steps() && curr.steps()[curr.currentStep() + 1]) {\n\t\tif (keyframesOnly) {\n\t\t\tcurr.setCurrentStep(len$(curr.steps()) - 1);\n\t\t} else {\n\t\t\tcurr.setCurrentStep(curr.currentStep() + 1);\n\t\t};\n\t\treturn this;\n\t};\n\t// jump to next slide and reset currentStep to -1\n\t// currentIndex = (currentIndex + 1) % items:length\n\tthis.setCurrentIndex(Math.min(this.currentIndex() + 1,this.items().length - 1));\n\t\n\tif (keyframesOnly) {\n\t\tthis.currentSlide().setCurrentStep(len$((this.currentSlide().steps() || [])) - 1);\n\t} else {\n\t\tthis.currentSlide().setCurrentStep(-1);\n\t};\n\treturn this;\n};\n\nSlidesWidget.prototype.stepBackward = function (keyframesOnly){\n\tif(keyframesOnly === undefined) keyframesOnly = false;\n\tlet curr = this.currentSlide();\n\tif (curr && !keyframesOnly) {\n\t\tif (curr.currentStep() >= 0) {\n\t\t\tcurr.setCurrentStep(curr.currentStep() - 1);\n\t\t\treturn this;\n\t\t};\n\t};\n\t\n\t// jump to previous and go to the last step of previous\n\tif (this.currentIndex() > 0) {\n\t\tthis.setCurrentIndex((this.currentIndex() || this.items().length) - 1);\n\t};\n\t\n\tthis.currentSlide().setCurrentStep(len$((this.currentSlide().steps() || [])) - 1);\n\treturn this;\n};\n\nSlidesWidget.prototype.currentSlideId = function (){\n\treturn this.items() ? this.items()[this.currentIndex()] : null;\n};\n\nSlidesWidget.prototype.currentSlide = function (){\n\treturn this.slides()[this.currentIndex()];\n};\n\nSlidesWidget.prototype.nextSlide = function (n){\n\tif(n === undefined) n = 1;\n\treturn this.slides()[this.currentIndex() + n];\n};\n\nSlidesWidget.prototype.prevSlide = function (n){\n\tif(n === undefined) n = 1;\n\treturn this.slides()[this.currentIndex() - n];\n};\n\nSlidesWidget.prototype.slides = function (){\n\tvar self = this, items_;\n\treturn self.items() ? (((items_ = self.items()).SLIDES || (items_.SLIDES = self.items().map(function(id) { return self.space().widgets().get(id); })))) : [];\n};\n\nSlidesWidget.prototype.importFromGoogleSlides = async function (url){\n\ttry {\n\t\tconst body = {url: url,id: window.store.scrim.id};\n\t\tvar res = await $api.post('/api/import-google-slides/',body);\n\t\t// api.rpc(:importSlidesFromGoogle,[url])\n\t\t// var res = await fetchFromGoogleSlides(url)\n\t\t// console.log res\n\t\t// return\n\t\t\n\t\tvar existing = {};\n\t\tfor (let i = 0, items = iter$(this.space().widgets()), len = items.length, widget; i < len; i++) {\n\t\t\twidget = items[i];\n\t\t\tif (widget instanceof SlideWidget) {\n\t\t\t\texisting[widget.name()] = widget;\n\t\t\t};\n\t\t};\n\t\t\n\t\tvar ids = [];\n\t\t// var uploads = []\n\t\t// for slide,i in res:slides\n\t\t// \tuploads.push(space.api.uploadBlob(slide:body, name: slide:name))\n\t\t// really? could do quick local hash check\n\t\t// var blobs = await Promise.all(uploads)\n\t\t\n\t\t// preload images for a faster teacher xp\n\t\tfor (let j = 0, items = iter$(res.images), len = items.length; j < len; j++) {\n\t\t\tlet i = new Image();\n\t\t\ti.addEventListener(\"load\",function() { return 1; },true);\n\t\t\ti.src = items[j];\n\t\t};\n\t\t// go through importing\n\t\tfor (let i = 0, items = iter$(res.slides), len = items.length, slide; i < len; i++) {\n\t\t\tslide = items[i];\n\t\t\tlet orig = existing[slide.name];\n\t\t\t// let blob = blobs[i]\n\t\t\t\n\t\t\tif (orig) {\n\t\t\t\torig.setTitle(slide.title);\n\t\t\t\torig.setWidth(slide.width);\n\t\t\t\torig.setHeight(slide.height);\n\t\t\t\torig.setBlobId(slide.blobId);\n\t\t\t\torig.setSteps(slide.steps);\n\t\t\t\torig.setBody(null);\n\t\t\t};\n\t\t\t\n\t\t\tlet widget = orig || this.space().createWidget({\n\t\t\t\ttype: 'slide',\n\t\t\t\tname: slide.name,\n\t\t\t\ttitle: slide.title,\n\t\t\t\twidth: slide.width,\n\t\t\t\theight: slide.height,\n\t\t\t\tblobId: slide.blobId,\n\t\t\t\tsteps: slide.steps\n\t\t\t}).widget();\n\t\t\t\n\t\t\tids.push(widget.id());\n\t\t};\n\t\t\n\t\tif (String(this.items()) != String(ids)) {\n\t\t\tthis.setItems(ids);\n\t\t};\n\t\t\n\t\tthis.setWidth(res.width);\n\t\tthis.setHeight(res.height);\n\t\tthis.setUrl(res.url);\n\t\tthis.space().view().uxa().flash((\"Imported \" + (len$(ids)) + \" slides\"));\n\t} catch (e) {\n\t\tthis.space().view().uxa().flash(\"Could not import slides\");\n\t\tconsole.log(\"something went wrong during import\",e);\n\t};\n\treturn this;\n};\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar Widget = require('./widget').Widget;\n\nfunction SidebarWidget(){ return Widget.apply(this,arguments) };\n\nsubclass$(SidebarWidget,Widget);\nexports.SidebarWidget = SidebarWidget; // export class \nSidebarWidget.register('sidebar');\n\nSidebarWidget.option('width',{'default': 200,overridable: true,cssvar: {name: 'sidebar-width',unit: 'px'}});\n\nSidebarWidget.prototype.view = function(v){ return this._view; }\nSidebarWidget.prototype.setView = function(v){ this._view = v; return this; };\n\nSidebarWidget.prototype.setup = function (){\n\treturn this;\n};\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar Widget = require('./widget').Widget;\n\nfunction ExplorerPanel(){ return Widget.apply(this,arguments) };\n\nsubclass$(ExplorerPanel,Widget);\nexports.ExplorerPanel = ExplorerPanel; // export class \nExplorerPanel.register('explorer');\n\nExplorerPanel.prototype.view = function(v){ return this._view; }\nExplorerPanel.prototype.setView = function(v){ this._view = v; return this; };\n\nExplorerPanel.prototype.setup = function (){\n\treturn this;\n};\n", "// helper for subclassing\nfunction subclass$(obj,sup) {\n\tfor (var k in sup) {\n\t\tif (sup.hasOwnProperty(k)) obj[k] = sup[k];\n\t};\n\t// obj.__super__ = sup;\n\tobj.prototype = Object.create(sup.prototype);\n\tobj.__super__ = obj.prototype.__super__ = sup.prototype;\n\tobj.prototype.initialize = obj.prototype.constructor = obj;\n};\n\nvar Widget = require('./widget').Widget;\n\nfunction DependenciesPanel(){ return Widget.apply(this,arguments) };\n\nsubclass$(DependenciesPanel,Widget);\nexports.DependenciesPanel = DependenciesPanel; // export class \nDependenciesPanel.prototype.view = function(v){ return this._view; }\nDependenciesPanel.prototype.setView = function(v){ this._view = v; return this; };\n\nDependenciesPanel.prototype.setup = function (){\n\treturn this;\n};\n", "var Action = require('./util/Action').Action;\nvar protocol$ = require('./protocol'), MSG = protocol$.MSG, CAST = protocol$.CAST;\n\nvar Notification = require('./views/Notification').Notification;\n\n// Deprecate -- what about shortcuts\nAction.register(\n\t{name: 'toggleConsole',\n\tdesc: 'Toggle console',\n\tscope: ['space','simulator'],\n\tshortcut: 'mod+shift+y',\n\tstate: function(_0) { return _0.space().console().enabled() ? 'on' : 'off'; },\n\tcmd: function(_0) { var v_;\n\treturn (_0.space().console().setEnabled(v_ = !_0.space().console().enabled()),v_); }}\n);\n\n// Deprecate? -- what about shortcuts\nAction.register(\n\t{name: 'toggleBrowser',\n\tdesc: 'Toggle browser',\n\tscope: ['space'],\n\tshortcut: 'mod+shift+u',\n\tstate: function(_0) { return _0.space().browser().visible() ? 'on' : 'off'; },\n\tcmd: function(_0) {\n\t\tvar v_;\n\t\tlet space = _0.space();\n\t\tif (space.simulator()) {\n\t\t\tspace.simulator().setVisible(false);\n\t\t};\n\t\treturn (space.browser().setVisible(v_ = !space.browser().visible()),v_);\n\t}}\n);\n\nAction.register(\n\t{name: 'toggleBrowserMinification',\n\tdesc: \"Toggle Browser\",\n\tscope: ['space'],\n\tshortcut: 'mod+b',\n\tenabled: function() { return true; },\n\tcmd: function(_0) { var v_;\n\treturn (_0.space().browser().setMinimized(v_ = !_0.space().browser().minimized()),v_); }}\n);\n\nvar slidesScope = function(_0) { return _0.space().slides().visible(); };\n\nAction.register(\n\t{name: 'slidesStepForward',\n\tdesc: \"Next step in slideshow\",\n\tscope: 'slides+editing',\n\tshortcut: 'right',\n\tcmd: function(_0) { return _0.space().slides().stepForward(); }}\n);\n\n\nAction.register(\n\t{name: 'startPointerTracker',\n\tscope: 'editing',\n\tshortcut: 'alt+shift+p',\n\tcmd: function(_0) { return _0.space().pointerTracker().start(); }}\n);\n\nAction.register(\n\t{name: 'slidesStepBackward',\n\tdesc: \"Previous step in slideshow\",\n\tscope: 'slides+editing',\n\tshortcut: 'left',\n\tcmd: function(_0) { return _0.space().slides().stepBackward(); }}\n);\n\nAction.register(\n\t{name: 'slideToStart',\n\tdesc: \"Previous slide\",\n\tscope: 'slides+editing',\n\tshortcut: 'shift+left',\n\tcmd: function(_0) { return _0.space().slides().stepBackward(true); }}\n);\n\nAction.register(\n\t{name: 'slideToEnd',\n\tdesc: \"Next slide\",\n\tscope: 'slides+editing',\n\tshortcut: 'shift+right',\n\tcmd: function(_0) { return _0.space().slides().stepForward(true); }}\n);\n\nAction.register(\n\t{name: 'minimizeSlides',\n\tdesc: \"Minimize slides\",\n\tscope: 'slides+editing',\n\tshortcut: 'x',\n\tcmd: function(_0) { return (_0.space().slides().setVisible(false),false); }}\n);\n\n// should only be enabled if\nAction.register(\n\t{name: 'refresh',\n\tdesc: \"Run code / Reload browser\",\n\tscope: ['space'],\n\tshortcut: ['mod+r','mod+shift+r'], // maybe not do the shortcut for this\n\tcooldown: 0,\n\tenabled: function(_0) { return !(!_0.space().isEditing()); },\n\tcmd: function(_0) { return _0.space().browser().run(); }}\n);\n\n\nAction.register(\n\t{name: 'quicksave',\n\tdesc: \"Save\",\n\tscope: ['space'],\n\tshortcut: 'mod+s', // maybe not do the shortcut for this\n\tcooldown: 0,\n\tenabled: function() { return true; },\n\tcmd: function(_0) {\n\t\tvar file = _0.space().agent().file();\n\t\tif (file) {\n\t\t\treturn file.quicksave();\n\t\t};\n\t}}\n);\n\n\n// Deprecate\nAction.register(\n\t{name: 'recstop',\n\tdesc: \"Stop Recording\",\n\tscope: 'recording',\n\tshortcut: 'mod+shift+2',\n\tcooldown: 0,\n\tstate: function(_0) { return _0.recording().state(); },\n\tenabled: function(_0) { return _0.recording() && _0.recording().state() == 'recording'; },\n\tcmd: function(_0) { var recording_;\n\treturn (recording_ = _0.recording()) && recording_.stop && recording_.stop(); }}\n);\n\nAction.register(\n\t{name: 'togglePlayback',\n\tdesc: \"Play / pause\",\n\tscope: 'watching',\n\tshortcut: 'space',\n\tstate: function(_0) { return _0.timeline().playState(); }, // this.context.timeline.isPlaying ? 'playing' : 'paused'\n\tenabled: function(_0) { return !(!_0.branch().hasDuration()); },\n\tcmd: function(_0,_1) {\n\t\tvar tl = _0.timeline();\n\t\ttl.isPlaying() ? tl.pause() : tl.play();\n\t\tif (_1 instanceof Event) { return _1.preventDefault() };\n\t}}\n);\n\nAction.register(\n\t{name: 'play',\n\tdesc: \"Play\",\n\tstate: function() { return 'paused'; },\n\tenabled: function(_0) { return !(!_0.branch().hasDuration()) && !_0.branch().timeline().isPlaying(); },\n\tcmd: function(_0) { return _0.timeline().play(); }}\n);\n\nAction.register(\n\t{name: 'pause',\n\tdesc: \"Pause\",\n\tstate: function() { return 'playing'; },\n\tenabled: function(_0) { return !(!_0.branch().hasDuration()) && _0.branch().timeline().isPlaying(); },\n\tcmd: function(_0) { return _0.timeline().pause(); }}\n);\n\n\n// Playback\nAction.register(\n\t{name: 'skipForward',\n\tdesc: \"Go forward 10s\",\n\tscope: 'playback',\n\tshortcut: 'right',\n\tcmd: function(_0) { return _0.timeline().skip(10000); }}\n);\n\nAction.register(\n\t{name: 'skipBack',\n\tdesc: \"Go back 10s\",\n\tscope: 'playback',\n\tshortcut: 'left',\n\tcmd: function(_0) { return _0.timeline().skip(-10000); }}\n);\n\nAction.register(\n\t{name: 'fasterPlayback',\n\tdesc: \"Faster playback\",\n\tscope: 'playback',\n\tshortcut: 'ctrl+shift+right',\n\tcmd: function(_0) {\n\t\tconst max = 4;\n\t\tlet pbr = _0.timeline().playbackRate();\n\t\tif (pbr < max) {\n\t\t\t// console.log \"hello\",Math.min(pbr + 0.1, max).round(2)\n\t\t\tpbr = Math.min(pbr + 0.1,max).round(2);\n\t\t\twindow.store.settings.playbackRate = pbr;\n\t\t\t_0.timeline().setPlaybackRate(pbr);\n\t\t\treturn Notification.show(_0.timeline().describe(),{info: true});\n\t\t};\n\t}}\n);\n\nAction.register(\n\t{name: 'slowerPlayback',\n\tdesc: \"Slower playback\",\n\tscope: 'playback',\n\tshortcut: 'ctrl+shift+left',\n\tcmd: function(_0) {\n\t\tconst min = 0.4;\n\t\tlet pbr = _0.timeline().playbackRate();\n\t\tif (pbr > min) {\n\t\t\tpbr = Math.max(pbr - 0.1,min).round(2);\n\t\t\twindow.store.settings.playbackRate = pbr;\n\t\t\t_0.timeline().setPlaybackRate(pbr);\n\t\t\treturn Notification.show(_0.timeline().describe(),{info: true});\n\t\t};\n\t}}\n);\n\n\n// var tabcmd = do\n// \tvar nr = this.o('nr')\n// \tvar file = this.space.files.at(nr)\n// \tif file\n// \t\tthis.space.agent.setFile(file)\n\n// Action.register\n// \tname: 'tab-1', scope: ['space'], shortcut: ['mod+1'], nr: 0, cmd: tabcmd\n\n// Action.register\n// \tname: 'tab-2', scope: ['space'], shortcut: ['mod+2'], nr: 1, cmd: tabcmd\n\n// Action.register\n// \tname: 'tab-3', scope: ['space'], shortcut: ['mod+3'], nr: 2, cmd: tabcmd\n\n// Action.register\n// \tname: 'tab-4', scope: ['space'], shortcut: ['mod+4'], nr: 3, cmd: tabcmd\n\n// Action.register\n// \tname: 'tab-5', scope: ['space'], shortcut: ['mod+5'], nr: 4, cmd: tabcmd\n\n\nAction.register(\n\t{name: 'fontSizeInc',\n\tscope: ['space'],\n\tshortcut: ['shift+alt+l'],\n\tcmd: function(_0) { var api_, v_;\n\treturn ((api_ = _0.api()).setFontSize(v_ = api_.fontSize() + 1),v_); }}\n);\n\nAction.register(\n\t{name: 'fontSizeDecr',\n\tscope: ['space'],\n\tshortcut: ['shift+alt+k'],\n\tcmd: function(_0) { var api_, v_;\n\treturn ((api_ = _0.api()).setFontSize(v_ = api_.fontSize() - 1),v_); }}\n);\n\nAction.register(\n\t{name: 'toggleWhitespace',\n\tscope: ['space'],\n\tshortcut: ['shift+alt+i'],\n\tcmd: function(_0) {\n\t\t// console.log 'toggle whitespace',$1\n\t\tvar v_;\n\t\treturn (_0.primaryEditor().setRenderWhitespace(v_ = !_0.primaryEditor().renderWhitespace()),v_);\n\t\t// $1.layout.renderWhitespace = !$1.layout.renderWhitespace\n\t}}\n);\n", "function idx$(a,b){\n\treturn (b && b.indexOf) ? b.indexOf(a) : [].indexOf.call(a,b);\n};\nfunction iter$(a){ return a ? (a.toArray ? a.toArray() : a) : []; };\nvar Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/), _2 = Imba.createElementFactory(/*SCOPEID*/);\n\nvar util = require('./util');\n\nvar protocol$ = require('./protocol'), ACTION = protocol$.ACTION, CAST = protocol$.CAST, WIDGET = protocol$.WIDGET, SCON = protocol$.SCON, MSG = protocol$.MSG;\n\nvar ESMLexer = require('es-module-lexer');\nvar relativeTo = require('../utils.imba').relativeTo;\nvar List = require('./util/List').List;\nvar Branch$ = require('./Branch'), Branch = Branch$.Branch, Trunk = Branch$.Trunk;\nvar Widget = require('./widgets/index').Widget;\nvar Widgets = require('./widgets/widgets').Widgets;\nvar SpaceView = require('./views/SpaceView').SpaceView;\nvar Action$ = require('./util/Action'), Action = Action$.Action, ActionManager = Action$.ActionManager;\nvar Client = require('./core/Client').Client;\n\nvar AudioManager = require('./util/AudioManager').AudioManager;\nvar Cursor = require('./core/Cursor').Cursor;\nvar Dimensions = require('./core/Dimensions').Dimensions;\n\nvar Scrim = require('./models').Scrim;\nvar PointerTracker = require('./util/PointerTracker').PointerTracker;\n\n\nvar FileSystemWidget = require('./widgets/DirWidget').FileSystemWidget;\nvar SlidesWidget = require('./widgets/SlidesWidget').SlidesWidget;\nvar EditorWidget = require('./widgets/EditorWidget').EditorWidget;\n\nvar SidebarWidget = require('./widgets/SidebarWidget').SidebarWidget;\nvar ExplorerPanel = require('./widgets/ExplorerPanel').ExplorerPanel;\nvar DependenciesPanel = require('./widgets/DependenciesPanel').DependenciesPanel;\n\nvar Container = require('./core/Container').Container;\n\nvar tracking = require('./tracking');\n\nrequire('./actions');\n\n// Should be moved elsewhere\n_1.extendTag('element', function(tag){\n\t\n\ttag.prototype.sref = function (){\n\t\treturn this._sref || (this._sref = this.dataset('sref'));\n\t};\n\t\n\ttag.prototype.setSref = function (ref){\n\t\tif (this._sref != ref) {\n\t\t\tthis.dataset('sref',this._sref = ref);\n\t\t};\n\t\treturn this;\n\t\treturn this;\n\t};\n});\n\n/*\n\nA space is stored and constructed from a single list of sequential\nevents. At any point in time it might have multiple active participants,\nmultiple files etc, but only the stream of events will ever be saved.\n\nThe state at any specific time can always be constructed by applying\nall events up until that point in the stream.\n\n*/\n\n\nvar SpaceInstanceCounter = 0;\n\nfunction Space(data,options){\n\tvar self = this;\n\tif(options === undefined) options = {};\n\tif (true) {\n\t\twindow.SP = self;\n\t};\n\t\n\t// should abstract this out into its own class\n\tself._data = {};\n\tself._model = data; // should be certain that this is correct already\n\tself._id = self._model.id;\n\tself._promises = {};\n\t\n\tself._options = options;\n\tself._namespace = (\"sp\" + (SpaceInstanceCounter++));\n\tself._randomIncr = 0;\n\tself._stats = {viewers: 0};\n\tself._counters = {ticks: 0};\n\tself._client = new Client(self);\n\tself._toucher = function() { return self.dirty(); };\n\tself.setReadyState('init');\n\t\n\tif (true) {\n\t\tself.container().setController(self);\n\t};\n\tself;\n};\n\nexports.Space = Space; // export class \nSpace.prototype.options = function(v){ return this._options; }\nSpace.prototype.setOptions = function(v){ this._options = v; return this; };\nSpace.prototype.playlist = function(v){ return this._playlist; }\nSpace.prototype.setPlaylist = function(v){ this._playlist = v; return this; };\nSpace.prototype.stats = function(v){ return this._stats; }\nSpace.prototype.setStats = function(v){ this._stats = v; return this; };\nSpace.prototype.offset = function(v){ return this._offset; }\nSpace.prototype.setOffset = function(v){ this._offset = v; return this; };\n\nSpace.prototype.trunk = function(v){ return this._trunk; }\nSpace.prototype.setTrunk = function(v){ this._trunk = v; return this; };\nSpace.prototype.branch = function(v){ return this._branch; }\nSpace.prototype.setBranch = function(v){ this._branch = v; return this; };\n\n// the branch we are currently scoped into\nSpace.prototype.cursor = function(v){ return this._cursor; }\nSpace.prototype.setCursor = function(v){ this._cursor = v; return this; };\n\nSpace.prototype.__agent = {watch: 'agentDidSet',name: 'agent'};\nSpace.prototype.agent = function(v){ return this._agent; }\nSpace.prototype.setAgent = function(v){\n\tvar a = this.agent();\n\tif(v != a) { this._agent = v; }\n\tif(v != a) { this.agentDidSet && this.agentDidSet(v,a,this.__agent) }\n\treturn this;\n};\n\n// the main timeline in focus\nSpace.prototype.__timeline = {watch: 'timelineDidSet',name: 'timeline'};\nSpace.prototype.timeline = function(v){ return this._timeline; }\nSpace.prototype.setTimeline = function(v){\n\tvar a = this.timeline();\n\tif(v != a) { this._timeline = v; }\n\tif(v != a) { this.timelineDidSet && this.timelineDidSet(v,a,this.__timeline) }\n\treturn this;\n};\nSpace.prototype.__annotation = {watch: 'annotationDidSet',name: 'annotation'};\nSpace.prototype.annotation = function(v){ return this._annotation; }\nSpace.prototype.setAnnotation = function(v){\n\tvar a = this.annotation();\n\tif(v != a) { this._annotation = v; }\n\tif(v != a) { this.annotationDidSet && this.annotationDidSet(v,a,this.__annotation) }\n\treturn this;\n};\n\nSpace.prototype.widgets = function(v){ return this._widgets; }\nSpace.prototype.setWidgets = function(v){ this._widgets = v; return this; };\nSpace.prototype.files = function(v){ return this._files; }\nSpace.prototype.setFiles = function(v){ this._files = v; return this; };\nSpace.prototype.observers = function(v){ return this._observers; }\nSpace.prototype.setObservers = function(v){ this._observers = v; return this; };\nSpace.prototype.recording = function(v){ return this._recording; }\nSpace.prototype.setRecording = function(v){ this._recording = v; return this; };\nSpace.prototype.unauthorized = function(v){ return this._unauthorized; }\nSpace.prototype.setUnauthorized = function(v){ this._unauthorized = v; return this; };\n\n// default singleton widgets\nSpace.prototype.fs = function(v){ return this._fs; }\nSpace.prototype.setFs = function(v){ this._fs = v; return this; };\nSpace.prototype.layout = function(v){ return this._layout; }\nSpace.prototype.setLayout = function(v){ this._layout = v; return this; };\nSpace.prototype.console = function(v){ return this._console; }\nSpace.prototype.setConsole = function(v){ this._console = v; return this; };\nSpace.prototype.simulator = function(v){ return this._simulator; }\nSpace.prototype.setSimulator = function(v){ this._simulator = v; return this; };\nSpace.prototype.inspector = function(v){ return this._inspector; }\nSpace.prototype.setInspector = function(v){ this._inspector = v; return this; };\nSpace.prototype.browser = function(v){ return this._browser; }\nSpace.prototype.setBrowser = function(v){ this._browser = v; return this; };\nSpace.prototype.pointerTracker = function(v){ return this._pointerTracker; }\nSpace.prototype.setPointerTracker = function(v){ this._pointerTracker = v; return this; };\nSpace.prototype.primaryEditor = function(v){ return this._primaryEditor; }\nSpace.prototype.setPrimaryEditor = function(v){ this._primaryEditor = v; return this; };\nSpace.prototype.explorerPanel = function(v){ return this._explorerPanel; }\nSpace.prototype.setExplorerPanel = function(v){ this._explorerPanel = v; return this; };\nSpace.prototype.dependenciesPanel = function(v){ return this._dependenciesPanel; }\nSpace.prototype.setDependenciesPanel = function(v){ this._dependenciesPanel = v; return this; };\nSpace.prototype.slides = function(v){ return this._slides; }\nSpace.prototype.setSlides = function(v){ this._slides = v; return this; };\nSpace.prototype.sidebar = function(v){ return this._sidebar; }\nSpace.prototype.setSidebar = function(v){ this._sidebar = v; return this; };\nSpace.prototype.readyState = function(v){ return this._readyState; }\nSpace.prototype.setReadyState = function(v){ this._readyState = v; return this; };\n\nSpace.prototype.client = function(v){ return this._client; }\nSpace.prototype.setClient = function(v){ this._client = v; return this; };\n\nSpace.load = async function (id,api){\n\t// rewriting legacy int-ids\n\tif ((\"\" + id).match(/^\\d+$/)) { id = (\"cast-\" + id) };\n\t\n\tvar data = await api.load(id);\n\t// make sure we have pub or draft - should always be included though?\n\tawait (data.pub || data.draft || data.fetch());\n\tif (!data || data.CODE == 404) {\n\t\treturn null;\n\t};\n\treturn new this(data,{api: api});\n};\n\nSpace.prototype.id = function (){\n\treturn this._model.id;\n};\nSpace.prototype.model = function (){\n\treturn this._model;\n};\nSpace.prototype.data = function (){\n\treturn this._data;\n};\nSpace.prototype.namespace = function (){\n\treturn this._namespace;\n};\nSpace.prototype.state = function (){\n\treturn this.model().state;\n};\nSpace.prototype.type = function (){\n\treturn this.model().type;\n};\nSpace.prototype.uid = function (){\n\treturn this.model().uid;\n};\n\nSpace.prototype.touch = function (type){\n\tvar num = this._counters[type] || (this._counters[type] = 0);\n\tthis._counters[type] += 1;\n\tthis._dirty = true;\n\treturn this;\n};\n\nSpace.prototype.counter = function (type){\n\treturn this._counters[type] || 0;\n};\n\nSpace.prototype.isEditing = function (){\n\treturn this.branch().isEditing();\n};\n\nSpace.prototype.actions = function (){\n\treturn this._actions || (this._actions = new ActionManager(this));\n};\n\nSpace.prototype.api = function (){\n\treturn this._options.api;\n};\n\nSpace.prototype.container = function (){\n\treturn Container.instance();\n};\n\nSpace.prototype.audio = function (){\n\treturn AudioManager.instance();\n};\n\nSpace.prototype.space = function (){\n\treturn this;\n};\n\nSpace.prototype.branch = function (){\n\treturn this.cursor().branch();\n};\n\nSpace.prototype.emit = function (name){\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.emit(this,name,params);\n};\nSpace.prototype.on = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.listen.apply(Imba,[].concat([this,name], Array.from(params)));\n};\nSpace.prototype.once = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.once.apply(Imba,[].concat([this,name], Array.from(params)));\n};\nSpace.prototype.un = function (name){\n\tvar Imba_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>1 ? i-1 : 0);\n\twhile(i>1) params[--i - 1] = $0[i];\n\treturn Imba.unlisten.apply(Imba,[].concat([this,name], Array.from(params)));\n};\n\nSpace.prototype.bundleFile = async function (path){\n\tif(path === undefined) path = '/index.pack.js';\n\tlet snap = this.toRunStaticSnapshot();\n\tlet req = await window.fetch((\"/rpc/bundle\" + path),{headers: {\"Content-Type\": \"application/json\"},\n\tmode: 'cors',\n\tmethod: 'POST',\n\tbody: JSON.stringify(snap)});\n\t\n\tlet res = await req.json();\n\treturn res;\n};\n\nSpace.prototype.getImbaVersion = function (){\n\tfor (let i = 0, items = iter$((this.browser().npmPackageNames() || [])), len = items.length, item; i < len; i++) {\n\t\titem = items[i];\n\t\tif (item.indexOf(\"imba@\") == 0) {\n\t\t\treturn item.slice(5);\n\t\t};\n\t};\n\treturn null;\n};\n\nSpace.prototype.getSvelteVersion = function (){\n\tfor (let i = 0, items = iter$((this.browser().npmPackageNames() || [])), len = items.length, item; i < len; i++) {\n\t\titem = items[i];\n\t\tif (item.indexOf(\"svelte@\") == 0) {\n\t\t\treturn item.slice(7);\n\t\t};\n\t};\n\treturn null;\n};\n\nSpace.prototype.getSvelteDependencies = function (version){\n\tif(version === undefined) version = 4;\n\tif (version == 4) {\n\t\treturn [\n\t\t\t'svelte/animate',\n\t\t\t'svelte/easing',\n\t\t\t'svelte/internal/disclose-version',\n\t\t\t'svelte/internal',\n\t\t\t'svelte/motion',\n\t\t\t'svelte/store',\n\t\t\t'svelte/transition',\n\t\t\t'svelte/compiler',\n\t\t\t'svelte'\n\t\t];\n\t} else if (version == 3) {\n\t\treturn [\n\t\t\t'svelte/animate',\n\t\t\t'svelte/easing',\n\t\t\t'svelte/internal',\n\t\t\t'svelte/motion',\n\t\t\t'svelte/store',\n\t\t\t'svelte/transition',\n\t\t\t'svelte'\n\t\t];\n\t};\n};\nSpace.prototype.getImportMap = async function (){\n\tvar browser_;\n\tlet cache = this._importmapcache || (this._importmapcache = {});\n\tlet pkgs = (browser_ = this.browser()) && browser_.npmPackageNames && browser_.npmPackageNames();\n\t\n\tlet imported = [];\n\tlet errored = {};\n\t\n\t// Instead of basing the imports on the dependencies you've added\n\t// we now use a tiny parser to run through the code-files to identify\n\t// all the imports.\n\tlet sveltePackage = pkgs.find(function(pkg) { return pkg.startsWith('svelte'); });\n\tlet svelteVersion = sveltePackage && sveltePackage.split('svelte@')[1].split('.')[0];\n\t\n\tfor (let i = 0, items = iter$(this.files()), len = items.length, file; i < len; i++) {\n\t\tfile = items[i];\n\t\tif (file.ext() == 'svelte') {\n\t\t\tfor (let j = 0, ary = iter$(this.getSvelteDependencies(svelteVersion)), len = ary.length, dep; j < len; j++) {\n\t\t\t\tdep = ary[j];\n\t\t\t\tif (imported.indexOf(dep) != -1) { continue; };\n\t\t\t\timported.push(dep);\n\t\t\t};\n\t\t\ttry {\n\t\t\t\t// hack to strip away erroneous jsx\n\t\t\t\tconst parser = new DOMParser();\n\t\t\t\tconst doc = parser.parseFromString(file.body(),'text/html');\n\t\t\t\tconst scriptTags = doc.querySelectorAll('script');\n\t\t\t\tconst scriptsContent = [];\n\t\t\t\t\n\t\t\t\tfor (let j = 0, ary = iter$(scriptTags), len = ary.length; j < len; j++) {\n\t\t\t\t\tscriptsContent.push(ary[j].textContent);\n\t\t\t\t};\n\t\t\t\t\n\t\t\t\tlet body = scriptsContent.join(';\\n');\n\t\t\t\tlet parsed = ESMLexer.parse(body);\n\t\t\t\tfor (let j = 0, ary = iter$(parsed[0]), len = ary.length; j < len; j++) {\n\t\t\t\t\tlet src = ary[j].n;\n\t\t\t\t\tif (src && src.match(/^@?\\w/) && imported.indexOf(src) == -1) {\n\t\t\t\t\t\timported.push(src);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log('could not parse dependencies in',file.name(),e);\n\t\t\t\terrored[file.name()] = e;\n\t\t\t};\n\t\t};\n\t\tif (file.ext().match(/^(jsx?|tsx?|imba)$/)) {\n\t\t\ttry {\n\t\t\t\tlet body = file.body();\n\t\t\t\t// hack to strip away erroneous jsx\n\t\t\t\tbody = body.replace(/\\<\\//g,'<');\n\t\t\t\t\n\t\t\t\tlet parsed = ESMLexer.parse(body);\n\t\t\t\tfor (let j = 0, ary = iter$(parsed[0]), len = ary.length; j < len; j++) {\n\t\t\t\t\tlet src = ary[j].n;\n\t\t\t\t\tif (src && src.match(/^@?\\w/) && imported.indexOf(src) == -1) {\n\t\t\t\t\t\timported.push(src);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log('could not parse dependencies in',file.name(),e);\n\t\t\t\terrored[file.name()] = e;\n\t\t\t};\n\t\t};\n\t};\n\t\n\t// go through the explicit dependencies to include the version name for\n\t// matching packages.\n\tfor (let i = 0, items = iter$(pkgs), len = items.length, pkg; i < len; i++) {\n\t\tpkg = items[i];\n\t\tlet name = pkg.slice(0,pkg.indexOf('@',1));\n\t\tlet version = pkg.split('@')[1];\n\t\t// always add react for automatic jsx transform\n\t\tif (name == 'react') {\n\t\t\timported.push('react/jsx-runtime');\n\t\t};\n\t\t\n\t\tfor (let i = 0, len = imported.length, imp; i < len; i++) {\n\t\t\timp = imported[i];\n\t\t\tif (imp.indexOf(name) == 0 && imp.slice(name.length).match(/^(\\/|$)/)) {\n\t\t\t\timported[i] = pkg + imp.slice(name.length);\n\t\t\t};\n\t\t};\n\t};\n\tlet path = imported.join(',');\n\tlet map = cache[path] || {};\n\t\n\t// console.log 'generated imports',path,cache[path]\n\t\n\tlet failed = Object.keys(errored).length > 0;\n\t\n\tif (!cache[path] || failed) {\n\t\tlet result = await window.fetch((\"/rpc/importmap?for=\" + path));\n\t\tmap = await result.json();\n\t\tif (!failed) { cache[path] = map };\n\t};\n\treturn map;\n};\n\nSpace.prototype.oncontainermessage = async function (e,cb){\n\t// console.log \"containermessage?\",e\n\tif (e.type == 'getState') {\n\t\treturn cb({data: this.toRunStaticSnapshot()});\n\t};\n\t\n\tif (e.type == 'request') {\n\t\t// console.log \"request initiated now!!\"\n\t\tthis.browser().node().oncontainermessage(e,cb);\n\t\treturn cb({data: {\n\t\t\thistory: this.browser().node().history().state(),\n\t\t\ttracker: document.location.origin + '/__sw__tracker.js'\n\t\t}});\n\t};\n\t\n\tif (e.type == 'resolveImportMap') {\n\t\tlet map = await this.getImportMap();\n\t\treturn cb({data: map});\n\t};\n\t\n\tif (e.type == 'resolveFile') {\n\t\t\n\t\tlet path = this.browser().rootPath() + e.path.replace(/^\\//,'');\n\t\tconst frameSrc = this.browser().node()._runner._dom.src;\n\t\tlet relPath = '';\n\t\tif (frameSrc) {\n\t\t\ttry {\n\t\t\t\trelPath = relativeTo((new URL(frameSrc)).pathname,path);\n\t\t\t} catch (error) {\n\t\t\t\tconsole.log(\"invalid frame source\",frameSrc);\n\t\t\t};\n\t\t};\n\t\t\n\t\t// should even resolve into paths\n\t\tlet file = this.fs().find(path) || this.fs().find(path.replace(/(\\.js)?$/,'.imba'));\n\t\t// console.log 'resolving file',e:path,file\n\t\t\n\t\tif (!file && this.browser().catchallPath()) {\n\t\t\tif (relPath) {\n\t\t\t\tfile = this.fs().find(relPath);\n\t\t\t\tif (file) { path = relPath };\n\t\t\t};\n\t\t\tif (!file) {\n\t\t\t\tfile = this.fs().find(this.browser().rootPath() + this.browser().catchallPath());\n\t\t\t};\n\t\t};\n\t\t\n\t\tif (path.match(/pack\\.js|scss\\.css|sass\\.css/)) {\n\t\t\t// console.log \"returning packed js file!!!\"\n\t\t\t// let res = await api.rpc('castPackedFile',[id,toRunStaticSnapshot,path])\n\t\t\ttry {\n\t\t\t\tif (relPath) { path = relPath };\n\t\t\t\tlet res = await this.bundleFile(path);\n\t\t\t\t// console.log \"returned from server\",res\n\t\t\t\tif (res) { cb({type: 'file',path: e.path,data: res}) };\n\t\t\t\treturn;\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e);\n\t\t\t};\n\t\t};\n\t\t\n\t\t// if catchallPath is not set, but there exists an index.html and\n\t\t// we are requesting a path without an extension, fallback to index.html\n\t\tif (!file && !path.match(/\\.\\w{2,4}$/) && this.fs().find('/index.html')) {\n\t\t\tfile = this.fs().find('/index.html');\n\t\t};\n\t\t\n\t\tif (file) {\n\t\t\tlet data = {\n\t\t\t\tpath: file.path(),\n\t\t\t\tname: file.name(),\n\t\t\t\tbody: file.currentBody(),\n\t\t\t\tblobId: file.blobId()\n\t\t\t};\n\t\t\t\n\t\t\tif (file.ext() == 'imba') {\n\t\t\t\tlet opts = {\n\t\t\t\t\tsourcePath: file.uri(),\n\t\t\t\t\t// runtime: 'global'\n\t\t\t\t\ttarget: 'browser'\n\t\t\t\t};\n\t\t\t\tdata.js = await global.monaco.compileImba(data.body,opts,this.getImbaVersion());\n\t\t\t};\n\t\t\t\n\t\t\tif (file.ext() == 'svelte') {\n\t\t\t\tlet opts = {};\n\t\t\t\tdata.js = await global.monaco.compileSvelte(data.body,opts,this.getSvelteVersion());\n\t\t\t};\n\t\t\t\n\t\t\treturn cb({type: 'file',path: e.path,data: data});\n\t\t} else {\n\t\t\treturn cb({data: null});\n\t\t};\n\t};\n};\n\nSpace.prototype.log = function (){\n\tvar api_;\n\tvar $0 = arguments, i = $0.length;\n\tvar params = new Array(i>0 ? i : 0);\n\twhile(i>0) params[i-1] = $0[--i];\n\tif (true) {\n\t\treturn (api_ = this.api()).log.apply(api_,[].concat(['space'], Array.from(params)));\n\t};\n};\n\nSpace.prototype.async = function (name){\n\tvar self = this;\n\tself._asyncTriggers || (self._asyncTriggers = {});\n\tvar fn = self._asyncTriggers[name] || (self._asyncTriggers[name] = function() { return self[name](); });\n\tImba.TICKER.add(fn);\n\treturn self;\n};\n\nSpace.prototype.generateRandomId = function (){\n\tvar start = this._randomIncr++;\n\treturn start + \"\" + util.uuid().substr(0,8);\n};\n\nSpace.prototype.timelineDidSet = function (new$,old){\n\tvar $1, $2;\n\t($1 = old) && $1.deactivate && $1.deactivate();\n\t($2 = new$) && $2.activate && $2.activate();\n\treturn this.dirty();\n};\n\nSpace.prototype.getAnchor = function (){\n\tlet data = this.primaryEditor().view().currentCodeAnchor('object');\n\treturn data;\n};\n\nSpace.prototype.gotoAnchor = function (ref){\n\tvar self = this;\n\tlet o = {};\n\tlet parts = ref.split('.');\n\tlet m;\n\t\n\tif (m = parts.shift()) {\n\t\to.index = parseInt(m);\n\t};\n\t\n\tif (m = parts.shift()) {\n\t\to.offset = parseInt(m);\n\t};\n\t\n\tif (m = parts.shift()) {\n\t\to.wid = parseInt(m);\n\t};\n\t\n\tif (m = parts.shift()) {\n\t\to.selection = SCON.decodeRangeString(m);\n\t};\n\t// console.log 'going to anchor',o\n\t\n\ttry {\n\t\tlet action = self.branch().stream().actions()[o.index];\n\t\tlet offset = action.offset() + o.offset;\n\t\tself.timeline().pause();\n\t\tself.timeline().seek(offset);\n\t\tself.tick();\n\t\t\n\t\tlet prevFile = self.primaryEditor().currentFile();\n\t\tlet file = self.widgets().get(o.wid);\n\t\tself.agent().setFile(file);\n\t\t\n\t\tvar decoration = {\n\t\t\trange: o.selection,\n\t\t\toptions: {\n\t\t\t\tclassName: 'question',\n\t\t\t\tstickiness: 1, // no stickiness\n\t\t\t\tisWholeLine: !(!o.selection[4]),\n\t\t\t\t// inlineClassName: 'question-token'\n\t\t\t\thoverMessage: {value: \"Highlight\"},\n\t\t\t\tglyphMarginClassName: 'question',\n\t\t\t\tlinesDecorationsClassName: 'question',\n\t\t\t\tmarginClassName: 'question'\n\t\t\t}\n\t\t};\n\t\t// console.log 'set decoration',decoration\n\t\tfile.deltaDecorations(ref,[decoration]);\n\t\treturn self.cursor().once('sync:start',function() {\n\t\t\tfile.deltaDecorations(ref,[]);\n\t\t\treturn self.agent().options().discardLocals(['file']);\n\t\t});\n\t} catch (e) {\n\t\treturn console.warn('error',e);\n\t};\n};\n\n\n\nSpace.prototype.annotationDidSet = async function (new$,old){\n\tvar self = this, file_, offset_;\n\tself.log(\"annotationDidSet\",new$);\n\t\n\tvar seed = self._preAnnotationAnchor;\n\t\n\tself._preAnnotationAnchor = {\n\t\tbranch: self.branch(),\n\t\toffset: self.timeline().currentOffset()\n\t};\n\t\n\t// remove decorations from previous annotations no matter what?\n\t// BUG if you toggle petween\n\tif (old) {\n\t\t(file_ = self.agent().file()) && file_.deltaDecorations && file_.deltaDecorations(old.id,[]);\n\t};\n\t\n\t// find the correct branch\n\tif (!(new$)) { return };\n\t\n\tawait self.navigateTo(new$.cast());\n\t\n\tif (new$) {\n\t\t// should rather be solved by setting the uri in hash\n\t\tvar anchor = new$.anchor || {};\n\t\tlet ref = SCON.decodeURI(anchor.uri);\n\t\t\n\t\tif ((typeof (offset_ = new$.offset)=='number'||offset_ instanceof Number)) {\n\t\t\tself.timeline().pause();\n\t\t\tself.timeline().seek(new$.offset);\n\t\t\tself.tick();\n\t\t};\n\t\t\n\t\t// disable annotation immediately if we are resyncing\n\t\t// let curr = cursor.current\n\t\t\n\t\tif (ref && ref.path && ref.selection) {\n\t\t\t// throw if wrong event-index?\n\t\t\t// get file at this path(!)\n\t\t\tlet file = self.space().fs().find(ref.path);\n\t\t\tself.agent().setFile(file);\n\t\t\t// log \"setting range!\",anchor,file\n\t\t\t\n\t\t\tvar decoration = {\n\t\t\t\trange: ref.selection,\n\t\t\t\toptions: {\n\t\t\t\t\tclassName: 'question',\n\t\t\t\t\tstickiness: 1, // no stickiness\n\t\t\t\t\tisWholeLine: !(!ref.selection[4]),\n\t\t\t\t\t// inlineClassName: 'question-token'\n\t\t\t\t\thoverMessage: {value: new$.body || \"Highlight\"},\n\t\t\t\t\tglyphMarginClassName: 'question',\n\t\t\t\t\tlinesDecorationsClassName: 'question',\n\t\t\t\t\tmarginClassName: 'question'\n\t\t\t\t}\n\t\t\t};\n\t\t\t\n\t\t\tfile.deltaDecorations(new$.id,[decoration]);\n\t\t};\n\t\t\n\t\tself.cursor().once('sync:start',function() {\n\t\t\tvar $1, v_;\n\t\t\t($1 = self.agent().file()) && $1.deltaDecorations && $1.deltaDecorations(new$.id,[]);\n\t\t\tif (self.annotation() == new$) {\n\t\t\t\treturn (self.setAnnotation(null),null);\n\t\t\t};\n\t\t});\n\t};\n\t\n\t\n\treturn self;\n};\n\nSpace.prototype.clone = function (o){\n\tif(o === undefined) o = {};\n\tthis.log(\"clone\",o);\n\t\n\t// var confirm = window.confirm(\"Are you sure you want to create a copy of this cast, at the current offset?\")\n\t// return unless confirm\n\t\n\tvar data = Branch.modelDataFromEvent(this.cursor().current());\n\tvar snap = this.cursor().branch().toSnapshot();\n\t\n\tdata.title = this.model().title;\n\tdata.state = 'draft'; // not possible to follow live?\n\tdata.privacy = 'public';\n\tdata.type = 'tutorial';\n\tdata.parent_id = this.branch().model().id;\n\tdata.snapshot = snap;\n\t\n\tlet branch = this.branch();\n\t\n\twhile (!branch.model().isPersisted()){\n\t\tbranch = branch.parent();\n\t};\n\t\n\tif (branch) {\n\t\tdata.parent_id = branch.model().id;\n\t};\n\t\n\treturn data;\n};\n\n\nSpace.prototype.fork = async function (o){\n\tvar self = this;\n\tif(o === undefined) o = {};\n\tvar user = await self.api().tryLogin();\n\t\n\tif (!user) {\n\t\treturn window.alert(\"Not allowed to fork without logging in\");\n\t};\n\t\n\tself.navigateTo(self.trunk());\n\t\n\treturn self.trunk().upsertResponse().then(function(fork) {\n\t\treturn self.navigateTo(fork);\n\t});\n\treturn self;\n};\n\nSpace.prototype.simulator = function (){\n\treturn this.__lookup(CAST.SIMULATOR);\n};\n\nSpace.prototype.setup = function (){\n\tvar self = this;\n\treturn self._promises.setup || (self._promises.setup = new Promise(function(resolve,reject) {\n\t\tself.setReadyState('setup');\n\t\t// return same promise every time?\n\t\t\n\t\tself._offset = 0;\n\t\tself._widgets = new Widgets(self);\n\t\tself._files = new List(self);\n\t\tself._observers = new List(self);\n\t\tself._trunk = new Trunk(self,null,self.model());\n\t\tself._cursor = new Cursor(self);\n\t\tif (true) {\n\t\t\tself._pointerTracker = new PointerTracker(self);\n\t\t};\n\t\t// setting up default widgets\n\t\t\n\t\t// setting up the default widgets before loading stream\n\t\tself.setLayout(self.widgets().add(self.widgets().create('layout',{id: CAST.WORKSPACE})));\n\t\tself.setConsole(self.widgets().add(self.widgets().create('console',{id: CAST.CONSOLE})));\n\t\t// self.simulator = widgets.add widgets.create(:simulator, id: CAST.SIMULATOR)\n\t\tself.setInspector(self.widgets().add(self.widgets().create('inspector',{id: CAST.INSPECTOR})));\n\t\tself.setAgent(self.widgets().add(self.widgets().create('agent',{id: CAST.AGENT})));\n\t\tself.setFs(self.widgets().add(new FileSystemWidget(self,{id: CAST.FS,expanded: true})));\n\t\tself.setPrimaryEditor(self.widgets().add(new EditorWidget(self,{id: CAST.PRIMARY_EDITOR})));\n\t\t\n\t\tself.setSidebar(self.widgets().add(new SidebarWidget(self,{id: CAST.SIDEBAR})));\n\t\tself.setExplorerPanel(self.widgets().add(new ExplorerPanel(self,{id: CAST.EXPLORER_PANEL})));\n\t\tself.setDependenciesPanel(self.widgets().add(new DependenciesPanel(self,{id: CAST.DEPENDENCIES_PANEL})));\n\t\tself.setSlides(self.widgets().add(new SlidesWidget(self,{id: CAST.SLIDES})));\n\t\t\n\t\t// default layout for browser - weird place?\n\t\tvar dims = Dimensions.build(\n\t\t\t{left: (1024 - 300 - 40),\n\t\t\ttop: Math.round((768 - 300) * 0.3),\n\t\t\twidth: 300,\n\t\t\theight: 300,\n\t\t\tvw: 1024,\n\t\t\tvh: 768,\n\t\t\tscaleX: 100,\n\t\t\tscaleY: 100,\n\t\t\ttargetRef: CAST.BROWSER}\n\t\t).round();\n\t\t\n\t\tself.setBrowser(self.widgets().add(self.widgets().create('browser',{\n\t\t\tid: CAST.BROWSER,\n\t\t\tlayout: dims._data,\n\t\t\turl: \"index.html\"\n\t\t})));\n\t\t\n\t\tself.setTimeline(self.trunk().timeline());\n\t\tself.view().render();\n\t\treturn resolve(self);\n\t}));\n};\n\n/*\n\tCalled with the whole stream etc\n\t*/\n\nSpace.prototype.load = function (){\n\tvar self = this;\n\treturn self._promises.load || (self._promises.load = new Promise(async function(resolve) {\n\t\tawait self.setup();\n\t\tawait self.trunk().load();\n\t\tself.view().render();\n\t\tself.setReadyState('complete');\n\t\t// now set the timeline\n\t\tif (true) { Imba.ticker().add(self) };\n\t\tImba.listen(Imba,'commit',self._toucher);\n\t\t\n\t\tif (self.trunk().canRecord()) {\n\t\t\tself.audio().devices();\n\t\t};\n\t\t\n\t\treturn resolve(self);\n\t}));\n};\n\n// proxying to branch\nSpace.prototype.isEditing = function (){\n\treturn this.branch().isEditing();\n};\nSpace.prototype.isRecording = function (){\n\treturn this.branch().isRecording();\n};\nSpace.prototype.isWatching = function (){\n\treturn this.branch().isWatching();\n};\nSpace.prototype.isPlaying = function (){\n\treturn this.branch().isPlaying();\n};\nSpace.prototype.isLive = function (){\n\treturn this.branch().isLive();\n};\nSpace.prototype.isPaused = function (){\n\treturn this.branch().isPaused();\n};\nSpace.prototype.isAnnotating = function (){\n\treturn this.branch().isAnnotating();\n};\n\n/*\n\tThis should ideally first find the whole tree\n\tof ascendants - and then walk inwards - fetching and loading\n\tbranches along the way\n\t*/\n\nSpace.prototype.resolveBranchForModel = function (model){\n\tvar root = this._trunk.model();\n\t\n\tif (model == root) {\n\t\treturn Promise.resolve(this._trunk);\n\t};\n\t\n\tif (model.parent_id == root.id) {\n\t\treturn this._trunk.loadChildBranch(model);\n\t};\n};\n\n// centralized method to switch branch\nSpace.prototype.navigateTo = function (branch,mode){\n\tvar self = this;\n\tif (branch instanceof Scrim) {\n\t\t// if this other cast is unrelated?\n\t\t// should we not just change the url?\n\t\t// console.log \"try to navigate to a cast\",branch\n\t\t// what if target branch is not a child of trunk?\n\t\tself.log(\"resolve branch for model\",branch);\n\t\tself._isNavigating = true;\n\t\treturn self.resolveBranchForModel(branch).then(function(branch) {\n\t\t\tself._isNavigating = false;\n\t\t\treturn self.navigateTo(branch,mode);\n\t\t});\n\t};\n\t\n\tself.log(\"navigate to branch\",branch);\n\t\n\tif (branch != self.branch()) {\n\t\tself.api().sendTracking(tracking.TYPES.BRANCH,[branch.id()]);\n\t\tbranch.enter();\n\t\tif (mode) { branch.setMode(mode) };\n\t\t\n\t\tif (false) {};\n\t};\n\treturn self;\n};\n\nSpace.prototype.sendStats = function (){\n\tvar stats = this.timeline().stats();\n\tif (!SCON.compare(stats,this._sentStats) && stats.played != 0) {\n\t\tthis._sentStats = stats;\n\t\tthis._sentStatsAt = Date.now();\n\t\t// console.log \"sendStats\",stats\n\t\t// window:$api.post(\"/state\",stats)\n\t\t// api.send([MSG.VIEWSTATE,stats])\n\t};\n\treturn this;\n};\n\n// method for parsing/handing an event.\n// takes care of bringing the local state\n// of the space up-to-date with supplied event\n\nSpace.prototype.apply = function (action){\n\treturn;\n};\n\nSpace.prototype.revert = function (action){\n\treturn;\n};\n\nSpace.prototype.reset = function (snapshot){\n\tthis.deserialize(snapshot,{});\n\treturn this;\n};\n\nSpace.prototype.synced_ = function (){\n\treturn this;\n};\n\nSpace.prototype.createWidget = function (pkg,extra){\n\tif(extra === undefined) extra = {};\n\tpkg.id || (pkg.id = this.widgets().getNextId());\n\treturn this.branch().push_(ACTION.WIDGET_CREATE,[0,pkg],extra);\n};\n\nSpace.prototype.createBranch = function (){\n\treturn this.branch().push_(ACTION.BRANCH,[]);\n};\n\n/*\n\tMethod for adding new events to the stream\n\t*/\n\nSpace.prototype.__push = function (action,o){\n\t\n\tvar current;\n\tif(o === undefined) o = {};\n\t/*\n\t\t\tif we are currently processing an event, this will\n\t\t\tbe appended as a temporary subevent. It will also\n\t\t\tbe automatically reverted when the parent event is reverted.\n\t\t\t*/\n\t\n\tif (current = this.cursor().stack()[0]) {\n\t\treturn current.addSubAction(action,this.cursor());\n\t};\n\t\n\t// console.log \"Space.__push\",action\n\taction.LOCAL = o;\n\t\n\t/*\n\t\t\tIf we are not currently at the end of the stream (mode == live)\n\t\t\tAND allowed to edit - we should automatically enter fork-mode\n\t\t\t*/\n\t\n\t\n\tlet currBranch = this.cursor().branch();\n\t\n\tif (!this.cursor().canPush(action)) {\n\t\t// log \"cursor cannot push\",action,branch.mode,cursor.current,cursor.current.@next\n\t\t\n\t\tif (currBranch.isWatching() && currBranch.canContribute() && !this.cursor().current()._next) {\n\t\t\tthis.log(\"could be able to contribute??\",action);\n\t\t\t// show alert here? stack up the changes?\n\t\t\tcurrBranch.addLocalEvent(action,o);\n\t\t\treturn action;\n\t\t};\n\t\t\n\t\tvar branch = Branch.branchFromEvent(this.cursor().current());\n\t\tthis.api().analytics().castBranch(this.id(),this.type());\n\t\t// console.log \"created branch!\",branch\n\t\tif (branch.head()) { this.cursor().sync(branch.head()) };\n\t\tthis.client().flushLocals(); // really though? - these events will be added to the fork?\n\t\t// is it not here we should really pick this up?\n\t\tbranch.addLocalEvent(action,o);\n\t\t\n\t\tthis.api().sendTracking(tracking.TYPES.BRANCH,[branch.id()]);\n\t\tthis.view().dispatch('scrimbranch',branch);\n\t\t// console.log \"pushed the triggering event\",event\n\t\treturn action;\n\t};\n\t\n\t// should push to the current branch\n\tif (this.cursor().canPush(action)) {\n\t\t// if $verbose$\n\t\t// \tconsole.log \"push\",action\n\t\tthis.cursor().branch().addLocalEvent(action,o);\n\t\tthis._dirty = true;\n\t} else {\n\t\taction.discard();\n\t\tthis.log(\"CANNOT __push\",action);\n\t};\n\treturn action;\n};\n\nSpace.prototype.__lookup = function (ref,idx){\n\tif(idx === undefined) idx = 0;\n\tvar item;\n\tif (ref instanceof Array) {\n\t\titem = this.widgets().get(ref[idx++]);\n\t\treturn (idx == ref.length) ? item : item.__lookup(ref,idx);\n\t};\n\treturn this.widgets().get(ref);\n};\n\nSpace.prototype.record = function (o){\n\tthis.log(\"start recording!\",o);\n\tthis.cursor().branch().record(o);\n\treturn this;\n};\n\n// method for serializing\nSpace.prototype.serialize = function (o){\n\tif(o === undefined) o = {};\n\tvar snapshot = {\n\t\tid: this.id(),\n\t\tindex: this.stream().index()\n\t};\n\t\n\tvar widgets = this.widgets().map(function(item) {\n\t\tif (!(o.exclude && idx$(item.TYPE,o.exclude) >= 0)) {\n\t\t\treturn item.serialize(o,snapshot);\n\t\t};\n\t});\n\t\n\tsnapshot.widgets = widgets.filter(function(item) { return item; });\n\treturn snapshot;\n};\n\nSpace.prototype.deserialize = function (o,e){\n\tthis._deserialized = true;\n\to = SCON.clone(o);\n\t// should extract into Serializer and Deserializer\n\tvar state = {\n\t\tevent: e,\n\t\titems: [],\n\t\tstack: [this]\n\t};\n\t\n\t// e.SNAPSHOT = yes\n\tfor (let i = 0, items = iter$(o.widgets), len = items.length, item; i < len; i++) {\n\t\t// hardcoded workaround\n\t\titem = items[i];\n\t\tif (item.type == 'audio') { continue; };\n\t\tWidget.load(this,item,e).deserialize(item,state);\n\t};\n\t\n\tfor (let i = 0, items = iter$(state.items), len = items.length; i < len; i++) {\n\t\titems[i].deserialized(state);\n\t};\n\treturn this;\n};\n\nSpace.prototype.isDeserialized = function (){\n\treturn !!this._deserialized;\n};\n\nSpace.prototype.dirty = function (){\n\treturn this._dirty = true;\n};\n\nSpace.prototype.syncWithContainer = function (){\n\tvar snapshot = this.toRunStaticSnapshot();\n\treturn this.container().send({type: 'snapshot',data: snapshot});\n};\n\nSpace.prototype.toRunStaticSnapshot = function (){\n\tvar browser_, $1, $2;\n\tvar files = [];\n\t\n\tfor (let i = 0, items = iter$(this.files()), len = items.length, file; i < len; i++) {\n\t\tfile = items[i];\n\t\tfiles.push(\n\t\t\t{path: file.path(),\n\t\t\tbody: file.body(),\n\t\t\tblobId: file.blobId(),\n\t\t\tref: file.id()}\n\t\t);\n\t};\n\t\n\treturn {\n\t\tfiles: files,\n\t\tnpmPackages: (browser_ = this.space().browser()) && browser_.npmPackages && browser_.npmPackages(),\n\t\trootPath: ($1 = this.space().browser()) && $1.rootPath && $1.rootPath(),\n\t\tcatchallPath: ($2 = this.space().browser()) && $2.catchallPath && $2.catchallPath()\n\t};\n};\n\n/* tick\n\n\t*/\n\nSpace.prototype.tick = function (){\n\tvar timeline_, branch_, pointerTracker_;\n\tif (this.readyState() == 'disposing') {\n\t\treturn;\n\t};\n\t\n\tthis._counters.ticks++;\n\t\n\t// let the current timeline tick.\n\t// it might set a new targetEvent\n\t// what if we have already asked for a new timeline?\n\t(timeline_ = this.timeline()) && timeline_.tick && timeline_.tick();\n\t(branch_ = this.branch()) && branch_.tick && branch_.tick();\n\t(pointerTracker_ = this.pointerTracker()) && pointerTracker_.tick && pointerTracker_.tick();\n\t\n\t// synced offset now\n\tvar offset = this._offset = this.timeline().currentOffset();\n\tvar last = this._currentEvent;\n\tvar targets = this.cursor().sync(this.cursor()._target,0); // max 10ms\n\t\n\t\n\t// check if are at a different event than before\n\tif (last != this.cursor().current()) {\n\t\tthis._currentEvent = this.cursor().current();\n\t\tthis._dirty = true;\n\t};\n\t\n\tif (offset != this._lastOffset) {\n\t\tthis._lastOffset = offset;\n\t\tthis._dirty = true;\n\t};\n\t\n\tif (this.api()._touches != this._lastApiTouches) {\n\t\tthis._lastApiTouches = this.api()._touches;\n\t\tthis._dirty = true;\n\t};\n\t\n\t// observers should belong to each branch instead\n\tfor (let i = 0, items = iter$(this.observers()), len = items.length; i < len; i++) {\n\t\titems[i].tick_(offset,this);\n\t};\n\t\n\t\n\t// this should happen in the view directly\n\tvar mode = this.branch().mode();\n\tvar modeDirty = false;\n\t\n\tif (mode != this._mode) {\n\t\tlet prev = this._mode;\n\t\tmodeDirty = true;\n\t\tthis._mode = mode;\n\t\tthis._dirty = true;\n\t\tthis.emit('viewmode',mode,prev);\n\t};\n\t\n\tif (this._dirty || this.timeline().isPlaying()) { // or recording\n\t\tthis._dirty = false;\n\t\tthis.view().render();\n\t};\n\t\n\tthis.emit('ticked',offset);\n\t\n\tif (true) {\n\t\tImba.ticker().add(this);\n\t\t// avoid setInterval for this - simply\n\t\t// call sendStats roughly every 5 seconds\n\t\t// Not really important to be exact\n\t\tif (this._counters.ticks % 400 == 0 || modeDirty) this.sendStats();\n\t};\n\treturn this;\n};\n\n// terminate should be called before disposing space\n// ideally this should return false if not allowed to terminate?\nSpace.prototype.terminate = function (){\n\t\n\tvar _tag_, timeline_;\n\tif (this.recording()) {\n\t\tthis.recording().stop();\n\t};\n\t\n\tvar dialogs = document.body.querySelectorAll((\".Dialog.\" + this.id()));\n\t\n\tfor (let i = 0, items = iter$(dialogs), len = items.length; i < len; i++) {\n\t\t(_tag_ = items[i]._tag) && _tag_.terminate && _tag_.terminate();\n\t};\n\t\n\t(timeline_ = this.timeline()) && timeline_.pause && timeline_.pause();\n\treturn this;\n};\n\n/*\n\tShould teardown and free the memory of everything related to this cast\n\t*/\n\nSpace.prototype.dispose = function (){\n\tif (this.isDisposing()) {\n\t\treturn this;\n\t};\n\t\n\tthis.setReadyState('disposing');\n\tthis.emit('dispose');\n\tImba.unlisten(Imba,'commit',this._toucher);\n\t\n\tthis.tick = function() { return; };\n\t\n\tfor (let i = 0, items = iter$(this.widgets()), len = items.length; i < len; i++) {\n\t\titems[i].dispose();\n\t};\n\t\n\tthis._trunk && this._trunk.dispose && this._trunk.dispose();\n\tthis._view && this._view.dispose && this._view.dispose();\n\tthis._actions && this._actions.dispose && this._actions.dispose();\n\tthis._widgets = null;\n\t\n\tthis.emit('disposed');\n\t\n\tthis.__listeners__ = null;\n\t\n\tif (true) {\n\t\tif (window.SP == this) {\n\t\t\twindow.SP = null;\n\t\t};\n\t};\n\treturn this;\n};\n\nSpace.prototype.isDisposing = function (){\n\treturn this.readyState() == 'disposing';\n};\n\nSpace.prototype.isSyncing = function (){\n\treturn this.cursor().syncing();\n};\n\nSpace.prototype.view = function (){\n\tlet _t1, $ = this.$$ || (this.$$ = {});\n\treturn this._view || (this._view = this._view||_2(SpaceView,this).flag('view')).setData(this).end();\n};\n\nSpace.prototype.pointer = function (){\n\treturn this._view ? this._view._pointer : null;\n};\n\nSpace.prototype.vw = function (){\n\treturn this.view().box().width;\n};\n\nSpace.prototype.vh = function (){\n\treturn this.view().box().height;\n};\n", "var self = {}, Imba = require('imba1'), _1 = Imba.createTagScope(/*SCOPEID*/);\n\nrequire('./util/css');\nrequire('./util/icons');\nrequire('./util/shortcuts');\nrequire('./util/tooltips');\n\nvar API = require('./api').API;\n\nconst util = require('./util');\nconst flags = document.documentElement.classList;\n\nconst storage = window.storageBlocked ? window.storageMock() : window.localStorage;\n\nself.uuidv4 = function (){\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(c) {\n\t\tlet r = Math.random() * 16 | 0;\n\t\tlet v = (c == 'x') ? r : ((r & 3 | 8));\n\t\treturn v.toString(16);\n\t});\n};\n\nvar clid;\n\ntry {\n\tvar now = Date.now();\n\t// just count upwards instead?\n\tlet nr = 0;\n\twhile (nr < 99){\n\t\tlet id = (\"cw\" + (nr++));\n\t\tvar expiry = storage.getItem((\"sw:\" + id));\n\t\tif (!expiry || parseInt(expiry) < now) {\n\t\t\tclid = id;break;\n\t\t};\n\t};\n\t\n\t\n\tif (storage.getItem('scrimba:debug')) {\n\t\tflags.add('debug');\n\t};\n} catch (e) { };\n\nif (!clid) {\n\tconsole.warn(\"could not allocate service-worker subdomain for this scrim\");\n\tclid = 'c' + self.uuidv4().substr(0,8);\n};\n\nwindow.CONTAINER_ID = clid;\nstorage.setItem((\"sw:\" + clid),Date.now() + 60000 * 60 * 72);\nwindow.addEventListener('unload',function() { return storage.removeItem((\"sw:\" + clid)); });\n\nwindow.SCRIMBA_API = API.instance();\nwindow.SCRIMBA_API.isEmbed = function() { return false; };\nwindow.SDB = window.SCRIMBA_API.db();\n\n// window:emit = do |e,data|\n//\twindow:parent.postMessage({source: 'scrim', event: e, data: data or {}},'*')\n\nvar Container = require('./core/Container').Container;\nvar Scrim = require('./models').Scrim;\n\nvar Space = require('./space').Space;\n\nwindow.Player = Space;\n\nSpace.Scrim = Scrim;\nSpace.API = SCRIMBA_API;\n\nvar html = document.documentElement;\n\nwindow.path = require('./util/path');\nwindow.ANIM = require('./util/anim.js');\nwindow.MP = require('msgpack-lite');\n\n\n\tImba.Event.prototype.cancel = function (){\n\t\treturn this.prevent();\n\t};\n\n\n// create Scrimba element and make sure it loads\n_1.extendTag('element', function(tag){\n\t\n\ttag.prototype.root = function (){\n\t\treturn App;\n\t};\n\t\n\ttag.prototype.api = function (){\n\t\treturn SCRIMBA_API;\n\t};\n\t\n\ttag.prototype.util = function (){\n\t\treturn util;\n\t};\n\t\n\ttag.prototype.log = function (){\n\t\tvar api_;\n\t\tvar $0 = arguments, i = $0.length;\n\t\tvar params = new Array(i>0 ? i : 0);\n\t\twhile(i>0) params[i-1] = $0[--i];\n\t\treturn (api_ = this.api()).log.apply(api_,[].concat([this.constructor._name], Array.from(params)));\n\t};\n\t\n\ttag.prototype.dispatch = function (name,detail){\n\t\tvar res;\n\t\tlet o = {detail: detail,bubbles: true};\n\t\tlet event = new CustomEvent(name,o);\n\t\treturn res = this.dom().dispatchEvent(event);\n\t};\n\t\n\ttag.prototype.ua = function (){\n\t\treturn this.api().ua();\n\t};\n\t\n\ttag.prototype.anim = function (){\n\t\treturn window.ANIM;\n\t};\n});\n\n_1.extendTag('html', function(tag){\n\ttag.prototype.parent = function (){\n\t\treturn null;\n\t};\n});\n\nwindow.imba.commit();\n", "import {SemanticTokenTypes,SemanticTokenModifiers,M} from 'imba/program'\n\nexport class Adapter\n\t\n\tprop worker\n\tprop selector\n\n\tdef constructor defaults, selector, worker\n\t\tdefaults = defaults\n\t\tselector = selector\n\t\tworker = worker\n\t\tdisposables = []\n\t\tlistener = new Map # Object.create(null)\n\t\tself\n\n\tdef dispose\n\t\tfor item in disposables\n\t\t\titem.dispose!\n\n\t\tfor [key,val] of listener\n\t\t\tval.dispose!\n\n\t\tdisposables = []\n\t\tlistener = new Map\n\t\tself\n\n\tget editor\n\t\tglobal.monaco.editor\n\nexport class DiagnosticsAdapter < Adapter\n\t\n\tdef constructor defaults, selector, worker\n\t\tsuper\n\n\t\tlet onModelAdd = do(model)\n\t\t\tif model.getModeId! != selector\n\t\t\t\t# if model.getModeId!.match(/imba/)\n\t\t\t\t#\tconsole.log 'skip modelAd for file',model.uri.toString!,selector\n\t\t\t\treturn\n\n\t\t\taddModel(model)\n\n\t\tlet onModelRemoved = do(model)\n\t\t\tremoveModel(model)\n\n\t\tdisposables.push editor.onDidCreateModel(onModelAdd)\n\t\tdisposables.push editor.onWillDisposeModel(onModelRemoved)\n\n\t\tdisposables.push editor.onDidChangeModelLanguage do(event)\n\t\t\t# console.log 'onDidChangeModelLanguage',event,event.model\n\t\t\tonModelRemoved(event.model)\n\t\t\tonModelAdd(event.model)\n\n\t\teditor.getModels!.forEach(onModelAdd)\n\n\tdef addModel model\n\t\tlet uri = model.uri.toString!\n\n\t\t# console.log \"Diagnostics.addModel\",uri,!!listener[uri]\n\n\t\tif listener.has(model) # [uri]\n\t\t\treturn\n\n\t\tlet handle\n\n\t\tmodel.IMBA_ADAPTER = self\n\n\t\tlet sub = model.onDidChangeContent do(e)\n\t\t\tprevalidate(uri)\n\t\t\tclearTimeout(handle)\n\t\t\thandle = setTimeout(&,200) do validate(uri)\n\n\t\tlistener.set(model,{\n\t\t\tdispose: do\n\t\t\t\tclearTimeout(handle)\n\t\t\t\tsub.dispose!\n\t\t})\n\n\t\tvalidate(uri)\n\n\tdef removeModel model\n\t\t# let key = model.uri.toString!\n\t\t# console.log \"removeModel\",model,key\n\t\tif listener.has(model)\n\t\t\tlistener.get(model).dispose!\n\t\t\tlistener.delete(model)\n\t\t\t# delete listener[key]\n\n\tdef locToRange model, loc\n\t\tlet a = model.getPositionAt(loc[0])\n\t\tlet b = model.getPositionAt(loc[1])\n\t\treturn new global.monaco.Range(a.lineNumber,a.column,b.lineNumber,b.column)\n\n\tdef varToDecoration model,item,loc\n\t\tif item isa Array\n\t\t\tloc = [item[0],item[0] + item[1]]\n\t\t\titem = {type: 'variable'}\n\n\t\treturn {\n\t\t\trange: locToRange(model,loc)\n\t\t\toptions: { inlineClassName: 'variable' }\n\t\t}\n\n\tdef warningToMarker model, item\n\t\tif item isa Array\n\t\t\titem = {\n\t\t\t\tloc: [item[0],item[0] + item[1]]\n\t\t\t\tmessage: item[2]\n\t\t\t}\n\n\t\tlet marker = locToRange(model, item.loc)\n\t\tmarker.severity = 3\n\t\tmarker.message = item.message\n\t\treturn marker\n\n\tdef warningToDecoration model, orig\n\t\tlet range = locToRange(model, orig.loc)\n\t\treturn {\n\t\t\trange: range\n\t\t\toptions: {\n\t\t\t\tname: 'error'\n\t\t\t\tlinesDecorationsClassName: 'error'\n\t\t\t}\n\t\t}\n\t\n\tdef errorToDecoration model,item,loc\n\t\tif item isa Array\n\t\t\titem = {\n\t\t\t\tloc: [item[0],item[0] + item[1]]\n\t\t\t\tmessage: item[2]\n\t\t\t}\n\n\t\treturn {\n\t\t\trange: locToRange(model,item.loc)\n\t\t\toptions: {\n\t\t\t\tname: 'error'\n\t\t\t\tinlineClassName: 'error'\n\t\t\t\tlinesDecorationsClassName: 'error-line'\n\t\t\t\tmarginClassName: 'error'\n\t\t\t\tglyphMarginHoverMessage: item.message\n\t\t\t\thoverMessage: item.message\n\t\t\t}\n\t\t}\n\n\tdef prevalidate uri\n\t\tlet model = editor.getModel(uri)\n\t\tlet meta = model.imbaEntities or {}\n\t\tif meta.warnings\n\t\t\teditor.setModelMarkers(model,selector,[])\n\t\tself\n\n\tdef updateSemanticTokens model, ranges\n\t\tlet markers = []\n\t\tlet i = 0\n\t\tlet l = 1\n\t\tlet c = 1\n\t\twhile i < ranges.length\n\t\t\t\n\t\t\tlet lo = ranges[i++]\n\t\t\tif lo\n\t\t\t\tc = 1\n\n\t\t\tlet co = ranges[i++]\n\t\t\tlet len = ranges[i++]\n\t\t\tlet typ = ranges[i++]\n\t\t\tlet mods = ranges[i++]\n\t\t\tlet kind = SemanticTokenTypes[typ] + '_ '\n\t\t\tlet range = new global.monaco.Range(l + lo,c + co,l + lo,c + co + len)\n\n\t\t\tif mods & M.Import\n\t\t\t\tkind += 'import_ '\n\t\t\tif mods & M.Root\n\t\t\t\tkind += 'root_ '\n\t\t\tif mods & M.Global\n\t\t\t\tkind += 'global_ '\n\t\t\tif mods & M.Special\n\t\t\t\tkind += 'special_ '\n\t\t\t\n\t\t\tlet decoration = {\n\t\t\t\trange: range\n\t\t\t\toptions: { inlineClassName: kind }\n\t\t\t}\n\t\t\tmarkers.push decoration\n\t\t\tl += lo\n\t\t\tc += co\n\n\t\t# console.log 'markers',markers\n\t\t# let markers = ranges.map do varToDecoration(model,$1)\n\t\tmodel.varDecorations = model.deltaDecorations(model.varDecorations ||= [],markers)\n\n\tdef updateDiagnostics model, data\n\t\tlet errors = data.errors.map do errorToDecoration(model,$1)\n\t\tmodel.errorDecorations = model.deltaDecorations(model.errorDecorations ||= [],errors)\n\n\t\tlet markers = data.errors.map do warningToMarker(model,$1)\n\t\teditor.setModelMarkers(model,selector,markers)\n\n\t\tif model.$file\n\t\t\tmodel.$file.hasErrors = data.errors.length > 0\n\n\tdef compile code, options = {}\n\t\tawait self.worker(uri)\n\n\tdef validate uri\n\t\tlet model = editor.getModel(uri)\n\t\tlet file = model..FILE_MODEL\n\t\t# console.log 'validating',uri,!!model\n\t\tlet worker = await self.worker(uri)\n\t\t# console.log 'validate',uri,model,Date.now!\n\n\t\t# console.log 'received worker',worker\n\t\tlet semantics = await worker.getSemanticTokens(uri)\n\t\tif semantics\n\t\t\t# console.log 'got semantic tokens',uri,semantics\n\t\t\tupdateSemanticTokens(model,semantics)\n\t\t\n\t\tlet meta = await worker.getDiagnostics(uri)\n\t\tif meta\n\t\t\t# console.log \"returned from worker?\",meta,semantics\n\t\t\ttry\n\t\t\t\tfile.didCompile(meta)\n\t\t\t\t\t\n\t\t\treturn updateDiagnostics(model,meta)\n", "import { DiagnosticsAdapter } from './adapter'\nimport {SemanticTokenTypes,SemanticTokenModifiers} from 'imba/program'\n\nlet STOP_WHEN_IDLE_FOR = 2 * 60 * 1000 # 2min\nexport class WorkerManager\n\n\tconstructor path, defaults\n\t\tpath = path\n\t\t#version = null\n\t\tdefaults = defaults\n\t\tworker = null\n\t\tclient = null\n\t\tidleCheckInterval = setInterval(&,30 * 1000) do checkIfIdle!\n\t\tlastUsedTime = 0\n\t\toptions = {\n\t\t\tdefaults: defaults\n\t\t\tcompilerPath: null\n\t\t}\n\t\t\n\n\tdef stopWorker\n\t\tif worker\n\t\t\tworker.dispose!\n\t\t\tworker = null\n\t\tclient = null\n\n\tdef dispose\n\t\tclearInterval(idleCheckInterval)\n\t\tstopWorker!\n\n\t# should be disabled\n\tdef checkIfIdle\n\t\treturn unless worker\n\t\tlet elapsed = Date.now! - lastUsedTime\n\t\tif elapsed > STOP_WHEN_IDLE_FOR\n\t\t\tstopWorker!\n\n\tdef getClient\n\t\t# console.log \"worker getClient!\"\n\t\tlastUsedTime = Date.now!\n\t\t\n\t\tunless client\n\t\t\tworker = global.monaco.editor.createWebWorker(\n\t\t\t\tmoduleId: path\n\t\t\t\tlabel: 'imba'\n\t\t\t\tcreateData: options\n\t\t\t)\n\t\t\tclient = global.IMBA2_WORKER = worker.getProxy!\n\n\t\treturn client\n\n\tdef getLanguageServiceWorker ...resources\n\t\tlet client = await getClient!\n\t\tworker.withSyncedResources(resources).then do client\n\t\t\n\tset version value\n\t\tlet prev = #version\n\t\tif #version =? value\n\t\t\tlet src = value ? \"https://unpkg.com/imba@{value}/dist/compiler.js\" : null\n\t\t\toptions.compilerPath = src\n\t\t\tstopWorker!\n\t\n\tget version\n\t\t#version\n\nexport def setupMode modeId,monaco\n\tlet asset = import.webworker('./worker')\n\tlet client = new WorkerManager(asset.url, {})\n\tlet worker = client.getLanguageServiceWorker.bind(client)\n\tworker.manager = client\n\n\tmonaco.compileImba = do(code,opts = {}, version = null)\n\t\tlet o = Object.assign({\n\t\t\tsourcePath: \"index.imba\",\n\t\t\tplatform: \"browser\"\n\t\t\thmr: true\n\t\t},opts)\n\t\tclient.version = version\n\t\tlet worker = await client.getClient!\n\t\treturn worker.compile(code,o)\n\n\tnew DiagnosticsAdapter({}, modeId, worker)", "import {asset} from 'imba';\nexport default asset({\"input\":\"entry:embed/src/monaco/imba2/worker.imba?as=webworker\"})", "const eolpop = [/^/, token: '@rematch', next: '@pop']\nconst repop = { token: '@rematch', next: '@pop'}\nconst toodeep = {token: 'white.indent',next: '@>illegal_indent'}\n\nexport const EOF = '\u00A7EOF\u00A7'\n\ndef regexify array, pattern = '#'\n\tif typeof array == 'string'\n\t\tarray = array.split(' ')\n\n\tlet items = array.slice!.sort do $2.length - $1.length\n\titems = items.map do(item)\n\t\tlet escaped = item.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, '\\\\$&')\n\t\tpattern.replace('#',escaped)\n\tnew RegExp('(?:' + items.join('|') + ')')\n\n\ndef denter indent,outdent,stay,o = {}\n\tif indent == null\n\t\tindent = toodeep\n\n\telif indent == 1\n\t\tindent = { next: '@>'}\n\telif indent == 2\n\t\tindent = {next: '@>_indent&-_indent'}\n\n\telif typeof indent == 'string'\n\t\tindent = {next: indent}\n\n\tif outdent == -1\n\t\toutdent = repop\n\tif stay == -1\n\t\tstay = repop\n\telif stay == 0\n\t\to.comment ?= yes\n\n\t\tstay = {}\n\n\tindent = Object.assign({token: 'white.tabs'},indent or {})\n\tstay = Object.assign({token: 'white.tabs'},stay or {})\n\toutdent = Object.assign({ token: '@rematch', next: '@pop'},outdent or {})\n\n\tlet cases = {\n\t\t'$1==$S2\\t': indent\n\t\t'$1==$S2': {\n\t\t\tcases: {'$1==$S6': stay,'@default': {token: '@rematch',switchTo: '@*$1'}}\n\t\t}\n\t\t'@default': outdent\n\t}\n\tfor k,v of ['next','switchTo']\n\t\tif indent[k] and indent[k].indexOf('*') == -1\n\t\t\tindent[k] += '*$1'\n\n\t# for own k,v of cases\n\tlet rule = [/^(\\t*)(?=[^\\t\\n])/,{cases: cases}]\n\tif o.comment\n\t\tlet clones = {}\n\t\tfor own k,v of cases\n\t\t\tlet clone = Object.assign({},v)\n\t\t\tif !clone.next and !clone.switchTo\n\t\t\t\tclone.next = '@>_comment'\n\t\t\tclones[k] = clone\n\t\treturn [ [/^(\\t*)(?=#\\s|#$)/,{cases: clones}], rule ]\n\n\treturn rule\n\t\n\nexport const states = {\n\n\troot: [\n\t\t# [/^@comment/,'comment','@>_comment'] # want to push this state _ before the token\n\t\t[/^(\\t+)(?=[^\\t\\n])/,{cases: {\n\t\t\t'$1==$S2\\t': {token: 'white.indent',next: '@>_indent*$1'}\n\t\t\t'@default': 'white.indent'\n\t\t}}]\n\t\t'block_'\n\t]\n\n\t_comment: [\n\t\t[/^([\\t\\s\\n]*)$/,'comment']\n\t\t[/^(\\t*)([\\S\\s]*)/,cases: {\n\t\t\t# same or deeper indentation\n\t\t\t'$1~$S2\\t*': {token: 'comment'}\n\t\t\t'@default': {token: '@rematch', next: '@pop'}\n\t\t}]\n\t\t[/[\\S\\s]+/,'comment']\n\t]\n\n\tillegal_indent: [\n\t\tdenter()\n\t]\n\n\tidentifier_: [\n\t\t[/\\$\\w+\\$/, 'identifier.env']\n\t\t[/\\$\\d+/, 'identifier.special']\n\t\t[/\\#+@id/, 'identifier.symbol']\n\t\t[/\\\u00B6@id/, 'ivar'] # imba1\n\t\t[/@id\\!?/,cases: {\n\t\t\t'this': 'this'\n\t\t\t'self': 'self'\n\t\t\t'@keywords': 'keyword.$#'\n\t\t\t'$0~[A-Z].*': 'identifier.uppercase.$F'\n\t\t\t'@default': 'identifier.$F'\n\t\t}]\n\t]\n\n\tblock_: [\n\t\t# 'common_'\n\t\t[/^(\\t+)(?=[\\r\\n]|$)/,'white.tabs']\n\t\t'comment_'\n\t\t'class_'\n\t\t'tagclass_'\n\t\t'augmentation_'\t\t\n\t\t'var_'\n\t\t'func_'\n\t\t'import_'\n\t\t'export_'\n\t\t'flow_'\n\t\t'for_'\n\t\t'try_'\n\t\t'catch_'\n\t\t'while_'\n\t\t'css_'\n\t\t'tag_'\n\t\t'do_'\n\t\t'block_comment_'\n\t\t'expr_'\n\t\t[/[ ]+/, 'white']\n\t\t'common_'\n\t\t\n\t]\n\t\n\tindentable_: [\n\t\tdenter('@>_paren_indent&-_indent',null,null)\n\t\t[/^(\\t+)(?=[\\r\\n]|$)/,'white.tabs']\n\t\t'whitespace'\n\t]\n\n\t_indent: [\n\t\tdenter(2,-1,0)\n\t\t'block_'\n\t]\n\t\n\t_paren_indent: [\n\t\tdenter(2,-1,0)\n\t\t'block_'\n\t\t[/\\)|\\}|\\]/,'@rematch', '@pop']\n\t]\n\n\tblock: [\n\t\tdenter('@>',-1,0)\n\t\t'block_'\n\t]\n\tbool_: [\n\t\t[/(true|false|yes|no|undefined|null)(?![\\:\\-\\w\\.\\_])/,'boolean']\n\t]\n\n\top_: [\n\t\t[/\\s+\\:\\s+/,'operator.ternary']\n\t\t# [/\\s*(\\=)/]\n\t\t[/(@unspaced_ops)/,cases: {\n\t\t\t'@spread': 'operator.spread'\n\t\t\t'@access': 'operator.access'\n\t\t\t'@default': 'operator'\n\t\t}]\n\t\t[/\\/(?!\\/)/,'operator.math']\n\t\t[/\\&(?=[,\\)])/,'operator.special.blockparam']\n\t\t[/(\\s*)(@symbols)(\\s*)/, cases: {\n\t\t\t'$2@assignments': 'operator.assign'\n\t\t\t'$2@math': 'operator.math'\n\t\t\t'$2@operators': 'operator'\n\t\t\t'$2@logic': 'operator.logic'\n\t\t\t'$2@access': 'operator.access'\n\t\t\t'@default': 'delimiter'\n\t\t}]\n\t\t[/\\&\\b/, 'operator']\n\t]\n\n\tkeyword_: [\n\t\t[/new@B/,'keyword.new']\n\t\t[/isa@B/,'keyword.isa']\n\t\t[/is@B/,'keyword.is']\n\t\t[/(switch|when|throw|continue|break|then|await|typeof|by)@B/,'keyword.$1']\n\t\t[/delete@B/,'keyword.delete']\n\t\t[/and@B|or@B/, 'operator.flow']\n\t]\n\n\treturn_: [\n\t\t[/return@B/,'keyword.new']\n\t]\n\n\tprimitive_: [\n\t\t'string_'\n\t\t'number_'\n\t\t'regexp_'\n\t\t'bool_'\n\t]\n\n\tvalue_: [\n\t\t'primitive_'\n\t\t'keyword_'\n\t\t'implicit_call_'\n\t\t'parens_' # call will always capture?\n\t\t'key_'\n\t\t'access_'\n\t\t'identifier_'\n\t\t'array_'\n\t\t'object_'\n\t]\n\n\texpr_: [\n\t\t'comment_'\n\t\t'inline_var_'\n\t\t'return_'\n\t\t'value_'\n\t\t'tag_'\n\t\t'op_'\n\t\t'type_'\n\t\t'spread_'\n\t]\n\n\tattr_expr_: [\n\t\t'primitive_'\n\t\t'parens_'\n\t\t'access_'\n\t\t'identifier_'\n\t\t'array_'\n\t\t'object_'\n\t\t'tag_'\n\t\t'op_'\n\t]\n\n\taccess_: [\n\t\t[/(\\.\\.?)(@propid\\!?)/,cases: {\n\t\t\t'$2~[A-Z].*': ['operator.access','accessor.uppercase']\n\t\t\t'$2~#.*': ['operator.access','accessor.symbol']\n\t\t\t'@default': ['operator.access','accessor']\n\t\t}]\n\t]\n\n\tcall_: [\n\t\t[/\\(/, '(', '@call_body']\n\t]\n\n\tkey_: [\n\t\t[/(\\#+@id)(\\:\\s*)/,['key.symbol','operator.assign.key-value']]\n\t\t[/(@propid)(\\:\\s*)/,cases: {\n\t\t\t'@default': ['key','operator.assign.key-value']\n\t\t}]\n\t]\n\n\timplicit_call_: [\n\t\t[/(\\.\\.?)(@propid)@implicitCall/,cases: {\n\t\t\t'$2~[A-Z].*': ['operator.access','accessor.uppercase','@implicit_call_body']\n\t\t\t'@default': ['operator.access','accessor','@implicit_call_body']\n\t\t}]\n\t\t# [/(@constant)@implicitCall/,'identifier.uppercase','@implicit_call_start']\n\t\t# [/(@symbol)@implicitCall/,'identifier.uppercase','@implicit_call_start']\n\t\t[/(@propid)@implicitCall/,'@rematch','@implicit_call_start']\n\t\t// [/(@propid)@implicitCall/,'@rematch','@implicit_call_start']\n\t\t# [/(@propid)@implicitCall/,cases: {\n\t\t# \t'$1~[A-Z].*': ['identifier.uppercase','@implicit_call_body']\n\t\t# \t'@default': ['identifier','@implicit_call_body']\n\t\t# }]\n\t]\n\timplicit_call_start: [\n\t\t'identifier_'\n\t\t[/@implicitCall/,'@rematch',switchTo: '@implicit_call_body']\n\t]\n\t\n\t# [/\\$\\w+\\$/, 'identifier.env']\n\t# \t[/\\$\\d+/, 'identifier.special']\n\t# \t[/\\#+@id/, 'identifier.symbol']\n\t# \t[/\\\u00B6@id/, 'ivar'] # imba1\n\t# \t[/@id\\!?/,cases: {\n\t# \t\t'this': 'this'\n\t# \t\t'self': 'self'\n\t# \t\t'@keywords': 'keyword.$#'\n\t# \t\t'$0~[A-Z].*': 'identifier.uppercase.$F'\n\t# \t\t'@default': 'identifier.$F'\n\t# \t}]\n\n\timplicit_call_body: [\n\t\teolpop\n\t\t[/\\)|\\}|\\]|\\>/,'@rematch', '@pop']\n\t\t'arglist_'\n\t\t'whitespace'\n\t]\n\n\targlist_: [\n\t\t'do_'\n\t\t'expr_'\n\t\t[/\\s*\\,\\s*/,'delimiter.comma']\n\t]\n\n\tparams_: [\n\t\t[/\\[/, 'array.[', '@array_var_body=decl-param']\n\t\t[/\\{/, 'object.{', '@object_body=decl-param']\n\t\t[/(@variable)/,'identifier.decl-param']\n\t\t# [/(\\s*\\=\\s*)(?=(for|while|until|if|unless)\\s)/,'operator','@pop']\n\t\t'spread_'\n\t\t'type_'\n\t\t[/\\s*\\=\\s*/,'operator','@var_value=']\n\t\t[/\\s*\\,\\s*/,'separator']\n\t\t[/\\s/,'white.params']\n\t]\n\n\tobject_: [\n\t\t[/\\{/, 'object.{', '@object_body']\n\t]\n\n\tparens_: [\n\t\t[/\\(/, 'parens.(', '@parens_body']\n\t]\n\n\tparens_body: [\n\t\t[/\\)/, ')', '@pop']\n\t\t'indentable_'\n\t\t'arglist_'\n\t]\n\n\tarray_: [\n\t\t[/\\[/, 'array.[', '@array_body']\n\t]\n\n\tarray_body: [\n\t\t[/\\]@implicitCall/, token: ']', switchTo: '@implicit_call_body=']\n\t\t[/\\]/, ']', '@pop']\n\t\t'indentable_'\n\t\t'expr_'\n\t\t[',','delimiter']\n\t]\n\n\tobject_body: [\n\t\t[/\\}/, '}', '@pop']\n\t\t[/(@id)(\\s*:\\s*)/, ['key','operator.assign.key-value','@object_value']]\n\t\t[/(@id)/, 'identifier.$F']\n\t\t[/\\[/, '[', '@object_dynamic_key='] # \n\t\t[/\\s*=\\s*/,'operator.assign','@object_value=']\n\t\t[/:/,'operator.assign.key-value','@object_value=']\n\t\t[/\\,/,'delimiter.comma']\n\t\t'indentable_'\n\t\t'expr_'\n\t]\n\n\tobject_value: [\n\t\teolpop\n\t\t# couldnt this be indented as well?\n\t\t# [/(?=,|\\})/, 'delimiter', '@pop']\n\t\t[/,|\\}|\\]|\\)/, '@rematch', '@pop']\n\t\t'expr_'\n\t]\n\n\tobject_dynamic_key: [\n\t\t[']',']','@pop']\n\t\t'expr_'\n\t]\n\n\tcomment_: [\n\t\t[/#(\\s.*)?(?=\\n|$)/, 'comment']\n\t\t# [/#(\\s.*)?(\\n|$)/, 'comment']\n\t]\n\n\tblock_comment_: [\n\t\t[/###/, 'comment.start','@_block_comment']\n\t]\n\n\t_block_comment: [\n\t\t[/###/,'comment.end','@pop']\n\t\t[/[^#]+/,'comment']\n\t\t[/#(?!##)/,'comment']\n\t]\n\n\t# add try_start that accepts catch on the same line?\n\ttry_: [\n\t\t[/try@B/,'keyword.try','@>_try&try']\n\t]\n\n\tcatch_: [\n\t\t[/(catch\\s+)(?=@id(\\s|$))/, 'keyword.catch','@catch_start&catch']\n\t\t[/catch@B/,'keyword.catch','@catch_start&catch']\n\t]\n\n\tcatch_start: [\n\t\t[/@id/,'identifier.decl-const',switchTo:'@>_catch']\n\t\t[/.?/,'@rematch',switchTo:'@>_catch']\n\t]\n\n\t_catch: [\n\t\tdenter('@>block',-1,0)\n\t\t'block_'\n\t]\n\n\t_try: [\n\t\tdenter('@>block',-1,0)\n\t\t'block_'\n\t]\n\n\tdo_: [\n\t\t# [/(do)(\\()/,['keyword.do','(','@>_do_params&do']]\n\t\t[/do(?=\\()/,'keyword.do','@>do_start&do']\n\t\t[/do@B/,'keyword.do','@>_do&do']\n\t]\n\n\tdo_start: [\n\t\tdenter(null,-1,-1)\n\t\t[/\\(/,'(',switchTo: '@_do_params']\n\t\t[/./,'@rematch',switchTo:'@_do']\n\t]\n\n\t_do_params: [\n\t\t[/\\)/,')',switchTo: '@_do']\n\t\t'params_'\n\t]\n\n\t_do: [\n\t\tdenter(2,-1,0)\n\t\t# block in general, no?\n\t\t[/(\\}|\\)|\\])/,'@rematch', '@pop']\n\t\t'block_'\n\t]\n\n\tclass_: [\n\t\t[/(extend)(?=\\s+class )/,'keyword.$1']\n\t\t[/(global)(?=\\s+class )/,'keyword.$1']\n\t\t[/(class)(\\s)(@id)/, ['keyword.$1','white.$1name','entity.name.class.decl-const','@class_start=']]\n\t\t[/(class)(?=\\n)/, 'keyword.$1','@>_class&class=']\n\t]\n\t\n\taugmentation_: [\n\t\t[/(extend)(?=\\s+@id)/,'keyword.$1','@augmentation_start=']\n\t]\n\t\n\taugmentation_start: [\n\t\tdenter({switchTo: '@>_class&class='},-1,-1)\n\t\t# denter({switchTo: '@>_flow&-body'},-1,-1)\n\t\t# denter('@>_flow&block',-1,-1)\n\t\t[/[ \\t]+/, 'white']\n\t\t'expr_'\n\t]\n\n\tclass_start: [\n\t\t[/(\\s+\\<\\s+)(@id)/,['keyword.extends','identifier.superclass']]\n\t\t[/@comment/,'comment']\n\t\t[/^/,'@rematch',switchTo: '@>_class&class=']\n\t]\n\n\ttagclass_: [\n\t\t[/(extend)(?=\\s+tag )/,'keyword.$1']\n\t\t[/(global)(?=\\s+tag )/,'keyword.$1']\n\t\t[/(tag)(\\s)(@constant)/, ['keyword.tag','white.tagname','entity.name.component.local','@tagclass_start=']] # only when uppercase\n\t\t[/(tag)(\\s)(@id)/, ['keyword.tag','white.tagname','entity.name.component.global','@tagclass_start=']] # only when uppercase\n\t]\n\n\ttagclass_start: [\n\t\t[/(\\s+\\<\\s+)(@id)/,['keyword.extends','identifier.superclass']]\n\t\t[/@comment/, 'comment']\n\t\t[/^/,'@rematch',switchTo: '@>_tagclass&component=']\n\t]\n\n\timport_: [\n\t\t[/(import)(?=\\s+['\"])/,'keyword.import','@>import_source']\n\t\t[/(import)(\\s+type)(?=\\s[\\w\\$\\@\\{])/,['keyword.import','keyword.type','@>import_body&-_imports=decl-import-type/part']]\n\t\t[/(import)@B/,'keyword.import','@>import_body&-_imports=decl-import/part']\n\t]\n\t\n\timport_body: [\n\t\tdenter(null,-1,0)\n\t\t[/(@esmIdentifier)( +from)/,['identifier.$F.default','keyword.from',switchTo: '@import_source']]\n\t\t[/(\\*)(\\s+as\\s+)(@esmIdentifier)(\\s+from)/,['keyword.star','keyword.as','identifier.$F.ns','keyword.from',switchTo: '@import_source']]\n\t\t[/(@esmIdentifier)(\\s*,\\s*)(\\*)(\\s+as\\s+)(@esmIdentifier)(from)/,\n\t\t\t['identifier.$F.default','delimiter.comma','keyword.star','keyword.as','identifier.$F.ns','keyword.from',switchTo: '@import_source']]\n\t\t# [/(\\*)(\\s+as\\s+)(@esmIdentifier)/, ['keyword.star','keyword.as','identifier.const.import',switchTo: '@/delim']]\n\t\t# [/(@esmIdentifier)(\\s+as\\s+)(@esmIdentifier)/, ['alias','keyword.as','identifier.const.import']]\n\t\t[/\\ *from/, 'keyword.from',switchTo: '@import_source']\n\t\t[/\\{/,'specifiers.{','@esm_specifiers/part']\n\t\t[/(@esmIdentifier)/,'identifier.$F',switchTo: '@/delim']\n\t\t[/\\s*\\,\\s*/,'delimiter.comma',switchTo: '@/part']\n\t\t'comma_'\n\t\t'common_'\n\t]\n\t\n\timport_source: [\n\t\tdenter(null,-1,0)\n\t\t[/[\"']/, 'path.open','@_path=$#']\n\t\teolpop\n\t]\n\n\texport_: [\n\t\t[/(export)( +)(default)@B/,['keyword.export','white','keyword.default']] # ,'@>import_body'\n\t\t[/(export)(?= +(let|const|var|class|tag)@B)/,'keyword.export'] # ,'@>import_body'\n\t\t[/(export)( +)(global)@B/,['keyword.export','white','keyword.global']] # ,'@>import_body'\n\n\t\t[/(export)(\\s+\\*\\s+)(from)@B/,['keyword.export','operator.star','keyword.from','@>import_source']]\n\t\t[/(export)@B/,'keyword.export','@>export_body']\n\t]\n\n\texport_body: [\n\t\tdenter(null,-1,0)\n\t\t[/(\\*)(\\s+as\\s+)(@esmIdentifier)/, ['keyword.star','keyword.as','identifier.const.export']]\n\t\t[/(@esmIdentifier)(\\s+as\\s+)(default)/, ['alias','keyword.as','alias.default']]\n\t\t[/(@esmIdentifier)(\\s+as\\s+)(@esmIdentifier)/, ['alias','keyword.as','identifier.const.export']]\n\t\t[/from/, 'keyword.from',switchTo: '@import_source']\n\t\t[/\\{/,'{','@esm_specifiers=export/part']\n\t\t[/(@esmIdentifier)/,'identifier.const.export']\n\t\t[/\\*/,'operator.star']\n\t\t'comma_'\n\t\t'common_'\t\t\n\t]\n\n\t\n\n\n\tesm_specifiers: [\n\t\t[/\\}/, '}', '@pop']\n\t\t[/(@esmIdentifier)(\\s+as\\s+)(@esmIdentifier)/, ['alias','keyword.as','identifier.const.$F',switchTo: '@/delim']]\n\t\t[/@esmIdentifier/,cases: {\n\t\t\t'$/==part': {token: 'identifier.const.$S4', switchTo: '@/delim'}\n\t\t\t'@default': {token: 'invalid'}\n\t\t}]\n\t\t[/\\s*\\,\\s*/,'delimiter.comma',switchTo: '@/part']\n\t\t'whitespace'\n\t]\n\n\t\n\t_path: [\n\t\t[/[^\"'\\`\\{\\\\]+/, 'path']\n\t\t[/@escapes/, 'path.escape']\n\t\t[/\\./, 'path.escape.invalid']\n\t\t[/\\{/, 'invalid']\n\t\t[/[\"'`]/, cases: { '$#==$F': { token: 'path.close', next: '@pop' }, '@default': 'path' }]\n\t]\n\n\tmember_: [\n\t\t# [/static(?=\\s+(get|set|def) )/,'keyword.static'] # only in class and tagclass?\n\t\t[/(constructor)@B/, 'entity.name.constructor','@>def_params&def/def=decl-param']\n\t\t[/(def|get|set)(\\s)(@defid)/, ['keyword.$1','white.entity','entity.name.$1','@>def_params&$1/$1=decl-param']]\n\t\t[/(def|get|set)(\\s)(\\[)/, ['keyword.$1','white.entity','$$','@>def_dynamic_name/$1']]\n\t]\n\n\tfunc_: [\n\t\t[/export(?=\\s+(get|set|def|global) )/,'keyword.export'] # only in class and tagclass?\n\t\t[/global(?=\\s+(get|set|def) )/,'keyword.global'] # only in class and tagclass?\n\t\t[/(def)(\\s)(@id)(\\.)(@defid)/,[\n\t\t\t'keyword.$1','white.entity','identifier.target','operator','entity.name.def', '@>def_params&$1/$1'\n\t\t]]\n\n\t\t[/(def)(\\s)(@defid)/, ['keyword.$1','white.entity','entity.name.function.decl-const-func','@>def_params&$1/$1']]\n\t]\n\t\n\tflow_: [\n\t\t# [/(else)(?=\\s|$)/, ['keyword.$1','@flow_start.$S2.flow.$S4']]\n\t\t[/(else)(?=\\s|$)/, ['keyword.$1','@>_flow&$1']]\n\t\t[/(if|else|elif|unless)(?=\\s|$)/, ['keyword.$1','@flow_start=$1']]\n\t]\n\n\tflow_start: [\n\t\tdenter({switchTo: '@>_flow&$F'},-1,-1)\n\t\t# denter({switchTo: '@>_flow&-body'},-1,-1)\n\t\t# denter('@>_flow&block',-1,-1)\n\t\t[/[ \\t]+/, 'white']\n\t\t'expr_'\n\t]\n\n\tfor_: [\n\t\t[/for(?: own)?@B/,'keyword.$#','@for_start&forscope=decl-for']\n\t\t# [/for@B/,'keyword.$#','@for_start&flow=let']\n\t]\n\n\twhile_: [\n\t\t[/(while|until)@B/,'keyword.$#','@>while_body']\n\t]\n\twhile_body: [\n\t\tdenter(2,-1,0)\n\t\t'block_'\n\t]\n\n\tfor_start: [\n\t\tdenter({switchTo: '@>for_body'},-1,-1)\n\t\t[/\\[/, 'array.[', '@array_var_body']\n\t\t[/\\{/, 'object.{', '@object_body'] # object_var_body?\n\t\t[/(@variable)/,'identifier.$F']\n\t\t[/(\\s*\\,\\s*)/,'separator','@=decl-for-index']\n\t\t[/\\s(in|of)@B/,'keyword.$1',switchTo: '@>for_source=']\n\t\t[/[ \\t]+/, 'white']\n\t\t'type_'\n\t]\n\tfor_source: [\n\t\tdenter({switchTo: '@>for_body'},-1,{switchTo: '@for_body'})\n\t\t'expr_'\n\t\t[/[ \\t]+/, 'white']\n\t]\n\n\tfor_body: [\n\t\tdenter(2,-1,0)\n\t\t'block_'\n\t]\n\n\tdecorator_: [\n\t\t[/(@decid)(\\()/,['decorator','$2','@_decorator_params']]\n\t\t[/(@decid)/,'decorator']\n\t]\n\n\t_decorator_params: [\n\t\t[/\\)/,')','@pop']\n\t\t'params_'\n\t]\n\n\tfield_: [\n\t\t[/((?:lazy )?)((?:static )?)(const|let|attr)(?=\\s|$)/, ['keyword.lazy','keyword.static','keyword.$1','@_vardecl=field-$3']] # $2_body.$S2.$2.$S4\n\t\t[/(static\\s+)(?=@fieldid)/,'keyword.static']\n\t\t[/(@fieldid)(?=$)/,'entity.name.field']\n\t\t[/(@fieldid)/,['entity.name.field','@_field_1']]\n\t]\n\n\t_field_1: [\n\t\tdenter(null,-1,-1)\n\t\t'type_'\n\t\t[/(\\s*=)(?!\\=)/,['operator.assign','@>_field_value&field']]\n\t\t[/(\\s*(?:\\@)set\\s*)/,['keyword.spy','@>_def&spy']]\n\t]\n\n\t_field_value: [\n\t\tdenter(2,-1,0)\n\t\t'block_' # sure?\n\t\t[/(\\s*(?:\\@)set\\s*)/,['@rematch','@pop']]\n\t]\n\n\tvar_: [\n\t\t[/(const|let)(?=\\s[\\[\\{\\$a-zA-Z]|\\s*$)/, ['keyword.$1','@_vardecl=decl-$1']] # $2_body.$S2.$2.$S4\n\t\t[/(const|let)(?=\\s|$)/, ['keyword.$1']]\n\t]\n\n\tinline_var_: [\n\t\t[/(const|let)(?=\\s[\\[\\{\\$a-zA-Z]|\\s*$)/, ['keyword.$1','@inline_var_body=decl-$1']]\n\t]\n\n\tstring_: [\n\t\t[/\"\"\"/, 'string', '@_herestring=\"\"\"']\n\t\t[/'''/, 'string', '@_herestring=\\'\\'\\'']\n\t\t[/[\"'`]/, 'string.open','@_string=$#']\n\t]\n\n\tnumber_: [\n\t\t[/0[xX][0-9a-fA-F_]+/, 'number.hex']\n\t\t[/0[b][01_]+/, 'number.binary']\n\t\t[/0[o][0-9_]+/, 'number.octal']\n\t\t[/(\\d+)([a-z]+|\\%)/, ['number','unit']]\n\t\t[/(\\d*\\.\\d+(?:[eE][\\-+]?\\d+)?)([a-z]+|\\%)/, ['number.float','unit']]\n\t\t[/\\d+[eE]([\\-+]?\\d+)?/, 'number.float']\n\t\t[/\\d[\\d_]*\\.\\d[\\d_]*([eE][\\-+]?\\d+)?/, 'number.float']\n\t\t[/\\d[\\d_]*/, 'number.integer']\n\t\t[/0[0-7]+(?!\\d)/, 'number.octal']\n\t\t[/\\d+/, 'number']\n\t]\n\n\t_string: [\n\t\t[/[^\"'\\`\\{\\\\]+/, 'string']\n\t\t[/@escapes/, 'string.escape']\n\t\t[/\\./, 'string.escape.invalid']\n\t\t[/\\{/, cases: {\n\t\t\t'$F==\\'': 'string'\n\t\t\t'@default': { token: 'string.bracket.open', next: '@interpolation_body' }\n\t\t}]\n\t\t[/[\"'`]/, cases: { '$#==$F': { token: 'string.close', next: '@pop' }, '@default': 'string' }]\n\t\t[/#/, 'string']\n\t]\n\n\t_herestring: [\n\t\t[/(\"\"\"|''')/, { cases: { '$1==$F': { token: 'string', next: '@pop' }, '@default': 'string' } }],\n\t\t[/[^#\\\\'\"\\{]+/, 'string'],\n\t\t[/['\"]+/, 'string'],\n\t\t[/@escapes/, 'string.escape'],\n\t\t[/\\./, 'string.escape.invalid'],\n\t\t[/\\{/, { cases: { '$F==\"\"\"': { token: 'string', next: '@interpolation_body' }, '@default': 'string' } }],\n\t\t[/#/, 'string']\n\t]\n\n\tinterpolation_body: [\n\t\t[/\\}/,'string.bracket.close','@pop']\n\t\t'expr_'\n\t]\n\n\t_class: [\n\t\tdenter(toodeep,-1,0)\n\t\t# 'var_'\n\t\t'css_'\n\t\t'member_'\n\t\t'comment_'\n\t\t'block_comment_'\n\t\t'decorator_'\n\t\t[/(get|set|def|static|prop|attr)@B/,'keyword.$0']\n\t\t'field_'\n\t\t'common_'\n\t]\n\n\t_tagclass: [\n\t\t'_class'\n\t\t[/(?=\\<self)/,'entity.name.def.render','@_render&def',]\n\t\t# self def\n\t]\n\n\tdef_params: [\n\t\t# denter({switchTo: '@>_def'},-1,{switchTo: '@>_def'})\n\t\t[/\\(/,'(','@def_parens']\n\t\t[/^/,'@rematch',switchTo:'@_def=']\n\t\t[/do@B/,'keyword.do',switchTo:'@_def=']\n\t\t'params_'\n\t\t[/@comment/,'comment']\n\t]\n\n\tdef_parens: [\n\t\t[/\\)/,')','@pop']\n\t\t'params_'\n\t]\n\n\tdef_dynamic_name: [\n\t\t[']',token: 'square.close',switchTo: '@def_params&$/=decl-param']\n\t\t'expr_'\n\t]\n\n\t_render: [\n\t\tdenter(2,-1,-1)\n\t\t'block_'\n\t]\n\n\t_def: [\n\t\tdenter(2,-1,0)\n\t\t'block_'\n\t]\n\n\t_flow: [\n\t\tdenter(2,-1,0)\n\t\t'block_'\n\t]\n\n\t_varblock: [\n\t\tdenter(1,-1,-1)\n\t\t[/\\[/, 'array.[', '@array_var_body']\n\t\t[/\\{/, 'object.{', '@object_body']\n\t\t[/(@variable)/,'identifier.$F']\n\t\t[/\\s*\\,\\s*/,'separator']\n\t\t[/(\\s*\\=\\s*)(?=(for|while|until|if|unless|try)\\s)/,'operator','@pop']\n\t\t[/(\\s*\\=\\s*)/,'operator','@var_value=']\n\t\t'type_'\n\t\t[/#(\\s.*)?\\n?$/, 'comment']\n\t]\n\n\t_vardecl: [\n\t\tdenter(null,-1,-1)\n\t\t[/\\[/, 'array.[', '@array_var_body']\n\t\t[/\\{/, 'object.{', '@object_body']\n\t\t[/(@variable)(?=\\n|,|$)/,'identifier.$F','@pop']\n\t\t[/(@variable)/,'identifier.$F']\n\t\t[/(\\s*\\=\\s*)/,'operator.declval',switchTo: '@var_value&value='] # ,switchTo: '@var_value='\n\t\t'type_'\n\t]\n\n\tarray_var_body: [\n\t\t[/\\]/, ']', '@pop']\n\t\t[/\\{/, 'object.{', '@object_body']\n\t\t[/\\[/, 'array.[', '@array_var_body']\n\t\t'spread_'\n\t\t[/(@variable)/,'identifier.$F']\n\t\t[/(\\s*\\=\\s*)/,'operator.assign','@array_var_body_value=']\n\t\t# 'expr_'\n\t\t[',','delimiter']\n\t]\n\n\tarray_var_body_value: [\n\t\t[/(?=,|\\)|]|})/, 'delimiter', '@pop']\n\t\t'expr_'\n\t]\n\n\n\tinline_var_body: [\n\t\t[/\\[/, 'array.[', '@array_var_body']\n\t\t[/\\{/, 'object.{', '@object_body']\n\t\t[/(@variable)/,'identifier.$F']\n\t\t[/(\\s*\\=\\s*)/,'operator','@pop'] # ,switchTo: '@var_value='\n\t\t'type_'\n\t]\n\n\tvar_value: [\n\t\t[/(?=,|\\)|]|})/, 'delimiter', '@pop']\n\t\tdenter({switchTo: '@>block'},-1,-1)\n\t\t'block_'\n\t\t# 'do_'\n\t\t# 'expr_'\n\t\t# 'common_'\n\t]\n\n\tcommon_: [\n\t\t[/^(\\t+)(?=\\n|$)/,'white.tabs']\n\t\t'whitespace'\n\t]\n\tcomma_: [\n\t\t[/\\s*,\\s*/,'delimiter.comma']\n\t]\n\n\tspread_: [\n\t\t[/\\.\\.\\./,'operator.spread']\n\t]\n\n\ttype_: [\n\t\t[/\\\\(?!\\/)/, '@rematch','@_type&-_type/0']\n\t]\n\n\t_type: [\n\t\tdenter(-1,-1,-1)\n\t\t[/\\\\/,'delimiter.type.prefix']\n\t\t# these should probably stack and pair\n\t\t[/\\[/,'delimiter.type','@/]']\n\t\t[/\\(/,'delimiter.type','@/)']\n\t\t[/\\{/,'delimiter.type','@/}']\n\t\t[/\\</,'delimiter.type','@/>']\n\t\t[/\\|/,'delimiter.type.union']\n\t\t[/\\,|\\s|\\=|\\./,{\n\t\t\tcases: {\n\t\t\t\t'$/==0': { token: '@rematch', next: '@pop' }\n\t\t\t\t'@default': 'type'\n\t\t\t}\n\t\t}]\n\t\t[/[\\]\\}\\)\\>]/,{\n\t\t\tcases: {\n\t\t\t\t'$#==$/': { token: 'delimiter.type', next: '@pop' }\n\t\t\t\t'@default': { token: '@rematch', next: '@pop' }\n\t\t\t}\n\t\t}]\n\t\t[/[\\w\\-\\$]+/,'type']\n\t]\n\t\n\t\n\n\tcss_: [\n\t\t[/global(?=\\s+css@B)/,'keyword.$#']\n\t\t[/css(?=\\s+|$)/, 'keyword.css','@>css_selector&rule-_sel']\n\t]\n\n\tsel_: [\n\t\t[/(\\%)((?:@id)?)/,['style.selector.mixin.prefix','style.selector.mixin']]\n\t\t[/(\\@)(\\.{0,2}[\\w\\-\\<\\>\\!]*\\+?)/,'style.selector.modifier']\n\t\t[/(\\@)(\\.{0,2}[\\w\\-\\<\\>\\!]*)/,'style.selector.modifier']\n\t\t[/\\.([\\w\\-]+)?/,'style.selector.class-name']\n\t\t[/\\#([\\w\\-]+)?/,'style.selector.id']\n\t\t[/([\\w\\-]+)/,'style.selector.element']\n\t\t[/(>+|~|\\+)/,'style.selector.operator']\n\t\t[/(\\*+)/,'style.selector.element.any']\n\t\t[/(\\$)((?:@id)?)/,['style.selector.reference.prefix','style.selector.reference']]\n\t\t[/\\&/,'style.selector.context']\n\t\t[/\\(/,'delimiter.selector.parens.open','@css_selector_parens']\n\t\t[/\\[/,'delimiter.selector.attr.open','@css_selector_attr']\n\t\t[/\\s+/,'white']\n\t\t[/,/,'style.selector.delimiter']\n\t\t[/#(\\s.*)?\\n?$/, 'comment']\n\t]\n\n\tcss_props: [\n\t\tdenter(null,-1,0)\n\t\t[/(?=@cssPropertyKey2)/,'','@css_property&-_styleprop-_stylepropkey']\n\t\t[/#(\\s.*)?\\n?$/, 'comment']\n\t\t[/(?=[\\%\\*\\w\\&\\$\\>\\.\\[\\@\\!]|\\#[\\w\\-])/,'','@>css_selector&rule-_sel']\n\t\t[/\\s+/, 'white']\n\t]\n\n\tcss_selector: [\n\t\tdenter({switchTo: '@css_props'},-1,{token:'@rematch',switchTo:'@css_props&_props'})\n\t\t[/(\\}|\\)|\\])/,'@rematch', '@pop']\n\t\t[/(?=\\s*@cssPropertyKey2)/,'',switchTo:'@css_props&_props']\n\t\t[/\\s*#\\s/,'@rematch',switchTo:'@css_props&_props']\n\t\t'sel_'\n\t]\n\n\tcss_inline: [\n\t\t[/\\]/,'style.close','@pop']\n\t\t[/(?=@cssPropertyKey2)/,'','@css_property&-_styleprop-_stylepropkey']\n\t\t[/(?=@cssPropertyPath\\])/,'','@css_property&-_styleprop-_stylepropkey']\n\t]\n\n\tcss_selector_parens: [\n\t\t[/\\)/, 'delimiter.selector.parens.close','@pop']\n\t\t'sel_'\n\t]\n\n\tcss_selector_attr: [\n\t\t[/\\]/, 'delimiter.selector.parens.close','@pop']\n\t\t'sel_'\n\t]\n\n\tcss_property: [\n\t\tdenter(null,-1,-1)\n\t\t[/\\]/,'@rematch','@pop']\n\t\t[/(\\d+)(@id)/, ['style.property.unit.number','style.property.unit.name']]\n\t\t[/((--|\\$)@id)/, 'style.property.var']\n\t\t[/(-*@id)/, 'style.property.name']\n\t\t# [/(\\@+)([\\>\\<\\!]?[\\w\\-]+)/, ['style.property.modifier.start','style.property.modifier']]\n\t\t[/@cssModifier/,'style.property.modifier']\n\t\t[/(\\@+|\\.+)(@id\\-?)/, ['style.property.modifier.start','style.property.modifier']]\n\t\t[/\\+(@id)/, 'style.property.scope']\n\t\t[/\\s*([\\:]\\s*)(?=@br|$)/, 'style.property.operator',switchTo: '@>css_multiline_value&_stylevalue']\n\t\t[/\\s*([\\:]\\s*)/, 'style.property.operator',switchTo: '@>css_value&_stylevalue']\n\t]\n\n\tcss_value_: [\n\t\t[/(x?xs|sm\\-?|md\\-?|lg\\-?|xx*l|\\dxl|hg|x+h)\\b/, 'style.value.size'],\n\t\t[/\\#[0-9a-fA-F]+/, 'style.value.color.hex'],\n\t\t[/((--|\\$)@id)/, 'style.value.var']\n\t\t[/(@optid)(\\@+|\\.+)(@optid)/,['style.property.name','style.property.modifier.prefix','style.property.modifier']]\n\t\t'op_'\n\t\t'string_'\n\t\t'number_'\n\t\t'comment_'\n\t\t[/\\s+/,'style.value.white']\n\t\t[/\\(/, 'delimiter.style.parens.open', '@css_expressions']\n\t\t[/\\{/, 'delimiter.style.curly.open', '@css_interpolation&-_styleinterpolation']\n\t\t[/(@id)/, 'style.value']\n\t]\n\n\tcss_value: [\n\t\tdenter({switchTo: '@>css_multiline_value'},-1,-1)\n\t\t# [/@cssModifier/, '@rematch', '@pop']\n\t\t[/@cssPropertyKey2/, '@rematch', '@pop']\n\t\t[/;/, 'style.delimiter', '@pop']\n\t\t[/(\\}|\\)|\\])/, '@rematch', '@pop']\n\t\t'css_value_'\n\t]\n\n\tcss_multiline_value: [\n\t\tdenter(null,-1,0)\n\t\t[/@cssPropertyKey2/, 'invalid']\n\t\t'css_value_'\n\t]\n\n\tcss_expressions: [\n\t\t[/\\)/, 'delimiter.style.parens.close', '@pop']\n\t\t[/\\(/, 'delimiter.style.parens.open', '@css_expressions']\n\t\t'css_value'\n\t]\n\n\tcss_interpolation: [\n\t\t[/\\}/, 'delimiter.style.curly.close', '@pop']\n\t\t'expr_'\n\t]\n\n\texpressions: [\n\t\t[/\\,/, 'delimiter.comma']\n\t]\n\n\twhitespace: [\n\t\t[/[\\r\\n]+/, 'br']\n\t\t[/[ \\t\\r\\n]+/, 'white']\n\t]\n\n\tspace: [\n\t\t[/[ \\t]+/, 'white']\n\t]\n\n\ttag_: [\n\t\t[/(\\s*)(<)(?=\\.)/,['white','tag.open','@_tag/flag']],\n\t\t[/(\\s*)(<)(?=\\w|\\{|\\[|\\%|\\#|>)/,['white','tag.open','@_tag/name']]\n\t]\n\ttag_content: [\n\t\tdenter(2,-1,0)\n\t\t[/\\)|\\}|\\]/,'@rematch', '@pop']\n\t\t'common_'\n\t\t'flow_'\n\t\t'var_'\n\t\t'for_'\n\t\t'css_'\n\t\t'expr_'\n\t\t'do_'\n\t\t# dont support object keys directly here\n\t]\n\n\ttag_children: [\n\n\t]\n\n\t_tag: [\t\t\n\t\t[/\\/>/,'tag.close','@pop']\n\t\t[/>/,'tag.close',switchTo: '@>tag_content=&-_tagcontent']\n\t\t# '@>css_selector&rule-_sel'\n\t\t[/>/,'tag.close','@pop']\n\t\t[/(\\-?\\d+)/,'tag.$S3']\n\t\t[/(\\%)(@id)/,['tag.mixin.prefix','tag.mixin']]\n\t\t[/\\#@id/,'tag.id']\n\n\t\t[/\\./,{ cases: {\n\t\t\t'$/==event': {token: 'tag.event-modifier.start', switchTo: '@/event-modifier'}\n\t\t\t'$/==event-modifier': {token: 'tag.event-modifier.start', switchTo: '@/event-modifier'}\n\t\t\t'$/==modifier': {token: 'tag.modifier.start', switchTo: '@/modifier'}\n\t\t\t'$/==rule': {token: 'tag.rule-modifier.start', switchTo: '@/rule-modifier'}\n\t\t\t'$/==rule-modifier': {token: 'tag.rule-modifier.start', switchTo: '@/rule-modifier'}\n\t\t\t'@default': {token: 'tag.flag.start', switchTo: '@/flag'}\n\t\t}}]\n\n\t\t[/(\\$@id)/,{ cases: {\n\t\t\t'$/==name': 'tag.reference'\n\t\t\t'@default': 'tag.$/'\n\t\t}}]\n\n\t\t[/\\{/,'tag.$/.interpolation.open', '@_tag_interpolation']\n\t\t[/\\[/,'style.open', '@css_inline']\n\t\t[/(\\s*\\=\\s*)/,'operator.equals.tagop.tag-$/', '@_tag_value&-value']\n\t\t[/\\:/,token: 'tag.event.start', switchTo: '@/event']\n\t\t'tag_event_'\n\t\t# 'tag_attr_'\n\t\t[/(\\-?@tagIdentifier)(\\:@id)?/,{ cases: {\n\t\t\t'$/==attr': {token: '@rematch', next: '@_tag_attr&-_tagattr'}\n\t\t\t'@default': {token: 'tag.$/'}\n\t\t}}]\n\t\t# [/\\@/,token: 'tag.event.start', switchTo: '@/event']\n\t\t# [/\\{/,token: 'tag.$/.braces.open', next: '@_tag_interpolation/0']\n\t\t[/\\(/,token: 'tag.$/.parens.open', next: '@_tag_parens/0']\n\t\t[/\\s+/,token: 'tag.white', switchTo: '@/attr']\n\t\t'comment_'\n\t]\n\ttag_event_: [\n\t\t# add an additional slot for name etc?\n\t\t# [/(\\@)(@optid)/,['tag.event.start','tag.event.name','@_tag_event&_tagevent/$2']]\n\t\t[/(?=\\@@optid)/,'','@_tag_event&-_listener']\n\t]\n\n\t\n\t\n\t_tag_part: [\n\t\t[/\\)|\\}|\\]|\\>/,'@rematch', '@pop']\n\t]\n\t_tag_event: [\n\t\t'_tag_part'\n\t\t[/(\\@)(@optid)/,['tag.event.start','tag.event.name']]\n\t\t[/(\\.)(@optid)/,['tag.event-modifier.start','tag.event-modifier.name']]\n\t\t[/\\(/,token: 'tag.$/.parens.open', next: '@_tag_parens/0']\n\t\t[/(\\s*\\=\\s*)/,'operator.equals.tagop.tag-$/', '@_tag_value&handler']\n\t\t[/\\s+/,'@rematch','@pop']\n\t]\n\n\ttag_attr_: [\n\t\t# add an additional slot for name etc?\n\t\t# [/(\\@)(@optid)/,['tag.event.start','tag.event.name','@_tag_event&_tagevent/$2']]\n\t\t[/(?=@tagIdentifier(\\:@id)?)/,'','@_tag_attr&-_attribute']\n\t]\n\n\t_tag_attr: [\n\t\t'_tag_part'\n\t\t[/(\\-?@tagIdentifier)(\\:@id)?/,'tag.attr']\n\t\t[/\\.(@optid)/,'tag.event-modifierzz']\n\t\t[/\\(/,token: 'tag.parens.open.$/', next: '@_tag_parens/0']\n\t\t[/(\\s*\\=\\s*)/,'operator.equals.tagop.tag-$/', '@_tag_value&-tagattrvalue']\n\t\t[/\\s+/,'@rematch','@pop']\n\t]\n\t\n\t_tag_interpolation: [\n\t\t[/\\}/,'tag.$/.interpolation.close','@pop']\n\t\t'expr_'\n\t\t[/\\)|\\]/,'invalid']\n\t]\n\n\t_tag_parens: [\n\t\t[/\\)/,'tag.$/.parens.close', '@pop']\n\t\t'arglist_'\n\t\t[/\\]|\\}/,'invalid']\n\t]\n\n\t_tag_value: [\n\t\t[/(?=(\\/?\\>|\\s))/,'','@pop']\n\t\t'attr_expr_'\n\t]\n\n\tregexp_: [\n\t\t[/\\/(?!\\ )(?=([^\\\\\\/]|\\\\.)+\\/)/, { token: 'regexp.slash.open', bracket: '@open', next: '@_regexp'}]\n\t\t[/\\/\\/\\//, { token: 'regexp.slash.open', bracket: '@open', next: '@_hereregexp'}]\n\t\t[/(\\/)(\\/)/, ['regexp.slash.open','regexp.slash.close']]\n\t\t# [/(\\/)([^\\\\\\/]|\\\\.)*(\\\\\\/)(?=($))/, token: 'regexp']\n\t]\n\t\n\t_regexp: [\n\t\t[/(\\{)(\\d+(?:,\\d*)?)(\\})/, ['regexp.escape.control', 'regexp.escape.control', 'regexp.escape.control'] ],\n\t\t[/(\\[)(\\^?)(?=(?:[^\\]\\\\\\/]|\\\\.)+)/, ['regexp.escape.control',{ token: 'regexp.escape.control', next: '@_regexrange'}]],\n\t\t[/(\\()(\\?:|\\?=|\\?!)/, ['regexp.escape.control','regexp.escape.control'] ],\n\t\t[/[()]/, 'regexp.escape.control'],\n\t\t[/@regexpctl/, 'regexp.escape.control'],\n\t\t[/[^\\\\\\/]/, 'regexp' ],\n\t\t[/@regexpesc/, 'regexp.escape' ],\n\t\t[/\\\\:/, 'regexp.escape' ],\n\t\t[/\\\\\\./, 'regexp.invalid' ],\n\t\t[/(\\/)(\\w+)/, [{ token: 'regexp.slash.close'},{token: 'regexp.flags', next: '@pop'}] ],\n\t\t['/', { token: 'regexp.slash.close', next: '@pop'}],\n\t\t[/./, 'regexp.invalid' ],\n\t]\n\n\t_regexrange: [\n\t\t[/-/, 'regexp.escape.control']\n\t\t[/\\^/, 'regexp.invalid']\n\t\t[/@regexpesc/, 'regexp.escape']\n\t\t[/[^\\]]/, 'regexp']\n\t\t[/\\]/, 'regexp.escape.control', '@pop']\n\t]\n\n\t_hereregexp: [\n\t\t[/[^\\\\\\/#]/, 'regexp']\n\t\t[/\\\\./, 'regexp']\n\t\t[/#.*$/, 'comment']\n\t\t['///[igm]*','regexp', '@pop' ]\n\t\t[/\\//, 'regexp']\n\t\t'comment_'\n\t]\n}\n\n# states are structured:\n# 1 = the monarch state\n# 2 = the current indentation (I)\n# 3 = the current scope name/type (&)\n# 4 = various flags (F)\n# 5 = the monarch substate -- for identifiers++\ndef rewrite-state raw\n\t\n\tlet state = ['$S1','$S2','$S3','$S4','$S5','$S6']\n\n\tif raw.match(/\\@(pop|push|popall)/)\n\t\treturn raw\n\n\traw = raw.slice(1) if raw[0] == '@'\n\n\tif raw.indexOf('.') >= 0\n\t\treturn raw\n\n\traw = rewrite-token(raw)\n\t# if raw.match(/^[\\w\\$\\.\\-]+$/)\n\t#\treturn raw\n\n\tif raw[0] == '>'\n\t\tstate[1] = '$S6\\t'\n\t\traw = raw.slice(1)\n\n\tfor part in raw.split(/(?=[\\/\\&\\=\\*])/)\n\t\tif part[0] == '&'\n\t\t\tif part[1] == '-' or part[1] == '_'\n\t\t\t\tstate[2] = '$S3' + part.slice(1)\n\t\t\telse\n\t\t\t\tstate[2] = '$S3-' + part.slice(1)\n\n\t\telif part[0] == '+'\n\t\t\tstate[3] = '$S4-' + part.slice(1)\n\t\telif part[0] == '='\n\t\t\tstate[3] = part.slice(1)\n\t\telif part[0] == '/'\n\t\t\tstate[4] = part.slice(1)\n\t\telif part[0] == '*'\n\t\t\tstate[5] = part.slice(1)\n\t\telse\n\t\t\tstate[0] = part\n\treturn state.join('.')\n\ndef rewrite-token raw\n\tlet orig = raw\n\traw = raw.replace('$/','$S5')\n\traw = raw.replace('$F','$S4')\n\traw = raw.replace('$&','$S3')\n\traw = raw.replace('$I','$S2')\n\traw = raw.replace('$T','$S2')\n\t\n\t# if orig != raw\n\t#\tconsole.log 'rewriting token',orig,raw\n\treturn raw\n\ndef rewrite-actions actions,add\n\tif typeof actions == 'string' # and parts.indexOf('$') >= 0\n\t\tactions = {token: actions}\n\n\tif actions and actions.token != undefined\n\t\tactions.token = rewrite-token(actions.token)\n\n\t\tif typeof add == 'string'\n\t\t\tactions.next = add\n\t\telif add\n\t\t\tObject.assign(actions,add)\t\t\n\n\t\tif actions.next\n\t\t\tactions.next = rewrite-state(actions.next)\n\t\tif actions.switchTo\n\t\t\tactions.switchTo = rewrite-state(actions.switchTo)\n\n\telif actions and actions.cases\n\t\t# console.log 'found cases to transform!!'\n\t\tlet cases = {}\n\t\tfor own k,v of actions.cases\n\t\t\tlet newkey = rewrite-token(k)\n\t\t\tcases[newkey] = rewrite-actions(v)\n\t\tactions.cases = cases\n\n\telif actions isa Array\n\t\tlet result = []\n\t\tlet curr = null\n\t\tfor action,i in actions\n\t\t\tif action[0] == '@' and i == actions.length - 1 and curr\n\t\t\t\taction = {next: action}\n\n\t\t\tif typeof action == 'object'\n\t\t\t\tif action.token != undefined or action.cases\n\t\t\t\t\tresult.push(curr = Object.assign({},action))\n\t\t\t\telse\n\t\t\t\t\tObject.assign(curr,action)\n\t\t\telif typeof action == 'string'\n\t\t\t\tresult.push(curr = {token: rewrite-token(action)})\n\t\tactions = result\n\n\tif actions isa Array\n\t\tfor action,i in actions\n\t\t\tif action.token && action.token.indexOf('$$') >= 0\n\t\t\t\taction.token = action.token.replace('$$','$' + (i + 1))\n\t\t\tif action.next\n\t\t\t\taction.next = rewrite-state(action.next)\n\t\t\tif action.switchTo\n\t\t\t\taction.switchTo = rewrite-state(action.switchTo)\n\n\treturn actions\n\ndef rewrite-rule owner, key\n\tlet rule = owner[key]\n\t\n\nfor own key,rules of states\n\tlet i = 0\n\twhile i < rules.length\n\t\tlet rule = rules[i]\n\t\tif rule[0] isa Array\n\t\t\trules.splice(i,1,...rule)\n\t\t\tcontinue\n\t\telif typeof rule == 'string'\n\t\t\trules[i] = {include: rule}\n\t\telif rule[1] isa Array\n\t\t\trule[1] = rewrite-actions(rule[1])\n\t\telif rule isa Array\n\t\t\trule.splice(1,2,rewrite-actions(rule[1],rule[2]))\n\t\ti++\n\nexport const grammar = {\n\tdefaultToken: 'invalid',\n\tignoreCase: false,\n\ttokenPostfix: '',\n\tbrackets: [\n\t\t{ open: '{', close: '}', token: 'bracket.curly' },\n\t\t{ open: '[', close: ']', token: 'bracket.square' },\n\t\t{ open: '(', close: ')', token: 'bracket.parenthesis' }\n\t],\n\tkeywords: [\n\t\t'def', 'and', 'or', 'is', 'isnt', 'not', 'on', 'yes', '@', 'no', 'off',\n\t\t'true', 'false', 'null', 'this', 'self','as'\n\t\t'new', 'delete', 'typeof', 'in', 'instanceof',\n\t\t'return', 'throw', 'break', 'continue', 'debugger',\n\t\t'if', 'elif', 'else', 'switch', 'for', 'while', 'do', 'try', 'catch', 'finally',\n\t\t'class', 'extends', 'super',\n\t\t'undefined', 'then', 'unless', 'until', 'loop', 'of', 'by', 'when',\n\t\t'tag', 'prop', 'attr', 'export', 'import', 'extend',\n\t\t'var', 'let', 'const', 'require', 'isa', 'await'\n\t],\n\tboolean: ['true','false','yes','no','undefined','null']\n\toperators: [\n\t\t'=', '!', '~', '?', ':','!!','??',\n\t\t'&', '|', '^', '%', '<<','!&',\n\t\t'>>', '>>>', '+=', '-=', '*=', '/=', '&=', '|=', '?=', '??=',\n\t\t'^=', '%=', '~=', '<<=', '>>=', '>>>=','..','...','||=',`&&=`,'**=','**',\n\t\t'|=?','~=?','^=?','=?','and','or'\n\t],\n\tassignments: [\n\t\t'=','|=?','~=?','^=?','=?',\n\t\t'^=', '%=', '~=', '<<=', '>>=', '>>>=',\n\t\t'||=',`&&=`,'?=','??=',\n\t\t'+=', '-=', '*=', '/=', '&=', '|=','**='\n\t]\n\tlogic: [\n\t\t'>', '<', '==', '<=', '>=', '!=', '&&', '||','===','!=='\n\t],\n\tranges: ['..','...']\n\tspread: ['...']\n\tdot: ['.']\n\taccess: ['.','..']\n\tmath: ['+', '-', '*', '/', '++', '--']\n\n\tunspaced_ops: regexify('... . .. + * ++ --')\n\t# comment: /#(\\s.*)?(\\n|$)/\n\tcomment: /#(\\s.*)?(?=\\n|$)/\n\t# we include these common regular expressions\n\tsymbols: /[=><!~?&%|+\\-*\\^,]+/,\n\tescapes: /\\\\(?:[abfnrtv\\\\\"'$]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n\tpostaccess: /(:(?=\\w))?/\n\tivar: /\\@[a-zA-Z_]\\w*/\n\tB: /(?=\\s|$)/\n\tbr:/[\\r\\n]+/\n\tconstant: /[A-Z][\\w\\$]*(?:\\-+[\\w\\$]+)*/\n\tid: /[A-Za-z_\\$][\\w\\$]*(?:\\-+[\\w\\$]+)*\\??/\n\tplainid: /[A-Za-z_\\$][\\w\\$]*(?:\\-+[\\w\\$]+)*\\??/\n\tfieldid: /[\\@\\#]*@plainid/ \n\tpropid: /[\\@\\#]*@plainid/\n\tdefid: /[\\@\\#]*@plainid/\n\tdecid: /\\@@plainid/\n\tsymid: /\\#+@plainid/\n\tenvvar: /\\$+[\\w\\-]+\\$/\n\tsymref: /\\#+@plainid/\n\t\n\toptid: /(?:@id)?/\n\t# (?:\\-+[\\w\\$]+)*\\??\n\tesmIdentifier: /[A-Za-z_\\$\\@][\\w\\$]*(?:\\-+[\\w\\$]+)*\\??/\n\tpropertyPath: /(?:[A-Za-z_\\$][A-Za-z\\d\\-\\_\\$]*\\.)?(?:[A-Za-z_\\$][A-Za-z\\d\\-\\_\\$]*)/\n\ttagNameIdentifier: /(?:[\\w\\-]+\\:)?\\w+(?:\\-\\w+)*/\n\tvariable: /[\\w\\$]+(?:-[\\w\\$]*)*\\??/\n\tvarKeyword: /var|let|const/\n\ttagIdentifier: /-*[a-zA-Z][\\w\\-]*/\n\timplicitCall: /(?!\\s(?:and|or|is|isa)\\s)(?=\\s[\\w\\'\\\"\\/\\[\\{])/ # not true for or etc\n\tcssModifier: /(?:\\@+[\\<\\>\\!]?[\\w\\-]+\\+?|\\.+@id\\-?)/\n\tcssPropertyPath: /[\\@\\.]*[\\w\\-\\$]+(?:[\\@\\.]+[\\w\\-\\$]+)*/\n\tcssPropertyKey: /[\\@\\.]*[\\w\\-\\$]+(?:[\\@\\.]+[\\w\\-\\$]+)*(?:\\s*\\:)/\n\t\n\tcssVariable: /(?:--|\\$)[\\w\\-\\$]+/\n\tcssPropertyName: /[\\w\\-\\$]+/\n\t# cssModifier: /\\@[\\w\\-\\$]+/\n\tcssPropertyKey2: /(?:@cssPropertyName(?:@cssModifier)*|@cssModifier+)(?:\\s*\\:)/\n\tcssUpModifier: /\\.\\.[\\w\\-\\$]+/\n\tcssIsModifier: /\\.[\\w\\-\\$]+/\n\t\n\tregEx: /\\/(?!\\/\\/)(?:[^\\/\\\\]|\\\\.)*\\/[igm]*/,\n\tregexpctl: /[(){}\\[\\]\\$\\^|\\-*+?\\.]/,\n\tregexpesc: /\\\\(?:[bBdDfnrstvwWn0\\\\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,\n\t# The main tokenizer for our languages\n\ttokenizer: states\n}", "import {asset} from 'imba';\nexport default asset({\"input\":\"entry:embed/src/monaco/svelte/worker.imba?as=webworker\"})", "let STOP_WHEN_IDLE_FOR = 2 * 60 * 1000 # 2min\nexport class WorkerManager\n\n\tconstructor path, defaults\n\t\tpath = path\n\t\t#version = null\n\t\tdefaults = defaults\n\t\tworker = null\n\t\tclient = null\n\t\tidleCheckInterval = setInterval(&,30 * 1000) do checkIfIdle!\n\t\tlastUsedTime = 0\n\t\toptions = {\n\t\t\tdefaults: defaults\n\t\t\tcompilerPath: null\n\t\t}\n\t\t\n\n\tdef stopWorker\n\t\tif worker\n\t\t\tworker.dispose!\n\t\t\tworker = null\n\t\tclient = null\n\n\tdef dispose\n\t\tclearInterval(idleCheckInterval)\n\t\tstopWorker!\n\n\t# should be disabled\n\tdef checkIfIdle\n\t\treturn unless worker\n\t\tlet elapsed = Date.now! - lastUsedTime\n\t\tif elapsed > STOP_WHEN_IDLE_FOR\n\t\t\tstopWorker!\n\n\tdef getClient\n\t\t# console.log \"worker getClient!\"\n\t\tlastUsedTime = Date.now!\n\t\t\n\t\tunless client\n\t\t\tworker = global.monaco.editor.createWebWorker(\n\t\t\t\tmoduleId: path\n\t\t\t\tlabel: 'svelte'\n\t\t\t\tcreateData: options\n\t\t\t)\n\t\t\tclient = global.SVELTE_WORKER = worker.getProxy!\n\n\t\treturn client\n\n\tdef getLanguageServiceWorker ...resources\n\t\tlet client = await getClient!\n\t\tworker.withSyncedResources(resources).then do client\n\t\t\n\tset version value\n\t\tlet prev = #version\n\t\tif #version =? value\n\t\t\tlet src = value ? \"/bundler-compiler/svelte/{value}\" : null\n\t\t\toptions.compilerPath = src\n\t\t\tstopWorker!\n\t\n\tget version\n\t\t#version\n\nexport def setupMode modeId,monaco\n\tlet asset = import.webworker('./worker')\n\tlet client = new WorkerManager(asset.url, {})\n\tlet worker = client.getLanguageServiceWorker.bind(client)\n\tworker.manager = client\n\n\tmonaco.compileSvelte = do(code,opts = {}, version = null)\n\t\tlet o = Object.assign({},opts)\n\t\tclient.version = version\n\t\tlet worker = await client.getClient!\n\n\t\treturn worker.compile(code,o)\n\n"], "mappings": "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,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,MAErB,iBAAkB,CACjB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,OAIT,GAAW,CACvB,aAAc,GACd,aAAc,OACd,WAAY,GAEZ,SAAU,CACT,CAAE,KAAM,IAAK,MAAO,IAAK,MAAO,oBAChC,CAAE,KAAM,IAAK,MAAO,IAAK,MAAO,0BAGjC,SAAU,CAET,QACA,WACA,SACA,MACA,MACA,QACA,MACA,WACA,QACA,SACA,UACA,MACA,MACA,MACA,KACA,MACA,YACA,KACA,SACA,gBACA,gBACA,MACA,SACA,SACA,QACA,UACA,MACA,aACA,OACA,QACA,SACA,OACA,KACA,UACA,WACA,OACA,OACA,UACA,OACA,YACA,mBACA,cACA,QACA,aACA,QACA,YACA,WACA,UACA,YACA,SACA,SACA,UACA,WACA,UACA,aACA,aACA,cACA,WACA,gBACA,WACA,UACA,gBACA,QACA,SACA,QACA,UACA,eACA,eACA,oBACA,eACA,SACA,WACA,OACA,MACA,OACA,aACA,MACA,UACA,UACA,UACA,aACA,WACA,SACA,OACA,OACA,WACA,aACA,SACA,cACA,aACA,OACA,WACA,cACA,KACA,SACA,SACA,OACA,OACA,OACA,OACA,MACA,WACA,SACA,SACA,SACA,YACA,UACA,YACA,OACA,UACA,SACA,OACA,UACA,WACA,UACA,OACA,QACA,QACA,OACA,aACA,SACA,QACA,QACA,YACA,MACA,UACA,UACA,QACA,WACA,gBACA,OACA,OACA,WACA,YACA,MACA,OACA,SACA,KACA,OACA,QACA,QACA,SACA,SACA,WACA,OACA,WACA,cACA,kBACA,KACA,SACA,YACA,KACA,UACA,QACA,UACA,YACA,YACA,QACA,QACA,cACA,SACA,UACA,MACA,UACA,YACA,WACA,OACA,KACA,SACA,YACA,OACA,MACA,OACA,WACA,OACA,UACA,OACA,QACA,OACA,QACA,SACA,OACA,QACA,QACA,QACA,eACA,MACA,QACA,MACA,SACA,SACA,QACA,QACA,WACA,UACA,QACA,OACA,KACA,UACA,eACA,OACA,MACA,UACA,UACA,OACA,SACA,QACA,UACA,eACA,KACA,MACA,SACA,UACA,KACA,OACA,OACA,iBACA,YACA,aACA,UACA,SACA,KACA,QACA,SACA,QACA,SACA,OACA,WACA,MACA,UACA,YACA,SACA,UACA,QACA,OACA,WACA,SACA,YACA,YACA,UACA,WACA,UACA,QACA,QACA,aACA,OACA,YACA,SACA,QACA,QACA,YACA,QACA,OACA,WACA,OACA,cACA,YACA,aACA,SACA,UACA,WACA,UACA,SACA,UACA,cACA,UACA,WACA,SACA,YACA,SACA,SACA,QACA,WACA,MACA,WACA,aACA,OACA,OACA,OACA,YACA,SACA,SACA,SACA,UACA,gBACA,SACA,yBACA,iCACA,0BACA,UACA,eACA,MACA,UACA,WACA,OACA,WACA,OACA,QACA,MACA,QACA,UACA,WACA,WACA,aACA,aACA,YACA,MACA,cACA,QACA,cACA,OACA,YACA,WACA,OACA,OACA,OACA,YACA,gBACA,kBACA,KACA,MACA,WACA,OACA,cACA,YACA,cACA,UACA,OACA,OACA,WACA,cACA,UACA,YACA,QACA,SACA,UACA,UACA,SACA,aACA,QACA,QACA,MACA,OACA,QACA,SACA,QACA,SACA,UACA,UACA,OACA,UACA,UACA,OACA,WACA,QACA,QACA,SACA,OACA,eACA,UACA,OACA,QACA,YACA,OACA,QAED,UAAW,CAEV,MACA,MACA,MACA,UACA,SACA,KACA,OACA,MACA,KACA,OAEA,SACA,YACA,QAEA,QACA,QACA,OACA,QACA,OACA,OACA,QACA,QAEA,WACA,WACA,KACA,OAEA,QACA,UAEA,WAED,iBAAkB,CAEjB,MACA,eACA,QACA,YACA,WACA,cACA,MACA,MACA,MACA,QACA,SACA,MACA,OAEA,YACA,cACA,MACA,aACA,OACA,kBACA,kBACA,eAEA,UACA,oBACA,mBAEA,6BAEA,OACA,UACA,QACA,WACA,cACA,YAEA,aACA,kBACA,eACA,UACA,mBACA,mBACA,gBACA,eACA,0BACA,uBACA,sBACA,mBACA,gBACA,eACA,sBACA,YACA,kBACA,WACA,SACA,WACA,gBACA,aACA,iBACA,qBACA,wBAEA,gBAEA,aACA,gBACA,aACA,aACA,WACA,uBAEA,oBACA,UACA,WACA,gBACA,WACA,WACA,qBACA,oBACA,0BACA,MACA,UACA,UACA,aACA,SACA,QACA,yBACA,eACA,cACA,oBACA,iBACA,gBACA,mBACA,OAEA,SACA,WACA,MACA,SAEA,MACA,OACA,OACA,OACA,OACA,UACA,MACA,MACA,UACA,MACA,QACA,MACA,QACA,KACA,QACA,UACA,OACA,QACA,OACA,MACA,OACA,SACA,MAEA,WACA,eACA,eACA,mBACA,aACA,WACA,iBACA,wBACA,qBACA,QACA,UACA,UACA,YACA,YACA,eACA,iBACA,oBACA,eACA,0BACA,0BACA,YACA,oBACA,gBACA,oBACA,YACA,cACA,qBACA,iBACA,mBACA,mBACA,YACA,YACA,cACA,iBACA,iBACA,aACA,UACA,YACA,eAEA,aACA,QACA,OACA,aAEA,uBAEA,iBACA,YACA,aACA,UAEA,cACA,iBACA,eACA,eACA,oBACA,YACA,gBACA,mBACA,gBACA,iBACA,cACA,aACA,aACA,eACA,kBACA,WACA,aACA,YACA,cACA,cACA,OACA,UACA,YAEA,QACA,OACA,YACA,SACA,aACA,SACA,OACA,MACA,QACA,QACA,QACA,WACA,YACA,UACA,YACA,UACA,QACA,QACA,UACA,QACA,MACA,QACA,YACA,UACA,QAEA,kBACA,WACA,qBACA,eACA,qBACA,aACA,eACA,gBACA,kBACA,iBACA,cACA,gBACA,cACA,qCACA,UACA,YACA,SACA,YACA,wBACA,QACA,kB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pB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,MAErB,iBAAkB,CACjB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,MAErB,QAAS,CACR,QAAS,CACR,MAAO,GAAI,QAAO,sDAClB,IAAK,GAAI,QAAO,2DAKN,GAAW,CACvB,aAAc,GACd,aAAc,MAEd,SAAU,CACT,KACA,MACA,QACA,QACA,WACA,KACA,OACA,QACA,MACA,MACA,KACA,KACA,MACA,YACA,KACA,MACA,OACA,SACA,UACA,SACA,QACA,OACA,QACA,OACA,MACA,YACA,MACA,MACA,OACA,QACA,KACA,QACA,cACA,WACA,UACA,QACA,OACA,UACA,MACA,SACA,OACA,QACA,WACA,WACA,MACA,WACA,QACA,SACA,WACA,aACA,YACA,QACA,cACA,OACA,OACA,SACA,WACA,QACA,QACA,SACA,QACA,WACA,WACA,WACA,OACA,WACA,MACA,WACA,UACA,YACA,SACA,UACA,SACA,UACA,UACA,SACA,QACA,MAGD,UAAW,CACV,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,MACA,MACA,IACA,IACA,KACA,KACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,KACA,IACA,IACA,IACA,KAID,QAAS,wBACT,QAAS,wEACT,OAAQ,cACR,YAAa,oBACb,aAAc,oBACd,UAAW,iCAGX,UAAW,CACV,KAAM,CAEL,CAAC,eAAgB,mBAGjB,CACC,mBACA,CACC,MAAO,CACN,YAAa,CAAE,MAAO,cACtB,WAAY,gBAMf,CAAE,QAAS,eAGX,CAAC,aAAc,aACf,CAAC,mBAAoB,aACrB,CACC,WACA,CACC,MAAO,CACN,aAAc,YACd,WAAY,MAMf,CAAC,yBAA0B,cAG3B,CAAC,yCAA0C,gBAC3C,CAAC,oDAAqD,gBACtD,CAAC,yBAA0B,cAC3B,CAAC,uBAAwB,gBACzB,CAAC,4BAA6B,iBAC9B,CAAC,kBAAmB,gBACpB,CAAC,iBAAkB,UAGnB,CAAC,QAAS,aAGV,CAAC,kBAAmB,kBACpB,CAAC,MAAO,SAAU,gBAClB,CAAC,IAAK,SAAU,WAGhB,CAAC,WAAY,UACb,CAAC,mBAAoB,CAAC,SAAU,gBAAiB,WACjD,CAAC,IAAK,mBAGP,WAAY,CACX,CAAC,aAAc,IACf,CAAC,eAAgB,cAAe,YAChC,CAAC,OAAQ,UAAW,YACpB,CAAC,UAAW,YAGb,QAAS,CACR,CAAC,UAAW,WACZ,CAAC,OAAQ,UAAW,YACpB,CAAC,OAAQ,UAAW,QACpB,CAAC,QAAS,YAGX,QAAS,CACR,CAAC,UAAW,eACZ,CAAC,OAAQ,cAAe,SACxB,CAAC,OAAQ,uBACT,CAAC,OAAQ,cAAe,QACxB,CAAC,QAAS,gBAGX,OAAQ,CACP,CAAC,UAAW,UACZ,CAAC,WAAY,iBACb,CAAC,MAAO,yBACR,CAAC,IAAK,SAAU,SAGjB,YAAa,CACZ,CAAC,UAAW,UACZ,CAAC,WAAY,iBACb,CAAC,MAAO,yBACR,CAAC,MAAO,SAAU,QAClB,CAAC,IAAK,eC5QT,0DAKO,GAAM,IAAM,CAClB,SAAU,CACT,YAAa,KACb,aAAc,CAAC,KAAM,OAEtB,SAAU,CACT,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,MAEP,iBAAkB,CACjB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,MAErB,iBAAkB,CACjB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,OAIT,GAAW,CACvB,aAAc,GACd,aAAc,SAGd,WAAY,kBAEZ,WAAY,CACX,iBACA,YACA,gBACA,iBACA,YACA,iBACA,qBACA,aACA,aACA,YACA,qBAEA,eACA,oBACA,gBACA,aACA,cACA,cACA,kBACA,qBACA,mBACA,uBACA,YACA,UACA,eACA,aACA,UACA,QACA,gBACA,WACA,YACA,QACA,eACA,kBACA,mBACA,kCACA,iBACA,YACA,aACA,WACA,oBACA,4BAED,gBAAiB,CAAC,OAAQ,SAAU,WAAY,cAAe,WAC/D,SAAU,CACT,aACA,gBACA,UACA,aACA,QACA,UACA,SACA,SACA,QACA,UACA,eACA,YACA,YACA,MACA,gBACA,WACA,QACA,YACA,kBACA,WAEA,MACA,WACA,OACA,OAEA,QACA,KACA,aACA,iBACA,gBACA,QACA,QACA,QACA,OACA,QACA,QACA,WACA,cACA,UACA,QACA,SACA,SACA,KACA,UACA,cACA,OACA,OACA,YACA,cACA,QACA,cACA,QACA,MACA,OACA,MACA,QACA,aACA,KACA,SACA,KACA,WACA,QACA,OACA,QACA,WACA,KACA,WACA,OACA,OACA,MACA,YACA,WACA,MACA,OACA,cACA,cACA,OACA,WACA,WACA,WACA,UACA,aACA,kBACA,SACA,UACA,WACA,SACA,SACA,WACA,WACA,SACA,QACA,OACA,OACA,MACA,OACA,SACA,SACA,YACA,QACA,SACA,QACA,SACA,OACA,MACA,YACA,UACA,SACA,MACA,OACA,QACA,QACA,UAEA,cACA,WAGD,QAAS,oCAGT,cACC,oPACD,YAAa,qFACb,UAAW,qDAGX,QAAS,wEAET,UAAW,CACV,KAAM,CACL,CAAE,QAAS,eACX,CAAE,QAAS,YACX,CAAE,QAAS,cACX,CAAE,QAAS,YACX,CAAE,QAAS,YACX,CAAE,QAAS,kBACX,CAAE,QAAS,YAGZ,WAAY,CACX,CAAC,MAAO,SACR,CAAC,MAAO,eAAgB,qBAGzB,gBAAiB,CAChB,CAAC,QAAS,UACV,CAAC,MAAO,UACR,CAAC,MAAO,eAAgB,WACxB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AAO,WAAY,KAAM,SACnC,CAAC,KAAM,cAAe,QACtB,CAAC,SAAU,cAAe,QAC1B,CAAC,QAAS,eACV,CAAC,IAAK,gBAGP,qBAAsB,CACrB,CAAC,UAAW,cACZ,CAAC,WAAY,qBACb,CAAC,MAAO,6BACR,CAAC,IAAK,aAAc,SAGrB,qBAAsB,CACrB,CAAC,UAAW,cACZ,CAAC,WAAY,qBACb,CAAC,MAAO,6BACR,CAAC,IAAK,aAAc,UAItB,YAAa,CACZ,WACA,MACA,QACA,KACA,QACA,WACA,OACA,QACA,YACA,QACA,QACA,QACA,WACA,UACA,UACA,KACA,OACA,SACA,aACA,SACA,aACA,QACA,YACA,WACA,UACA,QACA,QACA,MACA,UACA,WACA,SACA,OACA,KACA,aACA,YACA,aACA,YACA,YACA,MACA,OACA,SACA,eACA,KACA,UACA,YACA,SACA,WACA,SACA,SACA,QACA,QACA,MACA,OACA,MACA,MACA,QACA,MACA,MACA,OACA,QACA,OACA,OACA,UACA,eACA,QACA,OACA,UACA,eACA,SACA,QACA,QACA,QACA,eAGD,wBAAyB,CACxB,YACA,UACA,WACA,WACA,gBACA,aACA,eACA,aAGD,uBAAwB,CACvB,WACA,WACA,QACA,SACA,UACA,YACA,YACA,QACA,WACA,gBACA,sBACA,wBACA,QACA,SAGD,QAAS,2ECjhBV,0DAAO,GAAM,IAAO,CAClB,SAAU,CACR,YAAa,KACb,aAAc,CAAC,KAAM,OAEvB,SAAU,CACR,CAAC,IAAK,KACN,CAAC,IAAK,MAER,iBAAkB,CAChB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,IAAK,MAAO,CAAC,aAIxB,GAAW,CACtB,SAAU,CACR,YAAa,KACb,aAAc,CAAC,KAAM,OAEvB,iBAAkB,CAChB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,IAAK,MAAO,CAAC,YAGnC,UAAW,CACT,KAAM,CACJ,CAAE,QAAS,eACX,CAAE,QAAS,YACX,CAAC,IAAK,YAAa,SACnB,CAAC,IAAK,YAAa,QACnB,CAAC,KAAM,YAAa,SACpB,CAAC,KAAM,YAAa,QACpB,CAAC,WAAY,aACb,CAAC,IAAK,aACN,CAAC,gBAAiB,UAClB,CAAC,oBAAqB,YAExB,WAAY,CACV,CAAC,MAAO,UAEV,QAAS,CACP,CAAC,IAAK,CAAE,MAAO,SAAU,KAAM,aAEjC,OAAQ,CACN,CAAC,UAAW,UACZ,CAAC,qCAAsC,iBACvC,CAAC,IAAK,CAAE,MAAO,SAAU,KAAM,UAGjC,OAAQ,CACN,CAAC,IAAK,CAAE,MAAO,MAAO,KAAM,SAC5B,CAAC,WAAY,aACb,CAAC,IAAK,aACN,CAAC,gBAAiB,UAClB,CAAC,oBAAqB,YAExB,IAAK,CACH,CAAC,UAAW,OACZ,CAAC,qCAAsC,cACvC,CAAC,IAAK,CAAE,MAAO,MAAO,KAAM,SAC5B,CAAC,IAAK,CAAE,MAAO,YAAa,KAAM,OAAQ,aAAc,cC/D9D,0DAMO,GAAM,IAAM,CAClB,SAAU,CACT,YAAa,KACb,aAAc,CAAC,KAAM,OAEtB,SAAU,CACT,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,MAEP,iBAAkB,CACjB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,IAAK,MAAO,CAAC,SAAU,YAC3C,CAAE,KAAM,IAAK,MAAO,IAAK,MAAO,CAAC,YAElC,iBAAkB,CACjB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,MAErB,QAAS,CACR,QAAS,CACR,MAAO,GAAI,QAAO,6BAClB,IAAK,GAAI,QAAO,mCAKN,GAAW,CACvB,aAAc,GACd,aAAc,OAEd,SAAU,CACT,CAAE,MAAO,kBAAmB,KAAM,IAAK,MAAO,KAC9C,CAAE,MAAO,wBAAyB,KAAM,IAAK,MAAO,KACpD,CAAE,MAAO,mBAAoB,KAAM,IAAK,MAAO,KAC/C,CAAE,MAAO,kBAAmB,KAAM,IAAK,MAAO,MAG/C,SAAU,CACT,WACA,MACA,QACA,OACA,OACA,QACA,OACA,QACA,OACA,QACA,QACA,YACA,aACA,WACA,MACA,WACA,UACA,WACA,SACA,KACA,SACA,eACA,OACA,OACA,OACA,QACA,WACA,SACA,SACA,QACA,QACA,UACA,QACA,MACA,SACA,QACA,UACA,OACA,KACA,KACA,WACA,SACA,MACA,YACA,eACA,WACA,UACA,OACA,UACA,YACA,MACA,WACA,UACA,YACA,WACA,WACA,UACA,SACA,UACA,UACA,WACA,YACA,SACA,MACA,WACA,mBACA,WACA,SACA,YACA,SACA,QACA,SACA,SACA,SACA,gBACA,cACA,SACA,SACA,WACA,OACA,eACA,QACA,cACA,OACA,MACA,UACA,SACA,WACA,QACA,WACA,QACA,UACA,OACA,WACA,UACA,QACA,QAEA,OACA,SACA,SACA,YACA,YACA,aACA,iBACA,UACA,wBACA,UACA,sBACA,WACA,uBACA,OAEA,aACA,YACA,QACA,WACA,UACA,QACA,oBACA,UACA,YACA,aACA,aACA,UACA,WACA,aACA,YACA,gBACA,OACA,SACA,eACA,cACA,kBACA,WACA,WACA,UACA,UACA,UACA,SACA,cACA,UACA,SACA,UACA,UACA,SACA,UACA,UACA,SACA,UACA,UACA,QACA,yBACA,YACA,SACA,SACA,aACA,eACA,WACA,QACA,WACA,aACA,UACA,UACA,UACA,aACA,WACA,WACA,uBACA,YACA,UACA,aACA,QACA,aACA,WACA,cACA,WACA,WACA,UACA,wBACA,QACA,aAGD,UAAW,CACV,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,MACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,QAID,QAAS,wBACT,QAAS,yEACT,cAAe,sCACf,YAAa,UACb,SAAU,W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QACA,SACA,WACA,UACA,SACA,KACA,QACA,QACA,WACA,WACA,OACA,OACA,OACA,SACA,SACA,UACA,UACA,SAGD,aAAc,CACb,OACA,MACA,MACA,OACA,MACA,MACA,OACA,MACA,OACA,QACA,OACA,OACA,KACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,MACA,SACA,SACA,UACA,WACA,SACA,OACA,SACA,MACA,SACA,SACA,UACA,UACA,UACA,WACA,QACA,SACA,SACA,UACA,SACA,YACA,UACA,SACA,aACA,cACA,WACA,YACA,QACA,QACA,QACA,QACA,SACA,WAGD,UAAW,CAAC,OAAQ,QAAS,OAAQ,OAAQ,OAAQ,QAAS,KAAM,OAEpE,iBAAkB,CACjB,eACA,eACA,WACA,MACA,WACA,WACA,WACA,SACA,SACA,SACA,SACA,YACA,eACA,WACA,UACA,WACA,WACA,SACA,WACA,UACA,SACA,UACA,UACA,UACA,UACA,UACA,UACA,SACA,UACA,WACA,UACA,UACA,UACA,UACA,UACA,OACA,OACA,OACA,OACA,eACA,gBACA,iBAGD,cAAe,CACd,UACA,SACA,WACA,SACA,eACA,eACA,SACA,YAGD,UAAW,CACV,IACA,KACA,IACA,KACA,IACA,KACA,KACA,IACA,KACA,IACA,KACA,IACA,KACA,KACA,IACA,KACA,MACA,IACA,KACA,IACA,IACA,KACA,MACA,IACA,KACA,IACA,KACA,KACA,IACA,KACA,KACA,MACA,IACA,IACA,KACA,IACA,KACA,KACA,IACA,IACA,KAGD,QAAS,uCACT,WAAY,MACZ,QAAS,2CACT,YAAa,4BACb,cAAe,WAEf,UAAW,CACV,KAAM,CAEL,CAAC,SAAU,CAAE,MAAO,eAAgB,QAAS,QAAS,KAAM,kBAC5D,CACC,yCACA,CACC,MAAO,CACN,gBAAiB,eACjB,YAAa,UACb,oBAAqB,UACrB,iBAAkB,UAClB,aAAc,UACd,WAAY,gBAKf,CAAC,KAAM,cAEP,CAAC,mCAAoC,cAErC,CAAC,kBAAmB,sBAEpB,CAAC,IAAK,CAAE,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ACV,CAAC,IAAK,CAAE,MAAO,SAAU,KAAM,SAC/B,CAAC,UAAW,UACZ,CAAC,IAAK,WAGP,eAAgB,CACf,CAAC,QAAS,UACV,CAAC,IAAM,CAAE,MAAO,SAAU,KAAM,SAChC,CAAC,UAAW,UACZ,CAAC,IAAK,eC/LT,cAIA,GAAQ,KAAO,CACd,SAAU,CACT,YAAa,IACb,aAAc,CAAC,MAAU,QAE1B,SAAU,CACT,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,IAAK,MAEP,iBAAkB,CACjB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,IAAK,MAAO,CAAC,WACjC,CAAE,KAAM,IAAM,MAAO,IAAM,MAAO,CAAC,SAAU,aAE9C,iBAAkB,CACjB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAK,MAAO,KACpB,CAAE,KAAM,IAAM,MAAO,OAIvB,GAAQ,SAAW,CAClB,aAAc,GACd,aAAc,UAEd,SAAU,CACT,MACA,KACA,SACA,QACA,QACA,WACA,MACA,MACA,OACA,OACA,SACA,OACA,UACA,MACA,OACA,SACA,KACA,SACA,KACA,KACA,SACA,OACA,MACA,KACA,OACA,QACA,QACA,SACA,OACA,MACA,QACA,OACA,QAEA,MACA,QACA,OACA,UACA,MAEA,MACA,MACA,MACA,QACA,aACA,MACA,OACA,SACA,YACA,WACA,MACA,cACA,MACA,SACA,UACA,UACA,UACA,OACA,MACA,SACA,YACA,OACA,WACA,OACA,SACA,SACA,YACA,UACA,UACA,UACA,OACA,OACA,KACA,QACA,SACA,aACA,aACA,OACA,MACA,SACA,OACA,MACA,MACA,aACA,MACA,OACA,SACA,MACA,OACA,MACA,MACA,QACA,WACA,WACA,QACA,YACA,SACA,SACA,OACA,WACA,QACA,MACA,UACA,QACA,SACA,eACA,MACA,MACA,QACA,QACA,OACA,SACA,UACA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", "names": [] }