// iVProg - www.usp.br/line/ivprog
// LInE - Free Education, Private Data
import * as Models from '../ivprog_elements';
import { LocalizedStrings } from '../../services/localizedStringsService';
import * as VariableValueMenuManagement from './variable_value_menu';
export function renderExpression (command, expression, function_obj, initial_el_to_render) {
//D console.log("src/ivprog/js/visualUI/commands/conditional_expression.js: renderExpression(.): command=" +
//D JSON.stringify(command) + "\nexpression=" + JSON.stringify(expression) + "\nfunction_obj=||" + JSON.stringify(function_obj) + "||\n");
expression.dom_object = initial_el_to_render;
if (expression.expression == null || expression.expression.length < 1) {
renderStartMenu(command, expression, function_obj, initial_el_to_render);
} else {
var main_div = $('
');
switch (expression.expression.type) {
case Models.EXPRESSION_TYPES.exp_logic:
renderLogicExpression(command, expression, expression.expression, function_obj, main_div, initial_el_to_render);
break;
case Models.EXPRESSION_TYPES.exp_arithmetic:
renderArithmeticExpression(command, expression, expression.expression, function_obj, main_div);
break;
}
initial_el_to_render.append(main_div);
var restartMenu = $('
');
initial_el_to_render.append(restartMenu);
restartMenu.on('click', function(e){
expression.expression = null;
initial_el_to_render.empty();
renderExpression(command, expression, function_obj, initial_el_to_render);
});
}
}
function renderArithmeticOperator (command, all_expression, expression_arithmetic, arithmetic_operator, function_obj, element_to_append) {
var menu_operator = $('');
menu_operator.dropdown({
values: [
{ name : '>',
value : Models.ARITHMETIC_COMPARISON.greater_than,
selected : (arithmetic_operator == Models.ARITHMETIC_COMPARISON.greater_than)
},
{ name : '<',
value : Models.ARITHMETIC_COMPARISON.less_than,
selected : (arithmetic_operator == Models.ARITHMETIC_COMPARISON.less_than)
},
{ name : '==',
value : Models.ARITHMETIC_COMPARISON.equals_to,
selected : (arithmetic_operator == Models.ARITHMETIC_COMPARISON.equals_to)
},
{ name : '!=',
value : Models.ARITHMETIC_COMPARISON.not_equals_to,
selected : (arithmetic_operator == Models.ARITHMETIC_COMPARISON.not_equals_to)
},
{ name : '>=',
value : Models.ARITHMETIC_COMPARISON.greater_than_or_equals_to,
selected : (arithmetic_operator == Models.ARITHMETIC_COMPARISON.greater_than_or_equals_to)
},
{ name : '<=',
value : Models.ARITHMETIC_COMPARISON.less_than_or_equals_to,
selected : (arithmetic_operator == Models.ARITHMETIC_COMPARISON.less_than_or_equals_to)
}
],
onChange: function(value, text, $selectedItem) {
expression_arithmetic.operator = value;
}
});
element_to_append.append(menu_operator);
}
function renderLogicOperator (command, all_expression, expression_logic, logic_operator, function_obj, element_to_append, initial_el_to_render) {
var menu_operator = $('');
menu_operator.dropdown({
values: [
{ name : '==',
value : Models.LOGIC_COMPARISON.equals_to,
selected : (logic_operator == Models.LOGIC_COMPARISON.equals_to)
},
{ name : '!=',
value : Models.LOGIC_COMPARISON.not_equals_to,
selected : (logic_operator == Models.LOGIC_COMPARISON.not_equals_to)
},
{ name : '&&',
value : Models.LOGIC_COMPARISON.and,
selected : (logic_operator == Models.LOGIC_COMPARISON.and)
},
{ name : '||',
value : Models.LOGIC_COMPARISON.or,
selected : (logic_operator == Models.LOGIC_COMPARISON.or)
}
],
onChange: function(value, text, $selectedItem) {
if ($selectedItem) {
expression_logic.operator = value;
if (expression_logic.second_operand == null) {
expression_logic.second_operand = new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.all, null, null, null, true);
initial_el_to_render.empty();
renderExpression(command, all_expression, function_obj, initial_el_to_render);
}
}
}
});
element_to_append.append(menu_operator);
}
function renderLogicExpression (command, all_expression, expression_logic, function_obj, element_to_append, initial_el_to_render) {
var exp_el_par_1 = $(' ');
var exp_el_expr_el_1 = $('');
var exp_el_expr_operand = $('');
var exp_el_expr_el_2 = $('');
var exp_el_par_2 = $(' ');
if (expression_logic.first_operand.type == Models.EXPRESSION_TYPES.exp_logic) {
renderLogicExpression(command, all_expression, expression_logic.first_operand, function_obj, exp_el_expr_el_1);
} else if (expression_logic.first_operand.type == Models.EXPRESSION_TYPES.exp_arithmetic) {
renderArithmeticExpression(command, all_expression, expression_logic.first_operand, function_obj, exp_el_expr_el_1);
} else {
VariableValueMenuManagement.renderMenu(command, expression_logic.first_operand, exp_el_expr_el_1, function_obj);
}
element_to_append.append(exp_el_par_1);
element_to_append.append(exp_el_expr_el_1);
renderLogicOperator(command, all_expression, expression_logic, expression_logic.operator, function_obj, exp_el_expr_operand, initial_el_to_render);
element_to_append.append(exp_el_expr_operand);
if (expression_logic.second_operand) {
if (expression_logic.second_operand.type == Models.EXPRESSION_TYPES.exp_logic) {
renderLogicExpression(command, all_expression, expression_logic.second_operand, function_obj, exp_el_expr_el_2);
} else if (expression_logic.second_operand.type == Models.EXPRESSION_TYPES.exp_arithmetic) {
renderArithmeticExpression(command, all_expression, expression_logic.second_operand, function_obj, exp_el_expr_el_2);
} else {
VariableValueMenuManagement.renderMenu(command, expression_logic.second_operand, exp_el_expr_el_2, function_obj);
}
element_to_append.append(exp_el_expr_el_2);
}
element_to_append.append(exp_el_par_2);
}
function renderArithmeticExpression (command, all_expression, expression_arithmetic, function_obj, element_to_append) {
var exp_el_par_1 = $(' ');
var exp_el_expr_el_1 = $('');
var exp_el_expr_operand = $('');
var exp_el_expr_el_2 = $('');
var exp_el_par_2 = $(' ');
if (expression_arithmetic.first_operand.type == Models.EXPRESSION_TYPES.exp_logic) {
renderLogicExpression(command, all_expression, expression_arithmetic.first_operand, function_obj, exp_el_expr_el_1);
} else if (expression_arithmetic.first_operand.type == Models.EXPRESSION_TYPES.exp_arithmetic) {
renderArithmeticExpression(command, all_expression, expression_arithmetic.first_operand, function_obj, exp_el_expr_el_1);
} else {
VariableValueMenuManagement.renderMenu(command, expression_arithmetic.first_operand, exp_el_expr_el_1, function_obj);
}
if (expression_arithmetic.second_operand.type == Models.EXPRESSION_TYPES.exp_logic) {
renderLogicExpression(command, all_expression, expression_arithmetic.second_operand, function_obj, exp_el_expr_el_2);
} else if (expression_arithmetic.second_operand.type == Models.EXPRESSION_TYPES.exp_arithmetic) {
renderArithmeticExpression(command, all_expression, expression_arithmetic.second_operand, function_obj, exp_el_expr_el_2);
} else {
VariableValueMenuManagement.renderMenu(command, expression_arithmetic.second_operand, exp_el_expr_el_2, function_obj);
}
renderArithmeticOperator(command, all_expression, expression_arithmetic, expression_arithmetic.operator, function_obj, exp_el_expr_operand);
element_to_append.append(exp_el_par_1);
element_to_append.append(exp_el_expr_el_1);
element_to_append.append(exp_el_expr_operand);
element_to_append.append(exp_el_expr_el_2);
element_to_append.append(exp_el_par_2);
}
function renderStartMenu (command, expression, function_obj, initial_el_to_render) {
var start_menu = '';
start_menu += '';
start_menu = $(start_menu);
start_menu.dropdown({
onChange: function(value, text, $selectedItem) {
switch ($selectedItem.data('exp')) {
case Models.EXPRESSION_TYPES.exp_logic:
expression.expression =
new Models.LogicExpression(false,
new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.all, null, null, null, true));
break;
case Models.EXPRESSION_TYPES.exp_arithmetic:
expression.expression =
new Models.ArithmeticExpression(
new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.all, null, null, null, true),
new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.all, null, null, null, true),
Models.ARITHMETIC_COMPARISON.less_than);
break;
}
initial_el_to_render.html('');
renderExpression(command, expression, function_obj, initial_el_to_render);
},
selectOnKeydown: false
});
initial_el_to_render.append(' ');
initial_el_to_render.append(start_menu);
initial_el_to_render.append(' ');
}