Index: chrome/browser/resources/shared/js/class_list.js |
=================================================================== |
--- chrome/browser/resources/shared/js/class_list.js (revision 0) |
+++ chrome/browser/resources/shared/js/class_list.js (revision 0) |
@@ -0,0 +1,94 @@ |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+/** |
+ * @fileoverview This implements the HTML5 HTMLElement classList property. |
+ */ |
+ |
+// TODO(arv): Remove this when classList is available in WebKit. |
+// https://bugs.webkit.org/show_bug.cgi?id=20709 |
+ |
+if (typeof document.createElement('div').classList == 'undefined') { |
+ |
+function DOMTokenList(el) { |
+ this.el_ = el; |
+} |
+ |
+(function() { |
+ |
+ var re = /\s+/; |
+ |
+ function split(el) { |
+ var cn = el.className.replace(/^\s+|\s$/g, ''); |
+ if (cn == '') |
+ return []; |
+ return cn.split(re); |
+ } |
+ |
+ function DOMException_(code) { |
+ this.code = code; |
+ } |
+ DOMException_.prototype = DOMException.prototype; |
+ |
+ function assertValidToken(s) { |
+ if (s == '') |
+ throw new DOMException_(DOMException.SYNTAX_ERR); |
+ if (re.test(s)) |
+ throw new DOMException_(DOMException.INVALID_CHARACTER_ERR); |
+ } |
+ |
+ DOMTokenList.prototype = { |
+ contains: function(token) { |
+ assertValidToken(token); |
+ return split(this.el_).indexOf(token) >= 0; |
+ }, |
+ add: function(token) { |
+ assertValidToken(token); |
+ if (this.contains(token)) |
+ return; |
+ var cn = this.el_.className; |
+ this.el_.className += (cn == '' || re.test(cn.slice(-1)) ? '' : ' ') + |
+ token; |
+ }, |
+ remove: function(token) { |
+ assertValidToken(token); |
+ var names = split(this.el_); |
+ var s = []; |
+ for (var i = 0; i < names.length; i++) { |
+ if (names[i] != token) |
+ s.push(names[i]) |
+ } |
+ this.el_.className = s.join(' '); |
+ }, |
+ toggle: function(token) { |
+ assertValidToken(token); |
+ if (this.contains(token)) { |
+ this.remove(token); |
+ return false; |
+ } else { |
+ this.add(token); |
+ return true; |
+ } |
+ }, |
+ get length() { |
+ return split(this.el_).length; |
+ }, |
+ item: function(index) { |
+ return split(this.el_)[index]; |
+ } |
+ }; |
+ |
+})(); |
+ |
+HTMLElement.prototype.__defineGetter__('classList', function() { |
+ var tl = new DOMTokenList(this); |
+ // Override so that we reuse the same DOMTokenList and so that |
+ // el.classList == el.classList |
+ this.__defineGetter__('classList', function() { |
+ return tl; |
+ }); |
+ return tl; |
+}); |
+ |
+} // if |
Property changes on: chrome\browser\resources\shared\js\class_list.js |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |