Skip to content

Commit

Permalink
refactor: avoid double loop in $.run();
Browse files Browse the repository at this point in the history
- thanks @chris-morgan~!
- dropped 3 bytes
  • Loading branch information
lukeed committed Jan 5, 2019
1 parent c233344 commit f1291ad
Showing 1 changed file with 10 additions and 11 deletions.
21 changes: 10 additions & 11 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import convert from 'regexparam';

export default function Navaid(base, on404) {
var rgx, routes=[], handlers={}, $={}, PAT='route';
var rgx, routes=[], handlers={}, $={};

var fmt = $.format = function (uri) {
if (!uri) return uri;
Expand All @@ -19,23 +19,22 @@ export default function Navaid(base, on404) {
$.on = function (pat, fn) {
handlers[pat] = fn;
var o = convert(pat);
o[PAT] = pat;
o.route = pat;
routes.push(o);
return $;
}

$.run = function (uri) {
var i=0, params={}, arr, obj;
uri = fmt(uri || location.pathname);
var obj = routes.find(function (x) {
return x.pattern.test(uri);
});
if (obj) {
var i=0, params={}, arr=obj.pattern.exec(uri);
while (i < obj.keys.length) params[obj.keys[i]]=arr[++i] || null;
handlers[obj[PAT]](params); // todo loop?
} else if (uri && on404) {
on404(uri);
for (; i < routes.length; i++) {
if (arr = (obj = routes[i]).pattern.exec(uri)) {
for (i=0; i < obj.keys.length;) params[obj.keys[i]]=arr[++i] || null;
handlers[obj.route](params); // todo loop?
return $;
}
}
if (uri && on404) on404(uri);
return $;
}

Expand Down

0 comments on commit f1291ad

Please sign in to comment.