(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);