Diferencia entre revisiones de «MediaWiki:Common.js»
Ir a la navegación
Ir a la búsqueda
m |
m |
||
Línea 145: | Línea 145: | ||
el.click(function(){ that.toggle(); }); |
el.click(function(){ that.toggle(); }); |
||
} |
} |
||
− | function _el(text,color){ return ne('span').attr('title',text).css('color',color); } |
+ | function _el(text,color){ return ne('span').attr('class','notice').attr('title',text).css('color',color); } |
− | function _img(source,text){ return ne('img').attr('src', source).attr('alt', text).attr('title', text); } |
+ | function _img(source,text){ return ne('img').attr('class','notice').attr('src', source).attr('alt', text).attr('title', text); } |
/* matches */ |
/* matches */ |
||
_match('exemplary',_el('This article is exemplary','gold').text('★')); |
_match('exemplary',_el('This article is exemplary','gold').text('★')); |
Revisión del 14:27 13 dic 2012
/* Any JavaScript here will be loaded for all users on every page load. */ /** 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]] */ 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 ); }; })(); /* 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('¿')); }