50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
/**
|
|
* @typedef {import('didi').Injector} Injector
|
|
*/
|
|
|
|
/**
|
|
* A service that provides rules for certain diagram actions.
|
|
*
|
|
* The default implementation will hook into the {@link CommandStack}
|
|
* to perform the actual rule evaluation. Make sure to provide the
|
|
* `commandStack` service with this module if you plan to use it.
|
|
*
|
|
* Together with this implementation you may use the {@link RuleProvider}
|
|
* to implement your own rule checkers.
|
|
*
|
|
* This module is ment to be easily replaced, thus the tiny foot print.
|
|
*
|
|
* @param {Injector} injector
|
|
*/
|
|
export default function Rules(injector) {
|
|
this._commandStack = injector.get('commandStack', false);
|
|
}
|
|
|
|
Rules.$inject = [ 'injector' ];
|
|
|
|
|
|
/**
|
|
* Returns whether or not a given modeling action can be executed
|
|
* in the specified context.
|
|
*
|
|
* This implementation will respond with allow unless anyone
|
|
* objects.
|
|
*
|
|
* @param {string} action the action to be checked
|
|
* @param {Object} [context] the context to check the action in
|
|
*
|
|
* @return {boolean} returns true, false or null depending on whether the
|
|
* operation is allowed, not allowed or should be ignored.
|
|
*/
|
|
Rules.prototype.allowed = function(action, context) {
|
|
var allowed = true;
|
|
|
|
var commandStack = this._commandStack;
|
|
|
|
if (commandStack) {
|
|
allowed = commandStack.canExecute(action, context);
|
|
}
|
|
|
|
// map undefined to true, i.e. no rules
|
|
return allowed === undefined ? true : allowed;
|
|
}; |