senna_gem 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 857f63639fd6bd4c985e762e0a454a5bfde0ca46
4
+ data.tar.gz: 4bb8540eff9759d7e4b39037751a0162442e98b9
5
+ SHA512:
6
+ metadata.gz: a459375769f71a8e0c7b7498812e97e2b851d77939d6a7978ab50975738f1e85ca2e7a0f213f6c412c1dd824a2110d639ccce9cd095716a0799efdcdd87c7dae
7
+ data.tar.gz: 27a52c20762f4848a1beff4614d74f0fa5de1fdbd53daa4d537b8185bb228427159dea3b2d8f7d2bc2cdeaa616f15f85dd25df40c56f4a27ca91af3097c3bf6c
@@ -1,3 +1,3 @@
1
1
  module SennaGem
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/senna_gem.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = SennaGem::VERSION
9
9
  spec.authors = ["Fernando Aureliano"]
10
10
  spec.email = ["mail@fernandoaureliano.com"]
11
- spec.description = %q{This gem implement sennajs in your ruby project.}
11
+ spec.description = %q{This gem load sennajs in your ruby project.}
12
12
  spec.summary = %q{ }
13
13
  spec.homepage = "http://sennajs.com"
14
14
  spec.license = "MIT"
@@ -1,27 +1,10 @@
1
1
  /**
2
- * Senna - A blazing-fast Single Page Application engine
3
- * @author Eduardo Lundgren <edu@rdo.io>
4
- * @version v0.2.1
2
+ * Senna.js - A blazing-fast Single Page Application engine
3
+ * @author Liferay, Inc.
4
+ * @version v2.1.3
5
5
  * @link http://sennajs.com
6
- * @license BSD
6
+ * @license BSD-3-Clause
7
7
  */
