UNPKG

sourcebuster

Version:

Get sources of your site's visitors (utm / organic / referral / typein).

57 lines (47 loc) 1.77 kB
"use strict"; module.exports = { parse: function(str) { var o = this.parseOptions, m = o.parser[o.strictMode ? 'strict' : 'loose'].exec(str), uri = {}, i = 14; while (i--) { uri[o.key[i]] = m[i] || ''; } uri[o.q.name] = {}; uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) { if ($1) { uri[o.q.name][$1] = $2; } }); return uri; }, parseOptions: { strictMode: false, key: ['source','protocol','authority','userInfo','user','password','host','port','relative','path','directory','file','query','anchor'], q: { name: 'queryKey', parser: /(?:^|&)([^&=]*)=?([^&]*)/g }, parser: { strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ } }, getParam: function(custom_params) { var query_string = {}, query = custom_params ? custom_params : window.location.search.substring(1), vars = query.split('&'); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split('='); if (typeof query_string[pair[0]] === 'undefined') { query_string[pair[0]] = pair[1]; } else if (typeof query_string[pair[0]] === 'string') { var arr = [ query_string[pair[0]], pair[1] ]; query_string[pair[0]] = arr; } else { query_string[pair[0]].push(pair[1]); } } return query_string; }, getHost: function(request) { return this.parse(request).host.replace('www.', ''); } };