משתמש:Mikimik/js/customizeContent.js

הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר / אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: ללחוץ על Ctrl-F5.
/* user Contributions page modifications: mark the last change with bold font "history" link instead of "last" text
   written by [[User:Mikimik]] */
function markLastChangeContributions ( node )
{
 try {
    if ( !node ) node = document.getElementById("bodyContent");
    var lines = node.getElementsByTagName("li");

    for ( var i = 0 ; i < lines.length ; i++ )
        for ( var item = lines[i].firstChild ; item ; item = item.nextSibling )   // find the the history link - it's location can
            if ( item.nodeName == "A" && /&action=history$/.test(item.href) )     // change between different wikis and between lines
            {
                item.className += " hist";                                        // mark the history link
                                                                                  // mark the line according to the presence of the "(last)" span
                lines[i].className += lines[i].getElementsByClassName("mw-uctop")[0] ? " topedit" : " nontopedit";
                break;
            }

   appendCSS (".topedit .hist { font-weight:bold; } .nontopedit .hist { margin-left:2px; margin-right:2px; } span.mw-uctop { display:none; }");
  }
 catch(e)
  {
    return;        // lets just ignore what's happened
  }
}

if ( wgCanonicalSpecialPageName == "Contributions" ) addOnloadHook ( markLastChangeContributions );


