User:Arkanosis/iKiwi.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
Documentation for this user script can be added at User:Arkanosis/iKiwi. |
/*
***************************************************************************
** iKiwi - Permet de récupérer des interwikis sur d'autres Wikipédia
** Compatibilité : {de,en,es,fr,it,ja,nl,pl,pt,ru,sv}wiki
** Support : Discussion_utilisateur:Arkanosis
** Licence : MIT/X11
**
** Installation : ajouter
** importScript('User:Arkanosis/iKiwi.js');
** dans le monobook.js ou vector.js de toutes les Wikipédia d'où et dans lesquelles
** on souhaite pouvoir récupérer des interwikis
** (important : si l'ajout n'est pas fait sur d'autres Wikipédia, le script ne
** fonctionnera pas)
*/
iKiwiVersion = '0.5.0a';
var iKiwiDefaultDistantWiki = 'en';
if (typeof (iKiwiDistantWikis) == 'undefined')
var iKiwiDistantWikis = ['de', 'en', 'es', 'fr', 'it', 'ja', 'nl', 'pl', 'pt', 'ru', 'sv'];
else
{
iKiwiDefaultDistantWiki = iKiwiDistantWikis[0];
}
if (iKiwiDistantWikis.indexOf(wgContentLanguage) != -1)
{
iKiwiDistantWikis[iKiwiDistantWikis.indexOf(wgContentLanguage)] = iKiwiDistantWikis[iKiwiDistantWikis.length - 1];
iKiwiDistantWikis.pop();
}
iKiwiDistantWikis.sort();
if (typeof (iKiwiWatchMain) == 'undefined')
var iKiwiWatchMain = false;
if (typeof (iKiwiWatchOthers) == 'undefined')
var iKiwiWatchOthers = false;
if (typeof (iKiwiDisplayPanel) == 'undefined')
var iKiwiDisplayPanel = true;
var iKiwiInterWiki = new RegExp('^\\s*\\[\\[([a-z][a-z].?(x?-[^\\]]+)?|simple|tokipona):([^\\]]*)\\]\\]\\s*$');
var iKiwiBlank = new RegExp('^\\s*$');
var iKiwiHtmlInterWiki = new RegExp('<a href="/wiki/([^"]+)" title="([^"]+)">fr:([^<]+)</a>');
var iKiwiRedirect = new RegExp('^\\s*#(?:redirect|redirection|omdirigering|перенаправление|перенапр|redirecionamento|patrz|przekieruj|tam|doorverwijzing|転送|リダイレクト|転送|リダイレクト|rinvia|rinvio|rimando|redirección|redireccion|weiterleitung)\\s*\\[\\[([^\\]\\#]+)\\]\\]', 'i');
var iKiwiPanelNextState = 0;
var iKiwiStates = [ 'none', 'block' ];
var iKiwiI18nText = {
'de': {
'usertalk': 'Benutzer_Diskussion',
'redirectfrom': 'Weitergeleitet von',
'alreadylinked': 'Der remote Artikel ist bereits im Zusammenhang mit',
'nomoreiw': 'Es gibt kein interWiki mehr zu hinzufügen',
'noarticle': 'Es gibt kein Artikel mit diesem Name',
'extpage': 'Remote Artikel:',
'panel': 'Die interWiki aus einer anderen Version des Artikels hinzufügen',
'autopreview': 'auto Vorschau',
'adding': 'Adding',
'from': 'von',
'iwadded': 'interWiki',
'iwsadded': 'interWikis',
'follow': 'Diese Seite beobachten',
'preview': 'Vorschau zeigen',
'publish': 'Seite speichern',
},
'en': {
'usertalk': 'User_talk',
'redirectfrom': 'Redirected from',
'alreadylinked': 'The remote article is already linked to ',
'twolocallinks': 'The local article is linked twice to ',
'twodistantlinks': 'The distant article is linked twice to ',
'twolinks': 'The local article and the distant article have different links to ',
'nomoreiw': 'There is no additional interWiki to add',
'noarticle': 'There is no article with this name',
'extpage': 'Remote article:',
'panel': 'Get the interWikis from another version of the article',
'autopreview': 'auto preview',
'adding': 'Adding',
'from': 'from',
'iwadded': 'interWiki',
'iwsadded': 'interWikis',
'follow': 'Watch this page',
'preview': 'Show preview',
'publish': 'Save page',
},
'es': {
'usertalk': 'Usuario_Discusión',
'redirectfrom': 'Redirigido desde',
'from': 'desde',
'follow': 'Vigilar esta página',
'preview': 'Mostrar previsualización',
'publish': 'Grabar la página',
},
'fr': {
'usertalk': 'Discussion_utilisateur',
'redirectfrom': 'Redirigé depuis',
'alreadylinked': 'L\'article distant est déjà lié à l\'article',
'twolocallinks': 'L\'article local est lié deux fois à ',
'twodistantlinks': 'L\'article distant est lié deux fois à ',
'twolinks': 'L\'article local et l\'article distant ont des liens différents vers ',
'nomoreiw': 'Il n\'y a pas d\'interWiki supplémentaire à ajouter',
'noarticle': 'Il n\'y a pas d\'article avec ce nom',
'extpage': 'Page d\'où récupérer les interWikis :',
'panel': 'Rapatrier les interWikis d\'une autre version de l\'article',
'autopreview': 'aperçu automatique',
'adding': 'Ajout de',
'from': 'depuis',
'iwadded': 'interWiki rapatrié',
'iwsadded': 'interWikis rapatriés',
'follow': 'Suivre cette page',
'preview': 'Prévisualiser',
'publish': 'Publier',
},
'it': {
'usertalk': 'Discussioni_utente',
'redirectfrom': 'Reindirizzamento da',
'from': 'da',
'follow': 'Tieni d\'occhio questa pagina',
'preview': 'Visualizza anteprima',
'publish': 'Salva la pagina',
},
'ja': {
'usertalk': '利用者‐会話',
'redirectfrom': 'から転送',
'follow': 'ウォッチリストに追加',
'preview': 'プレビューを表示',
'publish': '編集を保存',
},
'nl': {
'usertalk': 'Overleg gebruiker',
'redirectfrom': 'Doorverwezen vanaf',
'from': 'vanaf',
'follow': 'Deze pagina volgen',
'preview': 'Toon bewerking ter controle',
'publish': 'Pagina opslaan',
},
'pl': {
'usertalk': 'Dyskusja wikipedysty',
'redirectfrom': 'Przekierowano z',
'from': 'z',
'follow': 'Obserwuj',
'preview': 'Pokaż podgląd',
'publish': 'Zapisz',
},
'pt': {
'usertalk': 'Usuário_Discussão',
'redirectfrom': 'Redireccionado de',
'from': 'de',
'follow': 'Vigiar esta página',
'preview': 'Mostrar previsão',
'publish': 'Gravar página',
},
'ru': {
'usertalk': 'Обсуждение_участника',
'redirectfrom': 'Перенаправлено с',
'from': 'c',
'follow': 'Включить эту страницу в список наблюдения',
'preview': 'Предварительный просмотр',
'publish': 'Записать страницу',
},
'sv': {
'usertalk': 'Användardiskussion',
'redirectfrom': 'Omdirigerad från',
'from': 'från',
'follow': 'Bevaka denna sida',
'preview': 'Visa förhandsgranskning',
'publish': 'Spara',
},
};
function iKiwiI18n(lang, message)
{
if (typeof (iKiwiI18nText[lang]) == 'undefined')
lang = 'en';
if (typeof (iKiwiI18nText[lang][message]) == 'undefined')
return iKiwiI18nText['en'][message];
return iKiwiI18nText[lang][message];
}
var iKiwiDocPage = iKiwiI18n(wgContentLanguage, 'usertalk') + ':Arkanosis/iKiwi.js';
function iKiwiNormalize(string)
{
return string
.replace(/[àáâãäåą]/g, 'a')
.replace(/[æ]/g, 'ae')
.replace(/[çć]/g, 'c')
.replace(/[èéêëę]/g, 'e')
.replace(/[ìíîï]/g, 'i')
.replace(/[ł]/g, 'l')
.replace(/[ñ]/g, 'n')
.replace(/[òóôõöø]/g, 'o')
.replace(/[œ]/g, 'oe')
.replace(/[ś]/g, 's')
.replace(/[ß]/g, 'ss')
.replace(/[ùúûü]/g, 'u')
.replace(/[ýÿ]/g, 'y')
.replace(/[źż]/g, 'z')
.replace(/[ÀÁÂÃÄÅĄ]/g, 'A')
.replace(/[Æ]/g, 'AE')
.replace(/[ÇĆ]/g, 'C')
.replace(/[ÈÉÊËĘ]/g, 'E')
.replace(/[ÌÍÎÏ]/g, 'I')
.replace(/[Ł]/g, 'L')
.replace(/[Ñ]/g, 'N')
.replace(/[ÒÓÔÕÖØ]/g, 'O')
.replace(/[Œ]/g, 'OE')
.replace(/[Ś]/g, 'S')
.replace(/[ÙÚÛÜ]/g, 'U')
.replace(/[Ý]/g, 'Y')
.replace(/[ŹŻ]/g, 'Z');
}
var iKiwiTranslations =
[
{
'en': ['disambiguation'],
'fr': ['homonymie'],
},
{
'en': ['book', 'story'],
'fr': ['livre', 'roman', 'nouvelle']
},
{
'en': ['&', 'and'],
'fr': ['&', 'et'],
},
];
function iKiwiTranslate(from, to, string)
{
var translations = [string];
if (['de', 'es', 'fr', 'nl', 'pl', 'pt', 'sv'].indexOf(from) != -1 && ['en', 'it', 'ja', 'ru'].indexOf(to) != -1)
{
var normalizedString = iKiwiNormalize(string);
if (normalizedString != string)
translations.push(normalizedString);
}
if (/.*\(.+\)/.exec(string))
{
// TODO develop an heuristic: it should be better to have the versions without parenthesis at the end
translations.push(string.replace(/(\s|_)*\([^\)]+\)$/, ''));
if (translations.length == 3)
{
translations.push(translations[1].replace(/(\s|_)*\([^\)]+\)$/, ''));
if (translations[2] == translations[3])
translations.pop();
}
}
for (var translationItemId = 0; translationItemId < iKiwiTranslations.length; ++translationItemId)
{
var originalTokens = iKiwiTranslations[translationItemId][from];
var replacementTokens = iKiwiTranslations[translationItemId][to];
for (var originalTokenId = 0; originalTokenId < originalTokens.length; ++originalTokenId)
{
var originalToken = originalTokens[originalTokenId];
var newTranslations = translations.slice(0);
for (var currentTranslationId = 0; currentTranslationId < translations.length; ++currentTranslationId)
{
var currentTranslation = translations[currentTranslationId];
if (translations[currentTranslationId].indexOf(originalToken))
for (var replacementTokenId = 0; replacementTokenId < replacementTokens.length; ++replacementTokenId)
{
var replacementToken = replacementTokens[replacementTokenId];
if (originalToken != replacementToken)
{
var newTranslation = currentTranslation.replace(new RegExp('\\b' + originalToken.replace(/[.*+?|()\[\]{}\\]/g, '\\$&') + '\\b', 'g'), replacementToken);
if (newTranslations.indexOf(newTranslation) == -1)
newTranslations.push(newTranslation);
}
}
}
translations = newTranslations;
}
}
return translations.slice(1);
}
// Taken from http://meta.wikimedia.org/wiki/Interwiki_sorting_order
var iKiwiSpecialOrdered = [
'en', 'pl'
];
var iKiwiSpecialOrder = [
'ace', 'af', 'ak', 'als', 'am', 'ang', 'ab', 'ar', 'an', 'arc',
'roa-rup', 'frp', 'as', 'ast', 'gn', 'av', 'ay', 'az', 'bm', 'bn',
'zh-min-nan', 'nan', 'map-bms', 'ba', 'be', 'be-x-old', 'bh', 'bcl',
'bi', 'bar', 'bo', 'bs', 'br', 'bg', 'bxr', 'ca', 'cv', 'ceb', 'cs',
'ch', 'cbk-zam', 'ny', 'sn', 'tum', 'cho', 'co', 'cy', 'da', 'dk',
'pdc', 'de', 'dv', 'nv', 'dsb', 'dz', 'mh', 'et', 'el', 'eml', 'en',
'myv', 'es', 'eo', 'ext', 'eu', 'ee', 'fa', 'hif', 'fo', 'fr', 'fy',
'ff', 'fur', 'ga', 'gv', 'gd', 'gl', 'gan', 'ki', 'glk', 'gu',
'got', 'hak', 'xal', 'ko', 'ha', 'haw', 'hy', 'hi', 'ho', 'hsb',
'hr', 'io', 'ig', 'ilo', 'bpy', 'id', 'ia', 'ie', 'iu', 'ik', 'os',
'xh', 'zu', 'is', 'it', 'he', 'jv', 'kl', 'kn', 'kr', 'pam', 'ka',
'ks', 'csb', 'kk', 'kw', 'rw', 'ky', 'rn', 'sw', 'kv', 'kg', 'ht',
'ku', 'kj', 'lad', 'lbe', 'lo', 'la', 'lv', 'lb', 'lt', 'lij', 'li',
'ln', 'jbo', 'lg', 'lmo', 'hu', 'mk', 'mg', 'ml', 'mt', 'mi', 'mr',
'arz', 'mzn', 'ms', 'cdo', 'mwl', 'mdf', 'mo', 'mn', 'mus', 'my',
'nah', 'na', 'fj', 'nl', 'nds-nl', 'cr', 'ne', 'new', 'ja', 'nap',
'ce', 'pih', 'no', 'nb', 'nn', 'nrm', 'nov', 'ii', 'oc', 'mhr',
'or', 'om', 'ng', 'hz', 'uz', 'pa', 'pi', 'pag', 'pnb', 'pap', 'ps',
'km', 'pcd', 'pms', 'tpi', 'nds', 'pl', 'tokipona', 'tp', 'pnt',
'pt', 'aa', 'kaa', 'crh', 'ty', 'ksh', 'ro', 'rmy', 'rm', 'qu',
'ru', 'sah', 'se', 'sm', 'sa', 'sg', 'sc', 'sco', 'stq', 'st', 'tn',
'sq', 'scn', 'si', 'simple', 'sd', 'ss', 'sk', 'cu', 'sl', 'szl',
'so', 'ckb', 'srn', 'sr', 'sh', 'su', 'fi', 'sv', 'tl', 'ta', 'kab',
'roa-tara', 'tt', 'te', 'tet', 'th', 'ti', 'tg', 'to', 'chr', 'chy',
've', 'tr', 'tk', 'tw', 'udm', 'bug', 'uk', 'ur', 'ug', 'za', 'vec',
'vi', 'vo', 'fiu-vro', 'wa', 'zh-classical', 'vls', 'war', 'wo',
'wuu', 'ts', 'yi', 'yo', 'zh-yue', 'diq', 'zea', 'bat-smg', 'zh',
'zh-tw', 'zh-cn'
];
function iKiwiSpecialOrderCompare(first, second)
{
var firstInterWiki = iKiwiInterWiki.exec(first);
var secondInterWiki = iKiwiInterWiki.exec(second);
return iKiwiSpecialOrder.indexOf(firstInterWiki[1]) - iKiwiSpecialOrder.indexOf(secondInterWiki[1]);
}
function iKiwiDistantWiki()
{
return document.getElementById('iKiwiDistantWiki').value;
}
function iKiwiUrl(wiki, page)
{
return 'http://' + wiki + '.wikipedia.org' + wgScript + '?title=' + encodeURIComponent(page);
}
function iKiwiLocalUrl(page)
{
return iKiwiUrl(wgContentLanguage, page);
}
function iKiwiDistantUrl(page)
{
return iKiwiUrl(iKiwiDistantWiki(), page);
}
function iKiwiError(message)
{
document.getElementById('iKiwiExtPage').setAttribute('style', 'background-color:#D66;');
with (document.getElementById('iKiwiWarning'))
{
innerHTML = ' ' + message;
setAttribute('style', 'color:red;');
}
document.getElementById('iKiwiSubmit').setAttribute('disabled', 'disabled');
var textarea = document.getElementById('iKiwiText');
if (textarea)
{
textarea.setAttribute('style', 'display:none;');
document.getElementById('iKiwiDiff').setAttribute('style', 'display:none;');
}
}
function iKiwiExtractInterWikis(text)
{
var lines = text.split('\n');
var interWikis = new Array();
for (var lineId = 0; lineId < lines.length; ++lineId)
{
var interWiki = iKiwiInterWiki.exec(lines[lineId]);
if (interWiki)
interWikis.push(interWiki[0].replace(/^\s+/g, '').replace(/\s+$/g, '').replace(/_/g, ' '));
}
return interWikis;
}
function iKiwiRemoveInterWikis(text)
{
var lines = text.split('\n');
for (var lineId = lines.length - 1; lineId >= 0; --lineId)
if (!iKiwiInterWiki.exec(lines[lineId]) && !iKiwiBlank.exec(lines[lineId]))
return lines.slice(0, lineId + 1).join('\n');
}
function iKiwiXssRequest(url)
{
var xssFrame = document.getElementById('iKiwiXssFrame');
if (xssFrame)
xssFrame.setAttribute('src', url);
else
{
document.domain = 'wikipedia.org';
document.getElementsByTagName('body')[0].innerHTML += '<iframe id="iKiwiXssFrame" src="' + url + '" width="0px" height="0px"></iframe>';
}
}
function iKiwiXssServer()
{
document.domain = 'wikipedia.org';
var text = document.getElementById('wpTextbox1').value;
if (!text.length)
{
var destinationLanguage = /iKiwiDestinationLanguage=([^&]+)/.exec(location.href);
if (destinationLanguage)
{
var translations = iKiwiTranslate(destinationLanguage[1], wgContentLanguage, wgPageName);
for (var translationId = 0; translationId < translations.length; ++translationId)
{
var translation = translations[translationId];
var xhr = sajax_init_object();
xhr.open('GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' + encodeURIComponent(translation) + '&action=raw', false);
xhr.send('');
text = xhr.responseText;
if (text)
{
window.parent.iKiwiRedirectCallBack(translation);
break;
}
}
}
}
for (var nbFollowedRedirects = 0; nbFollowedRedirects < 10; ++nbFollowedRedirects) // avoid circular redirections
{
var redirect = iKiwiRedirect.exec(text);
if (!redirect)
break;
var xhr = sajax_init_object();
xhr.open('GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' + encodeURIComponent(redirect[1]) + '&action=raw', false);
xhr.send('');
text = xhr.responseText;
window.parent.iKiwiRedirectCallBack(redirect[1]);
}
if (text.length) {
window.parent.iKiwiAddInterWikisCallBack(text);
} else {
// TODO /w/api.php?action=query&list=search&srsearch=<SUBJECT>
window.parent.iKiwiSuggestCallBack();
}
}
function iKiwiGetForm()
{
var xhr = sajax_init_object();
xhr.open('GET', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' + encodeURIComponent(mw.config.get('wgPageName')) + '&action=edit', false);
xhr.send('');
var parser = new DOMParser();
return parser.parseFromString(xhr.responseText, 'application/xhtml+xml');
}
function iKiwiPostRequest(request, editForm, text, summary)
{
var inputs = editForm.getElementsByTagName('input');
for (inputId = 0; inputId < inputs.length; ++inputId)
switch (inputs[inputId].name)
{
case 'wpStarttime':
var wpStarttime = inputs[inputId].value;
break;
case 'wpEdittime':
var wpEdittime = inputs[inputId].value;
break;
case 'wpEditToken':
var wpEditToken = inputs[inputId].value;
break;
default:
break;
}
var parameters = 'wp' + request + '=1'
+ '&wpTextbox1=' + encodeURIComponent(text)
+ '&wpStarttime=' + encodeURIComponent(wpStarttime)
+ '&wpEdittime=' + encodeURIComponent(wpEdittime)
+ '&wpEditToken=' + encodeURIComponent(wpEditToken)
+ '&wpSummary=' + encodeURIComponent('[[' + iKiwiDocPage + '|iKiwi]] : ' + summary)
+ '&wpMinoredit=on';
if (document.getElementById('iKiwiFollow').checked)
parameters += '&wpWatchthis=on';
var xhr = sajax_init_object();
with (xhr)
{
open('POST', mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' + encodeURIComponent(mw.config.get('wgPageName')) + '&action=submit', false);
setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
setRequestHeader('Content-length', parameters.length);
setRequestHeader('Connection', 'close');
send(parameters);
}
return xhr;
}
function iKiwiPreview(editForm, text, summary)
{
var xhr = iKiwiPostRequest('Diff', editForm, text, summary);
var parser = new DOMParser();
return parser.parseFromString(xhr.responseText, 'application/xhtml+xml');
}
function iKiwiPublish()
{
iKiwiPostRequest('Save', document.editForm, document.newText, document.summary);
iKiwiSelectPage();
}
function iKiwiRedirectCallBack(page)
{
var extPage = document.getElementById('iKiwiExtPage');
var distantPageName = iKiwiDistantWiki() + ':' + extPage.value;
var redirect = document.getElementById('iKiwiRedirect');
redirect.innerHTML = ' ' + iKiwiI18n(wgUserLanguage, 'redirectfrom') + ' <a href="' + iKiwiDistantUrl(extPage.value) + '&redirect=no" title="' + distantPageName + '">' + distantPageName + '</a>';
redirect.setAttribute('style', 'display:inline;');
extPage.value = page;
}
function iKiwiSuggestCallBack()
{
iKiwiError(iKiwiI18n(wgUserLanguage, 'noarticle'));
}
function iKiwiAddInterWikisCallBack(text)
{
var editForm = iKiwiGetForm();
var originalText = editForm.getElementById('wpTextbox1').value;
var newText = iKiwiRemoveInterWikis(originalText);
var interWikis = [];
var originalInterWikis = iKiwiExtractInterWikis(originalText);
var distantInterWikis = iKiwiExtractInterWikis(text);
var distantPageName = iKiwiDistantWiki() + ':' + document.getElementById('iKiwiExtPage').value;
interWikis.push('[[' + distantPageName + ']]');
var distantWikis = [ iKiwiDistantWiki() ];
for (var originalInterWikiId = 0; originalInterWikiId < originalInterWikis.length; ++originalInterWikiId)
if (interWikis.indexOf(originalInterWikis[originalInterWikiId]) == -1)
{
var interWiki = iKiwiInterWiki.exec(originalInterWikis[originalInterWikiId]);
if (distantWikis.indexOf(interWiki[1]) != -1) {
iKiwiError(iKiwiI18n(wgUserLanguage, 'twolocallinks') + interWiki[1]);
return;
}
interWikis.push(originalInterWikis[originalInterWikiId]);
distantWikis.push(interWiki[1]);
}
var originalLinksCount = distantWikis.length;
for (var distantInterWikiId = 0; distantInterWikiId < distantInterWikis.length; ++distantInterWikiId)
if (interWikis.indexOf(distantInterWikis[distantInterWikiId]) == -1)
{
if (distantInterWikis[distantInterWikiId].indexOf('[[' + wgContentLanguage + ':') != -1)
{
if (distantInterWikis[distantInterWikiId].indexOf('[[' + wgContentLanguage + ':' + wgPageName.replace(/_/g, ' ')) == -1)
{
var interWiki = iKiwiInterWiki.exec(distantInterWikis[distantInterWikiId]);
iKiwiError(iKiwiI18n(wgUserLanguage, 'alreadylinked') + ' <a href="/wiki/' + interWiki[3] + '" title="' + interWiki[3] + '">' + interWiki[3] + '</a>');
return;
}
} else {
var interWiki = iKiwiInterWiki.exec(distantInterWikis[distantInterWikiId]);
var distantWikiId = distantWikis.indexOf(interWiki[1]);
if (distantWikiId != -1) {
if (distantWikiId < originalLinksCount) {
iKiwiError(iKiwiI18n(wgUserLanguage, 'twolinks') + interWiki[1]);
} else {
iKiwiError(iKiwiI18n(wgUserLanguage, 'twodistantlinks') + interWiki[1] + ': <a href="' + iKiwiDistantUrl(document.getElementById('iKiwiExtPage').value) + '&redirect=no" title="' + distantPageName + '">' + distantPageName + '</a>');
}
return;
}
interWikis.push(distantInterWikis[distantInterWikiId]);
distantWikis.push(interWiki[1]);
}
}
var nbNewInterWikis = interWikis.length - originalInterWikis.length;
if (!nbNewInterWikis)
{
iKiwiError(iKiwiI18n(wgUserLanguage, 'nomoreiw'));
return;
}
if (iKiwiSpecialOrdered.indexOf(wgContentLanguage) != -1)
interWikis.sort(iKiwiSpecialOrderCompare);
else
interWikis.sort();
newText += '\n\n'
for (var interWikiId = 0; interWikiId < interWikis.length; ++interWikiId)
newText += interWikis[interWikiId] + '\n';
document.getElementById('iKiwiExtPage').removeAttribute('style');
with (document.getElementById('iKiwiWarning'))
{
if (nbNewInterWikis > 1)
innerHTML = ' ' + nbNewInterWikis + ' ' + iKiwiI18n(wgUserLanguage, 'iwsadded');
else
innerHTML = ' ' + nbNewInterWikis + ' ' + iKiwiI18n(wgUserLanguage, 'iwadded');
innerHTML += ' ' + iKiwiI18n(wgUserLanguage, 'from') + ' <a href="' + iKiwiDistantUrl(document.getElementById('iKiwiExtPage').value) + '&redirect=no" title="' + distantPageName + '">' + distantPageName + '</a>';
setAttribute('style', 'color:green;');
}
document.getElementById('iKiwiSubmit').removeAttribute('disabled');
document.editForm = editForm;
document.newText = newText;
document.summary = iKiwiI18n(wgContentLanguage, 'adding') + ' ' + nbNewInterWikis + ' interWiki' + (nbNewInterWikis > 1 ? 's' : '') + ' ' + iKiwiI18n(wgContentLanguage, 'from') + ' [[:' + distantPageName + ']]';
if (location.href.indexOf('&iKiwiFromPIW') != -1)
document.summary += ' (Détecté par [[P:IW]])';
var preview = iKiwiPreview(editForm, newText, document.summary);
var diff = preview.getElementById('wikiDiff');
diff.setAttribute('id', 'iKiwiDiff');
var textarea = document.getElementById('iKiwiText');
if (!textarea)
{
textarea = document.createElement('textarea');
with (textarea)
{
setAttribute('id', 'iKiwiText');
setAttribute('rows', 10);
setAttribute('readonly', 'readonly');
appendChild(document.createTextNode(text));
}
var fieldSet = document.getElementById('iKiwiFieldSet');
var follow = document.getElementById('iKiwiFollow');
fieldSet.insertBefore(textarea, follow);
fieldSet.insertBefore(document.createElement('br'), follow);
document.getElementsByTagName('head')[0].innerHTML+='<link rel="stylesheet" href="http://bits.wikimedia.org/skins-1.5/common/diff.css?257z23" type="text/css" media="all" />';
fieldSet.insertBefore(diff, follow);
} else {
textarea.value = text;
textarea.setAttribute('style', 'display:block;');
document.getElementById('iKiwiFieldSet').replaceChild(diff, document.getElementById('iKiwiDiff'));
}
}
function iKiwiAddInterWikis()
{
document.getElementById('iKiwiRedirect').setAttribute('style', 'display:none;');
var distantWiki = document.getElementById('iKiwiDistantWiki').value;
var page = document.getElementById('iKiwiExtPage').value;
var follow = document.getElementById('iKiwiFollow').checked;
iKiwiXssRequest(iKiwiDistantUrl(page) + '&action=edit&xssServe&iKiwiDestinationLanguage=' + wgContentLanguage);
document.getElementById('iKiwiExtPage').value = page;
document.getElementById('iKiwiDistantWiki').value = distantWiki;
if (follow)
document.getElementById('iKiwiFollow').checked = 'checked';
else
document.getElementById('iKiwiFollow').removeAttribute('checked');
}
function iKiwiSelectPage(autoPreview)
{
var iForm = document.getElementById('iKiwiForm');
if (iForm) {
iForm.setAttribute('style', 'display:' + iKiwiStates[iKiwiPanelNextState] + ';');
iKiwiPanelNextState = !iKiwiPanelNextState + 0;
document.getElementById('iKiwiLinks').setAttribute('style', 'display:' + iKiwiStates[iKiwiPanelNextState] + ';');
} else {
document.getElementById('iKiwiLinks').setAttribute('style', 'display:none;');
iForm = document.createElement('form');
iForm.setAttribute('id', 'iKiwiForm');
var fieldSet = document.createElement('fieldset');
fieldSet.setAttribute('id', 'iKiwiFieldSet');
var link = document.createElement('a');
with (link)
{
setAttribute('href', 'javascript:iKiwiSelectPage();');
setAttribute('id', 'iKiwiHidePanel');
setAttribute('title', 'Masquer le panneau iKiwi');
appendChild(document.createTextNode('[iKiwi — ' + iKiwiVersion + ']'));
}
var doc = document.createElement('a');
with (doc)
{
setAttribute('href', iKiwiLocalUrl(iKiwiDocPage));
setAttribute('id', 'iKiwiDoc');
setAttribute('title', 'Documentation');
appendChild(document.createTextNode('(documentation)'));
}
var legend = document.createElement('legend');
with (legend)
{
appendChild(link);
appendChild(document.createTextNode(' '));
appendChild(doc);
}
var label = document.createElement('label');
with (label)
{
setAttribute('for', 'iKiwiExtPage');
appendChild(document.createTextNode(iKiwiI18n(wgUserLanguage, 'extpage')));
}
var distantLanguage = /iKiwiSourceLanguage=([^&]+)/.exec(location.href);
if (distantLanguage)
iKiwiDefaultDistantWiki = distantLanguage[1];
var distantWiki = document.createElement('select');
distantWiki.setAttribute('id', 'iKiwiDistantWiki');
for (var wikiId = 0; wikiId < iKiwiDistantWikis.length; ++wikiId)
{
var option = document.createElement('option');
with (option)
{
setAttribute('id', 'iKiwiDistantWiki-' + iKiwiDistantWikis[wikiId]);
setAttribute('value', iKiwiDistantWikis[wikiId]);
appendChild(document.createTextNode(iKiwiDistantWikis[wikiId]));
}
if (iKiwiDistantWikis[wikiId] == iKiwiDefaultDistantWiki)
option.setAttribute('selected', 'selected');
distantWiki.appendChild(option);
}
// TODO autocomplétion
var input = document.createElement('input');
with (input)
{
setAttribute('id', 'iKiwiExtPage');
setAttribute('type', 'text');
setAttribute('value', wgPageName.replace(/_/g, ' '));
}
var warning = document.createElement('strong');
with (warning)
{
setAttribute('id', 'iKiwiWarning');
setAttribute('style', 'display:none');
appendChild(document.createTextNode(''));
}
var redirect = document.createElement('em');
with (redirect)
{
setAttribute('id', 'iKiwiRedirect');
setAttribute('style', 'display:none;');
appendChild(document.createTextNode(''));
}
var follow = document.createElement('input');
with (follow)
{
setAttribute('id', 'iKiwiFollow');
setAttribute('type', 'checkbox');
if (!document.getElementById('ca-watch') || iKiwiWatchOthers || iKiwiWatchMain && !wgNamespaceNumber)
setAttribute('checked', 'checked');
}
var followLabel = document.createElement('label');
with (followLabel)
{
setAttribute('for', 'iKiwiFollow');
appendChild(document.createTextNode(iKiwiI18n(wgUserLanguage, 'follow')));
}
var submit = document.createElement('input');
with (submit)
{
setAttribute('id', 'iKiwiSubmit');
setAttribute('name', 'iKiwiSubmit');
setAttribute('type', 'submit');
setAttribute('value', iKiwiI18n(wgUserLanguage, 'publish'));
setAttribute('disabled', 'disabled');
setAttribute('onClick', 'javascript:iKiwiPublish(); return false;')
}
var preview = document.createElement('input');
with (preview)
{
setAttribute('id', 'iKiwiPreview');
setAttribute('name', 'iKiwiPreview');
setAttribute('type', 'submit');
setAttribute('value', iKiwiI18n(wgUserLanguage, 'preview'));
setAttribute('onClick', 'javascript:iKiwiAddInterWikis(); return false;')
}
iForm.appendChild(fieldSet);
with (fieldSet)
{
appendChild(legend);
appendChild(label);
appendChild(document.createElement('br'));
appendChild(distantWiki);
appendChild(document.createTextNode(' '));
appendChild(input);
appendChild(warning);
appendChild(redirect);
appendChild(document.createElement('br'));
appendChild(follow);
appendChild(followLabel);
appendChild(document.createElement('br'));
appendChild(submit);
appendChild(preview);
}
document.getElementById('content').insertBefore(iForm, document.getElementById('firstHeading'));
}
if (!iKiwiPanelNextState && typeof (autoPreview) != 'undefined' && autoPreview)
iKiwiAddInterWikis();
}
function iKiwiAddLinks()
{
var link1 = document.createElement('a');
with (link1)
{
setAttribute('href', 'javascript:iKiwiSelectPage();');
setAttribute('id', 'iKiwiDisplayPanel');
setAttribute('title', iKiwiI18n(wgUserLanguage, 'panel'));
appendChild(document.createTextNode('iKiwi'));
}
var link2 = document.createElement('a');
with (link2)
{
setAttribute('href', 'javascript:iKiwiSelectPage(true);');
setAttribute('id', 'iKiwiDisplayPanel');
setAttribute('title', iKiwiI18n(wgUserLanguage, 'panel') + ' (' + iKiwiI18n(wgUserLanguage, 'autopreview') + ')');
appendChild(document.createTextNode('+'));
}
var links = document.createElement('p');
with (links)
{
setAttribute('id', 'iKiwiLinks');
appendChild(document.createTextNode('['));
appendChild(link1);
appendChild(document.createTextNode('|'));
appendChild(link2);
appendChild(document.createTextNode(']'));
}
document.getElementById('content').insertBefore(links, document.getElementById('firstHeading'));
}
function iKiwiAddPreviewLinks()
{
var lis = document.getElementsByTagName('li');
for (var liId = 0; liId < lis.length; ++liId)
{
var sourceLanguage = 'en';
var language = /\/([a-z]{2})fr/.exec(location.href);
if (language)
sourceLanguage = language[1];
// TODO set iKiwiSourceArticle
// TODO add another iKiwi link for the distant wiki article
var interWiki = iKiwiHtmlInterWiki.exec(lis[liId].innerHTML);
if (interWiki)
lis[liId].innerHTML = lis[liId].innerHTML.replace(iKiwiHtmlInterWiki, interWiki[0] + ' <sup><a href="' + mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/index.php?title=' + interWiki[1] + '&iKiwiAutoPreview&iKiwiFromPIW&iKiwiSourceLanguage=' + sourceLanguage + '" title="' + interWiki[2] + ' (iKiwi)"><img alt="iKiwi" src="http://upload.wikimedia.org/wikipedia/commons/e/eb/Demi_kiwi.gif" width="10px" /></a></sup>');
}
}
function iKiwi()
{
if (location.href.indexOf('&xssServe') != -1)
iKiwiXssServer();
else
{
var autoPreview = location.href.indexOf('&iKiwiAutoPreview') != -1;
if ((iKiwiDisplayPanel || autoPreview) && [0, 2, 4, 6, 10, 12, 14, 100, 102, 104].indexOf(wgNamespaceNumber) != -1)
iKiwiAddLinks();
if (autoPreview)
iKiwiSelectPage(true);
if (location.href.indexOf('Projet:Interwikification/') != -1)
iKiwiAddPreviewLinks();
}
}
$(iKiwi);