bpmn-js-properties-panel
Version:
A simple properties panel for bpmn-js
82 lines (63 loc) • 3.05 kB
JavaScript
;
var domQuery = require('min-dom/lib/query');
var entryFieldDescription = require('./EntryFieldDescription');
var textField = function(options, defaultParameters) {
// Default action for the button next to the input-field
var defaultButtonAction = function(element, inputNode) {
var input = domQuery('input[name="' + options.modelProperty + '"]', inputNode);
input.value = '';
return true;
};
// default method to determine if the button should be visible
var defaultButtonShow = function(element, inputNode) {
var input = domQuery('input[name="' + options.modelProperty + '"]', inputNode);
return input.value !== '';
};
var resource = defaultParameters,
label = options.label || resource.id,
dataValueLabel = options.dataValueLabel,
buttonLabel = ( options.buttonLabel || 'X' ),
actionName = ( typeof options.buttonAction != 'undefined' ) ? options.buttonAction.name : 'clear',
actionMethod = ( typeof options.buttonAction != 'undefined' ) ? options.buttonAction.method : defaultButtonAction,
showName = ( typeof options.buttonShow != 'undefined' ) ? options.buttonShow.name : 'canClear',
showMethod = ( typeof options.buttonShow != 'undefined' ) ? options.buttonShow.method : defaultButtonShow,
canBeDisabled = !!options.disabled && typeof options.disabled === 'function',
canBeHidden = !!options.hidden && typeof options.hidden === 'function',
description = options.description;
resource.html =
'<label for="camunda-' + resource.id + '" ' +
(canBeDisabled ? 'data-disable="isDisabled" ' : '') +
(canBeHidden ? 'data-show="isHidden" ' : '') +
(dataValueLabel ? 'data-value="' + dataValueLabel + '"' : '') + '>'+ label +'</label>' +
'<div class="bpp-field-wrapper" ' +
(canBeDisabled ? 'data-disable="isDisabled"' : '') +
(canBeHidden ? 'data-show="isHidden"' : '') +
'>' +
'<input id="camunda-' + resource.id + '" type="text" name="' + options.modelProperty+'" ' +
' />' +
'<button class="' + actionName + '" data-action="' + actionName + '" data-show="' + showName + '" ' +
(canBeDisabled ? 'data-disabled="isDisabled"' : '') +
(canBeHidden ? ' data-show="isHidden"' : '') + '>' +
'<span>' + buttonLabel + '</span>' +
'</button>' +
'</div>';
// add description below text input entry field
if (description) {
resource.html += entryFieldDescription(description);
}
resource[actionName] = actionMethod;
resource[showName] = showMethod;
if (canBeDisabled) {
resource.isDisabled = function() {
return options.disabled.apply(resource, arguments);
};
}
if (canBeHidden) {
resource.isHidden = function() {
return !options.hidden.apply(resource, arguments);
};
}
resource.cssClasses = ['bpp-textfield'];
return resource;
};
module.exports = textField;