var ivprogModule = angular.module('ivprogServices', ['ngResource']);
ivprogModule.factory('Exercicio', function($resource){
return $resource(':exercicioURL', {}, {
query: {method:'GET', params:{}, isArray:true }});
});
ivprogModule.factory('IvProgSourceParts', function(){
//x alert('services.js: ' + ivprogModule.getSource());
return {
genVars: function(){
alert(-12345);
}
};
});
var outputTXT = "";
var writer = function(t, testCase){
if(!testCase){
$('.output').append(t+'
');
}
if(outputTXT==""){
outputTXT = t;
}else{
outputTXT+=" "+t;
}
}
var isPutDecimalNeeded = function(startVal){
return startVal == Math.floor(startVal);
}
var getOutput = function(){
return outputTXT;
}
var cleanOutput = function(){
outputTXT = "";
currentInput = 0;
}
var totalTestCases = 0;
var testCases = [];
var totalCasesEvaluated = 0;
var totalCasesPassed = 0;
// Run to each test case
var resetTestCase = function(index){
if(testCases.length>index){
testCases[index].currentIndex = 0;
}
}
// @calledby: js/controllers.js: function scope.genNode(isEvaluating, nodes, vars, testCaseIndex): if(node.type=="read")...if(!isEvaluating)...else... strCode+= 'var a=readerInput('+testCaseIndex+');';
var readerInput = function(index){
//alert('js/services.js: readerInput(index=' + index + ')');
if(testCases.length>index){
var inputTXT = testCases[index].input;
var ii = inputTXT.split("\n").join(" ").split(" ").join(" ");
var ii2 = ii.split(" ");
if(testCases[index].currentIndexTotal de casos de testes: "+totalTestCases+"
Testes corretos: "+totalCasesPassed+"
Aproveitamento: "+apro+"%", false);
//TODO verificar se precisa retornar ou não
//TOTO retornando ao iassign
getEvaluationCallback(apro/100);
}
//console.log(testCases[index]);
outputTXT = "";
}
var writerError = function(id, message){
$('.output').append(""+message+"
");
}
var highlightError = function(id){
$(".node-with-error").removeClass("node-with-error");
$(id).addClass("node-with-error");
}
var processNodes = function(nodes){
var scriptStr = "";
angular.forEach(nodes, function(node, key){
scriptStr+= "";
});
return "var nodes;";
}
ivprogModule.factory('IvProgSource', function(IvProgSourceParts,$filter){
return {
generate: function(o){
var scriptStr = "";
angular.forEach(o.functions, function(func, key){
if(func.functionName=="main"){
scriptStr+="var t = function(){";
scriptStr+=" ";
// processing variables
angular.forEach(func.vars, function(variable, keyv){
scriptStr+="var var_"+variable.id+" = "+variable.initialValue+";";
});
// processing other stuff
scriptStr+="function "+func.functionName+"(){";
scriptStr+= processNodes(func.nodes);
scriptStr+= "}";
scriptStr += "main();}; t();";
}
window.eval(scriptStr);
//console.log(scriptStr);
});
}
}
});
ivprogModule.factory('ExercicioProcessa', function($resource){
return {
processa: function(d){
var atributos = [];
var atributosValores = [];
// descobrindo os atributos
angular.forEach(d.universo.elemento[0].atributo, function(value, key){
atributos.push(value.nome);
atributosValores[value.nome] = [];
});
// descobrindo os valores
angular.forEach(d.universo.elemento, function(elValue, elKey){
angular.forEach(elValue.atributo, function(atValue, atKey){
if(atributosValores[atValue.nome].indexOf(atValue.valor)==-1){
atributosValores[atValue.nome].push(atValue.valor);
}
if(atValue.predicado && (atributosValores[atValue.nome].indexOf(atValue.predicado)==-1)){
atributosValores[atValue.nome].push(atValue.predicado);
}
});
});
return { atributos: atributos, valores: atributosValores };
}
};
});
ivprogModule.factory('Universo', function($resource){
universo = $resource('universos/:universoTipo/:universoSubTipo.json', {}, {
query: {method:'GET', params:{}, isArray:false }});
return universo;
});