|
(function () { |
|
if (typeof window.Element === "undefined" || |
|
"classList" in document.documentElement) { |
|
return; |
|
} |
|
|
|
var prototype = Array.prototype, |
|
push = prototype.push, |
|
splice = prototype.splice, |
|
join = prototype.join; |
|
|
|
function DOMTokenList(el) { |
|
this.el = el; |
|
|
|
|
|
var classes = el.className.replace(/^\s+|\s+$/g, '').split(/\s+/); |
|
for (var i = 0; i < classes.length; i++) { |
|
push.call(this, classes[i]); |
|
} |
|
} |
|
|
|
DOMTokenList.prototype = { |
|
add: function (token) { |
|
if (this.contains(token)) return; |
|
push.call(this, token); |
|
this.el.className = this.toString(); |
|
}, |
|
contains: function (token) { |
|
return this.el.className.indexOf(token) != -1; |
|
}, |
|
item: function (index) { |
|
return this[index] || null; |
|
}, |
|
remove: function (token) { |
|
if (!this.contains(token)) return; |
|
for (var i = 0; i < this.length; i++) { |
|
if (this[i] == token) break; |
|
} |
|
splice.call(this, i, 1); |
|
this.el.className = this.toString(); |
|
}, |
|
toString: function () { |
|
return join.call(this, ' '); |
|
}, |
|
toggle: function (token) { |
|
if (!this.contains(token)) { |
|
this.add(token); |
|
} else { |
|
this.remove(token); |
|
} |
|
|
|
return this.contains(token); |
|
} |
|
}; |
|
|
|
window.DOMTokenList = DOMTokenList; |
|
|
|
function defineElementGetter(obj, prop, getter) { |
|
if (Object.defineProperty) { |
|
Object.defineProperty(obj, prop, { |
|
get: getter |
|
}); |
|
} else { |
|
obj.__defineGetter__(prop, getter); |
|
} |
|
} |
|
|
|
defineElementGetter(HTMLElement.prototype, 'classList', function () { |
|
return new DOMTokenList(this); |
|
}); |
|
})(); |
|
|