Skip to content

Commit 3d76399

Browse files
committed
Allow params which are specified
1 parent 9cef026 commit 3d76399

File tree

1 file changed

+43
-18
lines changed

1 file changed

+43
-18
lines changed

src/default.js

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
var platformText = "platform";
5454
var platformVersionText = "platformVersion";
5555
var docsUrl = "https://docs.simpleanalytics.com";
56+
var allowParams;
5657
var isBotAgent =
5758
/(bot|spider|crawl)/i.test(userAgent) && !/(cubot)/i.test(userAgent);
5859
/** if screen **/
@@ -120,17 +121,18 @@
120121
return !!value === value;
121122
};
122123

123-
var getParams = function (regex) {
124+
var getParams = function (regex, returnArray) {
124125
// From the search we grab the utm_source and ref and save only that
125126
var matches = loc.search.match(
126127
new RegExp("[?&](" + regex + ")=([^?&]+)", "gi")
127128
);
128129
var match = matches
129130
? matches.map(function (m) {
130-
return m.split("=")[1];
131+
return m.split(/[?&=]/).slice(-2);
131132
})
132133
: [];
133-
if (match && match[0]) return match[0];
134+
135+
if (match[0]) return returnArray ? match[0] : match[0][1];
134136
};
135137

136138
/** if ignorepages **/
@@ -166,6 +168,17 @@
166168
var sendData = function (data, callback) {
167169
data = assign(payload, page, data);
168170

171+
if (allowParams)
172+
data.params = stringify(
173+
allowParams
174+
.map(function (param) {
175+
var params = getParams(param, true);
176+
if (!params) return;
177+
return { key: params[0], value: params[1] };
178+
})
179+
.filter(Boolean)
180+
);
181+
169182
var image = new Image();
170183
/** if events **/
171184
if (callback) {
@@ -283,6 +296,16 @@
283296
);
284297
/** endif **/
285298

299+
/** if (or ignorepages allowparams) **/
300+
var convertCommaSeparatedToArray = function (csv) {
301+
return Array.isArray(csv)
302+
? csv
303+
: isString(csv) && csv.length
304+
? csv.split(/, ?/)
305+
: [];
306+
};
307+
/** endif **/
308+
286309
/** if events **/
287310
// Event function name
288311
var functionName =
@@ -291,20 +314,22 @@
291314

292315
/** if ignorepages **/
293316
// Customers can ignore certain pages
294-
var ignorePagesRaw =
295-
overwriteOptions.ignorePages || attr(scriptElement, "ignore-pages");
296-
297-
// Make sure ignore pages is an array
298-
var ignorePages = Array.isArray(ignorePagesRaw)
299-
? ignorePagesRaw
300-
: isString(ignorePagesRaw) && ignorePagesRaw.length
301-
? ignorePagesRaw.split(/, ?/)
302-
: [];
317+
var ignorePages = convertCommaSeparatedToArray(
318+
overwriteOptions.ignorePages || attr(scriptElement, "ignore-pages")
319+
);
303320
/** endif **/
304321

305-
// Customers can ignore certain pages
306-
var ignorePagesRaw =
307-
overwriteOptions.ignorePages || attr(scriptElement, "ignore-pages");
322+
/** if allowparams **/
323+
// Customers can allow params
324+
allowParams = convertCommaSeparatedToArray(
325+
overwriteOptions.allowParams || attr(scriptElement, "allow-params")
326+
);
327+
/** endif **/
328+
329+
// By default we allow source, medium in the URLs. With strictUtm enabled
330+
// we only allow it with the utm_ prefix: utm_source, utm_medium, ...
331+
var strictUtm =
332+
overwriteOptions.strictUtm || attr(scriptElement, "strict-utm");
308333

309334
/////////////////////
310335
// PAYLOAD FOR BOTH PAGE VIEWS AND EVENTS
@@ -411,10 +436,10 @@
411436
.replace(/^https?:\/\/((m|l|w{2,3}([0-9]+)?)\.)?([^?#]+)(.*)$/, "$4")
412437
.replace(/^([^/]+)$/, "$1") || undefinedVar;
413438

414-
// The prefix utm_ is optional
415-
var utmRegexPrefix = "(utm_)?";
439+
// The prefix utm_ is optional with strictUtm disabled
440+
var utmRegexPrefix = "(utm_)" + (strictUtm ? "" : "?");
416441
var source = {
417-
source: getParams(utmRegexPrefix + "source|ref"),
442+
source: getParams(utmRegexPrefix + "source" + (strictUtm ? "" : "|ref")),
418443
medium: getParams(utmRegexPrefix + "medium"),
419444
campaign: getParams(utmRegexPrefix + "campaign"),
420445
term: getParams(utmRegexPrefix + "term"),

0 commit comments

Comments
 (0)