MediaWiki:Gadget-EditInfo.js
Note : après avoir publié vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
- Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
- Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
- Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
/* TODO: MediaWiki 1.45 allows loading .vue files in Gadgets (T340460) */
const {computed, createMwApp, onMounted, ref} = mw.loader.require('vue');
const {timeSince} = require('ext.gadget.Util');
const api = new mw.Api();
function getEditInfo(rvdir) {
return api.get({
titles: mw.config.get('wgPageName'),
prop: 'revisions',
rvprop: 'ids|timestamp|user|size|parsedcomment|flags',
rvlimit: 2,
rvdir,
formatversion: 2
}).then(data => {
if (
!data ||
!data.query ||
!data.query.pages ||
!data.query.pages[0] ||
!data.query.pages[0].revisions
) {
return;
}
const revs = data.query.pages[0].revisions;
if (revs[0] && revs[1]) {
revs[0].diff = revs[0].size - revs[1].size;
}
return revs[0];
});
}
// <nowiki>
const editInfo = createMwApp({
name: 'edit-info',
template: `
<p v-if="firstEdit">
Created on
<a class="mw-changeslist-date" :href="creationLink">{{creationDate}}</a>
by <user-links :user="firstEdit.user" />
</p>
<p v-if="lastEdit">
Last edited
<a :href="diffLink" class="mw-changeslist-diff">{{lastEditTimeAgo}}</a>
by <user-links :user="lastEdit.user" />
<span class="mw-changeslist-separator"></span>
<diff-size :diff="lastEdit.diff" :size="lastEdit.size" />
</p>
<p v-if="lastEdit && lastEdit.parsedcomment">
Edit summary: <span class="comment" v-html="lastEdit.parsedcomment"></span>
</p>
`,
setup() {
const scriptPath = mw.config.get('wgScriptPath');
const lastEdit = ref(null);
const firstEdit = ref(null);
const canBlock = ref(false);
onMounted(() => Promise.all([
getEditInfo(),
getEditInfo('newer'),
mw.user.getRights()
]).then(([lastEditData, firstEditData, rights]) => {
if (!lastEditData || !firstEditData) {
return;
}
lastEdit.value = lastEditData;
firstEdit.value = firstEditData;
canBlock.value = rights.includes('block');
}));
return {
firstEdit,
lastEdit,
creationDate: computed(() => new Date(firstEdit.value.timestamp).toLocaleString()),
lastEditTimeAgo: computed(() => timeSince(lastEdit.value.timestamp)),
diffLink: computed(() => `${scriptPath}/?diff=${lastEdit.value.revid}`),
creationLink: computed(() => `${scriptPath}/?oldid=${firstEdit.value.revid}`)
};
}
});
editInfo.component('user-links', {
name: 'user-links',
template: `
<span class="history-user">
<a :href="userpageLink" class="mw-userlink">{{user}}</a>
<span class="mw-usertoollinks mw-changeslist-links">
<span><a class="mw-usertoollinks-talk" :href="talkLink">talk</a></span>
<span><a class="mw-usertoollinks-contribs" :href="contribsLink">contribs</a></span>
<span><a class="mw-usertoollinks-block" :href="blockLink">block</a></span>
</span>
</span>
`,
props: {
user: {
type: String,
required: true
}
},
setup: ({user}) => ({
userpageLink: mw.util.getUrl(`User:${user}`),
talkLink: mw.util.getUrl(`User talk:${user}`),
contribsLink: mw.util.getUrl(`Special:Contributions/${user}`),
blockLink: mw.util.getUrl(`Special:Block/${user}`),
user
})
});
editInfo.component('diff-size', {
name: 'diff-size',
template: `
<span :class="diffClass" :title="totalSize" v-if="!isBig && !isNew">{{diffText}}</span>
<strong :class="diffClass" :title="totalSize" v-if="isBig && !isNew">{{diffText}}</strong>
<strong class="mw-uctop" :title="totalSize" v-if="isNew">new</strong>
`,
props: {
diff: {
type: Number
},
size: {
type: Number,
required: true
}
},
setup: ({diff, size}) => ({
isBig: diff >= 500 || diff <= -500,
isNew: typeof diff !== 'number',
totalSize: size + ' bytes',
diffClass: [
`mw-plusminus-${(diff > 0) ? 'pos' : (diff < 0) ? 'neg' : 'null'}`,
'mw-diff-bytes'
].join(' '),
diffText: (diff > 0) ? `+${diff}` : String(diff)
})
});
// </nowiki>
if (mw.config.get('wgArticleId') > 0) {
const editInfoRoot = document.createElement('div');
editInfoRoot.id = 'edit-info';
document.getElementById('mw-content-subtitle').append(editInfoRoot);
editInfo.mount(editInfoRoot);
}