User:Euphoria/common.js: Difference between revisions
From Test Wiki
Content deleted Content added
fix Tag: Reverted |
restore Tag: Manual revert |
||
Line 1:
//<nowiki>
mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () {
const pagePrefix = 'User:Euphoria/TestVfD/';
if (!mw.config.get('wgPageName').startsWith(pagePrefix) || mw.config.get('wgAction') !== 'view') return;
$(
▲ $('#mw-content-text').find('h2, h3').each(function () {
const heading = this;
if ($(heading).closest('.vfd').length) return;
sectionText += $(this).text();▼
});▼
const match = heading.textContent.match(/\[\[([^\]]+)\]\]/) ▼
|| sectionText.match(/\[\[([^\]]+)\]\]/)▼
if (!match) return;▼
const container = document.createElement('span');
Line 33 ⟶ 14:
const actions = [
{
{
{
];
const btn = document.createElement('button');
btn.textContent = actionObj.name.charAt(0).toUpperCase(); // D/K/N
Object.assign(btn.style, {▼
// Ultra-small
btn.style.width
btn.style.height
btn.style.fontSize
btn.style.padding
btn.style.marginRight
btn.style.border
btn.style.borderRadius =
btn.style.backgroundColor =
btn.style.color
btn.style.cursor
btn.style.verticalAlign
btn.addEventListener('mouseenter', () => btn.style.filter = 'brightness(1.3)');▼
btn.addEventListener('mouseleave', () => btn.style.filter = 'brightness(1)');▼
btn.addEventListener('click',
e.preventDefault();
if (!confirm('Are you sure you want to close as ' + actionObj.name + '?')) return;
btn.textContent = '…';▼
}).done(function(data)
const pages = discData.query.pages;▼
const pageId = Object.keys(pages)[0];
let content = pages[pageId].revisions[0]['*'];
const
const bottomText = '\n{{subst:vb}}';
const discussionNewContent = topText + content.replace(/^\s+|\s+$/g,'') + bottomText;
action: 'edit',
title: mw.config.get('wgPageName'),
Line 89 ⟶ 71:
minor: true,
bot: true
})
// Extract target article from heading (assumes first [[...]] in content)
location.reload();▼
if (actionObj.name === 'delete') {
}).done(()
} else
const articleId = Object.keys(articlePages)[0];
title: targetPage,▼
▲ text: articleContent,
summary: 'VFD closed as ' + actionObj.name,▼
minor: true,▼
▲ bot: true
});▼
//
action: '
rvprop: 'content',
format: 'json'
const talkPages = talkData.query.pages;
const talkId = Object.keys(talkPages)[0];
if (talkId !== '-1' && talkPages[talkId].revisions) {
talkContent = talkPages[talkId].revisions[0]['*'];
talkContent = '{{vfd-kept-new}}\n' + talkContent.replace(/^\s+/, '');
} else {
talkContent = '{{vfd-kept-new}}';
api.postWithToken('csrf', {
action: 'edit',
title: talkPage,
text: talkContent,
▲ summary: 'VFD closed as ' + actionObj.name,
▲ minor: true,
alert('Discussion closed and "' + targetPage + '" updated. Talk page updated.');▼
location.reload();
}).fail(err => alert('Error editing talk page: ' + err));
}).fail(err => alert('Error editing article: ' + err));
}
}).fail(err => alert('Error editing
▲ text: talkContent,
▲ summary: 'VFD closed as ' + actionObj.name,
▲ minor: true,
▲ bot: true
▲ });
▲ alert('Discussion closed and "' + targetPage + '" updated. Talk page updated.');
▲ location.reload();
▲ }
▲ alert('Error: ' + err);
});
container.appendChild(btn);
});
| |||