Skip to content

Commit 1759c44

Browse files
committed
Support SVG elements under IE
1 parent a7f4bcf commit 1759c44

4 files changed

Lines changed: 56 additions & 16 deletions

File tree

coffee/utils.coffee

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,20 +139,32 @@ removeClass = (el, name) ->
139139
if el.classList?
140140
el.classList.remove(cls) for cls in name.split(' ') when cls.trim()
141141
else
142-
el.setAttribute('class', el.getAttribute('class').replace(new RegExp("(^| )#{ name.split(' ').join('|') }( |$)", 'gi'), ' '))
142+
className = getClassName(el).replace(new RegExp("(^| )#{ name.split(' ').join('|') }( |$)", 'gi'), ' ')
143+
setClassName el, className
143144

144145
addClass = (el, name) ->
145146
if el.classList?
146147
el.classList.add(cls) for cls in name.split(' ') when cls.trim()
147148
else
148149
removeClass el, name
149-
el.className += " #{ name }"
150+
cls = getClassName(el) + " #{name}"
151+
setClassName el, cls
150152

151153
hasClass = (el, name) ->
152154
if el.classList?
153155
el.classList.contains(name)
154156
else
155-
new RegExp("(^| )#{ name }( |$)", 'gi').test(el.className)
157+
new RegExp("(^| )#{ name }( |$)", 'gi').test(getClassName(el))
158+
159+
getClassName = (el) ->
160+
if el.className instanceof SVGAnimatedString
161+
el.className.baseVal
162+
else
163+
el.className
164+
165+
setClassName = (el, className) ->
166+
el.setAttribute 'class', className
167+
156168

157169
updateClasses = (el, add, all) ->
158170
# Of the set of 'all' classes, we need the 'add' classes, and only the

js/utils.js

Lines changed: 20 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tether.js

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
}(this, function(require,exports,module) {
1313

1414
(function() {
15-
var Evented, addClass, defer, deferred, extend, flush, getBounds, getOffsetParent, getOrigin, getScrollBarSize, getScrollParent, hasClass, node, removeClass, uniqueId, updateClasses, zeroPosCache,
15+
var Evented, addClass, defer, deferred, extend, flush, getBounds, getClassName, getOffsetParent, getOrigin, getScrollBarSize, getScrollParent, hasClass, node, removeClass, setClassName, uniqueId, updateClasses, zeroPosCache,
1616
__hasProp = {}.hasOwnProperty,
1717
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
1818
__slice = [].slice;
@@ -38,7 +38,7 @@
3838
if (style == null) {
3939
return parent;
4040
}
41-
if (/(auto|scroll)/.test(style['overflow'] + style['overflow-y'] + style['overflow-x'])) {
41+
if (/(auto|scroll)/.test(style['overflow'] + style['overflowY'] + style['overflowX'])) {
4242
if (position !== 'absolute' || ((_ref = style['position']) === 'relative' || _ref === 'absolute' || _ref === 'fixed')) {
4343
return parent;
4444
}
@@ -177,7 +177,7 @@
177177
};
178178

179179
removeClass = function(el, name) {
180-
var cls, _i, _len, _ref, _results;
180+
var className, cls, _i, _len, _ref, _results;
181181
if (el.classList != null) {
182182
_ref = name.split(' ');
183183
_results = [];
@@ -189,7 +189,8 @@
189189
}
190190
return _results;
191191
} else {
192-
return el.className = el.className.replace(new RegExp("(^| )" + (name.split(' ').join('|')) + "( |$)", 'gi'), ' ');
192+
className = getClassName(el).replace(new RegExp("(^| )" + (name.split(' ').join('|')) + "( |$)", 'gi'), ' ');
193+
return setClassName(el, className);
193194
}
194195
};
195196

@@ -207,18 +208,31 @@
207208
return _results;
208209
} else {
209210
removeClass(el, name);
210-
return el.className += " " + name;
211+
cls = getClassName(el) + (" " + name);
212+
return setClassName(el, cls);
211213
}
212214
};
213215

214216
hasClass = function(el, name) {
215217
if (el.classList != null) {
216218
return el.classList.contains(name);
217219
} else {
218-
return new RegExp("(^| )" + name + "( |$)", 'gi').test(el.className);
220+
return new RegExp("(^| )" + name + "( |$)", 'gi').test(getClassName(el));
219221
}
220222
};
221223

224+
getClassName = function(el) {
225+
if (el.className instanceof SVGAnimatedString) {
226+
return el.className.baseVal;
227+
} else {
228+
return el.className;
229+
}
230+
};
231+
232+
setClassName = function(el, className) {
233+
return el.setAttribute('class', className);
234+
};
235+
222236
updateClasses = function(el, add, all) {
223237
var cls, _i, _j, _len, _len1, _results;
224238
for (_i = 0, _len = all.length; _i < _len; _i++) {

0 commit comments

Comments
 (0)