Skip to content

Instantly share code, notes, and snippets.

@devongovett
Created November 21, 2011 06:31
Show Gist options
  • Save devongovett/1381839 to your computer and use it in GitHub Desktop.
Save devongovett/1381839 to your computer and use it in GitHub Desktop.

Revisions

  1. devongovett revised this gist Nov 21, 2011. 1 changed file with 22 additions and 14 deletions.
    36 changes: 22 additions & 14 deletions gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -1,45 +1,53 @@
    /*
    * Minimal classList shim
    * Use with an Array.prototype.indexOf shim to support IE 8
    * Minimal classList shim for IE 9
    * By Devon Govett
    * MIT LICENSE
    */

    if (!("classList" in document.documentElement) && 'defineProperty' in Object) {
    Object.defineProperty((HTMLElement || Element).prototype, 'classList', {

    if (!("classList" in document.documentElement) && Object.defineProperty && typeof HTMLElement !== 'undefined') {
    Object.defineProperty(HTMLElement.prototype, 'classList', {
    get: function() {
    var self = this;
    function update(fn) {
    return function(value) {
    var classes = self.className.split(/\s+/g),
    var classes = self.className.split(/\s+/),
    index = classes.indexOf(value);

    fn(classes, index, value);
    self.className = classes.join(" ");
    }
    }
    return {

    var ret = {
    add: update(function(classes, index, value) {
    ~index || classes.push(value);
    }),

    remove: update(function(classes, index) {
    ~index && classes.splice(index, 1);
    }),

    toggle: update(function(classes, index, value) {
    ~index ? classes.splice(index, 1) : classes.push(value);
    }),

    contains: function(value) {
    return !!~self.className.split(/\s+/g).indexOf(value);
    return !!~self.className.split(/\s+/).indexOf(value);
    },

    item: function(i) {
    return self.className.split(/\s+/g)[i] || null;
    return self.className.split(/\s+/)[i] || null;
    }
    };

    Object.defineProperty(ret, 'length', {
    get: function() {
    return self.className.split(/\s+/).length;
    }
    });

    return ret;
    }
    });
    }
  2. devongovett revised this gist Nov 21, 2011. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -5,8 +5,8 @@
    * MIT LICENSE
    */

    if (!("classList" in document.documentElement)) {
    Object.defineProperty(HTMLElement.prototype, 'classList', {
    if (!("classList" in document.documentElement) && 'defineProperty' in Object) {
    Object.defineProperty((HTMLElement || Element).prototype, 'classList', {
    get: function() {
    var self = this;
    function update(fn) {
  3. devongovett revised this gist Nov 21, 2011. 1 changed file with 35 additions and 38 deletions.
    73 changes: 35 additions & 38 deletions gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -6,43 +6,40 @@
    */

    if (!("classList" in document.documentElement)) {
    Object.defineProperty(HTMLElement.prototype, 'classList', {
    get: function() {
    var self = this;
    function update(fn) {
    return function(value) {
    var classes = self.className.split(/\s+/g),
    index = classes.indexOf(value);

    fn(classes, index, value);
    self.className = classes.join(" ");
    }
    }

    return {
    add: update(function(classes, index, value) {
    if (!~index) classes.push(value);
    }),

    remove: update(function(classes, index) {
    if (~index) classes.splice(index, 1);
    }),
    Object.defineProperty(HTMLElement.prototype, 'classList', {
    get: function() {
    var self = this;
    function update(fn) {
    return function(value) {
    var classes = self.className.split(/\s+/g),
    index = classes.indexOf(value);

    toggle: update(function(classes, index, value) {
    if (~index)
    classes.splice(index, 1);
    else
    classes.push(value);
    }),

    contains: function(value) {
    return !!~self.className.split(/\s+/g).indexOf(value);
    },

    item: function(i) {
    return self.className.split(/\s+/g)[i] || null;
    }
    };
    fn(classes, index, value);
    self.className = classes.join(" ");
    }
    }
    });
    }

    return {
    add: update(function(classes, index, value) {
    ~index || classes.push(value);
    }),

    remove: update(function(classes, index) {
    ~index && classes.splice(index, 1);
    }),

    toggle: update(function(classes, index, value) {
    ~index ? classes.splice(index, 1) : classes.push(value);
    }),

    contains: function(value) {
    return !!~self.className.split(/\s+/g).indexOf(value);
    },

    item: function(i) {
    return self.className.split(/\s+/g)[i] || null;
    }
    };
    }
    });
    }
  4. devongovett revised this gist Nov 21, 2011. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    /*
    * Minimal classList shim
    * Use with an Array.prototype.indexOf shim to support IE 8 and below
    * Use with an Array.prototype.indexOf shim to support IE 8
    * By Devon Govett
    * MIT LICENSE
    */
  5. devongovett revised this gist Nov 21, 2011. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,6 @@
    /*
    * Minimal classList shim
    * Use with an Array.prototype.indexOf shim to support IE 8 and below
    * By Devon Govett
    * MIT LICENSE
    */
  6. devongovett renamed this gist Nov 21, 2011. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  7. devongovett created this gist Nov 21, 2011.
    47 changes: 47 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,47 @@
    /*
    * Minimal classList shim
    * By Devon Govett
    * MIT LICENSE
    */

    if (!("classList" in document.documentElement)) {
    Object.defineProperty(HTMLElement.prototype, 'classList', {
    get: function() {
    var self = this;
    function update(fn) {
    return function(value) {
    var classes = self.className.split(/\s+/g),
    index = classes.indexOf(value);

    fn(classes, index, value);
    self.className = classes.join(" ");
    }
    }

    return {
    add: update(function(classes, index, value) {
    if (!~index) classes.push(value);
    }),

    remove: update(function(classes, index) {
    if (~index) classes.splice(index, 1);
    }),

    toggle: update(function(classes, index, value) {
    if (~index)
    classes.splice(index, 1);
    else
    classes.push(value);
    }),

    contains: function(value) {
    return !!~self.className.split(/\s+/g).indexOf(value);
    },

    item: function(i) {
    return self.className.split(/\s+/g)[i] || null;
    }
    };
    }
    });
    }