Script.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. 'use strict';
  2. var domQuery = require('min-dom').query,
  3. escapeHTML = require('../../../../Utils').escapeHTML,
  4. utils = require('../../../../Utils');
  5. function getScriptType(node) {
  6. return utils.selectedType('select[name=scriptType]', node.parentElement);
  7. }
  8. module.exports = function(scriptLanguagePropName, scriptValuePropName, isFormatRequired, translate) {
  9. return {
  10. template:
  11. '<div class="bpp-row bpp-textfield">' +
  12. '<label for="cam-script-format">' + escapeHTML(translate('Script Format')) + '</label>' +
  13. '<div class="bpp-field-wrapper">' +
  14. '<input id="cam-script-format" type="text" name="scriptFormat" />' +
  15. '<button class="clear" data-action="script.clearScriptFormat" data-show="script.canClearScriptFormat">' +
  16. '<span>X</span>' +
  17. '</button>' +
  18. '</div>' +
  19. '</div>' +
  20. '<div class="bpp-row">' +
  21. '<label for="cam-script-type">' + escapeHTML(translate('Script Type')) + '</label>' +
  22. '<div class="bpp-field-wrapper">' +
  23. '<select id="cam-script-type" name="scriptType" data-value>' +
  24. '<option value="script" selected>' + escapeHTML(translate('Inline Script')) + '</option>' +
  25. '<option value="scriptResource">' + escapeHTML(translate('External Resource')) + '</option>' +
  26. '</select>' +
  27. '</div>' +
  28. '</div>' +
  29. '<div class="bpp-row bpp-textfield">' +
  30. '<label for="cam-script-resource-val" data-show="script.isScriptResource">' + escapeHTML(translate('Resource')) + '</label>' +
  31. '<div class="bpp-field-wrapper" data-show="script.isScriptResource">' +
  32. '<input id="cam-script-resource-val" type="text" name="scriptResourceValue" />' +
  33. '<button class="clear" data-action="script.clearScriptResource" data-show="script.canClearScriptResource">' +
  34. '<span>X</span>' +
  35. '</button>' +
  36. '</div>' +
  37. '</div>' +
  38. '<div class="bpp-row">' +
  39. '<label for="cam-script-val" data-show="script.isScript">' + escapeHTML(translate('Script')) + '</label>' +
  40. '<div class="bpp-field-wrapper" data-show="script.isScript">' +
  41. '<textarea id="cam-script-val" type="text" name="scriptValue"></textarea>' +
  42. '</div>'+
  43. '</div>',
  44. get: function(element, bo) {
  45. var values = {};
  46. // read values from xml:
  47. var boScriptResource = bo.get('activiti:resource'),
  48. boScript = bo.get(scriptValuePropName),
  49. boScriptFormat = bo.get(scriptLanguagePropName);
  50. if (typeof boScriptResource !== 'undefined') {
  51. values.scriptResourceValue = boScriptResource;
  52. values.scriptType = 'scriptResource';
  53. } else {
  54. values.scriptValue = boScript;
  55. values.scriptType = 'script';
  56. }
  57. values.scriptFormat = boScriptFormat;
  58. return values;
  59. },
  60. set: function(element, values, containerElement) {
  61. var scriptFormat = values.scriptFormat,
  62. scriptType = values.scriptType,
  63. scriptResourceValue = values.scriptResourceValue,
  64. scriptValue = values.scriptValue;
  65. // init update
  66. var update = {
  67. 'activiti:resource': undefined
  68. };
  69. update[scriptValuePropName] = undefined;
  70. update[scriptLanguagePropName] = undefined;
  71. if (isFormatRequired) {
  72. // always set language
  73. update[scriptLanguagePropName] = scriptFormat || '';
  74. } else
  75. // set language only when scriptFormat has a value
  76. if (scriptFormat !== '') {
  77. update[scriptLanguagePropName] = scriptFormat;
  78. }
  79. // set either inline script or resource
  80. if ('scriptResource' === scriptType) {
  81. update['activiti:resource'] = scriptResourceValue || '';
  82. } else {
  83. update[scriptValuePropName] = scriptValue || '';
  84. }
  85. return update;
  86. },
  87. validate: function(element, values) {
  88. var validationResult = {};
  89. if (values.scriptType === 'script' && !values.scriptValue) {
  90. validationResult.scriptValue = translate('Must provide a value');
  91. }
  92. if (values.scriptType === 'scriptResource' && !values.scriptResourceValue) {
  93. validationResult.scriptResourceValue = translate('Must provide a value');
  94. }
  95. if (isFormatRequired && (!values.scriptFormat || values.scriptFormat.length === 0)) {
  96. validationResult.scriptFormat = translate('Must provide a value');
  97. }
  98. return validationResult;
  99. },
  100. clearScriptFormat: function(element, inputNode, btnNode, scopeNode) {
  101. domQuery('input[name=scriptFormat]', scopeNode).value='';
  102. return true;
  103. },
  104. canClearScriptFormat: function(element, inputNode, btnNode, scopeNode) {
  105. var input = domQuery('input[name=scriptFormat]', scopeNode);
  106. return input.value !== '';
  107. },
  108. clearScriptResource: function(element, inputNode, btnNode, scopeNode) {
  109. domQuery('input[name=scriptResourceValue]', scopeNode).value='';
  110. return true;
  111. },
  112. canClearScriptResource: function(element, inputNode, btnNode, scopeNode) {
  113. var input = domQuery('input[name=scriptResourceValue]', scopeNode);
  114. return input.value !== '';
  115. },
  116. clearScript: function(element, inputNode, btnNode, scopeNode) {
  117. domQuery('textarea[name=scriptValue]', scopeNode).value='';
  118. return true;
  119. },
  120. canClearScript: function(element, inputNode, btnNode, scopeNode) {
  121. var input = domQuery('textarea[name=scriptValue]', scopeNode);
  122. return input.value !== '';
  123. },
  124. isScriptResource: function(element, inputNode, btnNode, scopeNode) {
  125. var scriptType = getScriptType(scopeNode);
  126. return scriptType === 'scriptResource';
  127. },
  128. isScript: function(element, inputNode, btnNode, scopeNode) {
  129. var scriptType = getScriptType(scopeNode);
  130. return scriptType === 'script';
  131. }
  132. };
  133. };