ميدياويكي:Common.js

من ويكي ألعاب
اذهب إلى التنقل اذهب إلى البحث

ملاحظة: بعد الحفظ، أنت قد تحتاج إلى إفراغ الكاش الخاص بمتصفحك لرؤية التغييرات.

  • فايرفوكس / سافاري: أمسك Shift أثناء ضغط Reload، أو اضغط على إما Ctrl-F5 أو Ctrl-R (⌘-R على ماك)
  • جوجل كروم: اضغط Ctrl-Shift-R (⌘-Shift-R على ماك)
  • إنترنت إكسبلورر: أمسك Ctrl أثناء ضغط Refresh، أو اضغط Ctrl-F5
  • أوبرا: اذهب إلى Menu → Settings (Opera → Preferences على ماك) ثم إلى Privacy & security → Clear browsing data → Cached images and files.
/* الجافاسكريبت الموضوع هنا سيتم تحميله لكل المستخدمين مع كل تحميل للصفحة. */
/* تحميل صندوق أدوات التحرير وصندوق البحث */
if (wgAction == 'edit' || wgAction == 'submit' || wgPageName == 'Special:Upload') {
    importScript('Mediawiki:Edittools.js');
} else if (wgPageName == 'Special:Search') {
    importScript('Mediawiki:Common.js/search.js');
}

/* إخفاء شريط ملخصات التعديل ورسائل الحذف من صفحات تواصل تؤرشف بالنقل  */
function hideStuff() {
    if ((wgPageName.search('ويكيبيديا:طلبات_مراجعة_التعديلات/الحالية') != -1) || (wgPageName.search('ويكيبيديا:إخطار_الإداريين/إزالة_حماية/الحالية') != -1) || (wgPageName.search('ويكيبيديا:إخطار_الإداريين/إزالة_منع/الحالية') != -1) || (wgPageName.search('ويكيبيديا:إخطار_الإداريين/استرجاع/الحالية') != -1) || (wgPageName.search('ويكيبيديا:إخطار_الإداريين/حماية/الحالية') != -1) || (wgPageName.search('ويكيبيديا:إخطار_الإداريين/منع/الحالية') != -1) || (wgPageName.search('ويكيبيديا:طلبات_صلاحيات/إعطاء') != -1) || (wgPageName.search('ويكيبيديا:طلبات_صلاحيات/إزالة') != -1) || (wgPageName.search('ويكيبيديا:طلبات_النقل/الحالية') != -1)) 
    mw.util.addCSS('.mw-summary, .mw-warning-with-logexcerpt, #editpage-copywarn, #contentSub2, #newarticletext { display: none !important; } ');
}
addOnloadHook(hideStuff);

/* طي قائمة القوالب المستخدمة في الصفحة */
$(".templatesUsed p").click(function(){$(".templatesUsed ul").slideToggle("fast")});$(".hiddencats p").click(function(){$(".hiddencats ul").slideToggle("fast")});mw.util.addCSS(" .templatesUsed ul, .hiddencats ul { display:none; list-style-type: none !important; list-style-image: none !important;}");mw.util.addCSS(" .templatesUsed p, .hiddencats p { cursor: pointer; color: rgb(6, 69, 173); text-indent: .5em;  border-right: 1px dotted rgb(170, 170, 170)}");

/* [[قالب:قائمة أفقية]] */
var arrowimages={down:["downarrowclass","//upload.wikimedia.org/wikipedia/commons/f/f1/MediaWiki_Vector_skin_action_arrow.svg",10],left:["leftarrowclass","//upload.wikimedia.org/wikipedia/commons/8/8e/MediaWiki_Vector_skin_left_arrow.svg"]};var jqueryslidemenu={animateduration:{over:400,out:400},buildmenu:function(menuid,arrowsvar){jQuery(document).ready(function($){var $mainmenu=$("#"+menuid+">ul");var $headers=$mainmenu.find("ul").parent();$headers.each(function(i){var $curobj=$(this);var $subul=$(this).find("ul:eq(0)");this._dimensions={w:this.offsetWidth,h:this.offsetHeight,subulw:$subul.outerWidth(),subulh:$subul.outerHeight()};this.istopheader=$curobj.parents("ul").length==1?true:false;$subul.css({top:this.istopheader?this._dimensions.h+"px":0});$curobj.children("a:eq(0)").css(this.istopheader?{paddingLeft:arrowsvar.down[2]}:{}).append('<img src="'+(this.istopheader?arrowsvar.down[1]:arrowsvar.left[1])+'" class="'+(this.istopheader?arrowsvar.down[0]:arrowsvar.left[0])+'" style="border:0;" />');$curobj.hover(function(e){var $targetul=$(this).children("ul:eq(0)");this._offsets={right:$(this).offset().right,top:$(this).offset().top};var menuright=this.istopheader?0:this._dimensions.w;menuright=(this._offsets.right+menuright+this._dimensions.subulw>$(window).width())?(this.istopheader?-this._dimensions.subulw+this._dimensions.w:-this._dimensions.w):menuright;if($targetul.queue().length<=1){$targetul.css({right:menuright+"px",width:this._dimensions.subulw+"px"}).slideDown(jqueryslidemenu.animateduration.over)}},function(e){var $targetul=$(this).children("ul:eq(0)");$targetul.slideUp(jqueryslidemenu.animateduration.out)});$curobj.click(function(){$(this).children("ul:eq(0)").hide()})});$mainmenu.find("ul").css({display:"none",visibility:"visible"})})}};jqueryslidemenu.buildmenu("myslidemenu",arrowimages);

