Difference between revisions of "MediaWiki:Common.js"
(Replaced content with "$(function() { importScriptURI('https://arbiterit.com/MediaWiki:SortTableFilter.js'); }); $(function() { importScriptURI('https://arbiterit.com/MediaWiki:Sortabletable....") |
|||
Line 10: | Line 10: | ||
importScriptURI('https://arbiterit.com/MediaWiki:Sortabletable.js'); | importScriptURI('https://arbiterit.com/MediaWiki:Sortabletable.js'); | ||
}); | }); | ||
+ | |||
+ | /////////////////////// | ||
+ | // Table Filter/Sort // | ||
+ | /////////////////////// | ||
+ | /** | ||
+ | * @description Table Filter/Sort | ||
+ | * TODO ?replace by jQuery plugin datatable? | ||
+ | * | ||
+ | * @requires $.resource() | ||
+ | * @requires $.jI18n.en | ||
+ | * @returns {undefined} | ||
+ | */ | ||
+ | window.initTableFilterSort = function (){ // see MediaWiki:SortTableFilter.js | ||
+ | /* Note: problem is auto-inserted <tbody></tbody> by the browser: must be removed and | ||
+ | replaced by thead + tbody. jQuery.unwrap() was not successful */ | ||
+ | // add possibly more classes from http://www.javascripttoolbox.com/lib/table/documentation.php | ||
+ | // Note: only applies to non-nested tables | ||
+ | var jAutotables = $('table.table-autosort, table.table-autofilter, table-autostripe,table-sorted-asc,table-sorted-desc, table-filtered'); | ||
+ | if (jAutotables.length) { | ||
+ | // Note: in MediaWiki:SortTableFilter.js 'SortTableFilter_InputFilterTitle' was not recognized | ||
+ | $.extend(true, $.jI18n, { | ||
+ | en: { | ||
+ | SortTableFilter_AutoSortTitle : 'Click to sort', | ||
+ | SortTableFilter_FilterAllLabel: 'Filter: All', | ||
+ | SortTableFilter_InputFilterTitle: 'Filter text (case sensitive, uses reg. expressions)' | ||
+ | }, | ||
+ | de: { | ||
+ | SortTableFilter_AutoSortTitle : 'Zum Sortieren klicken', | ||
+ | SortTableFilter_FilterAllLabel: 'Zeige: alle', | ||
+ | SortTableFilter_InputFilterTitle: 'Text filtern (GROß/klein!, nutzt reg. Ausdrücke)' | ||
+ | } | ||
+ | }); | ||
+ | // get sortable/filterable here already otherwise multiple th-filters | ||
+ | $.getScript(mw.config.get( 'wgServer' ) + mw.config.get( 'wgScript' ) + '?title=MediaWiki:SortTableFilter.js&action=raw&ctype=text/javascript', | ||
+ | function(){return true;}); | ||
+ | // modify tables to introduce thead structure | ||
+ | jAutotables.each(function(index){ //TODO simplify code? if()… | ||
+ | // There may or may not be a tbody around tr. NOTE: $.unwrap() does not work here! | ||
+ | // Memo: find('tr th') finds th, .parent() retrieves tr! .wrapAll will wrap inside DOM, not in return value! .detach() returns detached | ||
+ | // OK in FF 3.6 and IE 7-8, not in IE6 (like the old code) | ||
+ | // FURTHER WORK: Ideally, all normal tr td should remain in a tbody. | ||
+ | var jThis = $(this), | ||
+ | jThead = jThis.find('tr th').parent().detach(), | ||
+ | jTfoot = jThis.find('tr[class=tfoot] td').parent().detach(),// remove it from the DOM | ||
+ | jTbody = jThis.find('tbody:first'); | ||
+ | if (jTbody.length===0) { | ||
+ | jThis.children().wrapAll('<tbody/>'); | ||
+ | jTbody = jThis.find('tbody:first'); | ||
+ | } | ||
+ | jTbody.before($('<thead/>').append(jThead)); | ||
+ | if (jTfoot.length) { | ||
+ | jTbody.after($('<tfoot/>').append(jTfoot)); | ||
+ | } | ||
+ | // th with class="input" gives an input field instead of selections | ||
+ | $(this).find('th[class=input]').append('<input name="filter" title="'+$.resource('SortTableFilter_InputFilterTitle')+'" size="8" onkeyup="Table.filter(this,this)">'); | ||
+ | });// end each() | ||
+ | } // END if any autotable | ||
+ | }; | ||
+ | |||
+ | /** | ||
+ | * @description: Collapse the TOC using id="toc-autocollapse" | ||
+ | * @returns {undefined} | ||
+ | */ | ||
+ | window.initTOCautocollapse = function () { | ||
+ | if ($('#toc-autocollapse').length) { | ||
+ | $('#togglelink').click(); | ||
+ | } | ||
+ | };// end initTOCautocollapse() | ||
+ | |||
+ | /** | ||
+ | * Add a placeholder message and checks on Special:Contact | ||
+ | * | ||
+ | * Due to e-mail configurations all non @mfn-berlin.de addresses fail to work | ||
+ | * as from-address on Special:Contact. This functions adds a placeholder and checks the | ||
+ | * user’s input | ||
+ | * @requires extension:ContactPage | ||
+ | * @requires mw.config | ||
+ | * @requires jQuery | ||
+ | */ | ||
+ | window.prepareSpecialContact4Info = function () { | ||
+ | var placeholderMessage = '', warningMessageDoesNotWork = ''; | ||
+ | switch (mw.config.get( 'wgCanonicalSpecialPageName' )) { | ||
+ | case 'Contact': // is a Special:Contact page regardless of language | ||
+ | switch (mw.config.get('wgPageName')) { | ||
+ | case 'Special:Contact': | ||
+ | case 'Spécial:Contact': | ||
+ | placeholderMessage = 'Leave it empty or add e-mail in message (mfn-berlin.de works only)'; | ||
+ | warningMessageDoesNotWork = 'Only mfn-berlin.de addresses do work. Leave it empty please and add your address in the message. Thank you.'; | ||
+ | break; | ||
+ | case "Spezial:Kontakt": | ||
+ | placeholderMessage = 'E-Mail in Nachricht dazu oder leer lassen (nur mfn-berlin.de geht)'; | ||
+ | warningMessageDoesNotWork = 'Nur mfn-berlin.de Adressen können verarbeitet werden. Bitte leer lassen oder E-Mail im Text angeben. Danke.'; | ||
+ | break; | ||
+ | default: | ||
+ | placeholderMessage = 'Leave it empty or add e-mail in message (mfn-berlin.de works only)'; | ||
+ | warningMessageDoesNotWork = 'Only mfn-berlin.de addresses do work. Leave it empty please and add your address in the message. Thank you.'; | ||
+ | break; | ||
+ | } | ||
+ | // check input | ||
+ | if (!$('input[name="wpFromAddress"]').val() || $('input[name="wpFromAddress"]').val().match(/.*@mfn-berlin.de/)) { | ||
+ | $('input[name="wpFromAddress"]') | ||
+ | .css({'background-color': '', 'cursor': ''}) | ||
+ | .attr({'title': ''}); | ||
+ | } else { | ||
+ | $('input[name="wpFromAddress"]') | ||
+ | .css({'background-color': 'orange', 'cursor': 'help'}) | ||
+ | .attr({'title': warningMessageDoesNotWork}); | ||
+ | } | ||
+ | $('input[name="wpFromAddress"]').on('focusout', function () { | ||
+ | if (!$(this).val() || $(this).val().match(/.*@mfn-berlin.de/)) { | ||
+ | $(this).css({'background-color': '', 'cursor': 'help'}).attr({'title': warningMessageDoesNotWork}); | ||
+ | } else { | ||
+ | $(this).css({'background-color': 'orange', 'cursor': 'help'}).attr({'title': warningMessageDoesNotWork}); | ||
+ | } | ||
+ | }); | ||
+ | $('input[name="wpFromAddress"]').attr({'placeholder': placeholderMessage}); | ||
+ | |||
+ | break; | ||
+ | }// switch is a contact page | ||
+ | };// end prepareSpecialContact4Info() | ||
+ | |||
+ | |||
+ | /////////////////////// | ||
+ | // specific to http://offene-naturfuehrer.de | ||
+ | // Page-specific scripts: | ||
+ | switch (mw.config.get( 'wgPageName' )) { // Minimize the pages on which the code will be loaded | ||
+ | // vielleicht später auch woanders, d.h. als vorgewählte Suche auf Taxaseiten beispielsweise? | ||
+ | case 'Datenquellen': | ||
+ | case 'Hilfe:Datenquellen': | ||
+ | case 'Online-Überprüfung_von_Bestimmungen': | ||
+ | case 'Hilfe:Online-Überprüfung_von_Bestimmungen': | ||
+ | case 'Tipps_zur_Bildersuche': | ||
+ | case 'Hilfe:Tipps_zur_Bildersuche': | ||
+ | |||
+ | case 'Spezial:Suche': | ||
+ | mw.loader.load( '/w/index.php?title=MediaWiki:SearchTools.js&action=raw&ctype=text/javascript' ); | ||
+ | break; | ||
+ | case 'Hilfe:Nummerierungen_im_jKey_abändern_(Lead_Nummern)': | ||
+ | mw.loader.load( '/w/index.php?title=MediaWiki:JKeyRenumberingTool.js&action=raw&ctype=text/javascript' ); | ||
+ | break; | ||
+ | case 'Hilfe:Konvertierung_geschachtelt-eingerückter_Schlüssel_in_das_ON-Format': | ||
+ | case 'Testseite': | ||
+ | mw.loader.load( '/w/index.php?title=MediaWiki:JKeyTextToLeadTemplateTool.js&action=raw&ctype=text/javascript' );; | ||
+ | break; | ||
+ | } | ||
+ | |||
+ | // Page-specific scripts more flexible: | ||
+ | if (mw.config.get('wgPageName').match(/^Basismerkmale_für/i) | ||
+ | || mw.config.get('wgPageName').match(/^Vorlage:Character_State/i) | ||
+ | || mw.config.get('wgPageName').match(/^Vorlage:Character_Definition/i) | ||
+ | ) { | ||
+ | mw.loader.load( '/w/index.php?title=MediaWiki:ToolGetRandomId.js&action=raw&ctype=text/javascript' );; | ||
+ | } | ||
+ | |||
+ | /* | ||
+ | See also https://www.mediawiki.org/w/index.php?title=ResourceLoader/Legacy_JavaScript&oldid=2090764 | ||
+ | When document is completely loaded | ||
+ | */ | ||
+ | jQuery(document).ready(function($) { | ||
+ | reference_footnote_tooltips(); | ||
+ | initImageZooming(); | ||
+ | initTargetHighlighting(); // page-internal jumps | ||
+ | initmoveTOC(); // TOC CSS position fixed or static | ||
+ | initTOCautocollapse(); // auto collapse on #toc-autocollapse e.g. Template:Artinformation BiolFlor | ||
+ | prepareSpecialContact4Info(); // check from-Email at Special:Contact | ||
+ | // specific to http://offene-naturfuehrer.de | ||
+ | initTableFilterSort(); // tests internally whether table with corresponding classes exist | ||
+ | mw.loader.load( mw.config.get('wgScript') + '?title=MediaWiki:AddNewOpenMediaFileVersion.js&action=raw&ctype=text/javascript' );;// namespace specific button on top to upload file at OpenMedia | ||
+ | if(mw.config.get( 'wgAction' )==='view') { | ||
+ | if($('.decisiontree').length !== 0) { | ||
+ | mw.loader.load( mw.config.get('wgScript') + '?title=MediaWiki:JKeyRenderLanguageTaggedText2wgUserLanguage.js&action=raw&ctype=text/javascript' );; | ||
+ | } | ||
+ | } | ||
+ | switch(mw.config.get( 'wgAction' )) { | ||
+ | case 'edit': | ||
+ | case 'view': | ||
+ | /* case 'submit': does not work somehow in MW. 1.20.7 */ | ||
+ | init_character_ui_tabs(); | ||
+ | } | ||
+ | // page specific | ||
+ | if(mw.config.get( 'wgAction' )==='formedit' | ||
+ | || mw.config.get( 'wgCanonicalSpecialPageName' )==='FormEdit'){ | ||
+ | // initConfirmDeleteSubform(); | ||
+ | markHiddenFormFields(); | ||
+ | initUiTabsInForms(); | ||
+ | } | ||
+ | initCluetips(); | ||
+ | // specific to http://offene-naturfuehrer.de | ||
+ | initCollapseBox(); //collapsible parts | ||
+ | }); // end $(document).ready() | ||
+ | // </syntaxhighlight> |
Revision as of 21:08, 21 November 2018
$(function() {
importScriptURI('https://arbiterit.com/MediaWiki:SortTableFilter.js');
});
$(function() {
importScriptURI('https://arbiterit.com/MediaWiki:Sortabletable.js');
});
$(function() {
importScriptURI('https://arbiterit.com/MediaWiki:Sortabletable.js');
});
///////////////////////
// Table Filter/Sort //
///////////////////////
/**
* @description Table Filter/Sort
* TODO ?replace by jQuery plugin datatable?
*
* @requires $.resource()
* @requires $.jI18n.en
* @returns {undefined}
*/
window.initTableFilterSort = function (){ // see MediaWiki:SortTableFilter.js
/* Note: problem is auto-inserted <tbody></tbody> by the browser: must be removed and
replaced by thead + tbody. jQuery.unwrap() was not successful */
// add possibly more classes from http://www.javascripttoolbox.com/lib/table/documentation.php
// Note: only applies to non-nested tables
var jAutotables = $('table.table-autosort, table.table-autofilter, table-autostripe,table-sorted-asc,table-sorted-desc, table-filtered');
if (jAutotables.length) {
// Note: in MediaWiki:SortTableFilter.js 'SortTableFilter_InputFilterTitle' was not recognized
$.extend(true, $.jI18n, {
en: {
SortTableFilter_AutoSortTitle : 'Click to sort',
SortTableFilter_FilterAllLabel: 'Filter: All',
SortTableFilter_InputFilterTitle: 'Filter text (case sensitive, uses reg. expressions)'
},
de: {
SortTableFilter_AutoSortTitle : 'Zum Sortieren klicken',
SortTableFilter_FilterAllLabel: 'Zeige: alle',
SortTableFilter_InputFilterTitle: 'Text filtern (GROß/klein!, nutzt reg. Ausdrücke)'
}
});
// get sortable/filterable here already otherwise multiple th-filters
$.getScript(mw.config.get( 'wgServer' ) + mw.config.get( 'wgScript' ) + '?title=MediaWiki:SortTableFilter.js&action=raw&ctype=text/javascript',
function(){return true;});
// modify tables to introduce thead structure
jAutotables.each(function(index){ //TODO simplify code? if()…
// There may or may not be a tbody around tr. NOTE: $.unwrap() does not work here!
// Memo: find('tr th') finds th, .parent() retrieves tr! .wrapAll will wrap inside DOM, not in return value! .detach() returns detached
// OK in FF 3.6 and IE 7-8, not in IE6 (like the old code)
// FURTHER WORK: Ideally, all normal tr td should remain in a tbody.
var jThis = $(this),
jThead = jThis.find('tr th').parent().detach(),
jTfoot = jThis.find('tr[class=tfoot] td').parent().detach(),// remove it from the DOM
jTbody = jThis.find('tbody:first');
if (jTbody.length===0) {
jThis.children().wrapAll('<tbody/>');
jTbody = jThis.find('tbody:first');
}
jTbody.before($('<thead/>').append(jThead));
if (jTfoot.length) {
jTbody.after($('<tfoot/>').append(jTfoot));
}
// th with class="input" gives an input field instead of selections
$(this).find('th[class=input]').append('<input name="filter" title="'+$.resource('SortTableFilter_InputFilterTitle')+'" size="8" onkeyup="Table.filter(this,this)">');
});// end each()
} // END if any autotable
};
/**
* @description: Collapse the TOC using id="toc-autocollapse"
* @returns {undefined}
*/
window.initTOCautocollapse = function () {
if ($('#toc-autocollapse').length) {
$('#togglelink').click();
}
};// end initTOCautocollapse()
/**
* Add a placeholder message and checks on Special:Contact
*
* Due to e-mail configurations all non @mfn-berlin.de addresses fail to work
* as from-address on Special:Contact. This functions adds a placeholder and checks the
* user’s input
* @requires extension:ContactPage
* @requires mw.config
* @requires jQuery
*/
window.prepareSpecialContact4Info = function () {
var placeholderMessage = '', warningMessageDoesNotWork = '';
switch (mw.config.get( 'wgCanonicalSpecialPageName' )) {
case 'Contact': // is a Special:Contact page regardless of language
switch (mw.config.get('wgPageName')) {
case 'Special:Contact':
case 'Spécial:Contact':
placeholderMessage = 'Leave it empty or add e-mail in message (mfn-berlin.de works only)';
warningMessageDoesNotWork = 'Only mfn-berlin.de addresses do work. Leave it empty please and add your address in the message. Thank you.';
break;
case "Spezial:Kontakt":
placeholderMessage = 'E-Mail in Nachricht dazu oder leer lassen (nur mfn-berlin.de geht)';
warningMessageDoesNotWork = 'Nur mfn-berlin.de Adressen können verarbeitet werden. Bitte leer lassen oder E-Mail im Text angeben. Danke.';
break;
default:
placeholderMessage = 'Leave it empty or add e-mail in message (mfn-berlin.de works only)';
warningMessageDoesNotWork = 'Only mfn-berlin.de addresses do work. Leave it empty please and add your address in the message. Thank you.';
break;
}
// check input
if (!$('input[name="wpFromAddress"]').val() || $('input[name="wpFromAddress"]').val().match(/.*@mfn-berlin.de/)) {
$('input[name="wpFromAddress"]')
.css({'background-color': '', 'cursor': ''})
.attr({'title': ''});
} else {
$('input[name="wpFromAddress"]')
.css({'background-color': 'orange', 'cursor': 'help'})
.attr({'title': warningMessageDoesNotWork});
}
$('input[name="wpFromAddress"]').on('focusout', function () {
if (!$(this).val() || $(this).val().match(/.*@mfn-berlin.de/)) {
$(this).css({'background-color': '', 'cursor': 'help'}).attr({'title': warningMessageDoesNotWork});
} else {
$(this).css({'background-color': 'orange', 'cursor': 'help'}).attr({'title': warningMessageDoesNotWork});
}
});
$('input[name="wpFromAddress"]').attr({'placeholder': placeholderMessage});
break;
}// switch is a contact page
};// end prepareSpecialContact4Info()
///////////////////////
// specific to http://offene-naturfuehrer.de
// Page-specific scripts:
switch (mw.config.get( 'wgPageName' )) { // Minimize the pages on which the code will be loaded
// vielleicht später auch woanders, d.h. als vorgewählte Suche auf Taxaseiten beispielsweise?
case 'Datenquellen':
case 'Hilfe:Datenquellen':
case 'Online-Überprüfung_von_Bestimmungen':
case 'Hilfe:Online-Überprüfung_von_Bestimmungen':
case 'Tipps_zur_Bildersuche':
case 'Hilfe:Tipps_zur_Bildersuche':
case 'Spezial:Suche':
mw.loader.load( '/w/index.php?title=MediaWiki:SearchTools.js&action=raw&ctype=text/javascript' );
break;
case 'Hilfe:Nummerierungen_im_jKey_abändern_(Lead_Nummern)':
mw.loader.load( '/w/index.php?title=MediaWiki:JKeyRenumberingTool.js&action=raw&ctype=text/javascript' );
break;
case 'Hilfe:Konvertierung_geschachtelt-eingerückter_Schlüssel_in_das_ON-Format':
case 'Testseite':
mw.loader.load( '/w/index.php?title=MediaWiki:JKeyTextToLeadTemplateTool.js&action=raw&ctype=text/javascript' );;
break;
}
// Page-specific scripts more flexible:
if (mw.config.get('wgPageName').match(/^Basismerkmale_für/i)
|| mw.config.get('wgPageName').match(/^Vorlage:Character_State/i)
|| mw.config.get('wgPageName').match(/^Vorlage:Character_Definition/i)
) {
mw.loader.load( '/w/index.php?title=MediaWiki:ToolGetRandomId.js&action=raw&ctype=text/javascript' );;
}
/*
See also https://www.mediawiki.org/w/index.php?title=ResourceLoader/Legacy_JavaScript&oldid=2090764
When document is completely loaded
*/
jQuery(document).ready(function($) {
reference_footnote_tooltips();
initImageZooming();
initTargetHighlighting(); // page-internal jumps
initmoveTOC(); // TOC CSS position fixed or static
initTOCautocollapse(); // auto collapse on #toc-autocollapse e.g. Template:Artinformation BiolFlor
prepareSpecialContact4Info(); // check from-Email at Special:Contact
// specific to http://offene-naturfuehrer.de
initTableFilterSort(); // tests internally whether table with corresponding classes exist
mw.loader.load( mw.config.get('wgScript') + '?title=MediaWiki:AddNewOpenMediaFileVersion.js&action=raw&ctype=text/javascript' );;// namespace specific button on top to upload file at OpenMedia
if(mw.config.get( 'wgAction' )==='view') {
if($('.decisiontree').length !== 0) {
mw.loader.load( mw.config.get('wgScript') + '?title=MediaWiki:JKeyRenderLanguageTaggedText2wgUserLanguage.js&action=raw&ctype=text/javascript' );;
}
}
switch(mw.config.get( 'wgAction' )) {
case 'edit':
case 'view':
/* case 'submit': does not work somehow in MW. 1.20.7 */
init_character_ui_tabs();
}
// page specific
if(mw.config.get( 'wgAction' )==='formedit'
|| mw.config.get( 'wgCanonicalSpecialPageName' )==='FormEdit'){
// initConfirmDeleteSubform();
markHiddenFormFields();
initUiTabsInForms();
}
initCluetips();
// specific to http://offene-naturfuehrer.de
initCollapseBox(); //collapsible parts
}); // end $(document).ready()
// </syntaxhighlight>