|
|
(44 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
Zeile 1: |
Zeile 1: |
| /** | | //================================================================================ |
| * Dynamic Navigation Bars. See [[Wikipedia:NavFrame]]
| | //*** Dynamic Navigation Bars |
| *
| |
| * Based on script from en.wikipedia.org, 2008-09-15.
| |
| *
| |
| * @source www.mediawiki.org/wiki/MediaWiki:Gadget-NavFrame.js
| |
| * @maintainer Helder.wiki, 2012–2013
| |
| * @maintainer Krinkle, 2013
| |
| */
| |
| ( function () {
| |
|
| |
|
| // Set up the words in your language | | // set up max count of Navigation Bars on page, |
| var collapseCaption = 'hide';
| | // if there are more, all will be hidden |
| var expandCaption = 'show';
| | // mw.user.options.set( 'NavigationBarShowDefault', 0 ); // all bars will be hidden |
| | // mw.user.options.set( 'NavigationBarShowDefault', 1 ); // on pages with more than 1 bar all bars will be hidden |
|
| |
|
| var navigationBarHide = '[' + collapseCaption + ']'; | | // adds show/hide-button to navigation bars |
| var navigationBarShow = '[' + expandCaption + ']'; | | // using 'jquery.makeCollapsible': for messages |
| | // using 'user', 'mediawiki.user', 'user.options': wait for overrides in user.js |
| | mw.loader.using( [ 'jquery.makeCollapsible', 'user', 'mediawiki.user', 'user.options' ], function() { mw.hook( 'wikipage.content' ).add( function( $content ) { |
| | // allow setting NavigationBarShowDefault |
| | var showDefaultCount = mw.user.options.get( 'NavigationBarShowDefault', |
| | typeof NavigationBarShowDefault !== 'undefined' ? NavigationBarShowDefault : 1 ); |
| | // allow user overrides for b/c |
| | var textHide = typeof NavigationBarHide === 'string' ? NavigationBarHide : mw.msg( 'collapsible-collapse' ); |
| | var textShow = typeof NavigationBarShow === 'string' ? NavigationBarShow : mw.msg( 'collapsible-expand' ); |
|
| |
|
| /** | | // shows and hides content and picture (if available) of navigation bars |
| * Shows and hides content and picture (if available) of navigation bars.
| | // Parameters: |
| *
| | // indexNavigationBar: the index of navigation bar to be toggled |
| * @param {number} indexNavigationBar The index of navigation bar to be toggled
| | function toggleNavigationBar(NavToggle, NavFrame) |
| * @param {jQuery.Event} e Event object
| | { |
| */
| | if (!NavFrame || !NavToggle) { |
| function toggleNavigationBar( indexNavigationBar, e ) { | | return false; |
| var navChild,
| |
| navToggle = document.getElementById( 'NavToggle' + indexNavigationBar ),
| |
| navFrame = document.getElementById( 'NavFrame' + indexNavigationBar );
| |
| | |
| // Prevent browser from jumping to href "#" | |
| e.preventDefault();
| |
| | |
| 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
| | // if shown now |
| } else if ( navToggle.firstChild.data === navigationBarShow ) {
| | if (NavToggle.firstChild.data === textHide) { |
| for ( navChild = navFrame.firstChild; navChild !== null; navChild = navChild.nextSibling ) {
| | for ( |
| if ( $( navChild ).hasClass( 'NavContent' ) || $( navChild ).hasClass( 'NavPic' ) ) {
| | var NavChild = NavFrame.firstChild; |
| navChild.style.display = 'block';
| | NavChild !== null; |
| | NavChild = NavChild.nextSibling |
| | ) { |
| | if (NavChild.className === 'NavPic' || NavChild.className === 'NavContent') { |
| | NavChild.style.display = 'none'; |
| | } |
| } | | } |
| }
| | NavToggle.firstChild.data = textShow; |
| navToggle.firstChild.data = navigationBarHide;
| |
| }
| |
| }
| |
| | |
| /**
| |
| * Adds show/hide-button to navigation bars.
| |
| *
| |
| * @param {jQuery} $content
| |
| */
| |
| function createNavigationBarToggleButton( $content ) {
| |
| var i, j, navChild, navToggle, navToggleText, isCollapsed,
| |
| indexNavigationBar = 0;
| |
| // iterate over all < div >-elements
| |
| var $divs = $content.find( 'div.NavFrame' );
| |
| $divs.each( function ( i, navFrame ) {
| |
| indexNavigationBar++;
| |
| navToggle = document.createElement( 'a' );
| |
| navToggle.className = 'NavToggle';
| |
| navToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );
| |
| navToggle.setAttribute( 'href', '#' );
| |
| $( navToggle ).on( 'click', $.proxy( toggleNavigationBar, null, indexNavigationBar ) );
| |
|
| |
|
| isCollapsed = $( navFrame ).hasClass( 'collapsed' ); | | // if hidden now |
| // backwards compatibility for old technique where the collapsed class was not yet used
| | } else if (NavToggle.firstChild.data === textShow) { |
| for ( navChild = navFrame.firstChild; navChild !== null && !isCollapsed; navChild = navChild.nextSibling ) {
| | for ( |
| if ( $( navChild ).hasClass( 'NavPic' ) || $( navChild ).hasClass( 'NavContent' ) ) {
| | var NavChild = NavFrame.firstChild; |
| if ( navChild.style.display === 'none' ) {
| | NavChild !== null; |
| isCollapsed = true;
| | NavChild = NavChild.nextSibling |
| | ) { |
| | if (NavChild.className === 'NavPic' || NavChild.className === 'NavContent') { |
| | NavChild.style.display = 'block'; |
| } | | } |
| } | | } |
| | NavToggle.firstChild.data = textHide; |
| } | | } |
| if ( isCollapsed ) {
| | } |
| for ( navChild = navFrame.firstChild; navChild !== null; navChild = navChild.nextSibling ) {
| |
| if ( $( navChild ).hasClass( 'NavPic' ) || $( navChild ).hasClass( 'NavContent' ) ) {
| |
| navChild.style.display = 'none';
| |
| }
| |
| }
| |
| }
| |
| 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)
| | function toggleNavigationBarFunction(NavToggle, NavFrame) { |
| for ( j = 0; j < navFrame.childNodes.length; j++ ) { | | return function() { |
| if ( $( navFrame.childNodes[j] ).hasClass( 'NavHead' ) ) { | | toggleNavigationBar(NavToggle, NavFrame); |
| navToggle.style.color = navFrame.childNodes[j].style.color;
| | return false; |
| navFrame.childNodes[j].appendChild( navToggle );
| | }; |
| }
| | } |
| }
| | // iterate over all NavFrames |
| navFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );
| | var NavFrames = $content.find( 'div.NavFrame' ); |
| } );
| |
| }
| |
|
| |
|
| mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton ); | | // if more Navigation Bars found and not template namespace than Default: hide all |
| | var initiallyToggle = showDefaultCount < NavFrames.length && mw.config.get( 'wgNamespaceNumber' ) !== 10; |
| | for (var i=0; i<NavFrames.length; i++) { |
| | var NavFrame = NavFrames[i]; |
| | var NavToggle = document.createElement("a"); |
| | NavToggle.className = 'NavToggle'; |
| | NavToggle.setAttribute('href', '#'); |
|
| |
|
| }());
| | var NavToggleText = document.createTextNode(textHide); |
| | NavToggle.appendChild(NavToggleText); |
|
| |
|
| | // add NavToggle-Button as first div-element |
| | // in < div class="NavFrame" > |
| | NavFrame.insertBefore(NavToggle, NavFrame.firstChild); |
|
| |
|
| | | NavToggle.onclick = toggleNavigationBarFunction(NavToggle, NavFrame); |
| /** Skript für [[Vorlage:Galerie]] */
| | if (initiallyToggle) { |
| $( function() {
| | toggleNavigationBar(NavToggle, NavFrame); |
| if (document.URL.match(/printable/g)) return;
| | } else { // make sure that 'display' is always set for every NavFrame |
| | | for ( |
| function toggleImageFunction(group, remindex, shwindex) {
| | var NavChild = NavFrame.firstChild; |
| return function() {
| | NavChild !== null; |
| document.getElementById("ImageGroupsGr" + group + "Im" + remindex).style["display"] = "none";
| | NavChild = NavChild.nextSibling |
| document.getElementById("ImageGroupsGr" + group + "Im" + shwindex).style["display"] = "block";
| | ) { |
| return false;
| | if (NavChild.className === 'NavPic' || NavChild.className === 'NavContent') { |
| };
| | NavChild.style.display = 'block'; |
| }
| | } |
| | | } |
| var divs = document.getElementsByTagName("div");
| | } |
| var i = 0, j = 0;
| | } |
| var units, search;
| | })}); |
| var currentimage;
| |
| var UnitNode;
| |
| for (i = 0; i < divs.length; i++) {
| |
| if (divs[i].className !== "ImageGroup") { continue; }
| |
| UnitNode = undefined;
| |
| search = divs[i].getElementsByTagName("div");
| |
| for (j = 0; j < search.length; j++) {
| |
| if (search[j].className !== "ImageGroupUnits") { continue; }
| |
| UnitNode=search[j];
| |
| break;
| |
| }
| |
| if (UnitNode === undefined) { continue; }
| |
| units = [];
| |
| for (j = 0 ; j < UnitNode.childNodes.length ; j++ ) {
| |
| var temp = UnitNode.childNodes[j];
| |
| if (temp.className === "center") { units.push(temp); }
| |
| }
| |
| var rightlink = undefined;
| |
| var commentText = undefined;
| |
| for (j = 0; j < units.length; j++) {
| |
| currentimage = units[j];
| |
| currentimage.id = "ImageGroupsGr" + i + "Im" + j;
| |
| var leftlink = document.createElement("a");
| |
| if (commentText !== undefined) {
| |
| leftlink.setAttribute("title", commentText);
| |
| }
| |
| var comment;
| |
| if (typeof(currentimage.getAttribute("title")) !== "string") {
| |
| commentText = (j+1) + "/" + units.length;
| |
| comment = document.createElement("tt").appendChild(document.createTextNode("("+ commentText + ")"));
| |
| } else {
| |
| commentText = currentimage.getAttribute("title");
| |
| comment = document.createElement("span").appendChild(document.createTextNode(commentText));
| |
| currentimage.removeAttribute("title");
| |
| }
| |
| if(rightlink !== undefined) {
| |
| rightlink.setAttribute("title", commentText);
| |
| }
| |
| var imghead = document.createElement("div");
| |
| rightlink = document.createElement("a");
| |
| if (j !== 0) {
| |
| leftlink.href = "#";
| |
| leftlink.onclick = toggleImageFunction(i, j, j-1);
| |
| leftlink.appendChild(document.createTextNode("◀"));
| |
| }
| |
| if (j !== units.length - 1) {
| |
| rightlink.href = "#";
| |
| rightlink.onclick = toggleImageFunction(i, j, j+1);
| |
| rightlink.appendChild(document.createTextNode("▶"));
| |
| }
| |
| imghead.style["fontSize"] = "110%";
| |
| imghead.style["fontweight"] = "bold";
| |
| imghead.appendChild(leftlink);
| |
| imghead.appendChild(document.createTextNode("\xA0"));
| |
| imghead.appendChild(comment);
| |
| imghead.appendChild(document.createTextNode("\xA0"));
| |
| imghead.appendChild(rightlink);
| |
| if (units.length > 1) {
| |
| currentimage.insertBefore(imghead,currentimage.childNodes[0]);
| |
| }
| |
| if (j !== 0) {
| |
| currentimage.style["display"] = "none";
| |
| }
| |
| }
| |
| }
| |
| });
| |
| | |
| /**
| |
| * Fügt eine Betreffzeile auf leeren Artikel-Diskussionsseiten ein
| |
| */
| |
| if( mw.config.get( 'wgNamespaceNumber' ) === 0 || mw.config.get( 'wgNamespaceNumber' ) === 1 ) {
| |
| $(function() {
| |
| $( '#ca-talk.new a' ).attr( 'href', function( index, attr ) {
| |
| return attr + '§ion=new';
| |
| });
| |
| });
| |
| }
| |
| | |
| /**
| |
| * Fügt bei SVG-Grafiken Links zu gerenderten PNGs in verschiedenen Breiten hinzu
| |
| */
| |
| if (mw.config.get( 'wgNamespaceNumber' ) === 6) {
| |
| $( function() {
| |
| var file = $( '#file' ); // might fail if MediaWiki can't render the SVG
| |
| if( file.length && mw.config.get( 'wgIsArticle' ) && mw.config.get( 'wgTitle' ).match( /\.svg$/i ) ) {
| |
| var thumbsrc = file.find( 'img' ).attr( 'src' );
| |
| if( !thumbsrc ) {
| |
| return;
| |
| }
| |
| | |
| var svgAltSize = function( w, title ) {
| |
| var path = thumbsrc.replace( /\/\d+(px-[^\/]+$)/, "/" + w + "$1" );
| |
| var a = $( document.createElement("a") );
| |
| a.attr( 'href', path );
| |
| a.text( title );
| |
| return a;
| |
| };
| |
| | |
| var p = $( document.createElement("p") );
| |
| p.addClass( "SVGThumbs" );
| |
| p.append( document.createTextNode( "Aus SVG automatisch erzeugte PNG-Grafiken in verschiedenen Auflösungen"+": " ) );
| |
| var l = [ 200, 500, 1000, 2000 ];
| |
| for( var i = 0; i < l.length; i++ ) {
| |
| if( i !== 0 ) {
| |
| p.append( document.createTextNode( ", " ) );
| |
| }
| |
| p.append( svgAltSize( l[i], l[i] + "px" ) );
| |
| }
| |
| p.append( document.createTextNode( "." ) );
| |
| $( file.parent() ).find( 'div.fullMedia' ).append( p );
| |
| }
| |
| });
| |
| }
| |