Socket
Socket
Sign inDemoInstall

stimulus

Package Overview
Dependencies
Maintainers
2
Versions
33
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

stimulus - npm Package Compare versions

Comparing version 1.0.1 to 1.1.0-beta.1

LICENSE.md

1757

dist/stimulus.umd.js
/*
Stimulus 1.0.1
Stimulus 1.1.0-beta.1
Copyright © 2018 Basecamp, LLC
*/
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Stimulus=e():t.Stimulus=e()}("undefined"!=typeof self?self:this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=0)}([function(t,e,n){"use strict";function r(t){throw new Error(t)}function o(t){return"window"==t?window:"document"==t?document:void 0}function i(t){return t==window?"window":t==document?"document":void 0}function c(t,e,n){u(t,e).add(n)}function s(t,e,n){u(t,e).delete(n),a(t,e)}function u(t,e){var n=t.get(e);return n||(n=new Set,t.set(e,n)),n}function a(t,e){var n=t.get(e);null!=n&&0==n.size&&t.delete(e)}function l(t){return t.toString().replace(/([A-Z])/g,function(t,e){return"-"+e.toLowerCase()})}function f(t,e){return"["+t+'~="'+e+'"]'}function h(t){return{identifier:t.identifier,controllerConstructor:p(t.controllerConstructor)}}function p(t){var e=I(t);return e.bless(),e}function d(t){var e=t.prototype;m(t).forEach(function(t){return b(e,(n={},n[t+"Target"]={get:function(){var e=this.targets.find(t);if(e)return e;throw new Error('Missing target element "'+this.identifier+"."+t+'"')}},n[t+"Targets"]={get:function(){return this.targets.findAll(t)}},n["has"+v(t)+"Target"]={get:function(){return this.targets.has(t)}},n));var n})}function m(t){var e=y(t);return Array.from(e.reduce(function(t,e){return g(e).forEach(function(e){return t.add(e)}),t},new Set))}function y(t){for(var e=[];t;)e.push(t),t=Object.getPrototypeOf(t);return e}function g(t){var e=t.targets;return Array.isArray(e)?e:[]}function b(t,e){Object.keys(e).forEach(function(n){if(!(n in t)){var r=e[n];Object.defineProperty(t,n,r)}})}function v(t){return t.charAt(0).toUpperCase()+t.slice(1)}Object.defineProperty(e,"__esModule",{value:!0});var E=function(){function t(t,e,n){this.context=t,this.descriptor=e,this.eventTarget=n}return t.prototype.connect=function(){this.eventTarget.addEventListener(this.eventName,this,!1)},t.prototype.disconnect=function(){this.eventTarget.removeEventListener(this.eventName,this,!1)},t.prototype.hasSameDescriptorAs=function(t){return null!=t&&t.descriptor.isEqualTo(this.descriptor)},t.prototype.handleEvent=function(t){this.willBeInvokedByEvent(t)&&this.invokeWithEvent(t)},Object.defineProperty(t.prototype,"eventName",{get:function(){return this.descriptor.eventName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"method",{get:function(){var t=this.controller[this.methodName];if("function"==typeof t)return t;throw new Error('Action "'+this.descriptor+'" references undefined method "'+this.methodName+'"')},enumerable:!0,configurable:!0}),t.prototype.invokeWithEvent=function(t){try{this.method.call(this.controller,t)}catch(e){this.context.handleError(e,'invoking action "'+this.descriptor+'"',{event:t})}},t.prototype.willBeInvokedByEvent=function(t){var e=t.target;return this.element===e||(!(e instanceof Element&&this.element.contains(e))||this.scope.containsElement(e))},Object.defineProperty(t.prototype,"controller",{get:function(){return this.context.controller},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"methodName",{get:function(){return this.descriptor.methodName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"scope",{get:function(){return this.context.scope},enumerable:!0,configurable:!0}),t}(),A=/^((.+?)(@(window|document))?->)?(.+?)#(.+)$/,O=function(){function t(t,e,n,r){this.identifier=t,this.eventName=e,this.methodName=n,this.eventTarget=r}return t.forOptions=function(e){return new t(e.identifier||r("Missing identifier in action descriptor"),e.eventName||r("Missing event name in action descriptor"),e.methodName||r("Missing method name in action descriptor"),e.eventTarget||r("Missing event target in action descriptor"))},t.forElementWithInlineDescriptorString=function(e,n){try{var r=this.parseOptionsFromInlineActionDescriptorString(n);return r.eventName=r.eventName||this.getDefaultEventNameForElement(e),r.eventTarget=r.eventTarget||e,t.forOptions(r)}catch(t){throw new Error('Bad action descriptor "'+n+'": '+t.message)}},t.parseOptionsFromInlineActionDescriptorString=function(t){var e=t.trim(),n=e.match(A)||r("Invalid action descriptor syntax");return{identifier:n[5],eventName:n[2],methodName:n[6],eventTarget:o(n[4])}},t.getDefaultEventNameForElement=function(t){return this.defaultEventNames[t.tagName.toLowerCase()](t)},Object.defineProperty(t.prototype,"eventTargetName",{get:function(){return i(this.eventTarget)},enumerable:!0,configurable:!0}),t.prototype.isEqualTo=function(t){return null!=t&&t.identifier==this.identifier&&t.eventName==this.eventName&&t.methodName==this.methodName&&t.eventTarget==this.eventTarget},t.prototype.toString=function(){var t=this.eventTargetName?"@"+this.eventTargetName:"";return""+this.eventName+t+"->"+this.identifier+"#"+this.methodName},t.defaultEventNames={a:function(t){return"click"},button:function(t){return"click"},form:function(t){return"submit"},input:function(t){return"submit"==t.getAttribute("type")?"click":"change"},select:function(t){return"change"},textarea:function(t){return"change"}},t}(),N=function(){function t(t){this.context=t,this.started=!1,this.actions=new Set}return t.prototype.start=function(){this.started||(this.started=!0,this.connectActions())},t.prototype.stop=function(){this.started&&(this.disconnectActions(),this.started=!1)},t.prototype.add=function(t){this.actions.has(t)||(t.connect(),this.actions.add(t))},t.prototype.delete=function(t){this.actions.has(t)&&(this.actions.delete(t),t.disconnect())},t.prototype.connectActions=function(){this.actions.forEach(function(t){return t.connect()})},t.prototype.disconnectActions=function(){this.actions.forEach(function(t){return t.disconnect()})},t}(),j=function(){function t(){this.valuesByKey=new Map}return Object.defineProperty(t.prototype,"values",{get:function(){return Array.from(this.valuesByKey.values()).reduce(function(t,e){return t.concat(Array.from(e))},[])},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"size",{get:function(){return Array.from(this.valuesByKey.values()).reduce(function(t,e){return t+e.size},0)},enumerable:!0,configurable:!0}),t.prototype.add=function(t,e){c(this.valuesByKey,t,e)},t.prototype.delete=function(t,e){s(this.valuesByKey,t,e)},t.prototype.has=function(t,e){var n=this.valuesByKey.get(t);return null!=n&&n.has(e)},t.prototype.hasKey=function(t){return this.valuesByKey.has(t)},t.prototype.hasValue=function(t){return Array.from(this.valuesByKey.values()).some(function(e){return e.has(t)})},t.prototype.getValuesForKey=function(t){var e=this.valuesByKey.get(t);return e?Array.from(e):[]},t.prototype.getKeysForValue=function(t){return Array.from(this.valuesByKey).filter(function(e){e[0];return e[1].has(t)}).map(function(t){var e=t[0];t[1];return e})},t}(),w=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),P=function(t){function e(){var e=t.call(this)||this;return e.keysByValue=new Map,e}return w(e,t),Object.defineProperty(e.prototype,"values",{get:function(){return Array.from(this.keysByValue.keys())},enumerable:!0,configurable:!0}),e.prototype.add=function(e,n){t.prototype.add.call(this,e,n),c(this.keysByValue,n,e)},e.prototype.delete=function(e,n){t.prototype.delete.call(this,e,n),s(this.keysByValue,n,e)},e.prototype.hasValue=function(t){return this.keysByValue.has(t)},e.prototype.getKeysForValue=function(t){var e=this.keysByValue.get(t);return e?Array.from(e):[]},e}(j),T=function(){function t(t,e){var n=this;this.element=t,this.started=!1,this.delegate=e,this.elements=new Set,this.mutationObserver=new MutationObserver(function(t){return n.processMutations(t)})}return t.prototype.start=function(){this.started||(this.mutationObserver.observe(this.element,{attributes:!0,childList:!0,subtree:!0}),this.started=!0,this.refresh())},t.prototype.stop=function(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)},t.prototype.refresh=function(){if(this.started){for(var t=new Set(this.matchElementsInTree()),e=0,n=Array.from(this.elements);e<n.length;e++){var r=n[e];t.has(r)||this.removeElement(r)}for(var o=0,i=Array.from(t);o<i.length;o++){var r=i[o];this.addElement(r)}}},t.prototype.processMutations=function(t){for(var e=0,n=t;e<n.length;e++){var r=n[e];this.processMutation(r)}},t.prototype.processMutation=function(t){"attributes"==t.type?this.processAttributeChange(t.target,t.attributeName):"childList"==t.type&&(this.processRemovedNodes(t.removedNodes),this.processAddedNodes(t.addedNodes))},t.prototype.processAttributeChange=function(t,e){var n=t;this.elements.has(n)?this.delegate.elementAttributeChanged&&this.matchElement(n)?this.delegate.elementAttributeChanged(n,e):this.removeElement(n):this.matchElement(n)&&this.addElement(n)},t.prototype.processRemovedNodes=function(t){for(var e=0,n=Array.from(t);e<n.length;e++){var r=n[e];this.processNode(r,this.removeElement)}},t.prototype.processAddedNodes=function(t){for(var e=0,n=Array.from(t);e<n.length;e++){var r=n[e];this.processNode(r,this.addElement)}},t.prototype.matchElement=function(t){return this.delegate.matchElement(t)},t.prototype.matchElementsInTree=function(t){return void 0===t&&(t=this.element),this.delegate.matchElementsInTree(t)},t.prototype.processNode=function(t,e){var n=this.elementFromNode(t);if(n)for(var r=0,o=this.matchElementsInTree(n);r<o.length;r++){var i=o[r];e.call(this,i)}},t.prototype.elementFromNode=function(t){if(t.nodeType==Node.ELEMENT_NODE)return t},t.prototype.addElement=function(t){this.elements.has(t)||(this.elements.add(t),this.delegate.elementMatched&&this.delegate.elementMatched(t))},t.prototype.removeElement=function(t){this.elements.has(t)&&(this.elements.delete(t),this.delegate.elementUnmatched&&this.delegate.elementUnmatched(t))},t}(),F=(function(){function t(t,e,n){this.attributeName=e,this.delegate=n,this.elementObserver=new T(t,this)}Object.defineProperty(t.prototype,"element",{get:function(){return this.elementObserver.element},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selector",{get:function(){return"["+this.attributeName+"]"},enumerable:!0,configurable:!0}),t.prototype.start=function(){this.elementObserver.start()},t.prototype.stop=function(){this.elementObserver.stop()},t.prototype.matchElement=function(t){return t.hasAttribute(this.attributeName)},t.prototype.matchElementsInTree=function(t){var e=this.matchElement(t)?[t]:[],n=Array.from(t.querySelectorAll(this.selector));return e.concat(n)},t.prototype.elementMatched=function(t){this.delegate.elementMatchedAttribute&&this.delegate.elementMatchedAttribute(t,this.attributeName)},t.prototype.elementUnmatched=function(t){this.delegate.elementUnmatchedAttribute&&this.delegate.elementUnmatchedAttribute(t,this.attributeName)},t.prototype.elementAttributeChanged=function(t,e){this.delegate.elementAttributeValueChanged&&this.attributeName==e&&this.delegate.elementAttributeValueChanged(t,e)}}(),function(){function t(t,e,n){this.attributeName=e,this.delegate=n,this.elementObserver=new T(t,this),this.tokensByElement=new P}return Object.defineProperty(t.prototype,"started",{get:function(){return this.elementObserver.started},enumerable:!0,configurable:!0}),t.prototype.start=function(){this.elementObserver.start()},t.prototype.stop=function(){this.elementObserver.stop()},t.prototype.refresh=function(){this.elementObserver.refresh()},Object.defineProperty(t.prototype,"element",{get:function(){return this.elementObserver.element},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"selector",{get:function(){return"["+this.attributeName+"]"},enumerable:!0,configurable:!0}),t.prototype.getElementsMatchingToken=function(t){return this.tokensByElement.getKeysForValue(t)},t.prototype.matchElement=function(t){return t.hasAttribute(this.attributeName)},t.prototype.matchElementsInTree=function(t){var e=this.matchElement(t)?[t]:[],n=Array.from(t.querySelectorAll(this.selector));return e.concat(n)},t.prototype.elementMatched=function(t){for(var e=Array.from(this.readTokenSetForElement(t)),n=0,r=e;n<r.length;n++){var o=r[n];this.elementMatchedToken(t,o)}},t.prototype.elementUnmatched=function(t){for(var e=this.getTokensForElement(t),n=0,r=e;n<r.length;n++){var o=r[n];this.elementUnmatchedToken(t,o)}},t.prototype.elementAttributeChanged=function(t){for(var e=this.readTokenSetForElement(t),n=0,r=Array.from(e);n<r.length;n++){var o=r[n];this.elementMatchedToken(t,o)}for(var i=0,c=this.getTokensForElement(t);i<c.length;i++){var o=c[i];e.has(o)||this.elementUnmatchedToken(t,o)}},t.prototype.elementMatchedToken=function(t,e){this.tokensByElement.has(t,e)||(this.tokensByElement.add(t,e),this.delegate.elementMatchedTokenForAttribute&&this.delegate.elementMatchedTokenForAttribute(t,e,this.attributeName))},t.prototype.elementUnmatchedToken=function(t,e){this.tokensByElement.has(t,e)&&(this.tokensByElement.delete(t,e),this.delegate.elementUnmatchedTokenForAttribute&&this.delegate.elementUnmatchedTokenForAttribute(t,e,this.attributeName))},t.prototype.getTokensForElement=function(t){return this.tokensByElement.getValuesForKey(t)},t.prototype.readTokenSetForElement=function(t){for(var e=new Set,n=t.getAttribute(this.attributeName)||"",r=0,o=n.split(/\s+/);r<o.length;r++){var i=o[r];i.length&&e.add(i)}return e},t}()),k=function(){function t(t,e){this.context=t,this.delegate=e,this.tokenListObserver=new F(this.element,this.attributeName,this),this.connectedActions=new j}return Object.defineProperty(t.prototype,"scope",{get:function(){return this.context.scope},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"schema",{get:function(){return this.context.schema},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"attributeName",{get:function(){return this.schema.actionAttribute},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!0,configurable:!0}),t.prototype.start=function(){this.tokenListObserver.start()},t.prototype.stop=function(){this.tokenListObserver.stop()},t.prototype.elementMatchedTokenForAttribute=function(t,e,n){if(this.scope.containsElement(t)){var r=this.buildActionForElementWithDescriptorString(t,e);r&&(this.connectedActions.add(t,r),this.delegate.inlineActionConnected(r))}},t.prototype.elementUnmatchedTokenForAttribute=function(t,e,n){var r=this.getConnectedActionForElementWithDescriptorString(t,e);r&&(this.connectedActions.delete(t,r),this.delegate.inlineActionDisconnected(r))},t.prototype.getConnectedActionForElementWithDescriptorString=function(t,e){var n=this.buildActionForElementWithDescriptorString(t,e);if(n){return this.connectedActions.getValuesForKey(t).find(function(t){return t.hasSameDescriptorAs(n)})}},t.prototype.buildActionForElementWithDescriptorString=function(t,e){try{var n=O.forElementWithInlineDescriptorString(t,e);if(n.identifier==this.identifier)return new E(this.context,n,n.eventTarget)}catch(n){this.context.handleError(n,'parsing descriptor string "'+e+'"',{element:t})}},t}(),x=function(){function t(t){this.scope=t}return Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!0,configurable:!0}),t.prototype.get=function(t){return t=this.getFormattedKey(t),this.element.getAttribute(t)},t.prototype.set=function(t,e){return t=this.getFormattedKey(t),this.element.setAttribute(t,e),this.get(t)},t.prototype.has=function(t){return t=this.getFormattedKey(t),this.element.hasAttribute(t)},t.prototype.delete=function(t){return!!this.has(t)&&(t=this.getFormattedKey(t),this.element.removeAttribute(t),!0)},t.prototype.getFormattedKey=function(t){return"data-"+this.identifier+"-"+l(t)},t}(),B=function(){function t(t){this.scope=t}return Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"schema",{get:function(){return this.scope.schema},enumerable:!0,configurable:!0}),t.prototype.has=function(t){return null!=this.find(t)},t.prototype.find=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=this.getSelectorForTargetNames(t);return this.scope.findElement(n)},t.prototype.findAll=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=this.getSelectorForTargetNames(t);return this.scope.findAllElements(n)},t.prototype.getSelectorForTargetNames=function(t){var e=this;return t.map(function(t){return e.getSelectorForTargetName(t)}).join(", ")},t.prototype.getSelectorForTargetName=function(t){var e=this.identifier+"."+t;return f(this.schema.targetAttribute,e)},t}(),M=function(){function t(t,e,n){this.schema=t,this.identifier=e,this.element=n,this.targets=new B(this),this.data=new x(this)}return t.prototype.findElement=function(t){return this.findAllElements(t)[0]},t.prototype.findAllElements=function(t){var e=this.element.matches(t)?[this.element]:[],n=this.filterElements(Array.from(this.element.querySelectorAll(t)));return e.concat(n)},t.prototype.filterElements=function(t){var e=this;return t.filter(function(t){return e.containsElement(t)})},t.prototype.containsElement=function(t){return t.closest(this.controllerSelector)===this.element},Object.defineProperty(t.prototype,"controllerSelector",{get:function(){return f(this.schema.controllerAttribute,this.identifier)},enumerable:!0,configurable:!0}),t}(),C=function(){function t(t,e){this.module=t,this.scope=new M(this.schema,this.identifier,e),this.actions=new N(this),this.inlineActionObserver=new k(this,this);try{this.controller=new t.controllerConstructor(this),this.controller.initialize()}catch(t){this.handleError(t,"initializing controller")}}return t.prototype.connect=function(){this.actions.start(),this.inlineActionObserver.start();try{this.controller.connect()}catch(t){this.handleError(t,"connecting controller")}},t.prototype.disconnect=function(){try{this.controller.disconnect()}catch(t){this.handleError(t,"disconnecting controller")}this.inlineActionObserver.stop(),this.actions.stop()},Object.defineProperty(t.prototype,"application",{get:function(){return this.module.application},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.module.identifier},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"schema",{get:function(){return this.application.schema},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"parentElement",{get:function(){return this.element.parentElement},enumerable:!0,configurable:!0}),t.prototype.inlineActionConnected=function(t){this.actions.add(t)},t.prototype.inlineActionDisconnected=function(t){this.actions.delete(t)},t.prototype.handleError=function(t,e,n){void 0===n&&(n={});var r=this,o=r.identifier,i=r.controller,c=r.element;n=Object.assign({identifier:o,controller:i,element:c},n),this.application.handleError(t,"Error "+e,n)},t}(),S=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}(),I=function(){function t(t){function e(){var n=this&&this instanceof e?this.constructor:void 0;return Reflect.construct(t,arguments,n)}return e.prototype=Object.create(t.prototype,{constructor:{value:e}}),Reflect.setPrototypeOf(e,t),e}try{return function(){var e=function(){this.a.call(this)},n=t(e);n.prototype.a=function(){},new n}(),t}catch(t){return function(t){return function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return S(e,t),e}(t)}}}(),_=function(){function t(t,e){this.application=t,this.definition=h(e),this.contextsByElement=new WeakMap,this.connectedContexts=new Set}return Object.defineProperty(t.prototype,"identifier",{get:function(){return this.definition.identifier},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"controllerConstructor",{get:function(){return this.definition.controllerConstructor},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"contexts",{get:function(){return Array.from(this.connectedContexts)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"size",{get:function(){return this.connectedContexts.size},enumerable:!0,configurable:!0}),t.prototype.connectElement=function(t){var e=this.fetchContextForElement(t);e&&!this.connectedContexts.has(e)&&(this.connectedContexts.add(e),e.connect())},t.prototype.disconnectElement=function(t){var e=this.fetchContextForElement(t);e&&this.connectedContexts.has(e)&&(this.connectedContexts.delete(e),e.disconnect())},t.prototype.getContextForElement=function(t){return this.contextsByElement.get(t)},t.prototype.fetchContextForElement=function(t){var e=this.contextsByElement.get(t);return e||(e=new C(this,t),this.contextsByElement.set(t,e)),e},t}(),K=function(){function t(t){this.application=t,this.tokenListObserver=new F(this.element,this.controllerAttribute,this),this.modulesByIdentifier=new Map}return Object.defineProperty(t.prototype,"schema",{get:function(){return this.application.schema},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){return this.application.element},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"controllerAttribute",{get:function(){return this.schema.controllerAttribute},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"modules",{get:function(){return Array.from(this.modulesByIdentifier.values())},enumerable:!0,configurable:!0}),t.prototype.start=function(){this.tokenListObserver.start()},t.prototype.stop=function(){this.tokenListObserver.stop()},t.prototype.loadDefinition=function(t){var e=t.identifier;this.unloadIdentifier(e);var n=new _(this.application,t);this.modulesByIdentifier.set(e,n),this.connectModule(n)},t.prototype.unloadIdentifier=function(t){var e=this.modulesByIdentifier.get(t);e&&(this.disconnectModule(e),this.modulesByIdentifier.delete(t))},t.prototype.elementMatchedTokenForAttribute=function(t,e,n){this.connectModuleForIdentifierToElement(e,t)},t.prototype.elementUnmatchedTokenForAttribute=function(t,e,n){this.disconnectModuleForIdentifierFromElement(e,t)},Object.defineProperty(t.prototype,"contexts",{get:function(){return this.modules.reduce(function(t,e){return t.concat(Array.from(e.contexts))},[])},enumerable:!0,configurable:!0}),t.prototype.getContextForElementAndIdentifier=function(t,e){var n=this.modulesByIdentifier.get(e);if(n)return n.getContextForElement(t)},t.prototype.connectModule=function(t){for(var e=this.tokenListObserver.getElementsMatchingToken(t.identifier),n=0,r=e;n<r.length;n++){var o=r[n];t.connectElement(o)}},t.prototype.disconnectModule=function(t){for(var e=t.contexts,n=0,r=e;n<r.length;n++){var o=r[n].element;t.disconnectElement(o)}},t.prototype.connectModuleForIdentifierToElement=function(t,e){var n=this.modulesByIdentifier.get(t);n&&n.connectElement(e)},t.prototype.disconnectModuleForIdentifierFromElement=function(t,e){var n=this.modulesByIdentifier.get(t);n&&n.disconnectElement(e)},t}(),D={controllerAttribute:"data-controller",actionAttribute:"data-action",targetAttribute:"data-target"},V=function(){function t(t,e){void 0===t&&(t=document.documentElement),void 0===e&&(e=D),this.element=t,this.schema=e,this.router=new K(this)}return t.start=function(e,n){var r=new t(e,n);return r.start(),r},t.prototype.start=function(){this.router.start()},t.prototype.stop=function(){this.router.stop()},t.prototype.register=function(t,e){this.load({identifier:t,controllerConstructor:e})},t.prototype.load=function(t){for(var e=this,n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];(Array.isArray(t)?t:[t].concat(n)).forEach(function(t){return e.router.loadDefinition(t)})},t.prototype.unload=function(t){for(var e=this,n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];(Array.isArray(t)?t:[t].concat(n)).forEach(function(t){return e.router.unloadIdentifier(t)})},Object.defineProperty(t.prototype,"controllers",{get:function(){return this.router.contexts.map(function(t){return t.controller})},enumerable:!0,configurable:!0}),t.prototype.getControllerForElementAndIdentifier=function(t,e){var n=this.router.getContextForElementAndIdentifier(t,e);return n?n.controller:null},t.prototype.handleError=function(t,e,n){console.error("%s\n\n%o\n\n%o",e,t,n)},t}(),L=function(){function t(t){this.context=t}return t.bless=function(){d(this)},Object.defineProperty(t.prototype,"application",{get:function(){return this.context.application},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"scope",{get:function(){return this.context.scope},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.scope.identifier},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"targets",{get:function(){return this.scope.targets},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"data",{get:function(){return this.scope.data},enumerable:!0,configurable:!0}),t.prototype.initialize=function(){},t.prototype.connect=function(){},t.prototype.disconnect=function(){},t.targets=[],t}();n.d(e,"Action",function(){return E}),n.d(e,"ActionDescriptor",function(){return O}),n.d(e,"Application",function(){return V}),n.d(e,"Context",function(){return C}),n.d(e,"Controller",function(){return L}),n.d(e,"defaultSchema",function(){return D})}])});
(function(global, factory) {
typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define([ "exports" ], factory) : factory(global.Stimulus = {});
})(this, function(exports) {
"use strict";
var EventListener = function() {
function EventListener(eventTarget, eventName) {
this.eventTarget = eventTarget;
this.eventName = eventName;
this.unorderedBindings = new Set();
}
EventListener.prototype.connect = function() {
this.eventTarget.addEventListener(this.eventName, this, false);
};
EventListener.prototype.disconnect = function() {
this.eventTarget.removeEventListener(this.eventName, this, false);
};
EventListener.prototype.bindingConnected = function(binding) {
this.unorderedBindings.add(binding);
};
EventListener.prototype.bindingDisconnected = function(binding) {
this.unorderedBindings.delete(binding);
};
EventListener.prototype.handleEvent = function(event) {
var extendedEvent = extendEvent(event);
for (var _i = 0, _a = this.bindings; _i < _a.length; _i++) {
var binding = _a[_i];
if (extendedEvent.immediatePropagationStopped) {
break;
} else {
binding.handleEvent(extendedEvent);
}
}
};
Object.defineProperty(EventListener.prototype, "bindings", {
get: function() {
return Array.from(this.unorderedBindings).sort(function(left, right) {
var leftIndex = left.index, rightIndex = right.index;
return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;
});
},
enumerable: true,
configurable: true
});
return EventListener;
}();
function extendEvent(event) {
if ("immediatePropagationStopped" in event) {
return event;
} else {
var stopImmediatePropagation_1 = event.stopImmediatePropagation;
return Object.assign(event, {
immediatePropagationStopped: false,
stopImmediatePropagation: function() {
this.immediatePropagationStopped = true;
stopImmediatePropagation_1.call(this);
}
});
}
}
var Dispatcher = function() {
function Dispatcher(application) {
this.application = application;
this.eventListenerMaps = new Map();
this.started = false;
}
Dispatcher.prototype.start = function() {
if (!this.started) {
this.started = true;
this.eventListeners.forEach(function(eventListener) {
return eventListener.connect();
});
}
};
Dispatcher.prototype.stop = function() {
if (this.started) {
this.started = false;
this.eventListeners.forEach(function(eventListener) {
return eventListener.disconnect();
});
}
};
Object.defineProperty(Dispatcher.prototype, "eventListeners", {
get: function() {
return Array.from(this.eventListenerMaps.values()).reduce(function(listeners, map) {
return listeners.concat(Array.from(map.values()));
}, []);
},
enumerable: true,
configurable: true
});
Dispatcher.prototype.bindingConnected = function(binding) {
this.fetchEventListenerForBinding(binding).bindingConnected(binding);
};
Dispatcher.prototype.bindingDisconnected = function(binding) {
this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);
};
Dispatcher.prototype.handleError = function(error, message, detail) {
if (detail === void 0) {
detail = {};
}
this.application.handleError(error, "Error " + message, detail);
};
Dispatcher.prototype.fetchEventListenerForBinding = function(binding) {
var eventTarget = binding.eventTarget, eventName = binding.eventName;
return this.fetchEventListener(eventTarget, eventName);
};
Dispatcher.prototype.fetchEventListener = function(eventTarget, eventName) {
var eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);
var eventListener = eventListenerMap.get(eventName);
if (!eventListener) {
eventListener = this.createEventListener(eventTarget, eventName);
eventListenerMap.set(eventName, eventListener);
}
return eventListener;
};
Dispatcher.prototype.createEventListener = function(eventTarget, eventName) {
var eventListener = new EventListener(eventTarget, eventName);
if (this.started) {
eventListener.connect();
}
return eventListener;
};
Dispatcher.prototype.fetchEventListenerMapForEventTarget = function(eventTarget) {
var eventListenerMap = this.eventListenerMaps.get(eventTarget);
if (!eventListenerMap) {
eventListenerMap = new Map();
this.eventListenerMaps.set(eventTarget, eventListenerMap);
}
return eventListenerMap;
};
return Dispatcher;
}();
var descriptorPattern = /^((.+?)(@(window|document))?->)?(.+?)(#(.+))?$/;
function parseDescriptorString(descriptorString) {
var source = descriptorString.trim();
var matches = source.match(descriptorPattern) || [];
return {
eventTarget: parseEventTarget(matches[4]),
eventName: matches[2],
identifier: matches[5],
methodName: matches[7]
};
}
function parseEventTarget(eventTargetName) {
if (eventTargetName == "window") {
return window;
} else if (eventTargetName == "document") {
return document;
}
}
function stringifyEventTarget(eventTarget) {
if (eventTarget == window) {
return "window";
} else if (eventTarget == document) {
return "document";
}
}
var Action = function() {
function Action(element, index, descriptor) {
this.element = element;
this.index = index;
this.eventTarget = descriptor.eventTarget || element;
this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error("missing event name");
this.identifier = descriptor.identifier || error("missing identifier");
this.methodName = descriptor.methodName || error("missing method name");
}
Action.forToken = function(token) {
return new this(token.element, token.index, parseDescriptorString(token.content));
};
Action.prototype.toString = function() {
var eventNameSuffix = this.eventTargetName ? "@" + this.eventTargetName : "";
return "" + this.eventName + eventNameSuffix + "->" + this.identifier + "#" + this.methodName;
};
Object.defineProperty(Action.prototype, "eventTargetName", {
get: function() {
return stringifyEventTarget(this.eventTarget);
},
enumerable: true,
configurable: true
});
return Action;
}();
var defaultEventNames = {
a: function(e) {
return "click";
},
button: function(e) {
return "click";
},
form: function(e) {
return "submit";
},
input: function(e) {
return e.getAttribute("type") == "submit" ? "click" : "change";
},
select: function(e) {
return "change";
},
textarea: function(e) {
return "change";
}
};
function getDefaultEventNameForElement(element) {
var tagName = element.tagName.toLowerCase();
if (tagName in defaultEventNames) {
return defaultEventNames[tagName](element);
}
}
function error(message) {
throw new Error(message);
}
var Binding = function() {
function Binding(context, action) {
this.context = context;
this.action = action;
}
Object.defineProperty(Binding.prototype, "index", {
get: function() {
return this.action.index;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Binding.prototype, "eventTarget", {
get: function() {
return this.action.eventTarget;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Binding.prototype, "identifier", {
get: function() {
return this.context.identifier;
},
enumerable: true,
configurable: true
});
Binding.prototype.handleEvent = function(event) {
if (this.willBeInvokedByEvent(event)) {
this.invokeWithEvent(event);
}
};
Object.defineProperty(Binding.prototype, "eventName", {
get: function() {
return this.action.eventName;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Binding.prototype, "method", {
get: function() {
var method = this.controller[this.methodName];
if (typeof method == "function") {
return method;
}
throw new Error('Action "' + this.action + '" references undefined method "' + this.methodName + '"');
},
enumerable: true,
configurable: true
});
Binding.prototype.invokeWithEvent = function(event) {
try {
this.method.call(this.controller, event);
} catch (error) {
var _a = this, identifier = _a.identifier, controller = _a.controller, element = _a.element, index = _a.index;
var detail = {
identifier: identifier,
controller: controller,
element: element,
index: index,
event: event
};
this.context.handleError(error, 'invoking action "' + this.action + '"', detail);
}
};
Binding.prototype.willBeInvokedByEvent = function(event) {
var eventTarget = event.target;
if (this.element === eventTarget) {
return true;
} else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {
return this.scope.containsElement(eventTarget);
} else {
return true;
}
};
Object.defineProperty(Binding.prototype, "controller", {
get: function() {
return this.context.controller;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Binding.prototype, "methodName", {
get: function() {
return this.action.methodName;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Binding.prototype, "element", {
get: function() {
return this.scope.element;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Binding.prototype, "scope", {
get: function() {
return this.context.scope;
},
enumerable: true,
configurable: true
});
return Binding;
}();
var ElementObserver = function() {
function ElementObserver(element, delegate) {
var _this = this;
this.element = element;
this.started = false;
this.delegate = delegate;
this.elements = new Set();
this.mutationObserver = new MutationObserver(function(mutations) {
return _this.processMutations(mutations);
});
}
ElementObserver.prototype.start = function() {
if (!this.started) {
this.started = true;
this.mutationObserver.observe(this.element, {
attributes: true,
childList: true,
subtree: true
});
this.refresh();
}
};
ElementObserver.prototype.stop = function() {
if (this.started) {
this.mutationObserver.takeRecords();
this.mutationObserver.disconnect();
this.started = false;
}
};
ElementObserver.prototype.refresh = function() {
if (this.started) {
var matches = new Set(this.matchElementsInTree());
for (var _i = 0, _a = Array.from(this.elements); _i < _a.length; _i++) {
var element = _a[_i];
if (!matches.has(element)) {
this.removeElement(element);
}
}
for (var _b = 0, _c = Array.from(matches); _b < _c.length; _b++) {
var element = _c[_b];
this.addElement(element);
}
}
};
ElementObserver.prototype.processMutations = function(mutations) {
if (this.started) {
for (var _i = 0, mutations_1 = mutations; _i < mutations_1.length; _i++) {
var mutation = mutations_1[_i];
this.processMutation(mutation);
}
}
};
ElementObserver.prototype.processMutation = function(mutation) {
if (mutation.type == "attributes") {
this.processAttributeChange(mutation.target, mutation.attributeName);
} else if (mutation.type == "childList") {
this.processRemovedNodes(mutation.removedNodes);
this.processAddedNodes(mutation.addedNodes);
}
};
ElementObserver.prototype.processAttributeChange = function(node, attributeName) {
var element = node;
if (this.elements.has(element)) {
if (this.delegate.elementAttributeChanged && this.matchElement(element)) {
this.delegate.elementAttributeChanged(element, attributeName);
} else {
this.removeElement(element);
}
} else if (this.matchElement(element)) {
this.addElement(element);
}
};
ElementObserver.prototype.processRemovedNodes = function(nodes) {
for (var _i = 0, _a = Array.from(nodes); _i < _a.length; _i++) {
var node = _a[_i];
var element = this.elementFromNode(node);
if (element) {
this.processTree(element, this.removeElement);
}
}
};
ElementObserver.prototype.processAddedNodes = function(nodes) {
for (var _i = 0, _a = Array.from(nodes); _i < _a.length; _i++) {
var node = _a[_i];
var element = this.elementFromNode(node);
if (element && this.elementIsActive(element)) {
this.processTree(element, this.addElement);
}
}
};
ElementObserver.prototype.matchElement = function(element) {
return this.delegate.matchElement(element);
};
ElementObserver.prototype.matchElementsInTree = function(tree) {
if (tree === void 0) {
tree = this.element;
}
return this.delegate.matchElementsInTree(tree);
};
ElementObserver.prototype.processTree = function(tree, processor) {
for (var _i = 0, _a = this.matchElementsInTree(tree); _i < _a.length; _i++) {
var element = _a[_i];
processor.call(this, element);
}
};
ElementObserver.prototype.elementFromNode = function(node) {
if (node.nodeType == Node.ELEMENT_NODE) {
return node;
}
};
ElementObserver.prototype.elementIsActive = function(element) {
if (element.isConnected != this.element.isConnected) {
return false;
} else {
return this.element.contains(element);
}
};
ElementObserver.prototype.addElement = function(element) {
if (!this.elements.has(element)) {
if (this.elementIsActive(element)) {
this.elements.add(element);
if (this.delegate.elementMatched) {
this.delegate.elementMatched(element);
}
}
}
};
ElementObserver.prototype.removeElement = function(element) {
if (this.elements.has(element)) {
this.elements.delete(element);
if (this.delegate.elementUnmatched) {
this.delegate.elementUnmatched(element);
}
}
};
return ElementObserver;
}();
var AttributeObserver = function() {
function AttributeObserver(element, attributeName, delegate) {
this.attributeName = attributeName;
this.delegate = delegate;
this.elementObserver = new ElementObserver(element, this);
}
Object.defineProperty(AttributeObserver.prototype, "element", {
get: function() {
return this.elementObserver.element;
},
enumerable: true,
configurable: true
});
Object.defineProperty(AttributeObserver.prototype, "selector", {
get: function() {
return "[" + this.attributeName + "]";
},
enumerable: true,
configurable: true
});
AttributeObserver.prototype.start = function() {
this.elementObserver.start();
};
AttributeObserver.prototype.stop = function() {
this.elementObserver.stop();
};
AttributeObserver.prototype.refresh = function() {
this.elementObserver.refresh();
};
Object.defineProperty(AttributeObserver.prototype, "started", {
get: function() {
return this.elementObserver.started;
},
enumerable: true,
configurable: true
});
AttributeObserver.prototype.matchElement = function(element) {
return element.hasAttribute(this.attributeName);
};
AttributeObserver.prototype.matchElementsInTree = function(tree) {
var match = this.matchElement(tree) ? [ tree ] : [];
var matches = Array.from(tree.querySelectorAll(this.selector));
return match.concat(matches);
};
AttributeObserver.prototype.elementMatched = function(element) {
if (this.delegate.elementMatchedAttribute) {
this.delegate.elementMatchedAttribute(element, this.attributeName);
}
};
AttributeObserver.prototype.elementUnmatched = function(element) {
if (this.delegate.elementUnmatchedAttribute) {
this.delegate.elementUnmatchedAttribute(element, this.attributeName);
}
};
AttributeObserver.prototype.elementAttributeChanged = function(element, attributeName) {
if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {
this.delegate.elementAttributeValueChanged(element, attributeName);
}
};
return AttributeObserver;
}();
function add(map, key, value) {
fetch(map, key).add(value);
}
function del(map, key, value) {
fetch(map, key).delete(value);
prune(map, key);
}
function fetch(map, key) {
var values = map.get(key);
if (!values) {
values = new Set();
map.set(key, values);
}
return values;
}
function prune(map, key) {
var values = map.get(key);
if (values != null && values.size == 0) {
map.delete(key);
}
}
var Multimap = function() {
function Multimap() {
this.valuesByKey = new Map();
}
Object.defineProperty(Multimap.prototype, "values", {
get: function() {
var sets = Array.from(this.valuesByKey.values());
return sets.reduce(function(values, set) {
return values.concat(Array.from(set));
}, []);
},
enumerable: true,
configurable: true
});
Object.defineProperty(Multimap.prototype, "size", {
get: function() {
var sets = Array.from(this.valuesByKey.values());
return sets.reduce(function(size, set) {
return size + set.size;
}, 0);
},
enumerable: true,
configurable: true
});
Multimap.prototype.add = function(key, value) {
add(this.valuesByKey, key, value);
};
Multimap.prototype.delete = function(key, value) {
del(this.valuesByKey, key, value);
};
Multimap.prototype.has = function(key, value) {
var values = this.valuesByKey.get(key);
return values != null && values.has(value);
};
Multimap.prototype.hasKey = function(key) {
return this.valuesByKey.has(key);
};
Multimap.prototype.hasValue = function(value) {
var sets = Array.from(this.valuesByKey.values());
return sets.some(function(set) {
return set.has(value);
});
};
Multimap.prototype.getValuesForKey = function(key) {
var values = this.valuesByKey.get(key);
return values ? Array.from(values) : [];
};
Multimap.prototype.getKeysForValue = function(value) {
return Array.from(this.valuesByKey).filter(function(_a) {
var key = _a[0], values = _a[1];
return values.has(value);
}).map(function(_a) {
var key = _a[0], values = _a[1];
return key;
});
};
return Multimap;
}();
var __extends = undefined && undefined.__extends || function() {
var extendStatics = Object.setPrototypeOf || {
__proto__: []
} instanceof Array && function(d, b) {
d.__proto__ = b;
} || function(d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
};
return function(d, b) {
extendStatics(d, b);
function __() {
this.constructor = d;
}
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
}();
var IndexedMultimap = function(_super) {
__extends(IndexedMultimap, _super);
function IndexedMultimap() {
var _this = _super.call(this) || this;
_this.keysByValue = new Map();
return _this;
}
Object.defineProperty(IndexedMultimap.prototype, "values", {
get: function() {
return Array.from(this.keysByValue.keys());
},
enumerable: true,
configurable: true
});
IndexedMultimap.prototype.add = function(key, value) {
_super.prototype.add.call(this, key, value);
add(this.keysByValue, value, key);
};
IndexedMultimap.prototype.delete = function(key, value) {
_super.prototype.delete.call(this, key, value);
del(this.keysByValue, value, key);
};
IndexedMultimap.prototype.hasValue = function(value) {
return this.keysByValue.has(value);
};
IndexedMultimap.prototype.getKeysForValue = function(value) {
var set = this.keysByValue.get(value);
return set ? Array.from(set) : [];
};
return IndexedMultimap;
}(Multimap);
var TokenListObserver = function() {
function TokenListObserver(element, attributeName, delegate) {
this.attributeObserver = new AttributeObserver(element, attributeName, this);
this.delegate = delegate;
this.tokensByElement = new Multimap();
}
Object.defineProperty(TokenListObserver.prototype, "started", {
get: function() {
return this.attributeObserver.started;
},
enumerable: true,
configurable: true
});
TokenListObserver.prototype.start = function() {
this.attributeObserver.start();
};
TokenListObserver.prototype.stop = function() {
this.attributeObserver.stop();
};
TokenListObserver.prototype.refresh = function() {
this.attributeObserver.refresh();
};
Object.defineProperty(TokenListObserver.prototype, "element", {
get: function() {
return this.attributeObserver.element;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TokenListObserver.prototype, "attributeName", {
get: function() {
return this.attributeObserver.attributeName;
},
enumerable: true,
configurable: true
});
TokenListObserver.prototype.elementMatchedAttribute = function(element) {
this.tokensMatched(this.readTokensForElement(element));
};
TokenListObserver.prototype.elementAttributeValueChanged = function(element) {
var _a = this.refreshTokensForElement(element), unmatchedTokens = _a[0], matchedTokens = _a[1];
this.tokensUnmatched(unmatchedTokens);
this.tokensMatched(matchedTokens);
};
TokenListObserver.prototype.elementUnmatchedAttribute = function(element) {
this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));
};
TokenListObserver.prototype.tokensMatched = function(tokens) {
var _this = this;
tokens.forEach(function(token) {
return _this.tokenMatched(token);
});
};
TokenListObserver.prototype.tokensUnmatched = function(tokens) {
var _this = this;
tokens.forEach(function(token) {
return _this.tokenUnmatched(token);
});
};
TokenListObserver.prototype.tokenMatched = function(token) {
this.delegate.tokenMatched(token);
this.tokensByElement.add(token.element, token);
};
TokenListObserver.prototype.tokenUnmatched = function(token) {
this.delegate.tokenUnmatched(token);
this.tokensByElement.delete(token.element, token);
};
TokenListObserver.prototype.refreshTokensForElement = function(element) {
var previousTokens = this.tokensByElement.getValuesForKey(element);
var currentTokens = this.readTokensForElement(element);
var firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(function(_a) {
var previousToken = _a[0], currentToken = _a[1];
return !tokensAreEqual(previousToken, currentToken);
});
if (firstDifferingIndex == -1) {
return [ [], [] ];
} else {
return [ previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex) ];
}
};
TokenListObserver.prototype.readTokensForElement = function(element) {
var attributeName = this.attributeName;
var tokenString = element.getAttribute(attributeName) || "";
return parseTokenString(tokenString, {
element: element,
attributeName: attributeName
});
};
return TokenListObserver;
}();
function parseTokenString(tokenString, _a) {
var element = _a.element, attributeName = _a.attributeName;
return tokenString.trim().split(/\s+/).filter(function(content) {
return content.length;
}).map(function(content, index) {
return {
element: element,
attributeName: attributeName,
content: content,
index: index
};
});
}
function zip(left, right) {
var length = Math.max(left.length, right.length);
return Array.from({
length: length
}, function(_, index) {
return [ left[index], right[index] ];
});
}
function tokensAreEqual(left, right) {
return left && right && left.index == right.index && left.content == right.content;
}
var ValueListObserver = function() {
function ValueListObserver(element, attributeName, delegate) {
this.tokenListObserver = new TokenListObserver(element, attributeName, this);
this.delegate = delegate;
this.parseResultsByToken = new WeakMap();
this.valuesByTokenByElement = new WeakMap();
}
Object.defineProperty(ValueListObserver.prototype, "started", {
get: function() {
return this.tokenListObserver.started;
},
enumerable: true,
configurable: true
});
ValueListObserver.prototype.start = function() {
this.tokenListObserver.start();
};
ValueListObserver.prototype.stop = function() {
this.tokenListObserver.stop();
};
ValueListObserver.prototype.refresh = function() {
this.tokenListObserver.refresh();
};
Object.defineProperty(ValueListObserver.prototype, "element", {
get: function() {
return this.tokenListObserver.element;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ValueListObserver.prototype, "attributeName", {
get: function() {
return this.tokenListObserver.attributeName;
},
enumerable: true,
configurable: true
});
ValueListObserver.prototype.tokenMatched = function(token) {
var element = token.element;
var value = this.fetchParseResultForToken(token).value;
if (value) {
this.fetchValuesByTokenForElement(element).set(token, value);
this.delegate.elementMatchedValue(element, value);
}
};
ValueListObserver.prototype.tokenUnmatched = function(token) {
var element = token.element;
var value = this.fetchParseResultForToken(token).value;
if (value) {
this.fetchValuesByTokenForElement(element).delete(token);
this.delegate.elementUnmatchedValue(element, value);
}
};
ValueListObserver.prototype.fetchParseResultForToken = function(token) {
var parseResult = this.parseResultsByToken.get(token);
if (!parseResult) {
parseResult = this.parseToken(token);
this.parseResultsByToken.set(token, parseResult);
}
return parseResult;
};
ValueListObserver.prototype.fetchValuesByTokenForElement = function(element) {
var valuesByToken = this.valuesByTokenByElement.get(element);
if (!valuesByToken) {
valuesByToken = new Map();
this.valuesByTokenByElement.set(element, valuesByToken);
}
return valuesByToken;
};
ValueListObserver.prototype.parseToken = function(token) {
try {
var value = this.delegate.parseValueForToken(token);
return {
value: value
};
} catch (error) {
return {
error: error
};
}
};
return ValueListObserver;
}();
var BindingObserver = function() {
function BindingObserver(context, delegate) {
this.context = context;
this.delegate = delegate;
this.bindingsByAction = new Map();
}
BindingObserver.prototype.start = function() {
if (!this.valueListObserver) {
this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);
this.valueListObserver.start();
}
};
BindingObserver.prototype.stop = function() {
if (this.valueListObserver) {
this.valueListObserver.stop();
delete this.valueListObserver;
this.disconnectAllActions();
}
};
Object.defineProperty(BindingObserver.prototype, "element", {
get: function() {
return this.context.element;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BindingObserver.prototype, "identifier", {
get: function() {
return this.context.identifier;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BindingObserver.prototype, "actionAttribute", {
get: function() {
return this.schema.actionAttribute;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BindingObserver.prototype, "schema", {
get: function() {
return this.context.schema;
},
enumerable: true,
configurable: true
});
Object.defineProperty(BindingObserver.prototype, "bindings", {
get: function() {
return Array.from(this.bindingsByAction.values());
},
enumerable: true,
configurable: true
});
BindingObserver.prototype.connectAction = function(action) {
var binding = new Binding(this.context, action);
this.bindingsByAction.set(action, binding);
this.delegate.bindingConnected(binding);
};
BindingObserver.prototype.disconnectAction = function(action) {
var binding = this.bindingsByAction.get(action);
if (binding) {
this.bindingsByAction.delete(action);
this.delegate.bindingDisconnected(binding);
}
};
BindingObserver.prototype.disconnectAllActions = function() {
var _this = this;
this.bindings.forEach(function(binding) {
return _this.delegate.bindingDisconnected(binding);
});
this.bindingsByAction.clear();
};
BindingObserver.prototype.parseValueForToken = function(token) {
var action = Action.forToken(token);
if (action.identifier == this.identifier) {
return action;
}
};
BindingObserver.prototype.elementMatchedValue = function(element, action) {
this.connectAction(action);
};
BindingObserver.prototype.elementUnmatchedValue = function(element, action) {
this.disconnectAction(action);
};
return BindingObserver;
}();
var Context = function() {
function Context(module, scope) {
this.module = module;
this.scope = scope;
this.bindingObserver = new BindingObserver(this, this.dispatcher);
try {
this.controller = new module.controllerConstructor(this);
this.controller.initialize();
} catch (error) {
this.handleError(error, "initializing controller");
}
}
Context.prototype.connect = function() {
this.bindingObserver.start();
try {
this.controller.connect();
} catch (error) {
this.handleError(error, "connecting controller");
}
};
Context.prototype.disconnect = function() {
try {
this.controller.disconnect();
} catch (error) {
this.handleError(error, "disconnecting controller");
}
this.bindingObserver.stop();
};
Object.defineProperty(Context.prototype, "application", {
get: function() {
return this.module.application;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Context.prototype, "identifier", {
get: function() {
return this.module.identifier;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Context.prototype, "schema", {
get: function() {
return this.application.schema;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Context.prototype, "dispatcher", {
get: function() {
return this.application.dispatcher;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Context.prototype, "element", {
get: function() {
return this.scope.element;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Context.prototype, "parentElement", {
get: function() {
return this.element.parentElement;
},
enumerable: true,
configurable: true
});
Context.prototype.handleError = function(error, message, detail) {
if (detail === void 0) {
detail = {};
}
var _a = this, identifier = _a.identifier, controller = _a.controller, element = _a.element;
detail = Object.assign({
identifier: identifier,
controller: controller,
element: element
}, detail);
this.application.handleError(error, "Error " + message, detail);
};
return Context;
}();
var __extends$1 = undefined && undefined.__extends || function() {
var extendStatics = Object.setPrototypeOf || {
__proto__: []
} instanceof Array && function(d, b) {
d.__proto__ = b;
} || function(d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
};
return function(d, b) {
extendStatics(d, b);
function __() {
this.constructor = d;
}
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
}();
function blessDefinition(definition) {
return {
identifier: definition.identifier,
controllerConstructor: blessControllerConstructor(definition.controllerConstructor)
};
}
function blessControllerConstructor(controllerConstructor) {
var constructor = extend(controllerConstructor);
constructor.bless();
return constructor;
}
var extend = function() {
function extendWithReflect(constructor) {
function Controller() {
var _newTarget = this && this instanceof Controller ? this.constructor : void 0;
return Reflect.construct(constructor, arguments, _newTarget);
}
Controller.prototype = Object.create(constructor.prototype, {
constructor: {
value: Controller
}
});
Reflect.setPrototypeOf(Controller, constructor);
return Controller;
}
function testReflectExtension() {
var a = function() {
this.a.call(this);
};
var b = extendWithReflect(a);
b.prototype.a = function() {};
return new b();
}
try {
testReflectExtension();
return extendWithReflect;
} catch (error) {
return function(constructor) {
return function(_super) {
__extends$1(Controller, _super);
function Controller() {
return _super !== null && _super.apply(this, arguments) || this;
}
return Controller;
}(constructor);
};
}
}();
var Module = function() {
function Module(application, definition) {
this.application = application;
this.definition = blessDefinition(definition);
this.contextsByScope = new WeakMap();
this.connectedContexts = new Set();
}
Object.defineProperty(Module.prototype, "identifier", {
get: function() {
return this.definition.identifier;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Module.prototype, "controllerConstructor", {
get: function() {
return this.definition.controllerConstructor;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Module.prototype, "contexts", {
get: function() {
return Array.from(this.connectedContexts);
},
enumerable: true,
configurable: true
});
Module.prototype.connectContextForScope = function(scope) {
var context = this.fetchContextForScope(scope);
this.connectedContexts.add(context);
context.connect();
};
Module.prototype.disconnectContextForScope = function(scope) {
var context = this.contextsByScope.get(scope);
if (context) {
this.connectedContexts.delete(context);
context.disconnect();
}
};
Module.prototype.fetchContextForScope = function(scope) {
var context = this.contextsByScope.get(scope);
if (!context) {
context = new Context(this, scope);
this.contextsByScope.set(scope, context);
}
return context;
};
return Module;
}();
var DataMap = function() {
function DataMap(scope) {
this.scope = scope;
}
Object.defineProperty(DataMap.prototype, "element", {
get: function() {
return this.scope.element;
},
enumerable: true,
configurable: true
});
Object.defineProperty(DataMap.prototype, "identifier", {
get: function() {
return this.scope.identifier;
},
enumerable: true,
configurable: true
});
DataMap.prototype.get = function(key) {
key = this.getFormattedKey(key);
return this.element.getAttribute(key);
};
DataMap.prototype.set = function(key, value) {
key = this.getFormattedKey(key);
this.element.setAttribute(key, value);
return this.get(key);
};
DataMap.prototype.has = function(key) {
key = this.getFormattedKey(key);
return this.element.hasAttribute(key);
};
DataMap.prototype.delete = function(key) {
if (this.has(key)) {
key = this.getFormattedKey(key);
this.element.removeAttribute(key);
return true;
} else {
return false;
}
};
DataMap.prototype.getFormattedKey = function(key) {
return "data-" + this.identifier + "-" + dasherize(key);
};
return DataMap;
}();
function dasherize(value) {
return value.toString().replace(/([A-Z])/g, function(_, char) {
return "-" + char.toLowerCase();
});
}
function attributeValueContainsToken(attributeName, token) {
return "[" + attributeName + '~="' + token + '"]';
}
var TargetSet = function() {
function TargetSet(scope) {
this.scope = scope;
}
Object.defineProperty(TargetSet.prototype, "element", {
get: function() {
return this.scope.element;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TargetSet.prototype, "identifier", {
get: function() {
return this.scope.identifier;
},
enumerable: true,
configurable: true
});
Object.defineProperty(TargetSet.prototype, "schema", {
get: function() {
return this.scope.schema;
},
enumerable: true,
configurable: true
});
TargetSet.prototype.has = function(targetName) {
return this.find(targetName) != null;
};
TargetSet.prototype.find = function() {
var targetNames = [];
for (var _i = 0; _i < arguments.length; _i++) {
targetNames[_i] = arguments[_i];
}
var selector = this.getSelectorForTargetNames(targetNames);
return this.scope.findElement(selector);
};
TargetSet.prototype.findAll = function() {
var targetNames = [];
for (var _i = 0; _i < arguments.length; _i++) {
targetNames[_i] = arguments[_i];
}
var selector = this.getSelectorForTargetNames(targetNames);
return this.scope.findAllElements(selector);
};
TargetSet.prototype.getSelectorForTargetNames = function(targetNames) {
var _this = this;
return targetNames.map(function(targetName) {
return _this.getSelectorForTargetName(targetName);
}).join(", ");
};
TargetSet.prototype.getSelectorForTargetName = function(targetName) {
var targetDescriptor = this.identifier + "." + targetName;
return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);
};
return TargetSet;
}();
var Scope = function() {
function Scope(schema, identifier, element) {
this.schema = schema;
this.identifier = identifier;
this.element = element;
this.targets = new TargetSet(this);
this.data = new DataMap(this);
}
Scope.prototype.findElement = function(selector) {
return this.findAllElements(selector)[0];
};
Scope.prototype.findAllElements = function(selector) {
var head = this.element.matches(selector) ? [ this.element ] : [];
var tail = this.filterElements(Array.from(this.element.querySelectorAll(selector)));
return head.concat(tail);
};
Scope.prototype.filterElements = function(elements) {
var _this = this;
return elements.filter(function(element) {
return _this.containsElement(element);
});
};
Scope.prototype.containsElement = function(element) {
return element.closest(this.controllerSelector) === this.element;
};
Object.defineProperty(Scope.prototype, "controllerSelector", {
get: function() {
return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);
},
enumerable: true,
configurable: true
});
return Scope;
}();
var ScopeObserver = function() {
function ScopeObserver(element, schema, delegate) {
this.element = element;
this.schema = schema;
this.delegate = delegate;
this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);
this.scopesByIdentifierByElement = new WeakMap();
this.scopeReferenceCounts = new WeakMap();
}
ScopeObserver.prototype.start = function() {
this.valueListObserver.start();
};
ScopeObserver.prototype.stop = function() {
this.valueListObserver.stop();
};
Object.defineProperty(ScopeObserver.prototype, "controllerAttribute", {
get: function() {
return this.schema.controllerAttribute;
},
enumerable: true,
configurable: true
});
ScopeObserver.prototype.parseValueForToken = function(token) {
var element = token.element, identifier = token.content;
var scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);
var scope = scopesByIdentifier.get(identifier);
if (!scope) {
scope = new Scope(this.schema, identifier, element);
scopesByIdentifier.set(identifier, scope);
}
return scope;
};
ScopeObserver.prototype.elementMatchedValue = function(element, value) {
var referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;
this.scopeReferenceCounts.set(value, referenceCount);
if (referenceCount == 1) {
this.delegate.scopeConnected(value);
}
};
ScopeObserver.prototype.elementUnmatchedValue = function(element, value) {
var referenceCount = this.scopeReferenceCounts.get(value);
if (referenceCount) {
this.scopeReferenceCounts.set(value, referenceCount - 1);
if (referenceCount == 1) {
this.delegate.scopeDisconnected(value);
}
}
};
ScopeObserver.prototype.fetchScopesByIdentifierForElement = function(element) {
var scopesByIdentifier = this.scopesByIdentifierByElement.get(element);
if (!scopesByIdentifier) {
scopesByIdentifier = new Map();
this.scopesByIdentifierByElement.set(element, scopesByIdentifier);
}
return scopesByIdentifier;
};
return ScopeObserver;
}();
var Router = function() {
function Router(application) {
this.application = application;
this.scopeObserver = new ScopeObserver(this.element, this.schema, this);
this.scopesByIdentifier = new Multimap();
this.modulesByIdentifier = new Map();
}
Object.defineProperty(Router.prototype, "element", {
get: function() {
return this.application.element;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Router.prototype, "schema", {
get: function() {
return this.application.schema;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Router.prototype, "controllerAttribute", {
get: function() {
return this.schema.controllerAttribute;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Router.prototype, "modules", {
get: function() {
return Array.from(this.modulesByIdentifier.values());
},
enumerable: true,
configurable: true
});
Object.defineProperty(Router.prototype, "contexts", {
get: function() {
return this.modules.reduce(function(contexts, module) {
return contexts.concat(module.contexts);
}, []);
},
enumerable: true,
configurable: true
});
Router.prototype.start = function() {
this.scopeObserver.start();
};
Router.prototype.stop = function() {
this.scopeObserver.stop();
};
Router.prototype.loadDefinition = function(definition) {
this.unloadIdentifier(definition.identifier);
var module = new Module(this.application, definition);
this.connectModule(module);
};
Router.prototype.unloadIdentifier = function(identifier) {
var module = this.modulesByIdentifier.get(identifier);
if (module) {
this.disconnectModule(module);
}
};
Router.prototype.getContextForElementAndIdentifier = function(element, identifier) {
var module = this.modulesByIdentifier.get(identifier);
if (module) {
return module.contexts.find(function(context) {
return context.element == element;
});
}
};
Router.prototype.handleError = function(error, message, detail) {
this.application.handleError(error, message, detail);
};
Router.prototype.scopeConnected = function(scope) {
this.scopesByIdentifier.add(scope.identifier, scope);
var module = this.modulesByIdentifier.get(scope.identifier);
if (module) {
module.connectContextForScope(scope);
}
};
Router.prototype.scopeDisconnected = function(scope) {
this.scopesByIdentifier.delete(scope.identifier, scope);
var module = this.modulesByIdentifier.get(scope.identifier);
if (module) {
module.disconnectContextForScope(scope);
}
};
Router.prototype.connectModule = function(module) {
this.modulesByIdentifier.set(module.identifier, module);
var scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);
scopes.forEach(function(scope) {
return module.connectContextForScope(scope);
});
};
Router.prototype.disconnectModule = function(module) {
this.modulesByIdentifier.delete(module.identifier);
var scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);
scopes.forEach(function(scope) {
return module.disconnectContextForScope(scope);
});
};
return Router;
}();
var defaultSchema = {
controllerAttribute: "data-controller",
actionAttribute: "data-action",
targetAttribute: "data-target"
};
var __awaiter = undefined && undefined.__awaiter || function(thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function(resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator["throw"](value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done ? resolve(result.value) : new P(function(resolve) {
resolve(result.value);
}).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = undefined && undefined.__generator || function(thisArg, body) {
var _ = {
label: 0,
sent: function() {
if (t[0] & 1) throw t[1];
return t[1];
},
trys: [],
ops: []
}, f, y, t, g;
return g = {
next: verb(0),
throw: verb(1),
return: verb(2)
}, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
return this;
}), g;
function verb(n) {
return function(v) {
return step([ n, v ]);
};
}
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [ 0, t.value ];
switch (op[0]) {
case 0:
case 1:
t = op;
break;
case 4:
_.label++;
return {
value: op[1],
done: false
};
case 5:
_.label++;
y = op[1];
op = [ 0 ];
continue;
case 7:
op = _.ops.pop();
_.trys.pop();
continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
_ = 0;
continue;
}
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
_.label = op[1];
break;
}
if (op[0] === 6 && _.label < t[1]) {
_.label = t[1];
t = op;
break;
}
if (t && _.label < t[2]) {
_.label = t[2];
_.ops.push(op);
break;
}
if (t[2]) _.ops.pop();
_.trys.pop();
continue;
}
op = body.call(thisArg, _);
} catch (e) {
op = [ 6, e ];
y = 0;
} finally {
f = t = 0;
}
if (op[0] & 5) throw op[1];
return {
value: op[0] ? op[1] : void 0,
done: true
};
}
};
var Application = function() {
function Application(element, schema) {
if (element === void 0) {
element = document.documentElement;
}
if (schema === void 0) {
schema = defaultSchema;
}
this.element = element;
this.schema = schema;
this.dispatcher = new Dispatcher(this);
this.router = new Router(this);
}
Application.start = function(element, schema) {
var application = new Application(element, schema);
application.start();
return application;
};
Application.prototype.start = function() {
return __awaiter(this, void 0, void 0, function() {
return __generator(this, function(_a) {
switch (_a.label) {
case 0:
return [ 4, domReady() ];
case 1:
_a.sent();
this.router.start();
this.dispatcher.start();
return [ 2 ];
}
});
});
};
Application.prototype.stop = function() {
this.router.stop();
this.dispatcher.stop();
};
Application.prototype.register = function(identifier, controllerConstructor) {
this.load({
identifier: identifier,
controllerConstructor: controllerConstructor
});
};
Application.prototype.load = function(head) {
var _this = this;
var rest = [];
for (var _i = 1; _i < arguments.length; _i++) {
rest[_i - 1] = arguments[_i];
}
var definitions = Array.isArray(head) ? head : [ head ].concat(rest);
definitions.forEach(function(definition) {
return _this.router.loadDefinition(definition);
});
};
Application.prototype.unload = function(head) {
var _this = this;
var rest = [];
for (var _i = 1; _i < arguments.length; _i++) {
rest[_i - 1] = arguments[_i];
}
var identifiers = Array.isArray(head) ? head : [ head ].concat(rest);
identifiers.forEach(function(identifier) {
return _this.router.unloadIdentifier(identifier);
});
};
Object.defineProperty(Application.prototype, "controllers", {
get: function() {
return this.router.contexts.map(function(context) {
return context.controller;
});
},
enumerable: true,
configurable: true
});
Application.prototype.getControllerForElementAndIdentifier = function(element, identifier) {
var context = this.router.getContextForElementAndIdentifier(element, identifier);
return context ? context.controller : null;
};
Application.prototype.handleError = function(error, message, detail) {
console.error("%s\n\n%o\n\n%o", message, error, detail);
};
return Application;
}();
function domReady() {
return new Promise(function(resolve) {
if (document.readyState == "loading") {
document.addEventListener("DOMContentLoaded", resolve);
} else {
resolve();
}
});
}
function defineTargetProperties(constructor) {
var prototype = constructor.prototype;
var targetNames = getTargetNamesForConstructor(constructor);
targetNames.forEach(function(name) {
var _a;
return defineLinkedProperties(prototype, (_a = {}, _a[name + "Target"] = {
get: function() {
var target = this.targets.find(name);
if (target) {
return target;
} else {
throw new Error('Missing target element "' + this.identifier + "." + name + '"');
}
}
}, _a[name + "Targets"] = {
get: function() {
return this.targets.findAll(name);
}
}, _a["has" + capitalize(name) + "Target"] = {
get: function() {
return this.targets.has(name);
}
}, _a));
});
}
function getTargetNamesForConstructor(constructor) {
var ancestors = getAncestorsForConstructor(constructor);
return Array.from(ancestors.reduce(function(targetNames, constructor) {
getOwnTargetNamesForConstructor(constructor).forEach(function(name) {
return targetNames.add(name);
});
return targetNames;
}, new Set()));
}
function getAncestorsForConstructor(constructor) {
var ancestors = [];
while (constructor) {
ancestors.push(constructor);
constructor = Object.getPrototypeOf(constructor);
}
return ancestors;
}
function getOwnTargetNamesForConstructor(constructor) {
var definition = constructor["targets"];
return Array.isArray(definition) ? definition : [];
}
function defineLinkedProperties(object, properties) {
Object.keys(properties).forEach(function(name) {
if (!(name in object)) {
var descriptor = properties[name];
Object.defineProperty(object, name, descriptor);
}
});
}
function capitalize(name) {
return name.charAt(0).toUpperCase() + name.slice(1);
}
var Controller = function() {
function Controller(context) {
this.context = context;
}
Controller.bless = function() {
defineTargetProperties(this);
};
Object.defineProperty(Controller.prototype, "application", {
get: function() {
return this.context.application;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Controller.prototype, "scope", {
get: function() {
return this.context.scope;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Controller.prototype, "element", {
get: function() {
return this.scope.element;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Controller.prototype, "identifier", {
get: function() {
return this.scope.identifier;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Controller.prototype, "targets", {
get: function() {
return this.scope.targets;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Controller.prototype, "data", {
get: function() {
return this.scope.data;
},
enumerable: true,
configurable: true
});
Controller.prototype.initialize = function() {};
Controller.prototype.connect = function() {};
Controller.prototype.disconnect = function() {};
Controller.targets = [];
return Controller;
}();
exports.Application = Application;
exports.Context = Context;
exports.Controller = Controller;
exports.defaultSchema = defaultSchema;
Object.defineProperty(exports, "__esModule", {
value: true
});
});

17

package.json
{
"name": "stimulus",
"version": "1.0.1",
"version": "1.1.0-beta.1",
"description": "Stimulus JavaScript framework",

@@ -16,4 +16,4 @@ "repository": "https://github.com/stimulusjs/stimulus",

"dependencies": {
"@stimulus/core": "^1.0.1",
"@stimulus/webpack-helpers": "^1.0.0"
"@stimulus/core": "^1.1.0-beta.1",
"@stimulus/webpack-helpers": "^1.1.0-beta.1"
},

@@ -23,3 +23,5 @@ "scripts": {

"prepublishOnly": "yarn run build",
"build": "yarn exec webpack"
"clean": "rimraf dist",
"build": "rollup --config rollup.config.js",
"watch": "rollup --config rollup.config.js --watch"
},

@@ -30,4 +32,7 @@ "publishConfig": {

"devDependencies": {
"webpack": "^3.10.0"
}
"rollup": "^0.58.2",
"rollup-plugin-node-resolve": "^3.3.0",
"rollup-plugin-uglify": "^3.0.0"
},
"gitHead": "5869611e3e70f054ce21d12be83e2866382441c9"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc