diff -r cefce0845ac5 -r 8393d3473b98 front_idill/src/mosaic/js/search.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/front_idill/src/mosaic/js/search.js Fri Jun 29 16:16:24 2012 +0200 @@ -0,0 +1,293 @@ +/* + * Lance une recherche par courbes. + */ +mosaic.prototype.startSearch = function() +{ + var _this = this; + + var top, left, width, height, margin_top, inMosaic; + //Si on est dans le cas d'un filtrage de mosaïque. + if(this.currentMode == "FILTER") + { + var mainPanel = $('#mainPanel'); + top = mainPanel.position().top; + left = mainPanel.position().left; + width = mainPanel.width(); + height = mainPanel.height(); + margin_top = this.MPTop_margin; + inMosaic = true; + } + //Sinon si c'est une recherche dans la vidéo. + else if(this.currentMode == "SEARCH") + { + top = this.snTop; + left = this.snLeft; + width = this.snWidth; + height = this.snHeight; + margin_top = '0px'; + inMosaic = false; + } + + this.searchCanvas = new searchCanvas(top, left, width, height, margin_top, this.timeSearchFade, inMosaic); + this.searchCanvas.create(); + + /*$(window).mousedown(function(e) + { + console.log('DOWN'); + _this.searchCanvas.onPointerIn(e.clientX, e.clientY); + $(window).mousemove(function(e2) + { + _this.searchCanvas.onPointerMove(e2.clientX, e2.clientY); + }); + }); + + $(window).mouseup(function(e) + { + console.log('UP'); + _this.searchCanvas.onPointerOut(e.clientX, e.clientY); + $(window).unbind('mousemove'); + });*/ +} + +mosaic.prototype.listenToPointers = function() +{ + if(this.searchCanvas) + { + + } +} + +/* + * Quitte une recherche par courbes. + */ +mosaic.prototype.leaveSearch = function() +{ + this.searchCanvas.leaveSearch(); + this.searchCanvas = null; +} + +/* + * Affiche les types de marqueurs correspondants à ce qu'on a commencé à tracer lors d'une recherche. +*/ + mosaic.prototype.notifySearchMarkers = function(markersStr) +{ + if($('.notifications_inSearch_container').length > 0) + { + return; + } + + // console.log(markersStr); + + var markersList = markersStr.split(new RegExp(';')); + + var notification_search_markers = "
"; + + //On spécifie les notifications en div. + for(var i = 0 ; i < markersList.length ; i++) + { + notification_search_markers += "
"; + } + + notification_search_markers += "
"; + + //On les ajoute à la mosaïque. + $('#mainPanel').append(notification_search_markers); + + //On calcule leurs coordonnées et dimensions. + var notify_width = $('.notifications_inSearch_container').width(), notify_height = $('.notifications_inSearch_container').height(); + var notify_margin = parseInt($('.notifications_inSearch').css('margin')); + var point_left = $(window).width() / 2 - (notify_width) / 2 - notify_margin; + var point_top = 0; + + if(this.currentMode == "VIDEO" || this.currentMode == "SEARCH") + { + point_top = -this.notifyTopVideo, + point_left = -this.notifyLeftVideo + ($(window).width() - notify_width) / 2 + } + + //On les positionne. + $('.notifications_inSearch_container').css( + { + left: point_left, + top: point_top + }); + + //On les fait apparaître. + $('.notifications_inSearch').css( + { + opacity: "0.9" + }); +} + +/* + * Supprime la notification de maintient du pointage. +*/ +mosaic.prototype.removeSearchMarkers = function() +{ + $('.notifications_inSearch_container').remove(); +} + +/* + * Effectuer un filtrage de la mosaïque par rapport à un type de marqueurs. +*/ +mosaic.prototype.searchFilter = function(type) +{ + var _this = this; + + if(this.currentMode == "FILTER") + { + this.filterSearchedType = type; + + // console.log('Annotations length : ' + this.annotations.length); + if(this.annotations.length > 0) + { + this.isMosaicFiltering = true; + + var gestureNumberByVideo = new Object(); + var maxAnnotationNumber = 0; + // for(var i = 0 ; i < this.config['imagesToShow'] ; i++) + for(var i = 0 ; i < this.annotations.length ; i++) + { + var current = this.annotations[i]; + // console.log(current.annotationType.contents.title + ' == ' + type); + if(current.annotationType.contents.title == type) + { + if(gestureNumberByVideo[current.source.url] == undefined || gestureNumberByVideo[current.source.url] == '') + { + gestureNumberByVideo[current.source.url] = 0; + } + + gestureNumberByVideo[current.source.url]++; + } + } + + for(var i = 0 ; i < this.config['imagesToShow'] ; i++) + { + if(gestureNumberByVideo[this.urls[i]] == undefined || gestureNumberByVideo[this.urls[i]] == '') + { + gestureNumberByVideo[this.urls[i]] = 0; + } + } + + //On récupère la vidéo qui score le nombre d'occurences de la gesture le plus haut. + for(i in gestureNumberByVideo) + { + console.log(i + " " + gestureNumberByVideo[i] + ' ' + type); + if(maxAnnotationNumber < gestureNumberByVideo[i]) + { + maxAnnotationNumber = gestureNumberByVideo[i]; + } + } + + var snMargin = parseInt($('.snapshotDivs').css('margin')); + + //On affiche l'opacité résultante pour chaque vidéo. + for(var i = 0 ; i < this.config['imagesToShow'] ; i++)// in gestureNumberByVideo) + { + //Opacité conventionelle. + var opacity = gestureNumberByVideo[this.urls[i]] / maxAnnotationNumber; + // console.log('opacity b : ' + opacity + ' for ' + gestureNumberByVideo[i]); + //Ce qui est à zéro le restera (par conséquent le snapshot associé sera invisible). + if(opacity > 0) + { + //On réhausse l'opacité de 50%. + opacity = this.scaleIntervals(0., 1., 0.5, 1., opacity); + } + this.opacities[i] = opacity; + + //var filterIndex = this.getIdxFromMetadata(i); + var filterIndex = i; + //if(filterIndex >= 0) + //{ + // console.log('#snapshotDiv-' + filterIndex + " " + _this.config['timeFilterFade'] + " " + opacity); + $('#snapshotDiv-' + filterIndex).fadeTo(this.config['timeFilterFade'], opacity, function() + { + //Pour ne notifier qu'une fois. + if(_this.isMosaicFiltering) + { + _this.isMosaicFiltering = false; + } + }); + + // console.log('filterIdx : ' + filterIndex); + + if(opacity == 0) + { + var filteredSnapshot = $('#snapshotDiv-' + filterIndex); + + if(filteredSnapshot.length > 0) + { + var hider = '
'; + $('#mainPanel').append(hider); + + $('#filterHider-' + filterIndex).css( + { + width: +filteredSnapshot.width() + 4 * snMargin, + height: +filteredSnapshot.height() + 4 * snMargin, + top: filteredSnapshot.position().top - snMargin, + left: filteredSnapshot.position().left - snMargin + }); + } + } + //} + } + // for(var a = 0 ; a < this.config['imagesToShow'] ; a++) + // console.log('op : ' + ' ' + this.imgs[a] + ' \t ' + this.opacities[a]); + + this.isMosaicFiltered = true; + } + } +} + +/* + * Passe une valeur de l'intervalle [A, B] à l'intervalle [C, D]. +*/ +mosaic.prototype.scaleIntervals = function(A, B, C, D, val) +{ + return (D - C + A) * val + (C - A); +} + +/* + * Retourne l'index d'un snapshot en fonction de ses metadonnées. +*/ +mosaic.prototype.getIdxFromMetadata = function(metadata) +{ + var _this = this; + + for(idx in this.urls) + { + if(this.urls[idx] == metadata) + { + for(id in this.ids) + { + if(this.ids[id] == idx) + { + return id; + } + } + } + } + + return -1; +} + +/* + * Enlève une recherche par filtre. +*/ +mosaic.prototype.removeFilter = function() +{ + if(this.currentMode == "FILTER") + { + this.currentMode = "MOSAIC"; + + var _this = this; + + this.isMosaicFiltered = false; + this.filterSearchedType = ''; + + $('#notify_search').remove(); + $('#notify_search_1gesture').remove(); + $('.filterHiders').remove(); + $('.snapshotDivs').fadeTo(_this.config['timeFilterFade'], 1); + } +} \ No newline at end of file