1
0

variable_value_menu.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. import $ from 'jquery';
  2. import { Types } from '../types';
  3. import * as Models from '../ivprog_elements';
  4. import { LocalizedStrings } from '../../services/localizedStringsService';
  5. import * as GlobalsManagement from '../globals';
  6. import * as VariablesManagement from '../variables';
  7. export const VAR_OR_VALUE_TYPES = Object.freeze({only_variable: 1, only_value: 2, only_function: 3, variable_and_function: 4, variable_and_value_opt: 5,
  8. value_and_function: 6, all: 7});
  9. export function renderMenu (ref_object, dom_object, function_obj) {
  10. var menu_var_or_value = '<div class="ui dropdown menu_var_or_value_dom"><div class="text"></div><i class="dropdown icon"></i><div class="menu">';
  11. if ((ref_object.variable_and_value == VAR_OR_VALUE_TYPES.only_function) || (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.variable_and_function)
  12. || (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.value_and_function) || (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.all)) {
  13. menu_var_or_value += '<div class="item" data-option="'+VAR_OR_VALUE_TYPES.only_function+'"><i class="dropdown icon"></i>'+LocalizedStrings.getUI('btn_function')+'</div>';
  14. }
  15. if ((ref_object.variable_and_value == VAR_OR_VALUE_TYPES.only_variable) || (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.variable_and_function)
  16. || (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.variable_and_value_opt) || (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.all)) {
  17. menu_var_or_value += '<div class="item" data-option="'+VAR_OR_VALUE_TYPES.only_variable+'"><i class="dropdown icon"></i>'+LocalizedStrings.getUI('variable');
  18. menu_var_or_value += '<div class="menu menu_only_vars">';
  19. menu_var_or_value += '</div></div>';
  20. }
  21. if ((ref_object.variable_and_value == VAR_OR_VALUE_TYPES.only_value) || (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.variable_and_value_opt)
  22. || (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.value_and_function) || (ref_object.variable_and_value == VAR_OR_VALUE_TYPES.all)) {
  23. menu_var_or_value += '<div class="item" data-option="'+VAR_OR_VALUE_TYPES.only_value+'">'+LocalizedStrings.getUI('text_value')+'</div>';
  24. }
  25. menu_var_or_value += '</div></div>';
  26. menu_var_or_value = $(menu_var_or_value);
  27. $(dom_object).append(menu_var_or_value);
  28. addHandlers(ref_object, dom_object, menu_var_or_value, function_obj);
  29. addVariablesToMenu(function_obj, menu_var_or_value);
  30. }
  31. function addVariablesToMenu (function_obj, menu_var_or_value) {
  32. var sub_menu = $(menu_var_or_value).find('.menu_only_vars');
  33. $(sub_menu).text('');
  34. if (window.program_obj.globals) {
  35. for (var i = 0; i < window.program_obj.globals.length; i++) {
  36. var temp = $('<div class="item" data-option="'+VAR_OR_VALUE_TYPES.only_variable+'">' + window.program_obj.globals[i].name + ' </div>');
  37. $(temp).data('variable_reference', window.program_obj.globals[i]);
  38. $(sub_menu).append(temp);
  39. }
  40. }
  41. if (function_obj.parameters_list) {
  42. for (var i = 0; i < function_obj.parameters_list.length; i++) {
  43. var temp = $('<div class="item" data-option="'+VAR_OR_VALUE_TYPES.only_variable+'">' + function_obj.parameters_list[i].name + ' </div>');
  44. $(temp).data('variable_reference', function_obj.parameters_list[i]);
  45. $(sub_menu).append(temp);
  46. }
  47. }
  48. if (function_obj.variables_list) {
  49. for (var i = 0; i < function_obj.variables_list.length; i++) {
  50. var temp = $('<div class="item" data-option="'+VAR_OR_VALUE_TYPES.only_variable+'">' + function_obj.variables_list[i].name + ' </div>');
  51. $(temp).data('variable_reference', function_obj.variables_list[i]);
  52. $(sub_menu).append(temp);
  53. }
  54. }
  55. }
  56. function addHandlers (ref_object, dom_object, menu_var_or_value, function_obj) {
  57. $(menu_var_or_value).dropdown({
  58. onChange: function(value, text, $selectedItem) {
  59. $(dom_object).find('.var_name').remove();
  60. switch ($($selectedItem).data('option')) {
  61. case VAR_OR_VALUE_TYPES.only_function:
  62. console.log("foi função");
  63. break;
  64. case VAR_OR_VALUE_TYPES.only_value:
  65. openInputToValue(ref_object, dom_object, menu_var_or_value, function_obj);
  66. break;
  67. case VAR_OR_VALUE_TYPES.only_variable:
  68. openInputToVariable(ref_object, dom_object, menu_var_or_value, function_obj, $($selectedItem).data('variable_reference'));
  69. break;
  70. }
  71. }
  72. });
  73. }
  74. function openInputToVariable(ref_object, dom_object, menu_var_or_value, function_obj, variable_selected) {
  75. $(menu_var_or_value).find('.text').text(' ');
  76. $(dom_object).find('.menu_var_or_value_dom').remove();
  77. var variable_render = '<div class="variable_rendered"> <span class="var_name">'+variable_selected.name+'</span>';
  78. if (variable_selected.dimensions == 1) {
  79. variable_render += ' <span>[ </span> <div class="column_container"></div> <span> ]</span>';
  80. }
  81. if (variable_selected.dimensions == 2) {
  82. variable_render += ' <span>[ </span> <div class="row_container"></div> <span> ]</span> ';
  83. variable_render += ' <span>[ </span> <div class="column_container"></div> <span> ]</span>';
  84. }
  85. variable_render += '</div>';
  86. variable_render = $(variable_render);
  87. $(dom_object).append(variable_render);
  88. if (variable_selected.dimensions == 1) {
  89. var nova_var_menu = new Models.VariableValueMenu(VAR_OR_VALUE_TYPES.all);
  90. renderMenu(nova_var_menu, $(variable_render).find('.column_container'), function_obj);
  91. }
  92. if (variable_selected.dimensions == 2) {
  93. var nova_var_menu_row = new Models.VariableValueMenu(VAR_OR_VALUE_TYPES.all);
  94. renderMenu(nova_var_menu_row, $(variable_render).find('.row_container'), function_obj);
  95. var nova_var_menu_column = new Models.VariableValueMenu(VAR_OR_VALUE_TYPES.all);
  96. renderMenu(nova_var_menu_column, $(variable_render).find('.column_container'), function_obj);
  97. }
  98. var context_menu = '<div class="ui dropdown context_menu_clear"><div class="text"></div><i class="dropdown icon"></i><div class="menu">';
  99. context_menu += '<div class="item" data-clear="true">'+LocalizedStrings.getUI('btn_clear')+'</div>';
  100. context_menu += '</div></div>';
  101. context_menu = $(context_menu);
  102. $( context_menu ).insertAfter( $(dom_object).find('.variable_rendered') );
  103. $(context_menu).dropdown({
  104. onChange: function(value, text, $selectedItem) {
  105. if ($($selectedItem).data('clear')) {
  106. $(dom_object).text('');
  107. renderMenu(ref_object, dom_object, function_obj);
  108. }
  109. }
  110. });
  111. }
  112. function openInputToValue (ref_object, dom_object, menu_var_or_value, function_obj) {
  113. $(menu_var_or_value).find('.text').text(' ');
  114. var field = $('<input type="text"/>');
  115. $( field ).insertBefore($(dom_object).find('.menu_var_or_value_dom'));
  116. field.focus();
  117. $(dom_object).find('.menu_var_or_value_dom').remove();
  118. var context_menu = '<div class="ui dropdown context_menu_clear"><div class="text"></div><i class="dropdown icon"></i><div class="menu">';
  119. context_menu += '<div class="item" data-clear="true">'+LocalizedStrings.getUI('btn_clear')+'</div>';
  120. context_menu += '</div></div>';
  121. context_menu = $(context_menu);
  122. $( context_menu ).insertAfter( field );
  123. $(context_menu).dropdown({
  124. onChange: function(value, text, $selectedItem) {
  125. if ($($selectedItem).data('clear')) {
  126. $(dom_object).text('');
  127. renderMenu(ref_object, dom_object, function_obj);
  128. }
  129. }
  130. });
  131. }