diff --git a/config.js b/config.js index f7e4a31..0622890 100644 --- a/config.js +++ b/config.js @@ -53,7 +53,11 @@ angular.module('flashy', [ $urlRouterProvider.otherwise('/404'); var auth_resolve = { authorize: function($q, $state, $stateParams, UserService) { - console.log('resolving user before continuing'); + if (UserService.noAuthRequired($state)) { + console.log('no auth state ' + $state.name); + return $state.go(state.name); + } + console.log('resolving user before continuing for ' + $state.name); var redirectAsNeeded = function() { if (!UserService.isLoggedIn()) { console.log(UserService.getUserData()); @@ -61,6 +65,7 @@ angular.module('flashy', [ $state.go('login'); } if (!UserService.authorizedFor($state, $stateParams)) { + console.log('user not authorized for ' + $state.name); $state.go('addclass'); } }; @@ -138,7 +143,6 @@ angular.module('flashy', [ controller: 'ResetPasswordController' }). state('verifyemail', { - resolve: auth_resolve, url: '/verifyemail/{key}', templateUrl: 'templates/verifyemail.html', controller: 'VerifyEmailController' diff --git a/scripts/FeedController.js b/scripts/FeedController.js index 3a28c32..59fd93b 100644 --- a/scripts/FeedController.js +++ b/scripts/FeedController.js @@ -11,7 +11,7 @@ angular.module('flashy.FeedController', ['ui.router', 'ngAnimate']). $scope.cards = false; $scope.cardCols = []; // organized data $scope.numCols = 0; - + $scope.cardTable = {}; // look up table of cards, {'colNum':col, 'obj':card} function calculate_cols() { var avail = $window.innerWidth - 17; @@ -42,6 +42,7 @@ angular.module('flashy.FeedController', ['ui.router', 'ngAnimate']). for (i = 0; i < $scope.numCols; i++) cols.push([]); $scope.cards.forEach(function(card, i) { cols[i % $scope.numCols].push(card); + $scope.cardTable[card.id] = {'colNum':i % $scope.numCols, 'obj':card}; }); // wait until the next digest cycle to update cardCols @@ -70,46 +71,68 @@ angular.module('flashy.FeedController', ['ui.router', 'ngAnimate']). $scope.add = function(card) { var colNum = 0; - var lowestCol = {}; - var lowestColLen = Infinity; + var lowestCol = $scope.cardCols[0]; + var lowestColNum = 0; while (colNum < $scope.numCols) { if ($scope.cardCols[colNum].length == 0) { lowestCol = $scope.cardCols[colNum]; break; - } else if ($scope.cardCols[colNum].length < lowestColLen) { + } else if ($scope.cardCols[colNum].length < lowestCol.length) { lowestCol = $scope.cardCols[colNum]; + lowestColNum = colNum; lowestColLen = $scope.cardCols[colNum].length; } colNum++; } - /*if (colNum == $scope.numCols) { - colNum = Math.floor(Math.random() * $scope.numCols); - } - console.log('adding card to column ' + colNum);*/ console.log(card); $scope.cards.push(data); $timeout(function() { lowestCol.unshift(card); + $scope.cardTable[card.id] = {'colNum':lowestColNum, 'obj':card}; $timeout($scope.refreshColumnWidth); }); }; + + $scope.sortAdd = function(card, array) { + console.log('sort add'); + array.forEach(function(ele, i, ary) { + if (ele.score <= card.score) { + ary.splice(i, 0, card); + return; + } + }); + }; $scope.hide = function(card) { console.log('hiding card'); var found = -1; - for (i = 0; i < $scope.cardCols.length; i++) { - found = $scope.cardCols[i].indexOf(card); - if (found != -1) { - $timeout(function() { - console.log('card to hide, found'); - }); - $scope.cardCols[i].splice(found, 1); - return; - } - } + col = $scope.cardTable[card.id].colNum; + found = $scope.cardCols[col].indexOf(card); + if (found != -1) { + $scope.cardCols[col].splice(found, 1); + console.log('card hidden'); + return col; + } console.log('Error finding card to hide:'); console.log(card); + return -1; }; + + $scope.update = function(id, new_score) { // NOT WORKING + /*card = $scope.cardTable[id].obj; + if (new_score == card.score) { + console.log('score same, no update required'); + return; + } + console.log('updating'); + card.score = new_score; + console.log(card); + + col = $scope.hide(card) + if (col != -1) { + $scope.sortAdd(card, $scope.cardCols[col]); + }*/ + }; var loc = window.location, new_uri; if (loc.protocol === 'https:') { @@ -124,12 +147,13 @@ angular.module('flashy.FeedController', ['ui.router', 'ngAnimate']). console.log('websocket connected'); }; ws.onmessage = function(e) { + data = JSON.parse(e.data); console.log('got websocket message ' + e.data); - data = JSON.parse(e.data); + console.log(data); if (data.event_type == 'new_card') { $scope.add(data.flashcard); } else if (data.event_type == 'score_change') { - // + $scope.update(data.flashcard_id, data.new_score); } }; ws.onerror = function(e) { diff --git a/scripts/FlashcardDirective.js b/scripts/FlashcardDirective.js index cc91a80..57b35e7 100644 --- a/scripts/FlashcardDirective.js +++ b/scripts/FlashcardDirective.js @@ -12,6 +12,7 @@ angular.module('flashy.FlashcardDirective', []). link: function(scope, element) { /* Handles width of the card */ scope.textPieces = []; + scope.flashcard.mask.sort(function(a, b) { return a[0] - b[0]; }); diff --git a/scripts/UserService.js b/scripts/UserService.js index af8c6bc..c7a3911 100644 --- a/scripts/UserService.js +++ b/scripts/UserService.js @@ -66,6 +66,12 @@ angular.module('flashy.UserService', ['ui.router']). } return true; }; + this.noAuthRequired = function(state) { + if (['verifyemail'].indexOf(state.name) >= 0) { + return true; + } + return false; + } this.resendConfirmationEmail = function() { if (!this.isLoggedIn()) return console.log("Can't request resending a confirmation email since the user is not logged in."); console.log('Requesting resend of confirmation email'); diff --git a/templates/feed.html b/templates/feed.html index 81785f5..ab35318 100644 --- a/templates/feed.html +++ b/templates/feed.html @@ -5,7 +5,7 @@
-
+
diff --git a/templates/flashcard.html b/templates/flashcard.html index f85fb29..3d46cee 100644 --- a/templates/flashcard.html +++ b/templates/flashcard.html @@ -29,4 +29,7 @@
+
+ score:{{flashcard.score}} +