MediaWiki:Gadget-duplicate.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
(function () {
'use strict';
var wikiLambda = mw.config.get('wgWikiLambda');
if (wikiLambda === null || !wikiLambda.viewmode) return;
var api = new mw.Api();
var messages = (function () {
var userLanguage = mw.config.get('wgUserLanguage');
var translations = {
en: {
duplicate: 'Duplicate',
duplicateReason: 'Why you want to duplicate this item?',
duplicateReasonPlaceHolder: 'Reason',
}
};
return translations[userLanguage]
? translations[userLanguage]
: translations.en;
}());
function showDialog(callback) {
mw.loader.using('oojs-ui').then(function () {
OO.ui.prompt(
messages.duplicateReason,
{ textInput: { placeholder: messages.duplicateReasonPlaceHolder } }
).then(function (result) {
if (result === null) return;
callback(result);
});
});
}
function wikiLambdaFetch(zId) {
return api.get({ 'action': 'wikilambda_fetch', zids: zId }).then(function (result) {
return JSON.parse(result[Object.keys(result)[0]].wikilambda_fetch);
});
}
function createLambda(summary, zobject) {
return api.postWithEditToken({
action: 'wikilambda_edit',
summary: summary,
zobject: zobject
});
}
function getLatestRevisionId(page) {
return api.get({
action: 'query',
prop: 'revisions',
titles: page,
rvlimit: 1,
rvprop: 'ids'
}).then(function (result) {
var pages = result.query.pages;
return pages[Object.keys(pages)[0]].revisions[0].revid;
});
}
$(mw.util.addPortletLink(
'p-cactions',
'#',
messages.duplicate,
'ca-duplicate',
messages.duplicate,
'd'
)).click(function (event) {
event.preventDefault();
showDialog(function (summary) {
getLatestRevisionId(wikiLambda.zId).then(function (oldid) {
wikiLambdaFetch(wikiLambda.zId).then(function (zobject) {
zobject.Z2K1 = 'Z0';
zobject.Z2K3.Z12K1 = ['Z11'];
createLambda(
'[[MediaWiki:Gadget-duplicate.js|Duplicate]] from [' +
new mw.Uri('/').extend({ oldid: oldid }).toString() +
' ' + wikiLambda.zId + ']: ' + summary,
JSON.stringify(zobject)
).then(function (result) {
location.href = mw.util.getUrl(result.wikilambda_edit.page);
});
});
});
});
});
}());