|
@@ -15,22 +15,54 @@ import * as DowhiletruesManagement from './commands/dowhiletrue';
|
|
|
import * as SwitchesManagement from './commands/switch';
|
|
|
import * as FunctioncallsManagement from './commands/functioncall';
|
|
|
import * as VariableValueMenuManagement from './commands/variable_value_menu';
|
|
|
+import * as BreaksManagement from './commands/break';
|
|
|
|
|
|
var has_element_created_draged = false;
|
|
|
var which_element_is_draged = null;
|
|
|
|
|
|
export function removeCommand (command, function_obj, dom_obj) {
|
|
|
+ console.log('debugging removeCommand');
|
|
|
+ console.log('command');
|
|
|
+ console.log(command);
|
|
|
+ console.log('function_obj');
|
|
|
+ console.log(function_obj);
|
|
|
+ console.log('dom_obj');
|
|
|
+ console.log(dom_obj);
|
|
|
+
|
|
|
if (function_obj.commands.indexOf(command) > -1) {
|
|
|
function_obj.commands.splice(function_obj.commands.indexOf(command), 1);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
|
|
|
- if ($(dom_obj[0].parentNode.parentNode).data('command').commands_block.indexOf(command) > -1) {
|
|
|
- $(dom_obj[0].parentNode.parentNode).data('command').commands_block.splice
|
|
|
- ($(dom_obj[0].parentNode.parentNode).data('command').commands_block.indexOf(command), 1);
|
|
|
+ try {
|
|
|
+ if (dom_obj.parent().parent().data('command').commands_block.indexOf(command) > -1) {
|
|
|
+ dom_obj.parent().parent().data('command').commands_block.splice
|
|
|
+ (dom_obj.parent().parent().data('command').commands_block.indexOf(command), 1);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ } catch (err) {}
|
|
|
+
|
|
|
+ try {
|
|
|
+ if (dom_obj.parent().parent().data('command').type == Models.COMMAND_TYPES.iftrue) {
|
|
|
+ if (dom_obj.parent().parent().data('command').commands_else.indexOf(command) > -1) {
|
|
|
+ dom_obj.parent().parent().data('command').commands_else.splice
|
|
|
+ (dom_obj.parent().parent().data('command').commands_else.indexOf(command), 1);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (err) {}
|
|
|
+
|
|
|
+ console.log('veja: ');
|
|
|
+ console.log(dom_obj.parent());
|
|
|
+
|
|
|
+ if (dom_obj.parent().data('switchcase')) {
|
|
|
+ console.log("o que encontrei: ");
|
|
|
+ console.log(dom_obj.parent().data('switchcase'));
|
|
|
+ dom_obj.parent().data('switchcase').commands_block.splice(dom_obj.parent().data('switchcase').commands_block.indexOf(command), 1);
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -38,6 +70,10 @@ export function createFloatingCommand (function_obj, function_container, command
|
|
|
var floatingObject;
|
|
|
|
|
|
switch (command_type) {
|
|
|
+ case Models.COMMAND_TYPES.break:
|
|
|
+ floatingObject = BreaksManagement.createFloatingCommand();
|
|
|
+ break;
|
|
|
+
|
|
|
case Models.COMMAND_TYPES.comment:
|
|
|
floatingObject = CommentsManagement.createFloatingCommand();
|
|
|
break;
|
|
@@ -101,6 +137,10 @@ export function renderCommand (command, element_reference, before_after_inside,
|
|
|
createdElement = CommentsManagement.renderCommand(command, function_obj);
|
|
|
break;
|
|
|
|
|
|
+ case Models.COMMAND_TYPES.break:
|
|
|
+ createdElement = BreaksManagement.renderCommand(command, function_obj);
|
|
|
+ break;
|
|
|
+
|
|
|
case Models.COMMAND_TYPES.reader:
|
|
|
createdElement = ReadersManagement.renderCommand(command, function_obj);
|
|
|
break;
|
|
@@ -158,6 +198,10 @@ export function renderCommand (command, element_reference, before_after_inside,
|
|
|
export function genericCreateCommand (command_type) {
|
|
|
|
|
|
switch (command_type) {
|
|
|
+
|
|
|
+ case Models.COMMAND_TYPES.break:
|
|
|
+ return new Models.Break();
|
|
|
+
|
|
|
case Models.COMMAND_TYPES.comment:
|
|
|
return new Models.Comment(new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.only_value, LocalizedStrings.getUI('text_comment'), null, null, false));
|
|
|
|
|
@@ -179,7 +223,8 @@ export function genericCreateCommand (command_type) {
|
|
|
|
|
|
case Models.COMMAND_TYPES.repeatNtimes:
|
|
|
return new Models.RepeatNTimes(new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.only_variable, null, null, null, false),
|
|
|
- null, new Models.ConditionalExpression(null), null, null);
|
|
|
+ new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.only_variable, null, null, null, false),
|
|
|
+ null, new Models.ConditionalExpression(null), null, null);
|
|
|
|
|
|
case Models.COMMAND_TYPES.whiletrue:
|
|
|
return new Models.WhileTrue(new Models.ConditionalExpression(null), null);
|
|
@@ -188,7 +233,10 @@ export function genericCreateCommand (command_type) {
|
|
|
return new Models.DoWhileTrue(new Models.ConditionalExpression(null), null);
|
|
|
|
|
|
case Models.COMMAND_TYPES.switch:
|
|
|
- return new Models.Switch(null, null, null);
|
|
|
+
|
|
|
+ var sc = [new Models.SwitchCase(new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.all, null, null, null, true))];
|
|
|
+
|
|
|
+ return new Models.Switch(new Models.VariableValueMenu(VariableValueMenuManagement.VAR_OR_VALUE_TYPES.variable_and_function, null, null, null, true), sc);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -203,6 +251,7 @@ function manageCommand (function_obj, function_container, event, command_type) {
|
|
|
console.log(el);
|
|
|
console.log(el.data('fun'));
|
|
|
|
|
|
+
|
|
|
|
|
|
var hier = el.parentsUntil(".all_functions");
|
|
|
var esta_correto = false;
|
|
@@ -274,6 +323,30 @@ function manageCommand (function_obj, function_container, event, command_type) {
|
|
|
console.log(hierarquia_bottom_up[i]);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ var is_correct_context = false;
|
|
|
+ if (command_type == Models.COMMAND_TYPES.break) {
|
|
|
+ for (var i = 0; i < hierarquia_bottom_up.length; i++) {
|
|
|
+ if ((hierarquia_bottom_up[i].type == Models.COMMAND_TYPES.repeatNtimes)
|
|
|
+ || (hierarquia_bottom_up[i].type == Models.COMMAND_TYPES.whiletrue)
|
|
|
+ || (hierarquia_bottom_up[i].type == Models.COMMAND_TYPES.dowhiletrue)
|
|
|
+ || (hierarquia_bottom_up[i].type == Models.COMMAND_TYPES.switch)) {
|
|
|
+
|
|
|
+ is_correct_context = true;
|
|
|
+ break;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!is_correct_context) {
|
|
|
+ console.error("Context not allowed to insert BREAK COMMAND!");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
if (hierarquia_bottom_up.length == 1) {
|
|
|
console.log('QQ1');
|
|
@@ -348,8 +421,7 @@ function insertCommandInBlockHierar (el, event, function_obj, command_type, hier
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- console.log("que situação foi essa? quando o if no qual ele soltou, já está em outro bloco de comandos");
|
|
|
-
|
|
|
+ addCommandToSwitchCase(event, function_obj, command_type);
|
|
|
}
|
|
|
|
|
|
} else {
|
|
@@ -415,23 +487,36 @@ function findBeforeOrAfterCommandToAddInsertBlock (el, event, function_obj, comm
|
|
|
var el_jq = $(el);
|
|
|
var command_parent = $(el.parentNode.parentNode).data('command');
|
|
|
var command_target = el_jq.data('command');
|
|
|
+ var temp_parent = $(el.parentNode.parentNode);
|
|
|
|
|
|
var is_in_else = false;
|
|
|
|
|
|
if (!command_parent) {
|
|
|
+ command_parent = el_jq.data('command');
|
|
|
+ temp_parent = el_jq;
|
|
|
var hier = el_jq.parentsUntil(".command_container");
|
|
|
|
|
|
for (var i = 0; i < hier.length; i++) {
|
|
|
var temp = $(hier[i]);
|
|
|
- if (typeof temp.data('else') !== 'undefined') {
|
|
|
+ if (typeof temp.data('else') != 'undefined') {
|
|
|
is_in_else = true;
|
|
|
}
|
|
|
- if (typeof temp.data('command') !== 'undefined') {
|
|
|
+ if (typeof temp.data('command') != 'undefined') {
|
|
|
command_parent = temp.data('command');
|
|
|
+ temp_parent = temp;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ var hier = el_jq.parentsUntil(".command_container");
|
|
|
+ for (var i = 0; i < hier.length; i++) {
|
|
|
+ var temp = $(hier[i]);
|
|
|
+ if (typeof temp.data('else') != 'undefined') {
|
|
|
+ is_in_else = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (command_parent == command_target) {
|
|
|
var hier = el_jq.parentsUntil(".command_container");
|
|
|
|
|
@@ -444,6 +529,21 @@ function findBeforeOrAfterCommandToAddInsertBlock (el, event, function_obj, comm
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ if ((command_parent.type != Models.COMMAND_TYPES.iftrue) && (command_parent.type != Models.COMMAND_TYPES.switch)) {
|
|
|
+ var hier = temp_parent.parentsUntil(".all_cases_div");
|
|
|
+ console.log("vou procurar!!");
|
|
|
+ for (var i = 0; i < hier.length; i++) {
|
|
|
+ console.log("estou vasculhando...");
|
|
|
+ var temp = $(hier[i]);
|
|
|
+ if (typeof temp.data('switchcase') !== 'undefined') {
|
|
|
+ console.log("encontrei");
|
|
|
+ command_parent = temp.data('switchcase');
|
|
|
+ is_in_else = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
console.log('debugging:');
|
|
|
console.log('el_jq');
|
|
|
console.log(el_jq);
|
|
@@ -484,9 +584,9 @@ function findBeforeOrAfterCommandToAddInsertBlock (el, event, function_obj, comm
|
|
|
var recentComand = genericCreateCommand(command_type);
|
|
|
command_parent.commands_else.push(recentComand);
|
|
|
|
|
|
- renderCommand(recentComand, el_jq.find('.commands_else'), 3, function_obj);
|
|
|
+ renderCommand(recentComand, el_jq, 3, function_obj);
|
|
|
} else {
|
|
|
- findInBlockCorrectPlace(el_jq.find('.commands_else'), event, function_obj, command_type, true);
|
|
|
+ findInBlockCorrectPlace(el_jq, event, function_obj, command_type, true);
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
@@ -668,7 +768,87 @@ function insertCommandInBlock (el, event, function_obj, command_type) {
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
+ console.log("está tentando inserir em um switch que está na raiz!");
|
|
|
+ addCommandToSwitchCase(event, function_obj, command_type);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function addCommandToSwitchCase (event, function_obj, command_type) {
|
|
|
+
|
|
|
+ var el = $(document.elementFromPoint(event.clientX, event.clientY));
|
|
|
+
|
|
|
+ var which_case = el.data('switchcase');
|
|
|
+ var case_div = el;
|
|
|
+
|
|
|
+ if (!which_case) {
|
|
|
+ var hier_find = el.parentsUntil(".all_cases_div");
|
|
|
+ for (var i = 0; i < hier_find.length; i++) {
|
|
|
+ if (typeof $(hier_find[i]).data('switchcase') !== 'undefined') {
|
|
|
+ which_case = $(hier_find[i]).data('switchcase');
|
|
|
+ case_div = $(hier_find[i]);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (which_case.commands_block == null || which_case.commands_block.length < 1) {
|
|
|
+ which_case.commands_block = [];
|
|
|
+
|
|
|
+ var recentComand = genericCreateCommand(command_type);
|
|
|
+ which_case.commands_block.push(recentComand);
|
|
|
+ renderCommand(recentComand, case_div.find('.case_commands_block'), 3, function_obj);
|
|
|
+ } else {
|
|
|
+ findInBlockCorrectPlaceInSwitchCase(which_case, case_div, event, function_obj, command_type);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+function findInBlockCorrectPlaceInSwitchCase (which_case, case_div, event, function_obj, command_type) {
|
|
|
+
|
|
|
+ var all_sub = case_div.find('div.command_container');
|
|
|
+
|
|
|
+ var menor_distancia = 999999999;
|
|
|
+ var elemento_menor_distancia = null;
|
|
|
+ var antes = true;
|
|
|
+
|
|
|
+ var t_bot;
|
|
|
+ var t_top;
|
|
|
+
|
|
|
+
|
|
|
+ for (var i = 0; i < all_sub.length; i++) {
|
|
|
+
|
|
|
+ t_top = all_sub[i].getBoundingClientRect().top;
|
|
|
+ t_bot = all_sub[i].getBoundingClientRect().top + all_sub[i].getBoundingClientRect().height;
|
|
|
+
|
|
|
+ if ((t_top - event.clientY) < menor_distancia) {
|
|
|
+ menor_distancia = event.clientY - t_top;
|
|
|
+ elemento_menor_distancia = all_sub[i];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ var borda_inferior = elemento_menor_distancia.parentNode.getBoundingClientRect().top + elemento_menor_distancia.parentNode.getBoundingClientRect().height;
|
|
|
+
|
|
|
+
|
|
|
+ if ((borda_inferior - event.clientY) < menor_distancia) {
|
|
|
+ var recentComand = genericCreateCommand(command_type);
|
|
|
+
|
|
|
+ which_case.commands_block.push(recentComand);
|
|
|
+
|
|
|
+ renderCommand(recentComand, $(case_div.find('.case_commands_block')[0]), 3, function_obj);
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ var recentComand = genericCreateCommand(command_type);
|
|
|
+
|
|
|
+ var index = which_case.commands_block.indexOf($(elemento_menor_distancia).data('command'));
|
|
|
+
|
|
|
+ if (index > -1) {
|
|
|
+ which_case.commands_block.splice(index, 0, recentComand);
|
|
|
+ renderCommand(recentComand, elemento_menor_distancia, 1, function_obj);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|