MediaWiki:Gadget-Autoref.js/core.js
Nota: Depois de publicar, deve limpar o cachê do seu navegador para ver as alterações.
- Firefox e Safari: Pressione Shift enquanto clica Recarregar, ou pressione Ctrl-F5 ou Ctrl-R (⌘-R no Mac)
- Google Chrome: Pressione Ctrl-Shift-R (⌘-Shift-R no Mac)
- Internet Explorer e Edge: Pressione Ctrl enquanto clica Recarregar, ou pressione Ctrl-F5
- Opera: Pressione Ctrl-F5.
// @source: User:BrandonXLF/Citoid
// @author: User:BrandonXLF
window.getCitoidRef = function(URL) {
try { URL = decodeURIComponent(URL); } catch (e) {}
URL = encodeURIComponent(URL);
var dfd = $.Deferred(),
cfg = mw.config.get('wgCitoidConfig'),
vecfg = mw.config.get('wgVisualEditorConfig'),
rest = cfg.fullRestbaseUrl || cfg.wbFullRestbaseUrl ? (cfg.fullRestbaseUrl || cfg.wbFullRestbaseUrl) + 'v1/data/citation/mediawiki/'
: vecfg && vecfg.fullRestbaseUrl ? vecfg.fullRestbaseUrl + 'v1/data/citation/mediawiki/'
: cfg.citoidServiceUrl ? cfg.citoidServiceUrl + '?format=mediawik&search='
: cfg ? '/api?format=mediawik&search='
: 'https://pt.wikinews.org/api/rest_v1/data/citation/mediawiki/';
function arrToStr(arr) {
for (var i = 0; i < arr.length; i++) {
arr[i] = arr[i].filter(function(str) {
return !!str;
}).join(', ');
}
return arr.join('; ');
}
function encodeTemplatePart(str) {
if (Array.isArray(str)) {
str = arrToStr(str);
}
return str.replace(/\|/g, '|').replace(/\[/g, '[').replace(/\]/g, ']').replace(/\=/g, '=');
}
function doMap(out, data, mapData) {
for (var name in data) {
if (name == 'url') {
data[name] = encodeURI(data[name]);
}
if (typeof mapData[name] == 'string') {
out[mapData[name]] = data[name];
} else if (Array.isArray(mapData[name])) {
out = doMap(out, data[name], mapData[name]);
}
}
return out;
}
dfd.notify('Carregando dados da fonte.');
$.get(rest + URL, {
action: 'query',
format : 'json'
}).then(function(res) {
var data = res[0];
dfd.notify('Carregando dados de configuração.');
dfd.notify('Carregando dados na predefinição.');
var mapPromise = window.internalGetCitoidRefMap
? $.Deferred().resolve(window.internalGetCitoidRefMap)
: $.get(mw.config.get('wgScript'), {
title: 'MediaWiki:Citoid-template-type-map.json',
action: 'raw',
ctype: 'application/json'
}).then(function(map) {
window.internalGetCitoidRefMap = map;
return map;
});
mapPromise.then(function(map) {
var template = map[data.itemType];
dfd.notify('Carregando dados de configuração.');
dfd.notify('Carregando dados na predefinição.');
if (!window.internalGetCitoidRefTemplateData) {
window.internalGetCitoidRefTemplateData = {};
}
var templatePromise = window.internalGetCitoidRefTemplateData[template]
? $.Deferred().resolve(window.internalGetCitoidRefTemplateData[template])
: $.get(mw.config.get('wgScriptPath') + '/api.php', {
action: 'templatedata',
format: 'json',
formatversion: 2,
titles: 'Template:' + template,
redirects: 1
}).then(function(tdata) {
for (var id in tdata.pages) {
window.internalGetCitoidRefTemplateData[template] = tdata.pages[id];
}
return tdata.pages[id];
});
templatePromise.then(function(tdata) {
var str = '{{' + template;
dfd.notify('Carregando dados da predefinição.');
if (!tdata) {
dfd.reject('Não foi possível localizar os campos da predefinição:' + template + '.');
return;
}
if (!tdata.maps || !tdata.maps.citoid) {
dfd.reject('Não foi possível carregar os dados na predefinição:' + template + '.');
return;
}
out = doMap({}, data, tdata.maps.citoid);
for (var k = 0; k < tdata.paramOrder.length; k++) {
var param = tdata.paramOrder[k];
if (out[param]) {
str += '|' + param + '=' + encodeTemplatePart(out[param]);
}
}
str += '}}';
dfd.resolve(str, data.source);
}, function() {
dfd.reject('Não foi possível acessar os dados da predefinição:' + template + '.');
});
}, function() {
dfd.reject('Não foi possível obter dados da configuração.');
});
}, function() {
dfd.reject('Não foi possível obter os dados. Verifique se a fonte é válida ou se está conectado com a internet.');
});
return dfd.promise();
};