8
- !function(n,e){"use strict";n.senna=n.senna||{},senna.append=function(n,e){return senna.isString(e)&&(e=senna.buildFragment(e)),n.appendChild(senna.parseScripts(e))},senna.bind=function(n,e){if(!n)throw new Error;if(Function.prototype.bind){var t=n.call.apply(n.bind,arguments);return function(){return t.apply(null,arguments)}}if(arguments.length>2){var r=Array.prototype.slice.call(arguments,2);return function(){var t=Array.prototype.slice.call(arguments);return Array.prototype.unshift.apply(t,r),n.apply(e,t)}}return function(){return n.apply(e,arguments)}},senna.buildFragment=function(n){var e=document.createElement("div");e.innerHTML="<br>"+n,e.removeChild(e.firstChild);for(var t=document.createDocumentFragment();e.firstChild;)t.appendChild(e.firstChild);return t},senna.debounce=function(n,e,t){var r;return function(){t||(t=this);var o=arguments;clearTimeout(r),r=setTimeout(function(){n.apply(t,o)},e)}},senna.getObjectByName=function(e,t){for(var r,o=e.split("."),a=t||n;r=o.shift();){if(!senna.isDefAndNotNull(a[r]))return null;a=a[r]}return a},senna.globalEval=function(e){if(e&&e.trim()){var t=n.execScript;t||(t=function(e){n.eval.call(n,e)}),t(e)}},senna.inherits=function(n,e){function t(){}t.prototype=e.prototype,n.superClass_=e.prototype,n.prototype=new t,n.prototype.constructor=n,n.base=function(n,t){var r=Array.prototype.slice.call(arguments,2);return e.prototype[t].apply(n,r)}},senna.isDef=function(n){return n!==e},senna.isDefAndNotNull=function(n){return senna.isDef(n)&&!senna.isNull(n)},senna.isElement=function(n){return"object"==typeof n&&1===n.nodeType},senna.isFunction=function(n){return"function"==typeof n},senna.isNull=function(n){return null===n},senna.isObject=function(n){var e=typeof n;return"object"===e&&null!==n||"function"===e},senna.isString=function(n){return"string"==typeof n},senna.match=function(n,e){if(!n||1!==n.nodeType)return!1;var t=Element.prototype,r=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector;if(r)return r.call(n,e);for(var o=document.querySelectorAll(e,n.parentNode),a=0;a<o.length;++a)if(o[a]===n)return!0;return!1},senna.parseScripts=function(n){for(var e=function(n){senna.globalEval(n.responseText||n.text||n.textContent||n.innerHTML||"")},t=Array.prototype.slice.call(n.querySelectorAll("script"));t.length;){var r=t.shift();if(r.setAttribute("type","text/parsed"),r.src){var o={"Content-Type":"text/javascript"};senna.request(r.src,"GET",o,null,!0).then(e)}else senna.async.nextTick(senna.bind(e,null,r))}return n},senna.remove=function(n){n.parentNode&&n.parentNode.removeChild(n)},senna.request=function(n,e,t,r,o){var a=new XMLHttpRequest,i=new senna.Promise(function(n,e){a.onload=function(){return 200===a.status?void n(a):void a.onerror()},a.onerror=function(){var n=new Error("Request error");n.xhr=a,e(n)}}).thenCatch(function(n){throw n}).thenAlways(function(){clearTimeout(s)});if(a.open(e,n,!o),t)for(var u in t)a.setRequestHeader(u,t[u]);if(a.send(null),senna.isDef(r))var s=setTimeout(function(){i.cancel("Request timeout")},r);return i},document.addEventListener("DOMContentLoaded",function(){senna.dataAttributeHandler=new senna.DataAttributeHandler(document.body)})}(window);
9
- !function(){"use strict";senna.EventEmitter=function(){},senna.EventEmitter.prototype.events_=null,senna.EventEmitter.prototype.addListener=function(t,e){if("function"!=typeof e)throw new TypeError("Listener must be a function");return this.events_||(this.events_={}),this.emit("newListener",t,e),this.events_[t]||(this.events_[t]=[]),this.events_[t].push(e),this},senna.EventEmitter.prototype.destroy=function(){},senna.EventEmitter.prototype.listeners=function(t){return this.events_&&this.events_[t]},senna.EventEmitter.prototype.emit=function(t){var e=this.listeners(t);if(e){for(var n=Array.prototype.slice.call(arguments,1),r=0;r<e.length;r++)e[r]&&e[r].apply(this,n);return!0}return!1},senna.EventEmitter.prototype.on=senna.EventEmitter.prototype.addListener,senna.EventEmitter.prototype.once=function(t,e){var n=this;n.on(t,function r(){n.removeListener(t,r),e.apply(this,arguments)})},senna.EventEmitter.prototype.removeAllListeners=function(t){return this.events_?(t?delete this.events_[t]:delete this.events_,this):this},senna.EventEmitter.prototype.removeListener=function(t,e){if("function"!=typeof e)throw new TypeError("Listener must be a function");if(!this.events_)return this;var n=this.listeners(t);if(Array.isArray(n)){var r=n.indexOf(e);if(0>r)return this;n.splice(r,1)}return this},senna.EventEmitter.prototype.setMaxListeners=function(){throw new Error("Not implemented")}}();
10
- !function(){"use strict";senna.Cacheable=function(){},senna.Cacheable.prototype.cache=null,senna.Cacheable.prototype.cacheable=!1,senna.Cacheable.prototype.addCache=function(e){return this.cacheable?this.cache=e:void 0,this},senna.Cacheable.prototype.clearCache=function(){return this.cache=null,this},senna.Cacheable.prototype.destroy=function(){this.clearCache()},senna.Cacheable.prototype.getCache=function(){return this.cache},senna.Cacheable.prototype.isCacheable=function(){return this.cacheable},senna.Cacheable.prototype.setCacheable=function(e){e||this.clearCache(),this.cacheable=e}}();
11
- !function(){"use strict";senna.DataAttributeHandler=function(e){if(!senna.isElement(e))throw new Error("Base element not specified.");this.setBaseElement(e),this.initApp_()},senna.DataAttributeHandler.prototype.app=null,senna.DataAttributeHandler.prototype.baseElement=null,senna.DataAttributeHandler.prototype.getApp=function(){return this.app},senna.DataAttributeHandler.prototype.getBaseElement=function(){return this.baseElement},senna.DataAttributeHandler.prototype.initApp_=function(){var e=this.baseElement;if(!e.hasAttribute("data-senna"))return void void 0;void 0,this.app=new senna.App;var t=e.getAttribute("data-senna-basepath");senna.isNull(t)||(this.app.setBasePath(t),void 0);var n=e.getAttribute("data-senna-link-selector");senna.isNull(n)||(this.app.setLinkSelector(n),void 0),this.scanSurfaces(),this.scanRoutes()},senna.DataAttributeHandler.prototype.makeDefaultRoute_=function(){var e=document.createElement("link");return e.href="regex:.*",e.rel="senna-route",e.type="senna.HtmlScreen",e},senna.DataAttributeHandler.prototype.scanRoutes=function(){var e=document.querySelectorAll('link[rel="senna-route"]');0===e.length&&(void 0,e=[this.makeDefaultRoute_()]);for(var t=0;t<e.length;t++){var n=e[t];if(!n.hasAttribute("senna-parsed")){var a=n.getAttribute("href"),s=n.getAttribute("type");senna.isDefAndNotNull(a)&&senna.isDefAndNotNull(s)&&(0===a.indexOf("regex:")&&(a=new RegExp(a.substring(6))),this.app.addRoutes(new senna.Route(a,senna.getObjectByName(s))),n.setAttribute("data-parsed",""),void 0)}}},senna.DataAttributeHandler.prototype.scanSurfaces=function(){for(var e=this.baseElement.querySelectorAll("[data-senna-surface]"),t=0;t<e.length;t++){var n=e[t].id;if(!n)throw new Error("Surface element id not specified.");this.app.surfaces[n]||(this.app.addSurfaces(n),void 0)}},senna.DataAttributeHandler.prototype.setApp=function(e){this.app=e},senna.DataAttributeHandler.prototype.setBaseElement=function(e){this.baseElement=e}}();
12
- !function(t){"use strict";senna.App=function(){senna.App.base(this,"constructor"),this.routes=[],this.surfaces={},this.screens={},this.docClickEventHandler_=senna.bind(this.onDocClick_,this),this.loadEventHandler_=senna.bind(this.onLoad_,this),this.popstateEventHandler_=senna.bind(this.onPopstate_,this),this.scrollEventHandler_=senna.debounce(this.onScroll_,50,this),this.on("startNavigate",this.onStartNavigate_),document.addEventListener("click",this.docClickEventHandler_,!1),t.addEventListener("load",this.loadEventHandler_,!1),t.addEventListener("popstate",this.popstateEventHandler_,!1),document.addEventListener("scroll",this.scrollEventHandler_,!1)},senna.inherits(senna.App,senna.EventEmitter),senna.App.prototype.activeScreen=null,senna.App.prototype.activePath=null,senna.App.prototype.basePath="",senna.App.prototype.captureHistoryScrollPosition=!0,senna.App.prototype.defaultTitle="",senna.App.prototype.linkSelector="a",senna.App.prototype.loadingCssClass="senna-loading",senna.App.prototype.syncScrollLeft=0,senna.App.prototype.syncScrollTop=0,senna.App.prototype.pendingNavigate=null,senna.App.prototype.routes=null,senna.App.prototype.screens=null,senna.App.prototype.scrollHandle=null,senna.App.prototype.skipLoadPopstate=!1,senna.App.prototype.surfaces=null,senna.App.prototype.updateScrollPosition=!0,senna.App.prototype.addRoutes=function(t){Array.isArray(t)||(t=[t]);for(var e=0;e<t.length;e++){var n=t[e];n instanceof senna.Route||(n=new senna.Route(n.path,n.handler)),this.routes.push(n)}return this},senna.App.prototype.addSurfaces=function(t){Array.isArray(t)||(t=[t]);for(var e=0;e<t.length;e++){var n=t[e];senna.isString(n)&&(n=new senna.Surface(n)),this.surfaces[n.getId()]=n}return this},senna.App.prototype.createScreenInstance=function(t,e){var n;t===this.activePath&&(void 0,n=this.screens[t],delete this.screens[t]);var o=this.screens[t];if(!o){void 0;var s=e.getHandler();o=s===senna.Screen||senna.Screen.isImplementedBy(s.prototype)?new s:s(e)||new senna.Screen,n&&o.addCache(n.getCache())}return o},senna.App.prototype.destroy=function(){senna.App.base(this,"destroy");for(var e in this.surfaces)this.surfaces[e].remove(this.activeScreen),this.surfaces[e].show();return t.removeEventListener("load",this.loadEventHandler_,!1),t.removeEventListener("popstate",this.popstateEventHandler_,!1),document.removeEventListener("click",this.docClickEventHandler_,!1),document.removeEventListener("scroll",this.scrollEventHandler_,!1),this},senna.App.prototype.dispatch=function(){return this.navigate(t.location.pathname+t.location.search+t.location.hash,!0)},senna.App.prototype.doNavigate_=function(t,e){var n=this;if(n.activeScreen&&n.activeScreen.beforeDeactivate())return this.pendingNavigate=senna.Promise.reject(new senna.Promise.CancellationError("Cancelled by active screen")),this.pendingNavigate;var o=this.findRoute(t);if(!o)return this.pendingNavigate=senna.Promise.reject(new senna.Promise.CancellationError("No route for "+t)),this.pendingNavigate;t===this.activePath&&(e=!0),void 0;var s=this.createScreenInstance(t,o);return this.pendingNavigate=senna.Promise.resolve().then(function(){return s.load(t)}).then(function(t){var e=s.getId();for(var o in n.surfaces){var a=n.surfaces[o];a.addContent(e,s.getSurfaceContent(o,t))}return n.activeScreen&&n.activeScreen.deactivate(),s.flip(n.surfaces)}).then(function(){n.finalizeNavigate_(t,s,e)}).thenCatch(function(e){throw n.handleNavigateError_(t,s,e),e}),this.pendingNavigate},senna.App.prototype.finalizeNavigate_=function(t,e,n){var o=this.activeScreen,s=e.getTitle()||this.getDefaultTitle();this.updateHistory_(s,t,n),this.syncScrollPosition_(n),document.title=s,e.activate(),o&&!o.isCacheable()&&this.removeScreen_(this.activePath,o),this.activePath=t,this.activeScreen=e,this.screens[t]=e,this.pendingNavigate=null,this.captureHistoryScrollPosition=!0,void 0},senna.App.prototype.findRoute=function(e){var n=this.basePath,o=e.lastIndexOf("#");if(o>-1&&(e=e.substr(0,o),e===t.location.pathname+t.location.search))return null;e=e.substr(n.length);for(var s=0;s<this.routes.length;s++){var a=this.routes[s];if(a.matchesPath(e))return a}return null},senna.App.prototype.getBasePath=function(){return this.basePath},senna.App.prototype.getDefaultTitle=function(){return this.defaultTitle},senna.App.prototype.getLinkSelector=function(){return this.linkSelector},senna.App.prototype.getLoadingCssClass=function(){return this.loadingCssClass},senna.App.prototype.getUpdateScrollPosition=function(){return this.updateScrollPosition},senna.App.prototype.handleNavigateError_=function(t,e,n){void 0,this.removeScreen_(t,e),this.pendingNavigate=null},senna.App.prototype.isLinkSameOrigin_=function(e){return e===t.location.hostname},senna.App.prototype.isSameBasePath_=function(t){return 0===t.indexOf(this.basePath)},senna.App.prototype.lockHistoryScrollPosition_=function(){var e=t.history.state;if(e){var n=!1,o=function(){document.removeEventListener("scroll",o,!1),n||(t.scrollTo(e.scrollLeft,e.scrollTop),n=!0)};senna.async.nextTick(o),document.addEventListener("scroll",o,!1)}},senna.App.prototype.navigate=function(t,e){return this.stopPending_(),this.emit("startNavigate",{path:t,replaceHistory:!!e}),this.pendingNavigate},senna.App.prototype.prefetch=function(t){var e=this,n=this.findRoute(t);if(!n)return senna.Promise.reject(new senna.Promise.CancellationError("No route for "+t));void 0;var o=this.createScreenInstance(t,n),s=senna.Promise.resolve().then(function(){return o.load(t)}).then(function(){e.screens[t]=o}).thenCatch(function(n){throw e.removeScreen_(t,o),n});return s},senna.App.prototype.onDocClick_=function(t){if(t.altKey||t.ctrlKey||t.metaKey||t.shiftKey||t.button)return void void 0;for(var e=t.target;e&&"A"!==e.tagName;)e=e.parentNode;if(e){if(!senna.match(e,this.linkSelector))return void void 0;var n=e.hostname,o=e.pathname+e.search+e.hash,s=!1;if(!this.isLinkSameOrigin_(n))return void void 0;if(!this.isSameBasePath_(o))return void void 0;if(!this.findRoute(o))return void void 0;this.navigate(o).thenCatch(function(){s=!0}),s||t.preventDefault()}},senna.App.prototype.onLoad_=function(){var t=this;this.skipLoadPopstate=!0,setTimeout(function(){t.skipLoadPopstate=!1},0)},senna.App.prototype.onPopstate_=function(e){var n=e.state;if(null===n||n.isNullState){if(this.skipLoadPopstate)return;if(!t.location.hash)return void t.location.reload()}n&&n.senna&&(void 0,this.syncScrollTop=n.scrollTop,this.syncScrollLeft=n.scrollLeft,this.lockHistoryScrollPosition_(),this.navigate(n.path,!0))},senna.App.prototype.onScroll_=function(){this.captureHistoryScrollPosition&&this.storeScrollPosition_(t.pageXOffset,t.pageYOffset)},senna.App.prototype.onStartNavigate_=function(e){var n=this,o={};this.captureHistoryScrollPosition=!1,this.storeScrollPosition_(t.pageXOffset,t.pageYOffset),document.documentElement.classList.add(this.loadingCssClass),this.pendingNavigate=this.doNavigate_(e.path,e.replaceHistory).thenCatch(function(t){throw n.stopPending_(),o.error=t,t}).thenAlways(function(){o.path=e.path,n.emit("endNavigate",o),document.documentElement.classList.remove(n.loadingCssClass)})},senna.App.prototype.removeScreen_=function(t,e){var n=e.getId();for(var o in this.surfaces)this.surfaces[o].remove(n);e.destroy(),delete this.screens[t]},senna.App.prototype.setBasePath=function(t){this.basePath=t},senna.App.prototype.setDefaultTitle=function(t){this.defaultTitle=t},senna.App.prototype.setLinkSelector=function(t){this.linkSelector=t},senna.App.prototype.setLoadingCssClass=function(t){this.loadingCssClass=t},senna.App.prototype.setUpdateScrollPosition=function(t){this.updateScrollPosition=t},senna.App.prototype.stopPending_=function(){this.pendingNavigate&&(this.pendingNavigate.cancel("Cancel pending navigation"),this.pendingNavigate=null)},senna.App.prototype.updateHistory_=function(e,n,o){var s={path:n,senna:!0};o?t.history.replaceState(s,e,n):t.history.pushState(s,e,n)},senna.App.prototype.storeScrollPosition_=function(e,n){var o=t.history.state||{};senna.isNull(t.history.state)&&(o.isNullState=!0),o.scrollLeft=e,o.scrollTop=n,t.history.replaceState(o,null,null)},senna.App.prototype.syncScrollPosition_=function(e){var n=e?this.syncScrollLeft:0,o=e?this.syncScrollTop:0;this.updateScrollPosition&&t.scrollTo(n,o),this.storeScrollPosition_(n,o)}}(window);
13
- !function(){"use strict";senna.Route=function(t,n){if(!senna.isDef(t))throw new Error("Route path not specified.");if(!senna.isFunction(n))throw new Error("Route handler is not a function.");this.setPath(t),this.setHandler(n)},senna.Route.prototype.path=null,senna.Route.prototype.handler=null,senna.Route.prototype.getHandler=function(){return this.handler},senna.Route.prototype.getPath=function(){return this.path},senna.Route.prototype.matchesPath=function(t){var n=this.path;return senna.isString(n)?t===n:senna.isFunction(n)?n(t):n instanceof RegExp?t.search(n)>-1:null},senna.Route.prototype.setHandler=function(t){this.handler=t},senna.Route.prototype.setPath=function(t){this.path=t}}();
14
- !function(){"use strict";senna.Surface=function(t){if(!t)throw new Error("Surface element id not specified.");this.setId(t)},senna.Surface.DEFAULT="default",senna.Surface.TRANSITION=function(t,e){t&&(t.style.display="none",t.classList.remove("flipped")),e&&(e.style.display="block",e.classList.add("flipped"))},senna.Surface.prototype.activeChild=null,senna.Surface.prototype.defaultChild=null,senna.Surface.prototype.el=null,senna.Surface.prototype.id=null,senna.Surface.prototype.transitionFn=null,senna.Surface.prototype.addContent=function(t,e){if(!e)return this.getChild(t);void 0;var n=this.getEl(),i=this.createChild(t);return senna.append(i,e),this.transition(i,null),n&&senna.append(n,i),i},senna.Surface.prototype.createChild=function(t){var e=document.createElement("div");return e.setAttribute("id",this.makeId_(t)),e},senna.Surface.prototype.getEl=function(t){return this.el?this.el:(this.el=document.getElementById(t||this.id),this.el)},senna.Surface.prototype.getId=function(){return this.id},senna.Surface.prototype.getChild=function(t){return document.getElementById(this.makeId_(t))},senna.Surface.prototype.getTransitionFn=function(){return this.transitionFn},senna.Surface.prototype.makeId_=function(t){return this.id+"-"+t},senna.Surface.prototype.setId=function(t){this.id=t},senna.Surface.prototype.setTransitionFn=function(t){this.transitionFn=t},senna.Surface.prototype.show=function(t){this.defaultChild||(this.defaultChild=this.addContent(senna.Surface.DEFAULT)),this.activeChild||(this.activeChild=this.defaultChild);var e=this.activeChild,n=this.getChild(t);n||(n=this.defaultChild),e&&e!==n&&senna.remove(e);var i=this.getEl();i&&n&&!n.parentNode&&senna.append(i,n);var a=this.transition(e,n);return this.activeChild=n,a},senna.Surface.prototype.remove=function(t){var e=this.getChild(t);e&&senna.remove(e)},senna.Surface.prototype.toString=function(){return this.id},senna.Surface.prototype.transition=function(t,e){var n=this.transitionFn||senna.Surface.TRANSITION;return senna.Promise.resolve(n.call(this,t,e))}}();
15
- !function(){"use strict";senna.Screen=function(){senna.Screen.base(this,"constructor"),this.setId(senna.Screen.uniqueIdCounter++)},senna.inherits(senna.Screen,senna.Cacheable),senna.Screen.isImplementedBy=function(e){return e instanceof senna.Screen},senna.Screen.uniqueIdCounter=+new Date,senna.Screen.prototype.id=null,senna.Screen.prototype.title=null,senna.Screen.prototype.activate=function(){void 0},senna.Screen.prototype.beforeDeactivate=function(){void 0},senna.Screen.prototype.flip=function(e){void 0;var n=[];for(var t in e)n.push(e[t].show(this.id));return senna.Promise.all(n)},senna.Screen.prototype.deactivate=function(){void 0},senna.Screen.prototype.destroy=function(){senna.Screen.base(this,"destroy"),void 0},senna.Screen.prototype.getId=function(){return this.id},senna.Screen.prototype.getSurfaceContent=function(){void 0},senna.Screen.prototype.getTitle=function(){return this.title},senna.Screen.prototype.load=function(){void 0},senna.Screen.prototype.setId=function(e){this.id="screen_"+String(e)},senna.Screen.prototype.setTitle=function(e){this.title=e},senna.Screen.prototype.toString=function(){return this.id}}();
16
- !function(){"use strict";senna.RequestScreen=function(){senna.RequestScreen.base(this,"constructor")},senna.inherits(senna.RequestScreen,senna.Screen),senna.RequestScreen.prototype.cacheable=!0,senna.RequestScreen.prototype.httpHeaders={"X-PJAX":"true","X-Requested-With":"XMLHttpRequest"},senna.RequestScreen.prototype.httpMethod="GET",senna.RequestScreen.prototype.request=null,senna.RequestScreen.prototype.timeout=3e4,senna.RequestScreen.prototype.abortRequest=function(){this.request&&this.request.abort()},senna.RequestScreen.prototype.getHttpHeaders=function(){return this.httpHeaders},senna.RequestScreen.prototype.getHttpMethod=function(){return this.httpMethod},senna.RequestScreen.prototype.getRequest=function(){return this.request},senna.RequestScreen.prototype.getTimeout=function(){return this.timeout},senna.RequestScreen.prototype.load=function(e){senna.RequestScreen.base(this,"load",e);var t=this,n=this.getCache();return senna.isDefAndNotNull(n)?senna.Promise.resolve(n):senna.request(e,this.httpMethod,this.httpHeaders,this.timeout).then(function(e){return t.setRequest(e),e.responseText})},senna.RequestScreen.prototype.setHttpHeaders=function(e){this.httpHeaders=e},senna.RequestScreen.prototype.setHttpMethod=function(e){this.httpMethod=e},senna.RequestScreen.prototype.setRequest=function(e){this.request=e},senna.RequestScreen.prototype.setTimeout=function(e){this.timeout=e}}();
17
- !function(){"use strict";senna.HtmlScreen=function(){senna.HtmlScreen.base(this,"constructor")},senna.inherits(senna.HtmlScreen,senna.RequestScreen),senna.HtmlScreen.prototype.titleSelector="title",senna.HtmlScreen.prototype.getSurfaceContent=function(e,t){var n=t.querySelector("#"+e);return n?n.innerHTML:void 0},senna.HtmlScreen.prototype.getTitleSelector=function(){return this.titleSelector},senna.HtmlScreen.prototype.load=function(e){var t=this,n=senna.HtmlScreen.base(this,"load",e);return n.then(function(e){return t.resolveContent(e)}).thenCatch(function(e){throw t.abortRequest(),e})},senna.HtmlScreen.prototype.resolveContent=function(e){if(senna.isString(e)){var t=document.createElement("div");t.innerHTML=e,e=t}var n=e.querySelector(this.titleSelector);return n&&this.setTitle(n.innerHTML.trim()),this.addCache(e),e},senna.HtmlScreen.prototype.setTitleSelector=function(e){this.titleSelector=e}}();
18
- /*!
19
- * Promises polyfill based on Google's Closure Library promises.
20
- *
21
- * Copyright 2013 The Closure Library Authors. All Rights Reserved.
22
- *
23
- * NOTE(eduardo): Promise support is not ready on all supported browsers,
24
- * therefore senna.js is temporarily using Google's promises as polyfill. It
25
- * supports cancellable promises and has clean and fast implementation.
26
- */
27
- !function(n){senna.Thenable=function(){},senna.Thenable.prototype.then=function(){},senna.Thenable.IMPLEMENTED_BY_PROP="$goog_Thenable",senna.Thenable.addImplementation=function(n){n.prototype.then=n.prototype.then,n.prototype.$goog_Thenable=!0},senna.Thenable.isImplementedBy=function(n){if(!n)return!1;try{return!!n.$goog_Thenable}catch(e){return!1}},senna.partial=function(n){var e=Array.prototype.slice.call(arguments,1);return function(){var t=e.slice();return t.push.apply(t,arguments),n.apply(this,t)}},senna.async={},senna.async.throwException=function(n){senna.async.nextTick(function(){throw n})},senna.async.run=function(n,e){senna.async.run.workQueueScheduled_||(senna.async.nextTick(senna.async.run.processWorkQueue),senna.async.run.workQueueScheduled_=!0),senna.async.run.workQueue_.push(new senna.async.run.WorkItem_(n,e))},senna.async.run.workQueueScheduled_=!1,senna.async.run.workQueue_=[],senna.async.run.processWorkQueue=function(){for(;senna.async.run.workQueue_.length;){var n=senna.async.run.workQueue_;senna.async.run.workQueue_=[];for(var e=0;e<n.length;e++){var t=n[e];try{t.fn.call(t.scope)}catch(a){senna.async.throwException(a)}}}senna.async.run.workQueueScheduled_=!1},senna.async.run.WorkItem_=function(n,e){this.fn=n,this.scope=e},senna.async.nextTick=function(e,t){var a=e;return t&&(a=senna.bind(e,t)),a=senna.async.nextTick.wrapCallback_(a),senna.isFunction(n.setImmediate)?void n.setImmediate(a):(senna.async.nextTick.setImmediate_||(senna.async.nextTick.setImmediate_=senna.async.nextTick.getSetImmediateEmulator_()),void senna.async.nextTick.setImmediate_(a))},senna.async.nextTick.setImmediate_=null,senna.async.nextTick.getSetImmediateEmulator_=function(){var e=n.MessageChannel;if("undefined"==typeof e&&"undefined"!=typeof n&&n.postMessage&&n.addEventListener&&(e=function(){var n=document.createElement("iframe");n.style.display="none",n.src="",document.documentElement.appendChild(n);var e=n.contentWindow,t=e.document;t.open(),t.write(""),t.close();var a="callImmediate"+Math.random(),s=e.location.protocol+"//"+e.location.host,i=senna.bind(function(n){(n.origin===s||n.data===a)&&this.port1.onmessage()},this);e.addEventListener("message",i,!1),this.port1={},this.port2={postMessage:function(){e.postMessage(a,s)}}}),"undefined"!=typeof e){var t=new e,a={},s=a;return t.port1.onmessage=function(){a=a.next;var n=a.cb;a.cb=null,n()},function(n){s.next={cb:n},s=s.next,t.port2.postMessage(0)}}return"undefined"!=typeof document&&"onreadystatechange"in document.createElement("script")?function(n){var e=document.createElement("script");e.onreadystatechange=function(){e.onreadystatechange=null,e.parentNode.removeChild(e),e=null,n(),n=null},document.documentElement.appendChild(e)}:function(n){setTimeout(n,0)}},senna.async.nextTick.wrapCallback_=function(n){return n},senna.Promise=function(n,e){this.state_=senna.Promise.State_.PENDING,this.result_=void 0,this.parent_=null,this.callbackEntries_=null,this.executing_=!1,senna.Promise.UNHANDLED_REJECTION_DELAY>0?this.unhandledRejectionId_=0:0===senna.Promise.UNHANDLED_REJECTION_DELAY&&(this.hadUnhandledRejection_=!1);try{var t=this;n.call(e,function(n){t.resolve_(senna.Promise.State_.FULFILLED,n)},function(n){t.resolve_(senna.Promise.State_.REJECTED,n)})}catch(a){this.resolve_(senna.Promise.State_.REJECTED,a)}},senna.Promise.UNHANDLED_REJECTION_DELAY=0,senna.Promise.State_={PENDING:0,BLOCKED:1,FULFILLED:2,REJECTED:3},senna.Promise.CallbackEntry_=null,senna.Promise.resolve=function(n){return new senna.Promise(function(e){e(n)})},senna.Promise.reject=function(n){return new senna.Promise(function(e,t){t(n)})},senna.Promise.race=function(n){return new senna.Promise(function(e,t){n.length||e(void 0);for(var a,s=0;a=n[s];s++)a.then(e,t)})},senna.Promise.all=function(n){return new senna.Promise(function(e,t){var a=n.length,s=[];if(!a)return void e(s);for(var i,o=function(n,t){a--,s[n]=t,0===a&&e(s)},r=function(n){t(n)},c=0;i=n[c];c++)i.then(senna.partial(o,c),r)})},senna.Promise.firstFulfilled=function(n){return new senna.Promise(function(e,t){var a=n.length,s=[];if(!a)return void e(void 0);for(var i,o=function(n){e(n)},r=function(n,e){a--,s[n]=e,0===a&&t(s)},c=0;i=n[c];c++)i.then(o,senna.partial(r,c))})},senna.Promise.prototype.then=function(n,e,t){return this.addChildPromise_(senna.isFunction(n)?n:null,senna.isFunction(e)?e:null,t)},senna.Thenable.addImplementation(senna.Promise),senna.Promise.prototype.thenAlways=function(n,e){var t=function(){try{n.call(e)}catch(t){senna.Promise.handleRejection_.call(null,t)}};return this.addCallbackEntry_({child:null,onRejected:t,onFulfilled:t}),this},senna.Promise.prototype.thenCatch=function(n,e){return this.addChildPromise_(null,n,e)},senna.Promise.prototype.cancel=function(n){this.state_===senna.Promise.State_.PENDING&&senna.async.run(function(){var e=new senna.Promise.CancellationError(n);this.cancelInternal_(e)},this)},senna.Promise.prototype.cancelInternal_=function(n){this.state_===senna.Promise.State_.PENDING&&(this.parent_?this.parent_.cancelChild_(this,n):this.resolve_(senna.Promise.State_.REJECTED,n))},senna.Promise.prototype.cancelChild_=function(n,e){if(this.callbackEntries_){for(var t,a=0,s=-1,i=0;t=this.callbackEntries_[i];i++){var o=t.child;if(o&&(a++,o===n&&(s=i),s>=0&&a>1))break}if(s>=0)if(this.state_===senna.Promise.State_.PENDING&&1===a)this.cancelInternal_(e);else{var r=this.callbackEntries_.splice(s,1)[0];this.executeCallback_(r,senna.Promise.State_.REJECTED,e)}}},senna.Promise.prototype.addCallbackEntry_=function(n){this.callbackEntries_&&this.callbackEntries_.length||this.state_!==senna.Promise.State_.FULFILLED&&this.state_!==senna.Promise.State_.REJECTED||this.scheduleCallbacks_(),this.callbackEntries_||(this.callbackEntries_=[]),this.callbackEntries_.push(n)},senna.Promise.prototype.addChildPromise_=function(n,e,t){var a={child:null,onFulfilled:null,onRejected:null};return a.child=new senna.Promise(function(s,i){a.onFulfilled=n?function(e){try{var a=n.call(t,e);s(a)}catch(o){i(o)}}:s,a.onRejected=e?function(n){try{var a=e.call(t,n);!senna.isDef(a)&&n instanceof senna.Promise.CancellationError?i(n):s(a)}catch(o){i(o)}}:i}),a.child.parent_=this,this.addCallbackEntry_(a),a.child},senna.Promise.prototype.unblockAndFulfill_=function(n){if(this.state_!==senna.Promise.State_.BLOCKED)throw new Error("Promise is not blocked.");this.state_=senna.Promise.State_.PENDING,this.resolve_(senna.Promise.State_.FULFILLED,n)},senna.Promise.prototype.unblockAndReject_=function(n){if(this.state_!==senna.Promise.State_.BLOCKED)throw new Error("Promise is not blocked.");this.state_=senna.Promise.State_.PENDING,this.resolve_(senna.Promise.State_.REJECTED,n)},senna.Promise.prototype.resolve_=function(n,e){if(this.state_===senna.Promise.State_.PENDING){if(this===e)n=senna.Promise.State_.REJECTED,e=new TypeError("Promise cannot resolve to itself");else{if(senna.Thenable.isImplementedBy(e))return e=e,this.state_=senna.Promise.State_.BLOCKED,void e.then(this.unblockAndFulfill_,this.unblockAndReject_,this);if(senna.isObject(e))try{var t=e.then;if(senna.isFunction(t))return void this.tryThen_(e,t)}catch(a){n=senna.Promise.State_.REJECTED,e=a}}this.result_=e,this.state_=n,this.scheduleCallbacks_(),n!==senna.Promise.State_.REJECTED||e instanceof senna.Promise.CancellationError||senna.Promise.addUnhandledRejection_(this,e)}},senna.Promise.prototype.tryThen_=function(n,e){this.state_=senna.Promise.State_.BLOCKED;var t=this,a=!1,s=function(n){a||(a=!0,t.unblockAndFulfill_(n))},i=function(n){a||(a=!0,t.unblockAndReject_(n))};try{e.call(n,s,i)}catch(o){i(o)}},senna.Promise.prototype.scheduleCallbacks_=function(){this.executing_||(this.executing_=!0,senna.async.run(this.executeCallbacks_,this))},senna.Promise.prototype.executeCallbacks_=function(){for(;this.callbackEntries_&&this.callbackEntries_.length;){var n=this.callbackEntries_;this.callbackEntries_=[];for(var e=0;e<n.length;e++)this.executeCallback_(n[e],this.state_,this.result_)}this.executing_=!1},senna.Promise.prototype.executeCallback_=function(n,e,t){e===senna.Promise.State_.FULFILLED?n.onFulfilled(t):(this.removeUnhandledRejection_(),n.onRejected(t))},senna.Promise.prototype.removeUnhandledRejection_=function(){var n;if(senna.Promise.UNHANDLED_REJECTION_DELAY>0)for(n=this;n&&n.unhandledRejectionId_;n=n.parent_)clearTimeout(n.unhandledRejectionId_),n.unhandledRejectionId_=0;else if(0===senna.Promise.UNHANDLED_REJECTION_DELAY)for(n=this;n&&n.hadUnhandledRejection_;n=n.parent_)n.hadUnhandledRejection_=!1},senna.Promise.addUnhandledRejection_=function(n,e){senna.Promise.UNHANDLED_REJECTION_DELAY>0?n.unhandledRejectionId_=setTimeout(function(){senna.Promise.handleRejection_.call(null,e)},senna.Promise.UNHANDLED_REJECTION_DELAY):0===senna.Promise.UNHANDLED_REJECTION_DELAY&&(n.hadUnhandledRejection_=!0,senna.async.run(function(){n.hadUnhandledRejection_&&senna.Promise.handleRejection_.call(null,e)}))},senna.Promise.handleRejection_=senna.async.throwException,senna.Promise.setUnhandledRejectionHandler=function(n){senna.Promise.handleRejection_=n},senna.Promise.CancellationError=function(n){senna.Promise.CancellationError.base(this,"constructor",n),n&&(this.message=n)},senna.inherits(senna.Promise.CancellationError,Error),senna.Promise.CancellationError.prototype.name="cancel"}(window);
8
+ (function(){this.senna=this.senna||{},this.sennaNamed=this.sennaNamed||{};var e={};e["typeof"]="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.classCallCheck=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}(),e.get=function t(e,n,a){null===e&&(e=Function.prototype);var i=Object.getOwnPropertyDescriptor(e,n);if(void 0===i){var r=Object.getPrototypeOf(e);return null===r?void 0:t(r,n,a)}if("value"in i)return i.value;var s=i.get;if(void 0!==s)return s.call(a)},e.inherits=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)},e.possibleConstructorReturn=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},e.slicedToArray=function(){function e(e,t){var n=[],a=!0,i=!1,r=void 0;try{for(var s,o=e[Symbol.iterator]();!(a=(s=o.next()).done)&&(n.push(s.value),!t||n.length!==t);a=!0);}catch(l){i=!0,r=l}finally{try{!a&&o["return"]&&o["return"]()}finally{if(i)throw r}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),function(){var e=e||{};"undefined"!=typeof window&&(e.window=window),"undefined"!=typeof document&&(e.document=document),this.senna.globals=e}.call(this),function(){function t(){throw Error("Unimplemented abstract method")}function n(){C=void 0}function a(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};C=e}function i(){return void 0===C&&"undefined"!=typeof window&&window.__METAL_COMPATIBILITY__&&a(window.__METAL_COMPATIBILITY__),C}function r(e,t){return e||t}function s(e){if(!e.name){var t=e.toString();e.name=t.substring(9,t.indexOf("("))}return e.name}function o(e,t,n){var a=t+"_MERGED";if(!e.hasOwnProperty(a)){var i=e.hasOwnProperty(t)?e[t]:null;if(e.__proto__&&!e.__proto__.isPrototypeOf(Function)){var s=n||r;i=s(i,o(e.__proto__,t,s))}e[a]=i}return e[a]}function l(e,t){if(e){var n=e[P];return t&&!e.hasOwnProperty(P)&&(n=null),n||(e[P]=S++)}return S++}function u(e){return e}function c(e){return"boolean"==typeof e}function h(e){return void 0!==e}function d(e){return h(e)&&!y(e)}function f(t){return t&&"object"===("undefined"==typeof t?"undefined":e["typeof"](t))&&9===t.nodeType}function v(t){return t&&"object"===("undefined"==typeof t?"undefined":e["typeof"](t))&&11===t.nodeType}function m(t){return t&&"object"===("undefined"==typeof t?"undefined":e["typeof"](t))&&1===t.nodeType}function p(e){return"function"==typeof e}function y(e){return null===e}function g(e){return"number"==typeof e}function _(e){return null!==e&&e===e.window}function k(t){var n="undefined"==typeof t?"undefined":e["typeof"](t);return"object"===n&&null!==t||"function"===n}function E(t){return t&&"object"===("undefined"==typeof t?"undefined":e["typeof"](t))&&"function"==typeof t.then}function N(e){return"string"==typeof e||e instanceof String}function b(){}var C=void 0,S=1,P="core_"+(1e9*Math.random()>>>0);this.sennaNamed.coreNamed=this.sennaNamed.coreNamed||{},this.sennaNamed.coreNamed.UID_PROPERTY=P,this.sennaNamed.coreNamed.abstractMethod=t,this.sennaNamed.coreNamed.disableCompatibilityMode=n,this.sennaNamed.coreNamed.enableCompatibilityMode=a,this.sennaNamed.coreNamed.getCompatibilityModeData=i,this.sennaNamed.coreNamed.getFunctionName=s,this.sennaNamed.coreNamed.getStaticProperty=o,this.sennaNamed.coreNamed.getUid=l,this.sennaNamed.coreNamed.identityFunction=u,this.sennaNamed.coreNamed.isBoolean=c,this.sennaNamed.coreNamed.isDef=h,this.sennaNamed.coreNamed.isDefAndNotNull=d,this.sennaNamed.coreNamed.isDocument=f,this.sennaNamed.coreNamed.isDocumentFragment=v,this.sennaNamed.coreNamed.isElement=m,this.sennaNamed.coreNamed.isFunction=p,this.sennaNamed.coreNamed.isNull=y,this.sennaNamed.coreNamed.isNumber=g,this.sennaNamed.coreNamed.isWindow=_,this.sennaNamed.coreNamed.isObject=k,this.sennaNamed.coreNamed.isPromise=E,this.sennaNamed.coreNamed.isString=N,this.sennaNamed.coreNamed.nullFunction=b}.call(this),function(){var e=this.sennaNamed.coreNamed;this.senna.core=e,this.sennaNamed.core=this.sennaNamed.core||{},this.sennaNamed.core.core=e,Object.keys(this.sennaNamed.coreNamed).forEach(function(e){this.sennaNamed.core[e]=this.sennaNamed.coreNamed[e]})}.call(this),function(){var t=this.sennaNamed.core.isDef,n=function(){function n(){e.classCallCheck(this,n)}return e.createClass(n,null,[{key:"equal",value:function(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}},{key:"firstDefinedValue",value:function(e){for(var t=0;t<e.length;t++)if(void 0!==e[t])return e[t]}},{key:"flatten",value:function(e,t){for(var a=t||[],i=0;i<e.length;i++)Array.isArray(e[i])?n.flatten(e[i],a):a.push(e[i]);return a}},{key:"remove",value:function(e,t){var a=e.indexOf(t),i=void 0;return(i=a>=0)&&n.removeAt(e,a),i}},{key:"removeAt",value:function(e,t){return 1===Array.prototype.splice.call(e,t,1).length}},{key:"slice",value:function(e,n,a){for(var i=[],r=t(a)?a:e.length,s=n;s<r;s++)i.push(e[s]);return i}}]),n}();this.senna.array=n}.call(this),function(){var t={};t.throwException=function(e){t.nextTick(function(){throw e})},t.run=function(e,n){t.run.workQueueScheduled_||(t.nextTick(t.run.processWorkQueue),t.run.workQueueScheduled_=!0),t.run.workQueue_.push(new t.run.WorkItem_(e,n))},t.run.workQueueScheduled_=!1,t.run.workQueue_=[],t.run.processWorkQueue=function(){for(;t.run.workQueue_.length;){var e=t.run.workQueue_;t.run.workQueue_=[];for(var n=0;n<e.length;n++){var a=e[n];try{a.fn.call(a.scope)}catch(i){t.throwException(i)}}}t.run.workQueueScheduled_=!1},t.run.WorkItem_=function(e,t){this.fn=e,this.scope=t},t.nextTick=function(e,n){var a=e;return n&&(a=e.bind(n)),a=t.nextTick.wrapCallback_(a),"function"==typeof setImmediate?void setImmediate(a):(t.nextTick.setImmediate_||(t.nextTick.setImmediate_=t.nextTick.getSetImmediateEmulator_()),void t.nextTick.setImmediate_(a))},t.nextTick.setImmediate_=null,t.nextTick.getSetImmediateEmulator_=function(){var t=void 0;if("function"==typeof MessageChannel&&(t=MessageChannel),"undefined"==typeof t&&"undefined"!=typeof window&&window.postMessage&&window.addEventListener&&(t=function(){var e=document.createElement("iframe");e.style.display="none",e.src="",document.documentElement.appendChild(e);var t=e.contentWindow,n=t.document;n.open(),n.write(""),n.close();var a="callImmediate"+Math.random(),i=t.location.protocol+"//"+t.location.host,r=function(e){e.origin!==i&&e.data!==a||this.port1.onmessage()}.bind(this);t.addEventListener("message",r,!1),this.port1={},this.port2={postMessage:function(){t.postMessage(a,i)}}}),"undefined"!=typeof t){var n=function(){var e=new t,n={},a=n;return e.port1.onmessage=function(){n=n.next;var e=n.cb;n.cb=null,e()},{v:function(t){a.next={cb:t},a=a.next,e.port2.postMessage(0)}}}();if("object"===("undefined"==typeof n?"undefined":e["typeof"](n)))return n.v}return"undefined"!=typeof document&&"onreadystatechange"in document.createElement("script")?function(e){var t=document.createElement("script");t.onreadystatechange=function(){t.onreadystatechange=null,t.parentNode.removeChild(t),t=null,e(),e=null},document.documentElement.appendChild(t)}:function(e){setTimeout(e,0)}},t.nextTick.wrapCallback_=function(e){return e},this.senna.async=t}.call(this),function(){var t=function(){function t(){e.classCallCheck(this,t),this.disposed_=!1}return e.createClass(t,[{key:"dispose",value:function(){this.disposed_||(this.disposeInternal(),this.disposed_=!0)}},{key:"disposeInternal",value:function(){}},{key:"isDisposed",value:function(){return this.disposed_}}]),t}();this.senna.Disposable=t}.call(this),function(){var t=function(){function t(){e.classCallCheck(this,t)}return e.createClass(t,null,[{key:"mixin",value:function(e){for(var t=void 0,n=void 0,a=1;a<arguments.length;a++){n=arguments[a];for(t in n)e[t]=n[t]}return e}},{key:"getObjectByName",value:function(e,t){var n=t||window,a=e.split(".");return a.reduce(function(e,t){return e[t]},n)}},{key:"map",value:function(e,t){for(var n={},a=Object.keys(e),i=0;i<a.length;i++)n[a[i]]=t(a[i],e[a[i]]);return n}},{key:"shallowEqual",value:function(e,t){if(e===t)return!0;var n=Object.keys(e),a=Object.keys(t);if(n.length!==a.length)return!1;for(var i=0;i<n.length;i++)if(e[n[i]]!==t[n[i]])return!1;return!0}}]),t}();this.senna.object=t}.call(this),function(){var t=function(){function t(){e.classCallCheck(this,t)}return e.createClass(t,null,[{key:"caseInsensitiveCompare",value:function(e,t){var n=String(e).toLowerCase(),a=String(t).toLowerCase();return n<a?-1:n===a?0:1}},{key:"collapseBreakingSpaces",value:function(e){return e.replace(/[\t\r\n ]+/g," ").replace(/^[\t\r\n ]+|[\t\r\n ]+$/g,"")}},{key:"escapeRegex",value:function(e){return String(e).replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")}},{key:"getRandomString",value:function(){var e=2147483648;return Math.floor(Math.random()*e).toString(36)+Math.abs(Math.floor(Math.random()*e)^Date.now()).toString(36)}},{key:"hashCode",value:function(e){for(var t=0,n=0,a=e.length;n<a;n++)t=31*t+e.charCodeAt(n),t%=4294967296;return t}},{key:"replaceInterval",value:function(e,t,n,a){return e.substring(0,t)+a+e.substring(n)}}]),t}();this.senna.string=t}.call(this),function(){var e=this.senna.core,t=this.senna.array,n=this.senna.async,a=this.senna.Disposable,i=this.senna.object,r=this.senna.string;this.sennaNamed.metal=this.sennaNamed.metal||{},Object.keys(this.sennaNamed.core).forEach(function(e){this.sennaNamed.metal[e]=this.sennaNamed.core[e]}),this.sennaNamed.metal.array=t,this.sennaNamed.metal.async=n,this.sennaNamed.metal.Disposable=a,this.sennaNamed.metal.object=i,this.sennaNamed.metal.string=r,this.senna.metal=e}.call(this),function(){function e(e){var t=document.createElement("a");return t.href=e,{hash:t.hash,hostname:t.hostname,password:t.password,pathname:"/"===t.pathname[0]?t.pathname:"/"+t.pathname,port:t.port,protocol:t.protocol,search:t.search,username:t.username}}this.senna.parseFromAnchor=e}.call(this),function(){function e(e){return t(URL)&&URL.length?new URL(e):n(e)}var t=this.sennaNamed.metal.isFunction,n=this.senna.parseFromAnchor;this.senna.parse=e}.call(this),function(){var t=this.sennaNamed.metal.Disposable,n=Object.create,a=function(t){function a(){e.classCallCheck(this,a);var t=e.possibleConstructorReturn(this,(a.__proto__||Object.getPrototypeOf(a)).call(this));return t.keys=n(null),t.values=n(null),t}return e.inherits(a,t),e.createClass(a,[{key:"add",value:function(e,t){return this.keys[e.toLowerCase()]=e,this.values[e.toLowerCase()]=this.values[e.toLowerCase()]||[],this.values[e.toLowerCase()].push(t),this}},{key:"clear",value:function(){return this.keys=n(null),this.values=n(null),this}},{key:"contains",value:function(e){return e.toLowerCase()in this.values}},{key:"disposeInternal",value:function(){this.values=null}},{key:"get",value:function(e){var t=this.values[e.toLowerCase()];if(t)return t[0]}},{key:"getAll",value:function(e){return this.values[e.toLowerCase()]}},{key:"isEmpty",value:function(){return 0===this.size()}},{key:"names",value:function(){var e=this;return Object.keys(this.values).map(function(t){return e.keys[t]})}},{key:"remove",value:function(e){return delete this.keys[e.toLowerCase()],delete this.values[e.toLowerCase()],this}},{key:"set",value:function(e,t){return this.keys[e.toLowerCase()]=e,this.values[e.toLowerCase()]=[t],this}},{key:"size",value:function(){return this.names().length}},{key:"toString",value:function(){return JSON.stringify(this.values)}}],[{key:"fromObject",value:function(e){for(var t=new a,n=Object.keys(e),i=0;i<n.length;i++)t.set(n[i],e[n[i]]);return t}}]),a}(t);this.senna.MultiMap=a}.call(this),function(){var t=this.sennaNamed.metal.array,n=function(){function n(t){e.classCallCheck(this,n),this.value_=t,this.parent_=null,this.children_=null}return e.createClass(n,[{key:"addChild",value:function(e){a(e),e.setParent(this),this.children_=this.children_||[],this.children_.push(e)}},{key:"contains",value:function(e){for(var t=e.getParent();t;){if(t===this)return!0;t=t.getParent()}return!1}},{key:"getAncestors",value:function(){for(var e=[],t=this.getParent();t;)e.push(t),t=t.getParent();return e}},{key:"getChildAt",value:function(e){return this.getChildren()[e]||null}},{key:"getChildren",value:function(){return this.children_||n.EMPTY_ARRAY}},{key:"getChildCount",value:function(){return this.getChildren().length}},{key:"getDepth",value:function(){for(var e=0,t=this;t.getParent();)e++,t=t.getParent();return e}},{key:"getParent",value:function(){return this.parent_}},{key:"getRoot",value:function(){for(var e=this;e.getParent();)e=e.getParent();return e}},{key:"getValue",value:function(){return this.value_}},{key:"isLeaf",value:function(){return!this.getChildCount()}},{key:"removeChild",value:function(e){return t.remove(this.getChildren(),e)?e:null}},{key:"setParent",value:function(e){this.parent_=e}},{key:"traverse",value:function(e,t){e&&e(this),this.getChildren().forEach(function(n){return n.traverse(e,t)}),t&&t(this)}}]),n}();n.EMPTY_ARRAY=[];var a=function(e){if(e.getParent())throw new Error("Cannot add child with parent.")};this.senna.TreeNode=n}.call(this),function(){var e=this.senna.MultiMap,t=this.senna.TreeNode;this.sennaNamed.structs=this.sennaNamed.structs||{},this.sennaNamed.structs.MultiMap=e,this.sennaNamed.structs.TreeNode=t}.call(this),function(){var t=this.sennaNamed.metal.isDef,n=this.sennaNamed.metal.string,a=this.senna.parse,i=this.sennaNamed.structs.MultiMap,r=a,s=function(){function a(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";e.classCallCheck(this,a),this.url=a.parse(this.maybeAddProtocolAndHostname_(t))}return e.createClass(a,[{key:"addParametersFromMultiMap",value:function(e){var t=this;return e.names().forEach(function(n){e.getAll(n).forEach(function(e){t.addParameterValue(n,e)})}),this}},{key:"addParameterValue",value:function(e,n){return this.ensureQueryInitialized_(),t(n)&&(n=String(n)),this.query.add(e,n),this}},{key:"addParameterValues",value:function(e,t){var n=this;return t.forEach(function(t){return n.addParameterValue(e,t)}),this}},{key:"ensureQueryInitialized_",value:function(){var n=this;if(!this.query){this.query=new i;var r=this.url.search;r&&r.substring(1).split("&").forEach(function(i){var r=i.split("="),s=e.slicedToArray(r,2),o=s[0],l=s[1];t(l)&&(l=a.urlDecode(l)),n.addParameterValue(o,l)})}}},{key:"getHash",value:function(){return this.url.hash||""}},{key:"getHost",value:function(){var e=this.getHostname();if(e){var t=this.getPort();t&&"80"!==t&&(e+=":"+t)}return e}},{key:"getHostname",value:function(){var e=this.url.hostname;return e===a.HOSTNAME_PLACEHOLDER?"":e}},{key:"getOrigin",value:function(){var e=this.getHost();return e?this.getProtocol()+"//"+e:""}},{key:"getParameterValue",value:function(e){return this.ensureQueryInitialized_(),this.query.get(e)}},{key:"getParameterValues",value:function(e){return this.ensureQueryInitialized_(),this.query.getAll(e)}},{key:"getParameterNames",value:function(){return this.ensureQueryInitialized_(),this.query.names()}},{key:"getPathname",value:function(){return this.url.pathname}},{key:"getPort",value:function(){return this.url.port}},{key:"getProtocol",value:function(){return this.url.protocol}},{key:"getSearch",value:function(){var e=this,n="",a="";return this.getParameterNames().forEach(function(n){e.getParameterValues(n).forEach(function(e){a+=n,t(e)&&(a+="="+encodeURIComponent(e)),a+="&"})}),a=a.slice(0,-1),a&&(n+="?"+a),n}},{key:"hasParameter",value:function(e){return this.ensureQueryInitialized_(),this.query.contains(e)}},{key:"makeUnique",value:function(){return this.setParameterValue(a.RANDOM_PARAM,n.getRandomString()),this}},{key:"maybeAddProtocolAndHostname_",value:function(e){var t=e;if(e.indexOf("://")===-1&&0!==e.indexOf("javascript:"))switch(t=a.DEFAULT_PROTOCOL,"/"===e[0]&&"/"===e[1]||(t+="//"),e.charAt(0)){case".":case"?":case"#":t+=a.HOSTNAME_PLACEHOLDER,t+="/",t+=e;break;case"":case"/":"/"!==e[1]&&(t+=a.HOSTNAME_PLACEHOLDER),t+=e;break;default:t+=e}return t}},{key:"removeParameter",value:function(e){return this.ensureQueryInitialized_(),this.query.remove(e),this}},{key:"removeUnique",value:function(){return this.removeParameter(a.RANDOM_PARAM),this}},{key:"setHash",value:function(e){return this.url.hash=e,this}},{key:"setHostname",value:function(e){return this.url.hostname=e,this}},{key:"setParameterValue",value:function(e,t){return this.removeParameter(e),this.addParameterValue(e,t),this}},{key:"setParameterValues",value:function(e,t){var n=this;return this.removeParameter(e),t.forEach(function(t){return n.addParameterValue(e,t)}),this}},{key:"setPathname",value:function(e){return this.url.pathname=e,this}},{key:"setPort",value:function(e){return this.url.port=e,this}},{key:"setProtocol",value:function(e){return this.url.protocol=e,":"!==this.url.protocol[this.url.protocol.length-1]&&(this.url.protocol+=":"),this}},{key:"toString",value:function(){var e="",t=this.getHost();return t&&(e+=this.getProtocol()+"//"),e+=t+this.getPathname()+this.getSearch()+this.getHash()}}],[{key:"getParseFn",value:function(){return r}},{key:"normalizeObject",value:function(e){var t=e.pathname?e.pathname.length:0;return t>1&&"/"===e.pathname[t-1]&&(e.pathname=e.pathname.substr(0,t-1)),e}},{key:"parse",value:function(e){return a.normalizeObject(r(e))}},{key:"setParseFn",value:function(e){r=e}},{key:"joinPaths",value:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];return"/"===e.charAt(e.length-1)&&(e=e.substring(0,e.length-1)),n=n.map(function(e){return"/"===e.charAt(0)?e.substring(1):e}),[e].concat(n).join("/").replace(/\/$/,"")}},{key:"urlDecode",value:function(e){return decodeURIComponent(e.replace(/\+/g," "))}}]),a}();s.DEFAULT_PROTOCOL="http:",s.HOSTNAME_PLACEHOLDER="hostname"+Date.now(),s.RANDOM_PARAM="zx",this.senna.Uri=s}.call(this),function(){var t=this.senna.globals,n=this.senna.Uri,a=function(){function a(){e.classCallCheck(this,a)}return e.createClass(a,null,[{key:"copyNodeAttributes",value:function(e,t){Array.prototype.slice.call(e.attributes).forEach(function(e){return t.setAttribute(e.name,e.value)})}},{key:"getCurrentBrowserPath",value:function(){return this.getCurrentBrowserPathWithoutHash()+t.window.location.hash}},{key:"getCurrentBrowserPathWithoutHash",value:function(){return t.window.location.pathname+t.window.location.search}},{key:"getUrlPath",value:function(e){var t=new n(e);return t.getPathname()+t.getSearch()+t.getHash()}},{key:"getUrlPathWithoutHash",value:function(e){var t=new n(e);return t.getPathname()+t.getSearch()}},{key:"getUrlPathWithoutHashAndSearch",value:function(e){var t=new n(e);return t.getPathname()}},{key:"isCurrentBrowserPath",value:function(e){if(e){var t=this.getCurrentBrowserPathWithoutHash();return a.getUrlPathWithoutHash(e)===this.getUrlPath(t)}return!1}},{key:"isHtml5HistorySupported",value:function(){return!(!t.window.history||!t.window.history.pushState)}},{key:"clearNodeAttributes",value:function(e){Array.prototype.slice.call(e.attributes).forEach(function(t){return e.removeAttribute(t.name)})}}]),a}();this.senna.utils=a}.call(this),function(){function e(e,n){return function a(){var i=arguments;t(a),a.id=setTimeout(function(){e.apply(null,i)},n)}}function t(e){clearTimeout(e.id)}this.senna.debounce=e,this.sennaNamed.debounce=this.sennaNamed.debounce||{},this.sennaNamed.debounce.cancelDebounce=t,this.sennaNamed.debounce.debounce=e}.call(this),function(){var t="__metal_data__",n=function(){function n(){e.classCallCheck(this,n)}return e.createClass(n,null,[{key:"get",value:function(e,n,a){return e[t]||(e[t]={}),n?(!e[t][n]&&a&&(e[t][n]=a),e[t][n]):e[t]}},{key:"has",value:function(e){return!!e[t]}}]),n}();this.senna.domData=n}.call(this),function(){var t=this.sennaNamed.metal.Disposable,n=function(t){function n(t,a,i){e.classCallCheck(this,n);var r=e.possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return r.emitter_=t,r.event_=a,r.listener_=i,r}return e.inherits(n,t),e.createClass(n,[{key:"disposeInternal",value:function(){this.removeListener(),this.emitter_=null,this.listener_=null}},{key:"removeListener",value:function(){this.emitter_.isDisposed()||this.emitter_.removeListener(this.event_,this.listener_)}}]),n}(t);this.senna.EventHandle=n}.call(this),function(){function t(e){return e=e||[],Array.isArray(e)?e:[e]}var n=this.sennaNamed.metal.array,a=this.sennaNamed.metal.Disposable,i=this.sennaNamed.metal.isFunction,r=this.sennaNamed.metal.isString,s=this.senna.EventHandle,o=[0],l=function(a){function l(){e.classCallCheck(this,l);var t=e.possibleConstructorReturn(this,(l.__proto__||Object.getPrototypeOf(l)).call(this));return t.events_=null,t.listenerHandlers_=null,t.shouldUseFacade_=!1,t}return e.inherits(l,a),e.createClass(l,[{key:"addHandler_",value:function(e,t){return e?(Array.isArray(e)||(e=[e]),e.push(t)):e=t,e}},{key:"addListener",value:function(e,t,n){this.validateListener_(t);for(var a=this.toEventsArray_(e),i=0;i<a.length;i++)this.addSingleListener_(a[i],t,n);return new s(this,e,t)}},{key:"addSingleListener_",value:function(e,t,n,a){this.runListenerHandlers_(e),(n||a)&&(t={"default":n,fn:t,origin:a}),this.events_=this.events_||{},this.events_[e]=this.addHandler_(this.events_[e],t)}},{key:"buildFacade_",value:function(t){var n=this;if(this.getShouldUseFacade()){var a=function(){var e={preventDefault:function(){e.preventedDefault=!0},target:n,type:t};return{v:e}}();if("object"===("undefined"==typeof a?"undefined":e["typeof"](a)))return a.v}}},{key:"disposeInternal",value:function(){this.events_=null}},{key:"emit",value:function(e){var t=this.getRawListeners_(e);if(0===t.length)return!1;var a=n.slice(arguments,1);return this.runListeners_(t,a,this.buildFacade_(e)),!0}},{key:"getRawListeners_",value:function(e){var n=t(this.events_&&this.events_[e]);return n.concat(t(this.events_&&this.events_["*"]))}},{key:"getShouldUseFacade",value:function(){return this.shouldUseFacade_}},{key:"listeners",value:function(e){return this.getRawListeners_(e).map(function(e){return e.fn?e.fn:e})}},{key:"many",value:function(e,t,n){for(var a=this.toEventsArray_(e),i=0;i<a.length;i++)this.many_(a[i],t,n);return new s(this,e,n)}},{key:"many_",value:function(e,t,n){function a(){0===--t&&i.removeListener(e,a),n.apply(i,arguments)}var i=this;t<=0||i.addSingleListener_(e,a,!1,n)}},{key:"matchesListener_",value:function(e,t){var n=e.fn||e;return n===t||e.origin&&e.origin===t}},{key:"off",value:function(e,n){if(this.validateListener_(n),!this.events_)return this;for(var a=this.toEventsArray_(e),i=0;i<a.length;i++)this.events_[a[i]]=this.removeMatchingListenerObjs_(t(this.events_[a[i]]),n);return this}},{key:"on",value:function(){return this.addListener.apply(this,arguments)}},{key:"onListener",value:function(e){this.listenerHandlers_=this.addHandler_(this.listenerHandlers_,e)}},{key:"once",value:function(e,t){return this.many(e,1,t)}},{key:"removeAllListeners",value:function(e){if(this.events_)if(e)for(var t=this.toEventsArray_(e),n=0;n<t.length;n++)this.events_[t[n]]=null;else this.events_=null;return this}},{key:"removeMatchingListenerObjs_",value:function(e,t){for(var n=[],a=0;a<e.length;a++)this.matchesListener_(e[a],t)||n.push(e[a]);return n.length>0?n:null}},{key:"removeListener",value:function(){return this.off.apply(this,arguments)}},{key:"runListenerHandlers_",value:function(e){var n=this.listenerHandlers_;if(n){n=t(n);for(var a=0;a<n.length;a++)n[a](e)}}},{key:"runListeners_",value:function(e,t,n){n&&t.push(n);for(var a=[],i=0;i<e.length;i++){var r=e[i].fn||e[i];e[i]["default"]?a.push(r):r.apply(this,t)}if(!n||!n.preventedDefault)for(var s=0;s<a.length;s++)a[s].apply(this,t)}},{key:"setShouldUseFacade",value:function(e){return this.shouldUseFacade_=e,this}},{key:"toEventsArray_",value:function(e){return r(e)&&(o[0]=e,e=o),e}},{key:"validateListener_",value:function(e){if(!i(e))throw new TypeError("Listener must be a function")}}]),l}(a);this.senna.EventEmitter=l}.call(this),function(){var t=this.sennaNamed.metal.Disposable,n=function(t){function n(t,a,i,r){e.classCallCheck(this,n);var s=e.possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return s.blacklist_=i,s.originEmitter_=t,s.pendingEvents_=null,s.proxiedEvents_=null,s.targetEmitter_=a,s.whitelist_=r,s.startProxy_(),s}return e.inherits(n,t),e.createClass(n,[{key:"addListener_",value:function(e,t){return this.originEmitter_.on(e,t)}},{key:"disposeInternal",value:function(){this.removeListeners_(),this.proxiedEvents_=null,this.originEmitter_=null,this.targetEmitter_=null}},{key:"emitOnTarget_",value:function(){this.targetEmitter_.emit.apply(this.targetEmitter_,arguments)}},{key:"proxyEvent",value:function(e){this.shouldProxyEvent_(e)&&this.tryToAddListener_(e)}},{key:"removeListeners_",value:function(){if(this.proxiedEvents_){for(var e=Object.keys(this.proxiedEvents_),t=0;t<e.length;t++)this.proxiedEvents_[e[t]].removeListener();this.proxiedEvents_=null}this.pendingEvents_=null}},{key:"setOriginEmitter",value:function(e){var t=this,n=this.originEmitter_&&this.proxiedEvents_?Object.keys(this.proxiedEvents_):this.pendingEvents_;this.originEmitter_=e,n&&(this.removeListeners_(),n.forEach(function(e){return t.proxyEvent(e)}))}},{key:"shouldProxyEvent_",value:function(e){return!(this.whitelist_&&!this.whitelist_[e])&&((!this.blacklist_||!this.blacklist_[e])&&(!this.proxiedEvents_||!this.proxiedEvents_[e]))}},{key:"startProxy_",value:function(){this.targetEmitter_.onListener(this.proxyEvent.bind(this))}},{key:"tryToAddListener_",value:function(e){this.originEmitter_?(this.proxiedEvents_=this.proxiedEvents_||{},this.proxiedEvents_[e]=this.addListener_(e,this.emitOnTarget_.bind(this,e))):(this.pendingEvents_=this.pendingEvents_||[],this.pendingEvents_.push(e))}}]),n}(t);this.senna.EventEmitterProxy=n}.call(this),function(){var t=this.sennaNamed.metal.Disposable,n=function(t){function n(){e.classCallCheck(this,n);var t=e.possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return t.eventHandles_=[],t}return e.inherits(n,t),e.createClass(n,[{key:"add",value:function(){for(var e=0;e<arguments.length;e++)this.eventHandles_.push(arguments[e])}},{key:"disposeInternal",value:function(){this.eventHandles_=null}},{key:"removeAllListeners",value:function(){for(var e=0;e<this.eventHandles_.length;e++)this.eventHandles_[e].removeListener();this.eventHandles_=[]}}]),n}(t);this.senna.EventHandler=n}.call(this),function(){var e=this.senna.EventEmitter,t=this.senna.EventEmitterProxy,n=this.senna.EventHandle,a=this.senna.EventHandler;this.senna.events=e,this.sennaNamed.events=this.sennaNamed.events||{},this.sennaNamed.events.EventEmitter=e,this.sennaNamed.events.EventEmitterProxy=t,this.sennaNamed.events.EventHandle=n,this.sennaNamed.events.EventHandler=a}.call(this),function(){var t=this.sennaNamed.metal.array,n=this.sennaNamed.metal.isString,a=this.senna.domData,i=this.sennaNamed.events.EventHandle,r=function(i){function r(t,n,a,i){e.classCallCheck(this,r);var s=e.possibleConstructorReturn(this,(r.__proto__||Object.getPrototypeOf(r)).call(this,t,n,a));return s.selector_=i,s}return e.inherits(r,i),e.createClass(r,[{key:"removeListener",value:function(){var e=a.get(this.emitter_,"delegating",{}),i=a.get(this.emitter_,"listeners",{}),r=this.selector_,s=n(r)?e[this.event_].selectors:i,o=n(r)?r:this.event_;t.remove(s[o]||[],this.listener_),s[o]&&0===s[o].length&&delete s[o]}}]),r}(i);this.senna.DomDelegatedEventHandle=r}.call(this),function(){var t=this.sennaNamed.events.EventHandle,n=function(t){function n(t,a,i,r){e.classCallCheck(this,n);var s=e.possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,t,a,i));return s.capture_=r,s}return e.inherits(n,t),e.createClass(n,[{key:"removeListener",value:function(){this.emitter_.removeEventListener(this.event_,this.listener_,this.capture_)}}]),n}(t);this.senna.DomEventHandle=n}.call(this),function(){function e(e,a){if(K(e)&&$(a)){e.length||(e=[e]);for(var i=0;i<e.length;i++)"classList"in e[i]?t(e[i],a):n(e[i],a)}}function t(e,t){t.split(" ").forEach(function(t){t&&e.classList.add(t)})}function n(e,t){var n=" "+e.className+" ",a="";t=t.split(" ");for(var i=0;i<t.length;i++){var r=t[i];n.indexOf(" "+r+" ")===-1&&(a+=" "+r)}a&&(e.className=e.className+a)}function a(e,t,n){r(Z.get(e,"listeners",{}),t,n)}function i(e,t,n,a){var i=Z.get(e,"delegating",{});r(i[t].selectors,n,a)}function r(e,t,n){e[t]||(e[t]=[]),e[t].push(n)}function s(e,t){var n=Z.get(e,"delegating",{});n[t]||(n[t]={handle:C(e,t,m,!!se[t]),selectors:{}})}function o(e,t){for(;e&&!k(e,t);)e=e.parentNode;return e}function l(e,t){if($(t)&&(t=u(t)),t instanceof NodeList)for(var n=Array.prototype.slice.call(t),a=0;a<n.length;a++)e.appendChild(n[a]);else e.appendChild(t);return t}function u(e){var t=document.createElement("div");t.innerHTML="<br>"+e,t.removeChild(t.firstChild);for(var n=document.createDocumentFragment();t.firstChild;)n.appendChild(t.firstChild);return n}function c(e,t){return Y(e)?e.documentElement.contains(t):e.contains(t)}function h(e,t,n,r,o){var l=ie[t];return l&&l.delegate&&(t=l.originalEvent,r=l.handler.bind(l,r)),o&&(r=r.bind(),r.defaultListener_=!0),s(e,t),$(n)?i(e,t,n,r):a(n,t,r),new ee($(n)?e:n,t,r,$(n)?n:null)}function d(e,t,n){if(n&&"click"===t&&2===n.button)return!1;var a=["BUTTON","INPUT","SELECT","TEXTAREA","FIELDSET"];return!("click"===t&&a.indexOf(e.tagName)>-1)||!(e.disabled||P(e,"fieldset[disabled]"))}function f(e){e&&l(document.body,e)}function v(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function m(e){b(e);var t=!0,n=e.currentTarget,a=[];return t&=U(n,e,a),t&=x(a,e),e.delegateTarget=null,e[re]=n,t}function p(e,t){return"classList"in e?y(e,t):g(e,t)}function y(e,t){return e.classList.contains(t)}function g(e,t){return(" "+e.className+" ").indexOf(" "+t+" ")>=0}function _(e){return 0===e.childNodes.length}function k(e,t){if(!e||1!==e.nodeType)return!1;var n=Element.prototype,a=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||n.oMatchesSelector;return a?a.call(e,t):E(e,t)}function E(e,t){for(var n=document.querySelectorAll(t,e.parentNode),a=0;a<n.length;++a)if(n[a]===e)return!0;return!1}function N(e,t){do if(e=e.nextSibling,e&&k(e,t))return e;while(e);return null}function b(e){e.stopPropagation=H,e.stopImmediatePropagation=O}function C(e,t,n,a){if($(e))return h(document,t,e,n);var i=ie[t];return i&&i.event&&(t=i.originalEvent,n=i.handler.bind(i,n)),e.addEventListener(t,n,a),new te(e,t,n,a)}function S(e,t,n){var a=C(e,t,function(){return a.removeListener(),n.apply(this,arguments)});return a}function P(e,t){return o(e.parentNode,t)}function w(e,t){ie[e]=t}function A(e){for(var t=void 0;t=e.firstChild;)e.removeChild(t)}function R(e,t){if(K(e)&&$(t)){e.length||(e=[e]);for(var n=0;n<e.length;n++)"classList"in e[n]?L(e[n],t):D(e[n],t)}}function L(e,t){t.split(" ").forEach(function(t){t&&e.classList.remove(t)})}function D(e,t){var n=" "+e.className+" ";t=t.split(" ");for(var a=0;a<t.length;a++)n=n.replace(" "+t[a]+" "," ");e.className=n.trim()}function T(e,t){e&&t&&e!==t&&e.parentNode&&(e.parentNode.insertBefore(t,e),e.parentNode.removeChild(e))}function O(){var e=this;e.stopped=!0,e.stoppedImmediate=!0,Event.prototype.stopImmediatePropagation.call(e);
9
+ }function H(){var e=this;e.stopped=!0,Event.prototype.stopPropagation.call(e)}function I(e,t){if(ie[t])return!0;$(e)&&(ne[e]||(ne[e]=document.createElement(e)),e=ne[e]);var n=e.tagName;return ae[n]&&ae[n].hasOwnProperty(t)||(ae[n]=ae[n]||{},ae[n][t]="on"+t in e),ae[n][t]}function x(e,t){for(var n=!0,a=0;a<e.length&&!t.defaultPrevented;a++)t.delegateTarget=e[a].element,n&=e[a].fn(t);return n}function U(e,t,n){for(var a=!0,i=t.target,r=e.parentNode;i&&i!==r&&!t.stopped;)d(i,t.type,t)&&(t.delegateTarget=i,a&=B(i,t,n),a&=W(e,i,t,n)),i=i.parentNode;return a}function j(e){return G(e)||Y(e)||z(e)?e:$(e)?"#"===e[0]&&e.indexOf(" ")===-1?document.getElementById(e.substr(1)):document.querySelector(e):null}function F(e,t){K(e)&&$(t)&&("classList"in e?M(e,t):q(e,t))}function M(e,t){t.split(" ").forEach(function(t){e.classList.toggle(t)})}function q(e,t){var n=" "+e.className+" ";t=t.split(" ");for(var a=0;a<t.length;a++){var i=" "+t[a]+" ",r=n.indexOf(i);if(r===-1)n=""+n+t[a]+" ";else{var s=n.substring(0,r),o=n.substring(r+i.length);n=s+" "+o}}e.className=n.trim()}function B(e,t,n){var a=t[re];if(!J(a)||!c(a,e)){var i=Z.get(e,"listeners",{})[t.type];return V(i,t,e,n)}return!0}function Q(e,t,n){if(d(e,t,n)){var a=document.createEvent("HTMLEvents");a.initEvent(t,!0,!0),X.mixin(a,n),e.dispatchEvent(a)}}function V(e,t,n,a){var i=!0;e=e||[];for(var r=0;r<e.length&&!t.stoppedImmediate;r++)e[r].defaultListener_?a.push({element:n,fn:e[r]}):i&=e[r](t);return i}function W(e,t,n,a){for(var i=!0,r=Z.get(e,"delegating",{}),s=r[n.type].selectors,o=Object.keys(s),l=0;l<o.length&&!n.stoppedImmediate;l++)if(k(t,o[l])){var u=s[o[l]];i&=V(u,n,t,a)}return i}var J=this.sennaNamed.metal.isDef,Y=this.sennaNamed.metal.isDocument,z=this.sennaNamed.metal.isDocumentFragment,G=this.sennaNamed.metal.isElement,K=this.sennaNamed.metal.isObject,$=this.sennaNamed.metal.isString,X=this.sennaNamed.metal.object,Z=this.senna.domData,ee=this.senna.DomDelegatedEventHandle,te=this.senna.DomEventHandle,ne={},ae={},ie={};this.sennaNamed.domNamed=this.sennaNamed.domNamed||{},this.sennaNamed.domNamed.customEvents=ie;var re="__metal_last_container__",se={blur:!0,error:!0,focus:!0,invalid:!0,load:!0,scroll:!0};this.sennaNamed.domNamed.addClasses=e,this.sennaNamed.domNamed.closest=o,this.sennaNamed.domNamed.append=l,this.sennaNamed.domNamed.buildFragment=u,this.sennaNamed.domNamed.contains=c,this.sennaNamed.domNamed.delegate=h,this.sennaNamed.domNamed.enterDocument=f,this.sennaNamed.domNamed.exitDocument=v,this.sennaNamed.domNamed.hasClass=p,this.sennaNamed.domNamed.isEmpty=_,this.sennaNamed.domNamed.match=k,this.sennaNamed.domNamed.next=N,this.sennaNamed.domNamed.on=C,this.sennaNamed.domNamed.once=S,this.sennaNamed.domNamed.parent=P,this.sennaNamed.domNamed.registerCustomEvent=w,this.sennaNamed.domNamed.removeChildren=A,this.sennaNamed.domNamed.removeClasses=R,this.sennaNamed.domNamed.replace=T,this.sennaNamed.domNamed.supportsEvent=I,this.sennaNamed.domNamed.toElement=j,this.sennaNamed.domNamed.toggleClasses=F,this.sennaNamed.domNamed.triggerEvent=Q}.call(this),function(){var e=this.sennaNamed.domNamed;this.senna.dom=e,this.sennaNamed.dom=this.sennaNamed.dom||{},this.sennaNamed.dom.dom=e,Object.keys(this.sennaNamed.domNamed).forEach(function(e){this.sennaNamed.dom[e]=this.sennaNamed.domNamed[e]})}.call(this),function(){var t=this.sennaNamed.dom.delegate,n=this.sennaNamed.dom.on,a=this.sennaNamed.dom.supportsEvent,i=this.sennaNamed.events.EventEmitterProxy,r=function(i){function r(){return e.classCallCheck(this,r),e.possibleConstructorReturn(this,(r.__proto__||Object.getPrototypeOf(r)).apply(this,arguments))}return e.inherits(r,i),e.createClass(r,[{key:"addListener_",value:function(a,i){if(this.originEmitter_.addEventListener){if(this.isDelegateEvent_(a)){var s=a.indexOf(":",9),o=a.substring(9,s),l=a.substring(s+1);return t(this.originEmitter_,o,l,i)}return n(this.originEmitter_,a,i)}return e.get(r.prototype.__proto__||Object.getPrototypeOf(r.prototype),"addListener_",this).call(this,a,i)}},{key:"isDelegateEvent_",value:function(e){return"delegate:"===e.substr(0,9)}},{key:"isSupportedDomEvent_",value:function(e){return!this.originEmitter_||!this.originEmitter_.addEventListener||(this.isDelegateEvent_(e)&&e.indexOf(":",9)!==-1||a(this.originEmitter_,e))}},{key:"shouldProxyEvent_",value:function(t){return e.get(r.prototype.__proto__||Object.getPrototypeOf(r.prototype),"shouldProxyEvent_",this).call(this,t)&&this.isSupportedDomEvent_(t)}}]),r}(i);this.senna.DomEventEmitterProxy=r}.call(this),function(){var t=this.sennaNamed.dom.append,n=this.sennaNamed.metal.string,a=function(){function a(){e.classCallCheck(this,a)}return e.createClass(a,null,[{key:"checkAnimationEventName",value:function(){return void 0===a.animationEventName_&&(a.animationEventName_={animation:a.checkAnimationEventName_("animation"),transition:a.checkAnimationEventName_("transition")}),a.animationEventName_}},{key:"checkAnimationEventName_",value:function(e){for(var t=["Webkit","MS","O",""],i=n.replaceInterval(e,0,1,e.substring(0,1).toUpperCase()),r=[i+"End",i+"End",i+"End",e+"end"],s=0;s<t.length;s++)if(void 0!==a.animationElement_.style[t[s]+i])return t[s].toLowerCase()+r[s];return e+"end"}},{key:"checkAttrOrderChange",value:function(){if(void 0===a.attrOrderChange_){var e='<div data-component="" data-ref=""></div>',n=document.createElement("div");t(n,e),a.attrOrderChange_=e!==n.innerHTML}return a.attrOrderChange_}}]),a}();a.animationElement_=document.createElement("div"),a.animationEventName_=void 0,a.attrOrderChange_=void 0,this.senna.features=a}.call(this),function(){var t=this.sennaNamed.metal.async,n=this.sennaNamed.dom.exitDocument,a=this.sennaNamed.dom.once,i=function(){function i(){e.classCallCheck(this,i)}return e.createClass(i,null,[{key:"run",value:function(e,t){var a=document.createElement("script");return a.text=e,t?t(a):document.head.appendChild(a),n(a),a}},{key:"runFile",value:function(e,t,i){var r=document.createElement("script");r.src=e;var s=function(){n(r),t&&t()};return a(r,"load",s),a(r,"error",s),i?i(r):document.head.appendChild(r),r}},{key:"runScript",value:function(e,a,r){var s=function(){a&&a()};return e.type&&"text/javascript"!==e.type?void t.nextTick(s):(n(e),e.src?i.runFile(e.src,a,r):(t.nextTick(s),i.run(e.text,r)))}},{key:"runScriptsInElement",value:function(e,n,a){var r=e.querySelectorAll("script");r.length?i.runScriptsInOrder(r,0,n,a):n&&t.nextTick(n)}},{key:"runScriptsInOrder",value:function(e,n,a,r){i.runScript(e.item(n),function(){n<e.length-1?i.runScriptsInOrder(e,n+1,a,r):a&&t.nextTick(a)},r)}}]),i}();this.senna.globalEval=i}.call(this),function(){var t=this.sennaNamed.metal.async,n=this.sennaNamed.dom.once,a=function(){function a(){e.classCallCheck(this,a)}return e.createClass(a,null,[{key:"run",value:function(e,t){var n=document.createElement("style");return n.innerHTML=e,t?t(n):document.head.appendChild(n),n}},{key:"runFile",value:function(e,t,n){var i=document.createElement("link");return i.rel="stylesheet",i.href=e,a.runStyle(i,t,n),i}},{key:"runStyle",value:function(e,a,i){var r=function(){a&&a()};return e.rel&&"stylesheet"!==e.rel?void t.nextTick(r):("STYLE"===e.tagName?t.nextTick(r):(n(e,"load",r),n(e,"error",r)),i?i(e):document.head.appendChild(e),e)}},{key:"runStylesInElement",value:function(e,n,i){var r=e.querySelectorAll("style,link");if(0===r.length&&n)return void t.nextTick(n);for(var s=0,o=function(){n&&++s===r.length&&t.nextTick(n)},l=0;l<r.length;l++)a.runStyle(r[l],o,i)}}]),a}();this.senna.globalEvalStyles=a}.call(this),function(){var e=this.sennaNamed.dom.registerCustomEvent,t=this.senna.features,n={mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"};Object.keys(n).forEach(function(t){e(t,{delegate:!0,handler:function(e,n){var a=n.relatedTarget,i=n.delegateTarget;if(!a||a!==i&&!i.contains(a))return n.customType=t,e(n)},originalEvent:n[t]})});var a={animation:"animationend",transition:"transitionend"};Object.keys(a).forEach(function(n){var i=a[n];e(i,{event:!0,delegate:!0,handler:function(e,t){return t.customType=i,e(t)},originalEvent:t.checkAnimationEventName()[n]})})}.call(this),function(){var e=this.senna.dom,t=this.senna.domData,n=this.senna.DomEventEmitterProxy,a=this.senna.DomEventHandle,i=this.senna.features,r=this.senna.globalEval,s=this.senna.globalEvalStyles;this.sennaNamed.dom=this.sennaNamed.dom||{},Object.keys(this.sennaNamed.dom).forEach(function(e){this.sennaNamed.dom[e]=this.sennaNamed.dom[e]}),this.sennaNamed.dom.domData=t,this.sennaNamed.dom.DomEventEmitterProxy=n,this.sennaNamed.dom.DomEventHandle=a,this.sennaNamed.dom.features=i,this.sennaNamed.dom.globalEval=r,this.sennaNamed.dom.globalEvalStyles=s,this.senna.dom=e}.call(this),function(){var t=this.sennaNamed.metal.isDef,n=this.sennaNamed.metal.isFunction,a=this.sennaNamed.metal.isObject,i=this.sennaNamed.metal.async,r=function(){};r.prototype.then=function(){},r.IMPLEMENTED_BY_PROP="$goog_Thenable",r.addImplementation=function(e){e.prototype.then=e.prototype.then,e.prototype.$goog_Thenable=!0},r.isImplementedBy=function(e){if(!e)return!1;try{return!!e.$goog_Thenable}catch(t){return!1}};var s=function(e){var t=Array.prototype.slice.call(arguments,1);return function(){var n=t.slice();return n.push.apply(n,arguments),e.apply(this,n)}},o=function l(e,t){this.state_=l.State_.PENDING,this.result_=void 0,this.parent_=null,this.callbackEntries_=null,this.executing_=!1,l.UNHANDLED_REJECTION_DELAY>0?this.unhandledRejectionId_=0:0===l.UNHANDLED_REJECTION_DELAY&&(this.hadUnhandledRejection_=!1);try{var n=this;e.call(t,function(e){n.resolve_(l.State_.FULFILLED,e)},function(e){n.resolve_(l.State_.REJECTED,e)})}catch(a){this.resolve_(l.State_.REJECTED,a)}};o.UNHANDLED_REJECTION_DELAY=0,o.State_={PENDING:0,BLOCKED:1,FULFILLED:2,REJECTED:3},o.CallbackEntry_=null,o.resolve=function(e){return new o(function(t){t(e)})},o.reject=function(e){return new o(function(t,n){n(e)})},o.race=function(e){return new o(function(t,n){e.length||t(void 0);for(var a,i=0;a=e[i];i++)a.then(t,n)})},o.all=function(e){return new o(function(t,n){var a=e.length,i=[];if(!a)return void t(i);for(var r,o=function(e,n){a--,i[e]=n,0===a&&t(i)},l=function(e){n(e)},u=0;r=e[u];u++)r.then(s(o,u),l)})},o.firstFulfilled=function(e){return new o(function(t,n){var a=e.length,i=[];if(!a)return void t(void 0);for(var r,o=function(e){t(e)},l=function(e,t){a--,i[e]=t,0===a&&n(i)},u=0;r=e[u];u++)r.then(o,s(l,u))})},o.prototype.then=function(e,t,a){return this.addChildPromise_(n(e)?e:null,n(t)?t:null,a)},r.addImplementation(o),o.prototype.thenAlways=function(e,t){var n=function(){try{e.call(t)}catch(n){o.handleRejection_.call(null,n)}};return this.addCallbackEntry_({child:null,onRejected:n,onFulfilled:n}),this},o.prototype.thenCatch=function(e,t){return this.addChildPromise_(null,e,t)},o.prototype["catch"]=o.prototype.thenCatch,o.prototype.cancel=function(e){this.state_===o.State_.PENDING&&i.run(function(){var t=new o.CancellationError(e);t.IS_CANCELLATION_ERROR=!0,this.cancelInternal_(t)},this)},o.prototype.cancelInternal_=function(e){this.state_===o.State_.PENDING&&(this.parent_?this.parent_.cancelChild_(this,e):this.resolve_(o.State_.REJECTED,e))},o.prototype.cancelChild_=function(e,t){if(this.callbackEntries_){for(var n,a=0,i=-1,r=0;n=this.callbackEntries_[r];r++){var s=n.child;if(s&&(a++,s===e&&(i=r),i>=0&&a>1))break}if(i>=0)if(this.state_===o.State_.PENDING&&1===a)this.cancelInternal_(t);else{var l=this.callbackEntries_.splice(i,1)[0];this.executeCallback_(l,o.State_.REJECTED,t)}}},o.prototype.addCallbackEntry_=function(e){this.callbackEntries_&&this.callbackEntries_.length||this.state_!==o.State_.FULFILLED&&this.state_!==o.State_.REJECTED||this.scheduleCallbacks_(),this.callbackEntries_||(this.callbackEntries_=[]),this.callbackEntries_.push(e)},o.prototype.addChildPromise_=function(e,n,a){var i={child:null,onFulfilled:null,onRejected:null};return i.child=new o(function(r,s){i.onFulfilled=e?function(t){try{var n=e.call(a,t);r(n)}catch(i){s(i)}}:r,i.onRejected=n?function(e){try{var i=n.call(a,e);!t(i)&&e.IS_CANCELLATION_ERROR?s(e):r(i)}catch(o){s(o)}}:s}),i.child.parent_=this,this.addCallbackEntry_(i),i.child},o.prototype.unblockAndFulfill_=function(e){if(this.state_!==o.State_.BLOCKED)throw new Error("CancellablePromise is not blocked.");this.state_=o.State_.PENDING,this.resolve_(o.State_.FULFILLED,e)},o.prototype.unblockAndReject_=function(e){if(this.state_!==o.State_.BLOCKED)throw new Error("CancellablePromise is not blocked.");this.state_=o.State_.PENDING,this.resolve_(o.State_.REJECTED,e)},o.prototype.resolve_=function(e,t){if(this.state_===o.State_.PENDING){if(this===t)e=o.State_.REJECTED,t=new TypeError("CancellablePromise cannot resolve to itself");else{if(r.isImplementedBy(t))return t=t,this.state_=o.State_.BLOCKED,void t.then(this.unblockAndFulfill_,this.unblockAndReject_,this);if(a(t))try{var i=t.then;if(n(i))return void this.tryThen_(t,i)}catch(s){e=o.State_.REJECTED,t=s}}this.result_=t,this.state_=e,this.scheduleCallbacks_(),e!==o.State_.REJECTED||t.IS_CANCELLATION_ERROR||o.addUnhandledRejection_(this,t)}},o.prototype.tryThen_=function(e,t){this.state_=o.State_.BLOCKED;var n=this,a=!1,i=function(e){a||(a=!0,n.unblockAndFulfill_(e))},r=function(e){a||(a=!0,n.unblockAndReject_(e))};try{t.call(e,i,r)}catch(s){r(s)}},o.prototype.scheduleCallbacks_=function(){this.executing_||(this.executing_=!0,i.run(this.executeCallbacks_,this))},o.prototype.executeCallbacks_=function(){for(;this.callbackEntries_&&this.callbackEntries_.length;){var e=this.callbackEntries_;this.callbackEntries_=[];for(var t=0;t<e.length;t++)this.executeCallback_(e[t],this.state_,this.result_)}this.executing_=!1},o.prototype.executeCallback_=function(e,t,n){t===o.State_.FULFILLED?e.onFulfilled(n):(this.removeUnhandledRejection_(),e.onRejected(n))},o.prototype.removeUnhandledRejection_=function(){var e;if(o.UNHANDLED_REJECTION_DELAY>0)for(e=this;e&&e.unhandledRejectionId_;e=e.parent_)clearTimeout(e.unhandledRejectionId_),e.unhandledRejectionId_=0;else if(0===o.UNHANDLED_REJECTION_DELAY)for(e=this;e&&e.hadUnhandledRejection_;e=e.parent_)e.hadUnhandledRejection_=!1},o.addUnhandledRejection_=function(e,t){o.UNHANDLED_REJECTION_DELAY>0?e.unhandledRejectionId_=setTimeout(function(){o.handleRejection_.call(null,t)},o.UNHANDLED_REJECTION_DELAY):0===o.UNHANDLED_REJECTION_DELAY&&(e.hadUnhandledRejection_=!0,i.run(function(){e.hadUnhandledRejection_&&o.handleRejection_.call(null,t)}))},o.handleRejection_=i.throwException,o.setUnhandledRejectionHandler=function(e){o.handleRejection_=e},o.CancellationError=function(t){function n(t){e.classCallCheck(this,n);var a=e.possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,t));return t&&(a.message=t),a}return e.inherits(n,t),n}(Error),o.CancellationError.prototype.name="cancel",this.sennaNamed.Promise=this.sennaNamed.Promise||{},this.sennaNamed.Promise.CancellablePromise=o,this.senna.Promise=o}.call(this),function(){function e(e){return{match:e[0],prefix:e[1],name:e[2],paramPattern:e[3],unnamedPattern:e[4],modifier:e[5]}}function t(e){for(var t="",r=0;r<e.length;r++)if(l.isString(e[r]))t+=a(e[r]);else{var s=n(e[r].pattern);e[r].repeat&&(s+=n("\\/"+s)+"*"),s=a(e[r].prefix)+("("+s+")"),e[r].optional&&(e[r].partial||(s=n(s)),s+="?"),t+=s}return new RegExp("^"+i(t)+"$")}function n(e){return"(?:"+e+")"}function a(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function i(e){return e+=/\/$/.test(e)?"?":"\\/?"}function r(t){if(!l.isString(t))return t;for(var n=t,a=0,i=[],r="",s=0,o=u.exec(n);o;){var c=e(o);r=n.slice(s,o.index),s=o.index+c.match.length,i.push(r),i.push({name:c.name?c.name:""+a++,partial:n[s]&&n[s]!==c.prefix,prefix:c.prefix||"",pattern:c.paramPattern||c.unnamedPattern||"[^\\/]+",repeat:"*"===c.modifier||"+"===c.modifier,optional:"*"===c.modifier||"?"===c.modifier}),o=u.exec(n)}return s<n.length&&i.push(n.substr(s)),i}function s(e){return t(r(e))}function o(e,n){var a={},i=r(e),s=n.match(t(i));if(!s)return null;for(var o=1,u=0;u<i.length;u++)if(!l.isString(i[u])){var c=s[o++];l.isDef(c)&&(i[u].repeat&&(c=c.split("/")),a[i[u].name]=c)}return a}var l=this.senna.metal,u=/([\/])?(?:(?:\:(\w+)(?:\(((?:\\.|[^\\()])*)\))?|\(((?:\\.|[^\\()])+)\))([+*?])?)/g;this.sennaNamed.pathParser=this.sennaNamed.pathParser||{},this.sennaNamed.pathParser.parse=r,this.sennaNamed.pathParser.toRegex=s,this.sennaNamed.pathParser.extractData=o}.call(this),function(){var t=this.sennaNamed.metal.core,n=this.sennaNamed.pathParser.extractData,a=this.sennaNamed.pathParser.parse,i=this.sennaNamed.pathParser.toRegex,r=function(){function r(n,a){if(e.classCallCheck(this,r),!t.isDefAndNotNull(n))throw new Error("Route path not specified.");if(!t.isFunction(a))throw new Error("Route handler is not a function.");this.handler=a,this.path=n}return e.createClass(r,[{key:"buildParsedData_",value:function(){if(!this.parsedData_){var e=a(this.path),t=i(e);this.parsedData_={regex:t,tokens:e}}return this.parsedData_}},{key:"extractParams",value:function(e){return t.isString(this.path)?n(this.buildParsedData_().tokens,e):{}}},{key:"getHandler",value:function(){return this.handler}},{key:"getPath",value:function(){return this.path}},{key:"matchesPath",value:function(e){var n=this.path;return t.isFunction(n)?n(e):(t.isString(n)&&(n=this.buildParsedData_().regex),n instanceof RegExp&&e.search(n)>-1)}}]),r}();this.senna.Route=r}.call(this),function(){var t=this.sennaNamed.metal.Disposable,n=function(t){function n(){e.classCallCheck(this,n);var t=e.possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this));return t.cache=null,t.cacheable=!1,t}return e.inherits(n,t),e.createClass(n,[{key:"addCache",value:function(e){return this.cacheable&&(this.cache=e),this}},{key:"clearCache",value:function(){return this.cache=null,this}},{key:"disposeInternal",value:function(){this.clearCache()}},{key:"getCache",value:function(){return this.cache}},{key:"isCacheable",value:function(){return this.cacheable}},{key:"setCacheable",value:function(e){e||this.clearCache(),this.cacheable=e}}]),n}(t);this.senna.Cacheable=n}.call(this),function(){var t=this.sennaNamed.metal.core,n=this.sennaNamed.dom.globalEval,a=this.senna.Cacheable,i=this.senna.Promise,r=function(a){function r(){e.classCallCheck(this,r);var n=e.possibleConstructorReturn(this,(r.__proto__||Object.getPrototypeOf(r)).call(this));return n.id=n.makeId_(t.getUid()),n.title=null,n}return e.inherits(r,a),e.createClass(r,[{key:"activate",value:function(){}},{key:"beforeDeactivate",value:function(){}},{key:"beforeUpdateHistoryPath",value:function(e){return e}},{key:"beforeUpdateHistoryState",value:function(e){return e}},{key:"deactivate",value:function(){}},{key:"disposeInternal",value:function(){e.get(r.prototype.__proto__||Object.getPrototypeOf(r.prototype),"disposeInternal",this).call(this)}},{key:"evaluateScripts",value:function(e){return Object.keys(e).forEach(function(t){e[t].activeChild&&n.runScriptsInElement(e[t].activeChild)}),i.resolve()}},{key:"evaluateStyles",value:function(){return i.resolve()}},{key:"flip",value:function(e){var t=this,n=[];return Object.keys(e).forEach(function(a){var i=e[a],r=i.show(t.id);n.push(r)}),i.all(n)}},{key:"getId",value:function(){return this.id}},{key:"getSurfaceContent",value:function(){}},{key:"getTitle",value:function(){return this.title}},{key:"load",value:function(){return i.resolve()}},{key:"makeId_",value:function(e){return"screen_"+e}},{key:"setId",value:function(e){this.id=e}},{key:"setTitle",value:function(e){this.title=e}},{key:"toString",value:function(){return this.id}}]),r}(a);r.isImplementedBy=function(e){return e instanceof r},this.senna.Screen=r}.call(this),function(){var t=this.senna.globals,n=this.sennaNamed.metal.core,a=this.sennaNamed.metal.Disposable,i=this.senna.dom,r=this.senna.Promise,s=function(a){function s(t){e.classCallCheck(this,s);var n=e.possibleConstructorReturn(this,(s.__proto__||Object.getPrototypeOf(s)).call(this));if(!t)throw new Error("Surface element id not specified. A surface element requires a valid id.");return n.activeChild=null,n.defaultChild=null,n.element=null,n.id=t,n.transitionFn=null,n.defaultChild=n.getChild(s.DEFAULT),n.maybeWrapContentAsDefault_(),n.activeChild=n.defaultChild,n}return e.inherits(s,a),e.createClass(s,[{key:"addContent",value:function(e,t){var a=this.defaultChild;n.isDefAndNotNull(t)&&(a=this.getChild(e),a?i.removeChildren(a):(a=this.createChild(e),this.transition(a,null)),i.append(a,t));var r=this.getElement();return r&&a&&i.append(r,a),a}},{key:"createChild",value:function(e){var n=t.document.createElement("div");return n.setAttribute("id",this.makeId_(e)),n}},{key:"getChild",value:function(e){return t.document.getElementById(this.makeId_(e))}},{key:"getElement",value:function(){return this.element?this.element:(this.element=t.document.getElementById(this.id),this.element)}},{key:"getId",value:function(){return this.id}},{key:"getTransitionFn",value:function(){return this.transitionFn}},{key:"makeId_",value:function(e){return this.id+"-"+e}},{key:"maybeWrapContentAsDefault_",value:function(){var e=this.getElement();if(e&&!this.defaultChild){for(var n=t.document.createDocumentFragment();e.firstChild;)n.appendChild(e.firstChild);this.defaultChild=this.addContent(s.DEFAULT,n),this.transition(null,this.defaultChild)}}},{key:"setId",value:function(e){this.id=e}},{key:"setTransitionFn",value:function(e){this.transitionFn=e}},{key:"show",value:function(e){var t=this.activeChild,n=this.getChild(e);return n||(n=this.defaultChild),this.activeChild=n,this.transition(t,n).thenAlways(function(){t&&t!==n&&i.exitDocument(t)})}},{key:"remove",value:function(e){var t=this.getChild(e);t&&i.exitDocument(t)}},{key:"toString",value:function(){return this.id}},{key:"transition",value:function(e,t){var n=this.transitionFn||s.defaultTransition;return r.resolve(n.call(this,e,t))}}]),s}(a);s.DEFAULT="default",s.defaultTransition=function(e,t){e&&(e.style.display="none",e.classList.remove("flipped")),t&&(t.style.display="block",t.classList.add("flipped"))},this.senna.Surface=s}.call(this),function(){var t=this.sennaNamed.metal.array,n=this.sennaNamed.metal.async,a=this.sennaNamed.metal.core,i=this.senna.debounce,r=this.senna.dom,s=this.senna.Promise,o=this.sennaNamed.events.EventEmitter,l=this.sennaNamed.events.EventHandler,u=this.senna.utils,c=this.senna.globals,h=this.senna.Route,d=this.senna.Screen,f=this.senna.Surface,v=this.senna.Uri,m=function(o){function m(){e.classCallCheck(this,m);var t=e.possibleConstructorReturn(this,(m.__proto__||Object.getPrototypeOf(m)).call(this));return t.activeScreen=null,t.activePath=null,t.allowPreventNavigate=!0,t.basePath="",t.browserPathBeforeNavigate=u.getCurrentBrowserPathWithoutHash(),t.captureScrollPositionFromScrollEvent=!0,t.defaultTitle=c.document.title,t.formSelector='form[enctype="multipart/form-data"]:not([data-senna-off])',t.ignoreQueryStringFromRoutePath=!1,t.linkSelector="a:not([data-senna-off])",t.loadingCssClass="senna-loading",t.nativeScrollRestorationSupported="scrollRestoration"in c.window.history,t.isNavigationPending=!1,t.pendingNavigate=null,t.popstateScrollLeft=0,t.popstateScrollTop=0,t.redirectPath=null,t.routes=[],t.screens={},t.skipLoadPopstate=!1,t.surfaces={},t.updateScrollPosition=!0,t.appEventHandlers_=new l,t.appEventHandlers_.add(r.on(c.window,"scroll",i(t.onScroll_.bind(t),100)),r.on(c.window,"load",t.onLoad_.bind(t)),r.on(c.window,"popstate",t.onPopstate_.bind(t))),t.on("startNavigate",t.onStartNavigate_),t.on("beforeNavigate",t.onBeforeNavigate_),t.on("beforeNavigate",t.onBeforeNavigateDefault_,!0),t.setLinkSelector(t.linkSelector),t.setFormSelector(t.formSelector),t}return e.inherits(m,o),e.createClass(m,[{key:"addRoutes",value:function(e){var t=this;return Array.isArray(e)||(e=[e]),e.forEach(function(e){e instanceof h||(e=new h(e.path,e.handler)),t.routes.push(e)}),this}},{key:"addSurfaces",value:function(e){var t=this;return Array.isArray(e)||(e=[e]),e.forEach(function(e){a.isString(e)&&(e=new f(e)),t.surfaces[e.getId()]=e}),this}},{key:"canNavigate",value:function(e){var t=u.getUrlPath(e),n=new v(e);return!!this.isLinkSameOrigin_(n.getHostname())&&(!!this.isSameBasePath_(t)&&((!n.getHash()||!u.isCurrentBrowserPath(t))&&!!this.findRoute(t)))}},{key:"clearScreensCache",value:function(){var e=this;Object.keys(this.screens).forEach(function(t){t===e.activePath?e.activeScreen.clearCache():e.removeScreen(t)})}},{key:"createScreenInstance",value:function(e,t){if(!this.pendingNavigate&&e===this.activePath)return this.activeScreen;var n=this.screens[e];if(!n){var a=t.getHandler();n=a===d||d.isImplementedBy(a.prototype)?new a:a(t)||new d}return n}},{key:"disposeInternal",value:function(){this.activeScreen&&this.removeScreen(this.activePath),this.clearScreensCache(),this.formEventHandler_.removeListener(),this.linkEventHandler_.removeListener(),this.appEventHandlers_.removeAllListeners(),e.get(m.prototype.__proto__||Object.getPrototypeOf(m.prototype),"disposeInternal",this).call(this)}},{key:"dispatch",value:function(){return this.navigate(u.getCurrentBrowserPath(),!0)}},{key:"doNavigate_",value:function(e,t){var n=this;if(this.activeScreen&&this.activeScreen.beforeDeactivate())return this.pendingNavigate=s.reject(new s.CancellationError("Cancelled by active screen")),this.pendingNavigate;var a=this.findRoute(e);if(!a)return this.pendingNavigate=s.reject(new s.CancellationError("No route for "+e)),this.pendingNavigate;this.stopPendingNavigate_(),this.isNavigationPending=!0;var i=this.createScreenInstance(e,a);return i.load(e).then(function(){n.activeScreen&&n.activeScreen.deactivate(),n.prepareNavigateHistory_(e,i,t),n.prepareNavigateSurfaces_(i,n.surfaces,n.extractParams(a,e))}).then(function(){return i.evaluateStyles(n.surfaces)}).then(function(){return i.flip(n.surfaces)}).then(function(){return i.evaluateScripts(n.surfaces)}).then(function(){return n.maybeUpdateScrollPositionState_()}).then(function(){return n.syncScrollPositionSyncThenAsync_()}).then(function(){return n.finalizeNavigate_(e,i)})["catch"](function(t){throw n.isNavigationPending=!1,n.handleNavigateError_(e,i,t),t})}},{key:"extractParams",value:function(e,t){return e.extractParams(this.getRoutePath(t))}},{key:"finalizeNavigate_",value:function(e,t){t.activate(),this.activeScreen&&!this.activeScreen.isCacheable()&&this.activeScreen!==t&&this.removeScreen(this.activePath),this.activePath=e,this.activeScreen=t,this.browserPathBeforeNavigate=u.getCurrentBrowserPathWithoutHash(),this.screens[e]=t,this.isNavigationPending=!1,this.pendingNavigate=null,c.capturedFormElement=null}},{key:"findRoute",value:function(e){e=this.getRoutePath(e);for(var t=0;t<this.routes.length;t++){var n=this.routes[t];if(n.matchesPath(e))return n}return null}},{key:"getAllowPreventNavigate",value:function(){return this.allowPreventNavigate}},{key:"getBasePath",value:function(){return this.basePath}},{key:"getDefaultTitle",value:function(){return this.defaultTitle}},{key:"getFormSelector",value:function(){return this.formSelector}},{key:"getIgnoreQueryStringFromRoutePath",value:function(){return this.ignoreQueryStringFromRoutePath}},{key:"getLinkSelector",value:function(){return this.linkSelector}},{key:"getLoadingCssClass",value:function(){return this.loadingCssClass}},{key:"getRoutePath",value:function(e){return this.getIgnoreQueryStringFromRoutePath()?(e=u.getUrlPathWithoutHashAndSearch(e),u.getUrlPathWithoutHashAndSearch(e.substr(this.basePath.length))):(e=u.getUrlPathWithoutHash(e),u.getUrlPathWithoutHash(e.substr(this.basePath.length)))}},{key:"getUpdateScrollPosition",value:function(){return this.updateScrollPosition}},{key:"handleNavigateError_",value:function(e,t,n){var a=this;u.isCurrentBrowserPath(e)||(this.isNavigationPending&&this.pendingNavigate?this.pendingNavigate.thenAlways(function(){return a.removeScreen(e)},this):this.removeScreen(e))}},{key:"hasRoutes",value:function(){return this.routes.length>0}},{key:"isLinkSameOrigin_",value:function(e){return e===c.window.location.hostname}},{key:"isSameBasePath_",value:function(e){return 0===e.indexOf(this.basePath)}},{key:"lockHistoryScrollPosition_",value:function(){var e=c.window.history.state;if(e){var t=!1,a=function i(){c.document.removeEventListener("scroll",i,!1),t||(c.window.scrollTo(e.scrollLeft,e.scrollTop),t=!0)};n.nextTick(a),c.document.addEventListener("scroll",a,!1)}}},{key:"maybeDisableNativeScrollRestoration",value:function(){this.nativeScrollRestorationSupported&&(this.nativeScrollRestoration_=c.window.history.scrollRestoration,c.window.history.scrollRestoration="manual")}},{key:"maybeNavigate_",value:function(e,t){if(this.canNavigate(e)){c.capturedFormElement=t.capturedFormElement;var n=!1;try{this.navigate(u.getUrlPath(e),!1,t)}catch(a){n=!0}n||t.preventDefault()}}},{key:"maybeRepositionScrollToHashedAnchor",value:function(){var e=c.window.location.hash;if(e){var t=c.document.getElementById(e.substring(1));t&&c.window.scrollTo(t.offsetLeft,t.offsetTop)}}},{key:"maybeRestoreNativeScrollRestoration",value:function(){this.nativeScrollRestorationSupported&&this.nativeScrollRestoration_&&(c.window.history.scrollRestoration=this.nativeScrollRestoration_)}},{key:"maybeRestoreRedirectPathHash_",value:function(e,t,n){return t===u.getUrlPathWithoutHash(e)?t+n:t}},{key:"maybeUpdateScrollPositionState_",value:function(){var e=c.window.location.hash,t=c.document.getElementById(e.substring(1));t&&this.saveHistoryCurrentPageScrollPosition_(t.offsetTop,t.offsetLeft)}},{key:"navigate",value:function(e,t,n){if(!u.isHtml5HistorySupported())throw new Error("HTML5 History is not supported. Senna will not intercept navigation.");return e===this.activePath&&(t=!0),this.emit("beforeNavigate",{event:n,path:e,replaceHistory:!!t}),this.pendingNavigate}},{key:"onBeforeNavigate_",value:function(e){c.capturedFormElement&&(e.form=c.capturedFormElement)}},{key:"onBeforeNavigateDefault_",value:function(e){this.pendingNavigate&&this.pendingNavigate.path===e.path||this.emit("startNavigate",{form:e.form,path:e.path,replaceHistory:e.replaceHistory})}},{key:"onDocClickDelegate_",value:function(e){e.altKey||e.ctrlKey||e.metaKey||e.shiftKey||e.button||this.maybeNavigate_(e.delegateTarget.href,e)}},{key:"onDocSubmitDelegate_",value:function(e){var t=e.delegateTarget;"get"!==t.method&&(e.capturedFormElement=t,this.maybeNavigate_(t.action,e))}},{key:"onLoad_",value:function(){var e=this;this.skipLoadPopstate=!0,setTimeout(function(){e.skipLoadPopstate=!1},0),this.maybeRepositionScrollToHashedAnchor()}},{key:"onPopstate_",value:function(e){if(!this.skipLoadPopstate){if(u.isCurrentBrowserPath(this.browserPathBeforeNavigate))return void this.maybeRepositionScrollToHashedAnchor();var t=e.state;return t?void(t.senna&&(this.popstateScrollTop=t.scrollTop,this.popstateScrollLeft=t.scrollLeft,this.nativeScrollRestorationSupported||this.lockHistoryScrollPosition_(),this.navigate(t.path,!0))):void(c.window.location.hash?(this.redirectPath&&!u.isCurrentBrowserPath(this.redirectPath)&&this.reloadPage(),this.maybeRepositionScrollToHashedAnchor()):this.reloadPage())}}},{key:"onScroll_",value:function(){this.captureScrollPositionFromScrollEvent&&this.saveHistoryCurrentPageScrollPosition_(c.window.pageYOffset,c.window.pageXOffset)}},{key:"onStartNavigate_",value:function(e){var t=this;this.maybeDisableNativeScrollRestoration(),this.captureScrollPositionFromScrollEvent=!1,r.addClasses(c.document.documentElement,this.loadingCssClass);var n={form:e.form,path:e.path};this.pendingNavigate=this.doNavigate_(e.path,e.replaceHistory)["catch"](function(e){throw n.error=e,e}).thenAlways(function(){t.pendingNavigate||(r.removeClasses(c.document.documentElement,t.loadingCssClass),t.maybeRestoreNativeScrollRestoration(),t.captureScrollPositionFromScrollEvent=!0),t.emit("endNavigate",n)}),this.pendingNavigate.path=e.path}},{key:"prefetch",value:function(e){var t=this,n=this.findRoute(e);if(!n)return s.reject(new s.CancellationError("No route for "+e));var a=this.createScreenInstance(e,n);return a.load(e).then(function(){
10
+ return t.screens[e]=a})["catch"](function(n){throw t.handleNavigateError_(e,a,n),n})}},{key:"prepareNavigateHistory_",value:function(e,t,n){var i=t.getTitle();a.isString(i)||(i=this.getDefaultTitle());var r=t.beforeUpdateHistoryPath(e),s={form:a.isDefAndNotNull(c.capturedFormElement),path:e,redirectPath:r,scrollLeft:0,scrollTop:0,senna:!0};n&&(s.scrollTop=this.popstateScrollTop,s.scrollLeft=this.popstateScrollLeft);var o=new v(e).getHash();r=this.maybeRestoreRedirectPathHash_(e,r,o),this.updateHistory_(i,r,t.beforeUpdateHistoryState(s),n),this.redirectPath=r}},{key:"prepareNavigateSurfaces_",value:function(e,t,n){Object.keys(t).forEach(function(a){var i=e.getSurfaceContent(a,n);t[a].addContent(e.getId(),i)})}},{key:"reloadPage",value:function(){c.window.location.reload()}},{key:"removeRoute",value:function(e){return t.remove(this.routes,e)}},{key:"removeScreen",value:function(e){var t=this,n=this.screens[e];n&&(Object.keys(this.surfaces).forEach(function(e){return t.surfaces[e].remove(n.getId())}),n.dispose(),delete this.screens[e])}},{key:"saveHistoryCurrentPageScrollPosition_",value:function(e,t){var n=c.window.history.state;if(n&&n.senna){var a=[e,t];n.scrollTop=a[0],n.scrollLeft=a[1],c.window.history.replaceState(n,null,null)}}},{key:"setAllowPreventNavigate",value:function(e){this.allowPreventNavigate=e}},{key:"setBasePath",value:function(e){this.basePath=e}},{key:"setDefaultTitle",value:function(e){this.defaultTitle=e}},{key:"setFormSelector",value:function(e){this.formSelector=e,this.formEventHandler_&&this.formEventHandler_.removeListener(),this.formEventHandler_=r.delegate(document,"submit",this.formSelector,this.onDocSubmitDelegate_.bind(this),this.allowPreventNavigate)}},{key:"setIgnoreQueryStringFromRoutePath",value:function(e){this.ignoreQueryStringFromRoutePath=e}},{key:"setLinkSelector",value:function(e){this.linkSelector=e,this.linkEventHandler_&&this.linkEventHandler_.removeListener(),this.linkEventHandler_=r.delegate(document,"click",this.linkSelector,this.onDocClickDelegate_.bind(this),this.allowPreventNavigate)}},{key:"setLoadingCssClass",value:function(e){this.loadingCssClass=e}},{key:"setUpdateScrollPosition",value:function(e){this.updateScrollPosition=e}},{key:"stopPendingNavigate_",value:function(){this.pendingNavigate&&(this.pendingNavigate.cancel("Cancel pending navigation"),this.pendingNavigate=null)}},{key:"syncScrollPositionSyncThenAsync_",value:function(){var e=this,t=c.window.history.state;if(t){var a=t.scrollTop,i=t.scrollLeft,r=function(){e.updateScrollPosition&&c.window.scrollTo(i,a)};return new s(function(e){return r()&n.nextTick(function(){return r()&e()})})}}},{key:"updateHistory_",value:function(e,t,n,a){a?c.window.history.replaceState(n,e,t):c.window.history.pushState(n,e,t);var i=c.document.querySelector("title");i?i.innerHTML=e:c.document.title=e}}]),m}(o);this.senna.App=m}.call(this),function(){var t=this.sennaNamed.metal.isDef,n=this.sennaNamed.metal.isDefAndNotNull,a=this.senna.Uri,i=this.sennaNamed.Promise.CancellablePromise,r=function(){function r(){e.classCallCheck(this,r)}return e.createClass(r,null,[{key:"parseResponseHeaders",value:function(e){var t=[];if(!e)return t;for(var n=e.split("\r\n"),a=0;a<n.length;a++){var i=n[a].indexOf(": ");if(i>0){var r=n[a].substring(0,i),s=n[a].substring(i+2);t.push({name:r,value:s})}}return t}},{key:"request",value:function s(e,r,o,l,u,c,h,d){e=e||"",r=r||"GET";var s=new XMLHttpRequest,f=new i(function(e,t){s.onload=function(){return s.aborted?void s.onerror():void e(s)},s.onerror=function(){var e=new Error("Request error");e.request=s,t(e)}}).thenCatch(function(e){throw s.abort(),e}).thenAlways(function(){clearTimeout(v)});if(u&&(e=new a(e).addParametersFromMultiMap(u).toString()),s.open(r,e,!h),d&&(s.withCredentials=!0),l&&l.names().forEach(function(e){s.setRequestHeader(e,l.getAll(e).join(", "))}),s.send(t(o)?o:null),n(c))var v=setTimeout(function(){f.cancel("Request timeout")},c);return f}}]),r}();this.senna.Ajax=r}.call(this),function(){var t=function n(){e.classCallCheck(this,n)};t.INVALID_STATUS="Invalid status code",t.REQUEST_ERROR="Request error",t.REQUEST_TIMEOUT="Request timeout",this.senna.errors=t}.call(this),function(){var t=function(){function t(){e.classCallCheck(this,t)}return e.createClass(t,null,[{key:"getNativeUserAgent",value:function(){var e=t.globals.window.navigator;if(e){var n=e.userAgent;if(n)return n}return""}},{key:"getNativePlatform",value:function(){var e=t.globals.window.navigator;if(e){var n=e.platform;if(n)return n}return""}},{key:"matchPlatform",value:function(e){return t.platform.indexOf(e)!==-1}},{key:"matchUserAgent",value:function(e){return t.userAgent.indexOf(e)!==-1}},{key:"testUserAgent",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";t.userAgent=e,t.platform=n,t.isMac=t.matchPlatform("Mac"),t.isWin=t.matchPlatform("Win"),t.isOpera=t.matchUserAgent("Opera")||t.matchUserAgent("OPR"),t.isIe=t.matchUserAgent("Trident")||t.matchUserAgent("MSIE"),t.isEdge=t.matchUserAgent("Edge"),t.isIeOrEdge=t.isIe||t.isEdge,t.isChrome=(t.matchUserAgent("Chrome")||t.matchUserAgent("CriOS"))&&!t.isOpera&&!t.isEdge,t.isSafari=t.matchUserAgent("Safari")&&!(t.isChrome||t.isOpera||t.isEdge),t.isFirefox=t.matchUserAgent("Firefox")}}]),t}();t.globals={window:window},t.testUserAgent(t.getNativeUserAgent(),t.getNativePlatform()),this.senna.UA=t}.call(this),function(){var t=this.sennaNamed.metal.core,n=this.senna.Ajax,a=this.sennaNamed.structs.MultiMap,i=this.senna.Promise,r=this.senna.errors,s=this.senna.utils,o=this.senna.globals,l=this.senna.Screen,u=this.senna.Uri,c=this.senna.UA,h=function(l){function h(){e.classCallCheck(this,h);var t=e.possibleConstructorReturn(this,(h.__proto__||Object.getPrototypeOf(h)).call(this));return t.cacheable=!0,t.httpHeaders={"X-PJAX":"true","X-Requested-With":"XMLHttpRequest"},t.httpMethod=h.GET,t.request=null,t.timeout=3e4,t}return e.inherits(h,l),e.createClass(h,[{key:"assertValidResponseStatusCode",value:function(e){if(!this.isValidResponseStatusCode(e)){var t=new Error(r.INVALID_STATUS);throw t.invalidStatus=!0,t.statusCode=e,t}}},{key:"beforeUpdateHistoryPath",value:function(e){var t=this.getRequestPath();return t&&t!==e?t:e}},{key:"beforeUpdateHistoryState",value:function(e){return e.senna&&e.form&&e.redirectPath===e.path?null:e}},{key:"formatLoadPath",value:function(e){var t=new u(e);return t.setHostname(o.window.location.hostname),t.setProtocol(o.window.location.protocol),o.window.location.port&&t.setPort(o.window.location.port),c.isIeOrEdge&&this.httpMethod===h.GET?t.makeUnique().toString():t.toString()}},{key:"getHttpHeaders",value:function(){return this.httpHeaders}},{key:"getHttpMethod",value:function(){return this.httpMethod}},{key:"getRequestPath",value:function(){var e=this.getRequest();if(e){var t=e.requestPath,n=this.maybeExtractResponseUrlFromRequest(e);return n&&(t=n),c.isIeOrEdge&&this.httpMethod===h.GET&&(t=new u(t).removeUnique().toString()),s.getUrlPath(t)}return null}},{key:"getRequest",value:function(){return this.request}},{key:"getTimeout",value:function(){return this.timeout}},{key:"isValidResponseStatusCode",value:function(e){return e>=200&&e<=399}},{key:"load",value:function(e){var s=this,l=this.getCache();if(t.isDefAndNotNull(l))return i.resolve(l);var u=null,d=this.httpMethod,f=new a;Object.keys(this.httpHeaders).forEach(function(e){return f.add(e,s.httpHeaders[e])}),o.capturedFormElement&&(u=new FormData(o.capturedFormElement),d=h.POST,c.isIeOrEdge&&f.add("If-None-Match",'"0"'));var v=this.formatLoadPath(e);return n.request(v,d,u,f,null,this.timeout).then(function(e){return s.setRequest(e),s.assertValidResponseStatusCode(e.status),d===h.GET&&s.isCacheable()&&s.addCache(e.responseText),e.requestPath=v,e.responseText})["catch"](function(e){switch(e.message){case r.REQUEST_TIMEOUT:e.timeout=!0;break;case r.REQUEST_ERROR:e.requestError=!0}throw e})}},{key:"maybeExtractResponseUrlFromRequest",value:function(e){var t=e.responseURL;return t?t:e.getResponseHeader(h.X_REQUEST_URL_HEADER)}},{key:"setHttpHeaders",value:function(e){this.httpHeaders=e}},{key:"setHttpMethod",value:function(e){this.httpMethod=e.toLowerCase()}},{key:"setRequest",value:function(e){this.request=e}},{key:"setTimeout",value:function(e){this.timeout=e}}]),h}(l);h.GET="get",h.POST="post",h.X_REQUEST_URL_HEADER="X-Request-URL",this.senna.RequestScreen=h}.call(this),function(){var t=this.sennaNamed.metal.core,n=this.sennaNamed.dom.dom,a=this.sennaNamed.dom.globalEval,i=this.sennaNamed.dom.globalEvalStyles,r=this.senna.Promise,s=this.senna.globals,o=this.senna.RequestScreen,l=this.senna.Surface,u=this.senna.UA,c=this.senna.Uri,h=this.senna.utils,d=function(o){function d(){e.classCallCheck(this,d);var t=e.possibleConstructorReturn(this,(d.__proto__||Object.getPrototypeOf(d)).call(this));return t.titleSelector="title",t}return e.inherits(d,o),e.createClass(d,[{key:"activate",value:function(){e.get(d.prototype.__proto__||Object.getPrototypeOf(d.prototype),"activate",this).call(this),this.releaseVirtualDocument(),this.pendingStyles=null}},{key:"allocateVirtualDocumentForContent",value:function(e){this.virtualDocument||(this.virtualDocument=s.document.createElement("html")),this.copyNodeAttributesFromContent_(e,this.virtualDocument),this.virtualDocument.innerHTML=e}},{key:"appendStyleIntoDocument_",value:function(e){var t=n.match(e,d.selectors.stylesTemporary);if(t&&this.pendingStyles.push(e),e.id){var a=s.document.getElementById(e.id);if(a)return void a.parentNode.insertBefore(e,a.nextSibling)}s.document.head.appendChild(e)}},{key:"assertSameBodyIdInVirtualDocument",value:function(){var e=this.virtualDocument.querySelector("body");s.document.body.id||(s.document.body.id="senna_surface_"+t.getUid()),e&&(e.id=s.document.body.id)}},{key:"copyNodeAttributesFromContent_",value:function(e,t){e=e.replace(/[<]\s*html/gi,"<senna"),e=e.replace(/\/html\s*\>/gi,"/senna>"),t.innerHTML=e;var n=t.querySelector("senna");n&&(h.clearNodeAttributes(t),h.copyNodeAttributes(n,t))}},{key:"disposeInternal",value:function(){this.disposePendingStyles(),e.get(d.prototype.__proto__||Object.getPrototypeOf(d.prototype),"disposeInternal",this).call(this)}},{key:"disposePendingStyles",value:function(){this.pendingStyles&&this.pendingStyles.forEach(function(e){return n.exitDocument(e)})}},{key:"evaluateScripts",value:function(t){var n=this,i=this.evaluateTrackedResources_(a.runScriptsInElement,d.selectors.scripts,d.selectors.scriptsTemporary,d.selectors.scriptsPermanent);return i.then(function(){return e.get(d.prototype.__proto__||Object.getPrototypeOf(d.prototype),"evaluateScripts",n).call(n,t)})}},{key:"evaluateStyles",value:function(t){var n=this;this.pendingStyles=[];var a=this.evaluateTrackedResources_(i.runStylesInElement,d.selectors.styles,d.selectors.stylesTemporary,d.selectors.stylesPermanent,this.appendStyleIntoDocument_.bind(this));return a.then(function(){return e.get(d.prototype.__proto__||Object.getPrototypeOf(d.prototype),"evaluateStyles",n).call(n,t)})}},{key:"evaluateTrackedResources_",value:function(e,t,a,i,s){var o=this,l=this.virtualQuerySelectorAll_(t),u=this.querySelectorAll_(a),c=this.querySelectorAll_(i);c.forEach(function(e){var t=o.getResourceKey_(e);t&&(d.permanentResourcesInDoc[t]=!0)});var h=n.buildFragment();return l.forEach(function(e){var t=o.getResourceKey_(e);d.permanentResourcesInDoc[t]||h.appendChild(e),t&&n.match(e,i)&&(d.permanentResourcesInDoc[t]=!0)}),new r(function(t){e(h,function(){u.forEach(function(e){return n.exitDocument(e)}),t()},s)})}},{key:"flip",value:function(t){var n=this;return e.get(d.prototype.__proto__||Object.getPrototypeOf(d.prototype),"flip",this).call(this,t).then(function(){h.clearNodeAttributes(document.documentElement),h.copyNodeAttributes(n.virtualDocument,document.documentElement)})}},{key:"getResourceKey_",value:function(e){return e.id||e.href||e.src||""}},{key:"getSurfaceContent",value:function(e){var t=this.virtualDocument.querySelector("#"+e);if(t){var n=t.querySelector("#"+e+"-"+l.DEFAULT);return n?n.innerHTML:t.innerHTML}}},{key:"getTitleSelector",value:function(){return this.titleSelector}},{key:"load",value:function(t){var n=this;return e.get(d.prototype.__proto__||Object.getPrototypeOf(d.prototype),"load",this).call(this,t).then(function(e){return n.allocateVirtualDocumentForContent(e),n.resolveTitleFromVirtualDocument(),n.assertSameBodyIdInVirtualDocument(),u.isIe&&n.makeTemporaryStylesHrefsUnique_(),e})}},{key:"makeTemporaryStylesHrefsUnique_",value:function(){var e=this,t=this.virtualQuerySelectorAll_(d.selectors.stylesTemporary);t.forEach(function(t){return e.replaceStyleAndMakeUnique_(t)})}},{key:"replaceStyleAndMakeUnique_",value:function(e){if(e.href){var t=s.document.createElement(e.tagName);e.href=new c(e.href).makeUnique().toString(),h.copyNodeAttributes(e,t),e.parentNode.replaceChild(t,e),e.disabled=!0}}},{key:"virtualQuerySelectorAll_",value:function(e){return Array.prototype.slice.call(this.virtualDocument.querySelectorAll(e))}},{key:"querySelectorAll_",value:function(e){return Array.prototype.slice.call(s.document.querySelectorAll(e))}},{key:"releaseVirtualDocument",value:function(){this.virtualDocument=null}},{key:"resolveTitleFromVirtualDocument",value:function(){var e=this.virtualDocument.querySelector(this.titleSelector);e&&this.setTitle(e.textContent.trim())}},{key:"setTitleSelector",value:function(e){this.titleSelector=e}}]),d}(o);d.selectors={scripts:"script[data-senna-track]",scriptsPermanent:'script[data-senna-track="permanent"]',scriptsTemporary:'script[data-senna-track="temporary"]',styles:"style[data-senna-track],link[data-senna-track]",stylesPermanent:'style[data-senna-track="permanent"],link[data-senna-track="permanent"]',stylesTemporary:'style[data-senna-track="temporary"],link[data-senna-track="temporary"]'},d.permanentResourcesInDoc={},this.senna.HtmlScreen=d}.call(this),function(){var e=this.senna.utils,t=this.senna.App,n=this.senna.HtmlScreen,a=this.senna.RequestScreen,i=this.senna.Route,r=this.senna.Screen;this.senna.senna=t,this.sennaNamed.senna=this.sennaNamed.senna||{},this.sennaNamed.senna.utils=e,this.sennaNamed.senna.App=t,this.sennaNamed.senna.HtmlScreen=n,this.sennaNamed.senna.Route=i,this.sennaNamed.senna.RequestScreen=a,this.sennaNamed.senna.Screen=r}.call(this),function(){this.senna.dataAttributes={basePath:"data-senna-base-path",linkSelector:"data-senna-link-selector",loadingCssClass:"data-senna-loading-css-class",senna:"data-senna",dispatch:"data-senna-dispatch",surface:"data-senna-surface",updateScrollPosition:"data-senna-update-scroll-position"}}.call(this),function(){var t=this.sennaNamed.metal.core,n=this.sennaNamed.metal.object,a=this.sennaNamed.metal.Disposable,i=this.senna.dataAttributes,r=this.senna.globals,s=this.senna.App,o=this.senna.HtmlScreen,l=this.senna.Route,u=function(a){function u(){e.classCallCheck(this,u);var t=e.possibleConstructorReturn(this,(u.__proto__||Object.getPrototypeOf(u)).call(this));return t.app=null,t.baseElement=null,t}return e.inherits(u,a),e.createClass(u,[{key:"handle",value:function(){if(!t.isElement(this.baseElement))throw new Error("Senna data attribute handler base element not set or invalid, try setting a valid element that contains a `data-senna` attribute.");if(this.baseElement.hasAttribute(i.senna)){if(this.app)throw new Error("Senna app was already initialized.");this.app=new s,this.maybeAddRoutes_(),this.maybeAddSurfaces_(),this.maybeSetBasePath_(),this.maybeSetLinkSelector_(),this.maybeSetLoadingCssClass_(),this.maybeSetUpdateScrollPosition_(),this.maybeDispatch_()}}},{key:"disposeInternal",value:function(){this.app&&this.app.dispose()}},{key:"getApp",value:function(){return this.app}},{key:"getBaseElement",value:function(){return this.baseElement}},{key:"maybeAddRoutes_",value:function(){var e=this,t='link[rel="senna-route"]';this.querySelectorAllAsArray_(t).forEach(function(t){return e.maybeParseLinkRoute_(t)}),this.app.hasRoutes()||this.app.addRoutes(new l(/.*/,o))}},{key:"maybeAddSurfaces_",value:function(){var e=this,t="["+i.surface+"]";this.querySelectorAllAsArray_(t).forEach(function(t){e.updateElementIdIfSpecialSurface_(t),e.app.addSurfaces(t.id)})}},{key:"maybeDispatch_",value:function(){this.baseElement.hasAttribute(i.dispatch)&&this.app.dispatch()}},{key:"maybeParseLinkRoute_",value:function(e){var t=new l(this.maybeParseLinkRoutePath_(e),this.maybeParseLinkRouteHandler_(e));this.app.addRoutes(t)}},{key:"maybeParseLinkRouteHandler_",value:function(e){var a=e.getAttribute("type");return t.isDefAndNotNull(a)&&(a=n.getObjectByName(a)),a}},{key:"maybeParseLinkRoutePath_",value:function(e){var n=e.getAttribute("href");return t.isDefAndNotNull(n)&&0===n.indexOf("regex:")&&(n=new RegExp(n.substring(6))),n}},{key:"maybeSetBasePath_",value:function(){var e=this.baseElement.getAttribute(i.basePath);t.isDefAndNotNull(e)&&this.app.setBasePath(e)}},{key:"maybeSetLinkSelector_",value:function(){var e=this.baseElement.getAttribute(i.linkSelector);t.isDefAndNotNull(e)&&this.app.setLinkSelector(e)}},{key:"maybeSetLoadingCssClass_",value:function(){var e=this.baseElement.getAttribute(i.loadingCssClass);t.isDefAndNotNull(e)&&this.app.setLoadingCssClass(e)}},{key:"maybeSetUpdateScrollPosition_",value:function(){var e=this.baseElement.getAttribute(i.updateScrollPosition);t.isDefAndNotNull(e)&&("false"===e?this.app.setUpdateScrollPosition(!1):this.app.setUpdateScrollPosition(!0))}},{key:"querySelectorAllAsArray_",value:function(e){return Array.prototype.slice.call(r.document.querySelectorAll(e))}},{key:"updateElementIdIfSpecialSurface_",value:function(e){e.id||e!==r.document.body||(e.id="senna_surface_"+t.getUid())}},{key:"setBaseElement",value:function(e){this.baseElement=e}}]),u}(a);this.senna.AppDataAttributeHandler=u}.call(this),function(){var e=this.senna.globals,t=this.senna.AppDataAttributeHandler,n=new t;e.document.addEventListener("DOMContentLoaded",function(){n.setBaseElement(e.document.body),n.handle()}),this.senna.dataAttributeHandler=n}.call(this)}).call(this);
@@ -1 +1,66 @@
1
- .senna-loading-bar{background:#2aaae6;background:rgba(255,255,255,.5)}.senna-loading .senna-loading-bar{-webkit-animation:shift-rightwards 1s ease-in-out infinite;animation:shift-rightwards 1s ease-in-out infinite;-webkit-animation-delay:.4s;animation-delay:.4s;display:block}.senna-loading-bar{-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);background:#2fa4f5;display:none;height:2px;left:0;position:fixed;right:0;top:0;z-index:1000}@-webkit-keyframes shift-rightwards{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}40%,60%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes shift-rightwards{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}40%,60%{-webkit-transform:translateX(0);transform:translateX(0)}to{-webkit-transform:translateX(100%);transform:translateX(100%)}}[class^="senna-transition-"] .flipped{-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-fill-mode:both;animation-fill-mode:both}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.senna-transition-fade .flipped{-webkit-animation-name:fadeIn;animation-name:fadeIn}
1
+ /* Loading */
2
+ .senna-loading .senna-loading-bar {
3
+ -webkit-animation: shift-rightwards 1s ease-in-out infinite;
4
+ animation: shift-rightwards 1s ease-in-out infinite;
5
+ -webkit-animation-delay: .4s;
6
+ animation-delay: .4s;
7
+ display: block; }
8
+
9
+ .senna-loading-bar {
10
+ -webkit-transform: translateX(100%);
11
+ transform: translateX(100%);
12
+ background: #2fa4f5;
13
+ display: none;
14
+ height: 2px;
15
+ left: 0;
16
+ position: fixed;
17
+ right: 0;
18
+ top: 0;
19
+ z-index: 10000; }
20
+
21
+ @-webkit-keyframes shift-rightwards {
22
+ 0% {
23
+ -webkit-transform: translateX(-100%);
24
+ transform: translateX(-100%); }
25
+ 40%,
26
+ 60% {
27
+ -webkit-transform: translateX(0);
28
+ transform: translateX(0); }
29
+ to {
30
+ -webkit-transform: translateX(100%);
31
+ transform: translateX(100%); } }
32
+
33
+ @keyframes shift-rightwards {
34
+ 0% {
35
+ -webkit-transform: translateX(-100%);
36
+ transform: translateX(-100%); }
37
+ 40%,
38
+ 60% {
39
+ -webkit-transform: translateX(0);
40
+ transform: translateX(0); }
41
+ to {
42
+ -webkit-transform: translateX(100%);
43
+ transform: translateX(100%); } }
44
+
45
+ /* Transition */
46
+ [class^="senna-transition-"] .flipped {
47
+ -webkit-animation-duration: 0.40s;
48
+ animation-duration: 0.40s;
49
+ -webkit-animation-fill-mode: both;
50
+ animation-fill-mode: both; }
51
+
52
+ @-webkit-keyframes fadeIn {
53
+ 0% {
54
+ opacity: 0; }
55
+ 100% {
56
+ opacity: 1; } }
57
+
58
+ @keyframes fadeIn {
59
+ 0% {
60
+ opacity: 0; }
61
+ 100% {
62
+ opacity: 1; } }
63
+
64
+ .senna-transition-fade .flipped {
65
+ -webkit-animation-name: fadeIn;
66
+ animation-name: fadeIn; }
metadata CHANGED
@@ -1,56 +1,51 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: senna_gem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Fernando Aureliano
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-10-19 00:00:00.000000000 Z
11
+ date: 2017-03-12 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: '1.3'
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '1.3'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
- description: This gem implement sennajs in your ruby project.
41
+ description: This gem load sennajs in your ruby project.
47
42
  email:
48
43
  - mail@fernandoaureliano.com
49
44
  executables: []
50
45
  extensions: []
51
46
  extra_rdoc_files: []
52
47
  files:
53
- - .gitignore
48
+ - ".gitignore"
54
49
  - Gemfile
55
50
  - LICENSE.txt
56
51
  - README.md
@@ -63,27 +58,26 @@ files:
63
58
  homepage: http://sennajs.com
64
59
  licenses:
65
60
  - MIT
61
+ metadata: {}
66
62
  post_install_message:
67
63
  rdoc_options: []
68
64
  require_paths:
69
65
  - lib
70
66
  - vendor
71
67
  required_ruby_version: !ruby/object:Gem::Requirement
72
- none: false
73
68
  requirements:
74
- - - ! '>='
69
+ - - ">="
75
70
  - !ruby/object:Gem::Version
76
71
  version: '0'
77
72
  required_rubygems_version: !ruby/object:Gem::Requirement
78
- none: false
79
73
  requirements:
80
- - - ! '>='
74
+ - - ">="
81
75
  - !ruby/object:Gem::Version
82
76
  version: '0'
83
77
  requirements: []
84
78
  rubyforge_project:
85
- rubygems_version: 1.8.23
79
+ rubygems_version: 2.6.8
86
80
  signing_key:
87
- specification_version: 3
81
+ specification_version: 4
88
82
  summary: ''
89
83
  test_files: []