variables.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. // Imports
  2. import {htmlOlCommandsVariables, generateUUID} from './../../main';
  3. import {getVariableTypeByValue, htmlVariableScheme, variableScheme, variableTypes} from "./variables-schemes";
  4. import {deleteOperationByVariable} from "../operations/operations";
  5. // Imports
  6. export const variables = [];
  7. let variablesIndex = 0;
  8. // Creating variable
  9. export function createVariable () {
  10. const variable = Object.assign({}, variableScheme);
  11. variable.hash = generateUUID().replaceAll('-', '');
  12. variable.name = 'var' + variablesIndex;
  13. variable.type = variableTypes[0];
  14. variable.value = variable.type.defaultValue;
  15. variables.push(variable);
  16. variablesIndex++;
  17. let htmlVariable = htmlVariableScheme();
  18. htmlVariable = htmlVariable.replaceAll('<variableId>', variable.hash);
  19. htmlVariable = htmlVariable.replaceAll('<variableName>', variable.name);
  20. htmlOlCommandsVariables.insertAdjacentHTML('beforeend', htmlVariable);
  21. document.getElementById(`variable${variable.hash}Type`).addEventListener('change', ev => {
  22. const variableHash = ev.target.getAttribute('variable-id');
  23. updateVariable(variableHash);
  24. });
  25. document.getElementById(`variable${variable.hash}Name`).addEventListener('change', ev => {
  26. const variableHash = ev.target.getAttribute('variable-id');
  27. updateVariable(variableHash);
  28. });
  29. document.getElementById(`variable${variable.hash}Value`).addEventListener('change', ev => {
  30. const variableHash = ev.target.getAttribute('variable-id');
  31. updateVariable(variableHash);
  32. });
  33. document.getElementById(`variable${variable.hash}Delete`).addEventListener('click', ev => {
  34. const variableHash = ev.target.getAttribute('variable-id');
  35. deleteVariable(variableHash);
  36. });
  37. updateResume(variable.hash);
  38. updateAllVariableSelect();
  39. // Changing focus to the variable type after creation for screen readers
  40. document.getElementById(`variable${variable.hash}Type`).focus();
  41. }
  42. // *********************************************************************************
  43. // Updating variable
  44. // *********************************************************************************
  45. let variableName;
  46. let variableType;
  47. let variableValue;
  48. function updateVariable (hash) {
  49. const variable = getVariableByHash(hash);
  50. variableName = document.getElementById(`variable${hash}Name`).value;
  51. if (variable.name !== variableName) {
  52. variable.name = variableName;
  53. }
  54. variableType = getVariableTypeByValue(document.getElementById(`variable${hash}Type`).value);
  55. if (variable.type !== variableType) {
  56. variable.type = variableType;
  57. document.getElementById(`variable${hash}Value`).type = variable.type.htmlType;
  58. document.getElementById(`variable${hash}Value`).value = variable.type.defaultValue;
  59. }
  60. variableValue = document.getElementById(`variable${hash}Value`).value;
  61. if (variable.value !== variableValue) {
  62. variable.value = variableValue;
  63. }
  64. updateResume(hash);
  65. }
  66. // *********************************************************************************
  67. // Deleting variable
  68. export function deleteVariable (hash) {
  69. const variable = getVariableByHash(hash);
  70. document.getElementById(`variable${hash}Li`).remove();
  71. deleteOperationByVariable(variable);
  72. variables.splice(variables.indexOf(variable), 1);
  73. updateAllVariableSelect();
  74. }
  75. // Deleting all variable
  76. export function deleteAllVariable () {
  77. for (let i = 0; i < variables.length; i++) {
  78. document.getElementById(`variable${variables[i].hash}Li`).remove();
  79. }
  80. variables.length = 0
  81. }
  82. // ***********************************************************************
  83. // Updating variable resume
  84. // ***********************************************************************
  85. function updateResume (hash) {
  86. document.getElementById(`variable${hash}Resume`).setAttribute('title', generateResume(hash));
  87. }
  88. function generateResume (hash) {
  89. const variable = getVariableByHash(hash);
  90. return `${variable.type.name} ${variable.name} recebe ${variable.value}`;
  91. }
  92. // ***********************************************************************
  93. // Update all variable select
  94. // **********************************************************************
  95. function updateAllVariableSelect () {
  96. const variableSelects = document.getElementsByName('variableSelect');
  97. let variablesSelect = variables.length === 0 ? `<option>N/A</option>` : ``;
  98. for (let i = 0; i < variables.length; i++) {
  99. variablesSelect += `<option value="${variables[i].hash}">${variables[i].name}</option>`
  100. }
  101. for (let i = 0; i < variableSelects.length; i++) {
  102. const selectedOption = variableSelects[i].value;
  103. variableSelects[i].innerHTML = variablesSelect;
  104. variableSelects[i].value = selectedOption;
  105. }
  106. }
  107. // *********************************************************************************
  108. // Util
  109. // *********************************************************************************
  110. export function getVariableByHash (hash) {
  111. for (let i = 0; i < variables.length; i++) {
  112. if (variables[i].hash === hash)
  113. return variables[i];
  114. }
  115. return null;
  116. }
  117. // *********************************************************************************