Index: third_party/polymer/v1_0/components/more-routing/more-route-selection.html |
diff --git a/third_party/polymer/v1_0/components/more-routing/more-route-selection.html b/third_party/polymer/v1_0/components/more-routing/more-route-selection.html |
deleted file mode 100644 |
index 04e292fde981140ba97057b4c12b85637d97a1a5..0000000000000000000000000000000000000000 |
--- a/third_party/polymer/v1_0/components/more-routing/more-route-selection.html |
+++ /dev/null |
@@ -1,197 +0,0 @@ |
-<!-- |
-Copyright (c) 2015 The Polymer Project Authors. All rights reserved. |
-This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt |
-The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt |
-The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt |
-Code distributed by Google as part of the polymer project is also |
-subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt |
---> |
-<link rel="import" href="../polymer/polymer.html"> |
- |
-<link rel="import" href="more-route-context-aware.html"> |
-<link rel="import" href="route.html"> |
- |
-<!-- |
-TODO(nevir): Document. |
---> |
-<script> |
- |
- Polymer({ |
- |
- is: 'more-route-selection', |
- |
- behaviors: [ |
- MoreRouting.ContextAware, |
- ], |
- |
- properties: { |
- |
- /** |
- * Routes to select from, as either a path expression or route name. |
- * |
- * You can either specify routes via this attribute, or as child nodes |
- * to this element, but not both. |
- * |
- * @type {String|Array<string|MoreRouting.Route>} |
- */ |
- routes: { |
- type: String, |
- observer: '_routesChanged', |
- }, |
- |
- /** |
- * The selected `MoreRouting.Route` object, or `null`. |
- * |
- * @type {MoreRouting.Route} |
- */ |
- selectedRoute: { |
- type: Object, |
- value: null, |
- readOnly: true, |
- notify: true, |
- }, |
- |
- /** |
- * The index of the selected route (relative to `routes`). -1 when there |
- * is no active route. |
- */ |
- selectedIndex: { |
- type: Number, |
- value: -1, |
- readOnly: true, |
- notify: true, |
- }, |
- |
- /** |
- * The _full_ path expression of the selected route, or `null`. |
- */ |
- selectedPath: { |
- type: String, |
- readOnly: true, |
- notify: true, |
- }, |
- |
- /** |
- * The params of the selected route, or an empty object if no route. |
- */ |
- selectedParams: { |
- type: Object, |
- readOnly: true, |
- notify: true, |
- }, |
- |
- }, |
- |
- /** |
- * @event more-route-change fires when a new route is selected. |
- * @detail {{ |
- * newRoute: MoreRouting.Route, oldRoute: MoreRouting.Route, |
- * newIndex: number, oldIndex: number, |
- * newPath: ?string, oldPath: ?string, |
- * newParams: Object, oldParams: Object, |
- * }} |
- */ |
- |
- routingReady: function() { |
- this._routesChanged(); |
- }, |
- |
- _routesChanged: function() { |
- if (!this.routingIsReady) return; |
- var routes = this.routes || []; |
- if (typeof routes === 'string') { |
- routes = routes.split(/\s+/); |
- } |
- this._routeInfo = this._sortIndexes(routes.map(function(route, index) { |
- return { |
- model: MoreRouting.getRoute(route, this.parentRoute), |
- index: index, |
- }; |
- }.bind(this))); |
- |
- this._observeRoutes(); |
- this._evaluate(); |
- }, |
- |
- /** |
- * Tracks changes to the routes. |
- */ |
- _observeRoutes: function() { |
- if (this._routeListeners) { |
- for (var i = 0, listener; listener = this._routeListeners[i]; i++) { |
- listener.close(); |
- } |
- } |
- |
- this._routeListeners = this._routeInfo.map(function(routeInfo) { |
- return routeInfo.model.__subscribe(this._evaluate.bind(this)); |
- }.bind(this)); |
- }, |
- |
- _evaluate: function() { |
- var newIndex = -1; |
- var newRoute = null; |
- var oldIndex = this.selectedIndex; |
- |
- for (var i = 0, routeInfo; routeInfo = this._routeInfo[i]; i++) { |
- if (routeInfo.model && routeInfo.model.active) { |
- newIndex = routeInfo.index; |
- newRoute = routeInfo.model; |
- break; |
- } |
- } |
- if (newIndex === oldIndex) return; |
- |
- var oldRoute = this.selectedRoute; |
- var oldPath = this.selectedPath; |
- var oldParams = this.selectedParams; |
- |
- var newPath = newRoute ? newRoute.fullPath : null; |
- var newParams = newRoute ? newRoute.params : {}; |
- |
- this._setSelectedRoute(newRoute); |
- this._setSelectedIndex(newIndex); |
- this._setSelectedPath(newPath); |
- this._setSelectedParams(newParams); |
- |
- this.fire('more-route-change', { |
- newRoute: newRoute, oldRoute: oldRoute, |
- newIndex: newIndex, oldIndex: oldIndex, |
- newPath: newPath, oldPath: oldPath, |
- newParams: newParams, oldParams: oldParams, |
- }); |
- }, |
- /** |
- * We want the most specific routes to match first, so we must create a |
- * mapping of indexes within `routes` that map |
- */ |
- _sortIndexes: function(routeInfo) { |
- return routeInfo.sort(function(a, b) { |
- if (!a.model) { |
- return 1; |
- } else if (!b.model) { |
- return -1; |
- // Routes with more path parts are most definitely more specific. |
- } else if (a.model.depth < b.model.depth) { |
- return 1; |
- } if (a.model.depth > b.model.depth) { |
- return -1; |
- } else { |
- |
- // Also, routes with fewer params are more specific. For example |
- // `/users/foo` is more specific than `/users/:id`. |
- if (a.model.numParams < b.model.numParams) { |
- return -1; |
- } else if (a.model.numParams > b.model.numParams) { |
- return 1; |
- } else { |
- // Equally specific; we fall back to the default (and hopefully |
- // stable) sort order. |
- return 0; |
- } |
- } |
- }); |
- }, |
- |
- }); |
-</script> |