jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/348223 )
Change subject: Drop the classList polyfill for IE9 ...................................................................... Drop the classList polyfill for IE9 As a belt-and-braces matter, add classList detection to SupportCheck. This reverts commit bf73326f8efe421fa3472a0304eebef8fc12f2ed. Bug: T162277 Change-Id: I1e955a493128e732dae39d1e2ea4a336c403374a --- M AUTHORS.txt M build/modules.json M demos/ve/desktop.html M demos/ve/mobile.html D lib/classList/classList.js M src/init/ve.init.SupportCheck.js M tests/index.html 7 files changed, 11 insertions(+), 265 deletions(-) Approvals: Krinkle: Looks good to me, approved jenkins-bot: Verified diff --git a/AUTHORS.txt b/AUTHORS.txt index 417d4e5..424e41b 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -66,12 +66,6 @@ Libraries used (alphabetically) -classList.js - – https://github.com/eligrey/classList.js/ - – Dedicated to the public domain - https://github.com/eligrey/classList.js/blob/master/LICENSE.md - – Eli Grey, http://eligrey.com - Diff Match and Patch – https://code.google.com/p/google-diff-match-patch/ – Apache license 2.0 diff --git a/build/modules.json b/build/modules.json index ce2548f..5fc4d76 100644 --- a/build/modules.json +++ b/build/modules.json @@ -103,11 +103,6 @@ "lib/spark-md5/spark-md5.js" ] }, - "dom-classlist-shim": { - "scripts": [ - "lib/classList/classList.js" - ] - }, "jquery.i18n": { "scripts": [ "lib/jquery.i18n/src/jquery.i18n.js", @@ -231,8 +226,7 @@ "visualEditor.supportCheck", "unicodejs", "rangefix", - "spark-md5", - "dom-classlist-shim" + "spark-md5" ] }, "visualEditor.core": { diff --git a/demos/ve/desktop.html b/demos/ve/desktop.html index f85519e..da8e2d8 100644 --- a/demos/ve/desktop.html +++ b/demos/ve/desktop.html @@ -159,9 +159,6 @@ <!-- spark-md5 --> <script src="../../lib/spark-md5/spark-md5.js"></script> - <!-- dom-classlist-shim --> - <script src="../../lib/classList/classList.js"></script> - <!-- visualEditor.base.build --> <script src="../../src/ve.js"></script> <script src="../../src/ve.utils.js"></script> diff --git a/demos/ve/mobile.html b/demos/ve/mobile.html index 6340181..cad6de6 100644 --- a/demos/ve/mobile.html +++ b/demos/ve/mobile.html @@ -159,9 +159,6 @@ <!-- spark-md5 --> <script src="../../lib/spark-md5/spark-md5.js"></script> - <!-- dom-classlist-shim --> - <script src="../../lib/classList/classList.js"></script> - <!-- visualEditor.base.build --> <script src="../../src/ve.js"></script> <script src="../../src/ve.utils.js"></script> diff --git a/lib/classList/classList.js b/lib/classList/classList.js deleted file mode 100644 index 469bacc..0000000 --- a/lib/classList/classList.js +++ /dev/null @@ -1,239 +0,0 @@ -/* - * classList.js: Cross-browser full element.classList implementation. - * 1.1.20150312 - * - * By Eli Grey, http://eligrey.com - * License: Dedicated to the public domain. - * See https://github.com/eligrey/classList.js/blob/master/LICENSE.md - */ - -/*global self, document, DOMException */ - -/*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js */ - -if ("document" in self) { - -// Full polyfill for browsers with no classList support -// Including IE < Edge missing SVGElement.classList -if (!("classList" in document.createElement("_")) - || document.createElementNS && !("classList" in document.createElementNS("http://www.w3.org/2000/svg","g"))) { - -(function (view) { - -"use strict"; - -if (!('Element' in view)) return; - -var - classListProp = "classList" - , protoProp = "prototype" - , elemCtrProto = view.Element[protoProp] - , objCtr = Object - , strTrim = String[protoProp].trim || function () { - return this.replace(/^\s+|\s+$/g, ""); - } - , arrIndexOf = Array[protoProp].indexOf || function (item) { - var - i = 0 - , len = this.length - ; - for (; i < len; i++) { - if (i in this && this[i] === item) { - return i; - } - } - return -1; - } - // Vendors: please allow content code to instantiate DOMExceptions - , DOMEx = function (type, message) { - this.name = type; - this.code = DOMException[type]; - this.message = message; - } - , checkTokenAndGetIndex = function (classList, token) { - if (token === "") { - throw new DOMEx( - "SYNTAX_ERR" - , "An invalid or illegal string was specified" - ); - } - if (/\s/.test(token)) { - throw new DOMEx( - "INVALID_CHARACTER_ERR" - , "String contains an invalid character" - ); - } - return arrIndexOf.call(classList, token); - } - , ClassList = function (elem) { - var - trimmedClasses = strTrim.call(elem.getAttribute("class") || "") - , classes = trimmedClasses ? trimmedClasses.split(/\s+/) : [] - , i = 0 - , len = classes.length - ; - for (; i < len; i++) { - this.push(classes[i]); - } - this._updateClassName = function () { - elem.setAttribute("class", this.toString()); - }; - } - , classListProto = ClassList[protoProp] = [] - , classListGetter = function () { - return new ClassList(this); - } -; -// Most DOMException implementations don't allow calling DOMException's toString() -// on non-DOMExceptions. Error's toString() is sufficient here. -DOMEx[protoProp] = Error[protoProp]; -classListProto.item = function (i) { - return this[i] || null; -}; -classListProto.contains = function (token) { - token += ""; - return checkTokenAndGetIndex(this, token) !== -1; -}; -classListProto.add = function () { - var - tokens = arguments - , i = 0 - , l = tokens.length - , token - , updated = false - ; - do { - token = tokens[i] + ""; - if (checkTokenAndGetIndex(this, token) === -1) { - this.push(token); - updated = true; - } - } - while (++i < l); - - if (updated) { - this._updateClassName(); - } -}; -classListProto.remove = function () { - var - tokens = arguments - , i = 0 - , l = tokens.length - , token - , updated = false - , index - ; - do { - token = tokens[i] + ""; - index = checkTokenAndGetIndex(this, token); - while (index !== -1) { - this.splice(index, 1); - updated = true; - index = checkTokenAndGetIndex(this, token); - } - } - while (++i < l); - - if (updated) { - this._updateClassName(); - } -}; -classListProto.toggle = function (token, force) { - token += ""; - - var - result = this.contains(token) - , method = result ? - force !== true && "remove" - : - force !== false && "add" - ; - - if (method) { - this[method](token); - } - - if (force === true || force === false) { - return force; - } else { - return !result; - } -}; -classListProto.toString = function () { - return this.join(" "); -}; - -if (objCtr.defineProperty) { - var classListPropDesc = { - get: classListGetter - , enumerable: true - , configurable: true - }; - try { - objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); - } catch (ex) { // IE 8 doesn't support enumerable:true - if (ex.number === -0x7FF5EC54) { - classListPropDesc.enumerable = false; - objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc); - } - } -} else if (objCtr[protoProp].__defineGetter__) { - elemCtrProto.__defineGetter__(classListProp, classListGetter); -} - -}(self)); - -} else { -// There is full or partial native classList support, so just check if we need -// to normalize the add/remove and toggle APIs. - -(function () { - "use strict"; - - var testElement = document.createElement("_"); - - testElement.classList.add("c1", "c2"); - - // Polyfill for IE 10/11 and Firefox <26, where classList.add and - // classList.remove exist but support only one argument at a time. - if (!testElement.classList.contains("c2")) { - var createMethod = function(method) { - var original = DOMTokenList.prototype[method]; - - DOMTokenList.prototype[method] = function(token) { - var i, len = arguments.length; - - for (i = 0; i < len; i++) { - token = arguments[i]; - original.call(this, token); - } - }; - }; - createMethod('add'); - createMethod('remove'); - } - - testElement.classList.toggle("c3", false); - - // Polyfill for IE 10 and Firefox <24, where classList.toggle does not - // support the second argument. - if (testElement.classList.contains("c3")) { - var _toggle = DOMTokenList.prototype.toggle; - - DOMTokenList.prototype.toggle = function(token, force) { - if (1 in arguments && !this.contains(token) === !force) { - return force; - } else { - return _toggle.call(this, token); - } - }; - - } - - testElement = null; -}()); - -} - -} diff --git a/src/init/ve.init.SupportCheck.js b/src/init/ve.init.SupportCheck.js index 38b77e3..1a29c3e 100644 --- a/src/init/ve.init.SupportCheck.js +++ b/src/init/ve.init.SupportCheck.js @@ -26,11 +26,17 @@ /* contentEditable */ !!( 'contentEditable' in document.createElement( 'div' ) ) && - /* SVG */ + /* createElementNS */ + !!document.createElementNS && + + /* classList */ !!( - document.createElementNS && - document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' ).createSVGRect - ) + ( 'classList' in document.createElement( '_' ) ) || + ( 'classList' in document.createElementNS( 'http://www.w3.org/2000/svg ', 'g' ) ) + ) && + + /* SVG */ + !!( 'createSVGRect' in document.createElementNS( 'http://www.w3.org/2000/svg', 'svg' ) ) ); }; }() ); diff --git a/tests/index.html b/tests/index.html index 4f95e04..0bb854e 100644 --- a/tests/index.html +++ b/tests/index.html @@ -82,9 +82,6 @@ <!-- spark-md5 --> <script src="../lib/spark-md5/spark-md5.js"></script> - <!-- dom-classlist-shim --> - <script src="../lib/classList/classList.js"></script> - <!-- visualEditor.base.build --> <script src="../src/ve.js"></script> <script src="../src/ve.utils.js"></script> -- To view, visit https://gerrit.wikimedia.org/r/348223 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I1e955a493128e732dae39d1e2ea4a336c403374a Gerrit-PatchSet: 5 Gerrit-Project: VisualEditor/VisualEditor Gerrit-Branch: master Gerrit-Owner: Esanders <[email protected]> Gerrit-Reviewer: Esanders <[email protected]> Gerrit-Reviewer: Jforrester <[email protected]> Gerrit-Reviewer: Krinkle <[email protected]> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