/* ويكي الحب */
importStylesheet('MediaWiki:WikiLove.css');
importScript("MediaWiki:WikiLove.js");

/* وصلات مقالات جيدة ومختارة بلغات أخرى */
importScript("MediaWiki:FeaturedInterwiki.js");

/* [[قالب:عنصر مخفي]] */
importStylesheet('MediaWiki:EnhancedCollapsibleElements.css');
importScript("MediaWiki:EnhancedCollapsibleElements.js");

/* [[قالب:مبوبة]] */
importStylesheet('MediaWiki:Metabox.css');
importScript("MediaWiki:Metabox.js");

/* أوبن ستريت ماب */
importScript("MediaWiki:OpenStreetMap.js");

/* ويكي ميني أطلس */
mw.loader.load('//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400');

/* إخفاء وصلات في نطاق الملفات لا لزوم لها */
if (wgNamespaceNumber == 6) {
    importScript('Mediawiki:Filepage.js');
}

/* كود يعمل مع بوابة المشاركة */
if (wgPageName == 'ويكيبيديا:بوابة_المشاركة' || 'ويكيبيديا:بوابة المشاركة/RegisterUser') {
    importScript('User:Haithams/ContributionPortalScript.js');
}
if (wgPageName == 'ويكيبيديا:بوابة_المشاركة/قاعة_الشاي/أسئلة') {
    importScript('مستخدم:Haithams/Gadget-teahouse.js');
}

/* وصلة القائمة الكاملة تحت وصلات لغات الصفحة الرئيسية */
if (wgPageName == 'الصفحة_الرئيسية' || wgPageName == 'نقاش:الصفحة_الرئيسية') {
    $(function () {
        mw.util.addPortletLink('p-lang', '//meta.wikimedia.org/wiki/قائمة_الويكيبيديات', 'القائمة الكاملة', 'interwiki-completelist', 'قائمة الويكيبيديات الكاملة');
        var nstab = document.getElementById('ca-nstab-main');
        if (nstab && wgUserLanguage == 'ar') {
            while (nstab.firstChild) {
                nstab = nstab.firstChild;
            }
            nstab.nodeValue = 'الصفحة الرئيسية';
        }
    });
}
/**
 * Collapsible tables *********************************************************
 *
 * Description: Allows tables to be collapsed, showing only the header.
 */
 
var autoCollapse = 2;
var collapseCaption = 'أخف';
var expandCaption = 'أظهر';
 
window.collapseTable = function ( tableIndex ) {
    var Button = document.getElementById( 'collapseButton' + tableIndex );
    var Table = document.getElementById( 'collapsibleTable' + tableIndex );
 
    if ( !Table || !Button ) {
        return false;
    }
 
    var Rows = Table.rows;
    var i;
 
    if ( Button.firstChild.data === collapseCaption ) {
        for ( i = 1; i < Rows.length; i++ ) {
            Rows[i].style.display = 'none';
        }
        Button.firstChild.data = expandCaption;
    } else {
        for ( i = 1; i < Rows.length; i++ ) {
            Rows[i].style.display = Rows[0].style.display;
        }
        Button.firstChild.data = collapseCaption;
    }
};
 
