var counter_new_functions = 0;
var counter_new_parameters = 0;
var counter_new_variables = 0;
var counter_new_globals = 0;
function addFunctionHandler() {
new_function = new Funcao(i18n("new_function") + "_" + counter_new_functions, tiposDados.void, 0, new Array(), false, false, null, new Comentario(i18n('text_comment_start')));
adicionarFuncao(new_function);
counter_new_functions ++;
renderAlgorithm();
}
function addGlobalVar() {
var v = new Variavel(tiposDados.integer, i18n('new_global') + '_' + counter_new_globals, 1);
counter_new_globals ++;
programa.globais.push(v);
renderAlgorithm();
}
function updateSequenceFunctionHandler(index_from, index_to) {
programa.funcoes.splice(index_to, 0, programa.funcoes.splice(index_from, 1)[0]);
renderAlgorithm();
}
function removeFunctionHandler(div_function, sequence) {
programa.funcoes.splice(sequence, 1);
$(div_function).slideUp(400, function(){
renderAlgorithm();
});
}
function minimizeFunctionHandler(div_function, sequence) {
$(div_function).find(".function_area").toggle();
programa.funcoes[sequence].esta_oculta = !programa.funcoes[sequence].esta_oculta;
}
function renderAlgorithm() {
$('.all_functions').empty();
//console.log("vai chamar.. " + programa.funcoes.length);
for (var i = 0; i < programa.funcoes.length; i++) {
//console.log("deve chamar: " + i);
appendFunction(programa.funcoes[i], i);
}
$('.list_globals').empty();
if (programa.globais.length > 0) {
renderGlobals();
}
$('.data_types_dropdown').dropdown();
$('.parameter_data_types_dropdown').dropdown();
addHandlers();
associateObjects();
}
function associateObjects() {
$( "div" ).each(function( index ) {
if (typeof $(this).data('idcommand') !== 'undefined') {
this.relatedObj = allCommandsReference[$(this).data('idcommand')];
}
});
}
function deleteGlobal(which_global) {
updateReferencesToVarBeforeRemove(programa.globais[which_global]);
programa.globais.splice(which_global, 1);
renderAlgorithm();
}
function alternateGlobalConst(which_global) {
programa.globais[which_global].eh_constante = !programa.globais[which_global].eh_constante;
renderAlgorithm();
}
function renderGlobals() {
var ret = "";
if (programa.globais.length > 0) {
for (var j = 0; j < programa.globais.length; j++) {
var par_temp = programa.globais[j];
ret += '
const: ';
ret += '
'+par_temp.nome+' ';
ret += '
';
if (par_temp.dimensoes > 0) {
ret += '
'+ i18n(tiposDados.vector)+':'+i18n(par_temp.tipo);
for (i = 0; i < par_temp.dimensoes; i ++) {
ret += ' [ ] ';
}
ret += '
';
} else {
ret += '
'+i18n(par_temp.tipo)+'
';
}
ret += ''
+ '
';
var i = 0;
for (tm in tiposDados) {
i ++;
if (i == 1) { continue; }
if (i == (Object.keys(tiposDados).length)) { break; }
ret += '
'+i18n(tm)+'
';
}
i = 0;
for (tm in tiposDados) {
i ++;
if (i == 1) { continue; }
if (i == (Object.keys(tiposDados).length)) { break; }
ret += '
'
+ ''
+ i18n(tiposDados.vector)+':'+i18n(tm)
+ '
'
+ '
[ ]
'
+ '
[ ] [ ]
'
+ '
'
+ '
';
}
ret += '
= ';
if (par_temp.dimensoes == 0) {
if (par_temp.tipo == tiposDados.real) {
ret += '
'+par_temp.valor.toFixed(1)+'
';
} else {
if (par_temp.tipo == tiposDados.boolean) {
ret += '
'+par_temp.valor+'
';
} else {
ret += '
'+par_temp.valor+'
';
}
}
} else {
ret += '
';
if (par_temp.dimensoes == 1) {
ret += '
';
if (par_temp.tipo == tiposDados.real) {
for (var k = 0; k < par_temp.colunas; k++) {
ret += '
'+par_temp.valor[k].toFixed(1)+''+'
';
}
} else {
for (var k = 0; k < par_temp.colunas; k++) {
if (par_temp.tipo == tiposDados.boolean) {
ret += '
'+par_temp.valor[k]+''+'
';
} else {
ret += '
'+par_temp.valor[k]+''+'
';
}
}
}
ret += '
';
ret += '
';
ret += '
'
+ '
';
}
if (par_temp.dimensoes == 2) {
if (par_temp.tipo == tiposDados.real) {
for (var l = 0; l < par_temp.linhas; l++) {
ret += '
';
for (var k = 0; k < par_temp.colunas; k++) {
ret += '
'+par_temp.valor[l][k].toFixed(1)+''+'
';
}
ret += '
';
}
} else {
for (var l = 0; l < par_temp.linhas; l++) {
ret += '
';
for (var k = 0; k < par_temp.colunas; k++) {
if (par_temp.tipo == tiposDados.boolean) {
ret += '
'+par_temp.valor[l][k]+''+'
';
} else {
ret += '
'+par_temp.valor[l][k]+''+'
';
}
}
ret += '
';
}
}
if (par_temp.linhas == 0) {
ret += '
';
}
ret += '
'
+ '
';
ret += '';
ret += '
'
+ '
';
}
}
ret += '
';
}
}
$('.list_globals').append(ret);
}
var has_element_created_draged = false;
var which_element_is_draged = null;
function manageCommand(event) {
$( ".created_element" ).each(function( index ) {
$(this).remove();
});
var el = document.elementFromPoint(event.clientX, event.clientY);
// Primeiro verificar se ele soltou no espaço da função correta:
var hier = $(el).parentsUntil(".all_functions");
var esta_correto = false;
var esta_na_div_correta = false;
if ($(el).hasClass("commands_list_div")) {
esta_na_div_correta = true;
}
for (i = 0; i < hier.length; i++) {
if ($(hier[i]).hasClass("commands_list_div")) {
esta_na_div_correta = true;
}
if ($(hier[i]).data('fun') == function_to_add) {
esta_correto = true;
break;
}
}
if (!esta_correto) {
has_element_created_draged = false;
which_element_is_draged = null;
function_to_add = -1;
return;
} else {
if (!esta_na_div_correta) {
has_element_created_draged = false;
which_element_is_draged = null;
function_to_add = -1;
return;
}
}
// Agora é descobrir qual o escopo para adicionar o comando:
// Se o elemento clicado possuir o atributo "fun", então, é direto na div dos comandos:
if (typeof $(el).data('fun') !== 'undefined') {
// Se a lista de comandos estiver vazia, então é o primeiro.
// Portanto, ele deve soltar o elemento obrigatoriamente no objeto vazio
if ((el.relatedObj.comandos == null) || (el.relatedObj.comandos.length == 0)) {
// pode adicionar
el.relatedObj.comandos = [];
el.relatedObj.comandos.push(createElementGenericFunction());
} else { // Entra nesse else, caso já existam outros comandos no bloco:
findNearbyCommandToAddInFunctionScope(el, event);
}
} else { // Se entrar nesse bloco 'else', quer dizer que o usuário não soltou o elemento necessariamente na div específica da função
// portanto, devemos procurar nos elementos DOM, em que lugar da função, ele soltou o comando
/*var hier = $(el).parentsUntil(".all_functions");
for (i = 0; i < hier.length; i++) {
if ($(hier[i]).data('fun') == function_to_add) {
programa.funcoes[function_to_add].comandos.push(createElementGenericFunction());
break;
}
}*/
//findPositionAndInsertCommand(el, event);
var caminho = findPositionAndPathToElementTarget(el, event);
console.log("soltou sobre o seguinte elemento: ");
console.log(caminho);
console.log("soltou sobre o seguinte DOM: ");
console.log(el);
// se for 1, então está no nível do corpo da função:
if (caminho.length == 1) {
console.log("o caminho é de tamanho 1 e o objeto é o seguinte: " + caminho[0]);
console.log(programa.funcoes[function_to_add].comandos[caminho[0]]);
// se for do tipo true ou false, temos que determinar se soltou no if ou no else:
if (programa.funcoes[function_to_add].comandos[caminho[0]].tipo == tiposComandos.iftrue) {
if ($(el).data('if')) {
if ((programa.funcoes[function_to_add].comandos[caminho[0]].commands_block == null)
|| (programa.funcoes[function_to_add].comandos[caminho[0]].commands_block.length == 0)) {
programa.funcoes[function_to_add].comandos[caminho[0]].commands_block = [];
programa.funcoes[function_to_add].comandos[caminho[0]].commands_block.push(createElementGenericFunction());
} else {
programa.funcoes[function_to_add].comandos[caminho[0]].commands_block.push(createElementGenericFunction());
}
} else if ($(el).data('else')) {
if ((programa.funcoes[function_to_add].comandos[caminho[0]].commands_else == null)
|| (programa.funcoes[function_to_add].comandos[caminho[0]].commands_else.length == 0)) {
programa.funcoes[function_to_add].comandos[caminho[0]].commands_else = [];
programa.funcoes[function_to_add].comandos[caminho[0]].commands_else.push(createElementGenericFunction());
} else {
programa.funcoes[function_to_add].comandos[caminho[0]].commands_else.push(createElementGenericFunction());
}
} else {
console.log("soltou dentro do if, fora dos divs corretos... VERIFICAR QUAL ESTÁ MAIS PRÓXIMO... O IF OU O ELSE --- NNN11");
discoveryIfOrElse(el, event);
}
} else {
if ((programa.funcoes[function_to_add].comandos[caminho[0]].tipo == tiposComandos.repeatNtimes)
|| (programa.funcoes[function_to_add].comandos[caminho[0]].tipo == tiposComandos.whiletrue)
|| (programa.funcoes[function_to_add].comandos[caminho[0]].tipo == tiposComandos.dowhiletrue)
|| (programa.funcoes[function_to_add].comandos[caminho[0]].tipo == tiposComandos.switch) ) {
if ((programa.funcoes[function_to_add].comandos[caminho[0]].commands_block == null)
|| (programa.funcoes[function_to_add].comandos[caminho[0]].commands_block.length == 0)) {
programa.funcoes[function_to_add].comandos[caminho[0]].commands_block = [];
programa.funcoes[function_to_add].comandos[caminho[0]].commands_block.push(createElementGenericFunction());
} else {
programa.funcoes[function_to_add].comandos[caminho[0]].commands_block.push(createElementGenericFunction());
}
} else {
var result = getBeforeOrAfterOrEndAllocate(el, event);
if (result == true) {
console.log("adicionando ANTES");
programa.funcoes[function_to_add].comandos.splice(caminho[0], 0, createElementGenericFunction());
} else {
console.log("adicionando DEPOIS");
programa.funcoes[function_to_add].comandos.splice(caminho[0] + 1, 0, createElementGenericFunction());
}
}
}
} else { // caso seja mais de um, o caminho, então, precisamos percorrer até achar:
// CONTINUAR DAQUI:
console.log("ACHO QUE É A SITUAÇÃO DE BLOCO INTERNO");
console.log("SOLTOU NO ELEMENTO A SEGUIR: ");
console.log(el.relatedObj);
console.log("PAI DO ELEMENTO QUE ELA SOLTOU: ");
console.log(el.parentNode.relatedObj);
//
if ((el.parentNode.relatedObj.tipo == tiposComandos.iftrue)) {
if ($(el.parentNode).data('if') || $(el).data('if')) {
if ((el.parentNode.relatedObj.commands_block == null)
|| (el.parentNode.relatedObj.commands_block.length == 0)) {
el.parentNode.relatedObj.commands_block = [];
el.parentNode.relatedObj.commands_block.push(createElementGenericFunction());
} else {
if ($(el).data('if')) {
// Descobrir qual o elemento mais próximo de onde ele soltou o comando recém criado:
console.log("SITUAÇÃO TRATADA NO K1!");
getNearbyIndexOfElementOnClick(el, event);
} else {
if (getBeforeOrAfterOrEndAllocate(el, event)) {
console.log("K1 ANTECAO! SOLTOU ANTES DO ELEMENTO ALVO");
el.parentNode.relatedObj.commands_block.splice($(el).data('index'), 0, createElementGenericFunction());
} else {
console.log("K1 ANTECAO! SOLTOU DEPOIS DO ELEMENTO ALVO");
el.parentNode.relatedObj.commands_block.splice($(el).data('index') + 1, 0, createElementGenericFunction());
}
}
//el.parentNode.relatedObj.commands_block.push(createElementGenericFunction());
}
} else if ($(el.parentNode).data('else') || $(el).data('else')) {
if ((el.parentNode.relatedObj.commands_else == null)
|| (el.parentNode.relatedObj.commands_else.length == 0)) {
el.parentNode.relatedObj.commands_else = [];
el.parentNode.relatedObj.commands_else.push(createElementGenericFunction());
} else {
if ($(el).data('else')) {
// Descobrir qual o elemento mais próximo de onde ele soltou o comando recém criado:
console.log("SITUAÇÃO TRATADA NO K2!");
getNearbyIndexOfElementOnClick(el, event);
} else {
if (getBeforeOrAfterOrEndAllocate(el, event)) {
console.log("K2 ANTECAO! SOLTOU ANTES DO ELEMENTO ALVO");
el.parentNode.relatedObj.commands_else.splice($(el).data('index'), 0, createElementGenericFunction());
} else {
console.log("K2 ANTECAO! SOLTOU DEPOIS DO ELEMENTO ALVO");
el.parentNode.relatedObj.commands_else.splice($(el).data('index') + 1, 0, createElementGenericFunction());
}
}
//el.parentNode.relatedObj.commands_else.push(createElementGenericFunction());
}
} else {
console.log("soltou dentro do if, fora dos divs corretos... VERIFICAR QUAL ESTÁ MAIS PRÓXIMO... O IF OU O ELSE --- NNN22");
discoveryIfOrElse(el, event);
}
} else {
console.log("COMEÇAR A TRATAR!...");
if ((el.parentNode.relatedObj.tipo == tiposComandos.repeatNtimes)
|| (el.parentNode.relatedObj.tipo == tiposComandos.whiletrue)
|| (el.parentNode.relatedObj.tipo == tiposComandos.dowhiletrue)
|| (el.parentNode.relatedObj.tipo == tiposComandos.switch)
|| (el.parentNode.relatedObj.tipo == tiposComandos.iftrue)) {
if ((el.parentNode.relatedObj.commands_block == null)
|| (el.parentNode.relatedObj.commands_block.length == 0)) {
el.parentNode.relatedObj.commands_block = [];
el.parentNode.relatedObj.commands_block.push(createElementGenericFunction());
} else {
if (typeof $(el).data('subblock') !== 'undefined') {
console.log("SITUAÇÃO TRATADA NO K3!");
getNearbyIndexOfElementOnClick(el, event);
} else {
if (getBeforeOrAfterOrEndAllocate(el, event)) {
console.log("K3 ANTECAO! SOLTOU ANTES DO ELEMENTO ALVO");
el.parentNode.relatedObj.commands_block.splice($(el).data('index'), 0, createElementGenericFunction());
} else {
console.log("K3 ANTECAO! SOLTOU DEPOIS DO ELEMENTO ALVO");
el.parentNode.relatedObj.commands_block.splice($(el).data('index') + 1, 0, createElementGenericFunction());
}
}
//el.parentNode.relatedObj.commands_block.push(createElementGenericFunction());
}
} else {
console.log("AGORA SIM! SITUAÇÃO K4!");
console.log("VOU ADICIONAR NO SEGINTE ELEMENTO: ");
console.log(el.parentNode.parentNode.relatedObj);
if (getBeforeOrAfterOrEndAllocate(el.parentNode, event)) {
el.parentNode.parentNode.relatedObj.commands_block.splice($(el.parentNode).data('index'), 0, createElementGenericFunction());
} else {
el.parentNode.parentNode.relatedObj.commands_block.splice($(el.parentNode).data('index') + 1, 0, createElementGenericFunction());
}
}
}
/*console.log("elemento superior: ");
console.log(programa.funcoes[function_to_add].comandos[caminho[0]]);
console.log("elemento específico:
console.log(findElementByPath(caminho));*/
}
}
//console.log("onde soltou:");
//console.log(el);
has_element_created_draged = false;
which_element_is_draged = null;
function_to_add = -1;
renderAlgorithm();
}
function discoveryIfOrElse(el, event) {
var menor_distancia_acima = 999999999;
var menor_distancia_abaixo = 999999999;
var elemento_menor_distancia_acima = null;
var elemento_menor_distancia_abaixo = null;
var antes = true;
var t_bot;
var t_top;
if ($(el.parentNode).children(".block_commands").length == 0) {
$(el).children(".block_commands").each(function( index ) {
t_top = this.getBoundingClientRect().top;
t_bot = this.getBoundingClientRect().top + this.getBoundingClientRect().height;
if ((t_top - event.clientY) < menor_distancia_acima) {
menor_distancia_acima = event.clientY - t_top;
elemento_menor_distancia_acima = this;
}
if ((event.clientY - t_bot) < menor_distancia_abaixo) {
menor_distancia_abaixo = event.clientY - t_bot;
elemento_menor_distancia_abaixo = this;
}
});
if (elemento_menor_distancia_abaixo == null && elemento_menor_distancia_acima == null) {
return;
}
if (menor_distancia_acima > menor_distancia_abaixo) {
// quer adicionar na parte de cima
if (typeof $(elemento_menor_distancia_acima).data('if') !== 'undefined') {
el.relatedObj.commands_block.splice(0, 0, createElementGenericFunction());
} else {
el.relatedObj.commands_else.splice(0, 0, createElementGenericFunction());
}
} else {
// quer adicionar na parte de baixo
if (typeof $(elemento_menor_distancia_acima).data('if') !== 'undefined') {
el.relatedObj.commands_block.push(createElementGenericFunction());
} else {
el.relatedObj.commands_else.push(createElementGenericFunction());
}
}
} else {
$(el.parentNode).children(".block_commands").each(function( index ) {
t_top = this.getBoundingClientRect().top;
t_bot = this.getBoundingClientRect().top + this.getBoundingClientRect().height;
if ((t_top - event.clientY) < menor_distancia_acima) {
menor_distancia_acima = event.clientY - t_top;
elemento_menor_distancia_acima = this;
}
if ((event.clientY - t_bot) < menor_distancia_abaixo) {
menor_distancia_abaixo = event.clientY - t_bot;
elemento_menor_distancia_abaixo = this;
}
});
if (elemento_menor_distancia_abaixo == null && elemento_menor_distancia_acima == null) {
return;
}
if (menor_distancia_acima > menor_distancia_abaixo) {
// quer adicionar na parte de cima
if (typeof $(elemento_menor_distancia_acima).data('if') !== 'undefined') {
el.parentNode.relatedObj.commands_block.splice(0, 0, createElementGenericFunction());
} else {
el.parentNode.relatedObj.commands_else.splice(0, 0, createElementGenericFunction());
}
} else {
// quer adicionar na parte de baixo
if (typeof $(elemento_menor_distancia_acima).data('if') !== 'undefined') {
el.parentNode.relatedObj.commands_block.push(createElementGenericFunction());
} else {
el.parentNode.relatedObj.commands_else.push(createElementGenericFunction());
}
}
}
}
function getNearbyIndexOfElementOnClick(el, event) {
var all_sub = $(el).find('div');
var menor_distancia = 999999999;
var elemento_menor_distancia = null;
var antes = true;
var t_bot;
var t_top;
// Descobrindo o elemento mais próximo:
for (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];
}
}
borda_inferior = elemento_menor_distancia.parentNode.getBoundingClientRect().top + elemento_menor_distancia.parentNode.getBoundingClientRect().height;
// Está mais próximo da borda de baixo, ou seja.. inserir por último:
if ((borda_inferior - event.clientY) < menor_distancia) {
if ((el.parentNode.relatedObj.tipo == tiposComandos.iftrue)) {
if ($(el).data('else')) {
el.parentNode.relatedObj.commands_else.push(createElementGenericFunction());
return;
}
}
el.parentNode.relatedObj.commands_block.push(createElementGenericFunction());
} else {
if ((el.parentNode.relatedObj.tipo == tiposComandos.iftrue)) {
if ($(el).data('else')) {
el.parentNode.relatedObj.commands_else.splice($(elemento_menor_distancia).data('index'), 0, createElementGenericFunction());
return;
}
}
el.parentNode.relatedObj.commands_block.splice($(elemento_menor_distancia).data('index'), 0, createElementGenericFunction());
}
}
function findElementByPath(full_path_array) {
var root_el = programa.funcoes[function_to_add].comandos[full_path_array[0]];
for (i = 1; i < full_path_array.length; i++) {
root_el = auxiliaryFindElement(root_el, full_path_array[i]);
}
return root_el;
}
function auxiliaryFindElement(element, index) {
console.log("entrou: " + element.tipo);
console.log("indice: " + index);
console.log("desse indice: " + element.commands_block[index]);
return element.commands_block[index];
}
function findPositionAndPathToElementTarget(el, event) {
var full_path = [];
var m;
if (typeof $(el).data('fullpath') !== 'undefined') {
m = $(el).data('fullpath');
} else {
var hier = $(el).parentsUntil(".all_functions");
for (i = 0; i < hier.length; i++) {
if (typeof $(hier[i]).data('fullpath') !== 'undefined') {
m = $(hier[i]).data('fullpath');
break;
}
}
}
if (isNaN(m)) {
full_path = m.split(',');
/*for (i = 0; i < full_path.length; i++) {
full_path[i] = parseInt(full_path[i]);
}*/
return full_path;
} else {
return [m];
}
}
// Função apenas para o caso de soltar elemento no corpo da função:
function findNearbyCommandToAddInFunctionScope(el, event) {
var all_sub = $('#function_drag_cmd_' + function_to_add).find('div');
var menor_distancia = 999999999;
var elemento_menor_distancia = null;
var antes = true;
var t_bot;
var t_top;
// Descobrindo o elemento mais próximo:
for (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];
}
}
borda_inferior = elemento_menor_distancia.parentNode.getBoundingClientRect().top + elemento_menor_distancia.parentNode.getBoundingClientRect().height;
// Está mais próximo da borda de baixo, ou seja.. inserir por último:
if ((borda_inferior - event.clientY) < menor_distancia) {
programa.funcoes[function_to_add].comandos.push(createElementGenericFunction());
} else {
programa.funcoes[function_to_add].comandos.splice($(elemento_menor_distancia).data('index'), 0, createElementGenericFunction());
}
}
function getBeforeOrAfterOrEndAllocate(el, event) {
var m;
if (typeof $(el).data('fullpath') !== 'undefined') {
m = el;
} else {
var hier = $(el).parentsUntil(".all_functions");
for (i = 0; i < hier.length; i++) {
if (typeof $(hier[i]).data('fullpath') !== 'undefined') {
m = hier[i];
break;
}
}
}
// primeiro: descobrir se ele soltou para adicionar antes ou depois:
var metade_componente = m.getBoundingClientRect().top + (m.getBoundingClientRect().height / 2);
var antes = false;
if (event.clientY < metade_componente) {
antes = true;
}
return antes;
}
function findPositionAndInsertCommand(el, event) {
var identificado_local = false;
if ($(el).data('command') >= 0) {
console.log("soltou em cima de um command: ");
// primeiro: descobrir se ele soltou para adicionar antes ou depois:
var metade_componente = el.getBoundingClientRect().top + (el.getBoundingClientRect().height / 2);
var antes = false;
if (event.clientY < metade_componente) {
antes = true;
}
// segundo: descobrir o contexto que está sendo inserido o comando:
// se o subblock for diferente 0, então, ele não está inserido em um sub-bloco
if ($(el.parentNode).data('subblock') >= 0) {
console.log("ATENÇÃO! soltou em cima de um command dentro de um subbloco");
// se for do tipo if, precisamos descobrir se foi no if ou no else:
if ($(el.parentNode).data('if')) {
if (antes) {
programa.funcoes[function_to_add].comandos[$(el).data('index')].commands_block.splice($(el).data('index'), 0, createElementGenericFunction());
} else {
programa.funcoes[function_to_add].comandos.splice($(el).data('index') + 1, 0, createElementGenericFunction());
}
} else { // se entrar aqui, ele soltou no else:
var hier = $(el).parentsUntil(".all_functions");
for (i = 0; i < hier.length; i++) {
console.log("elemento índice: " + i);
console.log(hier[i]);
if ($(hier[i]).data('command') >= 0) {
console.log("soltou em cima de um elemento dentro de um command!");
identificado_local = true;
break;
}
}
addElementToIf("0", $(el.parentNode).data('index'), false);
}
} else {
// vai adicionar no bloco da função
if (antes) {
programa.funcoes[function_to_add].comandos.splice($(el).data('index'), 0, createElementGenericFunction());
} else {
programa.funcoes[function_to_add].comandos.splice($(el).data('index') + 1, 0, createElementGenericFunction());
}
}
identificado_local = true;
}
// Soltou em cima de um bloco de comandos dentro do if, for, while...
console.log("onde ele soltou: >>>> ");
console.log(el);
if ($(el).data('subblock') >= 0) {
console.log("soltou dentro de um if, for, while...");
// segundo: descobrir o contexto que está sendo inserido o comando:
// se o data-parent for 0, então, ele não está inserido em um sub-bloco
if ($(el.parentNode).data('parent') == "0") {
// vai adicionar no bloco da função
console.log("vai adicionar....");
// se for do tipo "if", então precisamos verificar se soltou no "if" ou no "else":
if (programa.funcoes[function_to_add].comandos[$(el.parentNode).data('index')].tipo == tiposComandos.iftrue) {
// se soltou no "if", então tem data-if
if ($(el).data('if')) {
console.log("PPPP2");
addElementToIf("0", $(el.parentNode).data('index'), true);
} else { // se entrar aqui, ele soltou no else:
console.log("PPPP3");
addElementToIf("0", $(el.parentNode).data('index'), false);
}
}
} else { // caso exista mais informação no parent, então, deve-se descobrir a hierarquia
}
}
if (identificado_local == false) {
var hier = $(el).parentsUntil(".all_functions");
for (i = 0; i < hier.length; i++) {
console.log("elemento índice: " + i);
console.log(hier[i]);
if ($(hier[i]).data('command') >= 0) {
console.log("soltou em cima de um elemento dentro de um command!");
identificado_local = true;
break;
}
}
}
}
// o parent: para a posição na hierarquia, e se é dentro do corpo do if ou do else, se for true é if.
function addElementToIf(parent, if_index, is_in_if) {
if (parent == "0") {
// adicionar no bloco do if:
if (is_in_if) {
if ((programa.funcoes[function_to_add].comandos[if_index].commands_block == null)
|| (programa.funcoes[function_to_add].comandos[if_index].commands_block.length == 0)) {
programa.funcoes[function_to_add].comandos[if_index].commands_block = [];
}
programa.funcoes[function_to_add].comandos[if_index].commands_block.push(createElementGenericFunction());
} else { // adicionar no bloco do else:
if ((programa.funcoes[function_to_add].comandos[if_index].commands_else == null)
|| (programa.funcoes[function_to_add].comandos[if_index].commands_else.length == 0)) {
programa.funcoes[function_to_add].comandos[if_index].commands_else = [];
}
programa.funcoes[function_to_add].comandos[if_index].commands_else.push(createElementGenericFunction());
}
}
}
function createElementGenericFunction() {
if (which_element_is_draged == tiposComandos.comment) {
return new Comentario(i18n('text_comment'));
}
if (which_element_is_draged == tiposComandos.reader) {
return new Leitura(null);
}
if (which_element_is_draged == tiposComandos.writer) {
return new Escrita(null);
}
if (which_element_is_draged == tiposComandos.attribution) {
return new Atribuicao(null, null);
}
if (which_element_is_draged == tiposComandos.iftrue) {
return new SeVerdadeiro(null, null, null);
}
if (which_element_is_draged == tiposComandos.repeatNtimes) {
return new RepitaNVezes(null, null, null, null);
}
if (which_element_is_draged == tiposComandos.whiletrue) {
return new EnquantoVerdadeiro(null, null);
}
if (which_element_is_draged == tiposComandos.dowhiletrue) {
return new FacaEnquantoVerdadeiro(null, null);
}
if (which_element_is_draged == tiposComandos.switch) {
return new Escolha(null, null);
}
if (which_element_is_draged == tiposComandos.functioncall) {
return new ChamadaFuncao(null, null);
}
}
function createWriterObject() {
var ret = '';
ret += '
'+i18n('write')+' x ';
ret += '
';
return ret;
}
function createCommentDragObject() {
var ret = '';
ret += '
'+i18n('text_comment')+' ';
ret += '
';
return ret;
}
function createReaderObject() {
var ret = '';
ret += '
'+i18n('read')+' x ';
ret += '
';
return ret;
}
function createAttributionDragObject() {
var ret = '';
ret += '
x = 1 + 1 ';
ret += '
';
return ret;
}
function createIfTrueDragObject() {
var ret = '';
ret += '
if (x < 1) { } ';
ret += '
';
return ret;
}
function createRepeatNtimesDragObject() {
var ret = '';
ret += '
para (x = 0; x < 10; x ++) { } ';
ret += '
';
return ret;
}
function createWhileTrueDragObject() {
var ret = '';
ret += '
enquanto(x < 10) { } ';
ret += '
';
return ret;
}
function createDoWhileTrueDragObject() {
var ret = '';
ret += '
faça { } enquanto(x < 10) ';
ret += '
';
return ret;
}
function createSwitchDragObject() {
var ret = '';
ret += '
escolha (x) { caso 1: caso 2: } ';
ret += '
';
return ret;
}
function createFunctioncallDragObject() {
var ret = '';
ret += '
funcao() ';
ret += '
';
return ret;
}
var function_to_add = -1;
function addHandlers() {
$('.create_functioncall').on('click', function(e){
has_element_created_draged = true;
which_element_is_draged = tiposComandos.functioncall;
function_to_add = $(e.target).data('fun');
var inner = $(createFunctioncallDragObject()).draggable().appendTo("body");
inner.css("position", "absolute");
e.type = "mousedown.draggable";
e.target = inner[0];
inner.css("left", e.pageX - 15);
inner.css("top", e.pageY - 15);
inner.trigger(e);
});
$('.create_switch').on('click', function(e){
has_element_created_draged = true;
which_element_is_draged = tiposComandos.switch;
function_to_add = $(e.target).data('fun');
var inner = $(createSwitchDragObject()).draggable().appendTo("body");
inner.css("position", "absolute");
e.type = "mousedown.draggable";
e.target = inner[0];
inner.css("left", e.pageX - 15);
inner.css("top", e.pageY - 15);
inner.trigger(e);
});
$('.create_dowhiletrue').on('click', function(e){
has_element_created_draged = true;
which_element_is_draged = tiposComandos.dowhiletrue;
function_to_add = $(e.target).data('fun');
var inner = $(createDoWhileTrueDragObject()).draggable().appendTo("body");
inner.css("position", "absolute");
e.type = "mousedown.draggable";
e.target = inner[0];
inner.css("left", e.pageX - 15);
inner.css("top", e.pageY - 15);
inner.trigger(e);
});
$('.create_whiletrue').on('click', function(e){
has_element_created_draged = true;
which_element_is_draged = tiposComandos.whiletrue;
function_to_add = $(e.target).data('fun');
var inner = $(createWhileTrueDragObject()).draggable().appendTo("body");
inner.css("position", "absolute");
e.type = "mousedown.draggable";
e.target = inner[0];
inner.css("left", e.pageX - 15);
inner.css("top", e.pageY - 15);
inner.trigger(e);
});
$('.create_repeatNtimes').on('click', function(e){
has_element_created_draged = true;
which_element_is_draged = tiposComandos.repeatNtimes;
function_to_add = $(e.target).data('fun');
var inner = $(createRepeatNtimesDragObject()).draggable().appendTo("body");
inner.css("position", "absolute");
e.type = "mousedown.draggable";
e.target = inner[0];
inner.css("left", e.pageX - 15);
inner.css("top", e.pageY - 15);
inner.trigger(e);
});
$('.create_iftrue').on('click', function(e){
has_element_created_draged = true;
which_element_is_draged = tiposComandos.iftrue;
function_to_add = $(e.target).data('fun');
var inner = $(createIfTrueDragObject()).draggable().appendTo("body");
inner.css("position", "absolute");
e.type = "mousedown.draggable";
e.target = inner[0];
inner.css("left", e.pageX - 15);
inner.css("top", e.pageY - 15);
inner.trigger(e);
});
$('.create_comment').on('click', function(e){
has_element_created_draged = true;
which_element_is_draged = tiposComandos.comment;
function_to_add = $(e.target).data('fun');
var inner = $(createCommentDragObject()).draggable().appendTo("body");
inner.css("position", "absolute");
e.type = "mousedown.draggable";
e.target = inner[0];
inner.css("left", e.pageX - 15);
inner.css("top", e.pageY - 15);
inner.trigger(e);
});
$('.create_attribution').on('click', function(e){
has_element_created_draged = true;
which_element_is_draged = tiposComandos.attribution;
function_to_add = $(e.target).data('fun');
var inner = $(createAttributionDragObject()).draggable().appendTo("body");
inner.css("position", "absolute");
e.type = "mousedown.draggable";
e.target = inner[0];
inner.css("left", e.pageX - 15);
inner.css("top", e.pageY - 15);
inner.trigger(e);
});
$('.create_writer').on('click', function(e){
has_element_created_draged = true;
which_element_is_draged = tiposComandos.writer;
function_to_add = $(e.target).data('fun');
var inner = $(createWriterObject()).draggable().appendTo("body");
inner.css("position", "absolute");
e.type = "mousedown.draggable";
e.target = inner[0];
inner.css("left", e.pageX - 15);
inner.css("top", e.pageY - 15);
inner.trigger(e);
});
$('.create_reader').on('click', function(e){
has_element_created_draged = true;
which_element_is_draged = tiposComandos.reader;
function_to_add = $(e.target).data('fun');
var inner = $(createReaderObject()).draggable().appendTo("body");
inner.css("position", "absolute");
e.type = "mousedown.draggable";
e.target = inner[0];
inner.css("left", e.pageX - 15);
inner.css("top", e.pageY - 15);
inner.trigger(e);
});
for (i = 0; i < programa.funcoes.length; i++) {
var x_temp = '#function_drag_cmd_' + i + " .block_commands";
$( x_temp ).each(function( index ) {
Sortable.create(this, {
handle: '.command_drag',
animation: 50,
ghostClass: 'ghost',
group: 'commands_inside_function_drag_' + i,
onEnd: function (evt) {
//updateSequenceFunctionHandler(evt.oldIndex, evt.newIndex);
},
onStart: function (evt) {
console.log("começou");
}
});
});
Sortable.create(document.getElementById('function_drag_cmd_' + i), {
handle: '.command_drag',
animation: 50,
ghostClass: 'ghost',
group: 'commands_inside_function_drag_' + i,
onEnd: function (evt) {
//updateSequenceFunctionHandler(evt.oldIndex, evt.newIndex);
},
onStart: function (evt) {
console.log("começou");
}
});
}
$('.dropdown.change_column_reader_render').dropdown({
onChange: function(value, text, $selectedItem) {
editing_element_index_value = this.parentNode.relatedObj;
if ($($selectedItem).data('value')) {
$(this).find('.text').text(' ');
var el;
if (isNaN(editing_element_index_value.coluna)) {
el = $('');
} else {
el = $('');
}
//$(this).find('.text').text();
//$( el ).insertBefore($(this).find('.text'));
$(this).find('.text').append(el);
el.focus();
//editing_element_index_value = element.relatedObj;
} else {
classList = $selectedItem.attr('class').split(/\s+/);
var seq;
var func;
$.each(classList, function(index, item) {
if (item.indexOf("seq_") > -1) {
seq = item.split("seq_")[1];
}
if (item.indexOf("func_") > -1) {
func = item.split("func_")[1];
}
});
if ($($selectedItem).hasClass('local_vars')) {
this.parentNode.relatedObj.coluna = programa.funcoes[func].variaveis[seq];
}
if ($($selectedItem).hasClass('parameters_vars')) {
this.parentNode.relatedObj.coluna = programa.funcoes[func].lista_parametros[seq];
}
if ($($selectedItem).hasClass('global_vars')) {
this.parentNode.relatedObj.coluna = programa.globais[seq];
}
}
}
});
$('.dropdown.change_column_reader_render_matrix_column').dropdown({
onChange: function(value, text, $selectedItem) {
editing_element_index_value = this.parentNode.relatedObj;
if ($($selectedItem).data('value')) {
$(this).find('.text').text(' ');
var el;
if (isNaN(editing_element_index_value.coluna)) {
el = $('');
} else if (editing_element_index_value.coluna == null) {
el = $('');
} else {
el = $('');
}
//$(this).find('.text').text();
//$( el ).insertBefore($(this).find('.text'));
$(this).find('.text').append(el);
el.focus();
//editing_element_index_value = element.relatedObj;
} else {
classList = $selectedItem.attr('class').split(/\s+/);
var seq;
var func;
$.each(classList, function(index, item) {
if (item.indexOf("seq_") > -1) {
seq = item.split("seq_")[1];
}
if (item.indexOf("func_") > -1) {
func = item.split("func_")[1];
}
});
if ($($selectedItem).hasClass('local_vars')) {
this.parentNode.relatedObj.coluna = programa.funcoes[func].variaveis[seq];
}
if ($($selectedItem).hasClass('parameters_vars')) {
this.parentNode.relatedObj.coluna = programa.funcoes[func].lista_parametros[seq];
}
if ($($selectedItem).hasClass('global_vars')) {
this.parentNode.relatedObj.coluna = programa.globais[seq];
}
}
}
});
$('.dropdown.change_column_reader_render_matrix_line').dropdown({
onChange: function(value, text, $selectedItem) {
editing_element_index_value = this.parentNode.relatedObj;
if ($($selectedItem).data('value')) {
$(this).find('.text').text(' ');
var el;
if (isNaN(editing_element_index_value.linha)) {
el = $('');
} else if (editing_element_index_value.linha == null) {
el = $('');
} else {
el = $('');
}
//$(this).find('.text').text();
//$( el ).insertBefore($(this).find('.text'));
$(this).find('.text').append(el);
el.focus();
//editing_element_index_value = element.relatedObj;
} else {
classList = $selectedItem.attr('class').split(/\s+/);
var seq;
var func;
$.each(classList, function(index, item) {
if (item.indexOf("seq_") > -1) {
seq = item.split("seq_")[1];
}
if (item.indexOf("func_") > -1) {
func = item.split("func_")[1];
}
});
if ($($selectedItem).hasClass('local_vars')) {
this.parentNode.relatedObj.linha = programa.funcoes[func].variaveis[seq];
}
if ($($selectedItem).hasClass('parameters_vars')) {
this.parentNode.relatedObj.linha = programa.funcoes[func].lista_parametros[seq];
}
if ($($selectedItem).hasClass('global_vars')) {
this.parentNode.relatedObj.linha = programa.globais[seq];
}
}
}
});
$('.ui.dropdown.variable_reader')
.dropdown({
onChange: function(value, text, $selectedItem) {
classList = $selectedItem.attr('class').split(/\s+/);
var seq;
var func;
$.each(classList, function(index, item) {
if (item.indexOf("seq_") > -1) {
seq = item.split("seq_")[1];
}
if (item.indexOf("func_") > -1) {
func = item.split("func_")[1];
}
});
if ($($selectedItem).hasClass('local_vars')) {
this.parentNode.relatedObj.variavel = programa.funcoes[func].variaveis[seq];
}
if ($($selectedItem).hasClass('parameters_vars')) {
this.parentNode.relatedObj.variavel = programa.funcoes[func].lista_parametros[seq];
}
if ($($selectedItem).hasClass('global_vars')) {
this.parentNode.relatedObj.variavel = programa.globais[seq];
}
$(this.parentNode).find(".change_column_reader").remove();
$(this.parentNode).find(".change_column_reader_render").remove();
$(this.parentNode).find(".change_column_reader_render_matrix_line").remove();
$(this.parentNode).find(".change_column_reader_render_matrix_column").remove();
$(this.parentNode).find(".change_column_reader_render").remove();
$(this.parentNode).find(".change_column_reader_render_matrix_line").remove();
$(this.parentNode).find(".change_line_reader").remove();
if (this.parentNode.relatedObj.variavel.dimensoes == 1) { //
this.parentNode.relatedObj.linha = null;
this.parentNode.relatedObj.coluna = null;
addOptionsReaderVector(this.parentNode, $(this.parentNode).data('fun'));
} else if (this.parentNode.relatedObj.variavel.dimensoes == 2) { //
this.parentNode.relatedObj.linha = null;
this.parentNode.relatedObj.coluna = null;
addOptionsReaderMatrix(this.parentNode, $(this.parentNode).data('fun'));
}
}
})
;
$('.ui.buttons .dropdown').dropdown();
$('.ui.dropdown.function_return')
.dropdown({
onChange: function(value, text, $selectedItem) {
classList = $selectedItem.attr('class').split(/\s+/);
$.each(classList, function(index, item) {
if (item.indexOf("seq_") > -1) {
seq = item.split("seq_")[1];
for (tm in tiposDados) {
if ($selectedItem.hasClass(tm)) {
programa.funcoes[seq].tipo_retorno = tm;
}
}
updateFunctionReturn(seq, value);
}
});
}
})
;
$('.ui.dropdown.parameter_type').dropdown({
onChange: function(value, text, $selectedItem) {
classList = $selectedItem.attr('class').split(/\s+/);
var fun;
var seq;
$.each(classList, function(index, item) {
if (item.indexOf("fun_") > -1) {
fun = item.split("fun_")[1];
}
if (item.indexOf("seq_") > -1) {
seq = item.split("seq_")[1];
}
});
var dim = 0;
if (value.indexOf(i18n(tiposDados.vector)) > -1) {
dim = 1;
}
for (tm in tiposDados) {
if ($selectedItem.hasClass(tm)) {
updateParameterType(fun, seq, tm, dim);
break;
}
}
}
});
$('.ui.dropdown.variable_type').dropdown({
onChange: function(value, text, $selectedItem) {
classList = $selectedItem.attr('class').split(/\s+/);
var fun;
var seq;
$.each(classList, function(index, item) {
if (item.indexOf("fun_") > -1) {
fun = item.split("fun_")[1];
}
if (item.indexOf("seq_") > -1) {
seq = item.split("seq_")[1];
}
});
var dim = 0;
if (value.indexOf(i18n(tiposDados.vector)) > -1) {
dim = value.split('[').length - 1;
}
for (tm in tiposDados) {
if ($selectedItem.hasClass(tm)) {
updateVariableType(fun, seq, tm, dim);
break;
}
}
}
});
$('.ui.dropdown.global_type').dropdown({
onChange: function(value, text, $selectedItem) {
classList = $selectedItem.attr('class').split(/\s+/);
var fun;
var seq;
$.each(classList, function(index, item) {
if (item.indexOf("seq_") > -1) {
seq = item.split("seq_")[1];
}
});
var dim = 0;
if (value.indexOf(i18n(tiposDados.vector)) > -1) {
dim = value.split('[').length - 1;
}
for (tm in tiposDados) {
if ($selectedItem.hasClass(tm)) {
updateGlobalType(seq, tm, dim);
break;
}
}
}
});
}
var editing_element_index_value = null;
function addOptionsReaderMatrix(element, function_index) {
var ret;
if (element.relatedObj.variavel.dimensoes == 2) {
// LINHA:
var ret = ('
[
]
Valor
Variável');
ret += ''
+ '
';
if (programa.funcoes[function_index].variaveis) {
for (var i = 0; i < programa.funcoes[function_index].variaveis.length; i++) {
ret += '
';
}
}
if (programa.funcoes[function_index].lista_parametros) {
for (var i = 0; i < programa.funcoes[function_index].lista_parametros.length; i++) {
ret += '
';
}
}
if (programa.funcoes[function_index].lista_parametros) {
for (var i = 0; i < programa.funcoes[function_index].lista_parametros.length; i++) {
ret += '
';
}
}
if (programa.funcoes[function_index].lista_parametros) {
for (var i = 0; i < programa.funcoes[function_index].lista_parametros.length; i++) {
ret += '
';
if (programa.funcoes[sequence].comandos) {
for (l = 0; l < programa.funcoes[sequence].comandos.length; l++) {
appender += renderElementCommandGeneric(programa.funcoes[sequence].comandos[l], sequence, l, -1, l);
}
}
appender += '
';
appender += '
}
'
+ '
'
+ '
';
$('.all_functions').append(appender);
}
function renderElementCommandGeneric(command, sequence, l, parent, fullpath) {
if (command.tipo == tiposComandos.comment) {
return renderComment(command, sequence, false, l, parent, fullpath);
}
if (command.tipo == tiposComandos.reader) {
return renderReader(command, sequence, l, parent, fullpath);
}
if (command.tipo == tiposComandos.writer) {
return renderWriter(command, sequence, l, parent, fullpath);
}
if (command.tipo == tiposComandos.attribution) {
return renderAttribution(command, sequence, l, parent, fullpath);
}
if (command.tipo == tiposComandos.iftrue) {
return renderIfTrue(command, sequence, l, parent, fullpath);
}
if (command.tipo == tiposComandos.repeatNtimes) {
return renderRepeatNtimes(command, sequence, l, parent, fullpath);
}
if (command.tipo == tiposComandos.whiletrue) {
return renderWhiletrue(command, sequence, l, parent, fullpath);
}
if (command.tipo == tiposComandos.dowhiletrue) {
return renderDowhiletrue(command, sequence, l, parent, fullpath);
}
if (command.tipo == tiposComandos.switch) {
return renderSwitch(command, sequence, l, parent, fullpath);
}
if (command.tipo == tiposComandos.functioncall) {
return renderFunctioncall(command, sequence, l, parent, fullpath);
}
}
function renderFunctioncall(functioncall_obj, function_index, functioncall_index, data_parent, fullpath) {
var ret = '';
ret += '
funcao() ';
ret += '
';
return ret;
}
function renderSwitch(switch_obj, function_index, repeat_index, data_parent, fullpath) {
var ret = '';
ret += '
escolha (x) { caso 1: caso 2: }';
ret += '
';
return ret;
}
function renderDowhiletrue(dowhiletrue_obj, function_index, repeat_index, data_parent, fullpath) {
var ret = '';
ret += '
faça { ';
ret += '
';
if ((dowhiletrue_obj.commands_block == null)
|| (dowhiletrue_obj.commands_block.length == 0)) {
} else {
for (i = 0; i < dowhiletrue_obj.commands_block.length; i ++) {
ret += renderElementCommandGeneric(dowhiletrue_obj.commands_block[i], function_index, i, repeat_index, (fullpath + ',' + i));
}
}
ret += '
';
ret += ' } enquanto (x < 10); ';
ret += '
';
return ret;
}
function renderWhiletrue(whiletrue_obj, function_index, repeat_index, data_parent, fullpath) {
var ret = '';
ret += '
enquanto (x < 10) { ';
ret += '
';
if ((whiletrue_obj.commands_block == null)
|| (whiletrue_obj.commands_block.length == 0)) {
} else {
for (i = 0; i < whiletrue_obj.commands_block.length; i ++) {
ret += renderElementCommandGeneric(whiletrue_obj.commands_block[i], function_index, i, repeat_index, (fullpath + ',' + i));
}
}
ret += '
';
ret += ' }';
ret += '
';
return ret;
}
function renderRepeatNtimes(repeat_obj, function_index, repeat_index, data_parent, fullpath) {
var ret = '';
ret += '
para (x = 0; x < 10; x ++) { ';
ret += '
';
if ((repeat_obj.commands_block == null)
|| (repeat_obj.commands_block.length == 0)) {
} else {
for (i = 0; i < repeat_obj.commands_block.length; i ++) {
ret += renderElementCommandGeneric(repeat_obj.commands_block[i], function_index, i, repeat_index, (fullpath + ',' + i));
}
}
ret += '
';
ret += ' }';
ret += '
';
return ret;
}
function renderIfTrue(writer_obj, function_index, iftrue_index, data_parent, fullpath) {
var ret = '';
ret += '
if (x < 1) { ';
ret += '
';
if ((writer_obj.commands_block == null)
|| (writer_obj.commands_block.length == 0)) {
} else {
for (ki = 0; ki < writer_obj.commands_block.length; ki ++) {
ret += renderElementCommandGeneric(writer_obj.commands_block[ki], function_index, ki, iftrue_index, (fullpath + ',' + ki));
}
}
ret += '
';
ret += ' } else { ';
ret += '
';
if ((writer_obj.commands_else == null)
|| (writer_obj.commands_else.length == 0)) {
} else {
for (ki = 0; ki < writer_obj.commands_else.length; ki ++) {
ret += renderElementCommandGeneric(writer_obj.commands_else[ki], function_index, ki, iftrue_index, (fullpath + ',' + ki));
}
}
ret += '
';
ret += ' }';
ret += '
';
return ret;
}
function renderAttribution(writer_obj, function_index, attr_index, data_parent, fullpath) {
var ret = '';
ret += '
x = 1 + 1';
ret += '
';
return ret;
}
function renderWriter(writer_obj, function_index, reader_index, data_parent, fullpath) {
var ret = '';
ret += '
'+i18n('write')+' x';
ret += '
';
return ret;
}
function renderReader(reader_obj, function_index, reader_index, data_parent, fullpath) {
var ret = '';
ret += '
'+i18n('read')+' ( ';
ret += '
';
if (reader_obj.variavel) {
if (reader_obj.variavel.eh_constante) {
reader_obj.variavel = null;
ret += '
'+i18n('ui:text_select_var')+'
';
} else {
ret += '
'+reader_obj.variavel.nome+'
';
}
} else {
ret += '
'+i18n('ui:text_select_var')+'
';
}
ret += ''
+ '
';
if (programa.funcoes[function_index].variaveis) {
for (var i = 0; i < programa.funcoes[function_index].variaveis.length; i++) {
ret += '
';
}
}
if (programa.funcoes[function_index].lista_parametros) {
for (var i = 0; i < programa.funcoes[function_index].lista_parametros.length; i++) {
ret += '
';
}
}
if (programa.funcoes[function_index].lista_parametros) {
for (var i = 0; i < programa.funcoes[function_index].lista_parametros.length; i++) {
ret += '
';
}
}
if (programa.funcoes[function_index].lista_parametros) {
for (var i = 0; i < programa.funcoes[function_index].lista_parametros.length; i++) {
ret += '
';
}
}
if (programa.funcoes[function_index].lista_parametros) {
for (var i = 0; i < programa.funcoes[function_index].lista_parametros.length; i++) {
ret += '
';
}
}
if (programa.globais) {
for (var ij = 0; ij < programa.globais.length; ij++) {
if (!programa.globais[ij].eh_constante) {
ret += '
' + programa.globais[ij].nome + '
';
}
}
}
ret += '
';
}
}
ret += ')
';
return ret;
}
function renderComment(comment_obj, function_index, is_function_comment, comment_index, data_parent, fullpath) {
var ret = '';
ret += '
' + comment_obj.texto_comentario + ' ';
ret += '
';
return ret;
}
// Essa função imprime os parâmetros e cria os elementos para a sua manipulação
function renderFunctionParameters(function_obj, sequence) {
var ret = "";
if (function_obj.lista_parametros != null) {
for (var j = 0; j < function_obj.lista_parametros.length; j++) {
var par_temp = function_obj.lista_parametros[j];
ret += '
'+par_temp.nome+' ';
ret += '
';
if (par_temp.dimensoes > 0) {
ret += '
'+ i18n(tiposDados.vector)+':'+i18n(par_temp.tipo);
ret += '
';
} else {
ret += '
'+i18n(par_temp.tipo)+'
';
}
ret += ''
+ '
';
var i = 0;
for (tm in tiposDados) {
i ++;
if (i == 1) { continue; }
if (i == (Object.keys(tiposDados).length)) { break; }
ret += '
'+i18n(tm)+'
';
}
i = 0;
for (tm in tiposDados) {
i ++;
if (i == 1) { continue; }
if (i == (Object.keys(tiposDados).length)) { break; }
ret += '
'
+ i18n(tiposDados.vector)+':'+i18n(tm)
+ '
';
}
ret += '
';
ret += '
';
}
}
return ret;
}
// Essa função imprime as variáveis e os recursos para sua manipulação
function renderVariables(function_obj, sequence) {
var ret = "";
if (function_obj.variaveis != null) {
for (var j = 0; j < function_obj.variaveis.length; j++) {
var par_temp = function_obj.variaveis[j];
ret += '
'+par_temp.nome+' ';
ret += '
';
if (par_temp.dimensoes > 0) {
ret += '
'+ i18n(tiposDados.vector)+':'+i18n(par_temp.tipo);
for (i = 0; i < par_temp.dimensoes; i ++) {
ret += ' [ ] ';
}
ret += '
';
} else {
ret += '
'+i18n(par_temp.tipo)+'
';
}
ret += ''
+ '
';
var i = 0;
for (tm in tiposDados) {
i ++;
if (i == 1) { continue; }
if (i == (Object.keys(tiposDados).length)) { break; }
ret += '
'+i18n(tm)+'
';
}
i = 0;
for (tm in tiposDados) {
i ++;
if (i == 1) { continue; }
if (i == (Object.keys(tiposDados).length)) { break; }
ret += '
'
+ ''
+ i18n(tiposDados.vector)+':'+i18n(tm)
+ '
'
+ '
[ ]
'
+ '
[ ] [ ]
'
+ '
'
+ '
';
}
ret += '
= ';
if (par_temp.dimensoes == 0) {
if (par_temp.tipo == tiposDados.real) {
ret += '
'+par_temp.valor.toFixed(1)+'
';
} else {
if (par_temp.tipo == tiposDados.boolean) {
ret += '
'+par_temp.valor+'
';
} else {
ret += '
'+par_temp.valor+'
';
}
}
} else {
ret += '
';
if (par_temp.dimensoes == 1) {
ret += '
';
if (par_temp.tipo == tiposDados.real) {
for (var k = 0; k < par_temp.colunas; k++) {
ret += '
'+par_temp.valor[k].toFixed(1)+''+'
';
}
} else {
for (var k = 0; k < par_temp.colunas; k++) {
if (par_temp.tipo == tiposDados.boolean) {
ret += '
'+par_temp.valor[k]+''+'
';
} else {
ret += '
'+par_temp.valor[k]+''+'
';
}
}
}
ret += '
';
ret += '
';
ret += '
'
+ '
';
}
if (par_temp.dimensoes == 2) {
if (par_temp.tipo == tiposDados.real) {
for (var l = 0; l < par_temp.linhas; l++) {
ret += '
';
for (var k = 0; k < par_temp.colunas; k++) {
ret += '
'+par_temp.valor[l][k].toFixed(1)+''+'
';
}
ret += '
';
}
} else {
for (var l = 0; l < par_temp.linhas; l++) {
ret += '
';
for (var k = 0; k < par_temp.colunas; k++) {
if (par_temp.tipo == tiposDados.boolean) {
ret += '
'+par_temp.valor[l][k]+''+'
';
} else {
ret += '
'+par_temp.valor[l][k]+''+'
';
}
}
ret += '
';
}
}
if (par_temp.linhas == 0) {
ret += '
';
}
ret += '
'
+ '
';
ret += '';
ret += '
'
+ '
';
}
}
ret += '
';
}
}
return ret;
}
// Essa função imprime o tipo de retorno da função e cria o menu do tipo 'select' para alteração
function renderFunctionReturn(function_obj, sequence) {
var ret = '
';
if (function_obj.dimensoes_retorno > 0) {
ret += '
'+ i18n(tiposDados.vector)+':'+i18n(function_obj.tipo_retorno);
ret += '
';
} else {
ret += '
'+i18n(function_obj.tipo_retorno)+'
';
}
ret += ''
+ '
';
var i = 0;
for (tm in tiposDados) {
if (i == (Object.keys(tiposDados).length - 1)) { break; }
ret += '
'+i18n(tm)+'
';
i ++;
}
i = 0;
for (tm in tiposDados) {
i ++;
if (i == 1) { continue; }
if (i == (Object.keys(tiposDados).length)) { break; }
ret += '