Created
November 24, 2015 20:27
-
-
Save jonohayon/fe61cf86e38d882bbc29 to your computer and use it in GitHub Desktop.
jQuery Router
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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