Browse Source

Alterações no menu do retorno e parâmetros das funções, para permitir vetores.

Igor Félix 6 years ago
parent
commit
8fd253aa67

+ 10 - 1
css/ivprog-visual-1.0.css

@@ -115,7 +115,7 @@ body {
 	display: inline;
 }
 
-.enable_edit_name_function, .enable_edit_name_parameter {
+.enable_edit_name_function, .enable_edit_name_parameter, .add_parameter, .remove_parameter {
 	cursor: pointer;
 }
 
@@ -183,4 +183,13 @@ body {
 
 .parameters_list {
 	display: inline;
+}
+
+.function_return, .parameter_type {
+	margin-left: 10px;
+    margin-right: 15px;
+}
+
+.function_return .dropdown .icon, .parameter_type .dropdown .icon {
+	margin-left: 6px;
 }

+ 18 - 8
i18n/i18n-database.json

@@ -4,6 +4,11 @@
 		"es": "función",
 		"pt": "função"
 	},
+	"Function": {
+		"en": "Function",
+		"es": "Función",
+		"pt": "Função"
+	},
 	"start": {
 		"en": "start",
 		"es": "comienzo",
@@ -44,14 +49,19 @@
 		"es": "Mando",
 		"pt": "Comando"
 	},
-	"": {
-		"en": "",
-		"es": "",
-		"pt": ""
+	"new_parameter": {
+		"en": "new_parameter",
+		"es": "nuevo_parámetro",
+		"pt": "novo_parâmetro"
+	},
+	"new_function": {
+		"en": "new_function",
+		"es": "nueva_función",
+		"pt": "nova_função"
 	},
-	"": {
-		"en": "",
-		"es": "",
-		"pt": ""
+	"vector": {
+		"en": "vector",
+		"es": "vector",
+		"pt": "vetor"
 	}
 }

+ 49 - 28
i18n/i18n-engine.js

@@ -1,37 +1,58 @@
 
-function i18n(template) {
-  for (var
-    info = i18n.db[i18n.locale][template.join('\x01')],
-    out = [info.t[0]],
-    i = 1, length = info.t.length; i < length; i++
-  ) out[i] = arguments[1 + info.v[i - 1]] + info.t[i];
-  return out.join('');
+function i18n(identifier) {
+  if (!i18n.db[i18n.locale]) {
+    if (!i18n.db['en'][identifier]) {
+      return "{MISSING_I18N_IDENTIFIER}";
+    }
+    return i18n.db['en'][identifier];
+  }
+  if (!i18n.db[i18n.locale][identifier]) {
+    return "{MISSING_I18N_IDENTIFIER}";
+  }
+  return i18n.db[i18n.locale][identifier];
 }
 
-i18n.set = locale => (tCurrent, ...rCurrent) => {
-  const key = tCurrent.join('\x01');
-  let db = i18n.db[locale] || (i18n.db[locale] = {});
-  db[key] = {
-    t: tCurrent.slice(),
-    v: rCurrent.map((value, i) => i)
-  };
-  const config = {
-    for: other => (tOther, ...rOther) => {
-      db = i18n.db[other] || (i18n.db[other] = {});
-      db[key] = {
-        t: tOther.slice(),
-        v: rOther.map((value, i) => rCurrent.indexOf(value))
-      };
-      return config;
-    }
-  };
-  return config;
-};
+i18n.set = function(locale, identifier, translate) {
+  if (!i18n.db[locale]) {
+    i18n.db[locale] = {};
+  }
+  i18n.db[locale][identifier] = translate;
+}
+
+i18n.updateLocale = function(new_locale) {
+  i18n.locale = new_locale;
+  $( "data.i18n" ).each(function( index ) {
+    $( this ).text(i18n($( this ).val()));
+  });
+}
 
-i18n.locale = 'en';
+if (iLMparameters.lang) {
+  i18n.locale = iLMparameters.lang;
+} else {
+  i18n.locale = 'en';
+}
 i18n.db = {};
 
+$.ajaxSetup({
+    async: false
+});
 
 $.getJSON('i18n/i18n-database.json', function(data) {
-    console.log("acho que funcionou");
+    for (x in data) {
+      l = data[x];
+      i18n.set('en', x, l.en);
+      i18n.set('es', x, l.es);
+      i18n.set('pt', x, l.pt);
+    }
+    console.log("ja era!");
+});
+
+$.ajaxSetup({
+    async: true
+});
+
+$( document ).ready(function() {
+  $( "data.i18n" ).each(function( index ) {
+    $( this ).text(i18n($( this ).val()));
+  });
 });

+ 56 - 0
js/iassign-integration-functions.js

@@ -0,0 +1,56 @@
+// Função para ler parâmetros informados pelo iTarefa via URL
+// Apesar de não ser obrigatório, será muito útil para capturar os parâmetros
+function getParameterByName(name) {
+    var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
+    return match ? decodeURIComponent(match[1].replace(/\+/g, ' ')) : null;
+}
+
+// Criando um array com os parâmetros informados pelo iTarefa
+// Observe que para cada parâmetro, é realizada a chamada do método getParameterByName, implementado acima
+var iLMparameters = {
+    iLM_PARAM_ServerToGetAnswerURL: getParameterByName("iLM_PARAM_ServerToGetAnswerURL"),
+    iLM_PARAM_SendAnswer: getParameterByName("iLM_PARAM_SendAnswer"),
+    iLM_PARAM_AssignmentURL: getParameterByName("iLM_PARAM_AssignmentURL"),
+    iLM_PARAM_Assignment: getParameterByName("iLM_PARAM_Assignment"),
+    lang: getParameterByName("lang")
+};
+
+// Função chamada pelo iTarefa quando o professor finaliza a criação da atividade
+// ou quando o aluno finaliza a resolução do exercício
+// O retorno é um JSON com os dados do exercício ou da resolução
+// Esse retorno será armazenado no banco de dados do Moodle, pelo iTarefa
+function getAnswer() {
+    // Se o parâmetro "iLM_PARAM_SendAnswer" for false,
+    // então trata-se de resolução de atividade
+    if (iLMparameters.iLM_PARAM_SendAnswer == 'false') {
+        // Montar o retorno da resposta do aluno
+        
+    } else {
+        
+    }
+}
+
+// Função chamada pelo iTarefa para receber a nota do aluno na atividade
+// O retorno é um valor entre 0.0 e 1.0
+function getEvaluation() {
+    if (iLMparameters.iLM_PARAM_SendAnswer == 'false') {
+        // Calcula a nota do aluno:
+
+        // A chamada do método abaixo é obrigatória!
+        // Observe que a chamada parte do iLM para o iTarefa
+        parent.getEvaluationCallback(0);
+    }
+}
+
+
+// Função para que o iMA leia os dados da atividade fornecidos pelo iTarefa
+function getiLMContent() {
+
+    // O parâmetro "iLM_PARAM_Assignment" fornece o URL do endereço que deve ser
+    // requisitado via AJAX para a captura dos dados da atividade
+    $.get(iLMparameters.iLM_PARAM_Assignment, function (d) {
+
+        
+
+    });
+}

+ 13 - 4
js/ivprog-visual-1.0.js

@@ -1,6 +1,7 @@
 // Definição das classes utilizadas para armazenar o algoritmo
 
-var tiposDados = Object.freeze({void:"void", integer:"integer", real:"real", text:"text", boolean:"boolean"});
+// Não adicionar elementos ao tipoDados, pois existem componentes que dependem do seu tamanho e isso afetará seu funcionamento
+var tiposDados = Object.freeze({void:"void", integer:"integer", real:"real", text:"text", boolean:"boolean", vector:"vector"});
 
 var Variavel = function(tipo, nome, valor, dimensoes = 0, eh_constante = false) {
 	this.tipo = tipo;
@@ -37,11 +38,19 @@ function adicionarFuncao(funcao) {
 	programa.funcoes.push(funcao);
 }
 
+//var tex = i18n('text');
+
 // Adicionando a função principal automaticamente
 var programa = new Programa();
-var funcaoPrincipal = new Funcao("principal", tiposDados.void, 0, new Array(), true);
+var funcaoPrincipal = new Funcao(i18n("start"), tiposDados.void, 0, new Array(), true);
+
+//funcaoPrincipal.lista_parametros.push(new Variavel(tiposDados.text, "args"));
+
 
-funcaoPrincipal.lista_parametros.push(new Variavel(tiposDados.text, "args"));
+adicionarFuncao(funcaoPrincipal);
 
+var funcaoSomar = new Funcao("somar", tiposDados.integer, 0, new Array(), false);
+funcaoSomar.lista_parametros.push(new Variavel(tiposDados.integer, "a"));
+funcaoSomar.lista_parametros.push(new Variavel(tiposDados.integer, "b"));
 
-adicionarFuncao(funcaoPrincipal);
+adicionarFuncao(funcaoSomar);

+ 257 - 36
js/ivprog-visual-functions-1.0.js

@@ -2,7 +2,7 @@ var counter_new_functions = 0;
 var counter_new_parameters = 0;
 
 function addFunctionHandler() {
-	new_function = new Funcao("new_function_" + counter_new_functions);
+	new_function = new Funcao(i18n("new_function") + "_" + counter_new_functions);
 	adicionarFuncao(new_function);
 
 	counter_new_functions ++;
@@ -40,25 +40,86 @@ function renderAlgorithm() {
 }
 
 function addHandlers() {
-
+	$('.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)) {
+						console.log("possui: " + tm);
+						updateParameterType(fun, seq, tm, dim);
+						break;
+					} 
+				}
+
+		    }
+		});
 }
 
 function addParameter(sequence) {
 	if (programa.funcoes[sequence].lista_parametros == null) {
 		programa.funcoes[sequence].lista_parametros = new Array();
 	}
-	programa.funcoes[sequence].lista_parametros.push(new Variavel(tiposDados.integer, "new_parameter_" + counter_new_parameters));
+	programa.funcoes[sequence].lista_parametros.push(new Variavel(tiposDados.integer, i18n("new_parameter") + "_" + counter_new_parameters));
 	counter_new_parameters ++;
 
 	renderAlgorithm();
 }
 
 function updateFunctionReturn(sequence, new_value) {
-	programa.funcoes[sequence].tipo_retorno = new_value;
+	if (new_value.indexOf(i18n(tiposDados.vector)) > -1) {
+
+		programa.funcoes[sequence].dimensoes_retorno = 1;
+	} else {
+
+		programa.funcoes[sequence].dimensoes_retorno = 0;
+	}
+	
 }
 
-function updateParameterType(wich_function, wich_parameter, new_value) {
+function updateParameterType(wich_function, wich_parameter, new_value, new_dimensions) {
 	programa.funcoes[wich_function].lista_parametros[wich_parameter].tipo = new_value;
+	programa.funcoes[wich_function].lista_parametros[wich_parameter].dimensoes = new_dimensions;
+
 }
 
 
@@ -204,6 +265,11 @@ function enableNameParameterUpdate(parent_node, which_function, which_parameter)
 
 }
 
+function removeParameter(parent_node, which_function, which_parameter) {
+	programa.funcoes[which_function].lista_parametros.splice(which_parameter, 1);
+	renderAlgorithm();
+}
+
 function appendFunction(function_obj, sequence) {
 	var appender = '<div class="ui secondary segment function_div list-group-item">'
 		+ '<span class="glyphicon glyphicon-move" aria-hidden="true"><i class="icon sort alternate vertical"></i></span>'
@@ -211,44 +277,26 @@ function appendFunction(function_obj, sequence) {
 		+ (!function_obj.eh_principal ? '<button class="ui icon button large remove_function_button" onclick="removeFunctionHandler(this.parentNode, '+sequence+')"><i class="red icon times"></i></button>' : '')
 		+ '<button class="ui icon button tiny minimize_function_button" onclick="minimizeFunctionHandler(this.parentNode, '+sequence+')"><i class="icon window minimize"></i></button>'
 
-		+ '<div class="function_signature_div">function '
+		+ '<div class="function_signature_div">'+i18n('function')+' ';
 
-		+ '<select class="ui fluid dropdown data_types_dropdown" onchange="updateFunctionReturn('+sequence+', this.value)">'
-        + '<option value="'+tiposDados.void+'" '+(function_obj.tipo_retorno == tiposDados.void ? 'selected' : '')+'>'+tiposDados.void+'</option>'
-        + '<option value="'+tiposDados.integer+'" '+(function_obj.tipo_retorno == tiposDados.integer ? 'selected' : '')+'>'+tiposDados.integer+'</option>'
-        + '<option value="'+tiposDados.real+'" '+(function_obj.tipo_retorno == tiposDados.real ? 'selected' : '')+'>'+tiposDados.real+'</option>'
-        + '<option value="'+tiposDados.text+'" '+(function_obj.tipo_retorno == tiposDados.text ? 'selected' : '')+'>'+tiposDados.text+'</option>'
-        + '<option value="'+tiposDados.boolean+'" '+(function_obj.tipo_retorno == tiposDados.boolean ? 'selected' : '')+'>'+tiposDados.boolean+'</option>'
-        + '</select>'
 
-		+ '<div class="function_name_div"><span class="span_name_function" ondblclick="enableNameFunctionUpdate(this.parentNode, '+sequence+')" >'+function_obj.nome+'</span> <i class="icon small pencil alternate enable_edit_name_function" onclick="enableNameFunctionUpdate(this.parentNode, '+sequence+')"></i></div> ' 
+    if (function_obj.eh_principal) {
+    	appender += '<div class="function_name_div">  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' + i18n('void') + ' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="span_name_function" >'+function_obj.nome+'</span> </div> '
+			+ '( <div class="ui large labels parameters_list">';
+    } else {
+    	appender += renderFunctionReturn(function_obj, sequence);
 
-		+ '( <i class="ui icon plus square outline add_parameter" onclick="addParameter('+sequence+')"></i> <div class="ui large labels parameters_list">';
+	    appender += '<div class="function_name_div"><span class="span_name_function" ondblclick="enableNameFunctionUpdate(this.parentNode, '+sequence+')" >'+function_obj.nome+'</span> <i class="icon small pencil alternate enable_edit_name_function" onclick="enableNameFunctionUpdate(this.parentNode, '+sequence+')"></i></div> ' 
+    		+ '( <i class="ui icon plus square outline add_parameter" onclick="addParameter('+sequence+')"></i> <div class="ui large labels parameters_list">';
+    }
 
-
-		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];
-
-				appender += '<div class="ui label function_name_parameter"><span class="span_name_parameter" ondblclick="enableNameParameterUpdate(this.parentNode, '+sequence+', '+j+')">'+par_temp.nome+'</span> <i class="icon small pencil alternate enable_edit_name_parameter" onclick="enableNameParameterUpdate(this.parentNode, '+sequence+', '+j+')"></i>';
-
-				appender += '<select class="ui fluid dropdown parameter_data_types_dropdown" onchange="updateParameterType('+sequence+', '+j+', this.value)">'
-        		+ '<option value="'+tiposDados.integer+'" '+(par_temp.tipo == tiposDados.integer ? 'selected' : '')+'>'+tiposDados.integer+'</option>'
-        		+ '<option value="'+tiposDados.real+'" '+(par_temp.tipo == tiposDados.real ? 'selected' : '')+'>'+tiposDados.real+'</option>'
-        		+ '<option value="'+tiposDados.text+'" '+(par_temp.tipo == tiposDados.text ? 'selected' : '')+'>'+tiposDados.text+'</option>'
-        		+ '<option value="'+tiposDados.boolean+'" '+(par_temp.tipo == tiposDados.boolean ? 'selected' : '')+'>'+tiposDados.boolean+'</option>'
-        		+ '</select>';
-
-				appender += "</div>";
-			}
-		}
-
-		appender += '</div> ) {</div>'
+    appender += renderFunctionParameters(function_obj, sequence);
 		