// 1. change diff view of JS text to left-to-right
// 2. change diff view of mostly english text to left-to-right
// written by [[user:Mikimik]]
function diffLeftToRight()
{
    function getfullline ( node )
    {
        var s = "";
        if ( !/\bdiff-lineno\b/.test(node.className) )
            if ( node.hasChildNodes() ) for ( var child = node.firstChild ; child ; child = child.nextSibling ) s += getfullline ( child );
             else if ( node.nodeValue ) s = node.nodeValue;
        return s;
    }

 try {
    if ( !document.getElementById("bodyContent").getElementsByClassName("diff")[0] ) return;
    var diff = document.getElementById("bodyContent").getElementsByClassName("diff")[0].getElementsByTagName("TBODY")[0];
    var cells = diff.getElementsByTagName("TD");

    if ( !/\.(js|css)$/i.test(wgPageName) )                 // not JS or CSS
    {
        var english = 0;
        var hebrew = 0;

        for ( var i = 4 ; i < cells.length ; i++ )
        {
            var str = getfullline ( cells[i] )
                        .replace ( /\[\[ *:? *(קובץ|file|תמונה|image) *: *[^\[\]|\n]/gi, "" )  // remove picture names
                        .replace ( /http:\/\/[^\[\] \n<>]+/gi, "" )                            // remove external html links
                        .replace ( /\[\[ *[a-z-]{2,} *:.+]]/gi, "" );                          // remove interwiki links
            english += str.replace(/[^a-z]+/gi,"").length;
            hebrew += str.replace(/[^א-ת]+/g,"").length;
        }

        if ( hebrew >= english ) return;                   // exit if the text is mostly hebrew
    }

    for ( var i = 2 ; i < cells.length ; i++ ) cells[i].dir = "ltr";     // left-to-right

    var linenums = diff.getElementsByClassName("diff-lineno");
    for ( var i = 0 ; i < linenums.length ; i++ )
        linenums[i].replaceChild ( document.createTextNode(linenums[i].firstChild.nodeValue.replace("שורה","line")), linenums[i].firstChild );
  }
 catch (e)
  {
    return;        // lets just ignore what's happened
  }
}

if ( wgUserLanguage == "he" ) addOnloadHook ( diffLeftToRight );


// change bulleted lists to numbered Lists in Recentchanges, Watchlist, Log, Whatlinkshere, Contributions, DeletedContributions and Recentchangeslinked pages
function bulletedListsToNumberedLists ( node )
{
 try {
    if ( !node ) node = document.getElementById("bodyContent");
    var ulNodes = node.getElementsByTagName("ul");

    for ( var i = 0 ; i < ulNodes.length ; i++ )
    {
        var olNode = document.createElement("ol");
        olNode.className = "olContainer";
        ulNodes[i].insertBefore ( olNode, ulNodes[i].firstChild );
        ulNodes[i].className += " ulContainer";

        for ( var item = olNode.nextSibling, next = null ; item ; item = next )
        {
            next = item.nextSibling;
            olNode.appendChild ( item );
        }
    }

    appendCSS ( "ul.ulContainer { margin-left:0px; margin-right:0px; margin-top:0px; width:98%; }" + 
                "ol.olContainer { margin-" + ( wgUserLanguage == "he" ? "left" : "right" ) + ":0px; margin-top:0px; width:98%; }" );
  }
 catch (e)
  {
    return;        // lets just ignore what's happened
  }
}

if ( /^(Recentchanges|Watchlist|Log|Whatlinkshere|Contributions|DeletedContributions|Recentchangeslinked)$/.test(wgCanonicalSpecialPageName) ||
     wgAction == "history" ) addOnloadHook ( bulletedListsToNumberedLists );


/* move [edit] link after section title, instead of floating on the left */
function moveEditLink()
{
 try {
    var editsection = document.getElementById("bodyContent").getElementsByClassName("editsection");
    for ( var i = 0 ; i < editsection.length ; i++ )
    {
        editsection[i].style.cssFloat = "none";
        if ( wgUserLanguage == "he" ) editsection[i].style.marginRight = "5em";
                                 else editsection[i].style.marginLeft  = "5em";
        editsection[i].parentNode.appendChild ( editsection[i] );
    }
  }
 catch (e)
  {
    return;        // lets just ignore what's happened
  }
}

$ ( moveEditLink );


function nicePatrollLink()     // add a linebreak before a patroll link in diff view
{
 try {
    if ( !document.getElementsByClassName("diff").length ) return;
    var patroll = document.getElementsByClassName("diff")[0].getElementsByClassName("patrollink");

    for ( var i = 0 ; i < patroll.length ; i++ )      // there can be only one patroll link inside a diff, but let's do it anyway
        patroll[i].parentNode.insertBefore(document.createElement("BR"),patroll[i]);
  }
 catch (e)
  {
    return;        // lets just ignore what's happened
  }
}

if ( wgArticleId && wgAction == "view" && /\b(sysop|patroller)\b/.test(wgUserGroups.join(" ")) ) addOnloadHook ( nicePatrollLink );


function revdelundelChangeText()                                // change the text of revdelundel links to "(x)"
{
 try {
    $(".mw-revdelundel-link > a").text("\u200Fx\u200F");
  }
 catch (e)
  {
    return;        // lets just ignore what's happened
  }
}

$ ( revdelundelChangeText );


/* from [[w:User:Yonidebest/monobook.js/newMsg.js]], changed by [[User:Mikimik]]. */
/* changes the border of the content page when new message is received */
function borderOnNewMsg()
{
 try {
    if ( document.getElementById("bodyContent").getElementsByClassName("usermessage")[0] )
        document.getElementById("content").style.borderColor = "#FFA500";
  }
 catch (e)
  {
    return;        // lets just ignore what's happened
  }
}

$ ( borderOnNewMsg );


/* יוצר תקציר עריכה אוטומטי כשעורכים גרסה ישנה. */
function oldRevisionEdit()
{
 try {
    if ( document.getElementById("mw-revision-info") && document.getElementById("wpSummary") )
        document.getElementById("wpSummary").value +=
            ( wgUserLanguage == "he" ? "שחזור לגרסה " : "Revert to revision " ) + getParamValue("oldid") +
            ( document.getElementById("mw-revision-date") ? ( wgUserLanguage == "he" ? " מתאריך " : " as of " ) + document.getElementById("mw-revision-date").firstChild.nodeValue : "" ) +
            ( wgUserLanguage == "he" ? " מאת " : " by " ) + "[[User:" + document.getElementById("mw-revision-info").getElementsByClassName("mw-userlink")[0].firstChild.nodeValue + "|" + 
            document.getElementById("mw-revision-info").getElementsByClassName("mw-userlink")[0].firstChild.nodeValue + "]]";
  }
 catch (e)
  {
    return;        // lets just ignore what's happened
  }
}

if ( wgAction == "edit" ) addOnloadHook ( oldRevisionEdit );


/* changes discussions look. by [[User:Mikimik]] */
function styleDiscussionPage()
{
 try {
    var talkrx = /(\/אולם_דיונים|:בירורים|:בקשות_ממפעילים|:דיווח_הפרעות|:דלפק_ייעוץ|:דסק_חדשות|:הומור|:הכה_את_המומחה|:ייעוץ|:כיכר_העיר|:לוח_מודעות|:מזנון|:מפעיל_נולד|:סדנה_לגרפיקה|:ספר_אורחים|:פרלמנט|\/רשימת_המתנה|:רשימת_מועמדים_למחיקה|:רשימת_ערכים_במחלוקת|\/שאלות_ותשובות|:מתקפת_איכות|:מיזמי_ויקיציטוט|:מיזמי_ויקיפדיה)/;

    if ( !document.getElementById("ca-addsection") )
        if ( wgCanonicalSpecialPageName == "Undelete" )                     // צפייה ושחזור דפים מחוקים
        {
            if ( !document.getElementById("mw-undelete-revision") || !document.getElementsByTagName("input").length ) return;

            var delname = document.getElementsByTagName("input")[0].value;
            if ( ( wgNamespaceIds[delname.replace(/:.+/,"")] == undefined || wgNamespaceIds[delname.replace(/:.+/,"")] % 2 == 0 ) && !talkrx.test(delname) ) return;
        }
        else if ( wgNamespaceNumber != 4 || !talkrx.test(wgPageName) ) return;

    appendCSS (                                                     // from [[w:he:עזרה:דפי CSS אישיים#שינוי מראה דיונים בוויקי]] + changes
'#bodyContent dd { border-top:solid 1px #F0F080; border-' + ( wgUserLanguage == "he" ? 'right' : 'left' ) + ':solid 1px #F0F080; padding:0; margin:0; }' +
'#bodyContent dl { padding:0; margin:' + ( wgUserLanguage == "he" ? '0 1em 0 0' : '0 0 0 1em' ) + '; }' +
'#bodyContent dl { background-color:#FFFFE0; }' +        // 1 Indentation
'#bodyContent dl dl { background-color:#FFFFEE; }' +     // 2 Indentations
'#bodyContent dl dl dl { background-color:#FFFFE0; }' +
'#bodyContent dl dl dl dl { background-color:#FFFFEE; }' +
'#bodyContent dl dl dl dl dl { background-color:#FFFFE0; }' +
'#bodyContent dl dl dl dl dl dl { background-color:#FFFFEE; }' +
'#bodyContent dl dl dl dl dl dl dl { background-color:#FFFFE0; }' +
'#bodyContent dl dl dl dl dl dl dl dl { background-color:#FFFFEE; }' +
'#bodyContent dl dl dl dl dl dl dl dl dl { background-color:#FFFFE0; }' +
'#bodyContent dl dl dl dl dl dl dl dl dl dl { background-color:#FFFFEE; }' +
'#bodyContent dl dl dl dl dl dl dl dl dl dl dl { background-color:#FFFFE0; }' +
'#bodyContent dl dl dl dl dl dl dl dl dl dl dl dl { background-color:#FFFFEE; }' +
'#bodyContent dl dl dl dl dl dl dl dl dl dl dl dl dl { background-color:#FFFFE0; }' +
'#bodyContent dl dl dl dl dl dl dl dl dl dl dl dl dl dl { background-color:#FFFFEE; }' +
'#bodyContent dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl { background-color:#FFFFE0; }' +
'#bodyContent dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl { background-color:#FFFFEE; }' +
'#bodyContent dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl { background-color:#FFFFEE; }' +
'#bodyContent dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl { background-color:#FFFFEE; }' +
'#bodyContent dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl { background-color:#FFFFEE; }' +
'#bodyContent dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl dl { background-color:#FFFFEE; }');  // 20 Indentations
  }
 catch (e)
  {
    return;        // lets just ignore what's happened
  }
}

$ ( styleDiscussionPage );


/* add usermassage with last-modified-time */
function mkUserMassage()
{
 try {
    var usermassage = document.createElement("div");
    usermassage.id = "mk-usermassage";
    usermassage.style.cssText = "position:absolute; z-index:40;" + ( wgUserLanguage == "he" ? "left" : "right" ) + ":33px; top:1.6em; font-size:95%;";

    var lastmod = document.getElementById("Lastmodified");
    if ( !lastmod ) lastmod = document.getElementById("lastmod");
    if ( lastmod ) usermassage.appendChild ( document.createTextNode(lastmod.firstChild.nodeValue.replace(/\.$/,"") + " - ") );

    var clock = new Date().getHours().toString().replace(/^(\d)$/,"0$1") + ":" + new Date().getMinutes().toString().replace(/^(\d)$/,"0$1");
    var date = new Date().getDate() + "/" + (new Date().getMonth()+1) + "/" + new Date().getFullYear();
    usermassage.appendChild ( document.createTextNode(wgUserLanguage == "he" ? clock + " " + date : date + " " + clock) );

    var wrapper = document.getElementById("globalWrapper");
    wrapper.insertBefore ( usermassage, wrapper.firstChild );
  }
 catch (e)
  {
    return;        // lets just ignore what's happened
  }
}

$ ( mkUserMassage );


/* קיצורים בשורת התקציר */
function editSummaryAutoText()
{
  try
  {
    var wpSummaryInput = document.getElementById("wpSummary");

    if ( /^(\/\*[^\/*]+\*\/)? *([^ ]) *$/.test(wpSummaryInput.value) )
        switch ( wpSummaryInput.value.match ( /^(\/\*[^\/*]+\*\/)? *([^ ]) *$/ )[2].toLowerCase() )
        {
            case "ה" :
            case "v" :
            case "a" : wpSummaryInput.value = wpSummaryInput.value.replace ( / *[^ ] *$/, wgContentLanguage == "he" ? " השלמה" : " addition" );
                       break;
            case "ז" :
            case "z" :
            case "m" : wpSummaryInput.value = wpSummaryInput.value.replace ( / *[^ ] *$/, wgContentLanguage == "he" ? " זוטא"  : " minor"    );
                       break;
            case "ת" :
            case "," :
            case "r" : wpSummaryInput.value = wpSummaryInput.value.replace ( / *[^ ] *$/, wgContentLanguage == "he" ? " תגובה" : " response" );
                       break;
        }

    wpSummaryInput.value = wpSummaryInput.value.replace ( /^ +/, "" );

    return true;
  }
  catch ( e )
  {
    return true;
  }
}

function hookEditSummaryAutoText()
{
  try
  {
    var form = document.getElementById("editform");
    if ( !form ) return;
    form.onsubmit = editSummaryAutoText;
  }
  catch ( e )
  {
    return;
  }
}

if ( wgAction == "edit" || wgAction == "submit" ) addOnloadHook ( hookEditSummaryAutoText );