Skip to content

Commit 89ae2a3

Browse files
committed
Made extraction of DOM element classes compatible with IE9 (fixes snowplow#418)
1 parent c150674 commit 89ae2a3

4 files changed

Lines changed: 24 additions & 5 deletions

File tree

src/js/forms.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ object.getFormTrackingManager = function (core, trackerId, contextAdder) {
124124
var elt = e.target;
125125
var type = elt.nodeName.toUpperCase() === 'INPUT' ? elt.type : null;
126126
var value = (elt.type === 'checkbox' && !elt.checked) ? null : elt.value;
127-
core.trackFormChange(getParentFormName(elt), getFormElementName(elt), elt.nodeName, type, lodash.map(elt.classList), value, contextAdder(context));
127+
core.trackFormChange(getParentFormName(elt), getFormElementName(elt), elt.nodeName, type, helpers.getCssClasses(elt), value, contextAdder(context));
128128
};
129129
}
130130

@@ -135,7 +135,7 @@ object.getFormTrackingManager = function (core, trackerId, contextAdder) {
135135
return function (e) {
136136
var elt = e.target;
137137
var innerElements = getInnerFormElements(elt);
138-
core.trackFormSubmission(getFormElementName(elt), lodash.map(elt.classList), innerElements, contextAdder(context));
138+
core.trackFormSubmission(getFormElementName(elt), helpers.getCssClasses(elt), innerElements, contextAdder(context));
139139
};
140140
}
141141

src/js/lib/helpers.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,11 +158,18 @@
158158
}
159159
};
160160

161+
/**
162+
* List the classes of a DOM element without using elt.classList (for compatibility with IE 9)
163+
*/
164+
object.getCssClasses = function (elt) {
165+
return elt.className.match(/\S+/g);
166+
};
167+
161168
/*
162169
* Check whether an element has at least one class from a given list
163170
*/
164171
function checkClass(elt, classList) {
165-
var classes = lodash.map(elt.classList),
172+
var classes = object.getCssClasses(elt),
166173
i;
167174

168175
for (i = 0; i < classes.length; i++) {

src/js/links.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ object.getLinkTrackingManager = function (core, trackerId, contextAdder) {
9191
if (!scriptProtocol.test(sourceHref)) {
9292

9393
elementId = sourceElement.id;
94-
elementClasses = lodash.map(sourceElement.classList);
94+
elementClasses = helpers.getCssClasses(sourceElement);
9595
elementTarget = sourceElement.target;
9696
elementContent = linkTrackingContent ? sourceElement.innerHTML : null;
9797

@@ -155,7 +155,7 @@ object.getLinkTrackingManager = function (core, trackerId, contextAdder) {
155155
* Used to determine whether clicks on that link should be tracked
156156
*/
157157
function checkLink(linkElement, specifiedClasses) {
158-
var linkClasses = lodash.map(linkElement.classList),
158+
var linkClasses = helpers.getCssClasses(linkElement),
159159
i;
160160

161161
for (i = 0; i < linkClasses.length; i++) {

tests/nonfunctional/helpers.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,4 +98,16 @@ define([
9898
assert.equal(actual, expected);
9999
},
100100
});
101+
102+
registerSuite({
103+
name: "getCssClasses test",
104+
"Tokenize a DOM element's className field": function () {
105+
var element = {
106+
className: ' the quick brown_fox-jumps/over\nthe\t\tlazy dog '
107+
};
108+
var expected = ['the', 'quick', 'brown_fox-jumps/over', 'the', 'lazy', 'dog'];
109+
var actual = helpers.getCssClasses(element);
110+
assert.deepEqual(actual, expected);
111+
},
112+
});
101113
});

0 commit comments

Comments
 (0)