//autor: [[User:Tufor|tufor]]
var WatchCatElems2 = {
processDialog: null,
api: new mw.Api(),
$depthSelect: null,
createDialog: function() {
function ProcessDialog( config ) {
ProcessDialog.super.call( this, config );
}
OO.inheritClass( ProcessDialog, OO.ui.ProcessDialog );
ProcessDialog.static.name = 'watchcatelemsDialog';
ProcessDialog.static.title = 'Obserwowanie elementów kategorii';
ProcessDialog.static.actions = [
{action: 'watch', label: 'Obserwuj', flags: 'progressive'},
{action: 'unwatch', label: 'Przestań obserwować', flags: 'destructive'},
{label: 'Zamknij', flags: 'close'}
];
ProcessDialog.prototype.initialize = function () {
ProcessDialog.super.prototype.initialize.apply( this, arguments );
this.content = new OO.ui.PanelLayout( {
padded: true,
expanded: false
} );
var $textParagraph = $('<p></p>').html('Obserwuj/przestań obserwować strony znajdujące się w tej kategorii (+podkategorie do głębokości 2)');
var $depthSelect = $('<select id="depthSelect"></select>').css('vertical-align', 'middle');
$depthSelect.append('<option value="NONE">głębokość 0 (tylko ta kategoria)')
.append('<option value="1">głębokość 1')
.append('<option value="2">głębokość 2');
var $depthSelectParagraph = $('<p></p>').html("Głębokość: ").append($depthSelect);
var $statusParagraph=$('<p id="watchcatelems-status"></p>').css('font-size', '90%');
this.content.$element.append($textParagraph).append($depthSelectParagraph).append($statusParagraph);
this.$depthSelect = $depthSelect;
this.$body.append( this.content.$element );
};
var that = this;
ProcessDialog.prototype.getActionProcess = function ( action ) {
if ( action ) {
return new OO.ui.Process( () => {
if (action=='watch' || action=='unwatch') that.process(action, this.$depthSelect.val());
this.close( {
action: action
} );
} );
}
// Fallback to parent handler.
return ProcessDialog.super.prototype.getActionProcess.call( this, action );
};
// Get dialog height.
ProcessDialog.prototype.getBodyHeight = function () {
return this.content.$element.outerHeight( true );
};
var windowManager = new OO.ui.WindowManager();
$( document.body ).append( windowManager.$element );
var processDialog = new ProcessDialog();
windowManager.addWindows( [ processDialog ] );
windowManager.openWindow( processDialog );
},
process: function(action, depth) {
var watch = action == "watch";
if(depth==="NONE")
{
$('#watchcatelems-status').html('Skrypt pracuje, proszę czekać...<br />(1/1) ' +mw.config.get('wgPageName')+'...');
WatchCatElems2.watch(mw.config.get('wgPageName'), watch);
}
else
{
var listOfSubCats = [];
listOfSubCats = WatchCatElems2.getSubCats(listOfSubCats, depth);
if(listOfSubCats!==null)
{
$('#watchcatelems-status').html('('+1+'/'+(listOfSubCats.length+1)+') '+mw.config.get('wgPageName')+'...');
WatchCatElems2.watch(mw.config.get('wgPageName'), watch);
for(var i=0;i<listOfSubCats.length; i++)
{
$('#watchcatelems-status').html('Skrypt pracuje, proszę czekać...<br />('+(i+1)+'/'+(listOfSubCats.length+1)+') ' + listOfSubCats[i].replace(/_/g, ' ')+'...');
WatchCatElems2.watch(listOfSubCats[i], watch);
}
}
else
{
$('#watchcatelems-status').html('Skrypt pracuje, proszę czekać...<br />(1/1) ' +mw.config.get('wgPageName')+'...');
WatchCatElems2.watch(mw.config.get('wgPageName'), watch);
}
}
//po skończonym działaniu
if(watch===true)
{
mw.notify("Wszystkie elementy tej kategorii zostały dodane do Twojej listy obserwowanych!", {autoHideSeconds: 3});
}
else
{
mw.notify("Wszystkie elementy tej kategorii zostały usunięte z Twojej listy obserwowanych!", {autoHideSeconds: 3});
}
//this.processDialog.close();
},
getSubCats: function(listOfSubCats, depth)
{
var Options='{"depth":'+depth+'}';
var regexp = /title="(.*?)">/gi;
this.api.defaults.ajax.async = false;
this.api.get({action: 'categorytree', category: mw.config.get('wgPageName'), options: Options}).done(function(data)
{
data=decodeURIComponent(data.categorytree['*']);
listOfSubCats=data.match(regexp);
});
if(listOfSubCats===null)
return null;
for(var i=0; i<listOfSubCats.length;i++)
listOfSubCats[i]=listOfSubCats[i].replace(/(title="|">)/g, '');
return listOfSubCats;
},
watch: function(catTitle, watch)
{
var kont="";
var params;
do {
params = {action: 'watch', format: 'json', generator: 'categorymembers',
gcmtitle: catTitle, gcmcontinue:kont, gcmlimit: 500};
if(watch === false) params.unwatch = true;
this.api.postWithToken('watch', params).done(function(data)
{
if(data["continue"]===undefined) //ten sposób na sprawdzanie istnienia działa
kont="";
else
kont=data.continue.gcmcontinue;
});
}while(kont!=="");
},
};
$(document).ready(function () { mw.loader.using(['mediawiki.api', 'oojs-ui'], function()
{
if(mw.config.get('wgNamespaceNumber') == 14 && mw.config.get('wgArticleId') > 0)
{
// Create portlet link
switch(mw.user.options.get( 'skin' ))
{
case 'vector':
case 'vector-2022':
WatchCatElems2.portlet = 'p-views';
break;
case 'monobook':
case 'modern':
WatchCatElems2.portlet = 'p-cactions';
break;
case 'cologneblue':
WatchCatElems2.portlet = 'footer-navigation';
break;
case 'minerva':
WatchCatElems2.portlet = 'page-actions';
break;
}
var portletLink = mw.util.addPortletLink(WatchCatElems2.portlet, '#', '👁', 'pt-watchcat-elems', "Dodaj/usuń wszystkie elementy tej kategorii do obserwowanych", null, "#ca-watch");
$( portletLink ).click( function ( e ) {
e.preventDefault();
WatchCatElems2.createDialog();
});
}
});});