gplx/mediawiki/extensions/BlueSpicePermissionManager/resources/widget/SimpleMatrixRoleItem.js

106 lines
3.4 KiB
JavaScript

bs.util.registerNamespace( 'bs.permissionManager.widget' );
bs.permissionManager.widget.SimpleMatrixRoleItem = function ( cfg ) {
cfg = cfg || {};
this.role = cfg.role;
this.originalValue = !!cfg.value;
this.value = cfg.value;
this.meta = cfg.meta;
this.additionalData = cfg.additionalData || {};
this.type = this.additionalData.hasOwnProperty( 'nsId' ) ? this.additionalData.nsId : 'global';
this.matrix = cfg.matrix;
this.eventsDisabled = false;
this.input = new OO.ui.CheckboxInputWidget( {
selected: this.value,
data: Object.assign( { role: this.role.role }, this.additionalData )
} );
this.input.connect( this, {
change: function ( value ) {
if ( this.eventsDisabled ) {
return;
}
let dirty = false;
if ( this.originalValue !== value ) {
dirty = true;
}
this.input.$element.toggleClass( 'bs-permission-manager-matrix-dirty', dirty );
this.matrix.valueChange( this.role.role, this.type, value, dirty );
}
} );
let items = [
this.input,
new OO.ui.LabelWidget( {
label: this.role.label
} )
];
this.mainLabel = new OO.ui.LabelWidget( {
label: '',
classes: [ 'bs-permission-manager-simple-matrix-meta' ]
} );
this.subLabel = new OO.ui.LabelWidget( {
label: '',
classes: [ 'bs-permission-manager-simple-matrix-meta-sub' ]
} );
this.makeMeta( this.meta );
items = items.concat( [ this.mainLabel, this.subLabel ] );
cfg.items = items;
bs.permissionManager.widget.SimpleMatrixRoleItem.parent.call( this, cfg );
this.$element.addClass( 'bs-permission-manager-simple-matrix-role' );
};
OO.inheritClass( bs.permissionManager.widget.SimpleMatrixRoleItem, OO.ui.HorizontalLayout );
bs.permissionManager.widget.SimpleMatrixRoleItem.prototype.setValue = function ( value ) {
this.eventsDisabled = true;
this.input.setSelected( value );
this.eventsDisabled = false;
};
bs.permissionManager.widget.SimpleMatrixRoleItem.prototype.makeMeta = function ( meta ) {
const blocked = meta.isBlocked || false;
let label = '';
let cls = '';
let sub = '';
if ( meta.assignment === 'inherit' ) {
label = mw.msg( 'bs-permissionmanager-simple-inherited', meta.inheritFrom );
cls = 'role-granted';
}
if ( meta.assignment === 'explicit' ) {
label = mw.msg( 'bs-permissionmanager-simple-explicit' );
cls = 'role-granted';
}
if ( meta.assignment === 'global' && meta.hasOwnProperty( 'nsId' ) ) {
label = mw.msg( 'bs-permissionmanager-simple-setonwiki' );
}
if ( meta.assignment === false ) {
label = mw.msg( 'bs-permissionmanager-simple-notset' );
cls = 'role-denied';
}
if ( meta.assignment === 'explicit' || ( meta.assignment !== false && !blocked ) ) {
cls = 'role-granted';
} else if ( blocked ) {
if ( meta.dependencies ) {
label = mw.msg( 'bs-permissionmanager-simple-notset' );
cls = 'role-denied';
} else if ( meta.assignment !== 'explicit' ) {
const blocking = meta.blocking.map( ( role ) => '<b>' + role + '</b>' );
label = mw.msg( 'bs-permissionmanager-simple-blocked', blocking.join( ', ' ), blocking.length );
sub = mw.msg( 'bs-permissionmanager-simple-blocked-sub' );
cls = 'role-denied';
}
}
this.mainLabel.$element.removeClass( 'role-granted role-denied' ).addClass( cls ); // eslint-disable-line mediawiki/class-doc
this.mainLabel.setLabel( new OO.ui.HtmlSnippet( label ) );
this.subLabel.setLabel( sub );
};
bs.permissionManager.widget.SimpleMatrixRoleItem.prototype.setMeta = function ( meta ) {
this.makeMeta( meta );
};