front_idill/src/mosaic/js/mosaic.js
changeset 32 4003f84cd349
parent 31 2c7fc855eba8
child 33 2d9b15f99b4e
equal deleted inserted replaced
31:2c7fc855eba8 32:4003f84cd349
    30         //Longueur horizontale.
    30         //Longueur horizontale.
    31         this.length = len;
    31         this.length = len;
    32         //Nombre d'images dans la mosaïque.
    32         //Nombre d'images dans la mosaïque.
    33         this.imagesToShow = imgToShow;
    33         this.imagesToShow = imgToShow;
    34         //Tableaux des urls des vidéos, des snapshots et de leur position dans la mosaïque.
    34         //Tableaux des urls des vidéos, des snapshots et de leur position dans la mosaïque.
       
    35         this.videos = [];
    35         this.urls = [];
    36         this.urls = [];
    36         this.imgs = [];
    37         this.imgs = [];
    37         this.ids = [];
    38         this.ids = [];
    38         //Dimensions de la mosaïque en pixels.
    39         //Dimensions de la mosaïque en pixels.
    39         this.width;
    40         this.width;
    76         this.localMos;
    77         this.localMos;
    77         //Position des voisins lors d'un zoom.
    78         //Position des voisins lors d'un zoom.
    78         this.neighboursIds = [];
    79         this.neighboursIds = [];
    79         //ID du snapshot du milieu lors d'un zoom.
    80         //ID du snapshot du milieu lors d'un zoom.
    80         this.centerId;
    81         this.centerId;
       
    82 		
       
    83 		this.player;
       
    84 		
       
    85 		this.loadFromJson('./player/json/videos.json');
    81     }
    86     }
    82     else
    87     else
    83     {
    88     {
    84         //Affiche un message d'erreur.
    89         //Affiche un message d'erreur.
    85     }
    90     }
   104             //On charge les images de petite taille pour ne pas surcharger la mosaïque lors de l'affichage global.
   109             //On charge les images de petite taille pour ne pas surcharger la mosaïque lors de l'affichage global.
   105             str += '<div id="snapshotDiv-' + i + '" class="snapshotDivs"><img id="snapshot-' + i + '" class="snapshots" src="snapshots-little/' + this.imgs[i] + '" /></div>';
   110             str += '<div id="snapshotDiv-' + i + '" class="snapshotDivs"><img id="snapshot-' + i + '" class="snapshots" src="snapshots-little/' + this.imgs[i] + '" /></div>';
   106         }
   111         }
   107     }
   112     }
   108     
   113     
       
   114 	console.log(this.imagesToShow);
       
   115 	
   109     return str;
   116     return str;
   110 }
   117 }
   111 
   118 
   112 /*
   119 /*
   113  * Permet de raffraichir la mosaïque.
   120  * Permet de raffraichir la mosaïque.
   114  */
   121  */
   115 mosaic.prototype.loadMosaic = function(imgsTab)
   122 mosaic.prototype.loadMosaic = function()
   116 {
   123 {
       
   124 	var createMosaic = this.createMosaic();
       
   125 	
       
   126 	if(createMosaic == '')
       
   127 	{
       
   128 		return;
       
   129 	}
       
   130 	
       
   131 	var _this = this;
       
   132 	
   117     //On affecte les chemins vers les images à la mosaïque.
   133     //On affecte les chemins vers les images à la mosaïque.
   118     this.imgs = imgsTab;
       
   119     this.previousZoomedSN;
   134     this.previousZoomedSN;
   120     //this.width = 
   135     //this.width = 
   121     //On met à jour la mosaïque.
   136     //On met à jour la mosaïque.
   122     $('#mainPanel').html(this.createMosaic());
   137     $('#mainPanel').html(createMosaic);
   123     //On récupère la taille des bordures.
   138     //On récupère la taille des bordures.
   124     this.marginWidth = $('.snapshotDivs').css('margin-bottom');
   139     this.marginWidth = $('.snapshotDivs').css('margin-bottom');
   125     this.marginWidth = parseFloat(mos.marginWidth)*2;
   140     this.marginWidth = parseFloat(mos.marginWidth)*2;
   126     //On calcule la taille des divs contenant les snapshots.
   141     //On calcule la taille des divs contenant les snapshots.
   127     this.width = $('#mainPanel').innerWidth();
   142     this.width = $('#mainPanel').innerWidth();
   132     
   147     
   133     this.height = $('#mainPanel').innerHeight();
   148     this.height = $('#mainPanel').innerHeight();
   134     //On centre verticalement la mosaïque.
   149     //On centre verticalement la mosaïque.
   135     this.MPTop_margin = ($(document).height() - $('#mainPanel').height())/2;
   150     this.MPTop_margin = ($(document).height() - $('#mainPanel').height())/2;
   136     $('#mainPanel').css('margin-top', this.MPTop_margin).css('margin-bottom', this.MPTop_margin);
   151     $('#mainPanel').css('margin-top', this.MPTop_margin).css('margin-bottom', this.MPTop_margin);
       
   152 	
       
   153 	$('.snapshotDivs').mouseenter(function ()
       
   154 	{
       
   155 		//On effectue un prézoom dès qu'on va sur une image.
       
   156 		_this.preZoom($(this));
       
   157 	});
       
   158 	$('body').keypress(function (event)
       
   159 	{
       
   160 		//Si on a appuié sur la touche 'q' ou 'Q';
       
   161 		if(event.which == 113 || event.which == 81)
       
   162 		{
       
   163 		   _this.unzoom();
       
   164 		}
       
   165 	});
   137 }
   166 }
   138 
   167 
   139 /*
   168 /*
   140  * Zoom sur la position d'une image, 1ère partie. Durant le laps de temps de time ms, l'utilisateur a le choix de zoomer sur une autre image.
   169  * Zoom sur la position d'une image, 1ère partie. Durant le laps de temps de time ms, l'utilisateur a le choix de zoomer sur une autre image.
   141  * Après ce laps de temps, l'image zoom complétement et il n'est plus possible de sélectionner une autre image par pointage.
   170  * Après ce laps de temps, l'image zoom complétement et il n'est plus possible de sélectionner une autre image par pointage.
   375 {
   404 {
   376 	//On configure les options de lancement.
   405 	//On configure les options de lancement.
   377 	IriSP.libFiles.defaultDir = "../lib/";
   406 	IriSP.libFiles.defaultDir = "../lib/";
   378 	IriSP.widgetsDir = "./player/metadataplayer/"
   407 	IriSP.widgetsDir = "./player/metadataplayer/"
   379 	
   408 	
       
   409 	var videoToPlay = this.videos[this.centerId];
       
   410 	var currentMetadata = this.urls[this.centerId];
       
   411 	console.log('VIDEO[' + this.centerId + '] : ' + videoToPlay);
       
   412 	console.log('MD[' + this.centerId + '] : ' + currentMetadata);
       
   413 	
   380 	console.log(newZoomTop + " " + newZoomLeft);
   414 	console.log(newZoomTop + " " + newZoomLeft);
   381 	
   415 	
   382 	var _metadata = {
   416 	var _metadata = {
   383 		url: 'http://ldt.iri.centrepompidou.fr/ldtplatform/ldt/cljson/id/7c912bce-66b8-11e1-80f6-00145ea4a2be?callback=?',
   417 		url: currentMetadata,
   384 		format: 'ldt'
   418 		format: 'ldt'
   385 	};
   419 	};
   386 	var _config = {
   420 	var _config = {
   387 		gui: {
   421 		gui: {
   388 			width: newSnWidth,
   422 			width: newSnWidth,
   398 				}
   432 				}
   399 			]
   433 			]
   400 		},
   434 		},
   401 		player:{
   435 		player:{
   402 			type: 'html5', // player type
   436 			type: 'html5', // player type
   403 			video: 'http://media.iri.centrepompidou.fr/video/ldtplatform/body_trail_cctv.mp4',
   437 			video: videoToPlay,
   404 			live: true,
   438 			live: true,
   405 			height: newSnHeight,
   439 			height: newSnHeight,
   406 			width: newSnWidth,
   440 			width: newSnWidth,
   407 			autostart: true
   441 			autostart: true
   408 		}
   442 		}
   417 		top: newZoomTop,
   451 		top: newZoomTop,
   418 		left: newZoomLeft
   452 		left: newZoomLeft
   419 	});
   453 	});
   420 	
   454 	
   421 	//On démarre le player.
   455 	//On démarre le player.
   422 	var _myPlayer = new IriSP.Metadataplayer(_config, _metadata);
   456 	this.player = null;
   423 	console.log(_myPlayer);
   457 	this.player = new IriSP.Metadataplayer(_config, _metadata);
   424 }
   458 }
   425 
   459 
   426 /*
   460 /*
   427  * Retour à la taille normale de la mosaïque.
   461  * Retour à la taille normale de la mosaïque.
   428  */
   462  */
   554 		{
   588 		{
   555 			'top': 0,
   589 			'top': 0,
   556 			'left': 0,
   590 			'left': 0,
   557 			'width': $(this).width() - marginValue*2,
   591 			'width': $(this).width() - marginValue*2,
   558 			'height': $(this).height() - marginValue*2,
   592 			'height': $(this).height() - marginValue*2,
   559 			'background-image': 'url(' + $('img', $(this)).attr('src') + ')',
   593 			'background-image': 'url("' + $('img', $(this)).attr('src') + '")',
   560 			'background-size': $(this).width() + 'px ' + $(this).height() + 'px',
   594 			'background-size': $(this).width() + 'px ' + $(this).height() + 'px',
   561 			'background-position': -marginValue + 'px ' + -marginValue + 'px',
   595 			'background-position': -marginValue + 'px ' + -marginValue + 'px',
   562 			'opacity': '0.4'
   596 			'opacity': '0.4'
   563 		});
   597 		});
   564 		
   598 		
   733             return false;
   767             return false;
   734         }
   768         }
   735     }
   769     }
   736     return true;
   770     return true;
   737 }
   771 }
       
   772 
       
   773 /*
       
   774  * Charge les vidéos, les snapshots et les annotations depuis un fichier json.
       
   775 */
       
   776 mosaic.prototype.loadFromJson = function(path)
       
   777 {
       
   778 	var _this = this;
       
   779 
       
   780 	$.getJSON(path, function(data)
       
   781 	{
       
   782 		$.each(data, function(key, val)
       
   783 		{
       
   784 			// console.log(val);
       
   785 			$.each(val, function(key_video, val_video)
       
   786 			{
       
   787 				$.getJSON(val_video.metadata, function(meta)
       
   788 				{
       
   789 					_this.affectVideoById(val_video.metadata, meta.medias[0].url.replace('rtmp://', 'http://').replace('/ddc_player/', '/'));
       
   790 					//console.log(meta.medias[0].url.replace('rtmp://', 'http://').replace('/ddc_player/', '/'));
       
   791 				});
       
   792 				
       
   793 				_this.imgs.push(val_video.snapshot);
       
   794 				_this.urls.push(val_video.metadata);
       
   795 			});
       
   796 		});
       
   797 		console.log('rdy');
       
   798 		_this.loadMosaic();
       
   799 	});
       
   800 }
       
   801 
       
   802 /*
       
   803  * Affecte une vidéo au tableau des vidéos selon son id
       
   804 */
       
   805 mosaic.prototype.affectVideoById = function(metadata_id, video)
       
   806 {
       
   807 	for (i = 0 ; i < this.urls.length ; i++)
       
   808 	{
       
   809 		if(this.urls[i] == metadata_id)
       
   810 		{
       
   811 			this.videos[i] = video;
       
   812 			break;
       
   813 		}
       
   814 	}
       
   815 }