unserver-unify
Version:
155 lines (150 loc) • 4.53 kB
JavaScript
angular.module('bamboo.course').controller('IdiomFillBlankChapterCtrl', function($scope, $stateParams, ApiService) {
this.cid = $stateParams.cid;
console.log("--- IdiomChapterCtrl");
var self = this;
var resUrl = this.resUrl = ApiService.SHOST + '/lcourse/' + this.cid + '/resources/';
this.index = 0;
this.init = function(chapter) {
console.log(chapter);
self.chapter = {};
self.chapter = chapter;
resUrl = self.resUrl = ApiService.SHOST + '/lcourse/' + self.chapter.cid + '/resources/';
console.log(self.chapter);
if (!self.chapter.size) {
self.chapter.size = 4;
}
initIdioms(true);
}
function generateRandomIdx(len, flag) {
var randomIdxList = [];
if (!flag && self.randomIdxList) {
return self.randomIdxList;
}
var tarray = [];
for (var i = 0; i < len; i++) {
tarray.push(i);
}
var _len = 4;
if (len < 4) {
_len = len;
}
var selected = [];
for (var i = 0; i < _len; i++) {
var index = _.random(0, tarray.length - 1);
console.log(index);
selected.push(tarray[index]);
tarray.splice(index, 1);
}
selected.sort();
console.log(selected);
for (var i = 0; i < len; i++) {
if (selected.indexOf(i) < 0) {
randomIdxList.push(-1);
} else {
randomIdxList.push(_.random(0, self.chapter.size-1));
}
}
return randomIdxList;
}
function initIdioms(flag) {
self.answers = [];
self.non_answers = [];
self.dropIdiomMap = {};
self.correctCount = 0;
self.wrongCount = 0;
self.randomIdxList = generateRandomIdx(self.chapter.ppts.length, flag);
console.log(self.randomIdxList);
self.idioms = self.chapter.ppts.map(function(o, idx) {
// var blank_idx = _.random(0, 3);
var blank_idx = self.randomIdxList[idx];
var idiom_arr = o.word.split('');
var idiom_answer;
if (blank_idx > -1) {
idiom_answer = idiom_arr[blank_idx];
idiom_arr[blank_idx] = "";
self.answers.push(idiom_answer);
}
// var idiom_answer = idiom_arr[blank_idx];
self.non_answers = self.non_answers.concat(idiom_arr);
return {
q: idiom_arr,
answer: idiom_answer,
answer_idx: blank_idx,
idx: idx
};
});
self.wrongAnswer = getRamdomAnswers(self.non_answers);
self.answers = self.answers.concat(self.wrongAnswer);
console.log(self.answers);
self.answers = _.sortBy(self.answers).map(function(o) {
return {
text: o
}
});
console.log(self.answers);
initIdiomMap();
}
function getRamdomAnswers(non_answers) {
if (self.wrongAnswer) {
return self.wrongAnswer;
}
return _.sampleSize(non_answers.filter(function(o) {
return o != "";
}), 2);
}
function initIdiomMap() {
for (var i = 0; i < 10; i++) {
self.dropIdiomMap[i] = {};
}
}
this.submit = function() {
mark(self.dropIdiomMap, self.idioms);
self.submitted = true;
}
this.reset = function() {
initIdioms();
self.submitted = false;
}
this.continue = function() {
initIdioms(true);
self.submitted = false;
}
function mark(userAnswerMap, idiomsList) {
console.log(userAnswerMap);
console.log(idiomsList);
var LEN = idiomsList.length;
for (var i = 0; i < LEN; i++) {
var userAnswer = userAnswerMap[i] || {};
var idiom = idiomsList[i] || {};
console.log(idiom);
if (idiom.answer_idx > -1) {
if (idiom.answer === userAnswer.text) {
self.correctCount++;
userAnswer.correct = true;
} else {
userAnswer.correct = false;
self.wrongCount++;
}
}
}
}
$scope.startCallback = function(event, ui, title) {
console.log('You started draggin: ' + title.title);
$scope.draggedTitle = title.title;
};
$scope.stopCallback = function(event, ui) {
console.log('Why did you stop draggin me?');
};
$scope.dragCallback = function(event, ui) {
console.log('hey, look I`m flying');
};
$scope.dropCallback = function(event, ui) {
console.log('hey, you dumped me :-(', $scope.draggedTitle);
};
$scope.overCallback = function(event, ui) {
console.log('Look, I`m over you');
};
$scope.outCallback = function(event, ui) {
console.log('I`m not, hehe');
};
});