|
|
@@ -0,0 +1,79 @@
|
|
|
+import { isIE9 } from '../util/index'
|
|
|
+import { svgNS } from './node-ops'
|
|
|
+
|
|
|
+/**
|
|
|
+ * In IE9, setAttribute('class') will result in empty class
|
|
|
+ * if the element also has the :class attribute; However in
|
|
|
+ * PhantomJS, setting `className` does not work on SVG elements...
|
|
|
+ * So we have to do a conditional check here.
|
|
|
+ *
|
|
|
+ * @param {Element} el
|
|
|
+ * @param {String} cls
|
|
|
+ */
|
|
|
+
|
|
|
+export function setClass (el, cls) {
|
|
|
+ /* istanbul ignore else */
|
|
|
+ if (!isIE9 || el.namespaceURI === svgNS) {
|
|
|
+ el.setAttribute('class', cls)
|
|
|
+ } else {
|
|
|
+ el.className = cls
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Add class with compatibility for IE & SVG
|
|
|
+ *
|
|
|
+ * @param {Element} el
|
|
|
+ * @param {String} cls
|
|
|
+ */
|
|
|
+
|
|
|
+export function addClass (el, cls) {
|
|
|
+ if (el.classList) {
|
|
|
+ el.classList.add(cls)
|
|
|
+ } else {
|
|
|
+ let cur = ' ' + getClass(el) + ' '
|
|
|
+ if (cur.indexOf(' ' + cls + ' ') < 0) {
|
|
|
+ setClass(el, (cur + cls).trim())
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Remove class with compatibility for IE & SVG
|
|
|
+ *
|
|
|
+ * @param {Element} el
|
|
|
+ * @param {String} cls
|
|
|
+ */
|
|
|
+
|
|
|
+export function removeClass (el, cls) {
|
|
|
+ if (el.classList) {
|
|
|
+ el.classList.remove(cls)
|
|
|
+ } else {
|
|
|
+ let cur = ' ' + getClass(el) + ' '
|
|
|
+ let tar = ' ' + cls + ' '
|
|
|
+ while (cur.indexOf(tar) >= 0) {
|
|
|
+ cur = cur.replace(tar, ' ')
|
|
|
+ }
|
|
|
+ setClass(el, cur.trim())
|
|
|
+ }
|
|
|
+ if (!el.className) {
|
|
|
+ el.removeAttribute('class')
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * For IE9 compat: when both class and :class are present
|
|
|
+ * getAttribute('class') returns wrong value... but className
|
|
|
+ * on SVG elements returns an object.
|
|
|
+ *
|
|
|
+ * @param {Element} el
|
|
|
+ * @return {String}
|
|
|
+ */
|
|
|
+
|
|
|
+function getClass (el) {
|
|
|
+ var classname = el.className
|
|
|
+ if (typeof classname === 'object') {
|
|
|
+ classname = classname.baseVal || ''
|
|
|
+ }
|
|
|
+ return classname
|
|
|
+}
|