* Client side domain parser for determining marketing data. * @param {String} referrer - ref url * @return {DomainObject | boolean}
(referrer)
| 78 | * @return {DomainObject | boolean} |
| 79 | */ |
| 80 | function parseDomain(referrer) { |
| 81 | if (!referrer || !isBrowser) return false |
| 82 | |
| 83 | let referringDomain = getDomainBase(referrer) |
| 84 | const a = document.createElement('a') |
| 85 | a.href = referrer |
| 86 | |
| 87 | // Shim for the billion google search engines |
| 88 | if (a.hostname.indexOf(googleKey) > -1) { |
| 89 | referringDomain = googleKey |
| 90 | } |
| 91 | |
| 92 | // If is search engine |
| 93 | if (searchEngines[referringDomain]) { |
| 94 | const searchEngine = searchEngines[referringDomain] |
| 95 | const queryParam = (typeof searchEngine === 'string') ? searchEngine : searchEngine.p |
| 96 | const termRegex = new RegExp(queryParam + '=.*?([^&#]*|$)', 'gi') |
| 97 | const term = a.search.match(termRegex) |
| 98 | |
| 99 | return { |
| 100 | source: searchEngine.n || trimTld(referringDomain), |
| 101 | medium: 'organic', |
| 102 | term: (term ? term[0].split('=')[1] : '') || '(not provided)' |
| 103 | } |
| 104 | } |
| 105 | |
| 106 | // Default |
| 107 | const medium = (!isExternalReferrer(referrer)) ? 'internal' : 'referral' |
| 108 | return { |
| 109 | source: a.hostname, |
| 110 | medium: medium |
| 111 | } |
| 112 | } |
| 113 | |
| 114 | /** |
| 115 | * Search engine query string data |
no test coverage detected