summaryrefslogtreecommitdiff
path: root/new-reality/public/assets/js/vendor/view/Router.js
diff options
context:
space:
mode:
Diffstat (limited to 'new-reality/public/assets/js/vendor/view/Router.js')
-rw-r--r--new-reality/public/assets/js/vendor/view/Router.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/new-reality/public/assets/js/vendor/view/Router.js b/new-reality/public/assets/js/vendor/view/Router.js
new file mode 100644
index 0000000..3b0d939
--- /dev/null
+++ b/new-reality/public/assets/js/vendor/view/Router.js
@@ -0,0 +1,82 @@
+var Router = View.extend({
+
+ routeByHash: false,
+
+ go: function(url){
+ this.parseRoute(url)
+ },
+
+ pushState: function(url){
+ if (this.routeByHash) {
+ window.location.hash = url
+ }
+ else if (window.history) {
+ window.history.pushState(null, null, url)
+ }
+ },
+
+ route: function(){
+ var path = this.routeByHash ? window.location.hash.substr(0) : window.location.pathname
+ path = path || "/"
+ this.originalPath = path
+ this.parseRoute(path)
+ },
+
+ parseRoute: function(pathname){
+
+ pathname = pathname.replace(/^#/, "")
+
+ if (pathname[0] !== "/") { pathname = "/" + pathname }
+
+ var routes = this.routes,
+ path = pathname.split("/");
+
+ for (var i = 0; i < path.length; i++) {
+ if (! path[i].length) {
+ path[i] = null
+ }
+ }
+
+ if (pathname in routes) {
+ this[this.routes[pathname]]()
+ return
+ }
+
+ if (path[path.length-1] == null) {
+ path.pop()
+ }
+
+ for (var route in routes) {
+ var routePath = route.split("/")
+ if (routePath[1] == path[1]) {
+ if (routePath[2] && routePath[2].indexOf(":") !== -1 && path[2] && (path[3] === routePath[3]) ) {
+ this[this.routes[route]](path[2])
+ return
+ }
+ else if (routePath[2] == path[2]) {
+ if (routePath[3] && path[3]) {
+ if (routePath[3].indexOf(":") !== -1) {
+ this[this.routes[route]](path[3])
+ return
+ }
+ else if (routePath[3] == path[3]) {
+ this[this.routes[route]]()
+ return
+ }
+ }
+ else if (! routePath[3] && ! path[3]) {
+ this[this.routes[route]]()
+ return
+ }
+ }
+ else if (! routePath[2] && (! path[2].length || ! path[2])) {
+ this[this.routes[route]]()
+ return
+ }
+ }
+ }
+ // Redirect to root on 404
+ window.location = '/'
+ }
+
+})