Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/es6.array.every",["module","exports","require","./_export","./_array-methods","./_strict-method"],function(module,exports,require){var define=undefined;var $export=require("./_export");var $every=require("./_array-methods")(4);$export($export.P+$export.F*!require("./_strict-method")([].every,true),"Array",{every:function every(callbackfn){return $every(this,callbackfn,arguments[1])}})});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/_array-reduce",["module","exports","require","./_a-function","./_to-object","./_iobject","./_to-length"],function(module,exports,require){var define=undefined;var aFunction=require("./_a-function");var toObject=require("./_to-object");var IObject=require("./_iobject");var toLength=require("./_to-length");module.exports=function(that,callbackfn,aLen,memo,isRight){aFunction(callbackfn);var O=toObject(that);var self=IObject(O);var length=
toLength(O.length);var index=isRight?length-1:0;var i=isRight?-1:1;if(aLen<2)for(;;){if(index in self){memo=self[index];index+=i;break}index+=i;if(isRight?index<0:length<=index)throw TypeError("Reduce of empty array with no initial value");}for(;isRight?index>=0:length>index;index+=i)if(index in self)memo=callbackfn(memo,self[index],index,O);return memo}});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/es6.array.reduce",["module","exports","require","./_export","./_array-reduce","./_strict-method"],function(module,exports,require){var define=undefined;var $export=require("./_export");var $reduce=require("./_array-reduce");$export($export.P+$export.F*!require("./_strict-method")([].reduce,true),"Array",{reduce:function reduce(callbackfn){return $reduce(this,callbackfn,arguments.length,arguments[1],false)}})});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/es6.array.reduce-right",["module","exports","require","./_export","./_array-reduce","./_strict-method"],function(module,exports,require){var define=undefined;var $export=require("./_export");var $reduce=require("./_array-reduce");$export($export.P+$export.F*!require("./_strict-method")([].reduceRight,true),"Array",{reduceRight:function reduceRight(callbackfn){return $reduce(this,callbackfn,arguments.length,arguments[1],true)}})});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/es6.array.index-of",["module","exports","require","./_export","./_array-includes","./_strict-method"],function(module,exports,require){var define=undefined;var $export=require("./_export");var $indexOf=require("./_array-includes")(false);var $native=[].indexOf;var NEGATIVE_ZERO=!!$native&&1/[1].indexOf(1,-0)<0;$export($export.P+$export.F*(NEGATIVE_ZERO||!require("./_strict-method")($native)),"Array",{indexOf:function indexOf(searchElement){return NEGATIVE_ZERO?
$native.apply(this,arguments)||0:$indexOf(this,searchElement,arguments[1])}})});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/es6.array.last-index-of",["module","exports","require","./_export","./_to-iobject","./_to-integer","./_to-length","./_strict-method"],function(module,exports,require){var define=undefined;var $export=require("./_export");var toIObject=require("./_to-iobject");var toInteger=require("./_to-integer");var toLength=require("./_to-length");var $native=[].lastIndexOf;var NEGATIVE_ZERO=!!$native&&1/[1].lastIndexOf(1,-0)<0;$export($export.P+
$export.F*(NEGATIVE_ZERO||!require("./_strict-method")($native)),"Array",{lastIndexOf:function lastIndexOf(searchElement){if(NEGATIVE_ZERO)return $native.apply(this,arguments)||0;var O=toIObject(this);var length=toLength(O.length);var index=length-1;if(arguments.length>1)index=Math.min(index,toInteger(arguments[1]));if(index<0)index=length+index;for(;index>=0;index--)if(index in O)if(O[index]===searchElement)return index||0;return-1}})});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/_array-copy-within",["module","exports","require","./_to-object","./_to-absolute-index","./_to-length"],function(module,exports,require){var define=undefined;var toObject=require("./_to-object");var toAbsoluteIndex=require("./_to-absolute-index");var toLength=require("./_to-length");module.exports=[].copyWithin||function copyWithin(target,start){var O=toObject(this);var len=toLength(O.length);var to=toAbsoluteIndex(target,len);var from=
toAbsoluteIndex(start,len);var end=arguments.length>2?arguments[2]:undefined;var count=Math.min((end===undefined?len:toAbsoluteIndex(end,len))-from,len-to);var inc=1;if(from<to&&to<from+count){inc=-1;from+=count-1;to+=count-1}while(count-- >0){if(from in O)O[to]=O[from];else delete O[to];to+=inc;from+=inc}return O}});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/_add-to-unscopables",["module","exports","require","./_wks","./_hide"],function(module,exports,require){var define=undefined;var UNSCOPABLES=require("./_wks")("unscopables");var ArrayProto=Array.prototype;if(ArrayProto[UNSCOPABLES]==undefined)require("./_hide")(ArrayProto,UNSCOPABLES,{});module.exports=function(key){ArrayProto[UNSCOPABLES][key]=true}});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/es6.array.copy-within",["module","exports","require","./_export","./_array-copy-within","./_add-to-unscopables"],function(module,exports,require){var define=undefined;var $export=require("./_export");$export($export.P,"Array",{copyWithin:require("./_array-copy-within")});require("./_add-to-unscopables")("copyWithin")});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/_array-fill",["module","exports","require","./_to-object","./_to-absolute-index","./_to-length"],function(module,exports,require){var define=undefined;var toObject=require("./_to-object");var toAbsoluteIndex=require("./_to-absolute-index");var toLength=require("./_to-length");module.exports=function fill(value){var O=toObject(this);var length=toLength(O.length);var aLen=arguments.length;var index=toAbsoluteIndex(aLen>1?arguments[1]:
undefined,length);var end=aLen>2?arguments[2]:undefined;var endPos=end===undefined?length:toAbsoluteIndex(end,length);while(endPos>index)O[index++]=value;return O}});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/es6.array.fill",["module","exports","require","./_export","./_array-fill","./_add-to-unscopables"],function(module,exports,require){var define=undefined;var $export=require("./_export");$export($export.P,"Array",{fill:require("./_array-fill")});require("./_add-to-unscopables")("fill")});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/es6.array.find",["module","exports","require","./_export","./_array-methods","./_add-to-unscopables"],function(module,exports,require){var define=undefined;var $export=require("./_export");var $find=require("./_array-methods")(5);var KEY="find";var forced=true;if(KEY in[])Array(1)[KEY](function(){forced=false});$export($export.P+$export.F*forced,"Array",{find:function find(callbackfn){return $find(this,callbackfn,arguments.length>
1?arguments[1]:undefined)}});require("./_add-to-unscopables")(KEY)});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/es6.array.find-index",["module","exports","require","./_export","./_array-methods","./_add-to-unscopables"],function(module,exports,require){var define=undefined;var $export=require("./_export");var $find=require("./_array-methods")(6);var KEY="findIndex";var forced=true;if(KEY in[])Array(1)[KEY](function(){forced=false});$export($export.P+$export.F*forced,"Array",{findIndex:function findIndex(callbackfn){return $find(this,callbackfn,
arguments.length>1?arguments[1]:undefined)}});require("./_add-to-unscopables")(KEY)});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/_set-species",["module","exports","require","./_global","./_object-dp","./_descriptors","./_wks"],function(module,exports,require){var define=undefined;var global=require("./_global");var dP=require("./_object-dp");var DESCRIPTORS=require("./_descriptors");var SPECIES=require("./_wks")("species");module.exports=function(KEY){var C=global[KEY];if(DESCRIPTORS&&C&&!C[SPECIES])dP.f(C,SPECIES,{configurable:true,get:function(){return this}})}});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/es6.array.species",["module","exports","require","./_set-species"],function(module,exports,require){var define=undefined;require("./_set-species")("Array")});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/_iter-step",["module","exports","require"],function(module,exports,require){var define=undefined;module.exports=function(done,value){return{value:value,done:!!done}}});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/modules/es6.array.iterator",["module","exports","require","./_add-to-unscopables","./_iter-step","./_iterators","./_to-iobject","./_iter-define"],function(module,exports,require){var define=undefined;var addToUnscopables=require("./_add-to-unscopables");var step=require("./_iter-step");var Iterators=require("./_iterators");var toIObject=require("./_to-iobject");module.exports=require("./_iter-define")(Array,"Array",function(iterated,kind){this._t=
toIObject(iterated);this._i=0;this._k=kind},function(){var O=this._t;var kind=this._k;var index=this._i++;if(!O||index>=O.length){this._t=undefined;return step(1)}if(kind=="keys")return step(0,index);if(kind=="values")return step(0,O[index]);return step(0,[index,O[index]])},"values");Iterators.Arguments=Iterators.Array;addToUnscopables("keys");addToUnscopables("values");addToUnscopables("entries")});
Liferay.Loader.define("frontend-js-metal-web$core-js@2.5.7/es6/array",["module","exports","require","../modules/es6.string.iterator","../modules/es6.array.is-array","../modules/es6.array.from","../modules/es6.array.of","../modules/es6.array.join","../modules/es6.array.slice","../modules/es6.array.sort","../modules/es6.array.for-each","../modules/es6.array.map","../modules/es6.array.filter","../modules/es6.array.some","../modules/es6.array.every","../modules/es6.array.reduce","../modules/es6.array.reduce-right",
"../modules/es6.array.index-of","../modules/es6.array.last-index-of","../modules/es6.array.copy-within","../modules/es6.array.fill","../modules/es6.array.find","../modules/es6.array.find-index","../modules/es6.array.species","../modules/es6.array.iterator","../modules/_core"],function(module,exports,require){var define=undefined;require("../modules/es6.string.iterator");require("../modules/es6.array.is-array");require("../modules/es6.array.from");require("../modules/es6.array.of");require("../modules/es6.array.join");
require("../modules/es6.array.slice");require("../modules/es6.array.sort");require("../modules/es6.array.for-each");require("../modules/es6.array.map");require("../modules/es6.array.filter");require("../modules/es6.array.some");require("../modules/es6.array.every");require("../modules/es6.array.reduce");require("../modules/es6.array.reduce-right");require("../modules/es6.array.index-of");require("../modules/es6.array.last-index-of");require("../modules/es6.array.copy-within");require("../modules/es6.array.fill");
require("../modules/es6.array.find");require("../modules/es6.array.find-index");require("../modules/es6.array.species");require("../modules/es6.array.iterator");module.exports=require("../modules/_core").Array});
Liferay.Loader.define("frontend-js-metal-web$metal-debounce@2.0.1/lib/debounce",["module","exports","require","frontend-js-metal-web$core-js/es6/array"],function(module,exports,require){var define=undefined;Object.defineProperty(exports,"__esModule",{value:true});exports.debounce=exports.cancelDebounce=undefined;var _array=require("frontend-js-metal-web$core-js/es6/array");var _array2=_interopRequireDefault(_array);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}
function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i<arr.length;i++)arr2[i]=arr[i];return arr2}else return Array.from(arr)}function debounce(fn,delay){return function debounced(){var args=arguments;cancelDebounce(debounced);debounced.id=setTimeout(function(){fn.apply(undefined,_toConsumableArray((null,args)))},delay)}}function cancelDebounce(debounced){clearTimeout(debounced.id)}exports.default=debounce;exports.cancelDebounce=cancelDebounce;exports.debounce=
debounce});
Liferay.Loader.define("frontend-js-metal-web$metal-path-parser@1.0.3/lib/pathParser",["module","exports","require","frontend-js-metal-web$metal"],function(module,exports,require){var define=undefined;Object.defineProperty(exports,"__esModule",{value:true});exports.parse=parse;exports.toRegex=toRegex;exports.extractData=extractData;var _metal=require("frontend-js-metal-web$metal");var _metal2=_interopRequireDefault(_metal);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}
var REGEX=/([\/])?(?:(?::(\w+)(?:\(((?:\\.|[^\\()])*)\))?|\(((?:\\.|[^\\()])+)\))([+*?])?)/g;function convertMatchesToObj(matches){return{match:matches[0],prefix:matches[1],name:matches[2],paramPattern:matches[3],unnamedPattern:matches[4],modifier:matches[5]}}function convertTokensToRegex(tokens){var regex="";for(var i=0;i<tokens.length;i++)if(_metal2.default.isString(tokens[i]))regex+=escape(tokens[i]);else{var capture=encloseNonCapturingGroup(tokens[i].pattern);if(tokens[i].repeat)capture+=encloseNonCapturingGroup("\\/"+
capture)+"*";capture=escape(tokens[i].prefix)+("("+capture+")");if(tokens[i].optional){if(!tokens[i].partial)capture=encloseNonCapturingGroup(capture);capture+="?"}regex+=capture}return new RegExp("^"+makeTrailingSlashOptional(regex)+"$")}function encloseNonCapturingGroup(pattern){return"(?:"+pattern+")"}function escape(str){return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function makeTrailingSlashOptional(regex){if(/\/$/.test(regex))regex+="?";else regex+="\\/?";return regex}function parse(routeOrTokens){if(!_metal2.default.isString(routeOrTokens))return routeOrTokens;
var route=routeOrTokens;var unnamedCount=0;var tokens=[];var currPath="";var index=0;var matches=REGEX.exec(route);while(matches){var data=convertMatchesToObj(matches);currPath=route.slice(index,matches.index);index=matches.index+data.match.length;tokens.push(currPath);tokens.push({name:data.name?data.name:""+unnamedCount++,partial:route[index]&&route[index]!==data.prefix,prefix:data.prefix||"",pattern:data.paramPattern||data.unnamedPattern||"[^\\/]+",repeat:data.modifier==="*"||data.modifier==="+",
optional:data.modifier==="*"||data.modifier==="?"});matches=REGEX.exec(route)}if(index<route.length)tokens.push(route.substr(index));return tokens}function toRegex(routeOrTokens){return convertTokensToRegex(parse(routeOrTokens))}function extractData(routeOrTokens,path){var data={};var tokens=parse(routeOrTokens);var match=path.match(convertTokensToRegex(tokens));if(!match)return null;var paramIndex=1;for(var i=0;i<tokens.length;i++)if(!_metal2.default.isString(tokens[i])){var value=match[paramIndex++];
if(_metal2.default.isDef(value)){if(tokens[i].repeat)value=value.split("/");data[tokens[i].name]=value}}return data}});
Liferay.Loader.define("frontend-js-spa-web$senna@2.7.3/lib/route/Route",["module","exports","require","frontend-js-metal-web$metal","frontend-js-metal-web$metal-path-parser"],function(module,exports,require){var define=undefined;Object.defineProperty(exports,"__esModule",{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in
descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();var _metal=require("frontend-js-metal-web$metal");var _metalPathParser=require("frontend-js-metal-web$metal-path-parser");function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function");
}var Route=function(){function Route(path,handler){_classCallCheck(this,Route);if(!(0,_metal.isDefAndNotNull)(path))throw new Error("Route path not specified.");if(!(0,_metal.isFunction)(handler))throw new Error("Route handler is not a function.");this.handler=handler;this.path=path}_createClass(Route,[{key:"buildParsedData_",value:function buildParsedData_(){if(!this.parsedData_){var tokens=(0,_metalPathParser.parse)(this.path);var regex=(0,_metalPathParser.toRegex)(tokens);this.parsedData_={regex:regex,
tokens:tokens}}return this.parsedData_}},{key:"extractParams",value:function extractParams(path){if((0,_metal.isString)(this.path))return(0,_metalPathParser.extractData)(this.buildParsedData_().tokens,path);return{}}},{key:"getHandler",value:function getHandler(){return this.handler}},{key:"getPath",value:function getPath(){return this.path}},{key:"matchesPath",value:function matchesPath(value){var path=this.path;if((0,_metal.isFunction)(path))return path(value);if((0,_metal.isString)(path))path=
this.buildParsedData_().regex;if(path instanceof RegExp)return value.search(path)>-1;return false}}]);return Route}();exports.default=Route});
Liferay.Loader.define("frontend-js-spa-web$senna@2.7.3/lib/app/App",["module","exports","require","frontend-js-metal-web$metal-dom","frontend-js-metal-web$metal","frontend-js-metal-web$metal-events","frontend-js-metal-web$metal-promise","frontend-js-metal-web$metal-debounce","../globals/globals","../route/Route","../screen/Screen","../surface/Surface","frontend-js-metal-web$metal-uri","../utils/utils"],function(module,exports,require){var define=undefined;Object.defineProperty(exports,"__esModule",
{value:true});var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();
var _get=function get(object,property,receiver){if(object===null)object=Function.prototype;var desc=Object.getOwnPropertyDescriptor(object,property);if(desc===undefined){var parent=Object.getPrototypeOf(object);if(parent===null)return undefined;else return get(parent,property,receiver)}else if("value"in desc)return desc.value;else{var getter=desc.get;if(getter===undefined)return undefined;return getter.call(receiver)}};var _metalDom=require("frontend-js-metal-web$metal-dom");var _metal=require("frontend-js-metal-web$metal");
var _metalEvents=require("frontend-js-metal-web$metal-events");var _metalPromise=require("frontend-js-metal-web$metal-promise");var _metalPromise2=_interopRequireDefault(_metalPromise);var _metalDebounce=require("frontend-js-metal-web$metal-debounce");var _metalDebounce2=_interopRequireDefault(_metalDebounce);var _globals=require("../globals/globals");var _globals2=_interopRequireDefault(_globals);var _Route=require("../route/Route");var _Route2=_interopRequireDefault(_Route);var _Screen=require("../screen/Screen");
var _Screen2=_interopRequireDefault(_Screen);var _Surface=require("../surface/Surface");var _Surface2=_interopRequireDefault(_Surface);var _metalUri=require("frontend-js-metal-web$metal-uri");var _metalUri2=_interopRequireDefault(_metalUri);var _utils=require("../utils/utils");var _utils2=_interopRequireDefault(_utils);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function");
}function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return call&&(typeof call==="object"||typeof call==="function")?call:self}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,
enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}var NavigationStrategy={IMMEDIATE:"immediate",SCHEDULE_LAST:"scheduleLast"};var App=function(_EventEmitter){_inherits(App,_EventEmitter);function App(){_classCallCheck(this,App);var _this=_possibleConstructorReturn(this,(App.__proto__||Object.getPrototypeOf(App)).call(this));_this.activeScreen=null;_this.activePath=null;_this.allowPreventNavigate=
true;_this.basePath="";_this.browserPathBeforeNavigate=_utils2.default.getCurrentBrowserPathWithoutHash();_this.captureScrollPositionFromScrollEvent=true;_this.defaultTitle=_globals2.default.document.title;_this.formSelector='form[enctype\x3d"multipart/form-data"]:not([data-senna-off])';_this.ignoreQueryStringFromRoutePath=false;_this.linkSelector='a:not([data-senna-off]):not([target\x3d"_blank"])';_this.loadingCssClass="senna-loading";_this.nativeScrollRestorationSupported="scrollRestoration"in _globals2.default.window.history;
_this.navigationStrategy=NavigationStrategy.IMMEDIATE;_this.isNavigationPending=false;_this.pendingNavigate=null;_this.popstateScrollLeft=0;_this.popstateScrollTop=0;_this.redirectPath=null;_this.routes=[];_this.scheduledNavigationQueue=[];_this.screens={};_this.skipLoadPopstate=false;_this.surfaces={};_this.updateScrollPosition=true;_this.appEventHandlers_=new _metalEvents.EventHandler;_this.appEventHandlers_.add((0,_metalDom.on)(_globals2.default.window,"scroll",(0,_metalDebounce2.default)(_this.onScroll_.bind(_this),
100)),(0,_metalDom.on)(_globals2.default.window,"load",_this.onLoad_.bind(_this)),(0,_metalDom.on)(_globals2.default.window,"popstate",_this.onPopstate_.bind(_this)));_this.on("startNavigate",_this.onStartNavigate_);_this.on("beforeNavigate",_this.onBeforeNavigate_);_this.on("beforeNavigate",_this.onBeforeNavigateDefault_,true);_this.on("beforeUnload",_this.onBeforeUnloadDefault_);_this.setLinkSelector(_this.linkSelector);_this.setFormSelector(_this.formSelector);_this.maybeOverloadBeforeUnload_();
return _this}_createClass(App,[{key:"addRoutes",value:function addRoutes(routes){var _this2=this;if(!Array.isArray(routes))routes=[routes];routes.forEach(function(route){if(!(route instanceof _Route2.default))route=new _Route2.default(route.path,route.handler);_this2.routes.push(route)});return this}},{key:"addSurfaces",value:function addSurfaces(surfaces){var _this3=this;if(!Array.isArray(surfaces))surfaces=[surfaces];surfaces.forEach(function(surface){if((0,_metal.isString)(surface))surface=new _Surface2.default(surface);
_this3.surfaces[surface.getId()]=surface});return this}},{key:"canNavigate",value:function canNavigate(url){var uri=_utils2.default.isWebUri(url);if(!uri)return false;var path=_utils2.default.getUrlPath(url);if(!this.isLinkSameOrigin_(uri.getHost()))return false;if(!this.isSameBasePath_(path))return false;if(uri.getHash()&&_utils2.default.isCurrentBrowserPath(path))return false;if(!this.findRoute(path))return false;return true}},{key:"clearScreensCache",value:function clearScreensCache(){var _this4=
this;Object.keys(this.screens).forEach(function(path){if(path===_this4.activePath)_this4.activeScreen.clearCache();else if(!(_this4.isNavigationPending&&_this4.pendingNavigate.path===path))_this4.removeScreen(path)})}},{key:"createScreenInstance",value:function createScreenInstance(path,route){if(!this.pendingNavigate&&path===this.activePath)return this.activeScreen;var screen=this.screens[path];if(!screen){var handler=route.getHandler();if(handler===_Screen2.default||_Screen2.default.isImplementedBy(handler.prototype))screen=
new handler;else screen=handler(route)||new _Screen2.default}return screen}},{key:"disposeInternal",value:function disposeInternal(){if(this.activeScreen)this.removeScreen(this.activePath);this.clearScreensCache();this.formEventHandler_.removeListener();this.linkEventHandler_.removeListener();this.appEventHandlers_.removeAllListeners();_get(App.prototype.__proto__||Object.getPrototypeOf(App.prototype),"disposeInternal",this).call(this)}},{key:"dispatch",value:function dispatch(){return this.navigate(_utils2.default.getCurrentBrowserPath(),
true)}},{key:"doNavigate_",value:function doNavigate_(path,opt_replaceHistory){var _this5=this;var route=this.findRoute(path);if(!route){this.pendingNavigate=_metalPromise2.default.reject(new _metalPromise2.default.CancellationError("No route for "+path));return this.pendingNavigate}this.stopPendingNavigate_();this.isNavigationPending=true;var nextScreen=this.createScreenInstance(path,route);return this.maybePreventDeactivate_().then(function(){return _this5.maybePreventActivate_(nextScreen)}).then(function(){return nextScreen.load(path)}).then(function(){_this5.navigationStrategy=
NavigationStrategy.SCHEDULE_LAST;if(_this5.activeScreen)_this5.activeScreen.deactivate();_this5.prepareNavigateHistory_(path,nextScreen,opt_replaceHistory);_this5.prepareNavigateSurfaces_(nextScreen,_this5.surfaces,_this5.extractParams(route,path))}).then(function(){return nextScreen.evaluateStyles(_this5.surfaces)}).then(function(){return nextScreen.flip(_this5.surfaces)}).then(function(){return nextScreen.evaluateScripts(_this5.surfaces)}).then(function(){return _this5.maybeUpdateScrollPositionState_()}).then(function(){return _this5.syncScrollPositionSyncThenAsync_()}).then(function(){return _this5.finalizeNavigate_(path,
nextScreen)}).then(function(){return _this5.maybeOverloadBeforeUnload_()}).catch(function(reason){_this5.isNavigationPending=false;_this5.handleNavigateError_(path,nextScreen,reason);throw reason;}).thenAlways(function(){_this5.navigationStrategy=NavigationStrategy.IMMEDIATE;if(_this5.scheduledNavigationQueue.length){var scheduledNavigation=_this5.scheduledNavigationQueue.shift();_this5.maybeNavigate_(scheduledNavigation.href,scheduledNavigation)}})}},{key:"extractParams",value:function extractParams(route,
path){return route.extractParams(this.getRoutePath(path))}},{key:"finalizeNavigate_",value:function finalizeNavigate_(path,nextScreen){nextScreen.activate();if(this.activeScreen&&!this.activeScreen.isCacheable())if(this.activeScreen!==nextScreen)this.removeScreen(this.activePath);this.activePath=path;this.activeScreen=nextScreen;this.browserPathBeforeNavigate=_utils2.default.getCurrentBrowserPathWithoutHash();this.screens[path]=nextScreen;this.isNavigationPending=false;this.pendingNavigate=null;_globals2.default.capturedFormElement=
null;_globals2.default.capturedFormButtonElement=null}},{key:"findRoute",value:function findRoute(path){path=this.getRoutePath(path);for(var i=0;i<this.routes.length;i++){var route=this.routes[i];if(route.matchesPath(path))return route}return null}},{key:"getAllowPreventNavigate",value:function getAllowPreventNavigate(){return this.allowPreventNavigate}},{key:"getBasePath",value:function getBasePath(){return this.basePath}},{key:"getDefaultTitle",value:function getDefaultTitle(){return this.defaultTitle}},
{key:"getFormSelector",value:function getFormSelector(){return this.formSelector}},{key:"getIgnoreQueryStringFromRoutePath",value:function getIgnoreQueryStringFromRoutePath(){return this.ignoreQueryStringFromRoutePath}},{key:"getLinkSelector",value:function getLinkSelector(){return this.linkSelector}},{key:"getLoadingCssClass",value:function getLoadingCssClass(){return this.loadingCssClass}},{key:"getRoutePath",value:function getRoutePath(path){if(this.getIgnoreQueryStringFromRoutePath()){path=_utils2.default.getUrlPathWithoutHashAndSearch(path);
return _utils2.default.getUrlPathWithoutHashAndSearch(path.substr(this.basePath.length))}path=_utils2.default.getUrlPathWithoutHash(path);return _utils2.default.getUrlPathWithoutHash(path.substr(this.basePath.length))}},{key:"getUpdateScrollPosition",value:function getUpdateScrollPosition(){return this.updateScrollPosition}},{key:"handleNavigateError_",value:function handleNavigateError_(path,nextScreen,error){var _this6=this;this.emit("navigationError",{error:error,nextScreen:nextScreen,path:path});
if(!_utils2.default.isCurrentBrowserPath(path))if(this.isNavigationPending&&this.pendingNavigate)this.pendingNavigate.thenAlways(function(){return _this6.removeScreen(path)},this);else this.removeScreen(path)}},{key:"hasRoutes",value:function hasRoutes(){return this.routes.length>0}},{key:"isLinkSameOrigin_",value:function isLinkSameOrigin_(host){var hostUri=new _metalUri2.default(host);var locationHostUri=new _metalUri2.default(_globals2.default.window.location.host);return hostUri.getPort()===locationHostUri.getPort()&&
hostUri.getHostname()===locationHostUri.getHostname()}},{key:"isSameBasePath_",value:function isSameBasePath_(path){return path.indexOf(this.basePath)===0}},{key:"lockHistoryScrollPosition_",value:function lockHistoryScrollPosition_(){var state=_globals2.default.window.history.state;if(!state)return;var winner=false;var switchScrollPositionRace=function switchScrollPositionRace(){_globals2.default.document.removeEventListener("scroll",switchScrollPositionRace,false);if(!winner){_globals2.default.window.scrollTo(state.scrollLeft,
state.scrollTop);winner=true}};_metal.async.nextTick(switchScrollPositionRace);_globals2.default.document.addEventListener("scroll",switchScrollPositionRace,false)}},{key:"maybeDisableNativeScrollRestoration",value:function maybeDisableNativeScrollRestoration(){if(this.nativeScrollRestorationSupported){this.nativeScrollRestoration_=_globals2.default.window.history.scrollRestoration;_globals2.default.window.history.scrollRestoration="manual"}}},{key:"maybeScheduleNavigation_",value:function maybeScheduleNavigation_(href,
event){if(this.isNavigationPending&&this.navigationStrategy===NavigationStrategy.SCHEDULE_LAST){this.scheduledNavigationQueue=[_metal.object.mixin({href:href,isScheduledNavigation:true},event)];return true}return false}},{key:"maybeNavigate_",value:function maybeNavigate_(href,event){if(!this.canNavigate(href))return;var isNavigationScheduled=this.maybeScheduleNavigation_(href,event);if(isNavigationScheduled){event.preventDefault();return}var navigateFailed=false;try{this.navigate(_utils2.default.getUrlPath(href),
false,event)}catch(err){navigateFailed=true}if(!navigateFailed&&!event.isScheduledNavigation)event.preventDefault()}},{key:"maybeOverloadBeforeUnload_",value:function maybeOverloadBeforeUnload_(){var _this7=this;if("function"===typeof window.onbeforeunload){window._onbeforeunload=window.onbeforeunload;window.onbeforeunload=function(event){_this7.emit("beforeUnload",event);if(event&&event.defaultPrevented)return true};window.onbeforeunload._overloaded=true}}},{key:"maybePreventActivate_",value:function maybePreventActivate_(nextScreen){var _this8=
this;return _metalPromise2.default.resolve().then(function(){return nextScreen.beforeActivate()}).then(function(prevent){if(prevent){_this8.pendingNavigate=_metalPromise2.default.reject(new _metalPromise2.default.CancellationError("Cancelled by next screen"));return _this8.pendingNavigate}})}},{key:"maybePreventDeactivate_",value:function maybePreventDeactivate_(){var _this9=this;return _metalPromise2.default.resolve().then(function(){if(_this9.activeScreen)return _this9.activeScreen.beforeDeactivate()}).then(function(prevent){if(prevent){_this9.pendingNavigate=
_metalPromise2.default.reject(new _metalPromise2.default.CancellationError("Cancelled by active screen"));return _this9.pendingNavigate}})}},{key:"maybeRepositionScrollToHashedAnchor",value:function maybeRepositionScrollToHashedAnchor(){var hash=_globals2.default.window.location.hash;if(hash){var anchorElement=_globals2.default.document.getElementById(hash.substring(1));if(anchorElement){var _utils$getNodeOffset=_utils2.default.getNodeOffset(anchorElement),offsetLeft=_utils$getNodeOffset.offsetLeft,
offsetTop=_utils$getNodeOffset.offsetTop;_globals2.default.window.scrollTo(offsetLeft,offsetTop)}}}},{key:"maybeRestoreNativeScrollRestoration",value:function maybeRestoreNativeScrollRestoration(){if(this.nativeScrollRestorationSupported&&this.nativeScrollRestoration_)_globals2.default.window.history.scrollRestoration=this.nativeScrollRestoration_}},{key:"maybeRestoreRedirectPathHash_",value:function maybeRestoreRedirectPathHash_(path,redirectPath,hash){if(redirectPath===_utils2.default.getUrlPathWithoutHash(path))return redirectPath+
hash;return redirectPath}},{key:"maybeUpdateScrollPositionState_",value:function maybeUpdateScrollPositionState_(){var hash=_globals2.default.window.location.hash;var anchorElement=_globals2.default.document.getElementById(hash.substring(1));if(anchorElement){var _utils$getNodeOffset2=_utils2.default.getNodeOffset(anchorElement),offsetLeft=_utils$getNodeOffset2.offsetLeft,offsetTop=_utils$getNodeOffset2.offsetTop;this.saveHistoryCurrentPageScrollPosition_(offsetTop,offsetLeft)}}},{key:"navigate",
value:function navigate(path,opt_replaceHistory,opt_event){if(!_utils2.default.isHtml5HistorySupported())throw new Error("HTML5 History is not supported. Senna will not intercept navigation.");if(opt_event){_globals2.default.capturedFormElement=opt_event.capturedFormElement;_globals2.default.capturedFormButtonElement=opt_event.capturedFormButtonElement}if(path===this.activePath)opt_replaceHistory=true;this.emit("beforeNavigate",{event:opt_event,path:path,replaceHistory:!!opt_replaceHistory});return this.pendingNavigate}},
{key:"onBeforeNavigate_",value:function onBeforeNavigate_(event){if(_globals2.default.capturedFormElement)event.form=_globals2.default.capturedFormElement}},{key:"onBeforeNavigateDefault_",value:function onBeforeNavigateDefault_(event){if(this.pendingNavigate)if(this.pendingNavigate.path===event.path||this.navigationStrategy===NavigationStrategy.SCHEDULE_LAST)return;this.emit("beforeUnload",event);this.emit("startNavigate",{form:event.form,path:event.path,replaceHistory:event.replaceHistory})}},{key:"onBeforeUnloadDefault_",
value:function onBeforeUnloadDefault_(event){var func=window._onbeforeunload;if(func&&!func._overloaded&&func())event.preventDefault()}},{key:"onDocClickDelegate_",value:function onDocClickDelegate_(event){if(event.altKey||event.ctrlKey||event.metaKey||event.shiftKey||event.button)return;this.maybeNavigate_(event.delegateTarget.href,event)}},{key:"onDocSubmitDelegate_",value:function onDocSubmitDelegate_(event){var form=event.delegateTarget;if(form.method==="get")return;event.capturedFormElement=
form;var buttonSelector="button:not([type]),button[type\x3dsubmit],input[type\x3dsubmit]";if((0,_metalDom.match)(_globals2.default.document.activeElement,buttonSelector))event.capturedFormButtonElement=_globals2.default.document.activeElement;else event.capturedFormButtonElement=form.querySelector(buttonSelector);this.maybeNavigate_(form.action,event)}},{key:"onLoad_",value:function onLoad_(){var _this10=this;this.skipLoadPopstate=true;setTimeout(function(){_this10.skipLoadPopstate=false},0);this.maybeRepositionScrollToHashedAnchor()}},
{key:"onPopstate_",value:function onPopstate_(event){if(this.skipLoadPopstate)return;if(_utils2.default.isCurrentBrowserPath(this.browserPathBeforeNavigate)){this.maybeRepositionScrollToHashedAnchor();return}var state=event.state;if(!state){if(_globals2.default.window.location.hash){if(this.redirectPath&&!_utils2.default.isCurrentBrowserPath(this.redirectPath))this.reloadPage();this.maybeRepositionScrollToHashedAnchor()}else this.reloadPage();return}if(state.senna){this.popstateScrollTop=state.scrollTop;
this.popstateScrollLeft=state.scrollLeft;if(!this.nativeScrollRestorationSupported)this.lockHistoryScrollPosition_();this.once("endNavigate",function(){if(state.referrer)_utils2.default.setReferrer(state.referrer)});var uri=new _metalUri2.default(state.path);uri.setHostname(_globals2.default.window.location.hostname);uri.setPort(_globals2.default.window.location.port);var isNavigationScheduled=this.maybeScheduleNavigation_(uri.toString(),{});if(isNavigationScheduled)return;this.navigate(state.path,
true)}}},{key:"onScroll_",value:function onScroll_(){if(this.captureScrollPositionFromScrollEvent)this.saveHistoryCurrentPageScrollPosition_(_globals2.default.window.pageYOffset,_globals2.default.window.pageXOffset)}},{key:"onStartNavigate_",value:function onStartNavigate_(event){var _this11=this;this.maybeDisableNativeScrollRestoration();this.captureScrollPositionFromScrollEvent=false;(0,_metalDom.addClasses)(_globals2.default.document.documentElement,this.loadingCssClass);var endNavigatePayload=
{form:event.form,path:event.path};this.pendingNavigate=this.doNavigate_(event.path,event.replaceHistory).catch(function(reason){endNavigatePayload.error=reason;throw reason;}).thenAlways(function(){if(!_this11.pendingNavigate&&!_this11.scheduledNavigationQueue.length){(0,_metalDom.removeClasses)(_globals2.default.document.documentElement,_this11.loadingCssClass);_this11.maybeRestoreNativeScrollRestoration();_this11.captureScrollPositionFromScrollEvent=true}_this11.emit("endNavigate",endNavigatePayload)});
this.pendingNavigate.path=event.path}},{key:"prefetch",value:function prefetch(path){var _this12=this;var route=this.findRoute(path);if(!route)return _metalPromise2.default.reject(new _metalPromise2.default.CancellationError("No route for "+path));var nextScreen=this.createScreenInstance(path,route);return nextScreen.load(path).then(function(){return _this12.screens[path]=nextScreen}).catch(function(reason){_this12.handleNavigateError_(path,nextScreen,reason);throw reason;})}},{key:"prepareNavigateHistory_",
value:function prepareNavigateHistory_(path,nextScreen,opt_replaceHistory){var title=nextScreen.getTitle();if(!(0,_metal.isString)(title))title=this.getDefaultTitle();var redirectPath=nextScreen.beforeUpdateHistoryPath(path);var historyState={form:(0,_metal.isDefAndNotNull)(_globals2.default.capturedFormElement),path:path,redirectPath:redirectPath,scrollLeft:0,scrollTop:0,senna:true};if(opt_replaceHistory){historyState.scrollTop=this.popstateScrollTop;historyState.scrollLeft=this.popstateScrollLeft}var hash=
(new _metalUri2.default(path)).getHash();redirectPath=this.maybeRestoreRedirectPathHash_(path,redirectPath,hash);this.updateHistory_(title,redirectPath,nextScreen.beforeUpdateHistoryState(historyState),opt_replaceHistory);this.redirectPath=redirectPath}},{key:"prepareNavigateSurfaces_",value:function prepareNavigateSurfaces_(nextScreen,surfaces,params){Object.keys(surfaces).forEach(function(id){var surfaceContent=nextScreen.getSurfaceContent(id,params);surfaces[id].addContent(nextScreen.getId(),surfaceContent)})}},
{key:"reloadPage",value:function reloadPage(){_globals2.default.window.location.reload()}},{key:"removeRoute",value:function removeRoute(route){return _metal.array.remove(this.routes,route)}},{key:"removeScreen",value:function removeScreen(path){var _this13=this;var screen=this.screens[path];if(screen){Object.keys(this.surfaces).forEach(function(surfaceId){return _this13.surfaces[surfaceId].remove(screen.getId())});screen.dispose();delete this.screens[path]}}},{key:"saveHistoryCurrentPageScrollPosition_",
value:function saveHistoryCurrentPageScrollPosition_(scrollTop,scrollLeft){var state=_globals2.default.window.history.state;if(state&&state.senna){var _ref=[scrollTop,scrollLeft];state.scrollTop=_ref[0];state.scrollLeft=_ref[1];_globals2.default.window.history.replaceState(state,null,null)}}},{key:"setAllowPreventNavigate",value:function setAllowPreventNavigate(allowPreventNavigate){this.allowPreventNavigate=allowPreventNavigate}},{key:"setBasePath",value:function setBasePath(basePath){this.basePath=
_utils2.default.removePathTrailingSlash(basePath)}},{key:"setDefaultTitle",value:function setDefaultTitle(defaultTitle){this.defaultTitle=defaultTitle}},{key:"setFormSelector",value:function setFormSelector(formSelector){this.formSelector=formSelector;if(this.formEventHandler_)this.formEventHandler_.removeListener();this.formEventHandler_=(0,_metalDom.delegate)(document,"submit",this.formSelector,this.onDocSubmitDelegate_.bind(this),this.allowPreventNavigate)}},{key:"setIgnoreQueryStringFromRoutePath",
value:function setIgnoreQueryStringFromRoutePath(ignoreQueryStringFromRoutePath){this.ignoreQueryStringFromRoutePath=ignoreQueryStringFromRoutePath}},{key:"setLinkSelector",value:function setLinkSelector(linkSelector){this.linkSelector=linkSelector;if(this.linkEventHandler_)this.linkEventHandler_.removeListener();this.linkEventHandler_=(0,_metalDom.delegate)(document,"click",this.linkSelector,this.onDocClickDelegate_.bind(this),this.allowPreventNavigate)}},{key:"setLoadingCssClass",value:function setLoadingCssClass(loadingCssClass){this.loadingCssClass=
loadingCssClass}},{key:"setUpdateScrollPosition",value:function setUpdateScrollPosition(updateScrollPosition){this.updateScrollPosition=updateScrollPosition}},{key:"stopPendingNavigate_",value:function stopPendingNavigate_(){if(this.pendingNavigate)this.pendingNavigate.cancel("Cancel pending navigation");this.pendingNavigate=null}},{key:"syncScrollPositionSyncThenAsync_",value:function syncScrollPositionSyncThenAsync_(){var _this14=this;var state=_globals2.default.window.history.state;if(!state)return;
var scrollTop=state.scrollTop;var scrollLeft=state.scrollLeft;var sync=function sync(){if(_this14.updateScrollPosition)_globals2.default.window.scrollTo(scrollLeft,scrollTop)};return new _metalPromise2.default(function(resolve){return sync()&_metal.async.nextTick(function(){return sync()&resolve()})})}},{key:"updateHistory_",value:function updateHistory_(title,path,state,opt_replaceHistory){var referrer=_globals2.default.window.location.href;if(state)state.referrer=referrer;if(opt_replaceHistory)_globals2.default.window.history.replaceState(state,
title,path);else _globals2.default.window.history.pushState(state,title,path);_utils2.default.setReferrer(referrer);var titleNode=_globals2.default.document.querySelector("title");if(titleNode)titleNode.innerHTML=title;else _globals2.default.document.title=title}}]);return App}(_metalEvents.EventEmitter);exports.default=App});
