User:MusikAnimal/userRightsManager.js: Difference between revisions

Content deleted Content added
No edit summary
No edit summary
Line 40:
e.preventDefault();
userName = $(this).parents('.plainlinks').find('a').eq(0).text();
permaLink = '[[Special:PermaLink/' + revisionId + '#User:' + userName + ']]';
showDialog();
});
Line 47 ⟶ 46:
function showDialog() {
Dialog = function(config) {
this.hasBeenSubmitted = false;
Dialog.super.call(this, config);
};
Line 60 ⟶ 58:
};
Dialog.prototype.getBodyHeight = function() {
return 120140;
};
Dialog.prototype.initialize = function() {
Line 72 ⟶ 70:
this.editPanel.$element.append( this.editFieldset.$element );
this.rightsChangeSummaryInput = new OO.ui.TextInputWidget({
value: 'Requested at [[WP:PERM]]; ' + permaLink
});
this.closingRemarksInput = new OO.ui.TextInputWidget({
value: '{{done}} ~~~~'
});
this.watchTalkPageCheckbox = new OO.ui.CheckboxInputWidget({
selected: false
});
this.editFieldset.addItems( [
new OO.ui.FieldLayout( this.rightsChangeSummaryInput, {
label: 'Summary'
} ),
new OO.ui.FieldLayout( this.closingRemarksInput, {
label: 'Closing remarks'
} ),
new OO.ui.FieldLayout(this.watchTalkPageCheckbox, {
label: 'Watch user talk page'
})
] );
this.submitPanel = new OO.ui.PanelLayout( {
Line 104 ⟶ 108:
} );
this.$body.append( this.stackLayout.$element );
};
 
Dialog.prototype.getReadyProcess = function( data ) {
data = data || {};
return Dialog.super.prototype.getReadyProcess.call( this, data ).next( function() {
if ( this.hasBeenSubmitted ) {
this.actions.setAbilities( { submit: false } );
}
}, this );
};
 
Dialog.prototype.onSubmit = function() {
var self = this, promiseCount = 3;
 
self.hasBeenSubmitted = true; // FIXME: may not need this
self.actions.setAbilities( { submit: false } );
 
addFieldaddPromise = function( field, label, promise ) {
var promises = [
assignPermission(this.rightsChangeSummaryInput.getValue() + tagLine),
markAsDone('\n::' + this.closingRemarksInput.getValue()),
issueTemplate()
];
 
addField = function( field, label, promise ) {
if ( !promise ) return;
self.pushPending();
field.setLabel( label );
self.submitFieldset.addItems( [field] );
promise.done(function() {
field.$field.append( $( '<span>' )
Line 137 ⟶ 122:
.prop('style', 'position:relative; top:0.5em; color: #009000; font-weight: bold')
);
}).fail(function( id, obj ) {
if ( obj && obj.error && obj.error.info ) {
field.$field.append( $( '<span>' )
Line 144 ⟶ 129:
);
} else {
field.$field.append( $( '<span>' )
.text('An unknown error occurred.');
.prop('style', 'position:relative; top:0.5em; color: #cc0000; font-weight: bold')
}, 2000 );
}
}).always( function() {
promiseCount--; // FIXME: maybe we could use a self.isPending() or something
self.popPending();
 
if (promiseCount === 0) {
setTimeout(function() {
___location.reload(true);
}, 1000);
data = data || {};
});
 
ifreturn ( !promise ) return;
};
 
self.markAsDoneProgressField.setLabel( 'Marking request as done...', );
addField(
self.submitFieldset.addItems( [fieldself.markAsDoneProgressField] );
self.changeRightsProgressField,
self.changeRightsProgressField.setLabel( 'Assigning rights...', );
self.submitFieldset.addItems( [self.changeRightsProgressField] );
promises[0]
self.issueTemplateProgressField.setLabel( 'Issuing template...' );
);
self.submitFieldset.addItems( [self.issueTemplateProgressField] );
addField(
 
addFieldaddPromise(
self.markAsDoneProgressField,
markAsDone('\n::' + this.closingRemarksInput.getValue()),
$.when(promises).donethen( function(data) {
promises[0]addPromise(
self.changeRightsProgressField,
assignPermission(
assignPermission( this.rightsChangeSummaryInput.getValue() + tagLine),
data.edit.newrevid
} );
);
}, .bind(this ));
addFieldaddPromise(
self.issueTemplateProgressField,
issueTemplate(this.watchTalkPageCheckbox.isSelected())
'Issuing template...',
promises[1]
);
addField(
self.markAsDoneProgressField,
'Marking request as done...',
promises[2]
);
 
$.when(promises).done( function() {
setTimeout(function() {
___location.reload(true);
}, 2000);
});
$.when(promises).fail( function() {
self.popPending();
} );
self.stackLayout.setItem( self.submitPanel );
};
Line 198 ⟶ 195:
}
 
function assignPermission(summary, revId) {
console.log('Assigning permission');
permaLink = '[[Special:PermaLink/' + revisionIdrevId + '#User:' + userName + ']]';
return api.postWithToken( 'userrights', {
action: 'userrights',
Line 204 ⟶ 203:
user: userName,
add: permissionNames[permission],
reason: summary + '; ' + permaLink
});
}
 
function markAsDone(closingRemarks) {
console.log('Marking as done');
var sectionNode = document.getElementById('User:' + userName),
sectionNumber = $(sectionNode).siblings('.mw-editsection').find('a').prop('href').match(/section=(\d)/)[1];
Line 218:
summary: 'done' + tagLine,
appendtext: closingRemarks
} );
}
 
function issueTemplate(optionswatch) {
console.log('Issuing template...',);
options = options || {};
var talkPage = 'User talk:' + userName;
return api.postWithToken( 'edit', {
format: 'json',
action: 'edit',
title: 'User talk:' + userNametalkPage,
section: 'new',
summary: permission + ' granted per ' + permaLink + tagLine,
text: '{{subst:' + templates[permission] + '}}',
sectiontitle: permission + ' granted',
watchlist: options.watch ? 'watch' : 'unwatch'
} );
}
})();