workspace-variables.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. let creatingVariable = false;
  2. /*
  3. * Workspace position modal attributes
  4. */
  5. let $workspacePositionModal = $("#workspacePositionModal");
  6. let $workspacePositionModalBody = $("#workspacePositionModalBody");
  7. let $workspacePositionModalPositionsSelect = $("#workspacePositionModalPositionsSelect");
  8. let workspaceToBeAddId = null;
  9. let workspaceToBeAddVariable = null;
  10. let workspaceToBeAddAfterComponent = null;
  11. function addVariable(variable = {name: "", type: dataTypes.String, value: ""}, id = null) {
  12. if (creatingVariable === false) {
  13. // Blocking future variable creation until finish the current creation
  14. creatingVariable = true;
  15. let html = "";
  16. html += `<div class="col-3 p-2" id="variableCreationDiv">`;
  17. html += ` <div class="card">`;
  18. html += ` <div class="card-header">`;
  19. html += ` <h3>Adicionar variável</h3>`;
  20. html += ` </div>`;
  21. html += ` <div class="card-body">`;
  22. html += ` <div class="row">`;
  23. html += ` <div class="col-3">`;
  24. html += ` <label for="variableName">Nome: </label>`;
  25. html += ` </div>`;
  26. html += ` <div class="col-9">`;
  27. html += ` <input id="variableName" type="text" value="${variable.name}">`;
  28. html += ` </div>`;
  29. html += ` </div>`;
  30. html += ` <div class="row">`;
  31. html += ` <div class="col-3">`;
  32. html += ` <label for="variableType">Tipo: </label>`;
  33. html += ` </div>`;
  34. html += ` <div class="col-9">`;
  35. html += ` <select id="variableType">`;
  36. // Filling data type select with available data types in {data-types.js}
  37. for (let dataType in dataTypes) {
  38. if (dataType === variable.type)
  39. html += ` <option value="${dataType}" selected>${dataTypes[dataType]}</option>`;
  40. else
  41. html += ` <option value="${dataType}">${dataTypes[dataType]}</option>`;
  42. }
  43. html += ` </select>`;
  44. html += ` </div>`;
  45. html += ` </div>`;
  46. html += ` <div class="row">`;
  47. html += ` <div class="col-3">`;
  48. html += ` <label for="variableValue">Valor: </label>`;
  49. html += ` </div>`;
  50. html += ` <div class="col-9">`;
  51. html += ` <input id="variableValue" type="text" value="${variable.value}">`;
  52. html += ` </div>`;
  53. html += ` </div>`;
  54. html += ` </div>`;
  55. html += ` <div class="card-footer">`;
  56. html += ` <div class="row">`;
  57. html += ` <div class="col-6">`;
  58. html += ` <button type="button" class="btn btn-warning" accesskey="c" onclick="cancelAddVariable(${id})">Cancelar</button>`;
  59. html += ` </div>`;
  60. html += ` <div class="col-6">`;
  61. html += ` <button type="button" class="btn btn-info" accesskey="s" onclick="addVariableToCode({id: ${id}})">Salvar</button>`;
  62. html += ` </div>`;
  63. html += ` </div>`;
  64. html += ` </div>`;
  65. html += ` </div>`;
  66. html += `</div>`;
  67. $workspace.append(html);
  68. }
  69. }
  70. function addVariableToCode({id = null}) {
  71. let code = "";
  72. let variable = {
  73. name: $("#variableName").val(),
  74. type: $("#variableType").val(),
  75. value: $("#variableValue").val()
  76. };
  77. code = mountCodeFromVariable(variable);
  78. // Sending code to screen
  79. addCodeToScreen({id: id, code: code, variable: variable});
  80. // Removing div form for variable creation
  81. $("#variableCreationDiv").remove();
  82. // Enabling future variable creation
  83. creatingVariable = false;
  84. }
  85. function cancelAddVariable(id = null) {
  86. // Removing div form for variable creation
  87. $("#variableCreationDiv").remove();
  88. if (id != null)
  89. $(`#variableDiv${id}`).show();
  90. // Enabling future variable creation
  91. creatingVariable = false;
  92. }
  93. function editVariable(id = null, variable = {name: "", type: dataTypes.String, value: ""}) {
  94. $(`#variableDiv${id}`).hide();
  95. addVariable(variable, id);
  96. }
  97. function deleteVariable(id = null) {
  98. if (id != null)
  99. $(`#variableDiv${id}`).remove();
  100. }
  101. function addCodeToScreen({
  102. id = null,
  103. code = "Some code",
  104. variable = {name: "", type: "String", value: ""}
  105. }) {
  106. let html = ``;
  107. if (id != null) {
  108. $(`#mainCode${id}`).html(`<span>${code}</span>`);
  109. $(`#globalMenu${id}`).val(code);
  110. $(`#positionCode${id}`).html(`<button type="button" class="btn btn-dark" id="positionCode${id}" onclick='askWhereToPlaceTheVariable(${id}, ${JSON.stringify(variable)})'>Posicionar</button>`);
  111. $(`#editCode${id}`).html(`<button type="button" class="btn btn-info" id="editCodeButton${id}" onclick='editVariable(${id}, ${JSON.stringify(variable)})'>Editar</button>`);
  112. $(`#variableDiv${id}`).show();
  113. } else {
  114. html += `<div class="col-3 p-2" id="variableDiv${universalId}">`;
  115. html += ` <input type="hidden" id="globalMenu${universalId}" value="${code}"/>`;
  116. html += ` <div class="card" id="variableCard${universalId}">`;
  117. html += ` <div class="card-header" id="variableCardHeader${universalId}">`;
  118. html += ` <h4>Variável</h4>`;
  119. html += ` </div>`;
  120. html += ` <div class="card-body" id="variableCardBody${universalId}">`;
  121. html += ` <div class="row code-line" id="codeLine${universalId}">`;
  122. html += ` <div class="col-2 line-number" id="mainLine${universalId}"><span>${getCurrentMainLineNumber()}</span></div>`;
  123. html += ` <div class="col-10 line-code" id="mainCode${universalId}"><span>${code}</span></div>`;
  124. html += ` </div>`;
  125. html += ` </div>`;
  126. html += ` <div class="card-footer" id="variableCardFooter${universalId}">`;
  127. html += ` <div class="row">`;
  128. html += ` <div class="col-4" id="deleteCode${universalId}">`;
  129. html += ` <button type="button" class="btn btn-danger" id="deleteCodeButton${universalId}" onclick="deleteVariable(${universalId})">Remover</button>`;
  130. html += ` </div>`;
  131. html += ` <div class="col-4 align-self-center" id="positionCode${universalId}">`;
  132. html += ` <button type="button" class="btn btn-dark" id="positionCodeButton${universalId}" onclick='askWhereToPlaceTheVariable(${universalId}, ${JSON.stringify(variable)})'>Posicionar</button>`;
  133. html += ` </div>`;
  134. html += ` <div class="col-3" id="editCode${universalId}">`;
  135. html += ` <button type="button" class="btn btn-info" id="editCodeButton${universalId}" onclick='editVariable(${universalId}, ${JSON.stringify(variable)})'>Editar</button>`;
  136. html += ` </div>`;
  137. html += ` </div>`;
  138. html += ` </div>`;
  139. html += ` </div>`;
  140. html += `</div>`;
  141. $workspace.append(html);
  142. }
  143. // Increasing universal id
  144. universalId += 1;
  145. }
  146. function askWhereToPlaceTheVariable(id = null, variable = {name: "", type: "String", value: ""}) {
  147. if (buildAllWorkspaceComponentsSelect()) {
  148. $workspacePositionModal.modal('toggle');
  149. $workspacePositionModalPositionsSelect.focus();
  150. workspaceToBeAddId = id;
  151. workspaceToBeAddVariable = variable;
  152. } else {
  153. addVariableToMain({id: id, variable: variable});
  154. }
  155. }
  156. function buildAllWorkspaceComponentsSelect() {
  157. let allWorkspaceComponents = $(`input[type="hidden"][name="${WORKSPACE_COMPONENTS_NAME}"]`);
  158. let selectOptions = [];
  159. if (allWorkspaceComponents.length > 0) {
  160. for (let i = 0; i < allWorkspaceComponents.length; i++) {
  161. console.log(allWorkspaceComponents[i].attributes);
  162. selectOptions.push(`<option value="${allWorkspaceComponents[i].attributes.universalworkspaceid.value}">${allWorkspaceComponents[i].value}</option>`);
  163. }
  164. $workspacePositionModalPositionsSelect.empty(); // remove old options
  165. selectOptions.forEach((object, index, array) => {
  166. $workspacePositionModalPositionsSelect.append($(object));
  167. })
  168. return true;
  169. } else {
  170. return false;
  171. }
  172. }
  173. $("#workspacePositionModalAddButton").click(() => {
  174. addVariableToMain({id: workspaceToBeAddId, variable: workspaceToBeAddVariable, afterComponentWithId: $workspacePositionModalPositionsSelect.val()})
  175. // Reset variables for future use
  176. workspaceToBeAddId = null;
  177. workspaceToBeAddVariable = null;
  178. // Hide position modal
  179. $workspacePositionModal.modal('toggle');
  180. });