1
0

generic_expression.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681
  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. import WatchJS from 'melanke-watchjs';
  9. export function renderExpression (command, function_obj, div_to_render, expression_array) {
  10. div_to_render.empty();
  11. if (command.type === Models.COMMAND_TYPES.attribution) {
  12. WatchJS.unwatch(command.variable);
  13. WatchJS.watch(command.variable, function(){
  14. renderExpression(command, function_obj, div_to_render, expression_array);
  15. }, 0);
  16. if (command.variable.content) {
  17. var types_included = [];
  18. if (command.variable.content.type == Types.INTEGER || command.variable.content.type == Types.REAL) {
  19. types_included.push(Models.EXPRESSION_TYPES.exp_arithmetic);
  20. } else if (command.variable.content.type == Types.BOOLEAN) {
  21. types_included.push(Models.EXPRESSION_TYPES.exp_conditional);
  22. types_included.push(Models.EXPRESSION_TYPES.exp_logic);
  23. types_included.push(Models.EXPRESSION_TYPES.exp_arithmetic);
  24. } else if (command.variable.content.type == Types.TEXT) {
  25. types_included.push(Models.EXPRESSION_TYPES.exp_conditional);
  26. types_included.push(Models.EXPRESSION_TYPES.exp_logic);
  27. types_included.push(Models.EXPRESSION_TYPES.exp_arithmetic);
  28. } else {
  29. console.log('NÃO RECONHECI! VEJA: ', command.variable.content.type);
  30. }
  31. renderElements(command, function_obj, div_to_render, expression_array, types_included);
  32. } else {
  33. div_to_render.text(LocalizedStrings.getUI('var_menu_select_var').toLowerCase());
  34. }
  35. }
  36. div_to_render.children('.mouse_distance').addClass('mouse_distance_hidden');
  37. div_to_render.children('.higher_element').on('mousemove', function(evt) {
  38. if (!window.open_or_close) {
  39. $(this).css('position', 'relative', '!important');
  40. $(this).children('.mouse_distance').css('opacity', '1');
  41. }
  42. });
  43. div_to_render.children('.higher_element').on('mouseout', function(evt) {
  44. if (!window.open_or_close) {
  45. $(this).css('position', 'absolute', '!important');
  46. $(this).children('.mouse_distance').css('opacity', '0');
  47. }
  48. });
  49. /*var allfilhos = div_to_render.children('.mouse_distance');
  50. console.log(allfilhos);
  51. var boudings = [];
  52. for (var i = 0; i < allfilhos.length; i++) {
  53. boudings.push(allfilhos.get(i).getBoundingClientRect());
  54. }
  55. div_to_render.children('.mouse_distance').addClass('mouse_distance_hidden');
  56. div_to_render.on('mousemove mouseenter', function(evt) {
  57. if (!window.open_or_close && command.variable.content) {
  58. var leftDistances = [];
  59. var rightDistances = [];
  60. for (var i = 0; i < allfilhos.length; i++) {
  61. var leftD = Math.abs(boudings[i].left - evt.clientX);
  62. leftDistances.push(leftD);
  63. var rightD = Math.abs(boudings[i].right - evt.clientX);
  64. rightDistances.push(rightD);
  65. }
  66. div_to_render.children('.mouse_distance').removeClass('mouse_distance_except');
  67. div_to_render.children('.mouse_distance').addClass('mouse_distance_hidden');
  68. var menorLeft = Math.min.apply(null, leftDistances);
  69. var indiceLeft = leftDistances.indexOf(menorLeft);
  70. var menorRight = Math.min.apply(null, rightDistances);
  71. var indiceRight = rightDistances.indexOf(menorRight);
  72. if (menorRight < menorLeft) {
  73. $(allfilhos.get(indiceRight)).removeClass('mouse_distance_hidden');
  74. $(allfilhos.get(indiceRight)).addClass('mouse_distance_except');
  75. } else {
  76. $(allfilhos.get(indiceLeft)).removeClass('mouse_distance_hidden');
  77. $(allfilhos.get(indiceLeft)).addClass('mouse_distance_except');
  78. }
  79. }
  80. });*/
  81. }
  82. function renderElements (command, function_obj, div_to_render, expression_array, types_included) {
  83. /*if (expression_array.length > 0) {
  84. if (!expression_array[0].type_op) {
  85. renderStartAddOperator(div_to_render, types_included, expression_array, command, function_obj, 0);
  86. }
  87. }*/
  88. var i = 0;
  89. for (i = 0; i < expression_array.length; i++) {
  90. if (expression_array[i].type == "var_value") {
  91. var div_temp = $('<div class="single_element_expression" data-index="'+i+'"></div>');
  92. if (i == 0) {
  93. if (expression_array.length > 0 && !expression_array[0].type_op) {
  94. renderStartAddOperator(div_to_render, types_included, expression_array, command, function_obj, 0);
  95. }
  96. }
  97. VariableValueMenuManagement.renderMenu(command, expression_array[i], div_temp, function_obj);
  98. div_to_render.append(div_temp);
  99. } else if (expression_array[i] == '(' || expression_array[i] == ')') {
  100. if (expression_array[i] == ')') {
  101. renderFinalAddElements(div_to_render, types_included, expression_array, command, function_obj, i);
  102. renderParenthesis(div_to_render, expression_array[i], command, function_obj, i, expression_array);
  103. } else if (expression_array[i] == '(' && !expression_array[i + 1].type_op) {
  104. renderParenthesis(div_to_render, expression_array[i], command, function_obj, i, expression_array);
  105. renderStartAddOperator(div_to_render, types_included, expression_array, command, function_obj, i + 1);
  106. } else {
  107. renderParenthesis(div_to_render, expression_array[i], command, function_obj, i, expression_array);
  108. }
  109. } else {
  110. renderOperatorMenu(command, function_obj, div_to_render, expression_array[i], types_included, i, expression_array);
  111. }
  112. }
  113. renderFinalAddElements(div_to_render, types_included, expression_array, command, function_obj, i);
  114. renderAddParenthesis(command, function_obj, div_to_render, expression_array, types_included);
  115. }
  116. window.parentheses_activate = false;
  117. window.open_or_close = null;
  118. function renderAddParenthesis (command, function_obj, div_to_render, expression_array, types_included) {
  119. var addParentheses = $('<div class="single_element_expression add_parentheses"><i class="icons"><b style="font-style: normal;">( )</b><i class="corner add icon blue" style="font-size: .6em;right: -3px;bottom: -2px;"></i></i></div>');
  120. div_to_render.append(addParentheses);
  121. addParentheses.popup({
  122. content : "Adicionar parênteses",
  123. delay: {
  124. show: 750,
  125. hide: 0
  126. }
  127. });
  128. addParentheses.on('click', function(mouse_event) {
  129. // verificar se já está ativado
  130. if (window.parentheses_activate) {
  131. return;
  132. }
  133. div_to_render.find('.usepointer').off('click');
  134. window.parentheses_activate = true;
  135. window.open_or_close = "open";
  136. div_to_render.find('.dropdown').addClass('disabled');
  137. div_to_render.find('.ghost_element').addClass('temp_class');
  138. div_to_render.find('.ghost_element').removeClass('ghost_element');
  139. var floatingObject = $('<div class="floating_parenthesis"> ( </div>');
  140. floatingObject.draggable().appendTo("body");
  141. floatingObject.css("position", "absolute");
  142. mouse_event.type = "mousedown.draggable";
  143. mouse_event.target = floatingObject[0];
  144. floatingObject.css("left", mouse_event.pageX + 10);
  145. floatingObject.css("top", mouse_event.pageY + 10);
  146. floatingObject.trigger(mouse_event);
  147. div_to_render.on('mousemove', function(evt) {
  148. var actual_target = null;
  149. if ($(evt.target).hasClass('single_element_expression')) {
  150. actual_target = $(evt.target);
  151. } else {
  152. actual_target = $(evt.target).closest('.single_element_expression');
  153. }
  154. if ($(evt.target).hasClass('temp_class')
  155. || actual_target.length < 1
  156. || actual_target.hasClass('add_parentheses')
  157. || actual_target.hasClass('rendered_parentheses')
  158. || $(evt.target).hasClass('expression_elements')) {
  159. return;
  160. }
  161. renderGhostParentheses(actual_target, command, function_obj, div_to_render, expression_array);
  162. });
  163. div_to_render.on('mouseleave', function(evt) {
  164. /*window.open_parentheses.remove();
  165. window.close_parentheses.remove();*/
  166. });
  167. var floating;
  168. $('body').on('mouseup', function(evt) {
  169. if (window.open_or_close == "open") {
  170. window.open_or_close = "close";
  171. floatingObject.remove();
  172. var comando_que_esta = $(evt.target).closest('.command_container');
  173. var comando_certo = div_to_render.closest('.command_container');
  174. if (!comando_que_esta.is(comando_certo)) {
  175. window.parentheses_activate = false;
  176. div_to_render.find('.temp_class').addClass('ghost_element');
  177. div_to_render.find('.temp_class').removeClass('temp_class');
  178. div_to_render.off('mousemove');
  179. div_to_render.off('mouseleave');
  180. $('body').off('mouseup');
  181. window.open_parentheses.remove();
  182. window.close_parentheses.remove();
  183. window.inserir_open = -1;
  184. window.inserir_close = -1;
  185. window.open_or_close = null;
  186. renderExpression(command, function_obj, div_to_render, expression_array);
  187. return;
  188. }
  189. floating = $('<div class="floating_parenthesis"> ) </div>');
  190. floating.draggable().appendTo("body");
  191. floating.css("position", "absolute");
  192. floating.css("left", evt.pageX + 10);
  193. floating.css("top", evt.pageY + 10);
  194. $('body').on('mousemove', function(evts) {
  195. floating.css("left", evts.pageX + 10);
  196. floating.css("top", evts.pageY + 10);
  197. });
  198. } else {
  199. floating.remove();
  200. div_to_render.off('mousemove');
  201. div_to_render.off('mouseleave');
  202. $('body').off('mouseup');
  203. setTimeout(function(){
  204. window.parentheses_activate = false;
  205. }, 50);
  206. var comando_que_esta = $(evt.target).closest('.command_container');
  207. var comando_certo = div_to_render.closest('.command_container');
  208. var is_correct = false;
  209. if (comando_que_esta.is(comando_certo)) {
  210. is_correct = true;
  211. }
  212. if (is_correct) {
  213. expression_array.splice(window.inserir_open, 0, '(');
  214. expression_array.splice(window.inserir_close, 0, ')');
  215. }
  216. window.inserir_open = -1;
  217. window.inserir_close = -1;
  218. window.open_or_close = null;
  219. renderExpression(command, function_obj, div_to_render, expression_array);
  220. }
  221. });
  222. });
  223. }
  224. window.open_parentheses = $('<div class="parentheses_ghost">(</div>');
  225. window.close_parentheses = $('<div class="parentheses_ghost">)</div>');
  226. window.inserir_open = -1;
  227. window.inserir_close = -1;
  228. function renderGhostParentheses (actual_target, command, function_obj, div_to_render, expression_array) {
  229. /*window.open_parentheses.remove();
  230. window.close_parentheses.remove();*/
  231. var index_in_array = actual_target.data('index');
  232. if ((expression_array[index_in_array] == '(') || (expression_array[index_in_array] == ')')) {
  233. return;
  234. }
  235. if (window.open_or_close == "close") {
  236. if (index_in_array < window.inserir_open) {
  237. return;
  238. }
  239. }
  240. // Tratando a situação quando é na primeira posição:
  241. if (index_in_array == 0) {
  242. if (expression_array[index_in_array].type == "var_value") {
  243. if (window.open_or_close == "open") {
  244. window.open_parentheses.insertBefore(actual_target);
  245. window.inserir_open = index_in_array;
  246. }
  247. /*if (expression_array.length == 1) {
  248. if (window.open_or_close == "close") {
  249. window.close_parentheses.insertAfter(actual_target);
  250. window.inserir_close = index_in_array + 2;
  251. }*/
  252. //} else {
  253. var count_opened = 0;
  254. var count_closed = 0;
  255. for (var i = 0; i < expression_array.length; i++) {
  256. if ((expression_array[i] == '(')) {
  257. count_opened ++;
  258. }
  259. if (expression_array[i] == ')') {
  260. count_closed ++;
  261. }
  262. if (count_opened != count_closed) {
  263. } else {
  264. if (count_opened > 0) {
  265. if (window.open_or_close == "close") {
  266. window.close_parentheses.insertAfter(div_to_render.find('.single_element_expression[data-index="'+i+'"]'));
  267. window.inserir_close = i + 2;
  268. }
  269. break;
  270. } else {
  271. if (expression_array[i].type == "var_value") {
  272. if (window.open_or_close == "close") {
  273. window.close_parentheses.insertAfter(div_to_render.find('.single_element_expression[data-index="'+i+'"]'));
  274. window.inserir_close = i + 2;
  275. }
  276. break;
  277. }
  278. }
  279. }
  280. }
  281. //}
  282. } else if (expression_array[index_in_array].type_op) {
  283. if (window.open_or_close == "open") {
  284. window.open_parentheses.insertBefore(actual_target);
  285. window.inserir_open = index_in_array;
  286. }
  287. var count_opened = 0;
  288. var count_closed = 0;
  289. for (var i = 1; i < expression_array.length; i++) {
  290. // $('.slide-link[data-slide="0"]')
  291. if ((expression_array[i] == '(')) {
  292. count_opened ++;
  293. }
  294. if (expression_array[i] == ')') {
  295. count_closed ++;
  296. }
  297. if (count_opened != count_closed) {
  298. } else {
  299. if (count_opened > 0) {
  300. if (expression_array[i].type == "var_value") {
  301. window.close_parentheses.insertAfter(div_to_render.find('.single_element_expression[data-index="'+i+'"]'));
  302. window.inserir_close = i + 2;
  303. }
  304. break;
  305. } else {
  306. if (expression_array[i].type == "var_value") {
  307. if (expression_array[i].type == "var_value") {
  308. window.close_parentheses.insertAfter(div_to_render.find('.single_element_expression[data-index="'+i+'"]'));
  309. window.inserir_close = i + 2;
  310. }
  311. break;
  312. }
  313. }
  314. }
  315. }
  316. }
  317. return;
  318. }
  319. // Tratando quando não é no índice 0:
  320. if (expression_array[index_in_array].type == "var_value") {
  321. if (window.open_or_close == "open") {
  322. window.open_parentheses.insertBefore(actual_target);
  323. window.inserir_open = index_in_array;
  324. }
  325. if (window.open_or_close == "close") {
  326. window.close_parentheses.insertAfter(actual_target);
  327. window.inserir_close = index_in_array + 2;
  328. }
  329. return;
  330. }
  331. if (expression_array[index_in_array].type_op) {
  332. // buscar para a esquerda primeiro:
  333. if (expression_array[index_in_array - 1] == '(') {
  334. if (window.open_or_close == "open") {
  335. window.open_parentheses.insertBefore(actual_target);
  336. window.inserir_open = index_in_array;
  337. }
  338. } else if (expression_array[index_in_array - 1] == ')') {
  339. // buscar a abertura
  340. var count_opened = 0;
  341. var count_closed = 0;
  342. for (var j = index_in_array - 1; j >= 0; j--) {
  343. if ((expression_array[j] == '(')) {
  344. count_opened ++;
  345. }
  346. if (expression_array[j] == ')') {
  347. count_closed ++;
  348. }
  349. if (count_opened != count_closed) {
  350. } else {
  351. if (count_closed > 0) {
  352. if (window.open_or_close == "open") {
  353. window.open_parentheses.insertBefore(div_to_render.find('.single_element_expression[data-index="'+j+'"]'));
  354. window.inserir_open = j;
  355. }
  356. break;
  357. }
  358. }
  359. }
  360. } else if (expression_array[index_in_array - 1].type == "var_value") {
  361. if (window.open_or_close == "open") {
  362. window.open_parentheses.insertBefore(div_to_render.find('.single_element_expression[data-index="'+(index_in_array - 1)+'"]'));
  363. window.inserir_open = index_in_array - 1;
  364. }
  365. }
  366. // buscar para a direita agora:
  367. if (expression_array[index_in_array + 1] == '(') {
  368. // buscar o fechamento:
  369. var count_opened = 0;
  370. var count_closed = 0;
  371. for (var j = index_in_array + 1; j < expression_array.length; j ++) {
  372. if ((expression_array[j] == '(')) {
  373. count_opened ++;
  374. }
  375. if (expression_array[j] == ')') {
  376. count_closed ++;
  377. }
  378. if (count_opened != count_closed) {
  379. } else {
  380. if (count_opened > 0) {
  381. if (window.open_or_close == "close") {
  382. window.close_parentheses.insertAfter(div_to_render.find('.single_element_expression[data-index="'+j+'"]'));
  383. window.inserir_close = j + 2;
  384. }
  385. break;
  386. }
  387. }
  388. }
  389. } else if (expression_array[index_in_array + 1].type == "var_value") {
  390. if (window.open_or_close == "close") {
  391. window.close_parentheses.insertAfter(div_to_render.find('.single_element_expression[data-index="'+(index_in_array + 1)+'"]'));
  392. window.inserir_close = index_in_array + 3;
  393. }
  394. }
  395. }
  396. }
  397. function renderParenthesis (div_to_render, expression_content, command, function_obj, position, expression_array) {
  398. var ghost_parenthesis = $('<div class="single_element_expression" data-index="'+position+'">'+expression_content+'</div>');
  399. div_to_render.append(ghost_parenthesis);
  400. }
  401. function renderStartAddOperator (div_to_render, types_included, expression_array, command, function_obj, position) {
  402. var menu_final = '<div class="ui dropdown disabled usepointer"><div class="text"> + </div><i class="dropdown icon"></i><div class="menu">';
  403. if (types_included.indexOf(Models.EXPRESSION_TYPES.exp_arithmetic) >= 0) {
  404. if (types_included.length > 1) {
  405. menu_final += '<div class="item"><i class="dropdown icon"></i>Aritméticos<div class="menu">';
  406. menu_final += getArithmeticOperators();
  407. menu_final += '</div></div>';
  408. } else {
  409. menu_final += getArithmeticOperators();
  410. }
  411. }
  412. if (types_included.indexOf(Models.EXPRESSION_TYPES.exp_logic) >= 0) {
  413. if (types_included.length > 1) {
  414. menu_final += '<div class="item"><i class="dropdown icon"></i>Lógicos<div class="menu">';
  415. menu_final += getLogicOperators();
  416. menu_final += '</div></div>';
  417. } else {
  418. menu_final += getLogicOperators();
  419. }
  420. }
  421. if (types_included.indexOf(Models.EXPRESSION_TYPES.exp_conditional) >= 0) {
  422. if (types_included.length > 1) {
  423. menu_final += '<div class="item"><i class="dropdown icon"></i>Relacionais<div class="menu">';
  424. menu_final += getRelationalOperators();
  425. menu_final += '</div></div>';
  426. } else {
  427. menu_final += getRelationalOperators();
  428. }
  429. }
  430. menu_final += '</div></div>';
  431. menu_final = $(menu_final);
  432. var div_temp = $('<div class="single_element_expression ghost_element mouse_distance"></div>');
  433. div_temp.append(menu_final);
  434. var div_higher = $('<div class="higher_element"></div>');
  435. div_higher.append(div_temp);
  436. div_to_render.append(div_higher);
  437. menu_final.dropdown('set selected', Models.ARITHMETIC_TYPES.minus);
  438. div_temp.on('click', function() {
  439. var sera = position;
  440. if (types_included.indexOf(Models.EXPRESSION_TYPES.exp_arithmetic) >= 0) {
  441. console.log('p1');
  442. expression_array.splice(sera, 0, new Models.ExpressionOperator(Models.EXPRESSION_TYPES.exp_arithmetic,Models.ARITHMETIC_TYPES.minus));
  443. } else if (types_included.indexOf(Models.EXPRESSION_TYPES.exp_logic) >= 0) {
  444. console.log('p2');
  445. expression_array.splice(sera, 0, new Models.ExpressionOperator(Models.EXPRESSION_TYPES.exp_logic,Models.LOGIC_COMPARISON.equals_to));
  446. } else if (types_included.indexOf(Models.EXPRESSION_TYPES.exp_conditional) >= 0) {
  447. console.log('p3');
  448. expression_array.splice(sera, 0, new Models.ExpressionOperator(Models.EXPRESSION_TYPES.exp_conditional,Models.ARITHMETIC_COMPARISON.greater_than));
  449. }
  450. renderExpression(command, function_obj, div_to_render, expression_array);
  451. });
  452. }
  453. function renderFinalAddElements (div_to_render, types_included, expression_array, command, function_obj, position) {
  454. var menu_final = '<div class="ui dropdown disabled usepointer"><div class="text"> + </div><i class="dropdown icon"></i><div class="menu">';
  455. if (types_included.indexOf(Models.EXPRESSION_TYPES.exp_arithmetic) >= 0) {
  456. if (types_included.length > 1) {
  457. menu_final += '<div class="item"><i class="dropdown icon"></i>Aritméticos<div class="menu">';
  458. menu_final += getArithmeticOperators();
  459. menu_final += '</div></div>';
  460. } else {
  461. menu_final += getArithmeticOperators();
  462. }
  463. }
  464. if (types_included.indexOf(Models.EXPRESSION_TYPES.exp_logic) >= 0) {
  465. if (types_included.length > 1) {
  466. menu_final += '<div class="item"><i class="dropdown icon"></i>Lógicos<div class="menu">';
  467. menu_final += getLogicOperators();
  468. menu_final += '</div></div>';
  469. } else {
  470. menu_final += getLogicOperators();
  471. }
  472. }
  473. if (types_included.indexOf(Models.EXPRESSION_TYPES.exp_conditional) >= 0) {
  474. if (types_included.length > 1) {
  475. menu_final += '<div class="item"><i class="dropdown icon"></i>Relacionais<div class="menu">';
  476. menu_final += getRelationalOperators();
  477. menu_final += '</div></div>';
  478. } else {
  479. menu_final += getRelationalOperators();
  480. }
  481. }
  482. menu_final += '</div></div>';
  483. menu_final = $(menu_final);
  484. var div_temp = $('<div class="single_element_expression ghost_element mouse_distance"></div>');
  485. var div_higher = $('<div class="higher_element"></div>');
  486. div_higher.append(div_temp);
  487. div_to_render.append(div_higher);
  488. div_temp.append(menu_final);
  489. //div_to_render.append(div_temp);
  490. menu_final.dropdown('set selected', Models.ARITHMETIC_TYPES.plus);
  491. div_temp.on('click', function() {
  492. var sera = position;
  493. if (types_included.indexOf(Models.EXPRESSION_TYPES.exp_arithmetic) >= 0) {
  494. expression_array.splice(sera, 0, new Models.ExpressionOperator(Models.EXPRESSION_TYPES.exp_arithmetic,Models.ARITHMETIC_TYPES.plus));
  495. } else if (types_included.indexOf(Models.EXPRESSION_TYPES.exp_logic) >= 0) {
  496. expression_array.splice(sera, 0, new Models.ExpressionOperator(Models.EXPRESSION_TYPES.exp_logic,Models.LOGIC_COMPARISON.equals_to));
  497. } else if (types_included.indexOf(Models.EXPRESSION_TYPES.exp_conditional) >= 0) {
  498. expression_array.splice(sera, 0, new Models.ExpressionOperator(Models.EXPRESSION_TYPES.exp_conditional,Models.ARITHMETIC_COMPARISON.greater_than));
  499. }
  500. expression_array.splice(sera + 1, 0, new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.all, null, null, null, true));
  501. renderExpression(command, function_obj, div_to_render, expression_array);
  502. });
  503. }
  504. function renderOperatorMenu (command, function_obj, div_to_render, expression_element, types_included, position, expression_array) {
  505. var menu_final = '<div class="ui dropdown"><div class="text"> + </div><i class="dropdown icon"></i><div class="menu">';
  506. if (types_included.indexOf(Models.EXPRESSION_TYPES.exp_arithmetic) >= 0) {
  507. if (types_included.length > 1) {
  508. menu_final += '<div class="item"><i class="dropdown icon"></i>Aritméticos<div class="menu">';
  509. menu_final += getArithmeticOperators();
  510. menu_final += '</div></div>';
  511. } else {
  512. menu_final += getArithmeticOperators();
  513. }
  514. }
  515. if (types_included.indexOf(Models.EXPRESSION_TYPES.exp_logic) >= 0) {
  516. if (types_included.length > 1) {
  517. menu_final += '<div class="item"><i class="dropdown icon"></i>Lógicos<div class="menu">';
  518. menu_final += getLogicOperators();
  519. menu_final += '</div></div>';
  520. } else {
  521. menu_final += getLogicOperators();
  522. }
  523. }
  524. if (types_included.indexOf(Models.EXPRESSION_TYPES.exp_conditional) >= 0) {
  525. if (types_included.length > 1) {
  526. menu_final += '<div class="item"><i class="dropdown icon"></i>Relacionais<div class="menu">';
  527. menu_final += getRelationalOperators();
  528. menu_final += '</div></div>';
  529. } else {
  530. menu_final += getRelationalOperators();
  531. }
  532. }
  533. menu_final += '</div></div>';
  534. menu_final = $(menu_final);
  535. var div_temp = $('<div class="single_element_expression" data-index="'+position+'"></div>');
  536. div_temp.append(menu_final);
  537. div_to_render.append(div_temp);
  538. menu_final.dropdown({
  539. onChange: function(value, text, $selectedItem) {
  540. expression_element.item = $selectedItem.data('value');
  541. expression_element.type_op = $selectedItem.data('type');
  542. }
  543. });
  544. menu_final.dropdown('set selected', expression_element.item);
  545. }
  546. function getArithmeticOperators () {
  547. var arithmetic_operators;
  548. arithmetic_operators = '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_arithmetic+'" data-value="'+Models.ARITHMETIC_TYPES.plus+'">+</div>';
  549. arithmetic_operators += '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_arithmetic+'" data-value="'+Models.ARITHMETIC_TYPES.minus+'">-</div>';
  550. arithmetic_operators += '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_arithmetic+'" data-value="'+Models.ARITHMETIC_TYPES.multiplication+'">*</div>';
  551. arithmetic_operators += '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_arithmetic+'" data-value="'+Models.ARITHMETIC_TYPES.division+'">/</div>';
  552. arithmetic_operators += '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_arithmetic+'" data-value="'+Models.ARITHMETIC_TYPES.module+'">%</div>';
  553. return arithmetic_operators;
  554. }
  555. function getLogicOperators () {
  556. var logic_operators;
  557. logic_operators = '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_logic+'" data-value="'+Models.LOGIC_COMPARISON.equals_to+'">==</div>';
  558. logic_operators += '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_logic+'" data-value="'+Models.LOGIC_COMPARISON.not_equals_to+'">!=</div>';
  559. logic_operators += '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_logic+'" data-value="'+Models.LOGIC_COMPARISON.and+'">'+LocalizedStrings.getUI('and')+'</div>';
  560. logic_operators += '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_logic+'" data-value="'+Models.LOGIC_COMPARISON.or+'">'+LocalizedStrings.getUI('or')+'</div>';
  561. logic_operators += '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_logic+'" data-value="'+Models.LOGIC_COMPARISON.not+'">'+LocalizedStrings.getUI('not')+'</div>';
  562. return logic_operators;
  563. }
  564. function getRelationalOperators () {
  565. var relational_operators;
  566. relational_operators = '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_conditional+'" data-value="'+Models.ARITHMETIC_COMPARISON.greater_than+'">></div>';
  567. relational_operators += '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_conditional+'" data-value="'+Models.ARITHMETIC_COMPARISON.less_than+'"><</div>';
  568. relational_operators += '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_conditional+'" data-value="'+Models.ARITHMETIC_COMPARISON.equals_to+'">==</div>';
  569. relational_operators += '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_conditional+'" data-value="'+Models.ARITHMETIC_COMPARISON.not_equals_to+'">!=</div>';
  570. relational_operators += '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_conditional+'" data-value="'+Models.ARITHMETIC_COMPARISON.greater_than_or_equals_to+'">>=</div>';
  571. relational_operators += '<div class="item" data-type="'+Models.EXPRESSION_TYPES.exp_conditional+'" data-value="'+Models.ARITHMETIC_COMPARISON.less_than_or_equals_to+'"><=</div>';
  572. return relational_operators;
  573. }