X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=share%2Fhttp%2Fjs%2Ffunctions.js;h=fcd6c7a1677b9b7879ef6964be5802b9277c4dbe;hb=be017fb2905530b0895b7158464b3f45a0d29356;hp=94bada86d8b6f9a2c969e5c41ebb6c7a8a7c4038;hpb=a7c18d8acc7b15a1937863953d2dfd06c0b6a7a1;p=vlc diff --git a/share/http/js/functions.js b/share/http/js/functions.js index 94bada86d8..fcd6c7a167 100644 --- a/share/http/js/functions.js +++ b/share/http/js/functions.js @@ -27,6 +27,7 @@ var old_time = 0; var pl_cur_id; +var albumart_id = -1; /********************************************************************** * Slider functions @@ -130,12 +131,16 @@ function set_css( item, element, value ) { for( var j = 0; j < document.styleSheets.length; j++ ) { - cssRules = document.styleSheets[j].cssRules; + var cssRules = document.styleSheets[j].cssRules; + if( !cssRules ) cssRules = document.styleSheets[j].rules; for( var i = 0; i < cssRules.length; i++) { if( cssRules[i].selectorText == item ) { - cssRules[i].style.setProperty( element, value, null ); + if( cssRules[i].style.setProperty ) + cssRules[i].style.setProperty( element, value, null ); + else + cssRules[i].style.setAttribute( toCamelCase( element ), value ); return; } } @@ -147,12 +152,16 @@ function get_css( item, element ) { for( var j = 0; j < document.styleSheets.length; j++ ) { - cssRules = document.styleSheets[j].cssRules; + var cssRules = document.styleSheets[j].cssRules; + if( !cssRules ) cssRules = document.styleSheets[j].rules; for( var i = 0; i < cssRules.length; i++) { if( cssRules[i].selectorText == item ) { - return cssRules[i].style.getPropertyValue( element ); + if( cssRules[i].style.getPropertyValue ) + return cssRules[i].style.getPropertyValue( element ); + else + return cssRules[i].style.getAttribute( toCamelCase( element ) ); } } } @@ -189,6 +198,7 @@ function toggle_show_node( id ) } function show( id ){ document.getElementById( id ).style.display = 'block'; } +function showinline( id ){ document.getElementById( id ).style.display = 'inline'; } function hide( id ){ document.getElementById( id ).style.display = 'none'; } @@ -196,6 +206,12 @@ function checked( id ){ return document.getElementById( id ).checked; } function value( id ){ return document.getElementById( id ).value; } +function setclass( obj, value ) +{ + obj.setAttribute( 'class', value ); /* Firefox */ + obj.setAttribute( 'className', value ); /* IE */ +} + function radio_value( name ) { var radio = document.getElementsByName( name ); @@ -211,15 +227,25 @@ function radio_value( name ) function check_and_replace_int( id, val ) { - var objRegExp = /^\d\d*$/; + var objRegExp = /^\d+$/; if( value( id ) != '' && ( !objRegExp.test( value( id ) ) || parseInt( value( id ) ) < 1 ) ) - document.getElementById( id ).value = val; + return document.getElementById( id ).value = val; + return document.getElementById( id ).value; } function addslashes( str ){ return str.replace(/\'/g, '\\\''); } -function escapebackslashes( str ){ return str.replace(/\\[^']/g, '\\\\'); } +function escapebackslashes( str ){ return str.replace(/\\/g, '\\\\'); } + +function toCamelCase( str ) +{ + str = str.split( '-' ); + var cml = str[0]; + for( var i=1; i 0 ? randomtag[0].firstChild.data == "1" : 0) + setclass( document.getElementById( 'btn_shuffle'), 'on' ); else - document.getElementById( 'btn_shuffle').setAttribute( 'class', 'off' ); - if( status.getElementsByTagName( 'loop' )[0].firstChild.data == "1" ) - document.getElementById( 'btn_loop').setAttribute( 'class', 'on' ); + setclass( document.getElementById( 'btn_shuffle'), 'off' ); + + var looptag = status.getElementsByTagName( 'loop' ); + if( looptag.length > 0 ? looptag[0].firstChild.data == "1" : 0) + setclass( document.getElementById( 'btn_loop'), 'on' ); else - document.getElementById( 'btn_loop').setAttribute( 'class', 'off' ); - if( status.getElementsByTagName( 'repeat' )[0].firstChild.data == "1" ) - document.getElementById( 'btn_repeat').setAttribute( 'class', 'on' ); + setclass( document.getElementById( 'btn_loop'), 'off' ); + + var repeattag = status.getElementsByTagName( 'repeat' ); + if( repeattag.length > 0 ? repeattag[0].firstChild.data == "1" : 0 ) + setclass( document.getElementById( 'btn_repeat'), 'on' ); else - document.getElementById( 'btn_repeat').setAttribute( 'class', 'off' ); + setclass( document.getElementById( 'btn_repeat'), 'off' ); var tree = document.createElement( "ul" ); var categories = status.getElementsByTagName( 'category' ); @@ -512,8 +560,21 @@ function parse_playlist() nda.appendChild( ndai ); pos.appendChild( nda ); pos.appendChild( document.createTextNode( ' ' + elt.getAttribute( 'name' ) ) ); + + if( elt.getAttribute( 'ro' ) == 'rw' ) + { + pos.appendChild( document.createTextNode( ' ' ) ); + var del = document.createElement( "a" ); + del.setAttribute( 'href', 'javascript:pl_delete('+elt.getAttribute( 'id' )+')' ); + var delimg = document.createElement( "img" ); + delimg.setAttribute( 'src', 'images/delete_small.png' ); + delimg.setAttribute( 'alt', '(delete)' ); + del.appendChild( delimg ); + pos.appendChild( del ); + } + var nd = document.createElement( "div" ); - nd.setAttribute( 'class', 'pl_node' ); + setclass( nd, 'pl_node' ); nd.setAttribute( 'id', 'pl_'+elt.getAttribute( 'id' ) ); pos.appendChild( nd ); } @@ -522,12 +583,12 @@ function parse_playlist() if( pos.hasChildNodes() ) pos.appendChild( document.createElement( "br" ) ); var pl = document.createElement( "a" ); - pl.setAttribute( 'class', 'pl_leaf' ); + setclass( pl, 'pl_leaf' ); pl.setAttribute( 'href', 'javascript:pl_play('+elt.getAttribute( 'id' )+');' ); pl.setAttribute( 'id', 'pl_'+elt.getAttribute( 'id' ) ); if( elt.getAttribute( 'current' ) == 'current' ) { - pl.setAttribute( 'style', 'font-weight: bold;' ); + pl.style.fontWeight = 'bold'; var nowplaying = document.getElementById( 'nowplaying' ); clear_children( nowplaying ); nowplaying.appendChild( document.createTextNode( elt.getAttribute( 'name' ) ) ); @@ -536,16 +597,22 @@ function parse_playlist() } pl.setAttribute( 'title', elt.getAttribute( 'uri' )); pl.appendChild( document.createTextNode( elt.getAttribute( 'name' ) ) ); + var duration = elt.getAttribute( 'duration' ); + if( duration > 0 ) + pl.appendChild( document.createTextNode( " (" + format_time( elt.getAttribute( 'duration' ) / 1000000 ) + ")" ) ); pos.appendChild( pl ); - pos.appendChild( document.createTextNode( ' ' ) ); - - var del = document.createElement( "a" ); - del.setAttribute( 'href', 'javascript:pl_delete('+elt.getAttribute( 'id' )+')' ); - var delimg = document.createElement( "img" ); - delimg.setAttribute( 'src', 'images/delete_small.png' ); - delimg.setAttribute( 'alt', '(delete)' ); - del.appendChild( delimg ); - pos.appendChild( del ); + + if( elt.getAttribute( 'ro' ) == 'rw' ) + { + pos.appendChild( document.createTextNode( ' ' ) ); + var del = document.createElement( "a" ); + del.setAttribute( 'href', 'javascript:pl_delete('+elt.getAttribute( 'id' )+')' ); + var delimg = document.createElement( "img" ); + delimg.setAttribute( 'src', 'images/delete_small.png' ); + delimg.setAttribute( 'alt', '(delete)' ); + del.appendChild( delimg ); + pos.appendChild( del ); + } } if( elt.firstChild ) { @@ -563,6 +630,7 @@ function parse_playlist() { elt = elt.parentNode; if( ! elt.parentNode ) break; + pos = pos.parentNode; } if( ! elt.parentNode ) break; elt = elt.parentNode.nextSibling; @@ -596,14 +664,14 @@ function parse_browse_dir( ) if( elt.nodeName == "element" ) { var item = document.createElement( "a" ); - item.setAttribute( 'class', 'browser' ); + setclass( item, 'browser' ); if( elt.getAttribute( 'type' ) == 'directory' ) { - item.setAttribute( 'href', 'javascript:browse_dir(\''+escapebackslashes(addslashes(elt.getAttribute( 'path' )))+'\');'); + item.setAttribute( 'href', 'javascript:browse_dir(\''+addslashes(escapebackslashes(elt.getAttribute( 'path' )))+'\');'); } else { - item.setAttribute( 'href', 'javascript:browse_path(\''+escapebackslashes(addslashes(elt.getAttribute( 'path' )))+'\');' ); + item.setAttribute( 'href', 'javascript:browse_path(\''+addslashes(escapebackslashes(elt.getAttribute( 'path' )))+'\');' ); } item.appendChild( document.createTextNode( elt.getAttribute( 'name' ) ) ); pos.appendChild( item ); @@ -611,8 +679,8 @@ function parse_browse_dir( ) { pos.appendChild( document.createTextNode( ' ' ) ); var item = document.createElement( "a" ); - item.setAttribute( 'class', 'browser' ); - item.setAttribute( 'href', 'javascript:browse_path(\''+escapebackslashes(addslashes(elt.getAttribute( 'path' )))+'\');'); + setclass( item, 'browser' ); + item.setAttribute( 'href', 'javascript:browse_path(\''+addslashes(escapebackslashes(elt.getAttribute( 'path' )))+'\');'); item.appendChild( document.createTextNode( '(select)' ) ); pos.appendChild( item ); } @@ -638,6 +706,7 @@ function hide_input( ) document.getElementById( 'input_file' ).style.display = 'none'; document.getElementById( 'input_disc' ).style.display = 'none'; document.getElementById( 'input_network' ).style.display = 'none'; + document.getElementById( 'input_fake' ).style.display = 'none'; } /* update the input MRL using data from the input file helper */ @@ -652,19 +721,14 @@ function update_input_file() /* update the input MRL using data from the input disc helper */ function update_input_disc() { - var mrl = document.getElementById( 'input_mrl' ); - var type = radio_value( "input_disc_type" ); - var device = value( "input_disc_dev" ); + var mrl = document.getElementById( 'input_mrl' ); + var type = radio_value( "input_disc_type" ); + var device = value( "input_disc_dev" ); - check_and_replace_int( 'input_disc_title', 0 ); - check_and_replace_int( 'input_disc_chapter', 0 ); - check_and_replace_int( 'input_disc_subtrack', '' ); - check_and_replace_int( 'input_disc_audiotrack', 0 ); - - var title = value( 'input_disc_title' ); - var chapter = value( 'input_disc_chapter' ); - var subs = value( 'input_disc_subtrack' ); - var audio = value( 'input_disc_audiotrack' ); + var title = check_and_replace_int( 'input_disc_title', 0 ); + var chapter = check_and_replace_int( 'input_disc_chapter', 0 ); + var subs = check_and_replace_int( 'input_disc_subtrack', '' ); + var audio = check_and_replace_int( 'input_disc_audiotrack', 0 ); mrl.value = ""; @@ -752,6 +816,22 @@ function update_input_net() mrl.value += " :access-filter=timeshift"; } +/* update the input MRL using data from the input fake helper */ +function update_input_fake() +{ + var mrl = document.getElementById( 'input_mrl' ); + + mrl.value = "fake://"; + mrl.value += " :fake-file=" + value( "input_fake_filename" ); + + if( value( "input_fake_width" ) ) + mrl.value += " :fake-width=" + value( "input_fake_width" ); + if( value( "input_fake_height" ) ) + mrl.value += " :fake-height=" + value( "input_fake_height" ); + if( value( "input_fake_ar" ) ) + mrl.value += " :fake-ar=" + value( "input_fake_ar" ); +} + /********************************************************************** * Sout dialog functions *********************************************************************/ @@ -826,6 +906,8 @@ function update_sout() mrl.value += "scodec="+value( 'sout_scodec' ); alot = true; } + mrl.value += value( 'sout_transcode_extra' ); + mrl.value += "}"; } @@ -951,7 +1033,7 @@ function browse( dest ) function browse_dir( dir ) { document.getElementById( 'browse_lastdir' ).value = dir; - loadXMLDoc( 'requests/browse.xml?dir='+escape(dir), parse_browse_dir ); + loadXMLDoc( 'requests/browse.xml?dir='+encodeURIComponent(dir), parse_browse_dir ); } function browse_path( p ) { @@ -959,7 +1041,16 @@ function browse_path( p ) hide( 'browse' ); document.getElementById( value( 'browse_dest' ) ).focus(); } - +function refresh_albumart( force ) +{ + if( albumart_id != pl_cur_id || force ) + { + var now = new Date(); + var albumart = document.getElementById( 'albumart' ); + albumart.src = '/art?timestamp=' + now.getTime(); + albumart_id = pl_cur_id; + } +} /********************************************************************** * Periodically update stuff in the interface *********************************************************************/ @@ -973,9 +1064,15 @@ function loop_refresh_playlist() /* setTimeout( 'loop_refresh_playlist()', 10000 ); */ update_playlist(); } +function loop_refresh_albumart() +{ + setTimeout( 'loop_refresh_albumart()', 1000 ); + refresh_albumart( false ); +} function loop_refresh() { setTimeout( 'loop_refresh_status()', 1 ); setTimeout( 'loop_refresh_playlist()', 1 ); + setTimeout( 'loop_refresh_albumart()', 1 ); }