UNPKG

este-library-oldschool

Version:

Library for github.com/steida/este.git

149 lines (133 loc) 3.5 kB
// Generated by github.com/steida/coffee2closure 900.1.18 /** @fileoverview este.labs.App. */ goog.provide('este.labs.App'); goog.require('este.labs.app.Route'); goog.require('goog.asserts'); goog.require('goog.events.EventHandler'); /** @param {Element} element @param {este.labs.History} history @param {este.labs.events.RoutingClickHandler} routingClickHandler @param {este.labs.app.PagesContainer} pagesContainer @param {este.labs.app.UrlLoader} urlLoader @constructor */ este.labs.App = function(element, history, routingClickHandler, pagesContainer, urlLoader) { this.element = element; this.history = history; this.routingClickHandler = routingClickHandler; this.pagesContainer = pagesContainer; this.urlLoader = urlLoader; /** @type {goog.events.EventHandler} @protected */ this.eventHandler = new goog.events.EventHandler(this); /** @type {Array} @protected */ this.routesPages = []; } /** @type {Element} @protected */ este.labs.App.prototype.element = null; /** @type {este.labs.History} @protected */ este.labs.App.prototype.history = null; /** @type {este.labs.events.RoutingClickHandler} @protected */ este.labs.App.prototype.routingClickHandler = null; /** @type {este.labs.app.PagesContainer} @protected */ este.labs.App.prototype.pagesContainer = null; /** @param {string} path @return {este.labs.app.Route} */ este.labs.App.prototype.route = function(path) { return new este.labs.app.Route(path, this); }; /** @param {este.labs.app.Route} route @param {este.labs.app.Page} page */ este.labs.App.prototype.add = function(route, page) { return this.routesPages.push({ route: route, page: page }); }; /** Start app. */ este.labs.App.prototype.start = function() { this.registerEvents(); this.history.setEnabled(true); return this.load(this.history.getToken()); }; /** @param {string} url */ este.labs.App.prototype.load = function(url) { var routePage; routePage = goog.array.find(this.routesPages, function(routePage) { return routePage.route.match(url); }); goog.asserts.assert(!!routePage, "este.labs.App: Route for url '" + url + "' not found."); if (!routePage) { return null; } return this.urlLoader.load(url, function() { return routePage.page.load(routePage.route.params(url)); }).then(this.onLoadFulfilled.bind(this, url, routePage), this.onLoadRejected.bind(this, url)); }; /** @param {string} url @param {Object} routePage @param {*} value @protected */ este.labs.App.prototype.onLoadFulfilled = function(url, routePage, value) { this.pagesContainer.show(routePage.page, this.element, value); this.history.setToken(url); }; /** @param {string} url @param {*} reason */ este.labs.App.prototype.onLoadRejected = function(url, reason) {}; /** @protected */ este.labs.App.prototype.registerEvents = function() { this.eventHandler.listen(this.history, goog.history.EventType.NAVIGATE, this.onHistoryNavigate); return this.eventHandler.listen(this.routingClickHandler, goog.events.EventType.CLICK, this.onRoutingClickHandlerClick); }; /** @param {goog.history.Event} e @protected */ este.labs.App.prototype.onHistoryNavigate = function(e) { if (!e.isNavigation) { return; } return this.load(e.token); }; /** @param {goog.events.BrowserEvent} e @protected */ este.labs.App.prototype.onRoutingClickHandlerClick = function(e) { return this.load(e.target.getAttribute('href')); };