{"version":3,"sources":["jsdelivr-header.js","/npm/@viewjs/view@3.1.2/dist/viewjs.view.js"],"names":[],"mappings":"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","file":"/npm/@viewjs/view@3.1.2/dist/viewjs.view.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@viewjs/view@3.1.2/dist/viewjs.view.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@viewjs/utils')) :\n    typeof define === 'function' && define.amd ? define(['exports', '@viewjs/utils'], factory) :\n    (factory((global.viewjs = global.viewjs || {}, global.viewjs.view = {}),global.viewjs.utils));\n}(this, (function (exports,utils) { 'use strict';\n\n    function __extends(d, b) {\r\n        for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\r\n        function __() { this.constructor = d; }\r\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n    }\n\n    function isRenderer(a) {\n        return a &&\n            utils.isObjectLike(a) &&\n            utils.isFunction(a.mount) &&\n            utils.isFunction(a.unmount);\n    }\n\n    function attributes(attrs) {\n        return function (target) {\n            Object.assign(target.prototype, attrs);\n        };\n    }\n    function event(eventName, selector, options) {\n        return function (target, property, desc) {\n            var _a;\n            if (!desc || !utils.isFunction(desc.value)) {\n                throw new TypeError('must be a function');\n            }\n            if (!utils.isString(selector)) {\n                options = selector;\n                selector = options.selector;\n            }\n            var call = utils.isString(selector) ? (options || {}) : selector;\n            call.handler = property;\n            var key = selector ? eventName + \" \" + selector : eventName;\n            var events = target.events;\n            if (events && utils.has(events, key)) {\n                var old = events[key];\n                if (!Array.isArray(old))\n                    old = [old];\n                old.push(call);\n                events[key] = old;\n            }\n            else {\n                events = Object.assign(events || {}, (_a = {},\n                    _a[key] = call,\n                    _a));\n            }\n            target.events = events;\n        };\n    }\n    (function (event) {\n        function click(selector, condition) {\n            return event('click', { selector: selector, condition: condition });\n        }\n        event.click = click;\n        function change(selector, condition) {\n            return event('change', { selector: selector, condition: condition });\n        }\n        event.change = change;\n    })(event || (event = {}));\n\n    var AbstractView = /** @class */ (function (_super) {\n        __extends(AbstractView, _super);\n        function AbstractView() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        Object.defineProperty(AbstractView.prototype, \"el\", {\n            get: function () { return this.getElement(); },\n            set: function (el) {\n                this.setElement(el);\n            },\n            enumerable: true,\n            configurable: true\n        });\n        AbstractView.prototype.render = function () { return this; };\n        return AbstractView;\n    }(utils.Base));\n    var Controller = /** @class */ (function (_super) {\n        __extends(Controller, _super);\n        function Controller() {\n            return _super !== null && _super.apply(this, arguments) || this;\n        }\n        Controller.prototype.setElement = function (el) {\n            this._el = el;\n            return this;\n        };\n        Controller.prototype.getElement = function () {\n            return this._el;\n        };\n        return Controller;\n    }(AbstractView));\n\n    var debug = utils.debug(\"View\");\n    var unbubblebles = 'focus blur change'.split(' ');\n    var View = /** @class */ (function (_super) {\n        __extends(View, _super);\n        function View(options) {\n            var _this = _super.call(this) || this;\n            _this._options = Object.assign({}, options || {});\n            _this._domEvents = [];\n            _this._vid = utils.uniqueId('vid');\n            if (_this._options.el)\n                _this.setElement(_this._options.el);\n            if (_this._options.events)\n                _this.events = Object.assign(_this.events || {}, _this.options.events);\n            return _this;\n        }\n        Object.defineProperty(View.prototype, \"vid\", {\n            // Unique view id\n            get: function () {\n                return this._vid;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(View.prototype, \"options\", {\n            get: function () {\n                return this._options;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        View.prototype.delegateEvents = function (events) {\n            var _this = this;\n            if (!this.el)\n                return;\n            events = events || utils.result(this, 'events') || {};\n            debug('%s delegate events %o', this, events);\n            if (!events)\n                return this;\n            var dels = [];\n            for (var key in events) {\n                var methods = events[key];\n                var match = key.match(/^(\\S+)\\s*(.*)$/);\n                if (!Array.isArray(methods))\n                    methods = [methods];\n                for (var i = 0, ii = methods.length; i < ii; i++) {\n                    var method = methods[i];\n                    if (utils.isString(method))\n                        method = { handler: method };\n                    else if (utils.isFunction(method))\n                        method = {\n                            ctx: this,\n                            handler: method\n                        };\n                    if (utils.isString(method.handler))\n                        method.handler = this[method.handler];\n                    // Set delegates immediately and defer event on this.el\n                    //const boundFn = method as EventHandler;\n                    if (match[2]) {\n                        this.delegate(match[1], match[2], method);\n                    }\n                    else {\n                        dels.push([match[1], method]);\n                    }\n                }\n            }\n            dels.forEach(function (d) { _this.delegate(d[0], d[1]); });\n            return this;\n        };\n        View.prototype.undelegateEvents = function () {\n            if (!this.el)\n                return this;\n            debug('%s undelegate events', this);\n            if (this.el) {\n                for (var i = 0, len = this._domEvents.length; i < len; i++) {\n                    var item = this._domEvents[i];\n                    debug(\"%s remove dom eventlistener for event '%s'\", this, item.eventName);\n                    this.el.removeEventListener(item.eventName, item.handler);\n                }\n                this._domEvents.length = 0;\n            }\n            return this;\n        };\n        View.prototype.delegate = function (eventName, selector, listener) {\n            if (!this.el)\n                return this;\n            if (utils.isCall(selector)) {\n                listener = selector;\n                selector = undefined;\n            }\n            var id = utils.uniqueId();\n            var domEvent = this._domEvents.find(function (m) { return m.eventName == eventName && m.selector == selector; });\n            if (domEvent) {\n                id = domEvent.id;\n                domEvent.listeners.push(Object.assign({}, listener));\n                return this;\n            }\n            else {\n                domEvent = { id: id, selector: selector, listeners: [Object.assign({ ctx: this }, listener)], eventName: eventName };\n            }\n            var root = this.el;\n            var self = this;\n            domEvent.handler = selector ? function (e) {\n                var node = (e.target || e.srcElement);\n                for (; node && node != root; node = node.parentNode) {\n                    if (node && node.matches(selector)) {\n                        if (e.delegateTarget && e.delegateTarget !== node) {\n                            debug('WARN: %s delegateTarget already set and node is not same', self);\n                            continue;\n                        }\n                        e.delegateTarget = node;\n                        debug(\"%s trigger %i listeners for '%s'-event on selector '%s'\", self, domEvent.listeners.length, domEvent.eventName, domEvent.selector);\n                        utils.callFuncCond(domEvent.listeners, [e]);\n                    }\n                }\n            } : function (e) {\n                if (e.delegateTarget)\n                    return;\n                utils.callFuncCond(domEvent.listeners, [e]);\n            };\n            var useCap = !!~unbubblebles.indexOf(eventName) && selector != null;\n            debug(\"%s delegate event '%s'\", this, eventName);\n            this.el.addEventListener(eventName, domEvent.handler, useCap);\n            this._domEvents.push(domEvent);\n            return this;\n        };\n        View.prototype.undelegate = function (eventName, selector, listener) {\n            if (!this.el)\n                return this;\n            if (typeof selector === 'function') {\n                listener = selector;\n                selector = undefined;\n            }\n            var indexOfListener = function (item, listener) {\n                return item.listeners.findIndex(function (m) { return m.handler === listener; });\n            };\n            var handlers = this._domEvents.slice();\n            for (var i = 0, len = handlers.length; i < len; i++) {\n                var item = handlers[i];\n                var match = item.eventName === eventName &&\n                    (listener ? !!~indexOfListener(item, listener) : true) &&\n                    (selector ? item.selector === selector : true);\n                if (!match)\n                    continue;\n                if ((listener && item.listeners.length == 1) || !listener) {\n                    debug(\"%s remove dom eventlistener for event '%s'\", this, item.eventName);\n                    this.el.removeEventListener(item.eventName, item.handler);\n                    this._domEvents.splice(this._domEvents.indexOf(item), 1);\n                }\n                else {\n                    debug(\"%s remove listener for event '%s'\", this, item.eventName);\n                    item.listeners.splice(indexOfListener(item, listener), 1);\n                }\n            }\n            return this;\n        };\n        View.prototype.render = function () {\n            debug(\"%s render\", this);\n            this.undelegateEvents();\n            this.delegateEvents();\n            return this;\n        };\n        View.prototype.setElement = function (el) {\n            if (this._el === el)\n                return this;\n            this.undelegateEvents();\n            if (this.el && this.options.attachId) {\n                debug(\"%s remove view id attribute\", this);\n                this.el.removeAttribute('data-vid');\n            }\n            debug(\"%s set element\", this, el);\n            this._el = el;\n            if (this.el && this.options.attachId) {\n                debug(\"%s set view id attribute\", this);\n                this.el.setAttribute('data-vid', this.vid);\n            }\n            return this;\n        };\n        View.prototype.getElement = function () {\n            return this._el;\n        };\n        View.prototype.destroy = function () {\n            debug(\"%s destroy\", this);\n            if (this.el && this.options.attachId) {\n                this.el.removeAttribute('data-vid');\n            }\n            this.setElement(void 0);\n            return _super.prototype.destroy.call(this);\n        };\n        View.prototype.toString = function () {\n            return \"[\" + (this.name || this.constructor.name) + \" \" + this.vid + \"]\";\n        };\n        return View;\n    }(AbstractView));\n\n    var debug$1 = utils.debug(\"withTemplate\");\n    var TemplateRenderer = /** @class */ (function () {\n        function TemplateRenderer(templ) {\n            this.templ = templ;\n        }\n        TemplateRenderer.prototype.mount = function (attributes, container, _prev) {\n            var result;\n            if (utils.isFunction(this.templ)) {\n                result = this.templ(attributes);\n            }\n            else {\n                result = this.templ;\n            }\n            container.innerHTML = result;\n            return container;\n        };\n        TemplateRenderer.prototype.unmount = function (el) {\n            var ok = el.innerHTML != '';\n            el.innerHTML = '';\n            return ok;\n        };\n        return TemplateRenderer;\n    }());\n    function withTemplate(Base) {\n        return /** @class */ (function (_super) {\n            __extends(class_1, _super);\n            function class_1() {\n                return _super !== null && _super.apply(this, arguments) || this;\n            }\n            class_1.prototype.getTemplateData = function () {\n                var data = utils.result(this, 'model') || {};\n                if (utils.isFunction(data.toJSON))\n                    data = data.toJSON();\n                debug$1(\"%s get template data:\", this, data);\n                return data;\n            };\n            class_1.prototype.render = function () {\n                var _this = this;\n                if (!this.el)\n                    return this;\n                if (utils.isFunction(this.undelegateEvents))\n                    this.undelegateEvents();\n                this.renderTemplate(function () { return _super.prototype.render.call(_this); });\n                return this;\n            };\n            class_1.prototype.destroy = function () {\n                if (this._renderer && this._templateEl) {\n                    this._renderer.unmount(this._templateEl);\n                    this._templateEl = void 0;\n                    this._renderer = void 0;\n                }\n                return _super.prototype.destroy.call(this);\n            };\n            class_1.prototype.renderTemplate = function (done) {\n                var _this = this;\n                var template = this.resolveTemplate(), container = this.resolveContainer();\n                if (!template || !container)\n                    return;\n                var result = template.mount(this.getTemplateData(), container, this._templateEl);\n                if (utils.isPromise(result)) {\n                    result.then(function (m) {\n                        _this._templateEl = m;\n                        done && done();\n                    });\n                    return;\n                }\n                this._templateEl = result;\n                done && done();\n            };\n            class_1.prototype.resolveTemplate = function () {\n                if (this._renderer)\n                    return this._renderer;\n                if (utils.isString(this.template) || utils.isFunction(this.template)) {\n                    this._renderer = new TemplateRenderer(this.template);\n                }\n                else if (isRenderer(this.template)) {\n                    this._renderer = this.template;\n                }\n                else if (this.template) {\n                    console.error(\"template should be a string, a function returning a string, or a renderer or a renderer\");\n                }\n                return this._renderer;\n            };\n            class_1.prototype.resolveContainer = function () {\n                return this.el;\n            };\n            return class_1;\n        }(Base));\n    }\n    var TemplateView = /** @class */ (function (_super) {\n        __extends(TemplateView, _super);\n        function TemplateView(options) {\n            var _this = _super.call(this, options) || this;\n            Object.assign(_this, utils.pick(_this.options, ['template', 'model']));\n            return _this;\n        }\n        return TemplateView;\n    }(withTemplate(View)));\n\n    function withElement(Base) {\n        return /** @class */ (function (_super) {\n            __extends(class_1, _super);\n            function class_1() {\n                var args = [];\n                for (var _i = 0; _i < arguments.length; _i++) {\n                    args[_i] = arguments[_i];\n                }\n                var _this = _super.apply(this, args) || this;\n                _this.__created = false;\n                if (!_this.el)\n                    _this._ensureElement();\n                return _this;\n            }\n            class_1.prototype._ensureElement = function () {\n                if (this.el)\n                    return;\n                var tagName = utils.getOption('tagName', [this.options, this]) || 'div', className = utils.getOption('className', [this.options, this]), attr = utils.getOption('attributes', [this.options, this]), el = document.createElement(tagName);\n                if (className) {\n                    // IE < 11 does not support multiple arguments in add/remove\n                    className.split(' ').map(function (m) { return m.trim(); })\n                        .forEach(function (cl) { return el.classList.add(cl); });\n                }\n                if (attr) {\n                    for (var key in attr) {\n                        el.setAttribute(key, attr[key]);\n                    }\n                }\n                this.__created = true;\n                this.el = el;\n            };\n            class_1.prototype.remove = function () {\n                if (this.__created && this.el && this.el.parentNode) {\n                    if (typeof this.undelegateEvents === 'function')\n                        this.undelegateEvents();\n                    this.el.parentNode.removeChild(this.el);\n                    this.el = void 0;\n                }\n                this.__created = false;\n                return this;\n            };\n            class_1.prototype.destroy = function () {\n                _super.prototype.destroy.call(this);\n                this.remove();\n                return this;\n            };\n            return class_1;\n        }(Base));\n    }\n\n    exports.isRenderer = isRenderer;\n    exports.attributes = attributes;\n    exports.event = event;\n    exports.View = View;\n    exports.AbstractView = AbstractView;\n    exports.Controller = Controller;\n    exports.withTemplate = withTemplate;\n    exports.TemplateRenderer = TemplateRenderer;\n    exports.TemplateView = TemplateView;\n    exports.withElement = withElement;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n"]}