MediaWiki:Gadget-edit-form-automator.js
Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.
- Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
- Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
- Internet Explorer / Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5
- Opera: Naciśnij klawisze Ctrl+F5.
EAutomator = {
/*
* Zwraca kody wersji językowej z aktywnej sekcji + domyślnych
*/
getActiveLangs: function () {
var ret = EConstants.USED_WIKTIONARIES.slice( 0 ),
act = EUtil.getActiveLangCode();
if (
ret.indexOf( act ) === -1 &&
act !== 'pl' &&
EConstants.ALL_WIKTIONARIES.indexOf( act ) !== -1
) {
ret.push( act );
}
return ret;
},
/*
* Zwraca kody wszystkich wersji językowych z sekcji + domyślnych
*/
getAllLangs: function () {
var id, code,
ret = EConstants.USED_WIKTIONARIES.slice( 0 );
for ( id in Ed.content.sections ) {
if ( Ed.content.sections.hasOwnProperty( id ) ) {
code = Ed.content.sections[ id ].code;
if ( code !== undefined ) {
code = code.replace( /-.*/, '' );
if (
code.length > 1 &&
code.length < 7 &&
code !== 'pl' &&
ret.indexOf( code ) === -1
) {
ret.push( code );
}
}
}
}
return $.grep( ret, function ( val ) {
return ( EConstants.ALL_WIKTIONARIES.indexOf( val ) !== -1 );
} );
},
getInterwikiLangs: function () {
var arr, el, res = [],
str = $( '#ed_0000_' ).val(),
re = /\[\[(\w+):.*?\]\]/g;
while ( ( arr = re.exec( str ) ) !== null ) {
el = $.trim( arr[ 1 ] );
if (
el &&
( el !== 'simple' || EUtil.getActiveLangCode() === 'en' )
) {
res.push( el );
}
//TODO sortuj wg wielkości projektu
}
return res;
},
getActiveAndInterwikiLangs: function () {
return $.merge(
EAutomator.getActiveLangs(),
EAutomator.getInterwikiLangs().slice( 0, 50 )
);
},
getIPA: function () {
var query, queries = [];
query = {
titles: mw.config.get( 'wgTitle' ),
prop: 'revisions',
rvprop: 'content',
rvslots: 'main'
};
$.each( EAutomator.getActiveAndInterwikiLangs(), function ( _, lang ) {
queries.push( {
data: query,
external: {
lang: lang
}
} );
} );
return EApi.process( queries, EAutomator.getIPARe );
},
getIPARe: function () {
var ipas = {},
error = EStr.NO_IPA_FOUND;
$.each( arguments, function () {
var lang,
res = this[ 0 ];
if (
res.query === undefined ||
res.query.pages === undefined
) {
return false;
}
lang = res.query.general.lang;
$.each( res.query.pages, function ( j, val ) {
var content, ipa;
if (
j === '-1' ||
!val.revisions ||
!val.revisions[ 0 ]
) {
return false;
}
content = val.revisions[ 0 ].slots.main.content;
ipa = EAutomator.extractIPA( content, lang );
if ( ipa !== undefined && ipa.length ) {
ipas[ lang ] = ipa;
error = undefined;
}
} );
} );
EApi.display( EConstants.MODE_IPA, ipas, 'wymowa', error );
},
extractFirstArgsFromTemplates: function ( str, template, lang ) {
var arr, el, results = [],
re = new RegExp( '\\{\\{' + template + '\\s*\\|\\s*([^\\{\\}\\|<=]+)[\\}\\|<]', 'gi' );
$.each( EParser.getSections( str, lang ), function () {
while ( ( arr = re.exec( this.content ) ) !== null ) {
el = $.trim( arr[ 1 ] );
if (
el &&
EConstants.FORBIDDEN_IPA_CONTENT.indexOf( el ) === -1 &&
results.indexOf( el ) === -1
) {
results.push( {
ipa: el,
header: this.title
} );
}
}
} );
return results;
},
extractSecondArgsFromTemplates: function ( str, template, lang ) {
var arr, el, results = [],
re = new RegExp( '\\{\\{' + template + '\\s*\\|\\s*([^\\{\\}\\|]*)\\|\\s*[\\/\\]]?([^\\{\\}\\/\\|<=]+)[\\}\\|\\/<\\]]', 'gi' );
$.each( EParser.getSections( str, lang ), function () {
while ( ( arr = re.exec( this.content ) ) !== null ) {
el = $.trim( arr[ 2 ] );
if (
el &&
EConstants.FORBIDDEN_IPA_CONTENT.indexOf( el ) === -1 &&
results.indexOf( el ) === -1
) {
results.push( {
ipa: el,
header: this.title
} );
}
}
} );
return results;
},
extractAllArgsFromTemplates: function ( str, template, lang ) {
var arr, el, params, i, results = [],
re = new RegExp( '\\{\\{' + template + '\\s*\\|\\s*([^\\{\\}]*)\\}\\}', 'gi' );
$.each( EParser.getSections( str, lang ), function () {
while ( ( arr = re.exec( this.content ) ) !== null ) {
params = arr[ 1 ].split( '|' );
for ( i = 0; i < params.length; i += 1 ) {
el = $.trim( params[ i ].replace( /^.*?=/, '' ) );
if (
el &&
EConstants.FORBIDDEN_IPA_CONTENT.indexOf( el ) === -1 &&
results.indexOf( el ) === -1
) {
results.push( {
ipa: el,
header: this.title
} );
}
}
}
} );
return results;
},
extractIPA: function ( str, lang ) {
switch ( lang ) {
case 'en':
case 'cs':
case 'sk':
case 'it':
case 'af':
case 'ko':
case 'nl':
case 'co':
case 'vi':
case 'simple':
case 'ga':
case 'is':
case 'li':
case 'lv':
case 'no':
case 'sl':
case 'ja':
return EAutomator.extractFirstArgsFromTemplates( str, 'IPA', lang );
case 'fr':
case 'mg':
case 'oc':
return EAutomator.extractFirstArgsFromTemplates( str, 'pron', lang );
case 'de':
return EAutomator.extractFirstArgsFromTemplates( str, 'Lautschrift', lang );
case 'es':
return EAutomator.extractAllArgsFromTemplates( str, 'pronunciación', lang );
case 'ca':
return EAutomator.extractSecondArgsFromTemplates( str, 'pron', lang );
case 'ro':
return EAutomator.extractFirstArgsFromTemplates( str, 'AFI', lang );
case 'et':
return EAutomator.extractFirstArgsFromTemplates( str, 'hääldus', lang );
case 'el':
return EAutomator.extractFirstArgsFromTemplates( str, 'ΔΦΑ', lang );
case 'eo':
return EAutomator.extractFirstArgsFromTemplates( str, 'IFA', lang );
case 'tl':
return EAutomator.extractFirstArgsFromTemplates( str, 'API', lang );
case 'ru':
return EAutomator.extractIPA_ru( str );
default:
return [];
}
},
extractIPA_ru: function ( str ) {
var arr, el,
results = EAutomator.extractFirstArgsFromTemplates( str, 'transcription', 'ru' ),
re = /\{\{transcriptions\s*\|\s*([^\}\|]*)\s*\|\s*([^\}\|]*)\s*\}\}/g;
$.each( EParser.getSections( str, 'ru' ), function () {
while ( ( arr = re.exec( this.content ) ) !== null ) {
el = $.trim( arr[ 1 ] );
if (
el &&
EConstants.FORBIDDEN_IPA_CONTENT.indexOf( el ) === -1 &&
results.indexOf( el ) === -1
) {
results.push( {
ipa: el,
header: this.title
} );
}
el = $.trim( arr[ 2 ] );
if (
el &&
EConstants.FORBIDDEN_IPA_CONTENT.indexOf( el ) === -1 &&
results.indexOf( el ) === -1
) {
results.push( {
ipa: el,
header: this.title
} );
}
}
} );
return results;
},
addTransliteration: function ( sectionName, sectionCode ) {
var textarea = $( '#ed_' + sectionName + '_transliteracja' );
if ( EConstants.TRANSLIT_SUPPORTED.indexOf( sectionCode ) === -1 ) {
return;
}
if ( textarea.val() ) {
return;
}
textarea.val( '{' + '{translit|' + sectionCode + '}}' );
},
getPicture: function () {
var query, queries = [];
query = {
titles: mw.config.get( 'wgTitle' ),
prop: 'revisions',
rvprop: 'content',
rvslots: 'main'
};
$.each( EAutomator.getActiveAndInterwikiLangs(), function ( _, lang ) {
queries.push( {
data: query,
external: {
lang: lang
}
} );
} );
return EApi.process( queries, EAutomator.getPictureRe );
},
getPictureRe: function () {
var pics = {},
error = EStr.NO_PICTURE_FOUND;
$.each( arguments, function () {
var lang,
res = this[ 0 ];
if (
res.query === undefined ||
res.query.pages === undefined
) {
return false;
}
lang = res.query.general.lang;
$.each( res.query.pages, function ( j, val ) {
var content, pic;
if (
j === '-1' ||
!val.revisions ||
!val.revisions[ 0 ]
) {
return false;
}
content = val.revisions[ 0 ].slots.main.content;
pic = EAutomator.extractPicture( content );
if ( pic !== undefined && pic.length ) {
pics[ lang ] = pic;
error = undefined;
}
} );
} );
EApi.display( EConstants.MODE_PICTURE, pics, '', error );
EAutomator.getPictureUrls( pics ).done( EPrinter.setPictureTooltips );
},
extractPicture: function ( str ) {
var arr, el, results = [],
re = /[:=\|]([^\|\]:=]+?\.(jpg|png|gif|svg))/gi;
while ( ( arr = re.exec( str ) ) !== null ) {
el = $.trim( arr[ 1 ] ).replace( /_/g, ' ' );
if ( el && results.indexOf( el ) === -1 ) {
el = el.charAt( 0 ).toUpperCase() + el.substr( 1 );
results.push( el );
}
}
return results;
},
imageCache: {},
getPictureUrls: function ( results ) {
var allImages = [],
query;
$.each( results, function () {
$.each( this, function () {
if ( this && allImages.indexOf( this ) === -1 ) {
allImages.push( 'File:' + this );
}
} );
} );
query = {
data: {
titles: allImages,
prop: 'imageinfo',
iiprop: 'url',
iiurlwidth: 150,
iiurlheight: 150
},
external: {
project: EConstants.WIKIMEDIA
}
};
return EApi.process( query, EAutomator.getPictureUrlsRe );
},
getPictureUrlsRe: function ( results ) {
if (
!results ||
!results.query ||
!results.query.pages
) {
return false;
}
$.each( results.query.pages, function () {
var loader;
if ( !this.imageinfo || !this.imageinfo[ 0 ] ) {
return true;
}
EAutomator.imageCache[ this.title ] = '<img src="' + this.imageinfo[ 0 ].thumburl + '"/>';
loader = $( EAutomator.imageCache[ this.title ] );
} );
},
getAudio: function () {
var code, lang, query, titles = [], queries = [];
query = {
titles: mw.config.get( 'wgTitle' ),
prop: 'revisions',
rvprop: 'content',
rvslots: 'main'
};
$.each( EAutomator.getActiveAndInterwikiLangs(), function ( _, lang ) {
queries.push( {
data: query,
external: {
lang: lang
}
} );
} );
code = EUtil.getActiveLangCode();
lang = code.charAt( 0 ).toUpperCase() + code.slice( 1 );
titles.push( 'File:' + lang + '-' + mw.config.get( 'wgTitle' ) + '.ogg' );
if ( lang === 'En' ) {
titles.push(
'File:' + lang + '-uk-' + mw.config.get( 'wgTitle' ) + '.ogg',
'File:' + lang + '-us-' + mw.config.get( 'wgTitle' ) + '.ogg',
'File:' + lang + '-au-' + mw.config.get( 'wgTitle' ) + '.ogg'
);
}
if ( lang === 'De' ) {
titles.push( 'File:' + lang + '-at-' + mw.config.get( 'wgTitle' ) + '.ogg' );
}
queries.push( {
data: {
titles: titles,
prop: 'info'
},
external: {
project: EConstants.WIKIMEDIA
}
} );
return EApi.process( queries, EAutomator.getAudioRe );
},
getAudioRe: function () {
var oggs = {},
error = EStr.NO_AUDIO_FOUND;
$.each( arguments, function () {
var lang,
res = this[ 0 ];
if (
res.query === undefined ||
res.query.pages === undefined
) {
return false;
}
lang = res.query.general.lang;
$.each( res.query.pages, function ( j, val ) {
var content, ogg;
if ( j === '-1' ) {
return false;
}
if ( res.query.general.wikiid === 'commonswiki' ) {
ogg = val.title.replace( /^File:/, '' );
if ( oggs.commons === undefined ) {
oggs.commons = [];
}
oggs.commons.push( ogg );
error = undefined;
} else {
if ( !val.revisions || !val.revisions[ 0 ] ) {
return false;
}
content = val.revisions[ 0 ].slots.main.content;
ogg = EAutomator.extractAudio( content );
if ( ogg !== undefined && ogg.length ) {
oggs[ lang ] = ogg;
error = undefined;
}
}
} );
} );
EApi.display( EConstants.MODE_AUDIO, oggs, 'wymowa', error );
},
extractAudio: function ( str ) {
var arr, el, results = [],
re = /[\|:=]([^\|\]:=]+?\.ogg)/gi;
while ( ( arr = re.exec( str ) ) !== null ) {
el = $.trim( arr[ 1 ] ).replace( /_/g, ' ' );
if ( el && results.indexOf( el ) === -1 ) {
el = el.charAt( 0 ).toUpperCase() + el.substr( 1 );
results.push( el );
}
}
return results;
},
getInternalExample: function () {
var query;
query = {
generator: 'backlinks',
gbltitle: mw.config.get( 'wgTitle' ),
gbllimit: 50,
gblnamespace: 0,
prop: 'revisions',
rvprop: 'content',
rvslots: 'main'
};
return EApi.process( query, EAutomator.getInternalExampleRe );
},
getInternalExampleRe: function ( result ) {
var examples = {},
error = EStr.NO_INTERNAL_EXAMPLE_FOUND,
re = new RegExp( "^:\\s*\\(\\d+\\.\\d+\\)\\s*('*[^\\n]*\\[\\[" + mw.config.get( 'wgTitle' ) + "[\\|\\]][^\\n]*)", 'm' ),
code = EUtil.getActiveLangCode(),
delim = code === 'pl'
? "''"
: '';
if (
result &&
result.query &&
result.query.pages
) {
$.each( result.query.pages, function () {
var content, ex, arr;
if ( this.title === mw.config.get( 'wgTitle' ) ) {
return true;
}
content = EParser.extractSubsections(
this.revisions[ 0 ].slots.main.content,
'przykłady',
code === 'pl' ? null : code
);
if ( ( arr = re.exec( content ) ) !== null ) {
if ( code === 'pl' ) {
ex = arr[ 1 ].replace( /(.*→\s*|'''?)/g, '' );
ex = ( re.exec( ": (1.1) ''" + ex ) === null ) ? null : ex;
} else {
ex = arr[ 1 ].replace( /'''/g, '' );
}
if ( ex ) {
examples[ this.title ] = delim + $.trim( ex ) + delim;
error = undefined;
}
}
} );
}
EApi.display( EConstants.MODE_INTERNAL_EXAMPLE, examples, 'przykłady', error );
}
};