Skip to content

Instantly share code, notes, and snippets.

@jonohayon
Created November 24, 2015 20:27
Show Gist options
  • Save jonohayon/fe61cf86e38d882bbc29 to your computer and use it in GitHub Desktop.
Save jonohayon/fe61cf86e38d882bbc29 to your computer and use it in GitHub Desktop.
jQuery Router
/*
* jQuery hashchange event - v1.3 - 7/21/2010
* http://benalman.com/projects/jquery-hashchange-plugin/
*
* Copyright (c) 2010 "Cowboy" Ben Alman
* Dual licensed under the MIT and GPL licenses.
* http://benalman.com/about/license/
*/
(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);
/*
* jQuery router - v0.1 - 24/11/2015
*
* Copyright (c) 2015 Jonathan Ohayon
* May the force be with you.
*/
(function ($) {
var routes = {}
$.fn.createRoute = function (obj) {
if (!(obj instanceof Object)) {
throw new Error('Options must be an instance of Object')
}
routes[obj.path] = obj
}
$.fn.initRouter = function (obj) {
$('a').click(function () {
if ($(this).attr('href')) {
window.location.hash = $(this).attr('href')
}
})
$(window).hashchange(function () {
var hashName = window.location.hash.split('#!')[1]
if (!routes[hashName]) {
$.get(obj.errPath, function (data) {
$('.route-data').html(data)
$('.goback').click(function () {
window.location.hash = '#!home'
})
})
} else {
$.get(routes[hashName].templateUrl, function (data) {
$('.route-data').html($(data))
routes[hashName].controller()
})
}
})
$(document).ready(function () {
if (!window.location.hash || window.location.hash === '#!') {
window.location.hash = '#!home'
$.get(routes.home.templateUrl, function (data) {
$('.route-data').html(data)
routes.home.controller()
})
} else if (window.location.hash) {
var hashName = window.location.hash.split('#!')[1]
if (!routes[hashName]) {
$.get(obj.errPath, function (data) {
$('.route-data').html(data)
$('.goback').click(function () {
window.location.hash = '#!home'
})
})
} else {
$.get(routes[hashName].templateUrl, function (data) {
$('.route-data').html($(data))
routes[hashName].controller()
})
}
}
})
}
})(jQuery)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment