Subversion Repositories JSX

Compare Revisions

Last modification

Ignore whitespace Rev 470 → Rev 471

/trunk/dom/compat.js
1,3 → 1,5
var dhtml = jsx.dom;
var getElem = jsx.dom.getElem;
var setCont = jsx.dom.setCont;
var setCont = jsx.dom.setCont;
jsx.dom.css.removeClassName = jsx.dom.removeClassName;
jsx.dom.css.addClassName = jsx.dom.addClassName;
/trunk/dom/css.js
1231,72 → 1231,4
{
o.focus();
}
};
 
 
/**
* Removes all occurences of a CSS class name from the
* <code>class</code> attribute of an {@link Element}.
*
* @param {Element} o
* @param {string} sClassName
*/
jsx.dom.css.removeClassName = function (o, sClassName) {
var curClassNames = o.className;
var newClassNames = curClassNames.replace(
new RegExp("(^\\s*|\\s+)" + sClassName + "(\\s*$|(\\s))", "g"),
"$3");
o.className = newClassNames;
 
if (!newClassNames && jsx.object.isMethod(o, "removeAttribute"))
{
o.removeAttribute("class");
}
};
 
jsx.dom.css.addClassName = (function () {
var removeClassName = jsx.dom.css.removeClassName;
 
/**
* Adds a CSS class name to the <code>class</code> attribute of
* an {@link Element}.
*
* @param {Element} o
* @param {string} sClassName
* @param {boolean} bRemove
* If the class name is already there, and this argument is
* <code>true</code>, all instances of it are removed first.
* If the class is there and this argument is <code>false</code>,
* exit without changing anything. The default is <code>false</code>,
* which is more efficient.
* @return {boolean}
* <code>true</code> if the class name could be added successfully or
* was already there, <code>false</code> otherwise.
*/
return function (o, sClassName, bRemove) {
var rx = new RegExp("(^\\s*|\\s+)" + sClassName + "(\\s*$|\\s)");
 
if (bRemove)
{
removeClassName(o, sClassName);
}
else if (rx.test(o.className))
{
return true;
}
 
if (sClassName)
{
if (/\S/.test(o.className))
{
o.className += " " + sClassName;
}
else
{
o.className = sClassName;
}
 
return rx.test(o.className);
}
};
}());
};
/trunk/dom.js
1170,6 → 1170,101
}());
 
/**
* Removes all occurences of a class name from the
* <code>class</code> attribute of an {@link Element}.
*
* For compatibility, if possible removes the <code>class</code>
* attribute if it is empty afterwards.
*
* @param {Element} o
* @param {string} sClassName
* @return {boolean}
* <code>true</code> if successful, <code>false</code> otherwise.
*/
jsx.dom.removeClassName = function (o, sClassName) {
var sRxClassName = "(^\\s*|\\s+)" + sClassName + "(\\s*$|(\\s))";
 
if (jsx.object.isHostMethod(o, "classList", "remove"))
{
/* W3C DOM Level 4 */
o.classList.remove(sClassName);
}
else
{
var curClassNames = o.className;
var newClassNames = curClassNames.replace(
new RegExp(sRxClassName, "g"),
"$3");
o.className = newClassNames;
 
if (!newClassNames && jsx.object.isMethod(o, "removeAttribute"))
{
o.removeAttribute("class");
}
}
 
return !((new RegExp(sRxClassName)).test(o.className));
};
 
jsx.dom.addClassName = (function () {
var _removeClassName = jsx.dom.removeClassName;
 
/**
* Adds a class name to the <code>class</code> attribute of
* an {@link Element}.
*
* @param {Element} o
* @param {string} sClassName
* @param {boolean} bRemove
* If the class name is already there, and this argument is
* <code>true</code>, all instances of it are removed first.
* If the class is there and this argument is <code>false</code>,
* exit without changing anything. The default is <code>false</code>,
* which is more efficient.
* @return {boolean}
* <code>true</code> if the class name could be added successfully or
* was already there, <code>false</code> otherwise.
*/
function _addClassName (o, sClassName, bRemove)
{
var rx = new RegExp("(^\\s*|\\s+)" + sClassName + "(\\s*$|\\s)");
 
if (bRemove)
{
_removeClassName(o, sClassName);
}
else if (rx.test(o.className))
{
return true;
}
 
if (sClassName)
{
if (jsx.object.isHostMethod(o, "classList", "add"))
{
/* W3C DOM Level 4 */
o.classList.add(sClassName);
}
else
{
if (/\S/.test(o.className))
{
o.className += " " + sClassName;
}
else
{
o.className = sClassName;
}
}
 
return rx.test(o.className);
}
}
 
return _addClassName;
}());
 
/**
* Appends several child nodes to a parent node in the specified order.
*
* @param {Node} parentNode