Difference between revisions of "MediaWiki:Common.js"

From YTMND
Jump to: navigation, search
(Titlebar)
 
(...)
 
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>
 

Latest revision as of 20:59, February 26, 2007