From c67af6d7cbf0c4e64f86b1480a996a5ff77efc32 Mon Sep 17 00:00:00 2001 From: Anthony Truskinger Date: Sun, 3 Feb 2013 23:33:41 +1000 Subject: [PATCH] Worked on annotation selection, tag resolving, and better layout for tag resolving. also diabled right click annotation editing modified: app/assets/javascripts/angular/controllers/annotation_viewer.js modified: app/assets/javascripts/angular/controllers/listen.js modified: app/assets/javascripts/angular/directives/directives.js modified: app/assets/javascripts/angular/services/services.js modified: app/assets/stylesheets/partials/_annotation_viewer.css.scss modified: app/assets/templates/annotation_viewer.html modified: lib/assets/javascripts/jquery.drawabox.js --- .../angular/controllers/annotation_viewer.js | 2 + .../javascripts/angular/controllers/listen.js | 3 +- .../angular/directives/directives.js | 135 ++++++++++++------ .../javascripts/angular/services/services.js | 52 ++++++- .../partials/_annotation_viewer.css.scss | 6 +- app/assets/templates/annotation_viewer.html | 17 +-- lib/assets/javascripts/jquery.drawabox.js | 6 +- 7 files changed, 160 insertions(+), 61 deletions(-) diff --git a/app/assets/javascripts/angular/controllers/annotation_viewer.js b/app/assets/javascripts/angular/controllers/annotation_viewer.js index 2ccf147c..e7f2f9d9 100644 --- a/app/assets/javascripts/angular/controllers/annotation_viewer.js +++ b/app/assets/javascripts/angular/controllers/annotation_viewer.js @@ -41,6 +41,8 @@ function Annotation(localId, audioRecordingId) { var now = new Date(); this.__temporaryId__ = localId || Number.Unique(); + this._selected = false; + this.audioRecordingId = audioRecordingId; this.createdAt = now; diff --git a/app/assets/javascripts/angular/controllers/listen.js b/app/assets/javascripts/angular/controllers/listen.js index 565e2dde..c1c9f193 100644 --- a/app/assets/javascripts/angular/controllers/listen.js +++ b/app/assets/javascripts/angular/controllers/listen.js @@ -94,7 +94,8 @@ function ListenCtrl($scope, $resource, $routeParams, Media, AudioEvent, Tag) { }); - $scope.tags = Tag.query(); + // download all the tags and store them in Tag service cache + Tag.query({}, {}, function(){}, undefined); $scope.model.limits = { timeMin: 0.0, diff --git a/app/assets/javascripts/angular/directives/directives.js b/app/assets/javascripts/angular/directives/directives.js index 9a80d71e..c58e408e 100644 --- a/app/assets/javascripts/angular/directives/directives.js +++ b/app/assets/javascripts/angular/directives/directives.js @@ -172,7 +172,7 @@ var PRECISION = 6; return { - conversions : conversions, + conversions: conversions, pixelsToSeconds: function pixelsToSeconds(pixels) { var seconds = pixels / conversions.pixelsPerSecond; return seconds; @@ -263,12 +263,12 @@ console.log("audioEvent watcher fired"); // TODO: SET UP CONVERSIONS HERE - var top = scope.model.converters.hertzToPixels(value.highFrequencyHertz), - left = scope.model.converters.secondsToPixels(value.startTimeSeconds), - width = scope.model.converters.secondsToPixels(value.endTimeSeconds - value.startTimeSeconds), + var top = scope.model.converters.hertzToPixels(value.highFrequencyHertz), + left = scope.model.converters.secondsToPixels(value.startTimeSeconds), + width = scope.model.converters.secondsToPixels(value.endTimeSeconds - value.startTimeSeconds), height = scope.model.converters.hertzToPixels(value.highFrequencyHertz - value.lowFrequencyHertz); - drawaboxInstance.drawabox('setBox', value.__temporaryId__, top, left, height, width, undefined); + drawaboxInstance.drawabox('setBox', value.__temporaryId__, top, left, height, width, value._selected); } }; @@ -308,8 +308,12 @@ function updateConverters() { scope.model.converters = updateUnitConversions(scope, scope.$image.width(), scope.$image.height()); } - scope.$watch(function() {return scope.model.media.imageUrl}, updateConverters); + + scope.$watch(function () { + return scope.model.media.imageUrl + }, updateConverters); scope.$image[0].addEventListener('load', updateConverters, false); + updateConverters(); // init drawabox scope.model.audioEvents = scope.model.audioEvents || []; @@ -342,7 +346,7 @@ //scope.model.selectedAudioEvents.length = 0; //scope.model.selectedAudioEvents.push(scope.model.audioEvents[element[0].annotationViewerIndex]); - angular.forEach(scope.model.audioEvents, function (value, key){ + angular.forEach(scope.model.audioEvents, function (value, key) { value._selected = false; }); @@ -399,7 +403,7 @@ link: function (scope, elements, attributes, controller) { var element = elements[0]; if (element.nodeName !== "AUDIO") { - throw "Cannot put ngAudio element on an element that is not a