MediaWiki:Gadget-ToDoList.js
Napomena: Nakon objave možda ćete trebati očistiti međuspremnik svog preglednika kako biste vidjeli promjene.
- Firefox / Safari: držite Shift i pritisnite Reload, ili pritisnite bilo Ctrl-F5 ili Ctrl-R (⌘-R na Macu)
- Google Chrome: pritisnite Ctrl-Shift-R (⌘-Shift-R na Macu)
- Internet Explorer / Edge: držite Ctrl i kliknite Refresh, ili pritisnite Ctrl-F5
- Opera: pritisnite Ctrl-F5.
//ToDoLister
//Prilagođeno za hrwiki, preuzeto iz [[:en:User:Evad37/ToDoLister]]
/* Add any or all of these lines after the importScript line to set various options (the default values are shown):
var todo_portlet = "p-personal"; // Defines which portlet menu the link is added to - see [[Help:Customizing toolbars]] for options (choose one of the valid values for portletId)
var todo_subpage = "todo"; // Subpage where the to-do list entry is to be added
var todo_viewlabel = "View ToDo"; // Custom label for the link. Replace quoted text with your desired name.
var todo_addlabel = "Add to ToDo"; // Custom label for the link. Replace quoted text with your desired name.
var todo_addfirst = null; // Replace null with any value, e.g. "yes" (including quotation marks) to show the Add link before the View link.
var todo_viewnew = null; // Replace null with any value, e.g. "yes" (including quotation marks) to make the View link open in a new tab or window.
*/
// <nowiki>
mw.loader.using(['mediawiki.util', 'mediawiki.api']).then(function() {
mw.loader.load('//en.wikipedia.org/w/index.php?title=MediaWiki:Gadget-libExtraUtil.js&action=raw&ctype=text/javascript');
// Set default options for any that haven't been set
var getOption = function getOptionFn(option, val) {
return (window[option] === undefined) ? val : window[option];
};
var getConfig = function() {
return {
portlet: getOption('todo_portlet', 'p-cactions'),
subpage: getOption('todo_subpage', 'todo'),
viewlabel: getOption('todo_viewlabel', 'Vidi popis zadataka'),
addlabel: getOption('todo_addlabel', 'Dodaj na popis zadataka'),
addfirst: getOption('todo_addfirst', null),
viewnew: getOption('todo_viewnew', "yes"),
mw: mw.config.get(['wgNamespaceNumber', 'wgPageName', 'wgUserName']),
api: new mw.Api({
ajax: {
headers: {
'Api-User-Agent': 'ToDoLister/2.0 ( https://en.wikipedia.org/wiki/User:Evad37/ToDoLister )'
}
}
})
};
};
var addItemToList = function(config) {
var comment = prompt("Unesite komentar uz stavku: ");
if (comment === null) {
return;
}
// Colon needed for File & Category namespaces
var colonIsNeeded = ( config.mw.wgNamespaceNumber == 6 || config.mw.wgNamespaceNumber == 14 );
var listItem = '\n<li id="{{subst:TRENUTAČNAOZNAKAVREMENA}}" class="popis-zadataka">[[' +
( colonIsNeeded ? ':' : '' ) + '{{subst:#titleparts:' + config.mw.wgPageName +
'}}]] ~~~~~ ' + comment + '</li>';
//Perform edit to add entry
var params = {
action: 'edit',
title: 'User:' + config.mw.wgUserName + '/' + config.subpage,
appendtext: listItem,
summary: 'Dodavanje stavke na popis zadataka: [[' + config.mw.wgPageName + ']]',
tags: 'ToDoLister'
};
config.api.postWithToken('csrf', params)
.done(function() {
alert("Uspješno dodano.");
})
.fail(function(code, jqxhr) {
alert(extraJs.makeErrorMsg(code, jqxhr));
});
};
/* == Remove items from Todo list == */
var queryPage = function(config, entryID) {
return $.when(config.api.get({
action: 'query',
titles: 'User:' + config.mw.wgUserName + '/' + config.subpage,
prop: 'revisions|info',
rvprop: 'content',
indexpageids: 1,
rawcontinue: ''
}), entryID, config);
};
var getWikitext = function(result, entryID, config) {
var pageid = result[0].query.pageids;
var wikitext = result[0].query.pages[pageid].revisions[0]['*'];
return $.Deferred().resolve(wikitext, entryID, config);
};
var checkForItem = function(wikitext, entryID, config) {
if (wikitext.indexOf('<li id="' + entryID + '"') < 0) {
return $.Deferred().reject('Ne mogu pronaći stavku na popisu.');
}
return $.Deferred().resolve(wikitext, entryID, config);
};
var updateWikitext = function(wikitext, entryID, config) {
var startOfItemToRemove = wikitext.indexOf("<li id=\"" + entryID + "\"");
var endOfItemToRemove = wikitext.indexOf("</li>", startOfItemToRemove) + 6; // 6 = character in closing tag plus a newline
var updatedWikitext = wikitext.substr(0, startOfItemToRemove) + wikitext.substr(endOfItemToRemove);
var startOfPageRemoved = wikitext.indexOf("[[", startOfItemToRemove);
var endOfPageRemoved = wikitext.indexOf("]]", startOfItemToRemove) + 2; // +2 accounts for the closing square brackets
var pageRemoved = wikitext.substring(startOfPageRemoved, endOfPageRemoved);
return $.Deferred().resolve(updatedWikitext, pageRemoved, config);
};
var editPage = function(updatedWikitext, pageRemoved, config) {
var params = {
action: 'edit',
title: 'User:' + config.mw.wgUserName + '/' + config.subpage,
text: updatedWikitext,
summary: 'Uklanjanje stavke s popisa zadataka: ' + pageRemoved,
tags: "ToDoLister"
};
return config.api.postWithToken('csrf', params);
};
removeEntry = function(entryID, config) {
//first check click was intended
var confirmation = confirm("Želite li zaista ukloniti ovu stavku s popisa?");
if (!confirmation) {
return;
}
queryPage(config, entryID)
.then(getWikitext)
.then(checkForItem)
.then(updateWikitext)
.then(editPage)
.done(function() {
alert("Uspješno uklonjeno.");
location.reload();
})
.fail(function(code, jqxhr) {
alert(extraJs.makeErrorMsg(code, jqxhr));
});
};
var addScriptLinks = function(config) {
//console.log("ToDo addLinks Ivi104");
//insert view link
var viewLink = mw.util.addPortletLink(
config.portlet,
'/wiki/User:' + config.mw.wgUserName + '/' + config.subpage,
config.viewlabel,
'todo_view'
);
if (config.viewnew !== null) {
$(viewLink).find('a').attr('target', '_blank');
}
//insert add link
var addLink = mw.util.addPortletLink(
config.portlet,
'#',
config.addlabel,
'todo_add',
null,
null,
(config.addfirst !== null) ? '#todo_view' : null
);
$(addLink).click(function(e) {
e.preventDefault();
addItemToList(config);
});
//Show remove links on todo list
$('li.popis-zadataka').each(function() {
var id = this.id;
$('<span>')
.css('margin-left', '0.5em')
.append([
"(",
$('<a>')
.text('izbriši')
.css('cursor', 'pointer')
.click(function() {
removeEntry(id, config);
}),
")"
])
.appendTo(this);
});
};
/* == Setup == */
addScriptLinks(getConfig());
// console.log("ToDo success");
});
// </nowiki>