(function(global, undefined) { var kafe = global.kafe, $ = kafe.dependencies.jQuery; kafe.bonify({name:'url', version:'1.2.0', obj:(function(){
var
// parse url
_parseIt = function(str,type) {
switch (type) {
case 'params':
var
data = {},
pairs = str.toString().split('&')
;
for (var i in pairs) {
var e = pairs[i].toString().split('=');
data[e[0]] = decodeURI(e[1]);
}
return data;
case 'path':
return str.toString().split('/');
}
}
;
/**
* ### Version 1.2.0
* Manipulation tools for route-based urls.
*
* @module kafe
* @class kafe.url
*/
var url = {};
/**
* Parses a querystring as a key/value list and creates a javascript object.
*
* @method parseSearchParams
* @param {String} [querystring=CURRENT_LOCATION_SEARCH]
* @return {Object} An object represention of the querystring.
* @example
* kafe.url.parseSearchParams('?group=players&team=blue&ranking=3');
* // returns Object {group: "players", team: "blue", ranking: "3"}
*/
url.parseSearchParams = function(s) {
s = (s) ? s : global.location.search;
return _parseIt(s.toString().substring(1), 'params');
};
/**
* Parses a querystring as a path and creates an ordered array.
*
* @method parseSearchPath
* @param {String} [querystring=CURRENT_LOCATION_SEARCH]
* @return {Array(String)} An array represention of the querystring path.
* @example
* kafe.url.parseSearchPath('?/Players/Teams/Blue');
* // returns ["Players", "Teams", "Blue"]
*/
url.parseSearchPath = function(s) {
s = (s) ? s : global.location.search;
return (s.toString().substring(1,2) == '/') ? _parseIt(s.toString().substring(2), 'path') : [];
};
/**
* Parses a hash string as a key/value list and creates a javascript object.
*
* @method parseHashParams
* @param {String} [hash=CURRENT_LOCATION_HASH]
* @return {Object} An object represention of the hash string.
* @example
* kafe.url.parseHashParams('#color=blue&size=large&extras=false');
* // returns Object {color: "blue", size: "large", extras: "false"}
*/
url.parseHashParams = function(s) {
s = (s) ? s : global.location.hash;
return _parseIt(s.toString().substring(1), 'params');
};
/**
* Parses a hash string as a path and creates an ordered array.
*
* @method parseHashPath
* @param {String} [hash=CURRENT_LOCATION_HASH]
* @return {Array(String)} An array represention of the hash path.
* @example
* kafe.url.parseHashPath('#/clothing/man/shirts');
* // returns ["clothing", "man", "shirts"]
*/
url.parseHashPath = function(s) {
s = (s) ? s : global.location.hash;
return (s.toString().substring(1,2) == '/') ? _parseIt(s.toString().substring(2), 'path') : [];
};
/**
* Parses a hashbang (#!) as a key/value list and creates a javascript object.
*
* @method parseAjaxParams
* @param {String} [hashbang=CURRENT_LOCATION_HASH]
* @return {Object} An object represention of the hashbang.
* @example
* kafe.url.parseAjaxParams('#!color=blue&size=large&extras=false');
* // returns Object {color: "blue", size: "large", extras: "false"}
*/
url.parseAjaxParams = function(s) {
s = (s) ? s : global.location.hash;
return (s.toString().substring(1,2) == '!') ? _parseIt(s.toString().substring(2), 'params') : {};
};
/**
* Parses a hashbang (#!) as a path and creates an ordered array.
*
* @method parseAjaxPath
* @param {String} [hashbang=CURRENT_LOCATION_HASH]
* @return {Array(String)} An array represention of the hashbang path.
* @example
* kafe.url.parseAjaxPath('#!/clothing/man/shirts');
* // returns ["clothing", "man", "shirts"]
*/
url.parseAjaxPath = function(s) {
s = (s) ? s : global.location.hash;
return (s.toString().substring(1,3) == '!/') ? _parseIt(s.toString().substring(3), 'path') : [];
};
/**
* Delay link until promises are resolved.
*
* @method followLinkWhen
* @param {Event} event Original click event
* @param {Array} promises Array of promises
*
* @example
* kafe.url.followLinkWhen(event, [
* kafe.ext.googletagmanager.track('checkout-type', { type: 'guest' }),
* kafe.ext.googletagmanager.track('checkout-step', { number: 2 })
* ]);
*/
url.followLinkWhen = function(event, promises) {
var $target = $(event.currentTarget);
// Trying to guess if user requested a new window
if ( !( event.ctrlKey || event.shiftKey || event.metaKey || (event.button && event.button == 1) || $target.is('[data-external], [target]:not([target="_self"]):not([target="_parent"]):not([target="_top"])') )) {
event.preventDefault();
$.when.apply(this, promises).always(function() {
global.location.assign($target.attr('href'));
});
}
};
return url;
})()}); })(typeof window !== 'undefined' ? window : this);