User:Euphoria/common.js: Difference between revisions
From Test Wiki
Content deleted Content added
fix |
No edit summary |
||
| Line 2: | Line 2: | ||
mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () { |
mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () { |
||
const pagePrefix = 'User:Euphoria/TestVfD'; |
const pagePrefix = 'User:Euphoria/TestVfD'; |
||
if (!mw.config.get('wgPageName').startsWith(pagePrefix) || mw.config.get('wgAction') !== 'view') return; |
if (!mw.config.get('wgPageName').startsWith(pagePrefix) || mw.config.get('wgAction') !== 'view') return; |
||
$(function() { |
$(function() { // synchronous DOM ready |
||
const api = new mw.Api(); |
const api = new mw.Api(); |
||
| Line 21: | Line 20: | ||
]; |
]; |
||
actions.forEach |
actions.forEach(actionObj => { |
||
const btn = document.createElement('button'); |
const btn = document.createElement('button'); |
||
btn.textContent = actionObj.name.charAt(0).toUpperCase(); |
btn.textContent = actionObj.name.charAt(0).toUpperCase(); |
||
| Line 41: | Line 40: | ||
}); |
}); |
||
btn.addEventListener('mouseenter', () => btn.style.filter='brightness(1.3)'); |
btn.addEventListener('mouseenter', () => btn.style.filter = 'brightness(1.3)'); |
||
btn.addEventListener('mouseleave', () => btn.style.filter='brightness(1)'); |
btn.addEventListener('mouseleave', () => btn.style.filter = 'brightness(1)'); |
||
// Async click handler |
// Async click handler |
||
btn.addEventListener('click', async |
btn.addEventListener('click', async e => { |
||
e.preventDefault(); |
e.preventDefault(); |
||
if (!confirm('Are you sure you want to close as ' + actionObj.name + '?')) return; |
if (!confirm('Are you sure you want to close as ' + actionObj.name + '?')) return; |
||
try { |
try { |
||
// 1️⃣ |
// 1️⃣ Get discussion page content |
||
const data = await api.get({ |
const data = await api.get({ |
||
action: 'query', |
action: 'query', |
||
| Line 63: | Line 62: | ||
let content = pages[pageId].revisions[0]['*']; |
let content = pages[pageId].revisions[0]['*']; |
||
// |
// Wrap discussion content |
||
const topText = '{{subst:vt|' + actionObj.name + '. --~~~~}}\n'; |
const topText = '{{subst:vt|' + actionObj.name + '. --~~~~}}\n'; |
||
const bottomText = '\n{{subst:vb}}'; |
const bottomText = '\n{{subst:vb}}'; |
||
| Line 77: | Line 76: | ||
}); |
}); |
||
// |
// Extract target article from heading |
||
const match = content.match(/==\s*\[\[([^\]]+)\]\]\s*==/); |
const match = content.match(/==\s*\[\[([^\]]+)\]\]\s*==/); |
||
if (!match) { |
if (!match) { |
||
| Line 86: | Line 85: | ||
if (actionObj.name === 'delete') { |
if (actionObj.name === 'delete') { |
||
// |
// Delete target article |
||
await api.postWithToken('csrf', { |
await api.postWithToken('csrf', { |
||
action: 'delete', |
action: 'delete', |
||
| Line 105: | Line 104: | ||
alert(`Discussion closed and "${targetPage}" along with its talk page deleted.`); |
alert(`Discussion closed and "${targetPage}" along with its talk page deleted.`); |
||
location.reload(); |
location.reload(); |
||
} else { |
} else { |
||
// |
// Keep / No consensus |
||
const articleData = await api.get({ |
const articleData = await api.get({ |
||
action: 'query', |
action: 'query', |
||
| Line 129: | Line 129: | ||
}); |
}); |
||
// |
// Update talk page |
||
const talkData = await api.get({ |
const talkData = await api.get({ |
||
action: 'query', |
action: 'query', |
||