Skip to content
This repository has been archived by the owner on Feb 16, 2021. It is now read-only.

Commit

Permalink
Cleanup: Some refactoring of the _addClass and _removeClass methods
Browse files Browse the repository at this point in the history
May fix #501
  • Loading branch information
JamesMGreene committed Dec 29, 2014
1 parent 6fa1734 commit 1edd075
Show file tree
Hide file tree
Showing 7 changed files with 91 additions and 110 deletions.
58 changes: 25 additions & 33 deletions dist/ZeroClipboard.Core.js
Expand Up @@ -1515,29 +1515,23 @@
* @private
*/
var _addClass = function(element, value) {
if (!element || element.nodeType !== 1) {
return element;
}
if (element.classList) {
if (!element.classList.contains(value)) {
element.classList.add(value);
}
return element;
var c, cl, className, classNames = [];
if (typeof value === "string" && value) {
classNames = value.split(/\s+/);
}
if (value && typeof value === "string") {
var classNames = (value || "").split(/\s+/);
if (element.nodeType === 1) {
if (!element.className) {
element.className = value;
} else {
var className = " " + element.className + " ", setClass = element.className;
for (var c = 0, cl = classNames.length; c < cl; c++) {
if (className.indexOf(" " + classNames[c] + " ") < 0) {
setClass += " " + classNames[c];
}
if (element && element.nodeType === 1 && classNames.length > 0) {
if (element.classList) {
for (c = 0, cl = classNames.length; c < cl; c++) {
element.classList.add(classNames[c]);
}
} else if (element.hasOwnProperty("className")) {
className = " " + element.className + " ";
for (c = 0, cl = classNames.length; c < cl; c++) {
if (className.indexOf(" " + classNames[c] + " ") === -1) {
className += classNames[c] + " ";
}
element.className = setClass.replace(/^\s+|\s+$/g, "");
}
element.className = className.replace(/^\s+|\s+$/g, "");
}
}
return element;
Expand All @@ -1549,20 +1543,18 @@
* @private
*/
var _removeClass = function(element, value) {
if (!element || element.nodeType !== 1) {
return element;
}
if (element.classList) {
if (element.classList.contains(value)) {
element.classList.remove(value);
}
return element;
}
var c, cl, className, classNames = [];
if (typeof value === "string" && value) {
var classNames = value.split(/\s+/);
if (element.nodeType === 1 && element.className) {
var className = (" " + element.className + " ").replace(/[\n\t]/g, " ");
for (var c = 0, cl = classNames.length; c < cl; c++) {
classNames = value.split(/\s+/);
}
if (element && element.nodeType === 1 && classNames.length > 0) {
if (element.classList && element.classList.length > 0) {
for (c = 0, cl = classNames.length; c < cl; c++) {
element.classList.remove(classNames[c]);
}
} else if (element.className) {
className = (" " + element.className + " ").replace(/[\r\n\t]/g, " ");
for (c = 0, cl = classNames.length; c < cl; c++) {
className = className.replace(" " + classNames[c] + " ", " ");
}
element.className = className.replace(/^\s+|\s+$/g, "");
Expand Down
2 changes: 1 addition & 1 deletion dist/ZeroClipboard.Core.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/ZeroClipboard.Core.min.map

Large diffs are not rendered by default.

58 changes: 25 additions & 33 deletions dist/ZeroClipboard.js
Expand Up @@ -1515,29 +1515,23 @@
* @private
*/
var _addClass = function(element, value) {
if (!element || element.nodeType !== 1) {
return element;
}
if (element.classList) {
if (!element.classList.contains(value)) {
element.classList.add(value);
}
return element;
var c, cl, className, classNames = [];
if (typeof value === "string" && value) {
classNames = value.split(/\s+/);
}
if (value && typeof value === "string") {
var classNames = (value || "").split(/\s+/);
if (element.nodeType === 1) {
if (!element.className) {
element.className = value;
} else {
var className = " " + element.className + " ", setClass = element.className;
for (var c = 0, cl = classNames.length; c < cl; c++) {
if (className.indexOf(" " + classNames[c] + " ") < 0) {
setClass += " " + classNames[c];
}
if (element && element.nodeType === 1 && classNames.length > 0) {
if (element.classList) {
for (c = 0, cl = classNames.length; c < cl; c++) {
element.classList.add(classNames[c]);
}
} else if (element.hasOwnProperty("className")) {
className = " " + element.className + " ";
for (c = 0, cl = classNames.length; c < cl; c++) {
if (className.indexOf(" " + classNames[c] + " ") === -1) {
className += classNames[c] + " ";
}
element.className = setClass.replace(/^\s+|\s+$/g, "");
}
element.className = className.replace(/^\s+|\s+$/g, "");
}
}
return element;
Expand All @@ -1549,20 +1543,18 @@
* @private
*/
var _removeClass = function(element, value) {
if (!element || element.nodeType !== 1) {
return element;
}
if (element.classList) {
if (element.classList.contains(value)) {
element.classList.remove(value);
}
return element;
}
var c, cl, className, classNames = [];
if (typeof value === "string" && value) {
var classNames = value.split(/\s+/);
if (element.nodeType === 1 && element.className) {
var className = (" " + element.className + " ").replace(/[\n\t]/g, " ");
for (var c = 0, cl = classNames.length; c < cl; c++) {
classNames = value.split(/\s+/);
}
if (element && element.nodeType === 1 && classNames.length > 0) {
if (element.classList && element.classList.length > 0) {
for (c = 0, cl = classNames.length; c < cl; c++) {
element.classList.remove(classNames[c]);
}
} else if (element.className) {
className = (" " + element.className + " ").replace(/[\r\n\t]/g, " ");
for (c = 0, cl = classNames.length; c < cl; c++) {
className = className.replace(" " + classNames[c] + " ", " ");
}
element.className = className.replace(/^\s+|\s+$/g, "");
Expand Down
2 changes: 1 addition & 1 deletion dist/ZeroClipboard.min.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/ZeroClipboard.min.map

Large diffs are not rendered by default.

77 changes: 37 additions & 40 deletions src/js/core/private.js
Expand Up @@ -1527,36 +1527,31 @@ var _safeActiveElement = function() {
* @private
*/
var _addClass = function(element, value) {
var c, cl, className,
classNames = [];

if (!element || element.nodeType !== 1) {
return element;
}

// If the element has `classList`
if (element.classList) {
if (!element.classList.contains(value)) {
element.classList.add(value);
}
return element;
if (typeof value === "string" && value) {
classNames = value.split(/\s+/);
}

if (value && typeof value === "string") {
var classNames = (value || "").split(/\s+/);

if (element.nodeType === 1) {
if (!element.className) {
element.className = value;
if (element && element.nodeType === 1 && classNames.length > 0) {
// If the element has `classList`
if (element.classList) {
// IE11 cannot add a list of classNames anyway, so just iterate
for (c = 0, cl = classNames.length; c < cl; c++) {
// Supposedly do NOT need to check if the class is not contained first
element.classList.add(classNames[c]);
}
else {
var className = " " + element.className + " ", setClass = element.className;
for (var c = 0, cl = classNames.length; c < cl; c++) {
if (className.indexOf(" " + classNames[c] + " ") < 0) {
setClass += " " + classNames[c];
}
}
else if (element.hasOwnProperty("className")) {
className = " " + element.className + " ";
for (c = 0, cl = classNames.length; c < cl; c++) {
if (className.indexOf(" " + classNames[c] + " ") === -1) {
className += classNames[c] + " ";
}
// jank trim
element.className = setClass.replace(/^\s+|\s+$/g, "");
}
// trim
element.className = className.replace(/^\s+|\s+$/g, "");
}
}

Expand All @@ -1571,28 +1566,30 @@ var _addClass = function(element, value) {
* @private
*/
var _removeClass = function(element, value) {
var c, cl, className,
classNames = [];

if (!element || element.nodeType !== 1) {
return element;
if (typeof value === "string" && value) {
classNames = value.split(/\s+/);
}

// If the element has `classList`
if (element.classList) {
if (element.classList.contains(value)) {
element.classList.remove(value);
if (element && element.nodeType === 1 && classNames.length > 0) {
// If the element has `classList`
if (element.classList && element.classList.length > 0) {
for (c = 0, cl = classNames.length; c < cl; c++) {
// Supposedly do NOT need to check if the class is contained first
element.classList.remove(classNames[c]);
}
}
return element;
}

if (typeof value === "string" && value) {
var classNames = value.split(/\s+/);

if (element.nodeType === 1 && element.className) {
var className = (" " + element.className + " ").replace(/[\n\t]/g, " ");
for (var c = 0, cl = classNames.length; c < cl; c++) {
// Checking the actual `className` property vs. its `hasOwnProperty`
// existence is OK here since we need it to have content in order to
// have any removable classes
else if (element.className) {
className = (" " + element.className + " ").replace(/[\r\n\t]/g, " ");
for (c = 0, cl = classNames.length; c < cl; c++) {
className = className.replace(" " + classNames[c] + " ", " ");
}
// jank trim
// trim
element.className = className.replace(/^\s+|\s+$/g, "");
}
}
Expand Down

0 comments on commit 1edd075

Please sign in to comment.