משתמש:Neriah/quickVote.js
מראה
הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.
- פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
- גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
- אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
// <nowiki>
// ממשק הצבעה מהירה בדפי הצבעה
// נכתב ע"י [[user:Neriah]]
if (mw.config.get('wgCategories') && mw.config.get('wgCategories').includes('ויקיפדיה - הצבעות') && mw.config.get('wgNamespaceNumber') !== 14) {
mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows']).then(function() {
'use strict';
const pageName = mw.config.get('wgTitle');
let votingOptions;
if (pageName.includes('למחיקה')) {
votingOptions = ['למחוק', 'להשאיר', 'נמנע'];
} else if (pageName.includes('שחזור')) {
votingOptions = ['לשחזר', 'לא לשחזר', 'נמנע'];
} else {
return;
}
const createVotingForm = function() {
const panel = new OO.ui.PanelLayout({
padded: true,
expanded: false,
framed: true
});
const radioSelect = new OO.ui.RadioSelectWidget({
items: votingOptions.map(option => new OO.ui.RadioOptionWidget({
data: option,
label: option
}))
});
const reasonInput = new OO.ui.MultilineTextInputWidget({
placeholder: 'נימוק (אופציונלי)',
rows: 3,
dir: 'rtl'
});
const submitButton = new OO.ui.ButtonWidget({
label: 'הצבעה',
flags: ['primary', 'progressive']
});
const form = new OO.ui.FieldsetLayout({
label: 'הצבעה'
});
form.addItems([
new OO.ui.FieldLayout(radioSelect, {
label: 'אפשרויות הצבעה',
align: 'top'
}),
new OO.ui.FieldLayout(reasonInput, {
label: 'נימוק',
align: 'top'
}),
new OO.ui.FieldLayout(submitButton, {
align: 'top'
})
]);
panel.$element.append(form.$element);
$('#mw-content-text').prepend(panel.$element);
const findVoteSection = function(wikitext, vote) {
const sections = wikitext.split(/==+\s*([^=]+?)\s*==+/);
for (let i = 1; i < sections.length; i += 2) {
const sectionTitle = sections[i].trim();
if (sectionTitle.includes(vote)) {
return {
index: Math.floor(i / 2) + 1,
text: sections[i + 1]
};
}
}
return null;
};
submitButton.on('click', function() {
const selectedOption = radioSelect.findSelectedItem();
if (!selectedOption) {
OO.ui.alert('יש לבחור אפשרות הצבעה');
return;
}
const vote = selectedOption.getData();
const reason = reasonInput.getValue().trim();
const voteText = reason
? `\n#${reason} ~~~~`
: `\n# ~~~~`;
new mw.Api().get({
action: 'query',
prop: 'revisions',
titles: mw.config.get('wgPageName'),
rvslots: '*',
rvprop: 'content'
}).done(function(response) {
const page = Object.values(response.query.pages)[0];
const content = page.revisions[0].slots.main['*'];
const section = findVoteSection(content, vote);
if (!section) {
OO.ui.alert('לא נמצא סעיף מתאים להצבעה');
return;
}
new mw.Api().postWithToken('csrf', {
action: 'edit',
title: mw.config.get('wgPageName'),
section: section.index,
appendtext: voteText,
summary: `הצבעה: ${vote}`
}).done(function() {
location.reload();
}).fail(function() {
OO.ui.alert('שגיאה בשמירת ההצבעה');
});
});
});
};
createVotingForm();
});
}
// </nowiki>