diff -r 8721c292dc6b -r 49b0b5b7e8ab examples/LdtPlayer-release.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/LdtPlayer-release.js Tue Sep 13 15:50:37 2011 +0200 @@ -0,0 +1,1750 @@ +/* + * Copyright 2010 Institut de recherche et d'innovation + * contributor(s) : Samuel Huron + * Use Silvia Pfeiffer 's javascript mediafragment implementation + * + * contact@iri.centrepompidou.fr + * http://www.iri.centrepompidou.fr + * + * This software is a computer program whose purpose is to show and add annotations on a video . + * This software is governed by the CeCILL-C license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL-C + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL-C license and that you accept its terms. +*/ + +if ( window.IriSP === undefined && window.__IriSP === undefined ) { + var IriSP = {}; + var __IriSP = IriSP; /* for backward compatibility */ +} + + +// Official instance - to refactor ? +IriSP.MyLdt = null; +IriSP.MyTags = null; +IriSP.MyApiPlayer = null; +IriSP.player = null; + +// genral var (old code) - to refactor +IriSP.Durration = null; +IriSP.playerLdtWidth = null; +IriSP.playerLdtHeight = null; + + +IriSP.init = function ( config ) { + if ( config === null ) { + IriSP.config = IriSP.configDefault; + } else { + + IriSP.config = config; + + if ( IriSP.config.player.params == null ) { + IriSP.config.player.params = IriSP.configDefault.player.params; + } + + if ( IriSP.config.player.flashvars == null ) { + IriSP.config.player.flashvars = IriSP.configDefault.player.flashvars; + } + + if ( IriSP.config.player.attributes == null ) { + IriSP.config.player.attributes = IriSP.configDefault.player.attributes; + } + } + + var metadataSrc = IriSP.config.metadata.src; + var guiContainer = IriSP.config.gui.container; + var guiMode = IriSP.config.gui.mode; + var guiLdtShareTool = IriSP.LdtShareTool; + + // Localize jQuery variable + IriSP.jQuery = null; + + /* FIXME : to refactor using popcorn.getscript ? */ + /******** Load jQuery if not present *********/ + if ( window.jQuery === undefined || window.jQuery.fn.jquery !== '1.4.2' ) { + + var script_tag = document.createElement( 'script' ); + script_tag.setAttribute( "type", "text/javascript" ); + script_tag.setAttribute( "src", IriSP.lib.jQuery ); + + script_tag.onload = scriptLibHandler; + script_tag.onreadystatechange = function () { // Same thing but for IE + if ( this.readyState == 'complete' || this.readyState == 'loaded' ) { + scriptLibHandler(); + } + }; + + // Try to find the head, otherwise default to the documentElement + ( document.getElementsByTagName("head")[0] || document.documentElement ).appendChild( script_tag ); + } else { + // The jQuery version on the window is the one we want to use + IriSP.jQuery = window.jQuery; + scriptLibHandler(); + } + + /******** Called once jQuery has loaded ******/ + function scriptLibHandler() { + + var script_jqUi_tooltip = document.createElement( 'script' ); + script_jqUi_tooltip.setAttribute( "type", "text/javascript" ); + script_jqUi_tooltip.setAttribute( "src", IriSP.lib.jQueryToolTip ); + script_jqUi_tooltip.onload = scriptLoadHandler; + script_jqUi_tooltip.onreadystatechange = function () { // Same thing but for IE + if ( this.readyState == 'complete' || this.readyState == 'loaded' ) { + scriptLoadHandler( "jquery.tools.min.js loded" ); + } + }; + + var script_swfObj = document.createElement('script'); + script_swfObj.setAttribute( "type","text/javascript" ); + script_swfObj.setAttribute( "src",IriSP.lib.swfObject ); + script_swfObj.onload = scriptLoadHandler; + script_swfObj.onreadystatechange = function () { // Same thing but for IE + if ( this.readyState == 'complete' || this.readyState == 'loaded' ) { + scriptLoadHandler( "swfobject.js loded" ); + } + }; + + var script_jqUi = document.createElement( 'script' ); + script_jqUi.setAttribute( "type","text/javascript" ); + script_jqUi.setAttribute( "src",IriSP.lib.jQueryUI ); + script_jqUi.onload = scriptLoadHandler; + script_jqUi.onreadystatechange = function () { // Same thing but for IE + if ( this.readyState == 'complete' || this.readyState == 'loaded' ) { + scriptLoadHandler( "jquery-ui.min.js loded" ); + } + }; + + + ( document.getElementsByTagName("head")[0] || document.documentElement ).appendChild( script_jqUi_tooltip); + ( document.getElementsByTagName("head")[0] || document.documentElement ).appendChild( script_jqUi ); + ( document.getElementsByTagName("head")[0] || document.documentElement ).appendChild( script_swfObj ); + + + }; + + /******** Called once all lib are loaded ******/ + var loadLib = 0; + /* FIXME : ugly */ + function scriptLoadHandler( Mylib ) { + //alert(Mylib); + loadLib +=1; + if( loadLib===3 ) { + main(); + } + }; + + /******** Our main function ********/ + function main() { + + + // Make our own IriSP.jQuery and restore window.jQuery if there was one. + IriSP.jQuery = window.jQuery.noConflict( true ); + // Call ours Jquery + IriSP.jQuery( document ).ready( function($) { + + /******* Load CSS *******/ + var css_link_jquery = IriSP.jQuery( "", { + rel: "stylesheet", + type: "text/css", + href: IriSP.lib.cssjQueryUI, + 'class': "dynamic_css" + } ); + var css_link_custom = IriSP.jQuery( "", { + rel: "stylesheet", + type: "text/css", + href: IriSP.config.gui.css, + 'class': "dynamic_css" + } ); + + css_link_jquery.appendTo( 'head' ); + css_link_custom.appendTo( 'head' ); + + // to see dynamicly loaded css on IE + if ( $.browser.msie ) { + $( '.dynamic_css' ).clone().appendTo( 'head' ); + } + + //__IriSP.trace("main","ready createMyHtml"); + + IriSP.createPlayerChrome(); + + /******* Load Metadata *******/ + IriSP.getMetadata(); + + }); + } + +}; + + +__IriSP.Media = function ( id, url, duration, title, description ) { + this.id = id; + this.url = url; + this.title = title; + this.description = description; + this.duration = duration; + this.lignes = new Array(); + + IriSP.trace( "__IriSP.Media" , "Media ID : "+id); + IriSP.trace( "__IriSP.Media" , "Media URL : "+url); + IriSP.trace( "__IriSP.Media" , "Media title : "+title); +}; + +__IriSP.Media.prototype.createPlayerMedia = function ( width, height, MyStreamer, MySwfPath) { + IriSP.MyApiPlayer = new __IriSP.APIplayer( width, height, this.url, this.duration, MyStreamer, MySwfPath); + //createPlayer(width,height,this.url,this.duration,MyStreamer,MySwfPath); +}; + +__IriSP.Media.prototype.getMediaDuration = function () { + return (this.duration); +}; + +__IriSP.Media.prototype.getMediaTitle = function (){ + return (this.title); +}; + + + + + + +/* FIXME : API player - work in progress ... need refactoring of code */ +__IriSP.APIplayer = function ( width, height, url, duration, streamerPath, MySwfPath){ + + + this.player = null; + this.hashchangeUpdate = null; + + this.width = width; + this.height = height; + this.url = url; + this.duration = duration; + this.streamerPath = streamerPath; + this.MySwfPath = MySwfPath; + + IriSP.MyApiPlayer = this; + + IriSP.createPlayer( this.url, this.streamerPath ); + IriSP.trace( "__IriSP.APIplayer", "__IriSP.createPlayer" ); + + //__IriSP.config.player + /* + - dailymotion // &enableApi=1&chromeless=1 + - youtube + - html5 + - flowplayer + - jwplayer + */ + +}; + +__IriSP.APIplayer.prototype.ready = function( player ) { + + //__IriSP.trace("__IriSP.APIplayer.prototype.APIpReady"," __IriSP.createInterface"); + IriSP.createInterface( this.width, this.height, this.duration ); + //__IriSP.trace("__IriSP.APIplayer.prototype.APIpReady","END __IriSP.createInterface"); + + // hashchange EVENT + if ( window.addEventListener ){ + + // for firefox hashchange EVENT + window.addEventListener( "hashchange", function() { + var url = window.location.href; + var time = IriSP.retrieveTimeFragment( url ); + IriSP.trace( "__IriSP.APIplayer.prototype.ready", time ); + if( IriSP.MyApiPlayer.hashchangeUpdate==null ){ + IriSP.MyApiPlayer.seek( time ); + + } else { + IriSP.MyApiPlayer.hashchangeUpdate = null; + } + }, false ); + + } else if (window.attachEvent){ + // for ie hashchange EVENT + window.attachEvent( "onhashchange", function() { + IriSP.trace( "hashchange",time ); + var url = window.location.href; + var time = IriSP.retrieveTimeFragment( url ); + if( IriSP.MyApiPlayer.hashchangeUpdate == null ){ + IriSP.MyApiPlayer.seek(time); + } else { + IriSP.MyApiPlayer.hashchangeUpdate = null; + } + }, false); + } + + // Search + //__IriSP.jQuery("#LdtSearchInput").change(function() {__IriSP.Search(this.value);}); + //__IriSP.jQuery("#LdtSearchInput").live('change', function(event) {__IriSP.Search(this.value);}); + IriSP.jQuery( "#LdtSearchInput" ).keydown( function() { IriSP.Search( this.value );} ); + IriSP.jQuery("#LdtSearchInput").keyup( function() { IriSP.Search( this.value );} ); + +}; + +__IriSP.APIplayer.prototype.pause = function(){ + this.hashchangeUpdate = true; + IriSP.player.sendEvent( 'PAUSE' ); +}; + +__IriSP.APIplayer.prototype.play = function() { + this.hashchangeUpdate = true; + //__IriSP.trace("__IriSP.config.player.type",__IriSP.config.player.type); + if( IriSP.config.player.type=='jwplayer' ){ + + IriSP.player.sendEvent( 'PLAY' ); + + } else if(IriSP.config.player.type == 'dailymotion' + || IriSP.config.player.type == 'youtube' ) { + + var status = IriSP.player.getPlayerState(); + IriSP.trace( "__IriSP.APIplayer.prototype.play.status", status); + if ( status != 1 ){ + IriSP.player.playVideo(); + } else { + IriSP.player.pauseVideo(); + } + } +}; + +__IriSP.APIplayer.prototype.mute = function() { + IriSP.player.sendEvent( 'MUTE' ); + + //alert(__IriSP.jQuery(".ui-icon-volume-on").css("background-position-x")); + /* FIXME : remove hardcoded values */ + if ( IriSP.jQuery( ".ui-icon-volume-on" ).css( "background-position" ) == "-144px -160px" ){ + IriSP.jQuery(" .ui-icon-volume-on ").css(" background-position ", "-130px -160px"); + } else { + IriSP.jQuery( ".ui-icon-volume-on" ).css( "background-position", "-144px -160px" ); + } +}; + +/* FIXME : rename */ +__IriSP.APIplayer.prototype.share = function( network ) { + + /* FIXME : remove hardcoded */ + var MyMessage = encodeURIComponent( "J'écoute Les Retours du Dimanche : " ); + var MyURLNow = window.location.href; + var shareURL = null; + //alert(network+" : "+MyURLNow); + + /* FIXME : use a sharing library */ + if(network == "facebook"){ + shareURL = "http://www.facebook.com/share.php?u="; + }else if(network == "twitter"){ + shareURL = "http://twitter.com/home?status="+MyMessage; + }else if(network == "myspace"){ + shareURL ="http://www.myspace.com/Modules/PostTo/Pages/?u="; + }else if(network == "delicious"){ + shareURL = "http://delicious.com/save?url="; + }else if(network == "JameSpot"){ + shareURL = "http://www.jamespot.com/?action=spotit&u="; + //alert(network+" non actif pour l'instant : "+MyURLNow); + } + + if (shareURL != null) + window.open( shareURL+encodeURIComponent(MyURLNow) ); + //window.location.href = shareURL+encodeURIComponent(MyURLNow); +}; + +__IriSP.APIplayer.prototype.seek = function (time) { + + if( time==0 ) { time=1; } + + IriSP.trace( "__IriSP.APIplayer.prototype.seek", time ); + + if( IriSP.config.player.type=='jwplayer') { + //__IriSP.MyApiPlayer.play() + IriSP.player.sendEvent( 'SEEK', time ); + } else if( IriSP.config.player.type=='dailymotion' + || IriSP.config.player.type=='youtube' ) { + IriSP.player.seekTo( time ); + } + + this.changePageUrlOffset( time ); +}; + +__IriSP.APIplayer.prototype.update = function (time) { + + if( time != 0 ) { + this.hashchangeUpdate = true; + + IriSP.trace( "__IriSP.APIplayer.prototype.update" ,time); + IriSP.player.sendEvent( 'SEEK', time ); + } +}; + +__IriSP.APIplayer.prototype.changePageUrlOffset = function ( time ) { + //alert(time); + IriSP.trace( "__IriSP.APIplayer.prototype.changePageUrlOffset" , "CHANGE URL "+ time); + + window.location.hash = "#t=" + time; + window.location.href = window.location.href; + +}; + +/* Media Fragment functionality by Silvia Pfeiffer */ + +IriSP.jumpToTimeoffset = function ( form ) { + var time = form.time.value; + IriSP.MyApiPlayer.changePageUrlOffset( time ); +}; + +IriSP.retrieveTimeFragment = function ( url ) { + var pageoffset = 0; + var offsettime = 0; + + if ( url.split("#")[1] != null ) { + pageoffset = url.split( "#" )[1]; + if ( pageoffset.substring( 2 ) != null ) { + offsettime = pageoffset.substring( 2 ); + } + } + return offsettime; +}; + +IriSP.ignoreTimeFragment = function( url ){ + + var pageurl = url; + + if ( url.split( "#" )[1] != null ) { + pageurl = url.split( "#" )[0]; + } + + return pageurl; +}; + + +/* code specific to jwplayer / creation and listener */ + +IriSP.currentPosition = 0; +IriSP.currentVolume = 50; +IriSP.player = null; +IriSP.startPosition = null; +IriSP.firstplay = false; + + + +IriSP.createPlayer = function ( url, streamerPath ) { + if( IriSP.config.player.type=='dailymotion' ) { + IriSP.config.player.src = IriSP.config.player.src+"&chromeless=1&enableApi=1"; + } else if ( IriSP.config.player.type=='youtube' ){ + IriSP.config.player.src = IriSP.config.player.src+"&enablejsapi=1&version=3"; + } + + IriSP.trace( "__IriSP.createPlayer", "start" ); + + IriSP.myUrlFragment = url.split( streamerPath ); + + var configTemp = IriSP.jQuery.extend( true, {}, IriSP.config ); + configTemp.player.flashvars.autostart = "true"; + configTemp.player.flashvars.streamer = streamerPath; + configTemp.player.flashvars.file = IriSP.myUrlFragment[1]; + + var flashvars = configTemp.player.flashvars; + var params = configTemp.player.params; + var attributes = configTemp.player.attributes; + + IriSP.trace( + "__IriSP.createPlayer", + "SWFOBJECT src:"+ + IriSP.config.player.src+ + " " +IriSP.config.gui.width+ + " " +IriSP.config.gui.height + ); + + swfobject.embedSWF( + IriSP.config.player.src, + "Ldt-PlaceHolder", + IriSP.config.gui.width, + IriSP.config.gui.height, + "9.0.115", // FIXME : de-hardcode version ? + false, + flashvars, + params, + attributes + ); + + // need a methode to + // re execute if this swf call does'nt work +}; + + +/* jw player api */ +IriSP.playerReady = function (thePlayer) { + + //__IriSP.trace("__IriSP.playerReady","PLAYER READY !!!!!!!!!!!!"); + IriSP.player = window.document[thePlayer.id]; + //__IriSP.trace("__IriSP.playerReady","API CALL "+__IriSP.player); + IriSP.MyApiPlayer.ready( IriSP.player ); + //__IriSP.trace("__IriSP.playerReady","API CALL END "); + + var url = document.location.href; + var time = IriSP.retrieveTimeFragment( url ); + //__IriSP.trace("__IriSP.playerReady"," "+url+" "+time ); + IriSP.startPosition = time; + //__IriSP.trace("__IriSP.playerReady"," LISTENER LAUCHER"); + IriSP.addListeners(); + //__IriSP.trace("__IriSP.playerReady"," LISTENER END"); + +}; + +IriSP.addListeners = function () { + if ( IriSP.player ) { + IriSP.trace("__IriSP.addListeners","ADD Listener "); + IriSP.player.addModelListener( "TIME", "__IriSP.positionListener"); + IriSP.player.addControllerListener( "VOLUME", "__IriSP.volumeListener" ); + IriSP.player.addModelListener( 'STATE', '__IriSP.stateMonitor' ); + } else { + IriSP.setTimeout( "__IriSP.addListeners()", 100 ); + } + + // et changer les boutons +}; + +IriSP.stateMonitor = function ( obj ) { + + if(obj.newstate == 'PAUSED') { + IriSP.trace( "__IriSP.stateMonitor", "PAUSE" ); + IriSP.MyApiPlayer.changePageUrlOffset( IriSP.currentPosition ); + IriSP.jQuery( ".ui-icon-play" ).css( "background-position","0px -160px" ); + + } else if (obj.newstate == 'PLAYING' ){ + + IriSP.trace( "__IriSP.stateMonitor", "PLAYING "+IriSP.startPosition ); + + // force buffering even if autostart is disabled. + if ( IriSP.config.player.flashvars.autostart == "false" && IriSP.firstplay == false && IriSP.startPosition == 0 ) { + IriSP.trace("__IriSP.stateMonitor","first stop ???"); + IriSP.MyApiPlayer.play(); + IriSP.firstplay = true; + IriSP.MyLdt.checkTime( 1 ); + } + + // once that the video is loaded, move it to the correct timecode + if( IriSP.startPosition!=null ){ + IriSP.MyApiPlayer.update( IriSP.startPosition ); + IriSP.startPosition = null; + } + + + IriSP.jQuery( ".ui-icon-play" ).css( "background-position", "-16px -160px" ); + } else if (obj.newstate == 'BUFFERING'){ + IriSP.trace( "__IriSP.stateMonitor", "BUFFERING : "+IriSP.config.player.flashvars.autostart ); + //changePageUrlOffset(currentPosition); + } + +}; + +IriSP.positionListener = function(obj) { + //__IriSP.trace("__IriSP.positionListener",obj.position); + IriSP.currentPosition = obj.position; + var tmp = document.getElementById( "posit" ); + if (tmp) { tmp.innerHTML = "position: " + IriSP.currentPosition; } + IriSP.jQuery( "#slider-range-min" ).slider( "value", obj.position); + IriSP.jQuery( "#amount" ).val(obj.position+" s"); + // display annotation + IriSP.MyLdt.checkTime( IriSP.currentPosition ); + +}; + +IriSP.volumeListener = function (obj) { + IriSP.currentVolume = obj.percentage; + var tmp = document.getElementById("vol"); + if (tmp) { tmp.innerHTML = "volume: " + IriSP.currentVolume; } +}; + + +/* dailymotion api */ +onDailymotionPlayerReady = function (playerid) { + + //alert(playerid); + IriSP.player = document.getElementById( IriSP.config.player.attributes.id ); + IriSP.MyApiPlayer.ready( IriSP.player ); + + var url = document.location.href; + var time = IriSP.retrieveTimeFragment( url ); + IriSP.startPosition = time; + IriSP.DailymotionAddListeners(); + + IriSP.MyApiPlayer.ready(playerid); +}; + +IriSP.DailymotionAddListeners = function () { + if ( IriSP.player ) { + IriSP.trace( "__IriSP.addListeners","ADD Listener " ); + //__IriSP.player.addEventListener("onStateChange", "__IriSP.DailymotionPositionListener"); + setTimeout( "__IriSP.DailymotionPositionListener()", 100); + IriSP.DailymotionPositionListener(); + /* FIXME : works only with jwplayer */ + IriSP.player.addModelListener( "VOLUME", "__IriSP.volumeListener" ); + //__IriSP.player.addModelListener('STATE', '__IriSP.stateMonitor'); + } else { + IriSP.setTimeout( "__IriSP.DailymotionAddListeners()", 100); + } +}; + +IriSP.DailymotionPositionListener = function() { + + IriSP.currentPosition = IriSP.player.getCurrentTime(); + //__IriSP.trace("__IriSP.DailymotionPositionListener",__IriSP.currentPosition); + //__IriSP.trace("__IriSP.currentPosition",__IriSP.currentPosition); + + IriSP.jQuery( "#slider-range-min" ).slider( "value" , IriSP.currentPosition); + IriSP.jQuery( "#amount" ).val( IriSP.currentPosition+" s" ); + // afficher annotation + /*__IriSP.MyLdt.checkTime(__IriSP.currentPosition); + */ + + setTimeout( "__IriSP.DailymotionPositionListener()", 10 ); +}; + +/* youtube api */ +onYouTubePlayerReady= function (playerid){ + + var url = document.location.href; + var time = IriSP.retrieveTimeFragment( url ); + IriSP.player = document.getElementById( IriSP.config.player.attributes.id ); + IriSP.startPosition = time; + + IriSP.MyApiPlayer.ready( IriSP.player ); + + IriSP.MyApiPlayer.seek( time ); + IriSP.MyApiPlayer.play(); + + + IriSP.YouTubeAddListeners(); + IriSP.trace( "onYouTubePlayerReady=", time); + //__IriSP.MyApiPlayer.ready(playerid); +}; + +IriSP.YouTubeAddListeners = function () { + if ( IriSP.player ) { + IriSP.trace( "__IriSP.addListeners", "ADD Listener " ); + IriSP.player.addEventListener( "onStateChange", "__IriSP.YouTubeStateMonitor" ); + setTimeout( "__IriSP.YouTubePositionListener()", 100 ); + + /* FIXME : works only with jwplayer */ + IriSP.player.addModelListener( "VOLUME", "__IriSP.volumeListener" ); + //__IriSP.player.addModelListener('STATE', '__IriSP.stateMonitor'); + } else { + } +}; + +IriSP.YouTubePositionListener = function() { + + IriSP.currentPosition = IriSP.player.getCurrentTime(); + //__IriSP.trace("__IriSP.YouTubePositionListener",__IriSP.currentPosition); + //__IriSP.trace("__IriSP.currentPosition",__IriSP.currentPosition); + + IriSP.MyLdt.checkTime(IriSP.currentPosition); + IriSP.jQuery( "#slider-range-min" ).slider( "value", IriSP.currentPosition ); + IriSP.jQuery( "#amount" ).val( IriSP.currentPosition+" s" ); + // afficher annotation + IriSP.MyLdt.checkTime( IriSP.currentPosition ); + + + setTimeout( "__IriSP.YouTubePositionListener()", 10 ); +}; + +IriSP.YouTubeStateMonitor = function (obj) { + IriSP.player.addModelListener( '__IriSP.YouTubeStateMonitor ', newstate ); + //alert(newstate+" "+obj.newstate); + if(newstate == '2') { + IriSP.trace("__IriSP.stateMonitor","PAUSE"); + IriSP.MyApiPlayer.changePageUrlOffset( IriSP.currentPosition ); + + } else if (newstate == '1' || newstate == '1') { + // une fois la video prete a lire la déplacer au bon timecode + if( IriSP.startPosition!=null ) { + IriSP.MyApiPlayer.update( IriSP.startPosition ); + IriSP.startPosition = null; + } + } else if (newstate == '3'){ + IriSP.trace("__IriSP.stateMonitor","BUFFERING : "); + //changePageUrlOffset(currentPosition); + } + +}; + + +/* utils */ +// code from http://stackoverflow.com/questions/822452/strip-html-from-text-javascript +/* FIXME: maybe make it a little more robust */ +IriSP.stripHtml = function(s){ + return s.replace(/\\&/g, '&').replace(/\\/g, '>').replace(/\\t/g, '   ').replace(/\\n/g, '
').replace(/'/g, ''').replace(/"/g, '"'); +}; + +// conversion de couleur Decimal vers HexaDecimal || 000 si fff +/* FIXME : move it somewhere else */ +IriSP.DEC_HEXA_COLOR = function (dec) { + var hexa='0123456789ABCDEF',hex=''; + var tmp; + while (dec>15){ + tmp = dec-(Math.floor(dec/16))*16; + hex = hexa.charAt(tmp)+hex; + dec = Math.floor(dec/16); + } + hex = hexa.charAt(dec)+hex; + if (hex == "FFCC00"){ hex="";/* by default color of Ldt annotation */ } + return(hex); +}; + + +/* Search methods */ +IriSP.SearchOldValue=""; +IriSP.searchblockOpen=false; +IriSP.searchblock = function () { + IriSP.trace( "__IriSP.searchblock", IriSP.searchblockOpen ); + + if ( IriSP.searchblockOpen == false ) { + IriSP.jQuery( ".ui-icon-search" ).css( "background-position", "-144px -112px" ); + //__IriSP.jQuery("#LdtSearch").animate({height:26},250); + IriSP.jQuery("#LdtSearch").show(250); + /* FIXME : refactor this */ + IriSP.jQuery("#LdtSearchInput").css('background-color','#fff'); + IriSP.jQuery("#LdtSearchInput").focus(); + IriSP.jQuery("#LdtSearchInput").attr('value',IriSP.SearchOldValue); + IriSP.Search(IriSP.SearchOldValue); + IriSP.searchblockOpen = true; + } else { + IriSP.SearchOldValue = IriSP.jQuery("#LdtSearchInput").attr('value'); + IriSP.jQuery("#LdtSearchInput").attr('value',''); + IriSP.SearchClean(); + IriSP.jQuery(".ui-icon-search").css("background-position","-160px -112px"); + //__IriSP.jQuery("#LdtSearch").animate({height:0},250); + IriSP.jQuery("#LdtSearch").hide(250); + IriSP.searchblockOpen = false; + } +}; + +/* Search with typeahead */ +IriSP.Search = function ( value ){ + + annotations = IriSP.LDTligne.annotations; + + IriSP.trace("__IriSP.Search", annotations.length+" "+value); + + var found = 0; + var findmem = 0; + var factor = 0; + IriSP.trace(value,value.length); + var valueS = value.toLowerCase(); + IriSP.trace("__IriSP.Search", annotations.length+" "+valueS); + if(valueS.length>=3){ + + for (var i=0; i < annotations.length; ++i){ + annotation = annotations[i]; + + IriSP.jQuery("#output2").text(annotation.title+" ?= "+value); + + chaine1 = annotation.title.toLowerCase(); + chaine2 = annotation.description.toLowerCase(); + chaine3 = annotation.htmlTags.toLowerCase(); + + if(chaine1.indexOf(valueS,0) !=-1){ + found+=1; + } + if(chaine2.indexOf(valueS,0) !=-1){ + found+=1; + } + if(chaine3.indexOf(valueS,0) !=-1){ + found+=1; + } + + findmem += found; + if(found>0){ + factor = found*8; + IriSP.jQuery("#"+annotation.id).dequeue(); + IriSP.jQuery("#"+annotation.id).animate({height:factor},200); + IriSP.jQuery("#"+annotation.id).css('border','2px'); + IriSP.jQuery("#"+annotation.id).css('border-color','red'); + IriSP.jQuery("#"+annotation.id).animate({opacity:0.6},200); + + IriSP.trace("!!!!!!!!!!!!!!!!!!"," ?= "+annotation.id); + IriSP.jQuery("#LdtSearchInput").css('background-color','#e1ffe1'); + }else { + IriSP.jQuery("#"+annotation.id).dequeue(); + IriSP.jQuery("#"+annotation.id).animate({height:0},250); + IriSP.jQuery("#"+annotation.id).animate({opacity:0.3},200); + } + + found = 0; + } + if(findmem==0){ + IriSP.jQuery("#LdtSearchInput").css('background-color','#f6f6f6'); + } + + } else if(value.length==0){ + IriSP.SearchClean(); + IriSP.jQuery("#LdtSearchInput").css('background-color','#fff'); + } else { + IriSP.SearchClean(); + IriSP.jQuery("#LdtSearchInput").css('background-color','#f6f6f6'); + } +}; + +IriSP.SearchClean = function (){ + annotations = IriSP.LDTligne.annotations; + + for (var i=0; i < annotations.length; ++i){ + annotation = annotations[i]; + IriSP.jQuery("#"+annotation.id).dequeue(); + IriSP.jQuery("#"+annotation.id).animate({height:0},100); + IriSP.jQuery("#"+annotation.id).css('border','0px'); + IriSP.jQuery("#"+annotation.id).css('border-color','red'); + IriSP.jQuery("#"+annotation.id).animate({opacity:0.3},100); + } +}; + + +IriSP.SearchThisSegment = function (annotation){ + /* FIXME: to implement */ + IriSP.jQuery("#LdtSearchInput").text(annotation.title); + IriSP.trace("__IriSP.Ligne.prototype.checkTimeLigne",annotation.title); + /*__IriSP.jQuery("#Ldt-SaDescription").text(annotationTempo.description); + __IriSP.jQuery("#Ldt-SaKeywordText").html("Mots clefs : "+annotationTempo.htmlTags);*/ +}; + + +/* CLASS Ligne (annotationType) */ + +IriSP.LDTligne = null; +__IriSP.Ligne = function( id, title, description, duration ) { + this.id = id; + this.title = title; + this.description = description; + // + this.annotations = new Array(); + this.duration = duration; + this.annotationOldRead = ""; + IriSP.LDTligne = this; + IriSP.trace("__IriSP.Ligne","CREATE "+IriSP.LDTligne); +}; + +__IriSP.Ligne.prototype.addAnnotation = function ( id, begin, end, media, title, description, color, tags ) { + var myAnnotation = new __IriSP.Annotation(id,begin,end,media,title,description,color,tags,this.duration); + this.annotations.push(myAnnotation); + //__IriSP.trace("__IriSP.Ligne.prototype.addAnnotation ","add annotation "+title); +}; + +__IriSP.Ligne.prototype.onClickLigneAnnotation = function( id ) { + /* TODO implement */ + //changePageUrlOffset(currentPosition); + //player.sendEvent('SEEK', this.start); + //__IriSP.trace("SEEK",this.start); +}; + +__IriSP.Ligne.prototype.searchLigneAnnotation = function( id ) { + /* TODO implement */ + /*for (){ + }*/ +}; + +__IriSP.Ligne.prototype.listAnnotations = function() { + /* TODO implement */ +}; + +__IriSP.Ligne.prototype.nextAnnotation = function () { + + var annotationCibleNumber = this.numAnnotation(this.annotationOldRead)+1; + var annotationCible = this.annotations[annotationCibleNumber]; + + if( annotationCibleNumberannotationTempo.begin/1000 && time "; + //alert(this.color+" : "+DEC_HEXA_COLOR(this.color)); + + IriSP.jQueryAnnotationTemplate = Mustache.to_html(IriSP.annotation_template, + {"divTitle" : divTitle, "id" : this.id, "startPourcent" : startPourcent, + "endPourcent" : endPourcent, "hexa_color" : IriSP.DEC_HEXA_COLOR(this.color), + "seekPlace" : Math.round(this.begin/1000)}); + + IriSP.jQuerytoolTipTemplate = Mustache.to_html(IriSP.tooltip_template, + {"title" : this.title, "begin" : this.begin, "end" : this.end, + "description": this.description}); + + + IriSP.jQuery("
"+IriSP.jQueryAnnotationTemplate+"
").appendTo("#Ldt-Annotations"); + // TOOLTIP BUG ! + + IriSP.jQuery("#"+this.id).tooltip({ effect: 'slide'}); + + + IriSP.jQuery("#"+this.id).fadeTo(0,0.3); + IriSP.jQuery("#"+this.id).mouseover(function() { + IriSP.jQuery("#"+this.id).animate({opacity: 0.6}, 5); + }).mouseout(function(){ + IriSP.jQuery("#"+this.id).animate({opacity: 0.3}, 5); + }); + IriSP.trace("__IriSP.Annotation.prototype.draw","ADD ANOTATION : "+this.begin+" "+this.end+" "+IriSP.stripHtml(this.title)+" | "+startPourcent+" | "+endPourcent+" | duration = "+this.duration); + +}; + +__IriSP.Annotation.prototype.drawTags = function(){ + /* FIXME : to implement */ + var KeywordPattern = ' '+' '; + + //__IriSP.trace(" !? Tags : ",this.tags); + + if (this.tags!=undefined){ + for (var i = 0; i < this.tags.length; ++i){ + + //this.htmlTags += ' '+MyTags.getTitle(this.tags[i]['id-ref'])+' '+" , "; + this.htmlTags += ' '+IriSP.MyTags.getTitle(this.tags[i]['id-ref'])+' '+" , "; + + } + } +}; + +__IriSP.Annotation.prototype.tootTipAnnotation = function() { + // 1 chercher le div correspondant + // 2 y mettre les information + return this.color + ' ' + this.type + ' apple'; +}; + +__IriSP.Annotation.prototype.onRollOverAnnotation = function (){ + this.tootTip(); +}; + +__IriSP.Annotation.prototype.timeToPourcent = function(time,timetotal){ + return (parseInt(Math.round(time/timetotal*100))); +}; + + +/* CLASS Tags */ + +__IriSP.Tags = function(object){ + this.myTags = object; + this.htmlTags = null; + this.weigthMax = 0; + //this.mySegments = new array(); +}; + +__IriSP.Tags.prototype.addAnnotation = function (annotation){ + for (var i = 0; i < this.myTags.length; ++i){ + this.myTags[i].mySegments = new Array(); + if (annotation.tags!=null){ + for (var j = 0; j < annotation.tags.length; ++j){ + if (this.myTags[i]['id'] == annotation.tags[j]['id-ref']){ + this.myTags[i].mySegments.push([annotation.begin,annotation.end,annotation.id]); + var weigthTempo = this.myTags[i].mySegments.length; + var tempo = this.myTags[i].mySegments[weigthTempo-1]; + //__IriSP.trace ("__IriSP.Tags.prototype.addAnnotation "," "+this.myTags[i]['meta']['dc:title']+" "+this.myTags[i]['id']+" : "+tempo[0]+" - "+tempo[1]); + + if (this.weigthMax < weigthTempo ){ + this.weigthMax = weigthTempo; + } + } + } + } + } +}; + +__IriSP.Tags.prototype.getTitle = function (id){ + for (var i = 0; i < this.myTags.length; ++i){ + if(this.myTags[i]['id']==id){ + return(this.myTags[i]['meta']['dc:title']); + } + } + +}; + +__IriSP.Tags.prototype.draw = function (){ + + IriSP.trace("__IriSP.Tags.prototype.draw"," !!! WELL START " ); + for (var i = 0; i < this.myTags.length; ++i){ + IriSP.trace("__IriSP.Tags.prototype.draw"," ADD Tags : "+this.myTags[i]['id']); + if(this.myTags[i]['id']!=null){ + this.htmlTags += ' '+this.myTags[i]['meta']['dc:title']+' '+' , '; + } + } + + IriSP.jQuery('#Ldt-Tags').html(this.htmlTags); + IriSP.trace("__IriSP.Tags.prototype.draw"," !!!! END WMAX= "+this.weigthMax ); + +}; + +__IriSP.Tags.prototype.show = function (id){ + + var timeStartOffsetA = 100000000000000000000; + var timeStartOffsetB = 100000000000000000000; + var timeEndOffsetA = 0; + var timeEndOffsetB = 0; + var timeStartID; + var timeEndID; + var WidthPourCent; + var leftPourCent; + var timeStartOffset; + + // case 1 : seul segment + // case 2 : 2 ou X segments + + + for (var i = 0; i < this.myTags.length; ++i){ + if (this.myTags[i]['id']==id){ + IriSP.trace("######### TAG DRAWing : "," END" ); + + for (var j = 0; j < this.myTags[i].mySegments.length; ++j){ + if(timeStartOffset> this.myTags[i].mySegments[j][0]){ + timeStartOffsetA = this.myTags[i].mySegments[j][0]; + timeStartOffsetB = this.myTags[i].mySegments[j][1]; + timeStartID = this.myTags[i].mySegments[j][2] + } + if(timeStartOffset> this.myTags[i].mySegments[j][0]){ + timeEndOffsetA = this.myTags[i].mySegments[j][0]; + timeEndOffsetB = this.myTags[i].mySegments[j][1]; + timeEndID = this.myTags[i].mySegments[j][2] + } + } + + } + } + + // ------------------------------------------------- + // + // ------------------------------------------------- + + leftPourCent = IriSP.timeToPourcent((timeStartOffsetA*1+(timeStartOffsetB-timeStartOffsetA)/2),IriSP.MyLdt.duration); + WidthPourCent = IriSP.timeToPourcent((timeEndOffsetA*1+(timeEndOffsetB-timeEndOffsetA)/2),IriSP.MyLdt.duration)-leftPourCent; + //WidthPourCent = timeToPourcent((timeEndOffsetA*1+(timeEndOffsetB-timeEndOffsetA)/2),MyLdt.duration)-startPourcent; + IriSP.jQuery("#Ldt-Show-Tags").css('left',leftPourCent+'%'); + IriSP.jQuery("#Ldt-Show-Tags").css('width',WidthPourCent+'%'); + IriSP.jQuery("#Ldt-Show-Tags").text('joijoij'); + // like arrow script + + + +}; + + +IriSP.annotation_template = "
"; +IriSP.annotation_loading_template = "
 
Chargement...
"; +IriSP.radio_template = "
Get flash to see this player
 
{{{share_template}}}
Mots clefs :
"; +IriSP.search_template = "
"; +IriSP.share_template = " "; +IriSP.tooltip_template = "
{{title}}
{{begin}} : {{end}}
{{description}}
"; +IriSP.video_template = "
Get flash to see this player
 \;
{{{share_template}}}
Mots clefs :
";/* + mustache.js — Logic-less templates in JavaScript + + See http://mustache.github.com/ for more info. +*/ + +var Mustache = function() { + var Renderer = function() {}; + + Renderer.prototype = { + otag: "{{", + ctag: "}}", + pragmas: {}, + buffer: [], + pragmas_implemented: { + "IMPLICIT-ITERATOR": true + }, + context: {}, + + render: function(template, context, partials, in_recursion) { + // reset buffer & set context + if(!in_recursion) { + this.context = context; + this.buffer = []; // TODO: make this non-lazy + } + + // fail fast + if(!this.includes("", template)) { + if(in_recursion) { + return template; + } else { + this.send(template); + return; + } + } + + template = this.render_pragmas(template); + var html = this.render_section(template, context, partials); + if(in_recursion) { + return this.render_tags(html, context, partials, in_recursion); + } + + this.render_tags(html, context, partials, in_recursion); + }, + + /* + Sends parsed lines + */ + send: function(line) { + if(line !== "") { + this.buffer.push(line); + } + }, + + /* + Looks for %PRAGMAS + */ + render_pragmas: function(template) { + // no pragmas + if(!this.includes("%", template)) { + return template; + } + + var that = this; + var regex = new RegExp(this.otag + "%([\\w-]+) ?([\\w]+=[\\w]+)?" + + this.ctag, "g"); + return template.replace(regex, function(match, pragma, options) { + if(!that.pragmas_implemented[pragma]) { + throw({message: + "This implementation of mustache doesn't understand the '" + + pragma + "' pragma"}); + } + that.pragmas[pragma] = {}; + if(options) { + var opts = options.split("="); + that.pragmas[pragma][opts[0]] = opts[1]; + } + return ""; + // ignore unknown pragmas silently + }); + }, + + /* + Tries to find a partial in the curent scope and render it + */ + render_partial: function(name, context, partials) { + name = this.trim(name); + if(!partials || partials[name] === undefined) { + throw({message: "unknown_partial '" + name + "'"}); + } + if(typeof(context[name]) != "object") { + return this.render(partials[name], context, partials, true); + } + return this.render(partials[name], context[name], partials, true); + }, + + /* + Renders inverted (^) and normal (#) sections + */ + render_section: function(template, context, partials) { + if(!this.includes("#", template) && !this.includes("^", template)) { + return template; + } + + var that = this; + // CSW - Added "+?" so it finds the tighest bound, not the widest + var regex = new RegExp(this.otag + "(\\^|\\#)\\s*(.+)\\s*" + this.ctag + + "\n*([\\s\\S]+?)" + this.otag + "\\/\\s*\\2\\s*" + this.ctag + + "\\s*", "mg"); + + // for each {{#foo}}{{/foo}} section do... + return template.replace(regex, function(match, type, name, content) { + var value = that.find(name, context); + if(type == "^") { // inverted section + if(!value || that.is_array(value) && value.length === 0) { + // false or empty list, render it + return that.render(content, context, partials, true); + } else { + return ""; + } + } else if(type == "#") { // normal section + if(that.is_array(value)) { // Enumerable, Let's loop! + return that.map(value, function(row) { + return that.render(content, that.create_context(row), + partials, true); + }).join(""); + } else if(that.is_object(value)) { // Object, Use it as subcontext! + return that.render(content, that.create_context(value), + partials, true); + } else if(typeof value === "function") { + // higher order section + return value.call(context, content, function(text) { + return that.render(text, context, partials, true); + }); + } else if(value) { // boolean section + return that.render(content, context, partials, true); + } else { + return ""; + } + } + }); + }, + + /* + Replace {{foo}} and friends with values from our view + */ + render_tags: function(template, context, partials, in_recursion) { + // tit for tat + var that = this; + + var new_regex = function() { + return new RegExp(that.otag + "(=|!|>|\\{|%)?([^\\/#\\^]+?)\\1?" + + that.ctag + "+", "g"); + }; + + var regex = new_regex(); + var tag_replace_callback = function(match, operator, name) { + switch(operator) { + case "!": // ignore comments + return ""; + case "=": // set new delimiters, rebuild the replace regexp + that.set_delimiters(name); + regex = new_regex(); + return ""; + case ">": // render partial + return that.render_partial(name, context, partials); + case "{": // the triple mustache is unescaped + return that.find(name, context); + default: // escape the value + return that.escape(that.find(name, context)); + } + }; + var lines = template.split("\n"); + for(var i = 0; i < lines.length; i++) { + lines[i] = lines[i].replace(regex, tag_replace_callback, this); + if(!in_recursion) { + this.send(lines[i]); + } + } + + if(in_recursion) { + return lines.join("\n"); + } + }, + + set_delimiters: function(delimiters) { + var dels = delimiters.split(" "); + this.otag = this.escape_regex(dels[0]); + this.ctag = this.escape_regex(dels[1]); + }, + + escape_regex: function(text) { + // thank you Simon Willison + if(!arguments.callee.sRE) { + var specials = [ + '/', '.', '*', '+', '?', '|', + '(', ')', '[', ']', '{', '}', '\\' + ]; + arguments.callee.sRE = new RegExp( + '(\\' + specials.join('|\\') + ')', 'g' + ); + } + return text.replace(arguments.callee.sRE, '\\$1'); + }, + + /* + find `name` in current `context`. That is find me a value + from the view object + */ + find: function(name, context) { + name = this.trim(name); + + // Checks whether a value is thruthy or false or 0 + function is_kinda_truthy(bool) { + return bool === false || bool === 0 || bool; + } + + var value; + if(is_kinda_truthy(context[name])) { + value = context[name]; + } else if(is_kinda_truthy(this.context[name])) { + value = this.context[name]; + } + + if(typeof value === "function") { + return value.apply(context); + } + if(value !== undefined) { + return value; + } + // silently ignore unkown variables + return ""; + }, + + // Utility methods + + /* includes tag */ + includes: function(needle, haystack) { + return haystack.indexOf(this.otag + needle) != -1; + }, + + /* + Does away with nasty characters + */ + escape: function(s) { + s = String(s === null ? "" : s); + return s.replace(/&(?!\w+;)|["'<>\\]/g, function(s) { + switch(s) { + case "&": return "&"; + case "\\": return "\\\\"; + case '"': return '"'; + case "'": return '''; + case "<": return "<"; + case ">": return ">"; + default: return s; + } + }); + }, + + // by @langalex, support for arrays of strings + create_context: function(_context) { + if(this.is_object(_context)) { + return _context; + } else { + var iterator = "."; + if(this.pragmas["IMPLICIT-ITERATOR"]) { + iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator; + } + var ctx = {}; + ctx[iterator] = _context; + return ctx; + } + }, + + is_object: function(a) { + return a && typeof a == "object"; + }, + + is_array: function(a) { + return Object.prototype.toString.call(a) === '[object Array]'; + }, + + /* + Gets rid of leading and trailing whitespace + */ + trim: function(s) { + return s.replace(/^\s*|\s*$/g, ""); + }, + + /* + Why, why, why? Because IE. Cry, cry cry. + */ + map: function(array, fn) { + if (typeof array.map == "function") { + return array.map(fn); + } else { + var r = []; + var l = array.length; + for(var i = 0; i < l; i++) { + r.push(fn(array[i])); + } + return r; + } + } + }; + + return({ + name: "mustache.js", + version: "0.3.1-dev", + + /* + Turns a template and view into HTML + */ + to_html: function(template, view, partials, send_fun) { + var renderer = new Renderer(); + if(send_fun) { + renderer.send = send_fun; + } + renderer.render(template, view, partials); + if(!send_fun) { + return renderer.buffer.join("\n"); + } + } + }); +}(); +/* utils.js - various utils that don't belong anywhere else */ + +/* trace function, for debugging */ + +IriSP.traceNum = 0; +IriSP.trace = function( msg, value ) { + + if( IriSP.config.gui.debug === true ) { + IriSP.traceNum += 1; + IriSP.jQuery( "
"+IriSP.traceNum+" - "+msg+" : "+value+"
" ).appendTo( "#Ldt-output" ); + } +}; + +/* data.js - this file deals with how the players gets and sends data */ + +IriSP.getMetadata = function() { + + IriSP.jQuery.ajax({ + dataType: IriSP.config.metadata.load, + url:IriSP.config.metadata.src, + success : function( json ){ + + IriSP.trace( "ajax", "success" ); + + // START PARSING ----------------------- + if( json === "" ){ + alert( "Json load error" ); + } else { + // # CREATE MEDIA // + // # JUSTE ONE PLAYER FOR THE MOMENT // + //__IriSP.jQuery("
").appendTo("#output"); + var MyMedia = new __IriSP.Media( + json.medias[0].id, + json.medias[0].href, + json.medias[0]['meta']['dc:duration'], + json.medias[0]['dc:title'], + json.medias[0]['dc:description']); + + IriSP.trace( "__IriSP.MyApiPlayer", + IriSP.config.gui.width+" " + + IriSP.config.gui.height + " " + + json.medias[0].href + " " + + json.medias[0]['meta']['dc:duration'] + " " + + json.medias[0]['meta']['item']['value']); + + // Create APIplayer + IriSP.MyApiPlayer = new __IriSP.APIplayer ( + IriSP.config.gui.width, + IriSP.config.gui.height, + json.medias[0].href, + json.medias[0]['meta']['dc:duration'], + json.medias[0]['meta']['item']['value']); + + // # CREATE THE FIRST LINE // + IriSP.trace( "__IriSP.init.main","__IriSP.Ligne" ); + IriSP.MyLdt = new __IriSP.Ligne( + json['annotation-types'][0].id, + json['annotation-types'][0]['dc:title'], + json['annotation-types'][0]['dc:description'], + json.medias[0]['meta']['dc:duration']); + + // CREATE THE TAG CLOUD // + IriSP.trace( "__IriSP.init.main","__IriSP.Tags" ); + IriSP.MyTags = new __IriSP.Tags( json.tags ); + + // CREATE THE ANNOTATIONS // + // JUSTE FOR THE FIRST TYPE // + /* FIXME: make it support more than one ligne de temps */ + IriSP.jQuery.each( json.annotations, function(i,item) { + if (item.meta['id-ref'] == IriSP.MyLdt.id) { + //__IriSP.trace("__IriSP.init.main","__IriSP.MyLdt.addAnnotation"); + IriSP.MyLdt.addAnnotation( + item.id, + item.begin, + item.end, + item.media, + item.content.title, + item.content.description, + item.content.color, + item.tags); + } + //MyTags.addAnnotation(item); + } ); + IriSP.jQuery.each( json.lists, function(i,item) { + IriSP.trace("lists",""); + } ); + IriSP.jQuery.each( json.views, function(i,item) { + IriSP.trace("views",""); + } ); + } + // END PARSING ----------------------- // + + + }, error : function(data){ + alert("ERROR : "+data); + } + }); + +}/* site.js - all our site-dependent config : player chrome, cdn locations, etc...*/ + +IriSP.lib = { + jQuery:"http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js", + jQueryUI:"http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.min.js", + jQueryToolTip:"http://cdn.jquerytools.org/1.2.4/all/jquery.tools.min.js", + swfObject:"http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js", + cssjQueryUI:"http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/themes/base/jquery-ui.css" +}; + +//Player Configuration +IriSP.config = undefined; +IriSP.configDefault = { + metadata:{ + format:'cinelab', + src:'', + load:'jsonp' + }, + gui:{ + width:650, + height:0, + mode:'radio', + container:'LdtPlayer', + debug:false, + css:'../src/css/LdtPlayer.css' + }, + player:{ + type:'jwplayer', + src:'../res/swf/player.swf', + params:{ + allowfullscreen:"true", + allowscriptaccess:"always", + wmode:"transparent" + }, + flashvars:{ + streamer:"streamer", + file:"file", + live:"true", + autostart:"false", + controlbar:"none", + playerready:"IriSP.playerReady" + }, + attributes:{ + id:"Ldtplayer1", + name:"Ldtplayer1" + } + }, + module:null +}; + +/* ui.js - ui related functions */ + +/* FIXME: use an sharing library */ +IriSP.LdtShareTool = IriSP.share_template; /* the contents come from share.html */ + +IriSP.createPlayerChrome = function(){ + var width = IriSP.config.gui.width; + var height = IriSP.config.gui.height; + var heightS = IriSP.config.gui.height-20; + + // AUDIO */ + // PB dans le html : ; + IriSP.trace( "__IriSP.createMyHtml",IriSP.config.gui.container ); + + + /* FIXME : factor this in another file */ + if( IriSP.config.gui.mode=="radio" ){ + + IriSP.jQuery( "#"+IriSP.config.gui.container ).before(IriSP.search_template); + var radioPlayer = Mustache.to_html(IriSP.radio_template, {"share_template" : IriSP.share_template}); + IriSP.jQuery(radioPlayer).appendTo("#"+IriSP.config.gui.container); + + // special tricks for IE 7 + if (IriSP.jQuery.browser.msie==true && IriSP.jQuery.browser.version=="7.0"){ + //LdtSearchContainer + //__IriSP.jQuery("#LdtPlayer").attr("margin-top","50px"); + IriSP.jQuery("#Ldt-Root").css("padding-top","25px"); + IriSP.trace("__IriSP.createHtml","IE7 SPECIAL "); + } + } else if(IriSP.config.gui.mode=="video") { + + var videoPlayer = Mustache.to_html(IriSP.video_template, {"share_template" : IriSP.share_template, "heightS" : heightS}); + IriSP.jQuery(videoPlayer).appendTo("#"+IriSP.config.gui.container); + } + + /* FIXME : move it elsewhere */ + IriSP.trace("__IriSP.createHtml",IriSP.jQuery.browser.msie+" "+IriSP.jQuery.browser.version); + IriSP.trace("__IriSP.createHtml","end"); + IriSP.jQuery("#Ldt-Annotations").width(width-(75*2)); + IriSP.jQuery("#Ldt-Show-Arrow-container").width(width-(75*2)); + IriSP.jQuery("#Ldt-ShowAnnotation-audio").width(width-10); + IriSP.jQuery("#Ldt-ShowAnnotation-video").width(width-10); + IriSP.jQuery("#Ldt-SaKeyword").width(width-10); + IriSP.jQuery("#Ldt-controler").width(width-10); + IriSP.jQuery("#Ldt-Control").attr("z-index","100"); + IriSP.jQuery("#Ldt-controler").hide(); + + IriSP.jQuery(IriSP.annotation_loading_template).appendTo("#Ldt-ShowAnnotation-audio"); + + if(IriSP.config.gui.mode=='radio'){ + IriSP.jQuery("#Ldt-load-container").attr("width",IriSP.config.gui.width); + } + // Show or not the output + if(IriSP.config.gui.debug===true){ + IriSP.jQuery("#Ldt-output").show(); + } else { + IriSP.jQuery("#Ldt-output").hide(); + } + +}; + + +/* create the buttons and the slider */ +IriSP.createInterface = function( width, height, duration ) { + + IriSP.jQuery( "#Ldt-controler" ).show(); + //__IriSP.jQuery("#Ldt-Root").css('display','visible'); + IriSP.trace( "__IriSP.createInterface" , width+","+height+","+duration+"," ); + + IriSP.jQuery( "#Ldt-ShowAnnotation").click( function () { + //__IriSP.jQuery(this).slideUp(); + } ); + + var LdtpPlayerY = IriSP.jQuery("#Ldt-PlaceHolder").attr("top"); + var LdtpPlayerX = IriSP.jQuery("#Ldt-PlaceHolder").attr("left"); + + IriSP.jQuery( "#slider-range-min" ).slider( { //range: "min", + value: 0, + min: 1, + max: duration/1000,//1:54:52.66 = 3600+3240+ + step: 0.1, + slide: function(event, ui) { + + //__IriSP.jQuery("#amount").val(ui.value+" s"); + //player.sendEvent('SEEK', ui.value) + IriSP.MyApiPlayer.seek(ui.value); + //changePageUrlOffset(ui.value); + //player.sendEvent('PAUSE') + } + } ); + + IriSP.trace("__IriSP.createInterface","ICI"); + IriSP.jQuery("#amount").val(IriSP.jQuery("#slider-range-min").slider("value")+" s"); + IriSP.jQuery(".Ldt-Control1 button:first").button({ + icons: { + primary: 'ui-icon-play' + }, + text: false + }).next().button({ + icons: { + primary: 'ui-icon-seek-next' + }, + text: false + }); + IriSP.jQuery(".Ldt-Control2 button:first").button({ + icons: { + primary: 'ui-icon-search'//, + //secondary: 'ui-icon-volume-off' + }, + text: false + }).next().button({ + icons: { + primary: 'ui-icon-volume-on' + }, + text: false + }); + + // /!\ PB A MODIFIER + //__IriSP.MyTags.draw(); + IriSP.trace("__IriSP.createInterface","ICI2"); + IriSP.jQuery( "#ldt-CtrlPlay" ).attr( "style", "background-color:#CD21C24;" ); + + IriSP.jQuery( "#Ldt-load-container" ).hide(); + + if( IriSP.config.gui.mode=="radio" & IriSP.jQuery.browser.msie != true ) { + IriSP.jQuery( "#Ldtplayer1" ).attr( "height", "0" ); + } + IriSP.trace( "__IriSP.createInterface" , "3" ); + + IriSP.trace( "__IriSP.createInterface", "END" ); + + };