|
|
(не показаны 3 промежуточные версии этого же участника) |
Строка 1: |
Строка 1: |
| importScript_ = importScript
| |
| importScript = function (page, proj){
| |
| if (!proj) importScript_(page)
| |
| else {
| |
| if (proj.indexOf('.')==-1) proj += '.wikipedia.org'
| |
| importScriptURI('http://'+proj+'/w/index.php?action=raw&ctype=text/javascript&title='+encodeURIComponent(page.replace(/ /g,'_')))
| |
| }
| |
| }
| |
|
| |
|
| addLoadEvent = addOnloadHook
| |
|
| |
|
| |
| //Collapsiblе: [[ВП:СБ]]
| |
|
| |
| var NavigationBarShowDefault;
| |
| if ( typeof NavigationBarShowDefault === 'undefined' ) {
| |
| NavigationBarShowDefault = 1;
| |
| }
| |
|
| |
| // table.collapsible
| |
| // collapsibleTablesItrIdx - временное решние, чтобы не дублировались id,
| |
| // если во время срабатывания хука 'wikipage.content' добавляются новые сворачиваемые блоки
| |
| var collapsibleTablesItrIdx = 0;
| |
|
| |
| function collapsibleTables( $content ) {
| |
| var $btn,
| |
| $a,
| |
| tblIdx = collapsibleTablesItrIdx,
| |
| navboxCount = 0,
| |
| notNavboxCount = 0,
| |
| colTables = [],
| |
| $Tables = $content.find( 'table' );
| |
|
| |
| $Tables.each( function ( i, table ) {
| |
| if ( $( table ).hasClass( 'collapsible' ) ) {
| |
| var $table = $( this ),
| |
| $row = $table.find( 'tr' ).first(),
| |
| $cell = $row.find( 'th' ).first();
| |
| if ( !$cell.length ) {
| |
| return;
| |
| }
| |
| $table.attr( 'id', 'collapsibleTable' + tblIdx );
| |
| $btn = $( '<span>' ).addClass( 'collapseButton' );
| |
| $a = $( '<a>' )
| |
| .attr( 'id', 'collapseButton' + tblIdx )
| |
| .attr( 'href', 'javascript:collapseTable(' + tblIdx + ');' )
| |
| // Изменяем цвет ссылки, только если цвет текста в навбоксе нестандартный
| |
| .css( 'color', $cell.css( 'color' ) === $( '.mw-body' ).css( 'color' ) ? 'auto' :
| |
| $cell.css( 'color' ) )
| |
| .text( collapseCaption );
| |
| $btn
| |
| .append( '[' )
| |
| .append( $a )
| |
| .append( ']' );
| |
| if ( $cell.contents().length ) {
| |
| $btn.insertBefore( $cell.contents().first() );
| |
| } else {
| |
| $btn.appendTo( $cell );
| |
| }
| |
| // hasClass( 'navbox' ) — временное решение для навшаблонов, ещё не переведённых
| |
| // на {{Навигационная таблица}} (также ниже)
| |
| if ( $table.hasClass( 'navbox-inner' ) || $table.hasClass( 'navbox' ) ) {
| |
| navboxCount++;
| |
| } else {
| |
| notNavboxCount++;
| |
| }
| |
| colTables[tblIdx++] = $table;
| |
| }
| |
| } );
| |
| for ( var i = collapsibleTablesItrIdx; i < tblIdx; i++ ) {
| |
| if ( colTables[i].hasClass( 'collapsed' ) ||
| |
| ( colTables[i].hasClass( 'autocollapse' ) &&
| |
| ( ( ( colTables[i].hasClass( 'navbox-inner' ) || colTables[i].hasClass( 'navbox' ) ) &&
| |
| navboxCount > NavigationBarShowDefault ) ||
| |
| ( !( colTables[i].hasClass( 'navbox-inner' ) || colTables[i].hasClass( 'navbox' ) ) &&
| |
| notNavboxCount > NavigationBarShowDefault ) ) ) )
| |
| {
| |
| collapseTable( i );
| |
| }
| |
| }
| |
| collapsibleTablesItrIdx = tblIdx;
| |
| // Нужно переписать код на "mw-collapsible", и заменить использование хука на "wikipage.collapsibleContent"
| |
| mw.hook( 'common.collapsibleContent' ).fire( colTables );
| |
| }
| |
|
| |
| mw.hook( 'wikipage.content' ).add( collapsibleTables );
| |
|
| |
| function collapseTable( idx ) {
| |
| var $table = $( '#collapsibleTable' + idx ),
| |
| $rows = $table.children().children( 'tr' ),
| |
| $btn = $( '#collapseButton' + idx );
| |
| if ( !$table.length || !$rows.length || !$btn.length ) {
| |
| return false;
| |
| }
| |
|
| |
| var isExpanded = ( $btn.text() === collapseCaption ),
| |
| cssDisplay = isExpanded ? 'none' : $rows.first().css( 'display' );
| |
|
| |
| $btn.text( isExpanded ? expandCaption : collapseCaption );
| |
| $rows.slice( 1 ).each( function () {
| |
| $( this ).css( 'display', cssDisplay );
| |
| } );
| |
| }
| |
|
| |
| // div.NavFrame
| |
| var navFrameExpandCaption = '[' + expandCaption + ']',
| |
| navFrameCollapseCaption = '[' + collapseCaption + ']';
| |
|
| |
| // Изолируем код из глобальной области видимости
| |
| ( function () {
| |
| function collapsibleDivs( $content ) {
| |
| var navFrameIndex = 0,
| |
| navFrames = [],
| |
| i;
| |
|
| |
| $content.find( 'div' ).each( function () {
| |
| var $div = $( this );
| |
| if ( $div.hasClass( 'NavFrame' ) ) {
| |
| var $btn = $( '<a>' )
| |
| .addClass( 'NavToggle' )
| |
| .attr( 'href', 'javascript:' )
| |
| .text( navFrameCollapseCaption )
| |
| .click( navToggleClickHandler );
| |
| $div.children( '.NavHead' ).append( $btn );
| |
| navFrames[ navFrameIndex++ ] = $div;
| |
| }
| |
| } );
| |
| for ( i = 0; i < navFrameIndex; i++ ) {
| |
| if ( navFrames[ i ].hasClass( 'collapsed' ) ||
| |
| ( navFrameIndex > NavigationBarShowDefault &&
| |
| !navFrames[ i ].hasClass( 'expanded' )
| |
| )
| |
| ) {
| |
| toggleDiv( navFrames[ i ] );
| |
| }
| |
| }
| |
| }
| |
|
| |
| mw.hook( 'wikipage.content' ).add( collapsibleDivs );
| |
|
| |
| function navToggleClickHandler() {
| |
| var $btn = $( this );
| |
| toggleDiv( $btn.closest( '.NavFrame' ), $btn );
| |
| }
| |
|
| |
| function toggleDiv( $div, $btn ) {
| |
| $btn = $btn || $div.find( '.NavToggle' ).first();
| |
| if ( !$div.length || !$btn.length ) return false;
| |
| var isExpanded = ( $btn.text() === navFrameCollapseCaption );
| |
| $btn.text( isExpanded ? navFrameExpandCaption : navFrameCollapseCaption );
| |
| $div.children( '.NavContent, .NavPic' ).each( function () {
| |
| $( this ).css( 'display', isExpanded ? 'none' : 'block' );
| |
| } );
| |
| }
| |
|
| |
| /**
| |
| * Загрузка скриптов через систему подгаджетов
| |
| */
| |
| var namespaceNumber = mw.config.get( 'wgNamespaceNumber' );
| |
|
| |
| // Скрипты для служебных страниц
| |
| if ( namespaceNumber === -1 ) {
| |
| var specialGadgets = [
| |
| 'Abusefilter',
| |
| 'Block',
| |
| 'Log',
| |
| 'Movepage',
| |
| 'Newpages',
| |
| 'Search',
| |
| 'Upload'
| |
| ];
| |
| var canonicalSpecialPageName = mw.config.get( 'wgCanonicalSpecialPageName' );
| |
| if ( specialGadgets.indexOf( canonicalSpecialPageName ) > -1 ) {
| |
| mw.loader.load( 'ext.gadget.common-special-' + canonicalSpecialPageName.toLowerCase() );
| |
| }
| |
| } else {
| |
| // Скрипты для пространств имён
| |
| var namespaceGadgets = {
| |
| 6: [ 'ext.gadget.common-namespace-file' ]
| |
| };
| |
|
| |
| if ( namespaceGadgets[ namespaceNumber ] ) {
| |
| mw.loader.load( namespaceGadgets[ namespaceNumber ] );
| |
| }
| |
| }
| |
| }() );
| |