urlHandler.js 1.49 KB
Newer Older
1 2 3 4 5 6 7
/**
 * NEXEDI
 * Author: Thomas Lechauve
 * Date: 4/18/12
 */


8 9 10 11
/**
 * @param {String} hashTag hashTag.
 * @return {String} a clean hashtag.
 */
12
$.parseHash = function(hashTag) {
13 14 15 16 17 18 19
    var tokenized = $.extractAuth(hashTag);
    if (tokenized) {
        $.publish('auth', tokenized);
        location.hash = hashTag.split('&')[0];
        return location.hash;
    }
    return hashTag;
20 21 22
};

$.extractAuth = function (hashTag) {
23 24 25 26 27 28 29 30 31 32 33
    var del = hashTag.indexOf('&');
    if (del != -1) {
        var splitted = hashTag.substring(del + 1).split('&');
        var result = {};
        for (p in splitted) {
            var s = splitted[p].split('=');
            result[s[0]] = s[1];
        }
        return result;
    }
    return false;
34 35 36
};

$.genHash = function(url) {
37
    return '#/' + url.join('/');
38 39 40
};

/* Pub / Sub Pattern
41 42
    WARNING
    What's happening when we destroy a DOM object subscribed ?
43 44
*/
var o = $({});
45

46
$.subscribe = function() {
47
    o.on.apply(o, arguments);
48 49
};
$.unsubscribe = function() {
50
    o.off.apply(o, arguments);
51 52
};
$.publish = function() {
53
    o.trigger.apply(o, arguments);
54 55 56
};

// Event Handlers
57
$.hashHandler = function(){ $.publish('urlChange', $.parseHash(window.location.href.split("#")[1])); };
58
$.redirectHandler = function(e, url){ window.location.hash = $.genHash(url); };
59 60

// redirections manager
61
$.redirect = function(url){ $.publish('redirect', [url]); };
62 63 64 65
$.subscribe('redirect', $.redirectHandler)

$(window).bind('hashchange', $.hashHandler);
$(window).bind('load', $.hashHandler);