tweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-servicesmacoslinuxwindowsinboxwhatsappicloud
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.4 KiB
102 lines
3.4 KiB
Ext.define('Ext.overrides.dom.Helper', (function() { |
|
var tableRe = /^(?:table|thead|tbody|tr|td)$/i, |
|
tableElRe = /td|tr|tbody|thead/i, |
|
ts = '<table>', |
|
te = '</table>', |
|
tbs = ts+'<tbody>', |
|
tbe = '</tbody>'+te, |
|
trs = tbs + '<tr>', |
|
tre = '</tr>'+tbe; |
|
|
|
return { |
|
override: 'Ext.dom.Helper', |
|
|
|
ieInsertHtml: function(where, el, html) { |
|
var frag = null; |
|
|
|
// IE's incomplete table implementation: http://www.ericvasilik.com/2006/07/code-karma.html |
|
if (Ext.isIE9m && tableRe.test(el.tagName)) { |
|
frag = this.insertIntoTable(el.tagName.toLowerCase(), where, el, html); |
|
} |
|
return frag; |
|
}, |
|
|
|
ieOverwrite: function(el, html) { |
|
// IE Inserting HTML into a table/tbody/tr requires extra processing: |
|
// http://www.ericvasilik.com/2006/07/code-karma.html |
|
if (Ext.isIE9m && tableRe.test(el.tagName)) { |
|
// Clearing table elements requires removal of all elements. |
|
while (el.firstChild) { |
|
el.removeChild(el.firstChild); |
|
} |
|
if (html) { |
|
return this.insertHtml('afterbegin', el, html); |
|
} |
|
} |
|
}, |
|
|
|
ieTable: function(depth, openingTags, htmlContent, closingTags){ |
|
var i = -1, |
|
el = this.detachedDiv, |
|
ns, nx; |
|
|
|
el.innerHTML = [openingTags, htmlContent, closingTags].join(''); |
|
|
|
while (++i < depth) { |
|
el = el.firstChild; |
|
} |
|
// If the result is multiple siblings, then encapsulate them into one fragment. |
|
ns = el.nextSibling; |
|
|
|
if (ns) { |
|
ns = el; |
|
el = document.createDocumentFragment(); |
|
|
|
while (ns) { |
|
nx = ns.nextSibling; |
|
el.appendChild(ns); |
|
ns = nx; |
|
} |
|
} |
|
return el; |
|
}, |
|
|
|
/** |
|
* @private |
|
* @method insertIntoTable |
|
* @member Ext.dom.Helper |
|
* workaround for broken table implementation in IE9m |
|
* http://www.ericvasilik.com/2006/07/code-karma.html |
|
*/ |
|
insertIntoTable: function(tag, where, destinationEl, html) { |
|
var node, |
|
before, |
|
bb = where === 'beforebegin', |
|
ab = where === 'afterbegin', |
|
be = where === 'beforeend', |
|
ae = where === 'afterend'; |
|
|
|
if (tag === 'td' && (ab || be) || !tableElRe.test(tag) && (bb || ae)) { |
|
return null; |
|
} |
|
before = bb ? destinationEl : |
|
ae ? destinationEl.nextSibling : |
|
ab ? destinationEl.firstChild : null; |
|
|
|
if (bb || ae) { |
|
destinationEl = destinationEl.parentNode; |
|
} |
|
|
|
if (tag === 'td' || (tag === 'tr' && (be || ab))) { |
|
node = this.ieTable(4, trs, html, tre); |
|
} else if (((tag === 'tbody' || tag === 'thead') && (be || ab)) || |
|
(tag === 'tr' && (bb || ae))) { |
|
node = this.ieTable(3, tbs, html, tbe); |
|
} else { |
|
node = this.ieTable(2, ts, html, te); |
|
} |
|
destinationEl.insertBefore(node, before); |
|
return node; |
|
} |
|
}; |
|
})()); |