function createCollapseButtons() {
    var tableIndex = 0;
    var NavigationBoxes = {};
    var Tables = document.getElementsByTagName( 'table' );
    var i;
 
    function handleButtonLink( index, e ) {
        window.collapseTable( index );
        e.preventDefault();
    }
 
    for ( i = 0; i < Tables.length; i++ ) {
        if ( $( Tables[i] ).hasClass( 'collapsible' ) ) {
 
            /* only add button and increment count if there is a header row to work with */
            var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];
            if ( !HeaderRow ) continue;
            var Header = HeaderRow.getElementsByTagName( 'th' )[0];
            if ( !Header ) continue;
 
            NavigationBoxes[ tableIndex ] = Tables[i];
            Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );
 
            var Button     = document.createElement( 'span' );
            var ButtonLink = document.createElement( 'a' );
            var ButtonText = document.createTextNode( collapseCaption );
 
            Button.className = 'collapseButton';  /* Styles are declared in Common.css */
 
            ButtonLink.style.color = Header.style.color;
            ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
            ButtonLink.setAttribute( 'href', '#' );
            $( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) );
            ButtonLink.appendChild( ButtonText );
 
            Button.appendChild( document.createTextNode( '[' ) );
            Button.appendChild( ButtonLink );
            Button.appendChild( document.createTextNode( ']' ) );
 
            Header.insertBefore( Button, Header.firstChild );
            tableIndex++;
        }
    }
 
    for ( i = 0;  i < tableIndex; i++ ) {
        if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex >= autoCollapse && $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) {
            window.collapseTable( i );
        } 
        else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {
            var element = NavigationBoxes[i];
            while ((element = element.parentNode)) {
                if ( $( element ).hasClass( 'outercollapse' ) ) {
                    window.collapseTable ( i );
                    break;
                }
            }
        }
    }
}
 
$( createCollapseButtons );
 
/**
 * Dynamic Navigation Bars (experimental)
 *
 * Description: See [[Wikipedia:NavFrame]].
 * Maintainers: UNMAINTAINED
 */
 
/* set up the words in your language */
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';
 
/**
 * Shows and hides content and picture (if available) of navigation bars
 * Parameters:
 *     indexNavigationBar: the index of navigation bar to be toggled
 **/
window.toggleNavigationBar = function ( indexNavigationBar, event ) {
    var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );
    var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );
    var NavChild;
 
    if ( !NavFrame || !NavToggle ) {
        return false;
    }
 
    /* if shown now */
    if ( NavToggle.firstChild.data === NavigationBarHide ) {
        for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
            if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {
                NavChild.style.display = 'none';
            }
        }
    NavToggle.firstChild.data = NavigationBarShow;
 
    /* if hidden now */
    } else if ( NavToggle.firstChild.data === NavigationBarShow ) {
        for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
            if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {
                NavChild.style.display = 'block';
            }
        }
        NavToggle.firstChild.data = NavigationBarHide;
    }
 
    event.preventDefault();
};
 
/* adds show/hide-button to navigation bars */
function createNavigationBarToggleButton() {
    var indexNavigationBar = 0;
    var NavFrame;
    var NavChild;
    /* iterate over all < div >-elements */
    var divs = document.getElementsByTagName( 'div' );
    for ( var i = 0; (NavFrame = divs[i]); i++ ) {
        /* if found a navigation bar */
        if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {
 
            indexNavigationBar++;
            var NavToggle = document.createElement( 'a' );
            NavToggle.className = 'NavToggle';
            NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );
            NavToggle.setAttribute( 'href', '#' );
            $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );
 
            var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );
            /**
             * Check if any children are already hidden.  This loop is here for backwards compatibility:
             * the old way of making NavFrames start out collapsed was to manually add style="display:none"
             * to all the NavPic/NavContent elements.  Since this was bad for accessibility (no way to make
             * the content visible without JavaScript support), the new recommended way is to add the class
             * "collapsed" to the NavFrame itself, just like with collapsible tables.
             */
            for ( NavChild = NavFrame.firstChild; NavChild != null && !isCollapsed; NavChild = NavChild.nextSibling ) {
                if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {
                    if ( NavChild.style.display === 'none' ) {
                        isCollapsed = true;
                    }
                }
            }
            if ( isCollapsed ) {
                for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
                    if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {
                        NavChild.style.display = 'none';
                    }
                }
            }
            var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );
            NavToggle.appendChild( NavToggleText );
 
            /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */
            for( var j = 0; j < NavFrame.childNodes.length; j++ ) {
                if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {
                    NavToggle.style.color = NavFrame.childNodes[j].style.color;
                    NavFrame.childNodes[j].appendChild( NavToggle );
                }
            }
            NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );
        }
    }
}
 
$( createNavigationBarToggleButton );

