attribution.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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. import * as VariableValueMenu from './variable_value_menu';
  8. import * as VariableValueMenuManagement from './variable_value_menu';
  9. import * as CommandsManagement from '../commands';
  10. export function createFloatingCommand () {
  11. return $('<div class="ui attribution created_element"> <i class="ui icon small arrow left"></i> <span> x = 1 + 1 </span></div>');
  12. }
  13. export function renderCommand (command, function_obj) {
  14. var el = $('<div class="ui attribution command_container"> <i class="ui icon small arrow left command_drag"></i> <i class="ui icon times red button_remove_command"></i> <i class="ui icon redo alternate blue button_refresh_attribution"></i> <div class="var_attributed"></div> <span class="text_attr_receives">'+LocalizedStrings.getUI('text_receives')+'</span> '
  15. + '<div class="expression_elements"></div> </div>');
  16. el.data('command', command);
  17. VariableValueMenu.renderMenu(command, command.variable, el.find('.var_attributed'), function_obj);
  18. command.expression.push("(");
  19. command.expression.push(new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.all, "1", null, null, true));
  20. command.expression.push(Models.ARITHMETIC_TYPES.plus);
  21. command.expression.push(new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.all, window.program_obj.functions[0].variables_list[0], null,
  22. new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.all, new Models.Variable(Types.REAL, "variable_2", 1)), null, null, true));
  23. command.expression.push(")");
  24. command.expression.push(Models.ARITHMETIC_TYPES.minus);
  25. command.expression.push(new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.all, "2", null, null, true));
  26. /*VariableValueMenu.renderMenu(command, command.expression[0].content, el.find('.expression_operand_1'), function_obj);*/
  27. addHandlers(command, function_obj, el);
  28. renderExpression(command, function_obj, el);
  29. return el;
  30. }
  31. function renderExpression(command, function_obj, el) {
  32. var expression_div = el.find('.expression_elements');
  33. expression_div.text('');
  34. for (var i = 0; i < command.expression.length; i++) {
  35. if (command.expression[i].type) {
  36. var temp = $('<div class="expression_element"></div>');
  37. temp.data('ref_element', command.expression[i]);
  38. temp.data('ref_index', i);
  39. expression_div.append(temp);
  40. VariableValueMenu.renderMenu(command, command.expression[i], temp, function_obj);
  41. } else if (command.expression[i] == "(" || command.expression[i] == ")") {
  42. var temp = $('<div class="expression_element">'+command.expression[i]+'</div>');
  43. temp.data('ref_element', command.expression[i]);
  44. temp.data('ref_index', i);
  45. expression_div.append(temp);
  46. } else {
  47. var temp = '<div class="expression_element">';
  48. switch(command.expression[i]) {
  49. case Models.ARITHMETIC_TYPES.plus:
  50. temp += '+';
  51. break;
  52. case Models.ARITHMETIC_TYPES.minus:
  53. temp += '-';
  54. break;
  55. case Models.ARITHMETIC_TYPES.multiplication:
  56. temp += '*';
  57. break;
  58. case Models.ARITHMETIC_TYPES.division:
  59. temp += '/';
  60. break;
  61. case Models.ARITHMETIC_TYPES.module:
  62. temp += '%';
  63. break;
  64. }
  65. temp += '</div>';
  66. temp = $(temp);
  67. temp.data('ref_element', command.expression[i]);
  68. temp.data('ref_index', i);
  69. expression_div.append(temp);
  70. }
  71. }
  72. }
  73. function addHandlers (command, function_obj, attribution_dom) {
  74. attribution_dom.find('.button_remove_command').on('click', function() {
  75. if (CommandsManagement.removeCommand(command, function_obj, attribution_dom)) {
  76. attribution_dom.remove();
  77. }
  78. });
  79. attribution_dom.find('.button_refresh_attribution').on('click', function() {
  80. renderExpression(command, function_obj, attribution_dom);
  81. });
  82. }
  83. export function renderMenuOperations (command, ref_object, dom_object, menu_var_or_value, function_obj, variable_selected) {
  84. /*console.log("recebido o seguinte DOM: ");
  85. console.log(dom_object);
  86. if (dom_object.hasClass('var_attributed')) {
  87. return;
  88. } else {
  89. var hier = dom_object.parentsUntil(".command_container");
  90. for (var i = 0; i < hier.length; i++) {
  91. if ($(hier[i]).hasClass('var_attributed') || $(hier[i]).hasClass('parameters_function_called')) {
  92. return;
  93. }
  94. }
  95. }
  96. dom_object.find('.context_menu_clear').remove();
  97. var menu_operations = '<div class="ui dropdown menu_operations"><div class="text"></div><i class="dropdown icon"></i><div class="menu">';
  98. for (var tm in Models.ARITHMETIC_TYPES) {
  99. menu_operations += '<div class="item" data-option="'+tm+'">'+LocalizedStrings.getUI('btn_arithmetic_' + tm)+'</div>';
  100. }
  101. menu_operations += '<div class="item" data-option="clear">'+LocalizedStrings.getUI('btn_clear')+'</div>';
  102. menu_operations += '</div></div>';
  103. menu_operations = $(menu_operations);
  104. dom_object.append(menu_operations);
  105. menu_operations.dropdown({
  106. onChange: function(value, text, $selectedItem) {
  107. switch ($($selectedItem).data('option')) {
  108. case "clear":
  109. $(dom_object).text('');
  110. VariableValueMenu.renderMenu(command, ref_object, dom_object, function_obj);
  111. break;
  112. default:
  113. createExpressionAround(command, ref_object, dom_object, function_obj);
  114. menu_operations.find('.text').text('');
  115. }
  116. }
  117. });*/
  118. }
  119. function createExpressionAround (command, ref_object, dom_object, function_obj) {
  120. $('<span> ( </span>').insertBefore(dom_object);
  121. $('<span> ) </span>').insertAfter(dom_object);
  122. VariableValueMenu.renderMenu(command, new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.all, null, null, null, true), dom_object, function_obj);
  123. }