Skip to content

Commit

Permalink
feat: expose areStatesEqual function and add hash to buildPath functi…
Browse files Browse the repository at this point in the history
…on if useHash is set
  • Loading branch information
troch committed Jul 2, 2015
1 parent a7b7ed3 commit 337b4e5
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 28 deletions.
19 changes: 10 additions & 9 deletions dist/commonjs/router5.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,6 @@ var nameToIDs = function nameToIDs(name) {
}, []);
};

var areStatesEqual = function areStatesEqual(state1, state2) {
return state1.name === state2.name && Object.keys(state1.params).length === Object.keys(state2.params).length && Object.keys(state1.params).every(function (p) {
return state1.params[p] === state2.params[p];
});
};

var makeState = function makeState(name, params, path) {
return { name: name, params: params, path: path };
};
Expand Down Expand Up @@ -59,7 +53,7 @@ var Router5 = (function () {
value: function onPopState(evt) {
// Do nothing if no state or if last know state is poped state (it should never happen)
if (!evt.state) return;
if (this.lastKnownState && areStatesEqual(evt.state, this.lastKnownState)) return;
if (this.lastKnownState && this.areStatesEqual(evt.state, this.lastKnownState)) return;

var canTransition = this._transition(evt.state, this.lastKnownState);
if (canTransition) this.lastKnownState = evt.state;
Expand Down Expand Up @@ -139,6 +133,13 @@ var Router5 = (function () {
value: function getState() {
return this.lastKnownState;
}
}, {
key: 'areStatesEqual',
value: function areStatesEqual(state1, state2) {
return state1.name === state2.name && Object.keys(state1.params).length === Object.keys(state2.params).length && Object.keys(state1.params).every(function (p) {
return state1.params[p] === state2.params[p];
});
}
}, {
key: 'registerComponent',
value: function registerComponent(name, component) {
Expand Down Expand Up @@ -181,7 +182,7 @@ var Router5 = (function () {
}, {
key: 'buildPath',
value: function buildPath(route, params) {
return this.rootNode.buildPath(route, params);
return (this.options.useHash ? '#' : '') + this.rootNode.buildPath(route, params);
}
}, {
key: 'navigate',
Expand All @@ -199,7 +200,7 @@ var Router5 = (function () {
if (!path) throw new Error('Could not find route "' + name + '"');

this.lastStateAttempt = makeState(name, params, path);
var sameStates = this.lastKnownState ? areStatesEqual(this.lastKnownState, this.lastStateAttempt) : false;
var sameStates = this.lastKnownState ? this.areStatesEqual(this.lastKnownState, this.lastStateAttempt) : false;

// Do not proceed further if states are the same and no reload
// (no desactivation and no callbacks)
Expand Down
19 changes: 10 additions & 9 deletions dist/umd/router5.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,6 @@
}, []);
};

var areStatesEqual = function areStatesEqual(state1, state2) {
return state1.name === state2.name && Object.keys(state1.params).length === Object.keys(state2.params).length && Object.keys(state1.params).every(function (p) {
return state1.params[p] === state2.params[p];
});
};

var makeState = function makeState(name, params, path) {
return { name: name, params: params, path: path };
};
Expand Down Expand Up @@ -66,7 +60,7 @@
value: function onPopState(evt) {
// Do nothing if no state or if last know state is poped state (it should never happen)
if (!evt.state) return;
if (this.lastKnownState && areStatesEqual(evt.state, this.lastKnownState)) return;
if (this.lastKnownState && this.areStatesEqual(evt.state, this.lastKnownState)) return;

var canTransition = this._transition(evt.state, this.lastKnownState);
if (canTransition) this.lastKnownState = evt.state;
Expand Down Expand Up @@ -146,6 +140,13 @@
value: function getState() {
return this.lastKnownState;
}
}, {
key: 'areStatesEqual',
value: function areStatesEqual(state1, state2) {
return state1.name === state2.name && Object.keys(state1.params).length === Object.keys(state2.params).length && Object.keys(state1.params).every(function (p) {
return state1.params[p] === state2.params[p];
});
}
}, {
key: 'registerComponent',
value: function registerComponent(name, component) {
Expand Down Expand Up @@ -188,7 +189,7 @@
}, {
key: 'buildPath',
value: function buildPath(route, params) {
return this.rootNode.buildPath(route, params);
return (this.options.useHash ? '#' : '') + this.rootNode.buildPath(route, params);
}
}, {
key: 'navigate',
Expand All @@ -206,7 +207,7 @@
if (!path) throw new Error('Could not find route "' + name + '"');

this.lastStateAttempt = makeState(name, params, path);
var sameStates = this.lastKnownState ? areStatesEqual(this.lastKnownState, this.lastStateAttempt) : false;
var sameStates = this.lastKnownState ? this.areStatesEqual(this.lastKnownState, this.lastStateAttempt) : false;

// Do not proceed further if states are the same and no reload
// (no desactivation and no callbacks)
Expand Down
18 changes: 9 additions & 9 deletions modules/Router5.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,6 @@ let nameToIDs = name => {
}, [])
}

let areStatesEqual = (state1, state2) => {
return state1.name === state2.name &&
Object.keys(state1.params).length === Object.keys(state2.params).length &&
Object.keys(state1.params).every(p => state1.params[p] === state2.params[p])
}

let makeState = (name, params, path) => ({name, params, path})

export default class Router5 {
Expand All @@ -36,7 +30,7 @@ export default class Router5 {
onPopState(evt) {
// Do nothing if no state or if last know state is poped state (it should never happen)
if (!evt.state) return
if (this.lastKnownState && areStatesEqual(evt.state, this.lastKnownState)) return
if (this.lastKnownState && this.areStatesEqual(evt.state, this.lastKnownState)) return

let canTransition = this._transition(evt.state, this.lastKnownState)
if (canTransition) this.lastKnownState = evt.state
Expand Down Expand Up @@ -106,6 +100,12 @@ export default class Router5 {
return this.lastKnownState
}

areStatesEqual(state1, state2) {
return state1.name === state2.name &&
Object.keys(state1.params).length === Object.keys(state2.params).length &&
Object.keys(state1.params).every(p => state1.params[p] === state2.params[p])
}

registerComponent(name, component) {
if (this.activeComponents[name]) console.warn(`A component was alread registered for route node ${name}.`)
this.activeComponents[name] = component
Expand Down Expand Up @@ -138,7 +138,7 @@ export default class Router5 {
}

buildPath(route, params) {
return this.rootNode.buildPath(route, params)
return (this.options.useHash ? '#' : '') + this.rootNode.buildPath(route, params)
}

navigate(name, params = {}, opts = {}) {
Expand All @@ -152,7 +152,7 @@ export default class Router5 {
if (!path) throw new Error(`Could not find route "${name}"`)

this.lastStateAttempt = makeState(name, params, path)
let sameStates = this.lastKnownState ? areStatesEqual(this.lastKnownState, this.lastStateAttempt) : false
let sameStates = this.lastKnownState ? this.areStatesEqual(this.lastKnownState, this.lastStateAttempt) : false

// Do not proceed further if states are the same and no reload
// (no desactivation and no callbacks)
Expand Down
2 changes: 1 addition & 1 deletion tests/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ describe('router5', function () {
});

it('should expose RouteNode path building function', function () {
expect(router.buildPath('users.list')).toBe('/users/list');
expect(router.buildPath('users.list')).toBe('#/users/list');
});

it('should be able to navigate to routes', function () {
Expand Down

0 comments on commit 337b4e5

Please sign in to comment.