Diferencia entre revisiones de «MediaWiki:Common.js»

De La Coppermind
Ir a la navegación Ir a la búsqueda
m (hopefully that wont break everything)
m
Línea 10: Línea 10:
 
})
 
})
   
/** Collapsible tables
+
/** Collapsible tables - TODO: Depreciate in favour of jQuery.makeCollapsible
 
Description: Allows tables to be collapsed, showing only the header. See http://www.mediawiki.org/wiki/Manual:Collapsible_tables.
 
Description: Allows tables to be collapsed, showing only the header. See http://www.mediawiki.org/wiki/Manual:Collapsible_tables.
 
Maintainers: [[en:User:R. Koot]]
 
Maintainers: [[en:User:R. Koot]]
Línea 112: Línea 112:
 
})();
 
})();
   
  +
/*
  +
some skin tweaks
  +
*/
 
jQuery(function ($) {
 
jQuery(function ($) {
 
/* push Notes down below infoboxes */
 
/* push Notes down below infoboxes */
Línea 148: Línea 151:
   
 
/*
 
/*
pass to NoticeHeaderPairs to add notices to headers
+
pass to NoticeHeaderPairs to add notices to headers
 
*/
 
*/
 
function AddNoticeToHeader(h){
 
function AddNoticeToHeader(h){
Línea 177: Línea 180:
 
})
 
})
   
  +
/* 2014-04
  +
augment actionpaths edits to LocalSetting.php
  +
*/
 
jQuery(function ($) {
 
jQuery(function ($) {
 
$('[href*="title="]').attr('href', function (i, value) {
 
$('[href*="title="]').attr('href', function (i, value) {

Revisión del 10:37 24 nov 2014

/* Any JavaScript here will be loaded for all users on every page load. */

/* 2014-05
  add title attributes to all ref tags, containing the text shown in the ref
*/
$('[id*="cite_ref"]').each(function (i, el) {
    var el = $(el)
    var a = $('[href="#'+el.attr('id')+'"]')
    el.attr('title', a.next('.reference-text').text() || a.parent().nextAll('.reference-text').text())
})

/** Collapsible tables - TODO: Depreciate in favour of jQuery.makeCollapsible
Description: Allows tables to be collapsed, showing only the header. See http://www.mediawiki.org/wiki/Manual:Collapsible_tables.
Maintainers: [[en:User:R. Koot]]
*/
 
var autoCollapse = 3;
var collapseCaption = 'hide';
var expandCaption = 'show';
 
function collapseTable( tableIndex ) {
        var Button = document.getElementById( 'collapseButton' + tableIndex );
        var Table = document.getElementById( 'collapsibleTable' + tableIndex );
         if ( !Table || !Button ) return false;
        var Rows = Table.rows;
 
        if ( Button.firstChild.data == collapseCaption ) {
                for ( var i = 1; i < Rows.length; i++ ) {
                        Rows[i].style.display = 'none';
                }
                Button.firstChild.data = expandCaption;
        } else {
                for ( var 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 = new Object();
        var Tables = document.getElementsByTagName( 'table' );
 
        for ( var i = 0; i < Tables.length; i++ ) {
                if ( hasClass( Tables[i], '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 [[MediaWiki:Common.css]]
 
                        ButtonLink.style.color = Header.style.color;
                        ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );
                        ButtonLink.setAttribute( 'href', "javascript:collapseTable(" + tableIndex + ");" );
                        ButtonLink.appendChild( ButtonText );
 
                        Button.appendChild( document.createTextNode( '[' ) );
                        Button.appendChild( ButtonLink );
                        Button.appendChild( document.createTextNode( ']' ) );
 
                        Header.insertBefore( Button, Header.childNodes[0] );
                        tableIndex++;
                }
        }
 
        for ( var i = 0;  i < tableIndex; i++ ) {
                if ( hasClass( NavigationBoxes[i], 'collapsed' ) || 
                     ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], 'autocollapse' ) ) ) {
                        collapseTable( i );
                } else if ( hasClass( NavigationBoxes[i], 'innercollapse' ) ) {
                        var element = NavigationBoxes[i];
                        while ( element = element.parentNode ) {
                                if ( hasClass( element, 'outercollapse' ) ) {
                                        collapseTable( i );
                                        break;
                                }
                        }
                }
        }
}
 
addOnloadHook( createCollapseButtons );
 
/** Test if an element has a certain class **************************************
 *
 * Description: Uses regular expressions and caching for better performance.
 * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
 */
 
var hasClass = ( function () {
        var reCache = {};
        return function (element, className) {
                return (reCache[className] ? reCache[className] :
                        (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))
                       ).test(element.className);
        };
})();

/*
  some skin tweaks
*/
jQuery(function ($) {
/* push Notes down below infoboxes */
  $('h2:contains("Notes")').attr('class','notes');
/* replace "Coppermind:Welcome" with "Welcome to the Coppermind" */
  $('h1:contains("Coppermind:Welcome")').text("Welcome to the Coppermind");
/* autocollapse infoboxes if off page
  $('.notes').nextAll('.collapsible').each(function(i,el){
    if (el.getBoundingClientRect().top > 0)
        return;
  })
*/
})

/*
filters for the first previous `sel` on each of `this`
cb gets the passed element and the first matched element (or _default, if nothing matched)
*/
$.fn.previous = function(sel, cb/*(el)*/, _default){
 $(this).each(function(){ var pre = $(this).prevAll(sel); cb.call(this, pre.length ? pre.first() : _default); })
}
/* returns true if the element has the passed class */
$.fn.classed = function(cls){ return $(this)[0].classList?$(this)[0].classList.contains(cls):false; }

function ne(tag, attrs){ var _ = $(document.createElement(tag)); for (var i in attrs) _.attr(i, attrs[i]); return _; }

/*
filter for all .notice instances (not including .stub's)
returning the 'parent' header:
- subsection: the hX of the subsection
- preamble: the first h1 element
*/
function NoticeHeaderPairs(cb/*(el_header)*/){
 $('.notice:not(.stub)').previous('h1,h2,h3,h4,h5', cb, $('h1'))
}

/*
  pass to NoticeHeaderPairs to add notices to headers
*/
function AddNoticeToHeader(h){
var that = $(this)
 function _match(cls,el){
    if (!that.classed(cls))
        return;
    h.append(el);
    that.hide();
    el.click(function(){ that.toggle(); });
 }
 function _el(text,color){ return ne('span').attr('class','notice').attr('title',text).css('color',color); }
 function _img(source,text){ return ne('img').attr('class','notice').attr('src', source).attr('alt', text).attr('title', text); }
/* matches */
_match('exemplary',_el('This article is exemplary','gold').text('★'));
_match('attention',_el('This article needs serious attention', 'red').text('!'));
_match('delete',_img('http://upload.wikimedia.org/wikipedia/commons/9/93/Trash_can.svg', 'This article is to be deleted'));
_match('move',_el('This article may be moved', 'blue').text('⇄'));
_match('copyright',_el('This article is copyright','brown').text('©'));
_match('spoilers',_el('This article/section has spoilers','#FAA').text('¬.¬'));
_match('theory',_el('This article/section contains theory or speculation','#29F').text('¿'));
}

jQuery(function($){
  NoticeHeaderPairs(AddNoticeToHeader);
  $('h1,h2:not(.notes),h3,h4').children(':not(.editsection,.notice)').css('margin-right','1em');
  $('head').append(ne('meta', { name: 'viewport', content: 'width=device-width' }))
})

/* 2014-04
  augment actionpaths edits to LocalSetting.php 
*/
jQuery(function ($) {
  $('[href*="title="]').attr('href', function (i, value) {
    return value.replace(/\/w\/index.php\?title=(.+?)\&(.+?)/, "/wiki/$1?$2")
  })
  $('#searchform').attr('action', '/wiki/Special:Search')
  $('form').attr('action', function (i, value) {
    return value.replace("/w/index.php", "/wiki/" + $('[name="title"]', this).attr('value'))
  })
  $("[name='title']",$('form')).remove()
})