From ebe03bbe709a6bb516a0e5078b0c42e3fe735ad1 Mon Sep 17 00:00:00 2001 From: DanyaPostfactum Date: Wed, 6 Feb 2013 12:54:20 +1000 Subject: [PATCH] remove dom.setText, use classList, document.head --- lib/ace/lib/dom.js | 134 +++++++++++++++++++++++++-------------------- 1 file changed, 74 insertions(+), 60 deletions(-) diff --git a/lib/ace/lib/dom.js b/lib/ace/lib/dom.js index 34549916..74a71123 100644 --- a/lib/ace/lib/dom.js +++ b/lib/ace/lib/dom.js @@ -39,72 +39,86 @@ exports.createElement = function(tag, ns) { document.createElement(tag); }; -exports.setText = function(elem, text) { - if (elem.innerText !== undefined) { - elem.innerText = text; - } - if (elem.textContent !== undefined) { - elem.textContent = text; - } -}; +if (typeof DOMTokenList === 'function') { + exports.hasCssClass = function(el, name) { + return el.classList.contains(name); + }; -exports.hasCssClass = function(el, name) { - var classes = el.className.split(/\s+/g); - return classes.indexOf(name) !== -1; -}; + exports.addCssClass = function(el, name) { + el.classList.add(name); + }; -/* -* Add a CSS class to the list of classes on the given node -*/ -exports.addCssClass = function(el, name) { - if (!exports.hasCssClass(el, name)) { - el.className += " " + name; + exports.removeCssClass = function(el, name) { + el.classList.remove(name); } -}; -/* -* Remove a CSS class from the list of classes on the given node -*/ -exports.removeCssClass = function(el, name) { - var classes = el.className.split(/\s+/g); - while (true) { - var index = classes.indexOf(name); - if (index == -1) { - break; + exports.toggleCssClass = function(el, name) { + el.classList.toggle(name); + } + + exports.setCssClass = function(el, name, include) { + el.classList[include ? 'add' : 'remove'](name); + } +} +else { + exports.hasCssClass = function(el, name) { + var classes = el.className.split(/\s+/g); + return classes.indexOf(name) !== -1; + }; + + /* + * Add a CSS class to the list of classes on the given node + */ + exports.addCssClass = function(el, name) { + if (!exports.hasCssClass(el, name)) { + el.className += " " + name; } - classes.splice(index, 1); - } - el.className = classes.join(" "); -}; + }; -exports.toggleCssClass = function(el, name) { - var classes = el.className.split(/\s+/g), add = true; - while (true) { - var index = classes.indexOf(name); - if (index == -1) { - break; + /* + * Remove a CSS class from the list of classes on the given node + */ + exports.removeCssClass = function(el, name) { + var classes = el.className.split(/\s+/g); + while (true) { + var index = classes.indexOf(name); + if (index == -1) { + break; + } + classes.splice(index, 1); } - add = false; - classes.splice(index, 1); - } - if(add) - classes.push(name); + el.className = classes.join(" "); + }; - el.className = classes.join(" "); - return add; -}; + exports.toggleCssClass = function(el, name) { + var classes = el.className.split(/\s+/g), add = true; + while (true) { + var index = classes.indexOf(name); + if (index == -1) { + break; + } + add = false; + classes.splice(index, 1); + } + if(add) + classes.push(name); -/* - * Add or remove a CSS class from the list of classes on the given node - * depending on the value of include - */ -exports.setCssClass = function(node, className, include) { - if (include) { - exports.addCssClass(node, className); - } else { - exports.removeCssClass(node, className); - } -}; + el.className = classes.join(" "); + return add; + }; + + /* + * Add or remove a CSS class from the list of classes on the given node + * depending on the value of include + */ + exports.setCssClass = function(node, className, include) { + if (include) { + exports.addCssClass(node, className); + } else { + exports.removeCssClass(node, className); + } + }; +} exports.hasCssString = function(id, doc) { var index = 0, sheets; @@ -143,7 +157,7 @@ exports.importCssString = function importCssString(cssText, id, doc) { if (id) style.id = id; - var head = doc.getElementsByTagName("head")[0] || doc.documentElement; + var head = doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement; head.appendChild(style); } }; @@ -156,7 +170,7 @@ exports.importCssStylsheet = function(uri, doc) { link.rel = 'stylesheet'; link.href = uri; - var head = doc.getElementsByTagName("head")[0] || doc.documentElement; + var head = doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement; head.appendChild(link); } }; @@ -273,7 +287,7 @@ exports.getInnerText = function(el) { if (document.body && "textContent" in document.body) return el.textContent; else - return el.innerText || el.textContent || ""; + return el.innerText; }; exports.getParentWindow = function(document) {