siesta-lite
Version:
Stress-free JavaScript unit testing and functional testing tool, works in NodeJS and browsers
113 lines (81 loc) • 3.86 kB
JavaScript
/*
Siesta 5.6.1
Copyright(c) 2009-2022 Bryntum AB
https://bryntum.com/contact
https://bryntum.com/products/siesta/license
*/
Role('Siesta.Util.Role.CanInstallCQRootPseudo', {
methods : {
// add :root pseudo CQ selector to be able to identify 'root' level components that don't have
// parent containers. value is 1-based
installRootPseudoCQ : function (Ext) {
if (!Ext) return
var CQ = Ext.ComponentQuery
if (!CQ) return
var pseudos = CQ.pseudos
if (!pseudos.root || !pseudos.root.__IS_ROOT_PSEUDO_OVERRIDE__) {
var rootPseudo = function (items, value) {
var i = 0, l = items.length, c, result = [];
var findAllRoots = value === undefined
if (!findAllRoots) {
value = Number(value) - 1;
}
for (; i < l; i++) {
c = items[i].up();
var hasParentContainer = c && c.contains && c.contains(items[i]);
if (!hasParentContainer) {
result.push(items[i]);
}
}
if (!findAllRoots) {
result = result[value] ? [result[value]] : [];
}
return result;
}
rootPseudo.__IS_ROOT_PSEUDO_OVERRIDE__ = true
pseudos.root = rootPseudo
}
if (!pseudos[ "ariadne-nth-child" ]) {
pseudos[ "ariadne-nth-child" ] = function (items, selector) {
var result = []
var pos = Number(selector) - 1
var len = items.length
for (var i = 0; i < len; i++) {
var cmp = items[ i ]
var parentCt = cmp.getRefOwner && cmp.getRefOwner() || cmp.ownerCt
var parentCtItems = parentCt && parentCt.items
// parentCt could be an Ext ActionColumn which has 'items' but isn't a true container
if (parentCtItems && parentCtItems.getCount) {
var innerItemsLen = parentCtItems.getCount()
if (pos < innerItemsLen) {
if (parentCtItems.getAt(pos) === cmp)
result.push(cmp)
} else {
var refItems = parentCt.getRefItems()
if (refItems[ pos ] === cmp) result.push(cmp)
}
}
}
return result;
}
}
var version = Ext.getVersion && Ext.getVersion('ext')
if (version && version.major == 4 && !CQ.__CQ4_PATCHED__) {
// install workarounds for ExtJS 4 which does not pay any attention to attribute values
// escaping/unescaping
Ext.dom.Query.operators[ '=' ] = function (a, b) {
return a == Siesta.Sizzle.unescape(b)
}
var prevQuery = CQ.query
// also ExtJS4 CQ just "split" the query by "," even that comma can be part of string expression
CQ.query = function (query, root) {
if (/\\,/.test(query))
return prevQuery.call(this, { split : function () { return [ query ] } }, root)
else
return prevQuery.call(this, query, root)
}
CQ.__CQ4_PATCHED__ = true
}
}
}
});