/** * @class Roo.lib.Range * @constructor * This is a toolkit, normally used to copy features into a Dom Range element * Roo.lib.Range.wrap(x); * * * */ Roo.lib.Range = function() { }; /** * Wrap a Dom Range object, to give it new features... * @static * @param {Range} the range to wrap */ Roo.lib.Range.wrap = function(r) { return Roo.apply(r, Roo.lib.Range.prototype); }; /** * find a parent node eg. LI / OL * @param {string|Array} node name or array of nodenames * @return {DomElement|false} */ Roo.apply(Roo.lib.Range.prototype, { closest : function(str) { if (typeof(str) != 'string') { // assume it's a array. for(var i = 0;i < str.length;i++) { var r = this.closest(str[i]); if (r !== false) { return r; } } return false; } str = str.toLowerCase(); var n = this.commonAncestorContainer; // might not be a node while (n.nodeType != 1) { n = n.parentNode; } if (n.nodeName.toLowerCase() == str ) { return n; } if (n.nodeName.toLowerCase() == 'body') { return false; } return n.closest(str) || false; }, cloneRange : function() { return Roo.lib.Range.wrap(Range.prototype.cloneRange.call(this)); } });