|
|
Line 1: |
Line 1: |
− | // <pre>
| |
− | /** "Technical restrictions" title fix *****************************************
| |
− | *
| |
− | * Description:
| |
− | * Maintainers: [[w:User:Interiot]], [[w:User:Mets501]]
| |
− | */
| |
| | | |
− | // For pages that have something like Template:Lowercase, replace the title, but only if it is cut-and-pasteable as a valid wikilink.
| |
− | // (for instance iPod's title is updated. But [[C#]] is not an equivalent wikilink, so [[C Sharp]] doesn't have its main title changed)
| |
− | //
| |
− | // The function looks for a banner like this:
| |
− | // <div id="RealTitleBanner"> <!-- div that gets hidden -->
| |
− | // <span id="RealTitle">title</span>
| |
− | // </div>
| |
− | // An element with id=DisableRealTitle disables the function.
| |
− | var disableRealTitle = 0; // users can disable this by making this true from their monobook.js
| |
− | if (wgIsArticle) { // don't display the RealTitle when editing, since it is apparently inconsistent (doesn't show when editing sections, doesn't show when not previewing)
| |
− | addOnloadHook(function() {
| |
− | try {
| |
− | var realTitleBanner = document.getElementById("RealTitleBanner");
| |
− | if (realTitleBanner && !document.getElementById("DisableRealTitle") && !disableRealTitle) {
| |
− | var realTitle = document.getElementById("RealTitle");
| |
− | if (realTitle) {
| |
− | var realTitleHTML = realTitle.innerHTML;
| |
− | realTitleText = pickUpText(realTitle);
| |
− |
| |
− | var isPasteable = 0;
| |
− | //var containsHTML = /</.test(realTitleHTML); // contains ANY HTML
| |
− | var containsTooMuchHTML = /</.test( realTitleHTML.replace(/<\/?(sub|sup|small|big)>/gi, "") ); // contains HTML that will be ignored when cut-n-pasted as a wikilink
| |
− | // calculate whether the title is pasteable
| |
− | var verifyTitle = realTitleText.replace(/^ +/, ""); // trim left spaces
| |
− | verifyTitle = verifyTitle.charAt(0).toUpperCase() + verifyTitle.substring(1, verifyTitle.length); // uppercase first character
| |
− |
| |
− | // if the namespace prefix is there, remove it on our verification copy. If it isn't there, add it to the original realValue copy.
| |
− | if (wgNamespaceNumber != 0) {
| |
− | if (wgCanonicalNamespace == verifyTitle.substr(0, wgCanonicalNamespace.length).replace(/ /g, "_") && verifyTitle.charAt(wgCanonicalNamespace.length) == ":") {
| |
− | verifyTitle = verifyTitle.substr(wgCanonicalNamespace.length + 1);
| |
− | } else {
| |
− | realTitleText = wgCanonicalNamespace.replace(/_/g, " ") + ":" + realTitleText;
| |
− | realTitleHTML = wgCanonicalNamespace.replace(/_/g, " ") + ":" + realTitleHTML;
| |
− | }
| |
− | }
| |
− |
| |
− | // verify whether wgTitle matches
| |
− | verifyTitle = verifyTitle.replace(/^ +/, "").replace(/ +$/, ""); // trim left and right spaces
| |
− | verifyTitle = verifyTitle.replace(/_/g, " "); // underscores to spaces
| |
− | verifyTitle = verifyTitle.charAt(0).toUpperCase() + verifyTitle.substring(1, verifyTitle.length); // uppercase first character
| |
− | isPasteable = (verifyTitle == wgTitle);
| |
− |
| |
− | var h1 = document.getElementsByTagName("h1")[0];
| |
− | if (h1 && isPasteable) {
| |
− | h1.innerHTML = containsTooMuchHTML ? realTitleText : realTitleHTML;
| |
− | if (!containsTooMuchHTML)
| |
− | realTitleBanner.style.display = "none";
| |
− | }
| |
− | document.title = realTitleText + " - Wikipedia, the free encyclopedia";
| |
− | }
| |
− | }
| |
− | } catch (e) {
| |
− | /* Something went wrong. */
| |
− | }
| |
− | });
| |
− | }
| |
− |
| |
− |
| |
− | // similar to innerHTML, but only returns the text portions of the insides, excludes HTML
| |
− | function pickUpText(aParentElement) {
| |
− | var str = "";
| |
− |
| |
− | function pickUpTextInternal(aElement) {
| |
− | var child = aElement.firstChild;
| |
− | while (child) {
| |
− | if (child.nodeType == 1) // ELEMENT_NODE
| |
− | pickUpTextInternal(child);
| |
− | else if (child.nodeType == 3) // TEXT_NODE
| |
− | str += child.nodeValue;
| |
− |
| |
− | child = child.nextSibling;
| |
− | }
| |
− | }
| |
− |
| |
− | pickUpTextInternal(aParentElement);
| |
− |
| |
− | return str;
| |
− | }
| |
− |
| |
− | // </pre>
| |