Forráskód Böngészése

Não sei o que comentar aqui

Igor 5 éve
szülő
commit
8a43556a15
4 módosított fájl, 97 hozzáadás és 8 törlés
  1. 10 0
      css/ivprog-visual-1.0.css
  2. 3 3
      index.html
  3. 53 5
      js/iassign-integration-functions.js
  4. 31 0
      js/visualUI/functions.js

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

@@ -348,4 +348,14 @@ div.buttons_manage_columns {
 
 .default_visual_title {
   display: none;
+}
+
+.expandingArea textarea {
+	min-height: 30px;
+	resize: none;
+	padding: 5px;
+}
+
+.ui table .btn_actions {
+	text-align: center;
 }

+ 3 - 3
index.html

@@ -18,7 +18,7 @@
   </head>
   <body>
 
-    <div class="ui accordion height_100">
+    <div class="ui height_100 add_accordion">
 
       <div class="title default_visual_title">
         <i class="dropdown icon"></i>
@@ -78,8 +78,8 @@
         <a class="item run_button">
           <i class="play icon"></i>
         </a>
-        <a class="item">
-          <i class="stop icon"></i>
+        <a class="item assessment">
+          <i class="check icon"></i>
         </a>
         <a class="item">
           <i class="help icon"></i>

+ 53 - 5
js/iassign-integration-functions.js

@@ -30,8 +30,22 @@ function getAnswer () {
         // Montar o retorno da resposta do aluno
         
     } else {
-        
+        // Montar o retorno com a criação da atividade do professor
+        return prepareTestCases();
+    }
+}
+
+function prepareTestCases () {
+    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] }';
+    return ret;
 }
 
 // Função chamada pelo iTarefa para receber a nota do aluno na atividade
@@ -47,13 +61,15 @@ function getEvaluation () {
 }
 
 
+var testCases = null;
+
 // 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 (data) {
-        
+        // testCases é preenchida
     });
 }
 
@@ -66,6 +82,9 @@ function prepareEnvironment () {
 
 // Função para preparar a interface para o professor criar atividade:
 function prepareActivityCreation () {
+
+    $('.add_accordion').addClass('accordion');
+
     $('.default_visual_title').toggle();
     $('.default_visual_title').append('<span>'+LocalizedStrings.getUI('text_teacher_algorithm')+'</span>');
     $('.height_100').removeClass('height_100');
@@ -92,19 +111,48 @@ function prepareActivityCreation () {
 }
 
 function prepareTableTestCases (div_el) {
-    var table_el = '<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>';
+
+    //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>';
 
     div_el.append(table_el);
 
     div_el.append('<button class="ui teal labeled icon button button_add_case"><i class="plus icon"></i>'+LocalizedStrings.getUI('text_teacher_test_case_add')+'</button>');
 
     $('.button_add_case').on('click', function(e) {
-        $('.content_cases').append('<tr><td>88</td><td>more data</td><td>my data</td><td>more data</td></tr>');
+        addTestCase();
     });
 
 }
 
+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>');
+    $('.content_cases').append(new_row);
+
+    new_row.find('button').click(function(e) {
+        new_row.remove();
+        updateTestCaseCounter();
+    });
+
+    $('textarea').on('input', function(e) {
+        var lines = $(this).val().split('\n').length;
+        $(this).attr('rows', lines);
+    });
+    
+    updateTestCaseCounter();
+}
+
+function updateTestCaseCounter () {
+    var i = 1;
+    $( ".content_cases" ).find('tr').each(function() {
+      $( this ).find('.counter').text(i);
+      i ++;
+    });
+}
+
 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">'

+ 31 - 0
js/visualUI/functions.js

@@ -290,6 +290,10 @@ export function initVisualUI () {
   $('.textual_coding_button').on('click', () => {
     toggleTextualCoding();
   });
+
+  $('.assessment').on('click', () => {
+    toggleTextualCoding();
+  });
 }
 
 $( document ).ready(function() {
@@ -300,6 +304,33 @@ $( document ).ready(function() {
 
 });
 
+
+function runCodeAssessment () {
+  const strCode = CodeManagement.generate();
+  if (strCode == null) {
+    return;
+  }
+  domConsole = new DOMConsole("#ivprog-term", testCases);
+  $("#ivprog-term").slideDown(500);
+  const lexer = LanguageService.getCurrentLexer();
+  const ast = new IVProgParser(strCode, lexer).parseTree();
+  const proc = new IVProgProcessor(ast); 
+  proc.registerInput(domConsole);
+  proc.registerOutput(domConsole);
+  proc.interpretAST().then( _ => {
+    domConsole.info("Programa executado com sucesso!");
+    domConsole.info("Aperte qualquer tecla para fechar...");
+    const p = new Promise((resolve, _) => {
+      domConsole.requestInput(resolve);
+    });
+    p.then( _ => {
+      domConsole.dispose();
+      domConsole = null;
+      $("#ivprog-term").hide();
+    })
+  })
+}
+
 function runCode () {
   const strCode = CodeManagement.generate();
   if (strCode == null) {