FlashcardDirective.js
4.15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
angular.module('flashy.FlashcardDirective', []).
directive('flashcard', ['$http', '$state', '$window',
function($http, $state, $window) {
return {
templateUrl: '/app/templates/flashcard.html',
restrict: 'E',
scope: {
flashcard: '=flashcardObj', // flashcard-obj in parent html
refresh: '&' // eval refresh in parent html
},
link: function(scope, element) {
/* Handles width of the card */
function refresh_width() {
avail = $window.innerWidth - 17;
width = Math.floor(avail / Math.floor(avail / 250) - 12);
element.children().css({
width: width + 'px',
height: (width * 3 / 5) + 'px',
'font-size': 100 * width / 250 + '%'
});
};
angular.element($window).bind('resize', refresh_width);
refresh_width();
scope.textPieces = [];
scope.flashcard.mask.sort(function(a, b) {
return a[0] - b[0];
});
var i = 0;
scope.flashcard.mask.forEach(function(blank) {
scope.textPieces.push({text: scope.flashcard.text.slice(i, blank[0])});
scope.textPieces.push({text: scope.flashcard.text.slice(blank[0], blank[1]), blank: true});
i = blank[1];
});
scope.textPieces.push({text: scope.flashcard.text.slice(i)});
/* Pulls card from feed into deck */
scope.pullCard = function(flashcard) {
if ($state.current.name == 'feed') {
$http.post('/api/flashcards/' + flashcard.id + '/pull/', flashcard).
success(function(data) {
console.log('pulled flashcard #' + flashcard.id);
scope.startShrink = true;
scope.refresh();
}).
error(function(data) {
console.log('failed to pull flashcard #' + flashcard.id);
});
}
};
/* Unpulls card from deck */
scope.unpullCard = function(flashcard) {
if ($state.current.name == 'deck') {
console.log('unpulling card...');
$http.post('/api/flashcards/' + flashcard.id + '/unpull/',
flashcard).
success(function(data) {
console.log('card unpull success');
scope.startShrink = true;
scope.refresh();
}).
error(function(data) {
console.log('card unpull FAILURE');
});
}
};
/* Hides card from feed */
scope.hideCard = function(flashcard) {
if ($state.current.name == 'feed') {
$http.post('/api/flashcards/' + flashcard.id + '/hide/',
flashcard).
success(function(data) {
console.log('card hide success');
scope.startShrink = true;
scope.refresh();
}).
error(function(data) {
console.log('card hide FAILURE');
});
}
};
}
};
}]);