From 70fc8f315de4b80bb856b72a4ba0652a97dedca2 Mon Sep 17 00:00:00 2001 From: Julien Bouquillon Date: Wed, 9 Jan 2013 18:10:31 +0100 Subject: [PATCH] Add the classic VLCobject and VLCcontrol libraries Signed-off-by: Jean-Baptiste Kempf --- share/test/VLCcontrols/ExternalLibLoader.js | 60 ++ share/test/VLCcontrols/README.txt | 48 ++ share/test/VLCcontrols/SimpleSlider.js | 226 ++++++ share/test/VLCcontrols/VLCcontrols.js | 691 ++++++++++++++++++ share/test/VLCcontrols/VLCobject.js | 215 ++++++ share/test/VLCcontrols/advanced.html | 306 ++++++++ share/test/VLCcontrols/example.html | 105 +++ share/test/VLCcontrols/example2.html | 84 +++ share/test/VLCcontrols/example3.html | 102 +++ share/test/VLCcontrols/example4.html | 104 +++ share/test/VLCcontrols/example5.html | 109 +++ share/test/VLCcontrols/idle2.gif | Bin 0 -> 17987 bytes share/test/VLCcontrols/images/fullscreen.gif | Bin 0 -> 97 bytes share/test/VLCcontrols/images/fullscreen2.gif | Bin 0 -> 1058 bytes share/test/VLCcontrols/images/idle2.gif | Bin 0 -> 17987 bytes share/test/VLCcontrols/images/increase_bg.gif | Bin 0 -> 94 bytes .../test/VLCcontrols/images/increase_knob.gif | Bin 0 -> 80 bytes share/test/VLCcontrols/images/info.png | Bin 0 -> 896 bytes share/test/VLCcontrols/images/moins.gif | Bin 0 -> 97 bytes share/test/VLCcontrols/images/moins2.gif | Bin 0 -> 869 bytes share/test/VLCcontrols/images/options.png | Bin 0 -> 1014 bytes share/test/VLCcontrols/images/pause2.gif | Bin 0 -> 1012 bytes share/test/VLCcontrols/images/play2.gif | Bin 0 -> 1003 bytes share/test/VLCcontrols/images/player_next.png | Bin 0 -> 199 bytes .../test/VLCcontrols/images/player_pause.png | Bin 0 -> 177 bytes share/test/VLCcontrols/images/player_play.png | Bin 0 -> 215 bytes share/test/VLCcontrols/images/player_prev.png | Bin 0 -> 195 bytes share/test/VLCcontrols/images/player_stop.png | Bin 0 -> 176 bytes share/test/VLCcontrols/images/plus.gif | Bin 0 -> 100 bytes share/test/VLCcontrols/images/plus2.gif | Bin 0 -> 997 bytes share/test/VLCcontrols/images/slider_bg.gif | Bin 0 -> 60 bytes share/test/VLCcontrols/images/sound.png | Bin 0 -> 357 bytes share/test/VLCcontrols/images/sound_mute.png | Bin 0 -> 377 bytes share/test/VLCcontrols/images/stop2.gif | Bin 0 -> 994 bytes share/test/VLCcontrols/images/uri.png | Bin 0 -> 362 bytes share/test/VLCcontrols/licence_BSD.txt | 15 + share/test/VLCcontrols/slim.html | 95 +++ share/test/VLCcontrols/styles.css | 61 ++ share/test/VLCcontrols/subtitles.srt | 171 +++++ share/test/VLCcontrols/uri.png | Bin 0 -> 362 bytes 40 files changed, 2392 insertions(+) create mode 100644 share/test/VLCcontrols/ExternalLibLoader.js create mode 100644 share/test/VLCcontrols/README.txt create mode 100644 share/test/VLCcontrols/SimpleSlider.js create mode 100644 share/test/VLCcontrols/VLCcontrols.js create mode 100644 share/test/VLCcontrols/VLCobject.js create mode 100644 share/test/VLCcontrols/advanced.html create mode 100644 share/test/VLCcontrols/example.html create mode 100644 share/test/VLCcontrols/example2.html create mode 100644 share/test/VLCcontrols/example3.html create mode 100644 share/test/VLCcontrols/example4.html create mode 100644 share/test/VLCcontrols/example5.html create mode 100644 share/test/VLCcontrols/idle2.gif create mode 100644 share/test/VLCcontrols/images/fullscreen.gif create mode 100644 share/test/VLCcontrols/images/fullscreen2.gif create mode 100644 share/test/VLCcontrols/images/idle2.gif create mode 100644 share/test/VLCcontrols/images/increase_bg.gif create mode 100644 share/test/VLCcontrols/images/increase_knob.gif create mode 100644 share/test/VLCcontrols/images/info.png create mode 100644 share/test/VLCcontrols/images/moins.gif create mode 100644 share/test/VLCcontrols/images/moins2.gif create mode 100644 share/test/VLCcontrols/images/options.png create mode 100644 share/test/VLCcontrols/images/pause2.gif create mode 100644 share/test/VLCcontrols/images/play2.gif create mode 100644 share/test/VLCcontrols/images/player_next.png create mode 100644 share/test/VLCcontrols/images/player_pause.png create mode 100644 share/test/VLCcontrols/images/player_play.png create mode 100644 share/test/VLCcontrols/images/player_prev.png create mode 100644 share/test/VLCcontrols/images/player_stop.png create mode 100644 share/test/VLCcontrols/images/plus.gif create mode 100644 share/test/VLCcontrols/images/plus2.gif create mode 100644 share/test/VLCcontrols/images/slider_bg.gif create mode 100644 share/test/VLCcontrols/images/sound.png create mode 100644 share/test/VLCcontrols/images/sound_mute.png create mode 100644 share/test/VLCcontrols/images/stop2.gif create mode 100644 share/test/VLCcontrols/images/uri.png create mode 100644 share/test/VLCcontrols/licence_BSD.txt create mode 100644 share/test/VLCcontrols/slim.html create mode 100644 share/test/VLCcontrols/styles.css create mode 100644 share/test/VLCcontrols/subtitles.srt create mode 100644 share/test/VLCcontrols/uri.png diff --git a/share/test/VLCcontrols/ExternalLibLoader.js b/share/test/VLCcontrols/ExternalLibLoader.js new file mode 100644 index 0000000..741be6f --- /dev/null +++ b/share/test/VLCcontrols/ExternalLibLoader.js @@ -0,0 +1,60 @@ + + +var loaded_libs = new Array(); + +function ExternalLibLoader() { + this.libs = loaded_libs; + + +} + +ExternalLibLoader.prototype.addLib = function(uri, callback) { + var idx = this.libs.length; + this.libs[idx] = new Array(); + this.libs[idx].uri = uri; + this.libs[idx].callback = callback; + this.libs[idx].loaded = false; +} + +CheckExternalLibs = function() { + for (var i=0; i= 1.0 new security restrictions disable lots of plugin functionnality (output). now need some serious rewrite so moved to github ! + +28/06/2010 : just dropped a new jQuery class that works better and with new VLC versions. see jquery.html + + +**Examples :** + + - The example are on GitHub pages : [http://revolunet.github.com/VLCcontrols][4] + +**API :** + + // create a player in div '#vlc1' + var player = VLCobject.embedPlayer('vlc1', 400, 300, true); + player.play('http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_surround-fix.avi'); + + // set a [VLC option][2] + player.options.set("start-time", 50); + // reset all VLC options + player.options.clear(); + // start playing uri + player.play(uri); + // stop playing + player.stop(); + + +**INSTALLATION** + +You can directly use our hosting and google jQuery CDN for js+images+css : + + + + + + + + [1]: http://www.revolunet.com/labo/code/VLCcontrols + [2]: http://wiki.videolan.org/VLC_command-line_help + [3]: http://blog.deconcept.com/swfobject/ + [4]: http://revolunet.github.com/VLCcontrols \ No newline at end of file diff --git a/share/test/VLCcontrols/SimpleSlider.js b/share/test/VLCcontrols/SimpleSlider.js new file mode 100644 index 0000000..a98a4e5 --- /dev/null +++ b/share/test/VLCcontrols/SimpleSlider.js @@ -0,0 +1,226 @@ +/* + = revolunet + = revolunet - Julien Bouquillon + = 2008 + +Copyright (c) 2008, revolunet +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met : + + + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE, DATA, OR PROFITS ; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +*/ + + + +var sliders = new Array(); + +function Slider(sliderID, width, height) { + + this.position=0; + sliders[sliderID] = this; + + var tgt = document.getElementById(sliderID); + this.tgt = tgt; + if(!tgt) return; + //alert((width - 2) + "px"); + tgt.style.width = (width - 2) + "px"; + tgt.style.height = height + "px"; + tgt.style.backgroundColor = "silver"; + tgt.style.border = "1px solid black"; + tgt.style.cursor = "pointer"; + tgt.style.textAlign="left"; + tgt.style.zIndex="1"; + //tgt.style.position = "absolute"; + //tgt.style.left = "0px"; + + var thumb = document.createElement("div"); + thumb.setAttribute("id", sliderID + "_thumb"); + thumb.slider = this; + + thumb.setAttribute("style", "float:left"); + + thumb.style.display = "inline"; + thumb.style.width = "5px"; + thumb.style.height = height + "px"; + + + //alert( tgt.style.height ); + //alert( thumb.style.height ); + //thumb.style.zIndex="1000"; + + thumb.style.backgroundColor = "#666666"; + thumb.style.borderLeft = "0px solid black"; + thumb.style.borderRight = "0px solid black"; + thumb.style.cursor = "pointer"; + thumb.style.position = "relative"; + + thumb.dragging = false; + tgt.onmousedown = function() {eval("Slider_click('" + sliderID + "')");} + thumb.onmousedown = function() {eval("Slider_startDrag('" + sliderID + "')");} + thumb.onmousemove = function() {eval("Slider_Drag('" + sliderID + "')");} + tgt.onmousemove = function() {eval("Slider_Drag('" + sliderID + "')");} + //thumb.onmouseup = function() {eval("Slider_stopDrag('" + sliderID + "')");} + //thumb.onmouseout = function() {eval("Slider_stopDrag('" + sliderID + "')");} + //tgt.onmouseup = this.stopDrag; + //tgt.innerHTML+=""; + tgt.appendChild(thumb); + +// thumb.innerHTML+="-"; + + + +// alert(tgt.innerHTML); + + + + this.thumb = document.getElementById(sliderID + "_thumb"); + + //this.thumb.style.top="50px"; + //this.thumb.style.left="50px"; + //alert(this.thumb.style.left); + //alert(this.thumb); + + document.onmousemove = doSomething; +// alert(window.document.onmousemove); +} + + +Slider.prototype.setPosition = function(position) { + this.position = position; + Slider_setXFromPosition(this.tgt.id, position); +} + + +function getX( oElement ) +{ + var iReturnValue = 0; + while( oElement != null ) { + iReturnValue += oElement.offsetLeft; + //alert(oElement.offsetLeft); + oElement = oElement.offsetParent; + } + return iReturnValue; +} + + +function Slider_click(id, e) { + //var tgt = sliders[id] + //var lbase = getX(tgt.tgt); + //var relpos = parseInt(event.clientX - lbase - (parseInt((tgt.thumb.style.width.replace("px",""))) / 2)); + //tgt.thumb.style.left = relpos + "px"; + + + //alert(e); + Slider_setXfromevent(id); + Slider_gotnewposition(id); +} + +function Slider_startDrag(id) { + var tgt = sliders[id]; + // var lbase = getX(tgt.tgt); + // var offset = parseInt((tgt.thumb.style.width.replace("px",""))); + //var relpos = parseInt(event.clientX - lbase - offset); + //tgt.thumb.style.left = relpos + "px"; + document.onmouseup = function() {eval("Slider_stopDrag('" + id + "')");} + tgt.thumb.dragging = true; +} + +function Slider_Drag(id) { + + var tgt = sliders[id]; + if (!tgt.thumb.dragging) return; + Slider_setXfromevent(id); + +} + +function Slider_setXfromevent(id) { + var event = window.event||window.Event; + var tgt = sliders[id]; + var lbase = getX(tgt.tgt); + var thumb_width = parseInt(tgt.thumb.style.width.replace("px","")) + var offset = parseInt(thumb_width / 2); + + var relpos = parseInt(posx - lbase - offset); + var bar_width = parseInt(tgt.tgt.style.width.replace("px","")); + if (relpos >= (bar_width - thumb_width)) relpos = bar_width - thumb_width; + if (relpos < 0) relpos=0; + + Slider_setX(id, relpos); + +} + +function Slider_setXFromPosition(id, position) { + var tgt = sliders[id]; + var lbase = getX(tgt.tgt); + var thumb_width = parseInt(tgt.thumb.style.width.replace("px","")) + var bar_width = parseInt(tgt.tgt.style.width.replace("px","")); + var offset = parseInt(thumb_width / 2); + var relpos = parseInt((position * bar_width) - offset ); + if (relpos >= (bar_width - thumb_width)) relpos = bar_width - thumb_width; + if (relpos < 0) relpos=0; + Slider_setX(id, relpos); +} + +function Slider_setX(id, x) { + var tgt = sliders[id]; + tgt.thumb.style.left = x + "px"; +} + + + +function Slider_stopDrag(id) { + //alert(event.clientX); +// alert(this.thumb); + //this.thumb.style.left = event.clientX; + Slider_setXfromevent(id); + var tgt = sliders[id]; + tgt.thumb.dragging = false; + document.onmouseup = null; + Slider_gotnewposition(id); +} + +function Slider_gotnewposition(id) { + var tgt = sliders[id]; + var thumb_pos = parseInt(tgt.thumb.style.left.replace("px","")); + if (thumb_pos < 0) thumb_pos=0; + if (thumb_pos > parseInt(tgt.tgt.style.width.replace("px",""))) thumb_pos=parseInt(tgt.tgt.style.width.replace("px","")); + var value = thumb_pos / parseInt(tgt.tgt.style.width.replace("px","")); + tgt.position = value; + //alert(value); + if (tgt.onNewPosition) tgt.onNewPosition(); + +} + + + +var posx = 0; +var posy = 0; + +function doSomething(e) { + + if (!e) var e = window.event; + if (e.pageX || e.pageY) { + posx = e.pageX; + posy = e.pageY; + } + else if (e.clientX || e.clientY) { + posx = e.clientX + document.body.scrollLeft + + document.documentElement.scrollLeft; + posy = e.clientY + document.body.scrollTop + + document.documentElement.scrollTop; + } + // posx and posy contain the mouse position relative to the document + // Do something with this information + + +} + +//SimpleSliderLibReceived(); + \ No newline at end of file diff --git a/share/test/VLCcontrols/VLCcontrols.js b/share/test/VLCcontrols/VLCcontrols.js new file mode 100644 index 0000000..8be104d --- /dev/null +++ b/share/test/VLCcontrols/VLCcontrols.js @@ -0,0 +1,691 @@ +/* + = revolunet + = revolunet - Julien Bouquillon + = 2008 + +Copyright (c) 2008, revolunet +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met : + + + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE, DATA, OR PROFITS ; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +*/ + +//var SimpleSlider_Lib_Uri = "SimpleSlider.js"; + +var VLC_controller= null; + + +// theses image are in the subfolder 'images' of your VLCjs lib +var VLC_controller_icon_play = "player_play.png"; +var VLC_controller_icon_stop = "player_stop.png"; +var VLC_controller_icon_voldown = "moins.gif"; +var VLC_controller_icon_volup = "plus.gif"; +var VLC_controller_icon_pause = "player_pause.png"; +var VLC_controller_icon_sound = "sound.png"; +var VLC_controller_icon_soundoff = "sound_mute.png"; +var VLC_controller_icon_options = "options.png"; +var VLC_controller_icon_infos = "info.png"; +var VLC_controller_icon_fullscreen = "fullscreen.gif"; + +var VLC_status = new Array("standby", "ouverture", "buffering", "lecture", "pause", "stop", "erreur"); + +var VLC_controller_default_buffersize = "5"; +var VLC_controller_log_verbosity = -1; + + + +// function SimpleSliderLibReceived() { + // VLC_controller.slider = new Slider(VLC_controller.id+"_slider", VLC_controller.width, "10"); + // VLC_controller.slider.onNewPosition = VLC_controller.slider_position_changed; +// } + + + +function toolbar_icon(icon, alt, onclick, id) { + return ""; +} + +function changeImageSrc(imgID, newSrc) { + var tgt = document.getElementById(imgID); + cursrc = tgt.src.substring(tgt.src.length - newSrc.length); + if (cursrc != newSrc) tgt.src=newSrc; +} + +// HTML FUNCTIONS + +// function injectJS(uri) { + // var s = document.createElement('script'); + // s.src = uri; + // s.type = 'text/javascript'; + // document.body.appendChild(s); +// } + +function addHTMLtoObj(obj, html, position) { + if(self.Node&&self.Node.prototype){ + // mozilla + var range = document.createRange(); + range.selectNode(obj); + var htmlnode = range.createContextualFragment(html); + var parent = obj.parentNode; + + position = position.toLowerCase(); + if (position=="beforebegin") parent.insertBefore(htmlnode, obj); + else if(position=="afterend") parent.insertBefore(htmlnode, obj.nextSibling); + else if(position=="afterbegin") obj.insertBefore(htmlnode, obj.childNodes[0]); + else if(position=="beforeend") obj.appendChild(htmlnode); + } + else { + //ie + obj.insertAdjacentHTML(position, html); + } +} + +function SimpleSlider_received() { + //VLC_controller.target = new VLCobject(VLC_controller.id, VLC_controller.with, VLC_controller.height); + //alert(VLC_controller); + VLC_controller.libsReady(); +} + +function VLCcontrols(VLCobject, dodebug) { + this.id = VLCobject.getAttribute('id'); + this.idleimage = null; + this.isVideoVisible = true; + this.target = document.getElementById(this.id); + //this.updateTarget(); + this.root = "" + + this.options = new VLC_options(this); + //this.options.VLCcontrol = this; + + this.loaded = false; + this.onready = null; + this.libloader = new ExternalLibLoader(); + //this.libloader.addLib("VLCobject.js", VLCobject_received); + this.libloader.addLib("SimpleSlider.js", SimpleSlider_received); + this.libloader.LoadLibs(); + + //this.options.set("http-caching", parseInt(VLC_controller_default_buffersize) * 1000); +// this.options.set("udp-caching", parseInt(VLC_controller_default_buffersize) * 1000); + //this.options.set("http-reconnect", "true"); + + + VLC_controller = this; + + this.dodebug = false; + + this.width = VLCobject.getAttribute("width"); + //this.target.width; + this.height = VLCobject.getAttribute("height"); + if (dodebug) this.dodebug = dodebug; + + // detect lib path (dirty) + var sc = document.getElementsByTagName("SCRIPT"); + for (var i=0;i-1) { + this.root = sc[i].src.replace("VLCcontrols.js",""); + } + } + + // if(!this.target) { + // var errorinfo = "Plugin VLC non détécté ! --> telechargez le sur http://www.videolan.org/vlc/"; + // document.body.innerHTML = errorinfo + document.body.innerHTML; + //// return; + // } + + +} + +VLCcontrols.prototype.libsReady = function() { + //alert(1); + //alert(Slider); + + var bg_img = ''; + + addHTMLtoObj(this.target, bg_img, "beforebegin"); + + var toolbar = ""; + + toolbar += '
'; + toolbar += "
"; + toolbar += "
"; + toolbar += toolbar_icon(this.root + "images/" + VLC_controller_icon_play, "Play/Pause", "VLC_controller.btn_play_clicked()", this.id + "_btn_play"); + toolbar += toolbar_icon(this.root + "images/" + VLC_controller_icon_stop, "Stop", "VLC_controller.btn_stop_clicked()", this.id + "_btn_stop"); +// toolbar += toolbar_icon("/vlcjs/images/player_prev.png", "Prev", "", this.id + "_btn_prev"); + //toolbar += toolbar_icon("/vlcjs/images/player_next.png", "Next", "", this.id + "_btn_next"); + toolbar += toolbar_icon(this.root + "images/" + VLC_controller_icon_sound, "Volume", "VLC_controller.btn_mute_clicked()", this.id + "_btn_mute"); + toolbar += toolbar_icon(this.root + "images/" + VLC_controller_icon_voldown, "Volume down", "VLC_controller.btn_voldown_clicked()", this.id + "_btn_voldown"); + toolbar += "100%"; + + toolbar += toolbar_icon(this.root + "images/" + VLC_controller_icon_volup, "Volume up", "VLC_controller.btn_volup_clicked()", this.id + "_btn_volup"); + + toolbar += toolbar_icon(this.root + "images/" + VLC_controller_icon_fullscreen, "FullScreen", "VLC_controller.btn_fullscreen_clicked()", this.id + "_btn_fullscreen"); + + toolbar += ""; + + toolbar += '00:00/00:00'; + toolbar += ""; + toolbar += '  stopped'; + toolbar += ""; + toolbar += toolbar_icon(this.root + "images/" + VLC_controller_icon_options, "Options", "VLC_controller.btn_options_clicked()", this.id + "_btn_options"); + toolbar += toolbar_icon(this.root + "images/" + VLC_controller_icon_infos, "About", "VLC_controller.btn_infos_clicked()", this.id + "_btn_infos"); + toolbar += "
"; + toolbar += ''; + + toolbar += "
"; + toolbar += "
"; + + toolbar += '"; + + //this.target.insertAdjacentHTML("afterEnd", toolbar); + + addHTMLtoObj(this.target, toolbar, "afterEnd"); + + //alert(this.width); + this.slider = new Slider(this.id+"_slider", this.width, "10"); + this.slider.onNewPosition = this.slider_position_changed; + + + //this.slider = null; + + // trick to load external JS file + //injectJS(this.root + SimpleSlider_Lib_Uri); + + this.load(); + + setInterval("VLC_controller.updateStatus()", 1000 ); + + this.loaded = true; + + if (this.onready) this.onready(); + //this.debug("plugin loaded v." + this.target.versionInfo); +} + + +VLCcontrols.prototype.changeVolume = function(newVolume) { + // prends une valeur entre 0 et 100 + document.getElementById(this.id + "_vollabel").innerHTML = newVolume; +//var vlc_volume = parseInt(newVolume) + this.target.audio.volume = newVolume; + if (newVolume > 0) changeImageSrc(this.id + "_btn_mute", this.root + "images/" + VLC_controller_icon_sound); + else changeImageSrc(this.id + "_btn_mute", this.root + "images/" + VLC_controller_icon_soundoff); +} + +VLCcontrols.prototype.btn_voldown_clicked = function() { + if (!this.target.audio) return; + var curvolume = this.target.audio.volume; + curvolume -= 10; + if (curvolume <= 0) this.changeVolume(0); + else if (curvolume >= 200) this.changeVolume(200); + else this.changeVolume(curvolume); + +} + +VLCcontrols.prototype.btn_fullscreen_clicked = function() { + this.target.video.toggleFullscreen(); +// = true; +} + + +VLCcontrols.prototype.btn_volup_clicked = function() { + if (!this.target.audio) return; + var curvolume = this.target.audio.volume; + curvolume += 10; + if (curvolume <= 0) this.changeVolume(0); + else if (curvolume >= 200) this.changeVolume(200); + else this.changeVolume(curvolume); + +} + +VLCcontrols.prototype.setFreeplayerMode = function(checked) { +} + +VLCcontrols.prototype.updateTarget = function() { + + this.target = document.getElementById(this.id); + if (!document.all) { + + this.target.innerHTML += ''; + + this.target = document.getElementById(this.id + "_moz"); + + } + } + +VLCcontrols.prototype.setIdleImage = function(imgSrc) { + this.idleimage = imgSrc; + document.getElementById(this.id +"_idleimage").src = imgSrc; + this.hideVideo(); + +} + +VLCcontrols.prototype.hideVideo = function() { + if (!this.isVideoVisible) return; + if (!this.idleimage) return; + this.target.style.width=0; + this.target.style.height=0; + + var tgt = document.getElementById(this.id +"_idleimage"); + tgt.style.width = this.width; + tgt.style.height = this.height; + + this.isVideoVisible = false; +} + +VLCcontrols.prototype.showVideo = function() { + if (this.isVideoVisible) return; + var tgt = document.getElementById(this.id +"_idleimage"); + tgt.style.width = 0; + tgt.style.height = 0; + this.target.style.width=this.width; + this.target.style.height=this.height; + this.isVideoVisible = true; +} + +VLCcontrols.prototype.setdebug = function(checked) { + this.dodebug = checked + //if (this.target && this.target.log) this.target.log.verbosity = VLC_controller_log_verbosity; + this.debug("debug changed"); + +} + +VLCcontrols.prototype.debug = function(astr) { + var tgt = document.getElementById("VLC_controller_debug_div"); + // alert("debug "+astr); + if (tgt && this.dodebug) { + document.getElementById("VLC_controller_debug_div").style.display="block"; + document.getElementById("VLC_controller_debug").value+=astr + "\n"; + document.getElementById("VLC_controller_debug").scrollTop=document.getElementById("VLC_controller_debug").scrollHeight; + + } + else { + if (tgt) tgt.style.display="none"; + } +} + + + +VLCcontrols.prototype.btn_options_clicked = function() { + var tgt = document.getElementById("VLC_controller_options"); + if (tgt.style.display=="block") { + tgt.style.display="none"; + } + else { + tgt.style.display="block"; + } +} + + +VLCcontrols.prototype.btn_infos_clicked = function() { + var tgt = document.getElementById("VLC_controller_infos"); + if (tgt.style.display=="block") { + tgt.style.display="none"; + } + else { + tgt.style.display="block"; + } +} + +VLCcontrols.prototype.setBufferSize = function(seconds) { + document.getElementById("VLC_controller_options_http-caching").value = seconds; + this.options.set("http-caching", parseInt(seconds) * 1000); + this.options.set("udp-caching", parseInt(seconds) * 1000); +} +VLCcontrols.prototype.saveOptions = function() { + this.setBufferSize(document.getElementById("VLC_controller_options_http-caching").value); + + document.getElementById("VLC_controller_options").style.display="none"; + if (this.target.playlist.isPlaying == true && this.target.input) { + var sure = confirm("Voulez vous relancer votre flux avec ces parametres ?"); + if (sure) this.restart(); + } + this.debug("Options saved"); + //TODO : cookie ? +} + +function formatTime(timeVal) +{ + var timeHour = Math.round(timeVal / 1000); + var timeSec = timeHour % 60; + if( timeSec < 10 ) + timeSec = '0'+timeSec; + timeHour = (timeHour - timeSec)/60; + var timeMin = timeHour % 60; + if( timeMin < 10 ) + timeMin = '0'+timeMin; + timeHour = (timeHour - timeMin)/60; + if( timeHour > 0 ) + return timeHour+":"+timeMin+":"+timeSec; + else + return timeMin+":"+timeSec; +}; + +function format_time2( s ) +{ + var hours = Math.floor(s/3600); + var minutes = Math.floor((s/60)%60); + var seconds = Math.floor(s%60); + if( hours < 10 ) hours = "0"+hours; + if( minutes < 10 ) minutes = "0"+minutes; + if( seconds < 10 ) seconds = "0"+seconds; + return hours+":"+minutes+":"+seconds; +} + + + +var inputTrackerIgnoreChange = false; +var VLC_controller_paused = false; + +VLCcontrols.prototype.btn_stop_clicked = function() { + if (!this.check_playlist()) { + //alert("Aucune playlist !"); + // return; + } + try { + this.target.playlist.stop(); + VLC_controller_paused = false; + changeImageSrc(this.id + "_btn_play", this.root + "images/" + VLC_controller_icon_play ); + //document.getElementById(this.id + "_btn_play").src=VLC_controller_icon_play; + this.setSliderPos(0); + //this.slider.setPosition(0); + this.hideVideo(); + + } + catch(e) {//do noting + } + if (VLC_controller.onStopCallback) VLC_controller.onStopCallback(); +} + +var lastvolume = 0; +VLCcontrols.prototype.btn_mute_clicked = function() { + + var cursrc = document.getElementById(this.id + "_btn_mute").src; + cursrc = cursrc.substring(cursrc.length - VLC_controller_icon_sound.length); + if (cursrc==this.root + "images/" + VLC_controller_icon_sound) { + lastvolume = this.target.audio.volume; + this.changeVolume(0); + } + else { + this.changeVolume(lastvolume); + } +} + + +VLCcontrols.prototype.check_playlist = function() { + return (this.target.playlist && this.target.playlist.items.count > 0); +} + +VLCcontrols.prototype.btn_play_clicked = function() { + this.debug("btn_play_clicked"); + var cursrc = document.getElementById(this.id + "_btn_play").src; + cursrc = cursrc.substring(cursrc.length - (this.root + "images/" + VLC_controller_icon_play).length); + + if (cursrc==this.root + "images/" + VLC_controller_icon_play) { + + // start + if (VLC_controller_paused) { + this.target.playlist.togglePause(); + } + else { + VLC_controller_paused = false; + if (!this.check_playlist()) { + alert("nothing in playlist !"); + return; + } + else { + + this.target.playlist.play(); + } + } + changeImageSrc(this.id + "_btn_play", this.root + "images/" + VLC_controller_icon_pause); + } + else { + changeImageSrc(this.id + "_btn_play", this.root + "images/" + VLC_controller_icon_play); + + // pause + this.target.playlist.togglePause(); + VLC_controller_paused = true; + } +} + + +VLCcontrols.prototype.slider_position_changed = function() { + //this.debug("slider_position_changed"); + if (VLC_controller.target && VLC_controller.target.input ) { + + if (parseInt(VLC_controller.target.input.length) == 0) { + // flux non seekable + if (VLC_controller.onSliderChangedCallback) { + VLC_controller.onSliderChangedCallback(this.position); + } + else { + VLC_controller.setSliderPos(this.position); + } + return; + } + else { + // flux seekable + try {VLC_controller.target.input.position = this.position;} + catch(e) {} + } + } +} + +var VLC_controller_last_status = null; + +VLCcontrols.prototype.updateStatusFromExternalData = function() { + this.debug("default updateStatusFromExternalData"); +} + + +VLCcontrols.prototype.setSliderPos = function(pos) { + //this.debug("setSliderPos"); + if (this.slider) this.slider.setPosition(pos); + +} + +VLCcontrols.prototype.updateStatus = function() { + // this.debug("default updateStatus "+ this.target.input.hasVout); + + var play_status = document.getElementById("play_status"); + + try { + if (this.target.playlist && (this.target.playlist.isPlaying == true) && this.target.input) + { + var h = formatTime(this.target.input.time); + if (parseInt(h) < 1000) { + changeImageSrc(this.id + "_btn_play", this.root + "images/" + VLC_controller_icon_pause); + if (parseInt(this.target.input.length) == 0) { + this.updateStatusFromExternalData(); + } + else { + document.getElementById("infosPosition").innerHTML = h+"/"+formatTime(this.target.input.length); + VLC_controller.position = this.target.input.position; + this.setSliderPos(this.target.input.position); + } + } + if (this.target.input && this.target.input.hasVout) this.showVideo(); + else this.hideVideo(); + + } + else + { + document.getElementById("infosPosition").innerHTML = "00:00/00:00"; + changeImageSrc(this.id + "_btn_play", this.root + "images/" + VLC_controller_icon_play); + this.hideVideo(); + this.setSliderPos(0); + } + + } + catch(e) {} + + this.updateStatusText(); + this.updateVlcMessages(); + } + + +VLCcontrols.prototype.updateVlcMessages = function() { + //this.debug("updateVlcMessages"); + //return; + if (!this.target.log) return; + + if (!this.dodebug) { + if (this.target.log) this.target.log.messages.clear(); + return; + } + + + + if (!this.target.log) return + var msgs=this.target.log.messages; + + var iter = msgs.iterator(); + while (iter.hasNext) { + console.log(1); + var msg = iter.next(); + if (msg) { + var contents = msg.message; + if (msg.type!="private" && !(contents.substring(0,19)=="backward_pts != dts") && !(contents.substring(0,28)=="backward_pts != standard_pts") && !(contents.substring(0,20)=="late picture skipped") && !(contents.substring(0,19)=="PTS is out of range")) { + this.debug("VLC: " + msg.name + " " + msg.type + " : " + contents); + } + } + } + if (this.target.log) this.target.log.messages.clear(); +} + +VLCcontrols.prototype.updateStatusText = function() { + + var status = VLC_status[0]; + try { + if (this.target.input) status = VLC_status[this.target.input.state]; + } + catch (e){ + // + } + + + + + if (status) { + document.getElementById("infosStatus").innerHTML = status; + if (VLC_controller_last_status != status) this.debug("status : " + status); + VLC_controller_last_status = status; + } + if (VLC_controller.onStatusChangedCallback) VLC_controller.onStatusChangedCallback(status); +} + +VLCcontrols.prototype.load = function() { + this.target.width = this.width ; + this.target.style.width = this.width ; + this.target.height = this.height; + this.target.style.height = this.height ; + this.updateStatusText(); +} + +VLCcontrols.prototype.stop = function() { + this.debug("stop"); + this.target.playlist.stop(); +} + +VLCcontrols.prototype.restart = function() { + this.debug("restart"); + if (this.target.playlist.isPlaying) this.target.playlist.stop(); + this.target.playlist.play(); +} + + + +VLCcontrols.prototype.waitForPlaylistToEmpty = function() { + this.debug("waitForPlaylistToEmpty"); + + var options = this.options.format_for_vlc(); + this.debug("addplaylist: " +uri_to_play); + this.debug("options passed: " +options); + var id = this.target.playlist.add(uri_to_play, uri_to_play, options); + this.target.playlist.playItem(id); + +} + + +var uri_to_play = ""; +VLCcontrols.prototype.doPlay = function(uri) { + // INTERNAL ONLY + if (this.target.audio) this.target.audio.volume = parseInt(document.getElementById(this.id + "_vollabel").innerHTML); + try {this.target.playlist.stop();} catch(e) {} + uri_to_play = uri; + //this.waitForPlaylistToEmpty(); + //var options = new Array(); + var options = this.options.format_for_vlc(); + var id = this.target.playlist.add(uri_to_play, uri_to_play, options); + this.target.playlist.playItem(id); +} + +VLCcontrols.prototype.play = function(uri) { + //if (this.target.log) this.target.log.verbosity = VLC_controller_log_verbosity; + this.debug("play " + uri); + try {this.target.playlist.stop();} catch(e) {} + setTimeout("VLC_controller.doPlay('" + uri + "')", 250); +} + + + + +function VLC_options(VLCcontroller) { + // better options management + this.VLCcontroller = VLCcontroller; + this.options = new Array(); + + this.set = function(name, value) { + if (this.VLCcontroller) this.VLCcontroller.debug("set option "+name+"="+value); + //.debug("io"); + this.options[name] = value || null; + } + + this.del = function(name) { + delete this.options[name]; + + } + + this.get = function(name) { + return this.options[name]; + } + + this.clear = function() { + this.options = new Array(); + } + + this.format_for_vlc = function() { + var tmp_array = new Array(); + var debug_str = ""; + var idx = 0; + for (var i in this.options) + { + var option_str = ":" + i; + if (this.options[i]) option_str += "=" + this.options[i]; + tmp_array[idx] = option_str; + debug_str += option_str + " "; + idx += 1; + } + if (this.VLCcontroller) this.VLCcontroller.debug(debug_str); + return debug_str; + } +} + + + + diff --git a/share/test/VLCcontrols/VLCobject.js b/share/test/VLCcontrols/VLCobject.js new file mode 100644 index 0000000..02193dc --- /dev/null +++ b/share/test/VLCcontrols/VLCobject.js @@ -0,0 +1,215 @@ +/** + * VLCObject v1.0.0: VLC Plugin detection and embed - http://code.revolunet.com/VLCobject/ + * + * Based on VLCObject by Geoff Stearns + * VLCObject is (c) 2008 Julien Bouquillon - revolunet and is released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + + */ + +if(typeof revolunet == "undefined") var revolunet = {}; +if(typeof revolunet.util == "undefined") revolunet.util = {}; +if(typeof revolunet.VLCObjectUtil == "undefined") revolunet.VLCObjectUtil = {}; +revolunet.VLCObject = function(id, w, h, ver) { + if (!document.getElementById) { return; } + this.params = {}; + this.variables = {}; + this.attributes = []; + if(id) { this.setAttribute('id', id); } + if(w) { this.setAttribute('width', w); } + if(h) { this.setAttribute('height', h); } + if(ver) { this.setAttribute('version', new revolunet.PlayerVersion(ver.toString().split("."))); } + this.installedVer = revolunet.VLCObjectUtil.getPlayerVersion(); + if (!window.opera && document.all ) { + if (!revolunet.unloadSet) { + revolunet.VLCObjectUtil.prepUnload = function() { + __vlc_unloadHandler = function(){}; + __vlc_savedUnloadHandler = function(){}; + window.attachEvent("onunload", revolunet.VLCObjectUtil.cleanupVLCs); + } + window.attachEvent("onbeforeunload", revolunet.VLCObjectUtil.prepUnload); + revolunet.unloadSet = true; + } + } +} +revolunet.VLCObject.prototype = { + setAttribute: function(name, value){ + this.attributes[name] = value; + }, + getAttribute: function(name){ + return this.attributes[name] || ""; + }, + addParam: function(name, value){ + this.params[name] = value; + }, + getParams: function(){ + return this.params; + }, + addVariable: function(name, value){ + this.variables[name] = value; + }, + getVariable: function(name){ + return this.variables[name] || ""; + }, + getVariables: function(){ + return this.variables; + }, + getVariablePairs: function(){ + var variablePairs = []; + var key; + var variables = this.getVariables(); + for(key in variables){ + variablePairs[variablePairs.length] = key +"="+ variables[key]; + } + return variablePairs; + }, + getVLCHTML: function() { + var vlcNode = ""; + if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture + + vlcNode = ''; + var params = this.getParams(); + for(var key in params) { + vlcNode += ''; + } + vlcNode += ""; + } + return vlcNode; + }, + write: function(elementId){ + + if(this.installedVer.versionIsValid(this.getAttribute('version'))){ + var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId; + n.innerHTML = this.getVLCHTML(); + //trick for IE activex + if (document.all) { + var vlc = n.firstChild; + vlc.style.width = this.attributes["width"]+"px"; + vlc.style.height= this.attributes["height"]+"px"; + } + + return true; + }else{ + var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId; + n.innerHTML = "
Your VLC plugin has not been detected !

please go to http://www.videolan.org to download your plugin.
"; + + } + return false; + }, + ///////////////////////////////////////////////////////new methods for hide/show tag object/embed////////////////////////////////////////////////////////////////////// + hideVLC: function(id){ + var id = this.getAttribute('id'); + if(document.getElementById){ + document.getElementById(id).style.visibility = 'hidden'; + } + }, + showVLC: function(id){ + var id = this.getAttribute('id'); + if(document.getElementById){ + document.getElementById(id).style.visibility = 'visible'; + } + } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + +} + +/* ---- detection functions ---- */ +revolunet.VLCObjectUtil.getPlayerVersion = function(){ + var PlayerVersion = new revolunet.PlayerVersion([0,0,0]); + if(navigator.plugins && navigator.mimeTypes.length){ + var x = navigator.plugins["VLC Multimedia Plug-in"]; + if(!x) { + // test with "old" plugin name + x = navigator.plugins["VLC Multimedia Plugin"]; + } + if(!x) { + // 0.8.6a at least + x = navigator.plugins["VLC multimedia plugin"]; + } + + if(x && x.description) { + PlayerVersion = x.description.substring(0, x.description.indexOf(",")); + PlayerVersion = PlayerVersion.replace("Version ", ""); + PlayerVersion = new revolunet.PlayerVersion(PlayerVersion.split(".")); + } + + + } else { // Win IE + + try{ + var axo = new ActiveXObject("VideoLAN.VLCPlugin.2"); + PlayerVersion = new revolunet.PlayerVersion([0,8,6]); + }catch(e){ + try { + var axo = new ActiveXObject("VideoLAN.VLCPlugin.1"); + PlayerVersion = new revolunet.PlayerVersion([0,8,5]); + } catch(e) { + + } + + } + if (axo != null) { + //PlayerVersion = axo.VersionInfo; + } + } + + return PlayerVersion; +} +revolunet.PlayerVersion = function(arrVersion){ + this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0; + this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0; + this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0; + } +revolunet.PlayerVersion.prototype.versionIsValid = function(fv){ + if(this.major < fv.major) return false; + if(this.major > fv.major) return true; + if(this.minor < fv.minor) return false; + if(this.minor > fv.minor) return true; + if(this.rev < fv.rev) return false; + return true; +} +/* ---- get value of query string param ---- */ +revolunet.util = { + getRequestParameter: function(param) { + var q = document.location.search || document.location.hash; + if (param == null) { return q; } + if(q) { + var pairs = q.substring(1).split("&"); + for (var i=0; i < pairs.length; i++) { + if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) { + return pairs[i].substring((pairs[i].indexOf("=")+1)); + } + } + } + return ""; + } +} + +revolunet.VLCObjectUtil.cleanupVLCs = function() { + var objects = document.getElementsByTagName("OBJECT"); + for (var i = objects.length - 1; i >= 0; i--) { + objects[i].style.display = 'none'; + for (var x in objects[i]) { + if (typeof objects[i][x] == 'function') { + objects[i][x] = function(){}; + } + } + } +} +/* add document.getElementById if needed (mobile IE < 5) */ +if (!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; }} + +/* add some aliases for ease of use/backwards compatibility */ +var getQueryParamValue = revolunet.util.getRequestParameter; +var VLCObject = revolunet.VLCObject; diff --git a/share/test/VLCcontrols/advanced.html b/share/test/VLCcontrols/advanced.html new file mode 100644 index 0000000..c45776d --- /dev/null +++ b/share/test/VLCcontrols/advanced.html @@ -0,0 +1,306 @@ + + + +revolunet VLC javascript library demo + + + + + + + + + + + +
+ +revolunet VLC controls javascript library demo - details + +

+This is an improved version than can use local or external subtitles, transcoding and streaming right from your browser + + + + + + +

+ + + + +
+
replaced by VLC controller
+ +
+ Misc options

+ VLC ActiveX/Mozilla version : not installed + + + + + + + + + + + + + + + + + + + + + + + + + + +
file to play (file or uri) : + +
subtitles (file or uri) : + +
transcoding : + + + + + + + + + + + +
file output : + + mux : + + + +
stream output : + + + dst : + + + +
more vlc options :
+ +
+

+ + +
+

+resulting command line : + + +

 

+any comments welcome on : contact@revolunet.com + +
+ + diff --git a/share/test/VLCcontrols/example.html b/share/test/VLCcontrols/example.html new file mode 100644 index 0000000..772b21b --- /dev/null +++ b/share/test/VLCcontrols/example.html @@ -0,0 +1,105 @@ + + + +revolunet VLC javascript library demo + + + + + + + + + + + +
+ +revolunet VLC controls javascript library demo - details + + + +

+ +
replaced by VLC controller
+ + +

 

+ + 
+ 
+ 
+ 
+ + + + + +

try others videos from http://streams.videolan.org + + + +

 

+any comments welcome on : contact@revolunet.com + +
+ + \ No newline at end of file diff --git a/share/test/VLCcontrols/example2.html b/share/test/VLCcontrols/example2.html new file mode 100644 index 0000000..8167527 --- /dev/null +++ b/share/test/VLCcontrols/example2.html @@ -0,0 +1,84 @@ + + + +revolunet VLC javascript library demo + + + + + + + + + + + +
+ +revolunet VLC controls javascript library demo - details + + + +

+ +
replaced by VLC control
+ + +

 

+try any uri or local file :

+  +

 

+any comments welcome on : contact@revolunet.com + +
+ + \ No newline at end of file diff --git a/share/test/VLCcontrols/example3.html b/share/test/VLCcontrols/example3.html new file mode 100644 index 0000000..bd55126 --- /dev/null +++ b/share/test/VLCcontrols/example3.html @@ -0,0 +1,102 @@ + + + +revolunet VLC javascript library demo + + + + + + + + + + + +
+ +revolunet VLC controls javascript library demo - details + + + +

+ +
replaced by VLC controller
+ + +

 

+try any uri or local file :

+  +

 

+any comments welcome on : contact@revolunet.com + +
+ + \ No newline at end of file diff --git a/share/test/VLCcontrols/example4.html b/share/test/VLCcontrols/example4.html new file mode 100644 index 0000000..624c19f --- /dev/null +++ b/share/test/VLCcontrols/example4.html @@ -0,0 +1,104 @@ + + + +revolunet VLC javascript library demo + + + + + + + + + + + +
+ +revolunet VLC controls javascript library demo - details + + + +

+ +
replaced by VLC controller
+ + +

 

+try any uri or local file :

+  +

 

+any comments welcome on : contact@revolunet.com + +
+ + \ No newline at end of file diff --git a/share/test/VLCcontrols/example5.html b/share/test/VLCcontrols/example5.html new file mode 100644 index 0000000..e244602 --- /dev/null +++ b/share/test/VLCcontrols/example5.html @@ -0,0 +1,109 @@ + + + +revolunet VLC javascript library demo + + + + + + + + + + + +
+ +revolunet VLC controls javascript library demo - details + + + +

+ +
replaced by VLC controller
+ + +

 

+try any uri or local file :

+  +

 

+any comments welcome on : contact@revolunet.com + +
+ + diff --git a/share/test/VLCcontrols/idle2.gif b/share/test/VLCcontrols/idle2.gif new file mode 100644 index 0000000000000000000000000000000000000000..782d6cce7ef394225794207785778ec94f69b815 GIT binary patch literal 17987 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 K^wqaHAOJh^0IG@r literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/fullscreen.gif b/share/test/VLCcontrols/images/fullscreen.gif new file mode 100644 index 0000000000000000000000000000000000000000..02c60346f62063a8f69dd3a9f900d81ad2dad03a GIT binary patch literal 97 zcmZ?wbhEHb6krfwSjfZx1XnJc_zwn(KUo;L7?>DzK%yXd1}38^{gnsa?roZ5(r_bf tA6taKp;%g`s(M4H#M+$a`(9>Ntyt^z=b literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/fullscreen2.gif b/share/test/VLCcontrols/images/fullscreen2.gif new file mode 100644 index 0000000000000000000000000000000000000000..9d7b9ff1127fc2acfb6c3d5a6e61d10b57547837 GIT binary patch literal 1058 zcmX|AVN6?P6g@44720+6sjOMdV1crVwreA)8>`CJvf)yykFr;!>0TXb?w3a8|>#VlkBvth$Say{aHi)uV#PX3gPei`))Q)c#-Yr*xu z)*UwMAn8ahB>b1%)@Dm|I?{O59K7mrv{^~;k%cB-RPF^<0fOy90$~8y&*M4dTv*Zb zIB*7V0cya>pB%YgPoBm{m!KQtaegdMDiZ@ju9pE`EjFh#vpV!5*RbLGcucR`4G2&l z2I%~~ld8?-DTdH703(JJSQBbEJwxbV^MUeCHou1xZ{wy~qhs}-M9a6Jg3zYGclZnl z0;%yQ;OvE-mnl$gVW;wurQlkDo})yl9?OUm(6My}u(3`woU5D)t|{m_81^J=G}Hu# zgOypv+a)oMPicHWU>JD!G&V1QQG+4D;ENX2QW}*OP7-J9a0TF3l2z2PThnuttk*b{ zzj34_+QC%)Kg;dne%K>onqDOcPUtnds9X8IT5V=2?ba3g-<3RW-*6U=*%iBwapKND z0`)2ays=Fhj55y}RwM<;X!y5lpr-{&Mx$mxp1m#dJh_?~A&3-E{tDQi+F7b?K<=T78ly<(bs@h?D|K=A|-6^}YB^;1~#MqQm9uM9HI4>vQvW0xuW8 z6!58z-!h6Gu2%Tpgzr>=95okDrMz|LWo2^9;@6+-ac$pG`%qKdS1=@#R#!H~CcA~A zf~HV;@_<0HT`n5cddKeAz7aKtj)!InB*i7F#n3wgCgDP;B8i0XO$w!2kdN literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/idle2.gif b/share/test/VLCcontrols/images/idle2.gif new file mode 100644 index 0000000000000000000000000000000000000000..782d6cce7ef394225794207785778ec94f69b815 GIT binary patch literal 17987 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 K^wqaHAOJh^0IG@r literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/increase_bg.gif b/share/test/VLCcontrols/images/increase_bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..48710c9ea3388d3da57e388319630f82c56ff270 GIT binary patch literal 94 zcmZ?wbh9u|OkogZ=wM*DeED)iLxT$zj)4;Tiu)Q?fK2$_Q+$} yv(9C&PHlU~ZGF(^`nTTazs`OC$IrvnekAryhmY3uGs`}6_IfS9lC_nA!5RQfcq}6T literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/increase_knob.gif b/share/test/VLCcontrols/images/increase_knob.gif new file mode 100644 index 0000000000000000000000000000000000000000..95780e7a09b839f27fc7eb1f3f7136c0b65564ef GIT binary patch literal 80 zcmZ?wbh9u|i}5{AaMpJ%{lo3%x@L06;Jfl$lrV8 j+}hOnKN=Q?PnvRThUTtAy0;4_HaxF9@Vzd8fx#L8VPPOH literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/info.png b/share/test/VLCcontrols/images/info.png new file mode 100644 index 0000000000000000000000000000000000000000..90572b97e2f783528ea3baa26588674513ecba92 GIT binary patch literal 896 zcmV-`1AqL9P)SL5r zZB-d+qV-(RB5{$5idWK*AVKWfSXfwiY-}tf#71mL2n$IQWg%!xL>siG)FVL?+M3qX zOxw}dbmq>T`J9;>DL47@=l}2d&v(A_eSe0C;QucPF(+XrG+0Vj`XoavWJ&~@t^Mvp=;2G!m*#9Iy+u;x7}+(sC~epJISip z3^g@1({wrOD~GmrU}YQi_qI2nYH26 zvnPkP=a!C*0b>zh(&VK$ux&Bmo(+5&1OmT-nHn(PvuabjZ}5W^>inW4O`22HaAMWU zIm?E_z%PP^NHWX_aQ}l5oUqSRXZ{f2q6HOo=Pp3YrA1kD)x7e(2PJNUEK1IxG?Qy# z4)8Sy^bM0_oQ~7CRMS+h`9;Mm)CF5=G&N^Yv7T4r4l)y1XM*)wjIsit)&s1V2Q<9} zo_?gq%*V}gQlpCe5h(xA2YYm6ib0xJsbN!vId znBe8LZeTx6-N}g1%!!8=uOcxz1jE>x1}f#d4(lzZRmc%u`Ca66P^4v2p26|Pkvq-Q=S*KT3}bq*%W4m2-|qfVKPGaM;Af1_jDE&*#`X`idEccQv^wwa zm5daD*X#Y~dAK~v)?>$)@7`mqu2@_=OH&=a!I6IB literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/moins.gif b/share/test/VLCcontrols/images/moins.gif new file mode 100644 index 0000000000000000000000000000000000000000..faa57007a5f97d9df2e43407bef2805fff35ea50 GIT binary patch literal 97 zcmZ?wbhEHb?Nap zsfWTcP#+@dMR1dd9u}n72a9@&!iNZIX2qb7hstuMJF{7b8Mx>2zrSupr00)JxbGkZDL3yjTH22TAs{+FioS^%N;GJHTi2Z?Wo? za1}Jrlggow<`E>$1Ex>g<H#1c;v#YNum*s&e`s@Tx}C{{Ijd1*z{ yIse&?Nmi{sIOQ)p-b7XNrL?*KV)$Bh!`%aKu0?mVyS4x893BpHHXLX|-B-iOK6Q?E=rGMeAvp zbi!~gJZXi|CV1Wj4#i6MS(tRd&^4I42aokISPLT!Fm8j6BJfnhiyj!Pfhi}9w!niL z7}h|*0_`WjRRwk#JZgdg75HvIzzprjpsy0{h+v`%{2Calho@~|k%3bQePu9a1TzDU zGO!kanh$kp;3&bv|GSLg1_$C%Q7H>TTEZ)(g)JJIKTkzGLdscRdJsX#?$vVG!(_6c z&K`=Wv>XxD#{TP|U_*49ok}rN6sfLSD*k{V1Zi>TYeW=Vq>ZySnoXhQjll}Z{1GXm zT@&&nrCAIqa|H1ZHg;CjZcG(rst9L1#GnqDpr*_%1mSdJM1_0=va!J*@)z4IWpH}% z(%&B=*w3;_Y539t-kH723z+9zl}QRo*4#TK2C>zmlUE2?pTs`Sn~(J?m~0gb1@fBr z=M-vgUb-@-lm;kmnmW%dQI&EwbnlFjWMn)fhq>Iu%oJ{Fu{t$7Hj6LV#ZPr-6$#}n zf?|!-kPjgQ87~{O_?%n%A8qq=FFS3WZ9B6tJbVpw`R+xEnBv2*|TfUnR92ZT)J}Q+Lb%E z?%cU|=gFfdPo6z_^Xko;cW=IY`ts%5mp{M${Qv(SZ09I38UlkN1QdU=FfuUwXV3w; z29zflI4&~$@BH!MVDrIdcKa5A7mY5R?E=b^elRRz?iA!Ro_3+*A~U;?f@{tR1*MiY z9tr)bJsyjknwTZ@WE>J2Q``9@+TU>JJ>1UD%n`D}z`>!VN#TYN3**5CMs86q zi5=b(nArt_G>_~}Xgt8c733_z=Vhw&W+pD>dMOl TtuCgg&2n})zp7_sWUvMR9kz`q literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/play2.gif b/share/test/VLCcontrols/images/play2.gif new file mode 100644 index 0000000000000000000000000000000000000000..4a88f3612c7b6de7d46f32b3166ded64e348451b GIT binary patch literal 1003 zcmZ?wbhEHb6krfw_|55M#6^&jI4qx#j`SI7Pqvq3o1EeBq+9c^2=&; zojCBBv1KWrL5IY{#>2k+;yel#4q-Yh6J@L#c2qhx+-77H3K96Zkhxtz!68N?VL?L^ zr~IcTj)`F|aXc)1CwLmo^E>$DTnyehD7K^=?$O;oMXPCn<2fapC#4=6w`6w7|Epba N`q%5TR~Q)?tO0_WkSYKG literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/player_next.png b/share/test/VLCcontrols/images/player_next.png new file mode 100644 index 0000000000000000000000000000000000000000..76c3ebc73b95f1ef6b3c5ed7cc0a099e9b78b642 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QK$!8;-MT+OLG}_)Usv`UJQ5sw*4KWED+7hxJzX3_EKVoy zDSF7ltlH4o=wvX5=YrveAN_isJrcqzr8ue@L!39XF>1CYm_9hwD%^9VBhj=$QK$!8;-MT+OLG}_)Usv`UJi>g2Ow%>8K&Babx;TbdoKD_T z^V5h~wV|`o$>0Oqh6UU&UcLI)zEMAZ-QK$!8;-MT+OLG}_)Usv`UJi>f>ia$g}Ujc=}JzX3_EKVoy zDSF7ltlH4o=;RQ~T*9OC@3ln4pXE1Lmq@f+=RP9g5+d=yxMPXKku-tGjSV>*k!&$L z3z`Ivr74Chd$J{5_L#!>!{m`^gG8^v0gDGa1sQfRC>7@Xeg6Vz1%s!npUXO@geCwC C+(eWB literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/player_prev.png b/share/test/VLCcontrols/images/player_prev.png new file mode 100644 index 0000000000000000000000000000000000000000..baa7b185a4590b821578ceca94f97000aa648a9c GIT binary patch literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QK$!8;-MT+OLG}_)Usv`UJQ5swGQ}Skc>sl+JzX3_EKVoy zDSF7ltlH4o=wvX5=YrveAN_isJraK60@(_}sC literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/player_stop.png b/share/test/VLCcontrols/images/player_stop.png new file mode 100644 index 0000000000000000000000000000000000000000..a25c33d86f4588e72f021fc79d381e9262d4125d GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QK$!8;-MT+OLG}_)Usv`UJi>gY%q`CIrvQZvJY5_^EKVoy zDSF7ltlH4o=w$GLZNmcY7ZMSFjxT?Bs#Un>unvzK?}8@A9%p-FMuyHVj-MypIJ$s( O89ZJ6T-G@yGywpqBs0(e literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/plus.gif b/share/test/VLCcontrols/images/plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..ff407315f31649837624afcefb3a0890d381071c GIT binary patch literal 100 zcmZ?wbhEHbf^Hf4=;2aARVy1^~4MA5H)O literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/plus2.gif b/share/test/VLCcontrols/images/plus2.gif new file mode 100644 index 0000000000000000000000000000000000000000..842ac9f526b8e2aeb8f818065106ca659ccb712d GIT binary patch literal 997 zcmYL`Ur1A77{;HC9d}C0_4UUUL4{2XJWI`NDa87tX$eJiu|jBzqvQ%4)y|}gbjB#K zLPmeE3@QkXyjax5iV@RRtkAMrQ8KE9d7P|>8dkP;`p%~Ios09n?|I(m`|+HuHC2Z7 z77aA`3Gn-Q-vi&sr;*UhQ2cv*;AtQ+84nMK0*?c{mG|`rV&k#+L?ZMil$cC}hr@gW zAL#dujE=-7;sehH4p|QcsOD=dF_8#UO)?RFAFi}y+mq+HV5h_GfC(r9+ z$j56_b~C8ZrW)+Vw=sao&B}#9JHP>sW`$`KQIeX^gF%NV2O^|50DZc!8GvYd*CQ#r zB~(a&1he$ZC5@Fygx2_R41b*na-cld2$Jrp8co1?pp)JO#k8;dW&!1N?*Vf4D50&n zQ0o#;l#$i)CvG=(*)gbx9o~>qep+8p1c!i@ za$K5<#H1~s@q{=8-51$ZKs}_qnO%x1^QMlEg%|~q|064AywY7M=4z>am>*mBXUt7V zgw7`&VyBJd@1Ss>PA*-?Mcv)vdhqZ71Vmt_92W(=1(MeiPg3yw!>Oyop z?TLq>1^<2YhMOXA6yV4J>J>Q5nCqNkeI;qGh6O8r zt5WDRYYIUhHQSGz(qM3S=FAuwzgx{5#@GfiLPYGk4>&~IZHJ~8neHW<{4b@^rNz7jUv$wScI==6Jm#Jd;I_sU- v2Y+jBmdA9VPnF@kO}qyqiXC&DYgQY5>)TYBio#P>SItMETBKoF78U;h0`NeH literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/slider_bg.gif b/share/test/VLCcontrols/images/slider_bg.gif new file mode 100644 index 0000000000000000000000000000000000000000..a3781b9a1f5a3f580b7536ee996a5a4a01b38c17 GIT binary patch literal 60 zcmZ?wbhEHbWMvRxn8?6z@#4ky_V)k(|1&T!DE?#tk_-$wAOa-sz{ESHf9386=N8#4 Lyw>T<$Y2csC+QNV literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/sound.png b/share/test/VLCcontrols/images/sound.png new file mode 100644 index 0000000000000000000000000000000000000000..d506518a665e42ebbd22efcad94cfe1f792c9eb1 GIT binary patch literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QK$!8;-MT+OLG}_)Usv`UJi>g2eDmh1=>mnGdb&7O-|PC0^R{ic zR{i8?^7Dq7{?QQ(N=|i;Y*wzjZnmt@qkV_$RfAn}pPuR-S-_B(W)j=KM}wcSWUJ4$ xsMK#iS7^;CUa_icU!0oYLI#W7ZokUs+N+0`*<7quJO=bIgQu&X%Q~loCIGQTj5q)Q literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/sound_mute.png b/share/test/VLCcontrols/images/sound_mute.png new file mode 100644 index 0000000000000000000000000000000000000000..5a6e974f8e91717adb8af59a804115ae55a02a99 GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QK$!8;-MT+OLG}_)Usv`UJi>g2YOA&Tt^j|NN~};xs)vb0rv*7VHzB@%;05K?^rW!3F`RG;PC`mzFWH zGqWij`XX_0?m6ubUXETjr#CmQN|%1HtaIn8hwsbR9N3wD_k1dw`}fVZtgH6TJo0Lb zzyQmLusGj`GxsmHj*a@w;1&LzGi2(gW1MW62QMezxjXe()2d0jb7fqdAH04! zHJQbQ<@)W~=?QU5q}~*#r3s(>YiN8#;^KGPT&;qDy(+7`{2W}?i`M*_^Pll)cy-*X T?)MVFKw$86^>bP0l+XkK8;qGb literal 0 HcmV?d00001 diff --git a/share/test/VLCcontrols/images/stop2.gif b/share/test/VLCcontrols/images/stop2.gif new file mode 100644 index 0000000000000000000000000000000000000000..15eee9c82cbd809a691553f384fd186173e865fd GIT binary patch literal 994 zcmZ?wbhEHb6krfw_|5dGiT17xpM8wom+SA+`IGS(UT|7 zp1gVW=FPh|Up{^L^6kr?Uw{7p{|~lmlo$t8UDBa zc(Aa!y_rL>O<>2u!|nVE3U)mn1o~hFvzzeBv@D5;ivu-RF}u tk$Cf9!_vn``FUljMJ1_4rm-IHfQnvux;TbZ z%$YOsZf}bLPfIMf?he+hnPM4@Vt1JMJKR;G3OKc+PM)>6^R~ZC{+mw6q8Fc2j&1zr zd-MOx&o;^oKTLe@y!riaBHz^XTQ=wK6tD_)n3pWPc*)52uoBNi!A0`YZ>~F}H66N| zaC*~*=@L)xDlW8-+H_MzRpiTrn-zzc#n)<-&zdfG+_7nrWKfe$jQrO2#EJ#4SMB(+ zZU-Z#9V|o4gPyS+LVEF%^nc?xI!;@0DuXh7|&EV = revolunet + = revolunet - Julien Bouquillon + = 2008 + +Copyright (c) 2008, revolunet +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met : + + + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE, DATA, OR PROFITS ; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/share/test/VLCcontrols/slim.html b/share/test/VLCcontrols/slim.html new file mode 100644 index 0000000..e7ff310 --- /dev/null +++ b/share/test/VLCcontrols/slim.html @@ -0,0 +1,95 @@ + + + +Slim VLCcontrols example + + + + + + + + + + + +

+ +slim VLC controls javascript library demo - details + + + +

+ +
replaced by VLC controller
+ + +

 

+try any uri or local file :

+ + + +  + + + +

or : Apple simpsons trailer + +

or : TF1 : katdeluna & bustarhymes + +

or : TF1 : leonalewis + + + +

 

+any comments welcome on : contact@revolunet.com + +
+ + \ No newline at end of file diff --git a/share/test/VLCcontrols/styles.css b/share/test/VLCcontrols/styles.css new file mode 100644 index 0000000..2ae3e2f --- /dev/null +++ b/share/test/VLCcontrols/styles.css @@ -0,0 +1,61 @@ +.x-vlc-slider { + background:#C7F2FF; + text-align:center; + + } + .x-vlc-slider-thumb { + background:#4EAECC; + width:3px; +} +.x-vlc-main { + +} +.x-vlc-toolbar { + + color:black; + +} + .x-vlc-toolbar * { + vertical-align:top; + color:black; + } +.x-vlc-btn { + + padding-right:10px; + + +} +.x-vlc-btn-fullscreen { + background:url(images/fullscreen2.gif) no-repeat; +} + .x-vlc-btn-plus { + background:url(images/plus2.gif) no-repeat; +} +.x-vlc-btn-moins { + background:url(images/moins2.gif) no-repeat; +} +.x-vlc-btn:hover { + color:red; + +} +.x-vlc-btn-play { + background:url(images/play2.gif) no-repeat; +} +.x-vlc-btn-stop { + background:url(images/stop2.gif) no-repeat; + +} +.x-vlc-btn-pause { + background:url(images/pause2.gif) no-repeat; + +} +.x-vlc-timer { + width:100px; + font-size:12px; + vertical-align:top; + text-align:center +} +.x-vlc-about { + font-size:10px; + +} \ No newline at end of file diff --git a/share/test/VLCcontrols/subtitles.srt b/share/test/VLCcontrols/subtitles.srt new file mode 100644 index 0000000..badaae8 --- /dev/null +++ b/share/test/VLCcontrols/subtitles.srt @@ -0,0 +1,171 @@ +1 +00:00:10,273 --> 00:00:12,223 +Welcome back to the Dive Into Mark show! + +2 +00:00:12,258 --> 00:00:13,384 +We got a Roomba, + +3 +00:00:13,485 --> 00:00:14,652 +the dog is in hiding, + +4 +00:00:14,753 --> 00:00:17,068 +the kids are asleep, +and I finally shaved. + +5 +00:00:17,369 --> 00:00:20,527 +Mmmm... smooth. + +6 +00:00:21,028 --> 00:00:24,606 +In local news, the police installed +a speed trap right outside my house, + +7 +00:00:24,607 --> 00:00:27,419 +just in time for July 4th weekend. +Hey, thanks! + +8 +00:00:27,520 --> 00:00:30,409 +Unfortunately for them, +the tens digit is broken, + +9 +00:00:30,410 --> 00:00:34,164 +so it shows +"Your speed: 0, 1, 2, 3, 4..." + +10 +00:00:34,765 --> 00:00:37,169 +I feel safer already. + +11 +00:00:37,270 --> 00:00:40,025 +Last week, Cory Doctorow of +BoingBoing.net + +12 +00:00:40,126 --> 00:00:42,301 +announced that he was also +switching to Ubuntu + +13 +00:00:42,302 --> 00:00:44,209 +after 22 years of servitude to Apple. + +14 +00:00:44,210 --> 00:00:46,477 +I think I see the pattern. + +15 +00:00:46,878 --> 00:00:50,234 +Cory Doctorow is such a hard-core +Mac user that he actually has + +16 +00:00:50,269 --> 00:00:54,125 +a Sad Mac icon tattooed on his bicep. + +17 +00:00:54,426 --> 00:00:57,404 +And I thought I had migration problems. + +18 +00:00:57,605 --> 00:01:00,543 +In response to last week's show, +Dan Ridley writes, + +19 +00:01:00,544 --> 00:01:02,587 +"Okay, I feel totally gypped. + +20 +00:01:02,588 --> 00:01:04,278 +I downloaded your video, watched it, + +21 +00:01:04,279 --> 00:01:07,602 +and at no point during the video +did I actually see bunnies." + +22 +00:01:18,975 --> 00:01:20,830 +Did I mention we got a Roomba? + +23 +00:01:20,831 --> 00:01:22,841 +It's totally awesome. + +24 +00:01:37,662 --> 00:01:39,966 +It was actually a birthday present +for my wife. + +25 +00:01:39,967 --> 00:01:41,794 +Don't look at me in that tone of voice. + +26 +00:01:41,795 --> 00:01:43,106 +It's what she asked for. + +27 +00:01:43,107 --> 00:01:45,055 +I tried to talk her out of it. + +28 +00:01:45,156 --> 00:01:46,903 +We're still trying to decide +what to name it, + +29 +00:01:46,904 --> 00:01:50,092 +but my wife has announced +that it is definitely a boy. + +30 +00:01:50,193 --> 00:01:52,925 +She says she knows it's a boy because +of the way it waggles its butt + +31 +00:01:52,926 --> 00:01:54,786 +when it goes back to its home base. + +32 +00:02:04,671 --> 00:02:07,314 +I went to BJ's this weekend to buy +a ridiculous amount of + +33 +00:02:07,415 --> 00:02:08,588 +everything + +34 +00:02:08,689 --> 00:02:10,973 +and I parked next to a car that had a +bumper sticker that read, + +35 +00:02:11,074 --> 00:02:13,734 +"Sorry I missed church, +I was busy practicing witchcraft + +36 +00:02:13,735 --> 00:02:15,397 +and becoming a lesbian." + +37 +00:02:15,498 --> 00:02:18,240 +Apparently, this has been a popular +bumper sticker for some time, + +38 +00:02:18,241 --> 00:02:21,252 +but living in North Carolina, +this is the first I've seen of it. + diff --git a/share/test/VLCcontrols/uri.png b/share/test/VLCcontrols/uri.png new file mode 100644 index 0000000000000000000000000000000000000000..4c36583d2f892b3f4a3ea753bb2de01e9e675aa9 GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^{6Ngd!2~4hUtHV)q*&4&eH|GXZnE6jbPFWRRubeF z%`FUljMJ1_4rm-IHfQnvux;TbZ z%$YOsZf}bLPfIMf?he+hnPM4@Vt1JMJKR;G3OKc+PM)>6^R~ZC{+mw6q8Fc2j&1zr zd-MOx&o;^oKTLe@y!riaBHz^XTQ=wK6tD_)n3pWPc*)52uoBNi!A0`YZ>~F}H66N| zaC*~*=@L)xDlW8-+H_MzRpiTrn-zzc#n)<-&zdfG+_7nrWKfe$jQrO2#EJ#4SMB(+ zZU-Z#9V|o4gPyS+LVEF%^nc?xI!;@0DuXh7|&EV