Diferencia entre revisiones de «MediaWiki:Common.js»
Ir a la navegación
Ir a la búsqueda
m (unbreak) |
m (fix problem) |
||
Línea 106: | Línea 106: | ||
$("[name='title']",$('form')).remove() |
$("[name='title']",$('form')).remove() |
||
}) |
}) |
||
+ | |||
+ | |||
+ | /* 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()) |
||
+ | }) |
||
+ | |||
+ | /** 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() |
||
+ | }) |
||
+ | |||
+ | /* from https://www.mediawiki.org/wiki/Manual:Interface/Sidebar#Add_or_remove_toolbox_sections_.28JavaScript.29 */ |
||
+ | function ModifySidebar( action, section, name, link ) { |
||
+ | try { |
||
+ | switch ( section ) { |
||
+ | case 'languages': |
||
+ | var target = 'p-lang'; |
||
+ | break; |
||
+ | case 'toolbox': |
||
+ | var target = 'p-tb'; |
||
+ | break; |
||
+ | case 'navigation': |
||
+ | var target = 'p-navigation'; |
||
+ | break; |
||
+ | default: |
||
+ | var target = 'p-' + section; |
||
+ | break; |
||
+ | } |
||
+ | |||
+ | if ( action == 'add' ) { |
||
+ | var node = document.getElementById( target ) |
||
+ | .getElementsByTagName( 'div' )[0] |
||
+ | .getElementsByTagName( 'ul' )[0]; |
||
+ | |||
+ | var aNode = document.createElement( 'a' ); |
||
+ | var liNode = document.createElement( 'li' ); |
||
+ | |||
+ | aNode.appendChild( document.createTextNode( name ) ); |
||
+ | aNode.setAttribute( 'href', link ); |
||
+ | liNode.appendChild( aNode ); |
||
+ | liNode.className = 'plainlinks'; |
||
+ | node.appendChild( liNode ); |
||
+ | } |
||
+ | |||
+ | if ( action == 'remove' ) { |
||
+ | var list = document.getElementById( target ) |
||
+ | .getElementsByTagName( 'div' )[0] |
||
+ | .getElementsByTagName( 'ul' )[0]; |
||
+ | |||
+ | var listelements = list.getElementsByTagName( 'li' ); |
||
+ | |||
+ | for ( var i = 0; i < listelements.length; i++ ) { |
||
+ | if ( |
||
+ | listelements[i].getElementsByTagName( 'a' )[0].innerHTML == name || |
||
+ | listelements[i].getElementsByTagName( 'a' )[0].href == link |
||
+ | ) |
||
+ | { |
||
+ | list.removeChild( listelements[i] ); |
||
+ | } |
||
+ | } |
||
+ | } |
||
+ | |||
+ | } catch( e ) { |
||
+ | // let's just ignore what's happened |
||
+ | return; |
||
+ | } |
||
+ | } |
||
+ | |||
+ | jQuery(function () { |
||
+ | if (!mw.config.get('wgIsArticle') && mw.config.get('wgAction') !== 'edit') |
||
+ | return; |
||
+ | var title = mw.config.get('wgTitle'); |
||
+ | ModifySidebar( 'add', 'toolbox', "Search Brandon's website for " + title, //brandonsanderson.com/?s=' + title ); |
||
+ | ModifySidebar( 'add', 'toolbox', "Interviews relating to " + title, '//www.theoryland.com/intvsresults.php?kw=' + title ); |
||
+ | }); |
Revisión del 20:31 16 ene 2015
/* 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()) }) /** 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() }) /* 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()) }) /** 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() }) /* from https://www.mediawiki.org/wiki/Manual:Interface/Sidebar#Add_or_remove_toolbox_sections_.28JavaScript.29 */ function ModifySidebar( action, section, name, link ) { try { switch ( section ) { case 'languages': var target = 'p-lang'; break; case 'toolbox': var target = 'p-tb'; break; case 'navigation': var target = 'p-navigation'; break; default: var target = 'p-' + section; break; } if ( action == 'add' ) { var node = document.getElementById( target ) .getElementsByTagName( 'div' )[0] .getElementsByTagName( 'ul' )[0]; var aNode = document.createElement( 'a' ); var liNode = document.createElement( 'li' ); aNode.appendChild( document.createTextNode( name ) ); aNode.setAttribute( 'href', link ); liNode.appendChild( aNode ); liNode.className = 'plainlinks'; node.appendChild( liNode ); } if ( action == 'remove' ) { var list = document.getElementById( target ) .getElementsByTagName( 'div' )[0] .getElementsByTagName( 'ul' )[0]; var listelements = list.getElementsByTagName( 'li' ); for ( var i = 0; i < listelements.length; i++ ) { if ( listelements[i].getElementsByTagName( 'a' )[0].innerHTML == name || listelements[i].getElementsByTagName( 'a' )[0].href == link ) { list.removeChild( listelements[i] ); } } } } catch( e ) { // let's just ignore what's happened return; } } jQuery(function () { if (!mw.config.get('wgIsArticle') && mw.config.get('wgAction') !== 'edit') return; var title = mw.config.get('wgTitle'); ModifySidebar( 'add', 'toolbox', "Search Brandon's website for " + title, //brandonsanderson.com/?s=' + title ); ModifySidebar( 'add', 'toolbox', "Interviews relating to " + title, '//www.theoryland.com/intvsresults.php?kw=' + title ); });