mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-11-05 14:12:53 +00:00
18ab361a43
en.wikipedia.org has a template gala for edit notices with a whole bunch of html framework outputted by default from MediaWiki:Editnotice-0 (even if their underlying system has no matches for the current page). In the core editor from EditPage.php this isn't a problem as the element is just idling hidden above the editor. In the case of VisualEditor (where we have a custom delivery for the edit notices) we don't want to say "1 notice available" on every page, so we need to be smart and quickly walk the dom of the notice, filter out invisible nodes, and if the resulting nodes have no contents, ignore the notice all together. Change-Id: I65447da8b88a9bae9c24ff155544ff66b3fe9100
47 lines
1.1 KiB
JavaScript
47 lines
1.1 KiB
JavaScript
/**
|
|
* jQuery visibleText plugin 0.1.0
|
|
* https://github.com/Krinkle/jquery-visibleText
|
|
*
|
|
* @author Timo Tijhof, 2012
|
|
* @source This plugin is based on Sizzle.getText.
|
|
* Copyright 2012 jQuery Foundation and other contributors http://jquery.com/
|
|
* @license MIT License <http://www.opensource.org/licenses/mit-license.php>
|
|
*/
|
|
(function ($) {
|
|
|
|
/**
|
|
* @param {Array|jQuery|HTMLElement} elem
|
|
*/
|
|
var getVisibleText = $.getVisibleText = function (elem) {
|
|
var node,
|
|
i = 0,
|
|
ret = '',
|
|
nodeType = elem.nodeType;
|
|
|
|
if (nodeType) {
|
|
if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
|
|
// Traverse the children
|
|
for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
|
|
ret += $.expr.filters.hidden(elem) ?
|
|
'' :
|
|
getVisibleText(elem);
|
|
}
|
|
} else if (nodeType === 3 || nodeType === 4) {
|
|
return elem.nodeValue;
|
|
}
|
|
} else {
|
|
|
|
// If no nodeType, this is expected to be an array (or jQuery object)
|
|
for (; (node = elem[i]); i++) {
|
|
ret += getVisibleText(node);
|
|
}
|
|
}
|
|
return ret;
|
|
};
|
|
|
|
$.fn.visibleText = function () {
|
|
return getVisibleText(this);
|
|
};
|
|
|
|
}(jQuery));
|