+	appender += '</div> ) {</div>'
 		+ (function_obj.esta_oculta ? ' <div class="function_area" style="display: none;"> ' : ' <div class="function_area"> ')
 
-		+ '<div class="ui top attached segment variables_list_div"><div class="ui teal small labeled icon button add_variable_button">Variable<i class="add icon"></i></div></div>'
-		+ '<div class="ui bottom attached segment commands_list_div"><div class="ui teal small labeled icon button add_command_button">Command<i class="add icon"></i></div></div>'		
+		+ '<div class="ui top attached segment variables_list_div"><div class="ui teal small labeled icon button add_variable_button">'+i18n('Variable')+'<i class="add icon"></i></div></div>'
+		+ '<div class="ui bottom attached segment commands_list_div"><div class="ui teal small labeled icon button add_command_button">'+i18n('Command')+'<i class="add icon"></i></div></div>'		
 
 		+ '<div class="function_close_div">}</div>'
 		+ '</div>'
@@ -257,6 +305,179 @@ function appendFunction(function_obj, sequence) {
 	$('.all_functions').append(appender); 
 }
 
+// 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 += '<div class="ui label function_name_parameter"><span class="span_name_parameter" ondblclick="enableNameParameterUpdate(this.parentNode, '+sequence+', '+j+')">'+par_temp.nome+'</span> <i class="icon small pencil alternate enable_edit_name_parameter" onclick="enableNameParameterUpdate(this.parentNode, '+sequence+', '+j+')"></i>';
+
+			ret += '<div class="ui dropdown parameter_type seq_'+j+' fun_'+sequence+'">';
+  	
+		  	if (par_temp.dimensoes > 0) {
+		  		ret += '<div class="text seq_'+j+' fun_'+sequence+'">'+ i18n(tiposDados.vector)+':'+i18n(par_temp.tipo);
+		  		ret += '</div>';
+		  	} else {
+		  		ret += '<div class="text seq_'+j+' fun_'+sequence+'">'+i18n(par_temp.tipo)+'</div>';
+		  	}
+
+		  	ret += '<i class="dropdown icon"></i>'
+		  		+ '<div class="menu seq_'+j+' fun_'+sequence+'">';
+
+		  	var i = 0;
+		  	for (tm in tiposDados) {
+		  		i ++;
+		  		if (i == 1) { continue; }
+		  		if (i == (Object.keys(tiposDados).length - 1)) { break; }
+
+		  		ret += '<div class="item ' + ((par_temp.tipo == tm && par_temp.dimensoes < 1) ? ' selected ' : '') + ' seq_'+j+' fun_'+sequence+' '+tm+'" >'+i18n(tm)+'</div>';
+
+		  	}
+
+		  	i = 0;
+		  	for (tm in tiposDados) {
+		  		i ++;
+		  		if (i == 1) { continue; }
+		  		if (i == (Object.keys(tiposDados).length)) { break; }
+
+		  		ret += '<div class="item seq_'+j+' '+tm+' fun_'+sequence+' ' + ((par_temp.tipo == tm && par_temp.dimensoes > 0) ? ' selected ' : '') + ' ">'
+			    	+  i18n(tiposDados.vector)+':'+i18n(tm)
+			    	+ '</div>';	
+		  	}
+
+    		ret += '</div></div>';
+
+
+
+
+			ret += ' <i class="red icon times remove_parameter" onclick="removeParameter(this.parentNode, '+sequence+', '+j+')"></i></div>';
+
+		}
+	}
+	return ret;
+}
+
+
+function renderVariables(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 += '<div class="ui label function_name_parameter"><span class="span_name_parameter" ondblclick="enableNameParameterUpdate(this.parentNode, '+sequence+', '+j+')">'+par_temp.nome+'</span> <i class="icon small pencil alternate enable_edit_name_parameter" onclick="enableNameParameterUpdate(this.parentNode, '+sequence+', '+j+')"></i>';
+
+			ret += '<select class="ui fluid dropdown parameter_data_types_dropdown" onchange="updateParameterType('+sequence+', '+j+', this.value)">'
+    		+ '<option value="'+tiposDados.integer+'" '+(par_temp.tipo == tiposDados.integer ? 'selected' : '')+'>'+i18n(tiposDados.integer)+'</option>'
+    		+ '<option value="'+tiposDados.real+'" '+(par_temp.tipo == tiposDados.real ? 'selected' : '')+'>'+i18n(tiposDados.real)+'</option>'
+    		+ '<option value="'+tiposDados.text+'" '+(par_temp.tipo == tiposDados.text ? 'selected' : '')+'>'+i18n(tiposDados.text)+'</option>'
+    		+ '<option value="'+tiposDados.boolean+'" '+(par_temp.tipo == tiposDados.boolean ? 'selected' : '')+'>'+i18n(tiposDados.boolean)+'</option>'
+    		+ '</select>';
+
+			ret += ' <i class="red icon times remove_parameter" onclick="removeParameter(this.parentNode, '+sequence+', '+j+')"></i></div>';*/
+
+			ret += '<div class="ui label function_name_parameter"><span class="span_name_parameter" ondblclick="enableNameParameterUpdate(this.parentNode, '+sequence+', '+j+')">'+par_temp.nome+'</span> <i class="icon small pencil alternate enable_edit_name_parameter" onclick="enableNameParameterUpdate(this.parentNode, '+sequence+', '+j+')"></i>';
+
+			ret += '<div class="ui dropdown parameter_type seq_'+j+' fun_'+sequence+'">';
+  	
+		  	if (par_temp.dimensoes > 0) {
+		  		ret += '<div class="text seq_'+j+' fun_'+sequence+'">'+ i18n(tiposDados.vector)+':'+i18n(par_temp.tipo);
+		  		for (i = 0; i < par_temp.dimensoes; i ++) {
+		  			ret += ' [ ] ';
+		  		}
+
+		  		ret += '</div>';
+		  	} else {
+		  		ret += '<div class="text seq_'+j+' fun_'+sequence+'">'+i18n(par_temp.tipo)+'</div>';
+		  	}
+
+		  	ret += '<i class="dropdown icon"></i>'
+		  		+ '<div class="menu seq_'+j+' fun_'+sequence+'">';
+
+		  	var i = 0;
+		  	for (tm in tiposDados) {
+		  		i ++;
+		  		if (i == 1) { continue; }
+		  		if (i == (Object.keys(tiposDados).length - 1)) { break; }
+
+		  		ret += '<div class="item ' + (par_temp.tipo == tm ? ' selected ' : '') + ' seq_'+j+' fun_'+sequence+' '+tm+'" >'+i18n(tm)+'</div>';
+
+		  	}
+
+		  	i = 0;
+		  	for (tm in tiposDados) {
+		  		i ++;
+		  		if (i == 1) { continue; }
+		  		if (i == (Object.keys(tiposDados).length)) { break; }
+
+		  		ret += '<div class="item seq_'+j+' fun_'+sequence+'">'
+			    	+ '<i class="dropdown icon"></i>'
+			    	+  i18n(tiposDados.vector)+':'+i18n(tm)
+			      	+  '<div class="menu seq_'+j+' fun_'+sequence+'">'
+				        + '<div class="item seq_'+j+' fun_'+sequence+' '+tm+'" data-text="'+ i18n(tiposDados.vector)+':'+i18n(tm)+' [ ] ">[ ]</div>'
+				        + '<div class="item seq_'+j+' fun_'+sequence+' '+tm+'" data-text="'+ i18n(tiposDados.vector)+':'+i18n(tm)+' [ ] [ ] ">[ ] [ ] </div>'
+				        + '<div class="item seq_'+j+' fun_'+sequence+' '+tm+'" data-text="'+ i18n(tiposDados.vector)+':'+i18n(tm)+' [ ] [ ] [ ]">[ ] [ ] [ ] </div>'
+			      	+  '</div>'
+			    	+ '</div>';	
+		  	}
+
+    		ret += '</div></div>';
+
+
+
+
+			ret += ' <i class="red icon times remove_parameter" onclick="removeParameter(this.parentNode, '+sequence+', '+j+')"></i></div>';
+
+		}
+	}
+	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 = '<div class="ui dropdown function_return seq_'+sequence+'">';
+  	
+  	if (function_obj.dimensoes_retorno > 0) {
+  		ret += '<div class="text seq_'+sequence+'"">'+ i18n(tiposDados.vector)+':'+i18n(function_obj.tipo_retorno);
+  		ret += '</div>';
+  	} else {
+  		ret += '<div class="text seq_'+sequence+'"">'+i18n(function_obj.tipo_retorno)+'</div>';
+  	}
+
+  	ret += '<i class="dropdown icon"></i>'
+  		+ '<div class="menu seq_'+sequence+'"">';
+
+  	var i = 0;
+  	for (tm in tiposDados) {
+  		if (i == (Object.keys(tiposDados).length - 1)) { break; }
+
+  		ret += '<div class="item ' + ((function_obj.tipo_retorno == tm && function_obj.dimensoes_retorno < 1) ? ' selected ' : '') + ' seq_'+sequence+' '+tm+'" >'+i18n(tm)+'</div>';
+
+  		i ++;
+  	}
+
+  	i = 0;
+  	for (tm in tiposDados) {
+  		i ++;
+  		if (i == 1) { continue; }
+  		if (i == (Object.keys(tiposDados).length)) { break; }
+
+  		ret += '<div class="item seq_'+sequence+' '+tm+' '+ ((function_obj.tipo_retorno == tm && function_obj.dimensoes_retorno > 0) ? ' selected ' : '') +'" data-text="'+i18n(tiposDados.vector)+':'+i18n(tm)+' ">'
+	    	+  i18n(tiposDados.vector)+':'+i18n(tm)
+	    	+ '</div>';	
+  	}
+
+    ret += '</div></div>';
+
+    return ret;
+}
+
 
 
 

+ 4 - 0
js/semantic/semantic-buttons.js

@@ -30,6 +30,10 @@ var button_ready = function() {
     .dropdown()
   ;
 
+  $('.ui.dropdown')
+    .dropdown()
+  ;
+
 
   $('.add_function_button').on('click', addFunctionHandler);
 

+ 14 - 1
main.html

@@ -6,6 +6,8 @@
     <link rel="stylesheet" type="text/css" href="css/ivprog-visual-1.0.css">
     <script src="js/jquery-3.3.1.min.js"></script>
 
+    <script src="js/iassign-integration-functions.js"></script>
+
     <script src="i18n/i18n-engine.js"></script>
 
     <script src="js/semantic/semantic.min.js"></script>
@@ -18,6 +20,7 @@
     <script src="js/Sortable.js"></script>
   </head>
   <body>
+   
     <div class="ui one column doubling stackable grid container">
       <div class="column">
         <div class="ui container main_title">
@@ -93,12 +96,22 @@
 
 
         <div class="ui teal small labeled icon button add_function_button">
-          Function
+          <data class="i18n" value="Function">Function</data>
           <i class="add icon"></i>
         </div>
 
       </div>
       
     </div>
+
+
+
+
+
+
+
+
+
+
   </body>
 </html>