Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(362)

Side by Side Diff: third_party/polymer/v1_0/components/more-routing/driver.html

Issue 1269803005: Remove third_party/polymer from .gitignore (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 <!--
2 Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
3 This code may only be used under the BSD style license found at http://polymer.g ithub.io/LICENSE.txt
4 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
5 The complete set of contributors may be found at http://polymer.github.io/CONTRI BUTORS.txt
6 Code distributed by Google as part of the polymer project is also
7 subject to an additional IP rights grant found at http://polymer.github.io/PATEN TS.txt
8 -->
9 <script>
10 (function(scope) {
11 var MoreRouting = scope.MoreRouting = scope.MoreRouting || {};
12 MoreRouting.Driver = Driver;
13
14 /**
15 * TODO(nevir): Docs.
16 */
17 function Driver(opt_config) {
18 var config = opt_config || {};
19 if (config.prefix) this.prefix = config.prefix;
20
21 this._activeRoutes = [];
22
23 this._rootRoutes = [];
24 }
25
26 Driver.prototype.manageRoute = function manageRoute(route) {
27 route.driver = this;
28 this._appendRoute(route);
29
30 if (route.parent) {
31 if (route.parent.active) {
32 // Remember: `processPathParts` takes just the path parts relative to that
33 // route; not the full set.
34 route.processPathParts(this.currentPathParts.slice(route.parent.depth));
35 }
36 } else {
37 route.processPathParts(this.currentPathParts);
38 }
39
40 if (route.active) this._activeRoutes.push(route);
41 };
42
43 Driver.prototype.urlForParts = function urlForParts(parts) {
44 return this.prefix + parts.join(this.separator);
45 };
46
47 Driver.prototype.navigateToParts = function(parts) {
48 return this.navigateToUrl(this.urlForParts(parts));
49 };
50
51 Driver.prototype.navigateToUrl = function navigateToUrl(url) {
52 throw new Error(this.constructor.name + '#navigateToUrl not implemented');
53 };
54
55 // Subclass Interface
56
57 Driver.prototype.prefix = '/';
58 Driver.prototype.separator = '/';
59
60 Driver.prototype.setCurrentPath = function setCurrentPath(path) {
61 this.currentPathParts = this.splitPath(path);
62 var newRoutes = this._matchingRoutes(this.currentPathParts);
63
64 // active -> inactive.
65 for (var i = 0, route; route = this._activeRoutes[i]; i++) {
66 if (newRoutes.indexOf(route) === -1) {
67 route.processPathParts(null);
68 }
69 }
70
71 this._activeRoutes = newRoutes;
72 }
73
74 Driver.prototype.splitPath = function splitPath(rawPath) {
75 if (this.prefix && rawPath.indexOf(this.prefix) !== 0) {
76 throw new Error(
77 'Invalid path "' + rawPath + '"; ' +
78 'expected it to be prefixed by "' + this.prefix + '"');
79 }
80 var path = rawPath.substr(this.prefix.length);
81 var parts = path.split(this.separator);
82 // Ignore trailing separators.
83 if (!parts[parts.length - 1]) parts.pop();
84
85 return parts;
86 };
87
88 // Internal Implementation
89 Driver.prototype._appendRoute = function _appendRoute(route) {
90 if (route.parent) {
91 // We only care about root routes.
92 return;
93 }
94 this._rootRoutes.push(route);
95 };
96
97 Driver.prototype._matchingRoutes = function _matchingRoutes(parts, rootRoutes) {
98 var routes = [];
99 var candidates = rootRoutes || this._rootRoutes;
100 var route;
101 for (var i = 0; i < candidates.length; i++) {
102 route = candidates[i];
103 route.processPathParts(parts);
104 if (route.active) {
105 routes.push(route);
106 routes = routes.concat(this._matchingRoutes(parts.slice(route.compiled.len gth), route.children));
107 }
108 }
109 return routes;
110 }
111
112 })(window);
113 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698