diff options
author | Noah Loomans <noahloomans@gmail.com> | 2017-01-29 22:08:16 +0100 |
---|---|---|
committer | Noah Loomans <noahloomans@gmail.com> | 2017-01-29 22:08:16 +0100 |
commit | acbdba98a7ab37e76c856cc751b78e2a974036b9 (patch) | |
tree | 7081e85fe729a2a76c6d086a2d5dcac483cb5b5e /public/javascripts/url.js | |
parent | 29ea424009be3bd8561e74587b651c1c44bf2f7e (diff) |
Update the page URL when selecting user
When you select a user and press the back button of your browser, it
will exit out of schedule page instead of going back inside of the
app. This is unexpected behavior.
This commit will update the URL using history.pushState() when a user
is selected. Allowing the browser navigation buttons to nicely
integrate with the schedule.
Diffstat (limited to 'public/javascripts/url.js')
-rw-r--r-- | public/javascripts/url.js | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/public/javascripts/url.js b/public/javascripts/url.js new file mode 100644 index 0000000..a5877c6 --- /dev/null +++ b/public/javascripts/url.js @@ -0,0 +1,38 @@ +/* global USERS */ + +const EventEmitter = require('events') + +const self = new EventEmitter() + +self.update = function (selectedItem) { + const pageTitle = `Metis Rooster - ${selectedItem.value}` + const pageUrl = `/${selectedItem.type}/${selectedItem.value}` + window.history.pushState(selectedItem, pageTitle, pageUrl) +} + +self.hasSelectedItem = function () { + const pageUrl = window.location.pathname + return /^\/s\/|^\/t\/|^\/r\/|^\/c\//.test(pageUrl) +} + +self.getSelectedItem = function () { + const pageUrl = window.location.pathname + const pageUrlData = pageUrl.split('/') + const type = pageUrlData[1] + const value = pageUrlData[2] + + const user = USERS.filter(function (user) { + return user.type === type && + user.value === value + })[0] + + return user +} + +self._handleUpdate = function (event) { + self.emit('update', event.state) +} + +window.addEventListener('popstate', self._handleUpdate) + +module.exports = self |