/* دالة مساعدة لإضافة زر جديد لأحد قوائم الواجهة */
function addLink(where, url, name, id, title, key, after) {
    /* where is the id of the toolbar where the button should be added; i.e. one of "p-cactions", "p-personal", "p-navigation", or "p-tb". url is the URL which will be called when the button is clicked. javascript: urls can be used to do more complex things. name is what will appear as the name of the button. id is the id of the button; it's best to define one. Use a prefix to make sure its unique; Optional. title is the tooltip title that gives a longer description of the button; if you define a accesskey, mention it here; Optional. key is the char you want for the accesskey; Optional. after is the id or DOM node of the button you want to follow this one; Optional. */
    var na = document.createElement('a');
    na.href = url;
    na.appendChild(document.createTextNode(name));
    var li = document.createElement('li');
    if (id) li.id = id;
    li.appendChild(na);
    var tabs = document.getElementById(where).getElementsByTagName('ul')[0];
    if (!after) {
        tabs.appendChild(li);
    } else if (after.cloneNode) { // looks like a DOM node
        tabs.insertBefore(li, after);
    } else { // assume this is an ID string
        tabs.insertBefore(li, document.getElementById(after));
    }
    if (id) {
        if (key && title) {
            ta[id] = [key, title];
        } else if (key) {
            ta[id] = [key, ''];
        } else if (title) {
            ta[id] = ['', title];
        }
    }
    // re-render the title and accesskeys from existing code in wikibits.js
    akeytt();
    return li;
}

/* نصوص لإنترنت إكسبلورر */
if ($.client.profile().name == 'msie') {
    /** Internet Explorer bug fix **************************************************
     *
     *  Description: Fixes IE horizontal scrollbar bug
     */

    var oldWidth;
    var docEl = document.documentElement;

    var fixIEScroll = function () {
        if (!oldWidth || docEl.clientWidth > oldWidth) {
            doFixIEScroll();
        } else {
            setTimeout(doFixIEScroll, 1);
        }

        oldWidth = docEl.clientWidth;
    };

    var doFixIEScroll = function () {
        docEl.style.overflowX = (docEl.scrollWidth - docEl.clientWidth < 4) ? "hidden" : "";
    };

    document.attachEvent("onreadystatechange", fixIEScroll);
    document.attachEvent("onresize", fixIEScroll);

    // In print IE (7?) does not like line-height
    mw.util.addCSS('@media print { sup, sub, p, .documentDescription { line-height: normal; } }');

    // IE overflow bug
    mw.util.addCSS('div.overflowbugx { overflow-x: scroll !important; overflow-y: hidden !important; } ' + 'div.overflowbugy { overflow-y: scroll !important; overflow-x: hidden !important; }');

    // IE zoomfix
    // Use to fix right floating div/table inside tables
    mw.util.addCSS('.iezoomfix div, .iezoomfix table { zoom: 1; }');

    // Import scripts specific to Internet Explorer 6
    if ($.client.profile().versionBase == '6') {
        importScript('MediaWiki:Common.js/IE60Fixes.js');
    }
}

/*  [[قالب:أصد]] و[[قالب:يونيكود]] */
if ($.client.profile().platform == 'win') {
    mw.util.addCSS('.IPA, .Unicode { font-family: "Arial Unicode MS", "Lucida Sans Unicode", "Segoe UI", "Microsoft Sans Serif"; }');
}

/* [[قالب:لائحة مسطحة]] */
if ($.client.profile().name == 'msie') {
    /* Add pseudo-selector class to last child list items in IE 8 */
    if ($.client.profile().versionBase == '8') {
        $('.hlist').find('dd:last-child, dt:last-child, li:last-child').addClass('hlist-last-child');
    }
    /* Generate interpuncts and parens for IE < 8 */
    if ($.client.profile().versionBase < '8') {
        $('.hlist').find('dt + dd, dt + dt').prev().append('<b>:</b> ');
        $('.hlist').find('dd + dd, dd + dt, li + li').prev().append('<b>·</b> ');
        $('.hlist').find('dl dl, ol ol, ul ul').prepend('( ').append(') ');
    }
}

/* [[قالب:اسم مستخدم]] */
function UsernameReplace() {
    if (window.disableUsernameReplace || wgUserName == null) return;
    var un = getElementsByClassName(document, 'span', 'insertusername');
    for (var i = 0; i < un.length; i++) {
        var d = 0;
        for (var j = 0; j < un[i].childNodes.length; j++) {
            if (un[i].childNodes[j].nodeType == 3 && d < 1) {
                //find first text node and replace;
                un[i].childNodes[j].nodeValue = wgUserName;
                d++;
            }
        }
    }
}
addOnloadHook(UsernameReplace);

