1
0
Преглед на файлове

Continuando os comandos

Igor преди 6 години
родител
ревизия
728c7f4fbe
променени са 4 файла, в които са добавени 118 реда и са изтрити 25 реда
  1. 13 1
      css/ivprog-visual-1.0.css
  2. 99 21
      js/iassign-integration-functions.js
  3. 1 0
      js/visualUI/code_generator.js
  4. 5 3
      js/visualUI/functions.js

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

@@ -149,7 +149,7 @@ body {
 .function_name_div, .function_return_div, .function_name_parameter, .created_div_valor_var, .function_return, .var_value_menu_div, .variable_rendered, .variable_rendered div, .var_attributed,
 .expression_operand_1, .expression_operand_2, .operator, .div_comment_text, .value_rendered, .parameters_function_called, .parameters_function_called div, .expression_elements,
 .expression_element, .var_rendered, .menu_add_item, .component_element, .component_element, .conditional_expression, .variable_attribution, .attribution_expression, .var_value_expression,
-.incrementation_field, .incrementation_variable, .first_operand, .operator, .second_operand, .variable_to_switch, .variable_case {
+.incrementation_field, .incrementation_variable, .first_operand, .operator, .second_operand, .variable_to_switch, .variable_case, .button_remove_case {
 	display: inline;
 }
 
@@ -358,4 +358,16 @@ div.buttons_manage_columns {
 
 .ui table .btn_actions {
 	text-align: center;
+}
+
+.button_remove_case {
+	cursor: pointer;
+	padding: 3px;
+}
+
+.ui.button_add_case {
+	margin-top: 10px;
+}
+.accordion {
+	margin: auto;
 }

+ 99 - 21
js/iassign-integration-functions.js

@@ -31,20 +31,53 @@ function getAnswer () {
         
     } else {
         // Montar o retorno com a criação da atividade do professor
-        return prepareTestCases();
+        var ret = ' { ' + prepareTestCases() 
+            + ',\n"settings_data_types": \n' + JSON.stringify($('form[name="settings_data_types"]').serializeArray()) 
+            + ',\n"settings_commands": \n' + JSON.stringify($('form[name="settings_commands"]').serializeArray()) 
+            + ',\n"settings_functions": \n' + JSON.stringify($('form[name="settings_functions"]').serializeArray()) 
+            + ' } ';
+
+        if ($("input[name='include_algo']").is(':checked')) {
+            ret += '\n\nalgorithm\n\n';
+            ret += generator();
+        }
+
+        return ret;
     }
 }
 
 function prepareTestCases () {
-    var ret = '{ \n "testcases" : [ '
+    var ret = ' \n "testcases" : [ '
     var test_cases_array = $('form[name="test_cases"]').serializeArray();
     for (var i = 0; i < test_cases_array.length; i = i + 2) {
         ret += '\n{ ';
-        ret += '\n "input": "' + test_cases_array[i].value + '",'
-        ret += '\n "output": "' + test_cases_array[i+1].value + '" '
-        ret += '\n},'
+        ret += '\n "input": [';
+        var inps = test_cases_array[i].value.match(/[^\r\n]+/g);
+        if (inps) {
+            for (var j = 0; j < inps.length; j++) {
+                ret += '"' + inps[j] + '"';
+                if ((j + 1) < inps.length) {
+                    ret += ', ';
+                }
+            }
+        }
+        ret += '], \n "output": [';
+        var outs = test_cases_array[i+1].value.match(/[^\r\n]+/g);
+        if (outs) {
+            for (var j = 0; j < outs.length; j++) {
+                ret += '"' + outs[j] + '"';
+                if ((j + 1) < outs.length) {
+                    ret += ', ';
+                }
+            }
+        }
+        ret += ']';
+        ret += '\n}'
+        if ((i + 2) < test_cases_array.length) {
+            ret += ',';
+        }
     }
-    ret += '\n] }';
+    ret += '\n] ';
     return ret;
 }
 
@@ -62,6 +95,11 @@ function getEvaluation () {
 
 
 var testCases = null;
+var settingsDataTypes = null;
+var settingsCommands = null;
+var settingsFunctions = null;
+var algorithm_in_ilm = null;
+
 
 // Função para que o iMA leia os dados da atividade fornecidos pelo iTarefa
 function getiLMContent () {
@@ -69,10 +107,23 @@ 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 (data) {
-        // testCases é preenchida
+        if (iLMparameters.iLM_PARAM_SendAnswer == 'false') {
+            prepareActivityToStudent(data);
+        } else {
+
+        }
     });
 }
 
+function prepareActivityToStudent(ilm_cont) {
+    var content = JSON.parse(ilm_cont.split('algorithm')[0]);
+    testCases = content.testcases;
+    settingsDataTypes = content.settings_data_types;
+    settingsCommands = content.settings_commands;
+    settingsFunctions = content.settings_functions;
+    algorithm_in_ilm = ilm_cont.split('algorithm')[1];
+}
+
 // Função para organizar se para criação, visualização ou resolução de atividade
 function prepareEnvironment () {
     if ((iLMparameters.iLM_PARAM_AssignmentURL == "true") && (iLMparameters.iLM_PARAM_SendAnswer == "true")) {
@@ -80,6 +131,21 @@ function prepareEnvironment () {
     }
 }
 
+$(document).ready(function() {
+
+    // Se iLM_PARAM_SendAnswer for false, então trata-se de resolução de atividade,
+    // portanto, a "DIV" de resolução é liberada
+    if (iLMparameters.iLM_PARAM_SendAnswer == 'false') {
+        //$('.resolucao').css("display","block");
+        getiLMContent();
+
+    } else {
+        // Caso não esteja em modo de resolução de atividade, a visualização no momento
+        // é para a elaboração de atividade:
+        //$('.elaboracao').css("display","block");
+    }
+});
+
 // Função para preparar a interface para o professor criar atividade:
 function prepareActivityCreation () {
 
@@ -91,7 +157,7 @@ function prepareActivityCreation () {
     $('.main_title').remove();
     $('.ui.accordion').addClass('styled');
     
-    $('<div class="ui checkbox"><input type="checkbox" name="include_algo" tabindex="0" class="hidden"><label>'+LocalizedStrings.getUI('text_teacher_algorithm_include')+'</label></div>').insertBefore('.content_margin');
+    $('<div class="ui checkbox"><input type="checkbox" name="include_algo" class="include_algo" tabindex="0" class="hidden"><label>'+LocalizedStrings.getUI('text_teacher_algorithm_include')+'</label></div>').insertBefore('.content_margin');
     
     var cases_test_div = $('<div class="ui accordion styled"><div class="active title"><i class="dropdown icon"></i>'+LocalizedStrings.getUI('text_teacher_test_case')+'</div><div class="active content"></div></div>');
 
@@ -112,9 +178,6 @@ function prepareActivityCreation () {
 
 function prepareTableTestCases (div_el) {
 
-    //return JSON.stringify($('form[name="elaborar"]').serializeArray());
-
-
     var table_el = '<form name="test_cases"><table class="ui blue table"><thead><tr><th width="30px">#</th><th>'+LocalizedStrings.getUI('text_teacher_test_case_input')+'</th><th>'+LocalizedStrings.getUI('text_teacher_test_case_output')+'</th><th width="80px">'+LocalizedStrings.getUI('text_teacher_test_case_actions')+'</th></tr></thead>'
             + '<tbody class="content_cases"></tbody></table></form>';
 
@@ -128,11 +191,13 @@ function prepareTableTestCases (div_el) {
 
 }
 
+var hist = false;
+
 function addTestCase () {
-    var new_row = $('<tr><td class="counter"></td><td class="expandingArea"><textarea rows="1" name="input"></textarea></td><td class="expandingArea"><textarea rows="1" name="output"></textarea></td><td class="btn_actions"><button class="ui icon button"><i class="red icon times"></i></button></td></tr>');
+    var new_row = $('<tr><td class="counter"></td><td class="expandingArea"><textarea rows="1" name="input" class="text_area_input"></textarea></td><td class="expandingArea"><textarea rows="1" name="output" class="text_area_output"></textarea></td><td class="btn_actions"><div class="ui button_remove_case"><i class="red icon times large"></i></div></td></tr>');
     $('.content_cases').append(new_row);
 
-    new_row.find('button').click(function(e) {
+    new_row.find('.button_remove_case').click(function(e) {
         new_row.remove();
         updateTestCaseCounter();
     });
@@ -143,6 +208,19 @@ function addTestCase () {
     });
     
     updateTestCaseCounter();
+
+     $('.text_area_output').keydown(function(e) {
+        var code = e.keyCode || e.which;
+        if (code == 9 && $(this).closest("tr").is(":last-child")) {
+            hist = true;
+            addTestCase();
+        }
+     });
+     if (!hist) {
+        $( ".content_cases tr:last" ).find('.text_area_input').focus();
+     } else {
+        hist = false;
+     }
 }
 
 function updateTestCaseCounter () {
@@ -155,17 +233,17 @@ function updateTestCaseCounter () {
 
 function prepareTableSettings (div_el) {
     div_el.append('<h4 class="ui header">'+LocalizedStrings.getUI('text_teacher_data_types')+'</h4>');
-    div_el.append('<div class="ui stackable five column grid">'
+    div_el.append('<form name="settings_data_types"><div class="ui stackable five column grid">'
         +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="integer_data_type" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('integer')+'</label></div></div>'
         +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="real_data_type" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('real')+'</label></div></div>'
         +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="text_data_type" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text')+'</label></div></div>'
         +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="boolean_data_type" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('boolean')+'</label></div></div>'
         +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="void_data_type" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('void')+'</label></div></div>'
-        +'</div>');
+        +'</div></form>');
 
 
     div_el.append('<h4 class="ui header">'+LocalizedStrings.getUI('text_teacher_commands')+'</h4>');
-    div_el.append('<div class="ui stackable three column grid">'
+    div_el.append('<form name="settings_commands"><div class="ui stackable three column grid">'
         +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_read" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_read_var')+'</label></div></div>'
         +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_write" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_write_var')+'</label></div></div>'
         +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_comment" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_comment')+'</label></div></div>'
@@ -176,13 +254,13 @@ function prepareTableSettings (div_el) {
         +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_while" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_whiletrue')+'</label></div></div>'
         +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_dowhile" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_dowhiletrue')+'</label></div></div>'
         +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="commands_switch" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_switch')+'</label></div></div>'
-        +'</div>');
+        +'</div></form>');
 
     div_el.append('<h4 class="ui header">'+LocalizedStrings.getUI('text_teacher_functions')+'</h4>');
-    div_el.append('<div class="ui stackable one column grid">'
-        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_teacher_create_functions')+'</label></div></div>'
-        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_teacher_create_movement_functions')+'</label></div></div>'
-        +'</div>');
+    div_el.append('<form name="settings_functions"><div class="ui stackable one column grid">'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="functions_creation" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_teacher_create_functions')+'</label></div></div>'
+        +'<div class="column"><div class="ui checkbox"><input type="checkbox" name="functions_move" checked tabindex="0" class="hidden small"><label>'+LocalizedStrings.getUI('text_teacher_create_movement_functions')+'</label></div></div>'
+        +'</div></form>');
 
     $('.ui.checkbox').checkbox();
 

+ 1 - 0
js/visualUI/code_generator.js

@@ -38,6 +38,7 @@ export function generate () {
 
 }
 
+
 function functionsCode (function_obj) {
 	var ret = '\n\t' + LocalizedStrings.getUI('function') + ' ';
 

+ 5 - 3
js/visualUI/functions.js

@@ -35,6 +35,8 @@ program.addFunction(mainFunction);
 
 window.program_obj = program;
 
+window.generator = CodeManagement.generate;
+
 WatchJS.watch(program.globals, function(){
       console.log("as globais foram alteradas!");
   }, 1);
@@ -292,7 +294,7 @@ export function initVisualUI () {
   });
 
   $('.assessment').on('click', () => {
-    toggleTextualCoding();
+    runCodeAssessment();
   });
 }
 
@@ -310,11 +312,11 @@ function runCodeAssessment () {
   if (strCode == null) {
     return;
   }
-  domConsole = new DOMConsole("#ivprog-term", testCases);
+  domConsole = new DOMConsole("#ivprog-term");
   $("#ivprog-term").slideDown(500);
   const lexer = LanguageService.getCurrentLexer();
   const ast = new IVProgParser(strCode, lexer).parseTree();
-  const proc = new IVProgProcessor(ast); 
+  const proc = new IVProgProcessor(ast,testCases); 
   proc.registerInput(domConsole);
   proc.registerOutput(domConsole);
   proc.interpretAST().then( _ => {