МедияУики:Poll.js
Appearance
Забележка: За да се видят промените, необходимо е след съхраняване на страницата, кешът на браузъра да бъде изтрит.
- Firefox / Safari: Задържа се клавиш Shift и се щраква върху Презареждане (Reload) или чрез клавишната комбинация Ctrl-Shift-R (⌘-Shift-R за Mac);
- Google Chrome: клавишна комбинация Ctrl-Shift-R (⌘-Shift-R за Mac)
- Internet Explorer: Задържа се клавиш Ctrl и се щраква върху Refresh или чрез клавишната комбинация CTRL-F5;
- Opera: кешът се изчиства през менюто Tools → Preferences.
/**
Simple poll manager.
Uses wiki pages as poll “databases”.
@uses Mwbot ([[Потребител:Borislav/mwbot.js]])
@uses Creator
License: Public domain
Author: Borislav Manolov
*/
function showPolls() {
var polls = getElementsByClassName(document, "div", "wikipoll");
for (var i = 0; i < polls.length ; i++) {
createPoll(polls[i]);
}
}
function createPoll(pollElem) {
var pollName = mw.config.get('wgDBname') + "-poll-" + pollElem.id;
var page = pollElem.getElementsByTagName("p")[0];
var pageName = page.textContent.trim();
if ( Cookie.read(pollName) !== null ) {
// already voted, do not spam user again
pollElem.innerHTML = gLang.msg("poll-already-voted");
pollElem.appendChild( createPollResultsLink(pageName) );
pollElem.innerHTML += ".";
return;
}
var list = pollElem.getElementsByTagName("ul")[0];
var items = list.getElementsByTagName("li");
var data = new Array();
for (var i = 0; i < items.length; i++) {
var content = items[i].textContent.trim();
data[pollName + i] = [i+1, content];
}
list.style.display = "none";
page.style.display = "none";
pollElem.appendChild( Creator.createRadios(pollName, data, "") );
pollElem.appendChild( createPollComment(pollName) );
if ( mw.config.get('wgUserName') === null ) {
pollElem.appendChild( Creator.createElement("p", {}, gLang.msg("poll-anon-warning") ) );
}
pollElem.appendChild( createPollButton(pollElem, pollName, pageName) );
// put our element in a form
var parent = pollElem.parentNode;
var nextSibling = pollElem.nextSibling;
parent.insertBefore( Creator.createElement("form", {}, pollElem), nextSibling );
}
function createPollComment(pollName) {
var id = pollName + "comment";
var t = Creator.createTextarea(id);
var l = Creator.createLabel(id, gLang.msg("poll-comment-label"));
return Creator.createElement("div", {}, [l, t]);
}
function createPollButton(pollElem, pollName, pageName) {
var button = Creator.createButton(gLang.msg("poll-vote-button"));
button.onclick = function() {
if ( Cookie.read(pollName) !== null ) {
return;
}
var radioValue = getRadioValue(pollName);
if (radioValue === null) {
alert(gLang.msg("poll-no-answer"));
return;
}
function appendVote(bot) {
var comment = document.getElementById(pollName+"comment").value;
comment = comment.replace(/\n/g, "<br/>");
bot.append_page_content("# " + comment + " — ~~"+"~~");
bot.append_edit_summary(comment);
Cookie.create(pollName, 1, 360);
}
function showResults(bot) {
var msg = Creator.createElement("span", {}, gLang.msg("poll-resmsg"));
msg.appendChild(createPollResultsLink(pageName));
msg.innerHTML += ".";
pollElem.replaceChild(msg, button);
}
var loadInd = Creator.createImage(gLang.msg("poll-load-img"), gLang.msg("poll-load-img-alt"), "");
this.appendChild(loadInd);
this.disabled = true;
var bot = new Mwbot();
bot.set_section(radioValue);
bot.set_is_minoredit(false);
bot.register_hook('do_edit', appendVote);
bot.register_hook('on_submit', showResults);
bot.edit(pageName + gLang.msg("poll-respagesuff"));
};
return button;
}
function createPollResultsLink(pageName) {
return Creator.createAnchor(Creator.createInternUrl(pageName),
gLang.msg("poll-reslink"), gLang.msg("poll-reslink-title"));
}
function getRadioValue(name) {
var radios = document.getElementsByTagName("input");
for (var i = 0, len = radios.length; i < len; i++) {
if ( radios[i].name == name && radios[i].checked ) {
return radios[i].value;
}
}
return null;
}
$(showPolls);