/* تعريب كلمة تحويل بالإنجليزية المدرجة في شريط أدوات التحرير */
/* [[bugzilla:24114]] */
(function (mw, $) {
    if (window.wgWikiEditorEnabledModules && wgWikiEditorEnabledModules.toolbar) {
        try {
            $('#wpTextbox1').bind('wikiEditor-toolbar-buildSection-advanced', function (event, section) {
                section.groups.insert.tools.redirect.action.options.pre = '#تحويل [[';
            });
        } catch (e) {
            // Woopsie, die without a notice
        }
    }
})(mediaWiki, jQuery);

/**
 * Redirect User:Name/skin.js and skin.css to the current skin's pages
 * (unless the 'skin' page really exists)
 * @source: http://www.mediawiki.org/wiki/Snippets/Redirect_skin.js
 * @rev: 3
 */
if (mw.config.get('wgArticleId') === 0 && mw.config.get('wgNamespaceNumber') === 2) {
    var titleParts = mw.config.get('wgPageName').split('/');
    // Make sure there was a part before and after the slash
    // And that the latter is 'skin.js' or 'skin.css'
    if (titleParts.length == 2) {
        var userSkinPage = titleParts[0] + '/' + mw.config.get('skin');
        if (titleParts[1] === 'skin.js') {
            window.location.href = mw.util.wikiGetlink(userSkinPage + '.js');
        } else if (titleParts[1] === 'skin.css') {
            window.location.href = mw.util.wikiGetlink(userSkinPage + '.css');
        }
    }
}

/* إبقاء [[وب:إأ#الطريقة الأولى]] صالحة للاستعمال 
** [[mw:Snippets/ToolboxLayer]] */
(function ($) {
    if ($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) === -1 || $.fn.wikiEditor === undefined) {
        return;
    }

    $(document).ready(function () {
        var $tb = $('#wpTextbox1');
        $.each(window.mwCustomEditButtons || [], function (i) {
            var wikiOptions = {
                section: 'main',
                group: 'insert',
                tools: {}
            }, tool = this;
            wikiOptions.tools[tool.name || 'mw-custom-edit-button-' + (i + 1)] = {
                label: tool.speedTip,
                type: 'button',
                icon: tool.imageFile,
                action: {
                    type: 'callback',
                    execute: function () {
                        $tb.textSelection('encapsulateSelection', {
                            pre: tool.tagOpen || '',
                            peri: tool.sampleText || '',
                            post: tool.tagClose || ''
                        });
                        if ($.isFunction(tool.callbackFunct)) {
                            tool.callbackFunct.call(window);
                        }
                    }
                }
            }
            $tb.wikiEditor('addToToolbar', wikiOptions);
        });
    });
})(jQuery);

/* زر تحويل جهة كتابة المقارنة بين نسختين */
$(function () {
    $(".diff-otitle").after('<a href="javascript:diffToggleDir();"><tt style="float: left; font-weight: bold;" title="تغيير جهة كتابة المقارنة"><-></tt>');
});

function diffToggleDir() {
    var wDir = "ltr";
    if ($(".diff-context").css('direction') == 'ltr') wDir = "rtl";
    $(".diff-addedline, .diff-deletedline, .diff-context").css("direction", wDir);
}

/* [[قالب:مب]]
** [[mw:Snippets/Load_JS_and_CSS_by_URL]] */
var extraCSS = mw.util.getParamValue("withCSS");
if (extraCSS && extraCSS.match(/^MediaWiki:[^&<>=%]*\.css$/)) {
    importStylesheet(extraCSS);
}
var extraJS = mw.util.getParamValue("withJS");
if (extraJS && extraJS.match(/^MediaWiki:[^&<>=%]*\.js$/)) {
    importScript(extraJS);
}

/* [[MediaWiki:Gadget-SummaryEnterPreview.js]] */
jQuery(document).ready(function ($) {
    if (typeof summaryEnterRejectDisable === 'undefined' || summaryEnterRejectDisable == false) {
        $("#wpSummary").keypress(function (e) {
            if (e.keyCode == 13) {
                e.preventDefault();
            }
        });
        $("#wpSave").css("font-weight", "normal");
    }
});

/* [[قالب:قسم مخفي]]
** http://www.snilesh.com/resources/jquery/jquery-expand-collapse-expand-all-collapse-all/ 
*/
$(document).ready(function(){
    $(".toggle_container").hide();
    $("h2.expand_heading").toggle(function(){
        $(this).addClass("active");
        }, function () {
        $(this).removeClass("active");
    });
    $("h2.expand_heading").click(function(){
        $(this).next(".toggle_container").slideToggle("fast");
    });
    $(".expand_all").toggle(function(){
        $(this).addClass("expanded");
        }, function () {
        $(this).removeClass("expanded");
    });
    $(".expand_all").click(function(){
        $(".toggle_container").slideToggle("fast");
    });
});