conditional_expression.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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 VariableValueMenuManagement from './variable_value_menu';
  8. export function renderExpression (command, expression, function_obj, initial_el_to_render) {
  9. console.log("Rendered! :)");
  10. if (expression.expression == null || expression.expression.length < 1) {
  11. renderStartMenu(command, expression, function_obj, initial_el_to_render);
  12. } else {
  13. var main_div = $('<div class="expression_elements"></div>');
  14. switch (expression.expression.type) {
  15. case Models.EXPRESSION_TYPES.exp_logic:
  16. renderLogicExpression(command, expression, expression.expression, function_obj, main_div);
  17. break;
  18. case Models.EXPRESSION_TYPES.exp_arithmetic:
  19. renderArithmeticExpression(command, expression, expression.expression, function_obj, main_div);
  20. break;
  21. }
  22. initial_el_to_render.append(main_div);
  23. }
  24. }
  25. function renderArithmeticOperator () {
  26. }
  27. function renderLogicOperator (command, all_expression, expression_logic, logic_operator, function_obj, element_to_append) {
  28. //export const ARITHMETIC_COMPARISON = Object.freeze({greater_than:"greater_than", less_than:"less_than", equals_to:"equals_to", not_equals_to:"not_equals_to", greater_than_or_equals_to:"greater_than_or_equals_to", less_than_or_equals_to:"less_than_or_equals_to"});
  29. var menu_operator = $('<div class="ui dropdown"><div class="text"></div><i class="dropdown icon"></i></div>');
  30. menu_operator.dropdown({
  31. values: [
  32. {
  33. name : '==',
  34. value : Models.LOGIC_COMPARISON.equals_to,
  35. selected : (logic_operator == Models.LOGIC_COMPARISON.equals_to)
  36. },
  37. {
  38. name : '!=',
  39. value : Models.LOGIC_COMPARISON.not_equals_to,
  40. selected : (logic_operator == Models.LOGIC_COMPARISON.not_equals_to)
  41. },
  42. {
  43. name : '&&',
  44. value : Models.LOGIC_COMPARISON.and,
  45. selected : (logic_operator == Models.LOGIC_COMPARISON.and)
  46. },
  47. {
  48. name : '||',
  49. value : Models.LOGIC_COMPARISON.or,
  50. selected : (logic_operator == Models.LOGIC_COMPARISON.or)
  51. }
  52. ],
  53. onChange: function(value, text, $selectedItem) {
  54. expression_logic.operator = value;
  55. }
  56. })
  57. ;
  58. element_to_append.append(menu_operator);
  59. }
  60. function renderLogicExpression (command, all_expression, expression_logic, function_obj, element_to_append) {
  61. var exp_el_par_1 = $('<div class="expression_element"> ( </div>');
  62. var exp_el_expr_el_1 = $('<div class="expression_element"></div>');
  63. var exp_el_expr_operand = $('<div class="expression_element"></div>');
  64. var exp_el_expr_el_2 = $('<div class="expression_element"></div>');
  65. var exp_el_par_2 = $('<div class="expression_element"> ) </div>');
  66. if (expression_logic.first_operand.type == Models.EXPRESSION_TYPES.exp_logic) {
  67. renderLogicExpression(command, all_expression, expression_logic.first_operand, function_obj, exp_el_expr_el_1);
  68. } else if (expression_logic.first_operand.type == Models.EXPRESSION_TYPES.exp_arithmetic) {
  69. renderArithmeticExpression(command, all_expression, expression_logic.first_operand, function_obj, exp_el_expr_el_1);
  70. } else { // var_value:
  71. VariableValueMenuManagement.renderMenu(command, expression_logic.first_operand, exp_el_expr_el_1, function_obj);
  72. }
  73. if (expression_logic.second_operand.type == Models.EXPRESSION_TYPES.exp_logic) {
  74. renderLogicExpression(command, all_expression, expression_logic.second_operand, function_obj, exp_el_expr_el_2);
  75. } else if (expression_logic.second_operand.type == Models.EXPRESSION_TYPES.exp_arithmetic) {
  76. renderArithmeticExpression(command, all_expression, expression_logic.second_operand, function_obj, exp_el_expr_el_2);
  77. } else { // var_value:
  78. VariableValueMenuManagement.renderMenu(command, expression_logic.second_operand, exp_el_expr_el_2, function_obj);
  79. }
  80. renderLogicOperator(command, all_expression, expression_logic, expression_logic.operator, function_obj, exp_el_expr_operand);
  81. element_to_append.append(exp_el_par_1);
  82. element_to_append.append(exp_el_expr_el_1);
  83. element_to_append.append(exp_el_expr_operand);
  84. element_to_append.append(exp_el_expr_el_2);
  85. element_to_append.append(exp_el_par_2);
  86. }
  87. function renderArithmeticExpression (command, all_expression, expression_arithmetic, function_obj, element_to_append) {}
  88. function renderStartMenu (command, expression, function_obj, initial_el_to_render) {
  89. var start_menu = '';
  90. start_menu += '<div class="ui dropdown"><div class="text"></div><i class="dropdown icon"></i><div class="menu">';
  91. start_menu += '<div class="item" data-exp="'+Models.EXPRESSION_TYPES.exp_logic+'">'+LocalizedStrings.getUI('text_logic_expression')+'</div>';
  92. start_menu += '<div class="item" data-exp="'+Models.EXPRESSION_TYPES.exp_arithmetic+'">'+LocalizedStrings.getUI('text_arithmetic_expression')+'</div>';
  93. start_menu += '</div></div>';
  94. start_menu = $(start_menu);
  95. start_menu.dropdown({
  96. onChange: function(value, text, $selectedItem) {
  97. switch ($selectedItem.data('exp')) {
  98. case Models.EXPRESSION_TYPES.exp_logic:
  99. expression.expression =
  100. new Models.LogicExpression(false,
  101. new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.all, null, null, null, true),
  102. new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.all, null, null, null, true),
  103. Models.LOGIC_COMPARISON.equals_to);
  104. break;
  105. case Models.EXPRESSION_TYPES.exp_arithmetic:
  106. expression.expression =
  107. new Models.ArithmeticExpression(
  108. new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.all, null, null, null, true),
  109. new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.all, null, null, null, true),
  110. Models.ARITHMETIC_COMPARISON.less_than);
  111. break;
  112. }
  113. initial_el_to_render.html('');
  114. renderExpression(command, expression, function_obj, initial_el_to_render);
  115. }
  116. });
  117. initial_el_to_render.append(start_menu);
  118. }