2.3.7 horizontal nav, media keys
This commit is contained in:
parent
53ed1bc0d4
commit
77831e1ef6
17 changed files with 1914 additions and 1553 deletions
|
@ -10,7 +10,7 @@ https://github.com/tsquillario/MiniSub/issues
|
|||
Features
|
||||
* HTML5 Audio with Flash fallback (provided by the SoundManager2 library)
|
||||
* Flexible Layout (will scale to whatever size your browser window is)
|
||||
* Keyboard shortcuts (back, forward, play/pause, skip to artist)
|
||||
* Keyboard shortcuts (back, forward, play/pause, skip to artist, media keys)
|
||||
* Playlist support (create new, add to existing, delete)
|
||||
* Podcast support (includes description field on hover)
|
||||
* Favorite/Starred support for Albums & Songs
|
||||
|
|
BIN
images/aperture_gd_12x12.png
Normal file
BIN
images/aperture_gd_12x12.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 329 B |
BIN
images/loop_alt1_gd_12x9.png
Normal file
BIN
images/loop_alt1_gd_12x9.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 255 B |
255
index.html
255
index.html
|
@ -24,6 +24,7 @@
|
|||
<script src="js/plugins/jquery.scrollTo-1.4.2-min.js" type="text/javascript"></script>
|
||||
<script src="js/jplayer/jquery.jplayer.min.js" type="text/javascript"></script>
|
||||
<script src="js/fancybox/jquery.fancybox.pack.js" type="text/javascript"></script>
|
||||
<script src="js/plugins/UnityShim.js" type="text/javascript"></script>
|
||||
<script src="js/libs/utils.js" type="text/javascript"></script>
|
||||
<script src="js/app.js" type="text/javascript"></script>
|
||||
<script src="js/libs/api.js" type="text/javascript"></script>
|
||||
|
@ -45,34 +46,36 @@
|
|||
<li><a href="#tabPlaylists" id="action_tabPlaylists" title="Playlists"><img src="images/list_gd_16x14.png" /></a></li>
|
||||
<li><a href="#tabPodcasts" id="action_tabPodcasts" title="Podcasts"><img src="images/rss_16x16.png" /></a></li>
|
||||
<!--<li><a href="#tabVideos" id="action_tabVideos" title="Videos"><img src="images/movie_gd_16x16.png" /></a></li>-->
|
||||
<li><a href="#tabPreferences" id="action_tabPreferences" class="last" title="Preferences"><img src="images/cog_16x16.png" /></a></li>
|
||||
<li><a href="#tabSettings" id="action_tabSettings" class="last" title="Settings"><img src="images/cog_16x16.png" /></a></li>
|
||||
</ul>
|
||||
<div id="toploading"></div>
|
||||
</div>
|
||||
<div id="search">
|
||||
<input type="text" id="Search" class="medium" title="Wildcards (*) supported"/>
|
||||
<select id="SearchType" name="SearchType">
|
||||
<option value="song">Song</option>
|
||||
<option value="album">Album</option>
|
||||
</select>
|
||||
<a href="#" class="button" id="action_Search" title="Search"><img class="pad" src="images/magnifying_glass_alt_12x12.png" /></a>
|
||||
</div>
|
||||
<div id="content">
|
||||
<div id="tabLibrary" class="tabcontent">
|
||||
<div class="actions floatleft">
|
||||
<a href="#" class="button" id="action_RefreshArtists" title="Refresh Artist List"><img class="pad" src="images/reload_9x11.png" /></a>
|
||||
<a href="#" class="button" id="action_RescanLibrary" title="Rescan Library"><img class="pad" src="images/loop_alt1_gd_12x9.png" /></a>
|
||||
<a href="#" class="button" id="action_DecreaseWidth" title="Decrease Width"><img src="images/minus_8x2.png" /></a>
|
||||
<a href="#" class="button" id="action_IncreaseWidth" title="Increase Width"><img src="images/plus_8x8.png" /></a>
|
||||
</div>
|
||||
<div class="subactions floatleft">
|
||||
<div id="songActions">
|
||||
<a href="#" class="button disabled" id="action_SelectAll" title="Select All">All</a>
|
||||
<a href="#" class="button disabled" id="action_SelectNone" title="Select None">None</a>
|
||||
<a href="#" class="button disabled" id="action_AddToQueue" title="Add To Play Queue">+ Queue</a>
|
||||
<a href="#" class="button disabled" id="action_AddToPlaylist" title="Add Selected To Playlist">+ Playlist</a>
|
||||
<div id="submenu_AddToPlaylist" class="submenu shadow" style="display: none;"></div>
|
||||
<a href="#" class="button disabled" id="action_PlayAlbum" title="Play Album"><img src="images/play_gl_6x8.png" /></a>
|
||||
</div>
|
||||
<input type="text" id="Search" class="medium" title="Wildcards (*) supported"/>
|
||||
<select id="SearchType" name="SearchType">
|
||||
<option value="song">Song</option>
|
||||
<option value="album">Album</option>
|
||||
</select>
|
||||
<a href="#" class="button" id="action_Search" title="Search"><img class="pad" src="images/magnifying_glass_alt_12x12.png" /></a>
|
||||
</div>
|
||||
<div id="Albums" class="section lgsection floatleft">
|
||||
<div class="clear"></div>
|
||||
<div id="Albums" class="section lgsection">
|
||||
<div class="loading"></div>
|
||||
<div id="Artists" class="smsection floatleft" tabindex="0">
|
||||
<div class="padder">
|
||||
|
@ -92,33 +95,36 @@
|
|||
</div>
|
||||
<div id="BottomContainer"><ul id="BottomIndex"></ul></div>
|
||||
</div>
|
||||
<div id="BreadCrumbContainer"><div id="BreadCrumb"><a href="#" id="BreadHome"><img src="images/home_gl_12x12.png" /></a><div id="BreadCrumbs" class="floatleft"></div></div></div>
|
||||
<table id="AlbumContainer" class="simplelist songlist noselect" cellspacing="1">
|
||||
<thead></thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
<div class="tablecontainer">
|
||||
<div id="BreadCrumbContainer"><div id="BreadCrumb"><a href="#" id="BreadHome"><img src="images/home_gl_12x12.png" /></a><div id="BreadCrumbs" class="floatleft"></div></div></div>
|
||||
<table id="AlbumContainer" class="simplelist songlist noselect" cellspacing="1">
|
||||
<thead></thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="status_Library" class="status alignleft" data-type="" data-offset=""><img src="images/arrow_left_gl_8x8.png" /> <a id="action_PreviousAlbumList" class="previous" href="#">Previous</a> | <a id="action_NextAlbumList" class="next" href="#">Next</a> <img src="images/arrow_right_gl_8x8.png" /></div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div id="tabQueue" class="tabcontent">
|
||||
<div class="actions floatleft">
|
||||
<a href="#" class="button" id="action_Shuffle" title="Shuffle"><img src="images/fork_11x12.png" /></a>
|
||||
<a href="#" class="button" id="action_Empty" title="Remove All">Empty</a>
|
||||
</div>
|
||||
<div class="subactions floatleft">
|
||||
<div id="currentActions">
|
||||
<a href="#" class="button disabled" id="action_Shuffle" title="Shuffle"><img src="images/fork_11x12.png" /></a>
|
||||
<a href="#" class="button disabled" id="action_CurrentSelectAll" title="Select All">All</a>
|
||||
<a href="#" class="button disabled" id="action_CurrentSelectNone" title="Select None">None</a>
|
||||
<a href="#" class="button disabled" id="action_CurrentRemoveSongs" title="Remove selected song(s) from Play Queue">Remove Song(s)</a>
|
||||
<a href="#" class="button disabled" id="action_Empty" title="Remove All">Empty</a>
|
||||
<a href="#" class="button disabled" id="action_AddCurrentToPlaylist" title="Add Selected To Playlist">+ Playlist</a>
|
||||
<div id="submenu_AddCurrentToPlaylist" class="submenu shadow" style="display: none;"></div>
|
||||
<div id="submenu_AddCurrentToPlaylist" class="submenu shadow" style="display: none;"></div> |
|
||||
<a href="#" class="button" id="action_AutoPilot" title="Autopilot"><img class="pad" src="images/steering_wheel_gd_12x12.png" /></a>
|
||||
</div>
|
||||
<a href="#" class="button" id="action_Preview" title="Turn on Album Preview"><img class="pad" src="images/aperture_gd_12x12.png" /></a>
|
||||
</div>
|
||||
<div id="CurrentPlaylist" class="section fullsection floatleft noselect">
|
||||
<div class="tablecontainerfull">
|
||||
<table id="CurrentPlaylistContainer" class="simplelist songlist" cellspacing="1">
|
||||
<thead></thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="status_Current" class="status">0 song(s), 00:00:00 total time</div>
|
||||
</div>
|
||||
|
@ -146,10 +152,12 @@
|
|||
<ul id="PlaylistContainer" class="simplelist mainlist"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tablecontainer">
|
||||
<table id="TrackContainer" class="simplelist songlist">
|
||||
<thead></thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="status_Playlists" class="status">0 song(s), 00:00:00 total time</div>
|
||||
</div>
|
||||
|
@ -168,10 +176,12 @@
|
|||
<ul id="ChannelsContainer" class="simplelist mainlist"></ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tablecontainer">
|
||||
<table id="PodcastContainer" class="simplelist songlist">
|
||||
<thead></thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div id="status_Podcasts" class="status">0 song(s), 00:00:00 total time</div>
|
||||
</div>
|
||||
|
@ -182,32 +192,108 @@
|
|||
<div class="subactions floatleft"><span class="alert">***Opens new window to the video URL...</span>
|
||||
</div>
|
||||
<div id="Videos" class="section fullsection floatleft noselect">
|
||||
<div class="tablecontainer">
|
||||
<table id="VideosContainer" class="simplelist songlist" cellspacing="1">
|
||||
<thead></thead>
|
||||
<tbody></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div id="videodeck"></div>
|
||||
<div id="videooverlay" class="darkoverlay"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="tabPreferences" class="tabcontent">
|
||||
<div class="actions floatleft">
|
||||
<a href="#" class="button" id="ResetPreferences" title="Reset Preferences">Reset</a>
|
||||
<a href="#" class="button" id="SavePreferences" title="Save Preferences">Save</a>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<div id="tabSettings" class="tabcontent">
|
||||
<div class="section lgsection floatleft">
|
||||
<div class="subsection floatleft">
|
||||
<h3 class="title">Login</h3>
|
||||
<label for="Username">Username <span class="red">*</span></label><br />
|
||||
<input type="text" id="Username" name="Username" class="large"/><br />
|
||||
<label for="Password">Password <span class="red">*</span></label><br />
|
||||
<input type="password" id="Password" name="Password" class="large"/><br />
|
||||
<label for="Server">Server <span class="red">*</span></label><br />
|
||||
<input type="text" id="Server" name="Server" class="xlarge" title="Subsonic Server URL Ex: http://host:port/subsonic"/><br />
|
||||
<!--<a href="#" class="button" id="action_RequestURL" title="Request Permission for Server URL">Enable URL</a><br />-->
|
||||
<label for="SubsonicVersion">Subsonic API: <span class="apiversion" id="SubsonicVersion"></span></label><br />
|
||||
<label for="SMStats">Audio State: <span id="SMStats"></span></label><br />
|
||||
<div class="tablecontainerfull">
|
||||
<div class="form">
|
||||
<div class="subsection floatleft">
|
||||
<h3 class="title">Login</h3>
|
||||
<label for="Username">Username <span class="red">*</span></label><br />
|
||||
<input type="text" id="Username" name="Username" class="large"/><br />
|
||||
<label for="Password">Password <span class="red">*</span></label><br />
|
||||
<input type="password" id="Password" name="Password" class="large"/><br />
|
||||
<label for="Server">Server <span class="red">*</span></label><br />
|
||||
<input type="text" id="Server" name="Server" class="xlarge" title="Subsonic Server URL Ex: http://host:port/subsonic"/><br />
|
||||
<!--<a href="#" class="button" id="action_RequestURL" title="Request Permission for Server URL">Enable URL</a><br />-->
|
||||
<label for="SubsonicVersion">Subsonic API: <span class="apiversion" id="SubsonicVersion"></span></label><br />
|
||||
<label for="SMStats">Audio State: <span id="SMStats"></span></label><br /><br />
|
||||
<div id="donate" class="subsection floatleft">
|
||||
<h3 class="title">Buy me a <span class="beer">beer</span>! I'd like that :)</h3>
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">
|
||||
<input type="hidden" name="cmd" value="_s-xclick">
|
||||
<input type="hidden" name="hosted_button_id" value="VMTENRSJWQ234">
|
||||
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
|
||||
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
|
||||
</form>
|
||||
<small>*This is a donation to <a href="https://twitter.com/tsquillario" target="_blank">tsquillario</a>, the developer of <a href="https://github.com/tsquillario/MiniSub" target="_blank">MiniSub</a>.
|
||||
<br />Not related to a Subsonic License!</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="subsection floatleft">
|
||||
<h3 class="title">Options</h3>
|
||||
<label for="Theme">Theme</label><br />
|
||||
<select id="Theme" name="Theme" class="large">
|
||||
<option value="default">Default</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select><br />
|
||||
<label for="AutoPlaylists">Genres</label><br />
|
||||
<select id="Genres" name="Genres" class="large"></select><br />
|
||||
<input type="text" id="AutoPlaylists" name="AutoPlaylists" class="large" title="Comma separated list of genres for Auto Playlists"/><br />
|
||||
<!--<label for="AutoFilter">Filter</label><br />
|
||||
<input type="text" id="AutoFilter" name="AutoFilter" class="large" title="Comma separated list of albums for the AutoPilot Filter"/><br />-->
|
||||
<label for="AutoAlbumSize">Auto Album Size (Default 15)</label><br />
|
||||
<input type="text" id="AutoAlbumSize" name="AutoAlbumSize" class="large" title="Number of Albums to Get on the Music Library tab"/><br />
|
||||
<label for="AutoPlaylistSize">Auto Playlist Size (Default 25)</label><br />
|
||||
<input type="text" id="AutoPlaylistSize" name="AutoPlaylistSize" class="large" title="Number of Songs to Get on the Playlist tab"/><br />
|
||||
<label for="ApplicationName">Application Name (Default MiniSub)</label><br />
|
||||
<input type="text" id="ApplicationName" name="ApplicationName" class="large" title="Custom Player Name"/><br />
|
||||
</div>
|
||||
<div class="subsection floatleft">
|
||||
<div class="checkboxes">
|
||||
<fieldset>
|
||||
<legend class="aligncenter">Display</legend>
|
||||
<div class="inputwrap"><input type="checkbox" id="HideAZ" name="HideAZ" value="1" title="Hide A-Z at Bottom of Artists"/></div>
|
||||
<label for="HideAZ">Hide A-Z</label>
|
||||
<div class="clear"></div>
|
||||
<div class="inputwrap"><input type="checkbox" id="ScrollTitle" name="ScrollTitle" value="1" title="Scroll the Title Once"/></div>
|
||||
<label for="ScrollTitle">Scroll Title</label>
|
||||
</fieldset>
|
||||
<div class="clear"></div>
|
||||
<fieldset>
|
||||
<legend class="aligncenter">Advanced</legend>
|
||||
<div class="inputwrap"><input type="checkbox" id="Debug" name="Debug" value="1" title="Enable Debug Mode (Events will be logged to the Javascript Console)"/></div>
|
||||
<label for="Debug">Debug Mode</label>
|
||||
<div class="clear"></div>
|
||||
<div class="inputwrap"><input type="checkbox" id="ForceFlash" name="ForceFlash" value="1" title="Force Flash Plugin for Audio (Option doesn't work with Chrome App)"/></div>
|
||||
<label for="ForceFlash">Force Flash </label>
|
||||
<div class="clear"></div>
|
||||
<div class="inputwrap"><input type="checkbox" id="Protocol" name="Protocol" value="1" title="Enable Cross-Domain AJAX Requests (Use if MiniSub is hosted in a different domain than Subsonic)"/></div>
|
||||
<label for="Protocol">Enable JSONP</label>
|
||||
</fieldset>
|
||||
<div class="clear"></div>
|
||||
<fieldset>
|
||||
<legend class="aligncenter">HTML5 [Beta]</legend>
|
||||
<span>Notifications</span><br />
|
||||
<div class="clear"></div>
|
||||
<div class="inputwrap"><input type="checkbox" id="Notification_Song" name="Notification_Song" value="1" title="Enable Notifications When Tracks Change"/></div>
|
||||
<label for="Notification_Song">Song Change</label>
|
||||
<div class="clear"></div>
|
||||
<div class="inputwrap"><input type="checkbox" id="Notification_NowPlaying" name="Notification_NowPlaying" value="1" title="Enable Notifications When Other Users Play Songs"/></div>
|
||||
<label for="Notification_Song">Now Playing</label>
|
||||
<div class="clear"></div>
|
||||
<span>Local Storage</span><br />
|
||||
<div class="clear"></div>
|
||||
<div class="inputwrap"><input type="checkbox" id="SaveTrackPosition" name="SaveTrackPosition" value="1" title="Saves Play Queue & Track Position Periodically (Uses HTML5: localStorage)"/></div>
|
||||
<label for="SaveTrackPosition">Save Progress</label>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<div class="submitsettings">
|
||||
<a href="#" class="button" id="ResetSettings" title="Reset Settings">Reset</a>
|
||||
<a href="#" class="button" id="SaveSettings" title="Save Settings">Save</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="subsection floatleft">
|
||||
<h3 class="title">Keyboard Shortcuts</h3>
|
||||
|
@ -218,80 +304,10 @@
|
|||
<li><em>→</em> Next Track</li>
|
||||
<li><em>←</em> Previous Track</li>
|
||||
<li><em>-/_</em> Volume Down <em>=/+</em> Volume Up</li>
|
||||
<li><span></span></li>
|
||||
<li><em>Media Keys</em> via <a href="https://chrome.google.com/webstore/detail/swayfm-unified-music-medi/icckhjgjjompfgoiidainoapgjepncej" target="_blank">Sway.fm Unified Music Media Keys</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<div class="subsection floatleft">
|
||||
<h3 class="title">Options</h3>
|
||||
<label class="red">* Refresh (F5) required</label><br />
|
||||
<label for="Theme">Theme</label><br />
|
||||
<select id="Theme" name="Theme" class="large">
|
||||
<option value="default">Default</option>
|
||||
<option value="dark">Dark</option>
|
||||
</select><br />
|
||||
<label for="AutoPlaylists">Genres</label><br />
|
||||
<select id="Genres" name="Genres" class="large"></select><br />
|
||||
<input type="text" id="AutoPlaylists" name="AutoPlaylists" class="large" title="Comma separated list of genres for Auto Playlists"/><br />
|
||||
<label for="AutoAlbumSize">Auto Album Size (Default 15)</label><br />
|
||||
<input type="text" id="AutoAlbumSize" name="AutoAlbumSize" class="large" title="Number of Albums to Get on the Music Library tab"/><br />
|
||||
<label for="AutoPlaylistSize">Auto Playlist Size (Default 25)</label><br />
|
||||
<input type="text" id="AutoPlaylistSize" name="AutoPlaylistSize" class="large" title="Number of Songs to Get on the Playlist tab"/><br />
|
||||
<label for="ApplicationName">Application Name (Default MiniSub)*</label><br />
|
||||
<input type="text" id="ApplicationName" name="ApplicationName" class="large" title="Custom Player Name"/><br />
|
||||
</div>
|
||||
<div class="subsection floatleft">
|
||||
<div class="checkboxes">
|
||||
<fieldset>
|
||||
<legend class="aligncenter">Display</legend>
|
||||
<div class="inputwrap"><input type="checkbox" id="HideAZ" name="HideAZ" value="1" title="Hide A-Z at Bottom of Artists"/></div>
|
||||
<label for="HideAZ">Hide A-Z</label>
|
||||
<div class="clear"></div>
|
||||
<div class="inputwrap"><input type="checkbox" id="ScrollTitle" name="ScrollTitle" value="1" title="Scroll the Title Once"/></div>
|
||||
<label for="ScrollTitle">Scroll Title</label>
|
||||
</fieldset>
|
||||
<div class="clear"></div>
|
||||
<fieldset>
|
||||
<legend class="aligncenter">Advanced</legend>
|
||||
<div class="inputwrap"><input type="checkbox" id="Debug" name="Debug" value="1" title="Enable Debug Mode (Events will be logged to the Javascript Console)"/></div>
|
||||
<label for="Debug">Debug Mode</label>
|
||||
<div class="clear"></div>
|
||||
<div class="inputwrap"><input type="checkbox" id="ForceFlash" name="ForceFlash" value="1" title="Force Flash Plugin for Audio (Option doesn't work with Chrome App)"/></div>
|
||||
<label for="ForceFlash">Force Flash </label>
|
||||
<div class="clear"></div>
|
||||
<div class="inputwrap"><input type="checkbox" id="Protocol" name="Protocol" value="1" title="Enable Cross-Domain AJAX Requests (Use if MiniSub is hosted in a different domain than Subsonic)"/></div>
|
||||
<label for="Protocol">Enable JSONP*</label>
|
||||
</fieldset>
|
||||
<div class="clear"></div>
|
||||
<fieldset>
|
||||
<legend class="aligncenter">HTML5 [Beta]</legend>
|
||||
<span>Notifications</span><br />
|
||||
<div class="clear"></div>
|
||||
<div class="inputwrap"><input type="checkbox" id="Notification_Song" name="Notification_Song" value="1" title="Enable Notifications When Tracks Change"/></div>
|
||||
<label for="Notification_Song">Song Change</label>
|
||||
<div class="clear"></div>
|
||||
<div class="inputwrap"><input type="checkbox" id="Notification_NowPlaying" name="Notification_NowPlaying" value="1" title="Enable Notifications When Other Users Play Songs"/></div>
|
||||
<label for="Notification_Song">Now Playing</label>
|
||||
<div class="clear"></div>
|
||||
<span>Local Storage</span><br />
|
||||
<div class="clear"></div>
|
||||
<div class="inputwrap"><input type="checkbox" id="SaveTrackPosition" name="SaveTrackPosition" value="1" title="Saves Play Queue & Track Position Periodically (Uses HTML5: localStorage)"/></div>
|
||||
<label for="SaveTrackPosition">Save Progress</label>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
<div id="donate" class="subsection floatleft">
|
||||
<h3 class="title">Buy me a <span class="beer">beer</span>! I'd like that :)</h3>
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">
|
||||
<input type="hidden" name="cmd" value="_s-xclick">
|
||||
<input type="hidden" name="hosted_button_id" value="VMTENRSJWQ234">
|
||||
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
|
||||
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
|
||||
</form>
|
||||
<small>*This is a donation to <a href="https://twitter.com/tsquillario" target="_blank">tsquillario</a>, the developer of <a href="https://github.com/tsquillario/MiniSub" target="_blank">MiniSub</a>.
|
||||
<br />Not related to a Subsonic License!</small>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
<div class="subsection floatleft">
|
||||
<h3 class="title">Change Log</h3>
|
||||
<ul id="ChangeLog" class="preferences">
|
||||
|
@ -300,7 +316,13 @@
|
|||
<span class="changes">- </span>
|
||||
</li>
|
||||
-->
|
||||
<li class="log"><span class="version"> - 2.3.6</span>
|
||||
<li class="log"><span class="version">12/21/2012 - 2.3.7</span>
|
||||
<span class="changes">- Added support for the <a href="https://chrome.google.com/webstore/detail/swayfm-unified-music-medi/icckhjgjjompfgoiidainoapgjepncej" target="_blank">Sway.fm Unified Music Media Keys</a> Chrome extension</span>
|
||||
<span class="changes">- Added Artist links</span>
|
||||
<span class="changes">- Fixed click behavior of song notification popup</span>
|
||||
<span class="changes">- Search is now displayed globally</span>
|
||||
</li>
|
||||
<li class="log"><span class="version">12/6/2012 - 2.3.6</span>
|
||||
<span class="changes">- Added Setting to toggle JSONP (This is for cross-domain requests, aka Subsonic is hosted on a different domain than MiniSub)</span>
|
||||
<span class="changes">- Switched back to URL authentication (Including coverArt)</span>
|
||||
</li>
|
||||
|
@ -453,6 +475,7 @@
|
|||
<li>Audio Library - <a href="http://jplayer.org" target="_blank">http://jplayer.org</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
|
@ -465,12 +488,15 @@
|
|||
<div id="Chat">
|
||||
<div class="header"><img src="images/chat_alt_stroke_12x12.png" /> Chat</div>
|
||||
<div id="ChatMsgs"></div>
|
||||
<div class="submit"><img src="images/comment_stroke_gl_12x11.png" /><input type="text" id="ChatMsg" class="chat" title="Hit [Enter] to Post" /></div>
|
||||
</div>
|
||||
<div class="submit"><img src="images/comment_stroke_gl_12x11.png" /><input type="text" id="ChatMsg" class="chat" title="Hit [Enter] to Post" /></div>
|
||||
</div>
|
||||
<!-- Audio Player -->
|
||||
<div class="clear"></div>
|
||||
<div id="player">
|
||||
|
||||
<div class="clear"></div>
|
||||
</div><!-- end #content -->
|
||||
<div id="player">
|
||||
<div id="playerleft" class="floatleft">
|
||||
<div class="playeractions floatleft">
|
||||
<a href="#" class="button" id="PreviousTrack" title="Previous Track"><img src="images/first_24x24.png" /></a>
|
||||
|
@ -512,11 +538,10 @@
|
|||
<div class="error-message"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="preview"></div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div><!-- end #content -->
|
||||
</div><!-- end #container -->
|
||||
</body>
|
||||
</html>
|
||||
|
|
14
js/app.js
14
js/app.js
|
@ -12,7 +12,9 @@ var passwordenc;
|
|||
var server;
|
||||
var smwidth;
|
||||
var apiVersion = '1.6.0';
|
||||
var currentVersion = '2.3.6';
|
||||
var currentVersion = '2.3.7';
|
||||
var applicationName;
|
||||
var unity;
|
||||
|
||||
// Get URL Querystring Parameters
|
||||
var u = getParameterByName('u');
|
||||
|
@ -30,12 +32,16 @@ if (u && p && s) {
|
|||
}
|
||||
if (!getCookie('Server')) {
|
||||
setCookie('Server', s, { expires: 365 });
|
||||
baseURL = getCookie('Server') + '/rest';
|
||||
server = getCookie('Server') + '/rest';
|
||||
baseURL = server;
|
||||
}
|
||||
window.location.href = getPathFromUrl(window.location);
|
||||
}
|
||||
|
||||
var applicationName;
|
||||
if (getCookie('Server')) {
|
||||
server = getCookie('Server') + '/rest';
|
||||
baseURL = server;
|
||||
}
|
||||
if (getCookie('ApplicationName')) {
|
||||
applicationName = getCookie('ApplicationName');
|
||||
} else {
|
||||
|
@ -59,4 +65,4 @@ if (getCookie('Protocol')) {
|
|||
protocol = 'jsonp';
|
||||
}
|
||||
var auth = makeBaseAuth(username, password.substring(4, password.length).hexDecode());
|
||||
baseParams = 'u=' + username + '&p=' + password + '&f=' + protocol;
|
||||
baseParams = 'u=' + username + '&p=' + password + '&f=' + protocol + '&v=' + apiVersion + '&c=' + applicationName;
|
||||
|
|
2322
js/libs/api.js
2322
js/libs/api.js
File diff suppressed because it is too large
Load diff
|
@ -4,7 +4,7 @@ function updateChatMessages() {
|
|||
updater = $.periodic({ period: 1000, decay: 1.5, max_period: 1800000 }, function () {
|
||||
$.ajax({
|
||||
periodic: this,
|
||||
url: baseURL + '/getChatMessages.view?' + baseParams + '&v=' + apiVersion + '&c=' + applicationName + '&since=' + starttime,
|
||||
url: baseURL + '/getChatMessages.view?' + baseParams + '&since=' + starttime,
|
||||
method: 'GET',
|
||||
dataType: protocol,
|
||||
timeout: 10000,
|
||||
|
@ -52,7 +52,7 @@ function addChatMessage(msg) {
|
|||
url: baseURL + '/addChatMessage.view?' + baseParams,
|
||||
dataType: protocol,
|
||||
timeout: 10000,
|
||||
data: { v: apiVersion, c: applicationName, message: msg },
|
||||
data: { message: msg },
|
||||
success: function () {
|
||||
updater.reset();
|
||||
},
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
function generateRowHTML(child, appendto) {
|
||||
var html, isDir, starred, duration, artist, artistId, i;
|
||||
function generateRowHTML(child, appendto, artistid) {
|
||||
var html, isDir, starred, duration, artistid, artist, i;
|
||||
isDir = child.isDir;
|
||||
if (child.starred !== undefined) { starred = true; } else { starred = false; }
|
||||
if (child.duration !== undefined) { duration = child.duration; } else { duration = ''; }
|
||||
if (child.artist !== undefined) { artist = child.artist; } else { artist = ''; }
|
||||
if (typeof child.starred != 'undefined') { starred = true; } else { starred = false; }
|
||||
if (typeof child.duration != 'undefined') { duration = child.duration; } else { duration = ''; }
|
||||
if (typeof child.artist != 'undefined') { artist = child.artist; } else { artist = ''; }
|
||||
//if (typeof child.artistId != 'undefined') { artistid = child.artistId; } else { artistid = ''; }
|
||||
if (isDir === true) {
|
||||
html = generateAlbumHTML(child.id, child.parent, child.coverArt, child.title, artist, child.userRating, starred, child.created);
|
||||
} else {
|
||||
var track;
|
||||
if (child.track === undefined) { track = " "; } else { track = child.track; }
|
||||
html = generateSongHTML(child.id, child.parent, track, child.title, '', artist, child.album, child.coverArt, child.userRating, starred, duration);
|
||||
html = generateSongHTML(child.id, child.parent, artistid, track, child.title, '', artist, child.album, child.coverArt, child.userRating, starred, duration);
|
||||
}
|
||||
return html;
|
||||
}
|
||||
|
@ -21,7 +22,7 @@ function generateAlbumHeaderHTML() {
|
|||
function generateAlbumHTML(childid, parentid, coverart, title, artist, rating, starred, created) {
|
||||
var html;
|
||||
html = '<tr class=\"album\" childid=\"' + childid + '\" parentid=\"' + parentid + '\" userrating=\"' + rating + '\">';
|
||||
html += '<td class=\"itemactions\"><a class=\"add\" href=\"\" title=\"Add To Play Queue\"></a>';
|
||||
html += '<td><div class=\"itemactions\"><a class=\"add\" href=\"\" title=\"Add To Play Queue\"></a>';
|
||||
html += '<a class=\"play\" href=\"\" title=\"Play\"></a>';
|
||||
html += '<a class=\"download\" href=\"\" title=\"Download\"></a>';
|
||||
if (starred) {
|
||||
|
@ -29,14 +30,14 @@ function generateAlbumHTML(childid, parentid, coverart, title, artist, rating, s
|
|||
} else {
|
||||
html += '<a class=\"rate\" href=\"\" title=\"Add To Favorites\"></a>';
|
||||
}
|
||||
html += '</td>';
|
||||
html += '</div></td>';
|
||||
if (coverart == undefined) {
|
||||
html += '<td class=\"albumart\"><img src=\"images/albumdefault_50.jpg\" /></td>';
|
||||
} else {
|
||||
html += '<td class=\"albumart\"><img src=\"' + baseURL + '/getCoverArt.view?' + baseParams + '&v=' + apiVersion + '&c=' + applicationName + '&size=50&id=' + coverart + '\" /></td>';
|
||||
html += '<td class=\"albumart\"><img src=\"' + baseURL + '/getCoverArt.view?' + baseParams + '&size=50&id=' + coverart + '\" /></td>';
|
||||
}
|
||||
html += '<td class=\"album\">' + title + '</td>';
|
||||
html += '<td class=\"artist\">' + artist + '</td>';
|
||||
html += '<td class=\"artist\"><a href=\"#\" >' + artist + '</a></td>';
|
||||
html += '<td class=\"date\">' + $.format.date(new Date(created), "yyyy-MM-dd h:mm a") + '</td>';
|
||||
html += '</tr>';
|
||||
return html;
|
||||
|
@ -46,7 +47,7 @@ function generateSongHeaderHTML() {
|
|||
html = '<tr><th></th><th class=\"type-int\">Track</th><th class=\"type-string\">Title</th><th class=\"type-string\">Artist</th><th class=\"type-string\">Album</th><th class=\"alignright\">Time</th></tr>';
|
||||
return html;
|
||||
}
|
||||
function generateSongHTML(childid, parentid, track, title, description, artist, album, coverart, rating, starred, duration) {
|
||||
function generateSongHTML(childid, parentid, artistid, track, title, description, artist, album, coverart, rating, starred, duration) {
|
||||
var time;
|
||||
if (duration == '') {
|
||||
time = '00:00'
|
||||
|
@ -54,8 +55,8 @@ function generateSongHTML(childid, parentid, track, title, description, artist,
|
|||
time = secondsToTime(duration);
|
||||
}
|
||||
var html;
|
||||
html = '<tr class=\"row song\" id=\"' + childid + '\" childid=\"' + childid + '\" parentid=\"' + parentid + '\" duration=\"' + duration + '\" userrating=\"' + rating + '\">';
|
||||
html += '<td class=\"itemactions\"><a class=\"add\" href=\"\" title=\"Add To Play Queue\"></a>';
|
||||
html = '<tr class=\"row song\" id=\"' + childid + '\" childid=\"' + childid + '\" parentid=\"' + parentid + '\" artistid=\"' + artistid + '\" duration=\"' + duration + '\" userrating=\"' + rating + '\">';
|
||||
html += '<td><div class=\"itemactions\"><a class=\"add\" href=\"\" title=\"Add To Play Queue\"></a>';
|
||||
html += '<a class=\"remove\" href=\"\" title=\"Remove\"></a>';
|
||||
html += '<a class=\"play\" href=\"\" title=\"Play\"></a>';
|
||||
html += '<a class=\"download\" href=\"\" title=\"Download\"></a>';
|
||||
|
@ -64,7 +65,7 @@ function generateSongHTML(childid, parentid, track, title, description, artist,
|
|||
} else {
|
||||
html += '<a class=\"rate\" href=\"\" title=\"Add To Favorites\"></a>';
|
||||
}
|
||||
html += '</td>';
|
||||
html += '</div></td>';
|
||||
html += '<td class=\"track\">' + track + '</td>';
|
||||
if (description != '' && description != null) {
|
||||
html += '<td class=\"title\" title=\"' + toHTML.on(description) + '\">' + title + '</td>';
|
||||
|
@ -77,7 +78,7 @@ function generateSongHTML(childid, parentid, track, title, description, artist,
|
|||
if (coverart == undefined) {
|
||||
coverartSrc = 'images/albumdefault_25.jpg';
|
||||
} else {
|
||||
coverartSrc = baseURL + '/getCoverArt.view?' + baseParams + '&v=' + apiVersion + '&c=' + applicationName + '&size=25&id=' + coverart;
|
||||
coverartSrc = baseURL + '/getCoverArt.view?' + baseParams + '&size=25&id=' + coverart;
|
||||
}
|
||||
html += '<td class=\"album\" data-order-by=\"' + album + '\"><a href="#"><img src=\"' + coverartSrc + '\" />' + album + '</a></td>';
|
||||
html += '<td class=\"time\">' + time + '</td>';
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
var scrobbled = false;
|
||||
var timerid = 0;
|
||||
var marquee;
|
||||
function getSongData(el, songid, albumid, position, loadonly) {
|
||||
var runningVersion = parseVersionString(apiVersion);
|
||||
var minimumVersion = parseVersionString('1.8.0');
|
||||
if (checkVersion(runningVersion, minimumVersion)) {
|
||||
if (debug) { console.log('apiVersion at or above 1.8.0 using getSong.view'); }
|
||||
ajaxUrl = baseURL + '/getSong.view?' + baseParams + '&v=' + apiVersion + '&c=' + applicationName + '&id=' + songid;
|
||||
ajaxUrl = baseURL + '/getSong.view?' + baseParams + '&id=' + songid;
|
||||
} else {
|
||||
if (debug) { console.log('apiVersion below 1.8.0 using getMusicDirectory.view'); }
|
||||
ajaxUrl = baseURL + '/getMusicDirectory.view?' + baseParams + '&v=' + apiVersion + '&c=' + applicationName + '&id=' + albumid; // Deprecated: apiVersion 1.8.0
|
||||
ajaxUrl = baseURL + '/getMusicDirectory.view?' + baseParams + '&id=' + albumid; // Deprecated: apiVersion 1.8.0
|
||||
}
|
||||
if (debug) { console.log(ajaxUrl) }
|
||||
$.ajax({
|
||||
|
@ -86,8 +87,8 @@ function playSong(el, songid, albumid, title, artist, album, coverart, rating, s
|
|||
coverartSrc = 'images/albumdefault_60.jpg';
|
||||
coverartFullSrc = '';
|
||||
} else {
|
||||
coverartSrc = baseURL + '/getCoverArt.view?' + baseParams + '&v=' + apiVersion + '&c=' + applicationName + '&size=60&id=' + coverart;
|
||||
coverartFullSrc = baseURL + '/getCoverArt.view?' + baseParams + '&v=' + apiVersion + '&c=' + applicationName + '&id=' + coverart;
|
||||
coverartSrc = baseURL + '/getCoverArt.view?' + baseParams + '&size=60&id=' + coverart;
|
||||
coverartFullSrc = baseURL + '/getCoverArt.view?' + baseParams + '&id=' + coverart;
|
||||
}
|
||||
$('#coverartimage').attr('href', coverartFullSrc);
|
||||
$('#coverartimage img').attr('src', coverartSrc);
|
||||
|
@ -124,15 +125,25 @@ function playSong(el, songid, albumid, title, artist, album, coverart, rating, s
|
|||
ready: function () {
|
||||
if (suffix == 'oga') {
|
||||
$(this).jPlayer("setMedia", {
|
||||
oga: baseURL + '/stream.view?' + baseParams + '&v=' + apiVersion + '&c=' + applicationName + '&id=' + songid + '&salt=' + salt,
|
||||
oga: baseURL + '/stream.view?' + baseParams + '&id=' + songid + '&salt=' + salt,
|
||||
});
|
||||
} else if (suffix == 'mp3') {
|
||||
$(this).jPlayer("setMedia", {
|
||||
mp3: baseURL + '/stream.view?' + baseParams + '&v=' + apiVersion + '&c=' + applicationName + '&id=' + songid + '&salt=' + salt,
|
||||
mp3: baseURL + '/stream.view?' + baseParams + '&id=' + songid + '&salt=' + salt,
|
||||
});
|
||||
}
|
||||
if (!loadonly) {
|
||||
$(this).jPlayer("play");
|
||||
var playerState = {
|
||||
playing: true,
|
||||
title: title,
|
||||
artist: artist,
|
||||
favorite: false,
|
||||
albumArt: coverartFullSrc
|
||||
}
|
||||
if (unity) {
|
||||
unity.sendState(playerState);
|
||||
}
|
||||
} else {
|
||||
$('#' + songid).addClass('playing');
|
||||
$(this).jPlayer("pause", position);
|
||||
|
@ -241,7 +252,7 @@ function playVideo(id, bitrate) {
|
|||
function scrobbleSong(submission) {
|
||||
var songid = $('#songdetails_song').attr('childid');
|
||||
$.ajax({
|
||||
url: baseURL + '/scrobble.view?' + baseParams + '&v=' + apiVersion + '&c=' + applicationName + '&id=' + songid + "&submission=" + submission,
|
||||
url: baseURL + '/scrobble.view?' + baseParams + '&id=' + songid + "&submission=" + submission,
|
||||
method: 'GET',
|
||||
dataType: protocol,
|
||||
timeout: 10000,
|
||||
|
@ -254,7 +265,7 @@ function scrobbleSong(submission) {
|
|||
}
|
||||
function rateSong(songid, rating) {
|
||||
$.ajax({
|
||||
url: baseURL + '/setRating.view?' + baseParams + '&v=' + apiVersion + '&c=' + applicationName + '&id=' + songid + "&rating=" + rating,
|
||||
url: baseURL + '/setRating.view?' + baseParams + '&id=' + songid + "&rating=" + rating,
|
||||
method: 'GET',
|
||||
dataType: protocol,
|
||||
timeout: 10000,
|
||||
|
@ -267,9 +278,9 @@ function starItem(itemid, starred) {
|
|||
var url;
|
||||
if (itemid !== undefined) {
|
||||
if (starred) {
|
||||
url = baseURL + '/star.view?' + baseParams + '&v=' + apiVersion + '&c=' + applicationName + '&id=' + itemid;
|
||||
url = baseURL + '/star.view?' + baseParams + '&id=' + itemid;
|
||||
} else {
|
||||
url = baseURL + '/unstar.view?' + baseParams + '&v=' + apiVersion + '&c=' + applicationName + '&id=' + itemid;
|
||||
url = baseURL + '/unstar.view?' + baseParams + '&id=' + itemid;
|
||||
}
|
||||
$.ajax({
|
||||
url: url,
|
||||
|
|
|
@ -238,15 +238,16 @@ var timer = null;
|
|||
var scrollMsg = "";
|
||||
var pos = 0;
|
||||
function scrollTitle(text) {
|
||||
if (scrollMsg === "") {
|
||||
if (text === "") {
|
||||
if (scrollMsg == "") {
|
||||
if (text == "") {
|
||||
scrollMsg = document.title;
|
||||
} else {
|
||||
scrollMsg = text;
|
||||
}
|
||||
} else {
|
||||
if (text != undefined && text != scrollMsg) {
|
||||
if (typeof text != 'undefined' && text != scrollMsg) {
|
||||
scrollMsg = text;
|
||||
pos = 0;
|
||||
}
|
||||
}
|
||||
var msg = scrollMsg;
|
||||
|
@ -261,7 +262,7 @@ function scrollTitle(text) {
|
|||
if (pos > ml) {
|
||||
pos = 0;
|
||||
} else {
|
||||
//timer = window.setTimeout("scrollTitle()", speed);
|
||||
timer = window.setTimeout("scrollTitle()", speed);
|
||||
}
|
||||
// To stop timer, clearTimeout(timer);
|
||||
}
|
||||
|
@ -287,6 +288,7 @@ function showNotification(pic, title, text, type, bind) {
|
|||
if (bind = '#NextTrack') {
|
||||
popup.addEventListener('click', function () {
|
||||
$(bind).click();
|
||||
this.cancel();
|
||||
})
|
||||
}
|
||||
notifications.push(popup);
|
||||
|
|
62
js/plugins/UnityShim.js
Normal file
62
js/plugins/UnityShim.js
Normal file
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
* Use this function to create a Unity Music Shim. To use it, simply call setSupports to tell unity
|
||||
* which features you support, give it a callback for actions as documented below,
|
||||
* and notify it when your player state changes.
|
||||
*/
|
||||
var UnityMusicShim = function() {
|
||||
var UnityObj = {};
|
||||
/*
|
||||
* sendState requires an object with any of the following properties.
|
||||
* Call this whenever your player state changes.
|
||||
*
|
||||
* - playing: Boolean whether or not you are currently playing music
|
||||
* - title: String the title of the current song
|
||||
* - artist: String the artist of the current song
|
||||
* - albumArt: String a URL to the album art of the current song. This must be a publically accessible url
|
||||
* - favorite: Boolean whether or not the current song is marked as a favorite
|
||||
* - thumbsUp: Boolean whether or not the current song is marked as thumbs up
|
||||
* - thumbsDown: Boolean whether or not the current song is marked as thumbs down
|
||||
*/
|
||||
UnityObj.sendState = function(state) {
|
||||
var evt = document.createEvent("CustomEvent");
|
||||
evt.initEvent("UnityStateEvent", true, true );
|
||||
document.body.setAttribute('data-unity-state', JSON.stringify(state));
|
||||
document.body.dispatchEvent(evt, state);
|
||||
}
|
||||
|
||||
document.body.addEventListener('UnityActionEvent', function(e) {
|
||||
var action = JSON.parse(document.body.getAttribute('data-unity-action'));
|
||||
if (UnityObj._callbackObject) UnityObj._callbackObject[action]();
|
||||
});
|
||||
|
||||
/*
|
||||
* addCallbackObject requires an object with functions mapping to any features you support.
|
||||
* - playpause: Toggle the paused state of your player.
|
||||
* - next: Skip to the next song.
|
||||
* - previous: Skip to the previous song.
|
||||
* - thumbsUp: Mark (or unmark) this song as thumbs up.
|
||||
* - thumbsDown: Mark (or unmark) this song as thumbs up.
|
||||
* - favorite: Mark (or unmark) this song as a favorite.
|
||||
*/
|
||||
UnityObj.setCallbackObject = function(cbObj) {
|
||||
UnityObj._callbackObject = cbObj;
|
||||
};
|
||||
/*
|
||||
* setSupports requires an object with any of the following features that your player supports.
|
||||
* Pass true for anything you support, and omit any you don't.
|
||||
*
|
||||
* - playpause: Whether you support pausing the song. You must support this to use Unity
|
||||
* - next: Whether you support skipping the current song.
|
||||
* - previous: Whether you support going back to a previous song.
|
||||
* - thumbsUp: Whether you support giving a song a thumbs up.
|
||||
* - thumbsDown: Whether you support giving a song a thumbs down.
|
||||
* - favorite: Whether you support marking song as a favorite.
|
||||
*/
|
||||
UnityObj.setSupports = function(supports) {
|
||||
var evt = document.createEvent("CustomEvent");
|
||||
evt.initEvent("UnitySupportsEvent", true, true );
|
||||
document.body.setAttribute('data-unity-supports', JSON.stringify(supports));
|
||||
document.body.dispatchEvent(evt, supports);
|
||||
}
|
||||
return UnityObj;
|
||||
};
|
|
@ -27,6 +27,8 @@
|
|||
var currentSong = JSON.parse(getCookie("CurrentSong"));
|
||||
getSongData(null, currentSong.songid, currentSong.albumid, currentSong.position, true);
|
||||
loadCurrentPlaylist();
|
||||
updateStatus('#status_Current', countCurrentPlaylist('#CurrentPlaylistContainer'));
|
||||
$('#tabQueue a.button').removeClass('disabled');
|
||||
}
|
||||
resizeContent();
|
||||
});
|
||||
|
@ -42,11 +44,13 @@ function resizeContent() {
|
|||
$('.smsection').css({ 'height': (($(window).height() - 168)) + 'px' });
|
||||
var smheight = $('.smsection').height();
|
||||
var smwidth = $('.smsection').width();
|
||||
$('.tablecontainer').css({ 'width': ((screenwidth - smwidth) - 10) + 'px' });
|
||||
/*
|
||||
$('#BottomContainer').css({ 'top': smheight + 35 + 'px' });
|
||||
if (getCookie('sidebar')) {
|
||||
var tabwidth = $(window).width() - 264;
|
||||
if (tabwidth >= 700) {
|
||||
$('.tabcontent').css({ 'width': tabwidth + 'px' });
|
||||
//$('.tabcontent').css({ 'width': tabwidth + 'px' });
|
||||
}
|
||||
var sbheight = $(window).height() - 152;
|
||||
var sbwidth = $('#SideBar').width();
|
||||
|
@ -56,26 +60,29 @@ function resizeContent() {
|
|||
} else {
|
||||
var tabwidth = $(window).width() - 58;
|
||||
if (tabwidth >= 300) {
|
||||
$('.tabcontent').css({ 'width': tabwidth + 'px' });
|
||||
//$('.tabcontent').css({ 'width': tabwidth + 'px' });
|
||||
$('.status').css({ 'right': 4 + 'px' });
|
||||
}
|
||||
}
|
||||
var tabwidth = $('.tabcontent').width();
|
||||
$('#BreadCrumbContainer, #AlbumContainer, #TrackContainer, #PodcastContainer').css({ 'width': (tabwidth - smwidth - 45) + 'px' });
|
||||
$('#CurrentPlaylistContainer, #VideosContainer').css({ 'width': (tabwidth - 30) + 'px' });
|
||||
$('#player').css({ 'width': tabwidth + 'px' });
|
||||
//$('#player').css({ 'width': tabwidth + 'px' });
|
||||
*/
|
||||
}
|
||||
function resizeSMSection(x) {
|
||||
var screenwidth = $(window).width();
|
||||
var defwidth = 200;
|
||||
var smwidth = $('.smsection').width();
|
||||
var newsmwidth = smwidth + parseInt(x);
|
||||
var newwidth = newsmwidth - defwidth;
|
||||
if (smwidth != newsmwidth && newsmwidth > 150 && newsmwidth < 500) {
|
||||
$('.smsection').css({ 'width': (newsmwidth) + 'px' });
|
||||
$('.actions').css({ 'width': (newsmwidth - 5) + 'px' });
|
||||
//$('.actions').css({ 'width': (newsmwidth - 5) + 'px' });
|
||||
$('#BottomContainer').css({ 'width': (newsmwidth - 23) + 'px' });
|
||||
$('.tablecontainer').css({ 'width': ((screenwidth - newsmwidth) - 10) + 'px' });
|
||||
setCookie('defaultsmwidth', newwidth);
|
||||
var ulwidth = newsmwidth + 6;
|
||||
$('#BreadCrumbContainer, #AlbumContainer, #TrackContainer, #PodcastContainer').css({ 'margin-left': (ulwidth + 15) + 'px' });
|
||||
//$('#BreadCrumbContainer, #AlbumContainer, #TrackContainer, #PodcastContainer').css({ 'margin-left': (ulwidth + 15) + 'px' });
|
||||
}
|
||||
}
|
||||
|
|
412
js/ui-ready.js
412
js/ui-ready.js
|
@ -2,13 +2,13 @@
|
|||
// Inject Basic Auth
|
||||
/*
|
||||
$.ajaxSetup({
|
||||
beforeSend: function (req) {
|
||||
req.setRequestHeader('Authorization', auth);
|
||||
}
|
||||
//headers: { "Authorization": "Basic " + auth }
|
||||
beforeSend: function (req) {
|
||||
req.setRequestHeader('Authorization', auth);
|
||||
}
|
||||
//headers: { "Authorization": "Basic " + auth }
|
||||
});
|
||||
*/
|
||||
// Fill Preferences from Cookies
|
||||
// Fill Settings from Cookies
|
||||
if (getCookie('username')) { $('#Username').val(getCookie('username')); }
|
||||
//$('#Password').val(getCookie('passwordenc'));
|
||||
if (getCookie('AutoPlaylists')) { $('#AutoPlaylists').val(getCookie('AutoPlaylists')); }
|
||||
|
@ -17,11 +17,7 @@
|
|||
if (getCookie('Server')) { $('#Server').val(getCookie('Server')); }
|
||||
if (getCookie('ApplicationName')) { $('#ApplicationName').val(getCookie('ApplicationName')); }
|
||||
|
||||
if (getCookie('Server')) {
|
||||
baseURL = getCookie('Server') + '/rest';
|
||||
}
|
||||
|
||||
// Set Preferences defaults
|
||||
// Set Settings defaults
|
||||
if (getCookie('Theme')) {
|
||||
$('#Theme').val(getCookie('Theme'));
|
||||
var theme = getCookie('Theme');
|
||||
|
@ -76,6 +72,28 @@
|
|||
setCookie('CurrentVersion', currentVersion);
|
||||
}
|
||||
|
||||
// Sway.fm Unity Plugin
|
||||
unity = UnityMusicShim();
|
||||
unity.setSupports({
|
||||
playpause: true,
|
||||
next: true,
|
||||
previous: true
|
||||
});
|
||||
unity.setCallbackObject({
|
||||
pause: function () {
|
||||
if (debug) { console.log("Unity: Recieved playpause command"); }
|
||||
playPauseSong();
|
||||
},
|
||||
next: function () {
|
||||
if (debug) { console.log("Unity: Recieved next command"); }
|
||||
$('#NextTrack').click();
|
||||
},
|
||||
previous: function () {
|
||||
if (debug) { console.log("Unity: Recieved previous command"); }
|
||||
$('#PreviousTrack').click();
|
||||
}
|
||||
});
|
||||
|
||||
// Table Sorting
|
||||
$('#CurrentPlaylistContainer').stupidtable();
|
||||
$('#TrackContainer').stupidtable();
|
||||
|
@ -133,7 +151,7 @@
|
|||
if (debug) { console.log("TAG VIDEOS"); }
|
||||
loadVideos(true);
|
||||
break;
|
||||
case '#tabPreferences':
|
||||
case '#tabSettings':
|
||||
getGenres();
|
||||
break;
|
||||
default:
|
||||
|
@ -144,8 +162,8 @@
|
|||
|
||||
// Tabs
|
||||
$('.tabcontent').hide(); //Hide all content
|
||||
if (!getCookie('username') && !getCookie('passwordenc') && !getCookie('Server')) { // Show Preferences
|
||||
loadTabContent('#tabPreferences');
|
||||
if (!getCookie('username') && !getCookie('passwordenc') && !getCookie('Server')) { // Show Settings
|
||||
loadTabContent('#tabSettings');
|
||||
} else {
|
||||
if (window.location.hash) {
|
||||
var hash = window.location.hash;
|
||||
|
@ -197,13 +215,9 @@
|
|||
$('#Artists').stop().scrollTo(el, 400);
|
||||
}
|
||||
} else if (unicode == 39 || unicode == 176) { // right arrow
|
||||
var next = $('#CurrentPlaylistContainer tr.playing').next();
|
||||
if (!next.length) next = $('#CurrentPlaylistContainer li').first();
|
||||
changeTrack(next);
|
||||
$('#NextTrack').click();
|
||||
} else if (unicode == 37 || unicode == 177) { // back arrow
|
||||
var prev = $('#CurrentPlaylistContainer tr.playing').prev();
|
||||
if (!prev.length) prev = $('#CurrentPlaylistContainer tr').last();
|
||||
changeTrack(prev);
|
||||
$('#PreviousTrack').click();
|
||||
} else if (unicode == 32 || unicode == 179 || unicode == 0179) { // spacebar
|
||||
playPauseSong();
|
||||
return false;
|
||||
|
@ -249,8 +263,7 @@
|
|||
$('#AutoAlbumContainer li').removeClass('selected');
|
||||
$('#ArtistContainer li').removeClass('selected');
|
||||
$(this).addClass('selected');
|
||||
getAlbums($(this).attr("id"), '', '#AlbumContainer tbody');
|
||||
$('#BreadCrumbs').html('<a href=\"\" artistid=\"' + $(this).attr("id") + '\">' + $(this).find('span').text() + '</a>');
|
||||
getMusicDirectory($(this).attr("id"), '', '#AlbumContainer tbody', '');
|
||||
});
|
||||
$('#BottomIndex li a').live('click', function () {
|
||||
var el = 'a[name = "index_' + $(this).text() + '"]';
|
||||
|
@ -268,45 +281,39 @@
|
|||
return false;
|
||||
});
|
||||
$('#BreadCrumbs a').live('click', function () {
|
||||
var artistid = $(this).attr('artistid');
|
||||
var parentid = $(this).attr('parentid');
|
||||
var albumid = $(this).attr('albumid');
|
||||
if (typeof artistid != 'undefined') {
|
||||
getAlbums(artistid, '', '#AlbumContainer tbody');
|
||||
if (typeof parentid != 'undefined') {
|
||||
getMusicDirectory(parentid, '', '#AlbumContainer tbody', '');
|
||||
} else if (typeof albumid != 'undefined') {
|
||||
getAlbums(albumid, '', '#AlbumContainer tbody');
|
||||
parentid = $(this).prev().attr('parentid');
|
||||
getMusicDirectory(albumid, '', '#AlbumContainer tbody', parentid);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
$('tr.album').live('click', function (e) {
|
||||
var albumid = $(this).attr('childid');
|
||||
var album = $(this).find('td.album').text();
|
||||
var artistid = $(this).attr('parentid');
|
||||
var artist = $(this).find('td.artist').text();
|
||||
getAlbums(albumid, '', '#AlbumContainer tbody');
|
||||
var html = '<a href=\"\" artistid=\"' + artistid + '\">' + artist + '</a>';
|
||||
html += ' ><a href=\"\" albumid=\"' + albumid + '\">' + album + '</a>';
|
||||
$('#BreadCrumbs').html(html);
|
||||
getMusicDirectory(albumid, '', '#AlbumContainer tbody', artistid);
|
||||
return false;
|
||||
});
|
||||
$('tr.album a.play').live('click', function (e) {
|
||||
var albumid = $(this).parent().parent().attr('childid');
|
||||
var artistid = $(this).parent().parent().attr('parentid');
|
||||
getAlbums(albumid, 'autoplay', '#CurrentPlaylistContainer');
|
||||
var albumid = $(this).parent().parent().parent().attr('childid');
|
||||
getMusicDirectory(albumid, 'autoplay', '#CurrentPlaylistContainer', '');
|
||||
return false;
|
||||
});
|
||||
$('tr.album a.add').live('click', function (e) {
|
||||
var albumid = $(this).parent().parent().attr('childid');
|
||||
var artistid = $(this).parent().parent().attr('parentid');
|
||||
getAlbums(albumid, 'add', '#CurrentPlaylistContainer');
|
||||
var albumid = $(this).parent().parent().parent().attr('childid');
|
||||
getMusicDirectory(albumid, 'add', '#CurrentPlaylistContainer', '');
|
||||
return false;
|
||||
});
|
||||
$('tr.album a.download').live('click', function (event) {
|
||||
var itemid = $(this).parent().parent().attr('childid');
|
||||
var itemid = $(this).parent().parent().parent().attr('childid');
|
||||
downloadItem(itemid, 'item');
|
||||
return false;
|
||||
});
|
||||
$('tr.album a.rate').live('click', function (event) {
|
||||
var itemid = $(this).parent().parent().attr('childid');
|
||||
var itemid = $(this).parent().parent().parent().attr('childid');
|
||||
//rateSong(itemid, 5);
|
||||
starItem(itemid, true);
|
||||
$(this).removeClass('rate');
|
||||
|
@ -314,13 +321,22 @@
|
|||
return false;
|
||||
});
|
||||
$('tr.album a.favorite').live('click', function (event) {
|
||||
var itemid = $(this).parent().parent().attr('childid');
|
||||
var itemid = $(this).parent().parent().parent().attr('childid');
|
||||
//rateSong(itemid, 0);
|
||||
starItem(itemid, false);
|
||||
$(this).removeClass('favorite');
|
||||
$(this).addClass('rate');
|
||||
return false;
|
||||
});
|
||||
$('tr.album td.artist a').live('click', function (event) {
|
||||
var parentid = $(this).parent().parent().attr('parentid');
|
||||
if (parentid !== "undefined") {
|
||||
$('#AutoAlbumContainer li').removeClass('selected');
|
||||
$('#ArtistContainer li').removeClass('selected');
|
||||
getMusicDirectory(parentid, '', '#AlbumContainer tbody', '');
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
// Track - Click Events
|
||||
// Multiple Select
|
||||
|
@ -354,17 +370,16 @@
|
|||
// Double Click
|
||||
$('table.songlist tr.song').live('dblclick', function (e) {
|
||||
e.preventDefault();
|
||||
//$(this).addClass('playing').siblings().removeClass('playing');
|
||||
var songid = $(this).attr('childid');
|
||||
var albumid = $(this).attr('parentid');
|
||||
getSongData(this, songid, albumid, 0, false);
|
||||
});
|
||||
$('table.songlist tr.song a.play').live('click', function (event) {
|
||||
var songid = $(this).parent().parent().attr('childid');
|
||||
var albumid = $(this).parent().parent().attr('parentid');
|
||||
var songid = $(this).parent().parent().parent().attr('childid');
|
||||
var albumid = $(this).parent().parent().parent().attr('parentid');
|
||||
if (!$('#tabQueue').is(':visible')) {
|
||||
$('#CurrentPlaylistContainer tbody').empty();
|
||||
var track = $(this).parent().parent();
|
||||
var track = $(this).parent().parent().parent();
|
||||
$(track).clone().appendTo('#CurrentPlaylistContainer');
|
||||
id = 0;
|
||||
count = 0;
|
||||
|
@ -380,27 +395,27 @@
|
|||
albumid = $(firstsong).attr('parentid');
|
||||
getSongData(firstsong, songid, albumid, 0, false);
|
||||
} else {
|
||||
getSongData($(this).parent().parent(), songid, albumid, 0, false);
|
||||
getSongData($(this).parent().parent().parent(), songid, albumid, 0, false);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
$('table.songlist tr.song a.download').live('click', function (event) {
|
||||
var itemid = $(this).parent().parent().attr('childid');
|
||||
var itemid = $(this).parent().parent().parent().attr('childid');
|
||||
downloadItem(itemid, 'item');
|
||||
return false;
|
||||
});
|
||||
$('table.songlist tr.song a.add').live('click', function (event) {
|
||||
var track = $(this).parent().parent();
|
||||
var track = $(this).parent().parent().parent();
|
||||
$(track).clone().appendTo('#CurrentPlaylistContainer');
|
||||
return false;
|
||||
});
|
||||
$('table.songlist tr.song a.remove').live('click', function (event) {
|
||||
var track = $(this).parent().parent();
|
||||
var track = $(this).parent().parent().parent();
|
||||
$(track).remove();
|
||||
return false;
|
||||
});
|
||||
$('table.songlist tr.song a.rate').live('click', function (event) {
|
||||
var songid = $(this).parent().parent().attr('childid');
|
||||
var songid = $(this).parent().parent().parent().attr('childid');
|
||||
//rateSong(songid, 5);
|
||||
starItem(songid, true);
|
||||
$(this).removeClass('rate');
|
||||
|
@ -408,7 +423,7 @@
|
|||
return false;
|
||||
});
|
||||
$('table.songlist tr.song a.favorite').live('click', function (event) {
|
||||
var songid = $(this).parent().parent().attr('childid');
|
||||
var songid = $(this).parent().parent().parent().attr('childid');
|
||||
//rateSong(songid, 0);
|
||||
starItem(songid, false);
|
||||
$(this).removeClass('favorite');
|
||||
|
@ -420,21 +435,10 @@
|
|||
if (parentid != '' && parentid !== undefined) {
|
||||
$('#AutoAlbumContainer li').removeClass('selected');
|
||||
$('#ArtistContainer li').removeClass('selected');
|
||||
getAlbums(parentid, 'link', '#AlbumContainer tbody');
|
||||
getMusicDirectory(parentid, 'link', '#AlbumContainer tbody', '');
|
||||
}
|
||||
return false;
|
||||
});
|
||||
/*
|
||||
$('table.songlist tr.song td.artist a').live('click', function (event) {
|
||||
var artistid = $(this).parent().parent().attr('artistid');
|
||||
if (artistid != '' && artistid !== undefined) {
|
||||
$('#AutoAlbumContainer li').removeClass('selected');
|
||||
$('#ArtistContainer li').removeClass('selected');
|
||||
getArtist(artistid, 'link', '#AlbumContainer tbody');
|
||||
}
|
||||
return false;
|
||||
});
|
||||
*/
|
||||
$('li.index').live('click', function (e) {
|
||||
$('#Artists').stop().scrollTo('#auto', 400);
|
||||
return false;
|
||||
|
@ -497,7 +501,6 @@
|
|||
return false;
|
||||
});
|
||||
$('#action_RefreshArtists').click(function () {
|
||||
//loadArtists("", true);
|
||||
if (getCookie('MusicFolders')) {
|
||||
loadArtists(getCookie('MusicFolders'), true);
|
||||
} else {
|
||||
|
@ -505,6 +508,10 @@
|
|||
}
|
||||
return false;
|
||||
});
|
||||
$('#action_RescanLibrary').click(function () {
|
||||
rescanLibrary();
|
||||
return false;
|
||||
});
|
||||
$('#action_IncreaseWidth').click(function () {
|
||||
resizeSMSection(50);
|
||||
return false;
|
||||
|
@ -595,6 +602,7 @@
|
|||
$('#action_Empty').live('click', function () {
|
||||
$('#CurrentPlaylistContainer tbody').empty();
|
||||
deleteCurrentPlaylist();
|
||||
updateStatus('#status_Current', '');
|
||||
return false;
|
||||
});
|
||||
$('#action_AddCurrentToPlaylist').click(function () {
|
||||
|
@ -625,7 +633,7 @@
|
|||
$('#songdetails').click(function (e) {
|
||||
var source = e.target.nodeName;
|
||||
var hash = window.location.hash;
|
||||
if (source != 'A' && hash != '#tabQueue') {
|
||||
if (source != 'A' && source != 'IMG' && hash != '#tabQueue') {
|
||||
loadTabContent('#tabQueue');
|
||||
}
|
||||
});
|
||||
|
@ -705,6 +713,16 @@
|
|||
}
|
||||
return false;
|
||||
});
|
||||
$('#action_CurrentRemoveSongs').click(function () {
|
||||
if (!$(this).hasClass('disabled')) {
|
||||
if ($('#CurrentPlaylist tr.selected').length > 0) {
|
||||
$('#CurrentPlaylist tr.selected').each(function () {
|
||||
$(this).remove();
|
||||
});
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
$('#action_AutoPilot').click(function () {
|
||||
var msg;
|
||||
if (getCookie('AutoPilot')) {
|
||||
|
@ -723,16 +741,34 @@
|
|||
if ($('#CurrentPlaylistContainer tbody').html() == '' && !audio) {
|
||||
$('#CurrentPlaylistContainer tbody').empty();
|
||||
getRandomSongList('autoplay', '#CurrentPlaylistContainer tbody', '', folder);
|
||||
$('#currentActions a.button').removeClass('disabled');
|
||||
$('#tabQueue a.button').removeClass('disabled');
|
||||
} else {
|
||||
getRandomSongList('', '#CurrentPlaylistContainer tbody', '', folder);
|
||||
$('#currentActions a.button').removeClass('disabled');
|
||||
$('#tabQueue a.button').removeClass('disabled');
|
||||
}
|
||||
}
|
||||
$(this).attr("title", msg);
|
||||
updateMessage(msg, true);
|
||||
return false;
|
||||
});
|
||||
var preview = true;
|
||||
$('#action_Preview').click(function () {
|
||||
var msg;
|
||||
if (preview) {
|
||||
//setCookie('Preview', null);
|
||||
previewStarredCoverArt();
|
||||
//$('#action_Preview').addClass('selected');
|
||||
msg = 'Preview On';
|
||||
//preview = false;
|
||||
} else {
|
||||
//setCookie('Preview', true);
|
||||
//$('#action_Preview').removeClass('selected');
|
||||
//msg = 'Preview Off';
|
||||
}
|
||||
$(this).attr("title", msg);
|
||||
updateMessage(msg, true);
|
||||
return false;
|
||||
});
|
||||
|
||||
// Playlist Click Events
|
||||
$('#AutoPlaylistContainer li.item').live('click', function () {
|
||||
|
@ -887,7 +923,12 @@
|
|||
} else {
|
||||
next = $('#AlbumContainer tr.playing').next();
|
||||
}
|
||||
changeTrack(next);
|
||||
//changeTrack(next);
|
||||
if (!changeTrack(next)) {
|
||||
if (getCookie('AutoPilot')) {
|
||||
getRandomSongList('autoplayappend', '#CurrentPlaylistContainer tbody', '', '');
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
$('#PreviousTrack').live('click', function () {
|
||||
|
@ -895,10 +936,21 @@
|
|||
changeTrack(prev);
|
||||
return false;
|
||||
});
|
||||
|
||||
$("a#coverartimage").fancybox({
|
||||
'hideOnContentClick': true,
|
||||
'type': 'image'
|
||||
beforeShow : function() {
|
||||
this.title = $('#songdetails_artist').html();
|
||||
},
|
||||
afterLoad : function() {
|
||||
//this.inner.prepend( '<h1>1. My custom title</h1>' );
|
||||
//this.content = '<h1>2. My custom title</h1>';
|
||||
},
|
||||
hideOnContentClick: true,
|
||||
type: 'image',
|
||||
openEffect: 'none',
|
||||
closeEffect: 'none',
|
||||
});
|
||||
|
||||
$('#songdetails a.rate').live('click', function (event) {
|
||||
var itemid = $('#songdetails_song').attr('childid');
|
||||
if (itemid !== undefined) {
|
||||
|
@ -964,13 +1016,19 @@
|
|||
}
|
||||
});
|
||||
|
||||
// Preferences Click Events
|
||||
$('#SavePreferences').live('click', function () {
|
||||
var username = $('#Username').val();
|
||||
var password = $('#Password').val();
|
||||
setCookie('username', username);
|
||||
if (password != "") {
|
||||
setCookie('passwordenc', 'enc:' + HexEncode(password));
|
||||
// Settings Click Events
|
||||
$('#SaveSettings').live('click', function () {
|
||||
if ($('#Username').val() != "") {
|
||||
username = $('#Username').val();
|
||||
setCookie('username', username);
|
||||
}
|
||||
if ($('#Password').val() != "") {
|
||||
password = 'enc:' + HexEncode($('#Password').val());
|
||||
setCookie('passwordenc', password);
|
||||
}
|
||||
if ($('#Server').val() != "") {
|
||||
server = $('#Server').val();
|
||||
setCookie('Server', server);
|
||||
}
|
||||
var AutoPlaylists = $('#AutoPlaylists').val();
|
||||
setCookie('AutoPlaylists', AutoPlaylists);
|
||||
|
@ -978,16 +1036,103 @@
|
|||
setCookie('AutoAlbumSize', AutoAlbumSize);
|
||||
var AutoPlaylistSize = $('#AutoPlaylistSize').val();
|
||||
setCookie('AutoPlaylistSize', AutoPlaylistSize);
|
||||
var server = $('#Server').val();
|
||||
if (server != "") {
|
||||
setCookie('Server', server);
|
||||
// Application Name
|
||||
if ($('#ApplicationName').val() != "") {
|
||||
applicationName = $('#ApplicationName').val();
|
||||
setCookie('ApplicationName', applicationName);
|
||||
}
|
||||
var applicationname = $('#ApplicationName').val();
|
||||
if (applicationname != "") {
|
||||
setCookie('ApplicationName', applicationname);
|
||||
// Hide AZ
|
||||
if ($('#HideAZ').is(':checked')) {
|
||||
setCookie('HideAZ', '1');
|
||||
$('#BottomContainer').hide();
|
||||
} else {
|
||||
setCookie('HideAZ', null);
|
||||
$('#BottomContainer').show();
|
||||
}
|
||||
updateMessage('Preferences Saved...', true);
|
||||
//location.reload(true);
|
||||
// Song Notification
|
||||
if ($('#Notification_Song').is(':checked')) {
|
||||
requestPermissionIfRequired();
|
||||
if (hasNotificationPermission()) {
|
||||
setCookie('Notification_Song', '1');
|
||||
} else {
|
||||
alert('HTML5 Notifications are not available for your current browser, Sorry :(');
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
setCookie('Notification_Song', null);
|
||||
}
|
||||
// Now Playing Notification
|
||||
if ($('#Notification_NowPlaying').is(':checked')) {
|
||||
requestPermissionIfRequired();
|
||||
if (hasNotificationPermission()) {
|
||||
setCookie('Notification_NowPlaying', '1');
|
||||
} else {
|
||||
alert('HTML5 Notifications are not available for your current browser, Sorry :(');
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
setCookie('Notification_NowPlaying', null);
|
||||
}
|
||||
// Scroll Title
|
||||
if ($('#ScrollTitle').is(':checked')) {
|
||||
setCookie('ScrollTitle', '1');
|
||||
} else {
|
||||
setCookie('ScrollTitle', null);
|
||||
}
|
||||
// Debug
|
||||
if ($('#Debug').is(':checked')) {
|
||||
setCookie('Debug', '1');
|
||||
debug = true;
|
||||
} else {
|
||||
setCookie('Debug', null);
|
||||
debug = false;
|
||||
}
|
||||
// Force Flash
|
||||
if ($('#ForceFlash').is(':checked')) {
|
||||
setCookie('ForceFlash', '1');
|
||||
/*
|
||||
if (confirm('Switching to the Flash audio player requires a page refresh. Would you like to do that now?')) {
|
||||
location.reload(true);
|
||||
} else {
|
||||
}
|
||||
*/
|
||||
} else {
|
||||
setCookie('ForceFlash', null);
|
||||
}
|
||||
// JSONP
|
||||
if ($('#Protocol').is(':checked')) {
|
||||
protocol = 'jsonp';
|
||||
setCookie('Protocol', '1');
|
||||
} else {
|
||||
protocol = 'json';
|
||||
setCookie('Protocol', null);
|
||||
}
|
||||
// Save Progress
|
||||
if ($('#SaveTrackPosition').is(':checked')) {
|
||||
setCookie('SaveTrackPosition', '1');
|
||||
var audio = typeof $("#playdeck").data("jPlayer") != 'undefined' ? true : false;
|
||||
if (audio) {
|
||||
saveTrackPosition();
|
||||
}
|
||||
} else {
|
||||
setCookie('SaveTrackPosition', null);
|
||||
setCookie('CurrentSong', null);
|
||||
deleteCurrentPlaylist();
|
||||
}
|
||||
|
||||
updateBaseParams();
|
||||
alert('Settings Saved');
|
||||
return false;
|
||||
});
|
||||
$('#ResetSettings').live('click', function () {
|
||||
setCookie('username', null);
|
||||
setCookie('password', null);
|
||||
setCookie('AutoAlbumSize', null);
|
||||
setCookie('AutoPlaylistSize', null);
|
||||
setCookie('Server', null);
|
||||
setCookie('ApplicationName', null);
|
||||
setCookie('HideAZ', null);
|
||||
location.reload(true);
|
||||
});
|
||||
$('#Theme').live('change', function () {
|
||||
var theme = $(this).val();
|
||||
|
@ -1005,103 +1150,6 @@
|
|||
}
|
||||
$('#AutoPlaylists').val(newGenres);
|
||||
});
|
||||
$('#HideAZ').live('click', function () {
|
||||
if ($('#HideAZ').is(':checked')) {
|
||||
setCookie('HideAZ', '1');
|
||||
$('#BottomContainer').hide();
|
||||
} else {
|
||||
setCookie('HideAZ', null);
|
||||
$('#BottomContainer').show();
|
||||
}
|
||||
});
|
||||
$('#Notification_Song').live('click', function () {
|
||||
if ($('#Notification_Song').is(':checked')) {
|
||||
requestPermissionIfRequired();
|
||||
if (hasNotificationPermission()) {
|
||||
setCookie('Notification_Song', '1');
|
||||
} else {
|
||||
alert('HTML5 Notifications are not available for your current browser, Sorry :(');
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
setCookie('Notification_Song', null);
|
||||
}
|
||||
});
|
||||
$('#Notification_NowPlaying').live('click', function () {
|
||||
if ($('#Notification_NowPlaying').is(':checked')) {
|
||||
requestPermissionIfRequired();
|
||||
if (hasNotificationPermission()) {
|
||||
setCookie('Notification_NowPlaying', '1');
|
||||
} else {
|
||||
alert('HTML5 Notifications are not available for your current browser, Sorry :(');
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
setCookie('Notification_NowPlaying', null);
|
||||
}
|
||||
});
|
||||
$('#ScrollTitle').live('click', function () {
|
||||
if ($('#ScrollTitle').is(':checked')) {
|
||||
setCookie('ScrollTitle', '1');
|
||||
} else {
|
||||
setCookie('ScrollTitle', null);
|
||||
}
|
||||
});
|
||||
$('#Debug').live('click', function () {
|
||||
if ($('#Debug').is(':checked')) {
|
||||
setCookie('Debug', '1');
|
||||
debug = true;
|
||||
} else {
|
||||
setCookie('Debug', null);
|
||||
debug = false;
|
||||
}
|
||||
});
|
||||
$('#ForceFlash').live('click', function () {
|
||||
if ($('#ForceFlash').is(':checked')) {
|
||||
setCookie('ForceFlash', '1');
|
||||
} else {
|
||||
setCookie('ForceFlash', null);
|
||||
}
|
||||
//location.reload(true);
|
||||
});
|
||||
$('#Protocol').live('click', function () {
|
||||
if ($('#Protocol').is(':checked')) {
|
||||
setCookie('Protocol', '1');
|
||||
} else {
|
||||
setCookie('Protocol', null);
|
||||
}
|
||||
//location.reload(true);
|
||||
});
|
||||
$('#SaveTrackPosition').live('click', function () {
|
||||
if ($('#SaveTrackPosition').is(':checked')) {
|
||||
setCookie('SaveTrackPosition', '1');
|
||||
var audio = typeof $("#playdeck").data("jPlayer") != 'undefined' ? true : false;
|
||||
if (audio) {
|
||||
saveTrackPosition();
|
||||
}
|
||||
} else {
|
||||
setCookie('SaveTrackPosition', null);
|
||||
setCookie('CurrentSong', null);
|
||||
deleteCurrentPlaylist();
|
||||
}
|
||||
//location.reload(true);
|
||||
});
|
||||
$('input#Password').keydown(function (e) {
|
||||
var unicode = e.charCode ? e.charCode : e.keyCode;
|
||||
if (unicode == 13) {
|
||||
$('#SavePreferences').click();
|
||||
}
|
||||
});
|
||||
$('#ResetPreferences').live('click', function () {
|
||||
setCookie('username', null);
|
||||
setCookie('password', null);
|
||||
setCookie('AutoAlbumSize', null);
|
||||
setCookie('AutoPlaylistSize', null);
|
||||
setCookie('Server', null);
|
||||
setCookie('ApplicationName', null);
|
||||
setCookie('HideAZ', null);
|
||||
//location.reload(true);
|
||||
});
|
||||
$('#ChangeLogShowMore').live('click', function () {
|
||||
$('ul#ChangeLog li.log').each(function (i, el) {
|
||||
$(el).show();
|
||||
|
@ -1122,5 +1170,5 @@
|
|||
$("#TrackContainer tbody").sortable({
|
||||
helper: fixHelper
|
||||
}).disableSelection();
|
||||
}); // End document.ready
|
||||
}); // End document.ready
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"manifest_version": 2,
|
||||
"name": "MiniSub",
|
||||
"description": "MiniSub - HTML5 Mini Player for Subsonic",
|
||||
"version": "2.3.6",
|
||||
"version": "2.3.7",
|
||||
"app": {
|
||||
"launch": {
|
||||
"local_path": "index.html"
|
||||
|
|
BIN
style/Dark (LAITWILPC010-64's conflicted copy 2012-12-19).css
Normal file
BIN
style/Dark (LAITWILPC010-64's conflicted copy 2012-12-19).css
Normal file
Binary file not shown.
|
@ -52,43 +52,23 @@ span.apiversion
|
|||
border-right: 1px solid #232323;
|
||||
border-bottom: none;
|
||||
}
|
||||
#nav a.first
|
||||
{
|
||||
border-top: 1px solid #232323;
|
||||
}
|
||||
#nav a.first:hover
|
||||
{
|
||||
border: 1px solid #5A5A5A;
|
||||
border-right: 1px solid #232323;
|
||||
border-bottom: none;
|
||||
}
|
||||
#nav a.last
|
||||
{
|
||||
border-bottom: 1px solid #232323;
|
||||
}
|
||||
#nav a.last:hover
|
||||
{
|
||||
border: 1px solid #5A5A5A;
|
||||
border-right: 1px solid #232323;
|
||||
border-bottom: none;
|
||||
}
|
||||
#nav a.active
|
||||
{
|
||||
color: #545454;
|
||||
background: #2E2E2E;
|
||||
border: 1px solid #1D1D1D;
|
||||
border-right: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
#nav a.active:hover
|
||||
{
|
||||
color: #545454;
|
||||
border: 1px solid #5A5A5A;
|
||||
border-right: none;
|
||||
border-bottom: 1px solid #1D1D1D;
|
||||
border: 1px solid #1D1D1D;
|
||||
border-bottom: none;
|
||||
}
|
||||
#SideBar
|
||||
{
|
||||
background: #2e2e2e;
|
||||
background: #292929;
|
||||
border: 1px solid #1d1d1d;
|
||||
}
|
||||
#NowPlaying, #ChatMsgs
|
||||
|
@ -301,6 +281,13 @@ ul.preferences li em
|
|||
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
|
||||
color: #f2f2f2;
|
||||
}
|
||||
.form {
|
||||
border: 1px solid #1A1A1A;
|
||||
background: #292929;
|
||||
overflow: auto;
|
||||
float: left;
|
||||
margin: 10px;
|
||||
}
|
||||
.inputwrap
|
||||
{
|
||||
border: 1px solid #1d1d1d;
|
||||
|
@ -315,10 +302,18 @@ label
|
|||
}
|
||||
#donate {
|
||||
background: #232323;
|
||||
border: 1px solid #1D1D1D;
|
||||
}
|
||||
::-webkit-scrollbar-track {
|
||||
-webkit-box-shadow: inset 0 0 2px rgba(0,0,0,0.2);
|
||||
-webkit-border-radius: 10px;
|
||||
background: #252525;
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: rgba(34, 34, 34, 0.8);
|
||||
border: 1px solid #1a1a1a;
|
||||
-webkit-border-radius: 10px;
|
||||
border-radius: 10px;
|
||||
background: rgba(29, 29, 29, 0.8);
|
||||
-webkit-box-shadow: inset 0 0 2px rgba(0,0,0,0.2);
|
||||
}
|
||||
::-webkit-scrollbar-thumb:window-inactive {
|
||||
background: rgba(34, 34, 34, 0.2);
|
||||
|
|
258
style/Style.css
258
style/Style.css
|
@ -1,3 +1,4 @@
|
|||
html, body { height: 100%; }
|
||||
body
|
||||
{
|
||||
font: 100% Trebuchet MS, Arial, Helvetica, sans-serif;
|
||||
|
@ -6,6 +7,7 @@ body
|
|||
padding: 0;
|
||||
text-align: center;
|
||||
color: #5b5b4e;
|
||||
height: 100%;
|
||||
}
|
||||
img
|
||||
{
|
||||
|
@ -54,28 +56,33 @@ span.apiversion
|
|||
|
||||
#container {
|
||||
text-align: left;
|
||||
/*min-height: 600px;*/
|
||||
min-width: 810px;
|
||||
}
|
||||
#nav
|
||||
{
|
||||
height: 127px;
|
||||
position: absolute;
|
||||
top: 44px;
|
||||
left: 0px;
|
||||
z-index: 99;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
a#logo
|
||||
{
|
||||
position: absolute;
|
||||
width: 54px;
|
||||
height: 36px;
|
||||
background: url('../images/subsonic_36.png') no-repeat 6px 4px;
|
||||
cursor: pointer;
|
||||
background: url('../images/subsonic_36.png') no-repeat 5px 1px;
|
||||
cursor: pointer;
|
||||
top: 0;
|
||||
right: 248px;
|
||||
}
|
||||
a#logo:hover
|
||||
{
|
||||
background: url('../images/subsonic_dn_36.png') no-repeat 6px 4px;
|
||||
background: url('../images/subsonic_dn_36.png') no-repeat 5px 1px;
|
||||
}
|
||||
#nav
|
||||
{
|
||||
height: 54px;
|
||||
width: 270px;
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
left: 0;
|
||||
z-index: 99;
|
||||
}
|
||||
#nav ul
|
||||
{
|
||||
|
@ -85,12 +92,14 @@ a#logo:hover
|
|||
}
|
||||
#nav li
|
||||
{
|
||||
width: 50px;
|
||||
float: left;
|
||||
margin: 0 1px 0 0;
|
||||
}
|
||||
#nav a
|
||||
{
|
||||
display: block;
|
||||
padding: 13px 9px 13px 15px;
|
||||
padding: 8px 12px;
|
||||
height: 21px;
|
||||
color: #7C7C7C;
|
||||
letter-spacing: -1px;
|
||||
font-weight: bold;
|
||||
|
@ -107,37 +116,20 @@ a#logo:hover
|
|||
border: 1px solid #D5D5D5;
|
||||
border-bottom: none;
|
||||
}
|
||||
#nav a.first
|
||||
{
|
||||
border-top: 1px solid #E4E4E4;
|
||||
}
|
||||
#nav a.first:hover
|
||||
{
|
||||
color: #545454;
|
||||
border: 1px solid #D5D5D5;
|
||||
border-bottom: none;
|
||||
}
|
||||
#nav a.last
|
||||
{
|
||||
border-bottom: 1px solid #E4E4E4;
|
||||
}
|
||||
#nav a.last:hover
|
||||
{
|
||||
color: #545454;
|
||||
border: 1px solid #D5D5D5;
|
||||
}
|
||||
|
||||
#nav a.active
|
||||
{
|
||||
color: #545454;
|
||||
background: #ffffff;
|
||||
border: 1px solid #CBCBCB;
|
||||
border-right: none;
|
||||
border-bottom: none;
|
||||
padding: 8px 12px 9px 12px;
|
||||
}
|
||||
#nav a.active:hover
|
||||
{
|
||||
color: #545454;
|
||||
border: 1px solid #CBCBCB;
|
||||
border-right: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
#nav a img
|
||||
{
|
||||
|
@ -149,11 +141,20 @@ a#logo:hover
|
|||
display: block;
|
||||
margin: 3px 0 4px 1px;
|
||||
}
|
||||
|
||||
#search
|
||||
{
|
||||
height: 30px;
|
||||
width: 250px;
|
||||
position: absolute;
|
||||
top: 6px;
|
||||
right: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
#content
|
||||
{
|
||||
background: #EDEDED;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
#content h2
|
||||
{
|
||||
|
@ -163,45 +164,42 @@ a#logo:hover
|
|||
}
|
||||
.tabcontent
|
||||
{
|
||||
min-height: 400px;
|
||||
min-width: 900px;
|
||||
margin-left: 53px;
|
||||
margin: 0;
|
||||
}
|
||||
.smsection
|
||||
{
|
||||
width: 200px;
|
||||
min-height: 360px;
|
||||
padding: 0 0 40px 0;
|
||||
float: left;
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
background: #fff;
|
||||
/*border-right: 1px solid #f2f2f2;*/
|
||||
position: absolute;
|
||||
top: 39px;
|
||||
left: 60px;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 4px;
|
||||
outline: none;
|
||||
}
|
||||
.lgsection
|
||||
{
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
min-height: 400px;
|
||||
overflow: auto;
|
||||
background: #fff;
|
||||
border: 1px solid #cbcbcb;
|
||||
margin-top: 4px;
|
||||
border-top: 1px solid #cbcbcb;
|
||||
border-bottom: 1px solid #cbcbcb;
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
bottom: 84px;
|
||||
width: 100%;
|
||||
}
|
||||
.fullsection
|
||||
{
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
min-width: 450px;
|
||||
min-height: 400px;
|
||||
overflow: auto;
|
||||
background: #fff;
|
||||
border: 1px solid #cbcbcb;
|
||||
margin-top: 4px;
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
bottom: 84px;
|
||||
width: 100%;
|
||||
}
|
||||
.padder
|
||||
{
|
||||
|
@ -228,7 +226,7 @@ a#logo:hover
|
|||
display: none;
|
||||
height: 35px;
|
||||
width: 40px;
|
||||
margin: 0 0 0 7px;
|
||||
margin: 0 0 0 2px;
|
||||
background: url('../images/ajax-loader.gif') no-repeat center center;
|
||||
float: left;
|
||||
}
|
||||
|
@ -253,7 +251,7 @@ a#logo:hover
|
|||
border: 1px solid #A6CBF3;
|
||||
border-radius: 4px 4px 4px 4px;
|
||||
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
|
||||
opacity: 0.8;
|
||||
opacity: 0.95;
|
||||
cursor: pointer;
|
||||
}
|
||||
.status
|
||||
|
@ -264,8 +262,8 @@ a#logo:hover
|
|||
text-align: center;
|
||||
position: absolute;
|
||||
z-index: 99;
|
||||
bottom: 87px;
|
||||
right: 4px;
|
||||
bottom: 85px;
|
||||
right: 0;
|
||||
background: #f2f2f2;
|
||||
padding: 2px 10px;
|
||||
border-top: 1px solid #CBCBCB;
|
||||
|
@ -381,7 +379,7 @@ ul.mainlist li.item a.add:hover
|
|||
}
|
||||
#BreadCrumbContainer
|
||||
{
|
||||
margin: 5px 5px 0 221px;
|
||||
margin: 5px 5px 0 0;
|
||||
font-size: 12px;
|
||||
height: 22px;
|
||||
}
|
||||
|
@ -399,6 +397,10 @@ ul.mainlist li.item a.add:hover
|
|||
padding: 2px 0px 2px 0;
|
||||
float: left;
|
||||
}
|
||||
#BreadCrumbs span
|
||||
{
|
||||
margin: 0 2px 0 6px;
|
||||
}
|
||||
#BreadCrumbs a
|
||||
{
|
||||
margin: 0 2px 0 6px;
|
||||
|
@ -417,11 +419,11 @@ ul.mainlist li.item a.add:hover
|
|||
|
||||
#AlbumContainer
|
||||
{
|
||||
margin: 0 5px 5px 221px;
|
||||
margin: 0 5px 5px 0;
|
||||
}
|
||||
#TrackContainer, #PodcastContainer
|
||||
{
|
||||
margin: 5px 5px 5px 221px;
|
||||
margin: 5px 5px 5px 0;
|
||||
}
|
||||
#CurrentPlaylistContainer tr.song a.add
|
||||
{
|
||||
|
@ -440,6 +442,26 @@ ul.mainlist li.item a.add:hover
|
|||
{
|
||||
background: url('../images/minus_8x2.png') no-repeat 6px center #DEECFB;
|
||||
}
|
||||
.tablecontainer
|
||||
{
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
width: auto;
|
||||
}
|
||||
.tablecontainerfull
|
||||
{
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
width: 100%;
|
||||
}
|
||||
table.songlist
|
||||
{
|
||||
margin: 5px;
|
||||
|
@ -488,10 +510,24 @@ table.songlist tr.album td.title
|
|||
table.songlist tr.album td.artist
|
||||
{
|
||||
}
|
||||
table.songlist tr.album td.itemactions
|
||||
table.songlist tr.album td.artist a
|
||||
{
|
||||
width: 85px;
|
||||
padding-left: 10px;
|
||||
color: #829FC0;
|
||||
text-decoration: none;
|
||||
float: left;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
table.songlist tr.album td.artist a:hover
|
||||
{
|
||||
text-decoration: underline;
|
||||
}
|
||||
table.songlist tr.album .itemactions
|
||||
{
|
||||
width: 80px;
|
||||
padding: 0 10px;
|
||||
margin: 0;
|
||||
float: right;
|
||||
}
|
||||
table.songlist tr.album td.albumart
|
||||
{
|
||||
|
@ -561,7 +597,6 @@ table.songlist tr.album a.favorite
|
|||
float: left;
|
||||
height: 50px;
|
||||
width: 20px;
|
||||
margin: 0 5px 0 0;
|
||||
display: block;
|
||||
background: url('../images/star_yo_12x12.png') 2px center no-repeat;
|
||||
}
|
||||
|
@ -576,13 +611,12 @@ table.songlist tr.row td
|
|||
font-size: 13px;
|
||||
padding: 9px 10px;
|
||||
}
|
||||
table.songlist tr.row td.itemactions
|
||||
table.songlist tr.row .itemactions
|
||||
{
|
||||
width: 85px;
|
||||
padding-left: 26px;
|
||||
width: 80px;
|
||||
padding: 0 10px;
|
||||
/*display: block;*/
|
||||
margin: auto 0;
|
||||
height: 18px;
|
||||
float: right;
|
||||
}
|
||||
table.songlist tr.row td.track
|
||||
{
|
||||
|
@ -712,7 +746,6 @@ table.songlist tr.selected td.album a
|
|||
}
|
||||
#ArtistContainer
|
||||
{
|
||||
min-height: 360px;
|
||||
}
|
||||
#BottomContainer
|
||||
{
|
||||
|
@ -746,22 +779,17 @@ table.songlist tr.selected td.album a
|
|||
}
|
||||
.actions
|
||||
{
|
||||
width: 195px;
|
||||
height: 29px;
|
||||
margin: 4px 0 0 0;
|
||||
height: 30px;
|
||||
margin: 6px 20px 0 265px;
|
||||
padding: 0 0 0 5px;
|
||||
}
|
||||
.subactions
|
||||
{
|
||||
height: 29px;
|
||||
width: 660px;
|
||||
margin: 4px 0 0 0;
|
||||
margin: 5px 0 0 0;
|
||||
padding: 0 0 0 5px;
|
||||
}
|
||||
#songActions
|
||||
{
|
||||
float: left;
|
||||
}
|
||||
.submenu
|
||||
{
|
||||
position: absolute;
|
||||
|
@ -804,12 +832,15 @@ table.songlist tr.selected td.album a
|
|||
{
|
||||
display: none;
|
||||
width: 200px;
|
||||
position: fixed;
|
||||
top: 37px;
|
||||
right: 4px;
|
||||
background: none repeat scroll 0 0 #FFFFFF;
|
||||
min-height: 350px;
|
||||
background: none repeat scroll 0 0 #fcfcfc;
|
||||
border: 1px solid #CBCBCB;
|
||||
min-height: 400px;
|
||||
border-right: none;
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
bottom: 200px;
|
||||
right: 0;
|
||||
opacity: .85;
|
||||
}
|
||||
#SideBar .header
|
||||
{
|
||||
|
@ -819,14 +850,24 @@ table.songlist tr.selected td.album a
|
|||
font-variant: small-caps;
|
||||
font-weight: bold;
|
||||
}
|
||||
#SideBar .submit
|
||||
{
|
||||
padding: 0 2px;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
}
|
||||
#ChatMsgs
|
||||
{
|
||||
border-bottom: 1px solid #F2F2F2;
|
||||
padding: 5px;
|
||||
margin: 0 0 2px;
|
||||
text-align: right;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
position: absolute;
|
||||
width: 192px;
|
||||
bottom: 38px;
|
||||
top: 220px;
|
||||
border-bottom: 1px solid #F2F2F2;
|
||||
}
|
||||
#ChatMsgs .msg
|
||||
{
|
||||
|
@ -846,10 +887,7 @@ table.songlist tr.selected td.album a
|
|||
font-size: 9px;
|
||||
color: #CAD0D7;
|
||||
}
|
||||
#Chat .submit
|
||||
{
|
||||
padding: 0 2px;
|
||||
}
|
||||
|
||||
#submenu_NowPlaying
|
||||
{
|
||||
left: 605px;
|
||||
|
@ -890,13 +928,31 @@ table.songlist tr.selected td.album a
|
|||
{
|
||||
}
|
||||
|
||||
#queue
|
||||
{
|
||||
background: #fff;
|
||||
border-top: 1px solid #cbcbcb;
|
||||
border-bottom: 1px solid #cbcbcb;
|
||||
margin: 4px 0;
|
||||
height: 75px;
|
||||
position: absolute;
|
||||
bottom: 0; /* Sit it on the bottom */
|
||||
left: 0;
|
||||
width: 100%; /* As wide as it's allowed */
|
||||
}
|
||||
|
||||
/* Player Style */
|
||||
#player
|
||||
{
|
||||
background: #fff;
|
||||
border: 1px solid #cbcbcb;
|
||||
margin: 2px 0 5px 0;
|
||||
margin-left: 53px;
|
||||
border-top: 1px solid #cbcbcb;
|
||||
border-bottom: 1px solid #cbcbcb;
|
||||
margin: 4px 0;
|
||||
height: 75px;
|
||||
position: absolute;
|
||||
bottom: 0; /* Sit it on the bottom */
|
||||
left: 0;
|
||||
width: 100%; /* As wide as it's allowed */
|
||||
}
|
||||
#audiocontainer
|
||||
{
|
||||
|
@ -994,6 +1050,7 @@ table.songlist tr.selected td.album a
|
|||
float: left;
|
||||
padding: 2px;
|
||||
}
|
||||
#preview { display: none; }
|
||||
#songdetails
|
||||
{
|
||||
width: 322px;
|
||||
|
@ -1275,6 +1332,7 @@ a.selected {
|
|||
a.disabled {
|
||||
color: #B7B7B7;
|
||||
background: #f1f1f1;
|
||||
opacity: .6;
|
||||
}
|
||||
a.disabled:hover {
|
||||
color: #B7B7B7;
|
||||
|
@ -1296,12 +1354,13 @@ a.button img.pad { margin: 1px 0 -1px 0; }
|
|||
::-webkit-scrollbar-track {
|
||||
-webkit-box-shadow: inset 0 0 2px rgba(0,0,0,0.2);
|
||||
-webkit-border-radius: 10px;
|
||||
background: #f2f2f2;
|
||||
border-radius: 10px;
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
-webkit-border-radius: 10px;
|
||||
border-radius: 10px;
|
||||
background: rgba(237, 237, 237, 0.4);
|
||||
background: rgba(201, 201, 201, 0.4);
|
||||
-webkit-box-shadow: inset 0 0 2px rgba(0,0,0,0.2);
|
||||
}
|
||||
::-webkit-scrollbar-thumb:window-inactive {
|
||||
|
@ -1309,6 +1368,13 @@ a.button img.pad { margin: 1px 0 -1px 0; }
|
|||
}
|
||||
|
||||
/* Form Style */
|
||||
.form {
|
||||
border: 1px solid #f2f2f2;
|
||||
background: #fcfcfc;
|
||||
overflow: auto;
|
||||
float: left;
|
||||
margin: 10px;
|
||||
}
|
||||
input
|
||||
{
|
||||
font-family: Calibri, Arial, Verdana;
|
||||
|
@ -1363,6 +1429,10 @@ select#MusicFolders
|
|||
{
|
||||
margin: 0 5px;
|
||||
}
|
||||
.submitsettings {
|
||||
margin: 0 40px 20px 40px;
|
||||
float: right;
|
||||
}
|
||||
label
|
||||
{
|
||||
font-size: 12px;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue