2013-11-04 17:18:38 +00:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "utf-8" >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
2018-05-14 23:13:43 +00:00
< meta name = "description" content = "myMPD - fast and lightweight MPD webclient" >
< meta name = "author" content = "mail@jcgames.de" >
< title > myMPD< / title >
2013-11-04 17:18:38 +00:00
2016-02-13 20:58:43 +00:00
< link href = "css/bootstrap.css" rel = "stylesheet" >
2013-11-04 17:18:38 +00:00
2016-02-13 20:58:43 +00:00
< link href = "css/mpd.css" rel = "stylesheet" >
2013-12-03 20:48:49 +00:00
< link href = "assets/favicon.ico" rel = "shortcut icon" type = "image/vnd.microsoft.icon" >
2015-10-22 15:48:42 +00:00
< script src = "js/modernizr-custom.js" > < / script >
2018-05-14 23:13:43 +00:00
2018-05-13 23:06:12 +00:00
< meta name = "apple-mobile-web-app-capable" content = "yes" / >
< meta name = "apple-mobile-web-app-status-bar-style" content = "black" / >
< link rel = "apple-touch-icon" href = "assets/appicon.png" / >
2013-11-05 13:59:12 +00:00
< / head >
< body >
2018-05-14 23:13:43 +00:00
< header >
2018-05-16 23:19:03 +00:00
< nav class = "navbar navbar-expand navbar-dark fixed-top bg-dark" >
< div class = "container justify-content-start" >
< div class = "dropdown" >
< a class = "navbar-brand dropdown-toggle" data-toggle = "dropdown" href = "/#/playing/" > < span style = "font-size:24px;float:left;margin-right:5px;" class = "material-icons" > play_circle_outline< / span > myMPD< / a >
< div class = "dropdown-menu" aria-labelledby = "dropdownMenuButton" >
< form id = "search" class = "form-inline mt-2 mt-md-0" role = "search" >
< input type = "text" class = "form-control mr-sm-2" placeholder = "Search" >
< / form >
< div class = "dropdown-divider" > < / div >
< a id = "nav-dirble" class = "dropdown-item" href = "#/dirble/" > Dirble< / a >
< a id = "nav-addstream" class = "dropdown-item" href = "#" data-toggle = "modal" data-target = "#addstream" > Add Stream< / a >
< a id = "nav-settings" class = "dropdown-item" href = "#" data-toggle = "modal" data-target = "#settings" onclick = "getHost();" > Settings< / a >
< div class = "dropdown-divider" > < / div >
< div id = "btn-outputs-block" > < / div >
< / div >
< / div >
< / div >
< div class = "container justify-content-between" >
2018-05-14 23:13:43 +00:00
< div class = "btn-toolbar" role = "toolbar" >
< div class = "btn-group mr-2" role = "group" >
< button type = "button" class = "btn btn-secondary" onclick = "socket.send('MPD_API_SET_PREV');" >
< span class = "material-icons" > skip_previous< / span >
2013-11-05 13:59:12 +00:00
< / button >
2018-05-16 23:19:03 +00:00
<!--
2018-05-14 23:13:43 +00:00
< button type = "button" class = "btn btn-secondary" onclick = "socket.send('MPD_API_SET_STOP');" >
< span id = "stop-icon" class = "material-icons" > stop< / span >
2014-01-16 17:32:20 +00:00
< / button >
2018-05-16 23:19:03 +00:00
-->
2018-05-14 23:13:43 +00:00
< button type = "button" class = "btn btn-secondary" onclick = "clickPlay();" >
< span id = "play-icon" class = "material-icons" > pause< / span >
2013-11-05 13:59:12 +00:00
< / button >
2018-05-14 23:13:43 +00:00
< button type = "button" class = "btn btn-secondary" onclick = "socket.send('MPD_API_SET_NEXT');" >
< span class = "material-icons" > skip_next< / span >
2013-11-04 17:18:38 +00:00
< / button >
< / div >
2018-05-07 21:25:17 +00:00
2018-05-14 23:13:43 +00:00
< div class = "btn-group mr-2" >
< div class = "btn btn-secondary" >
< span id = "volume-icon" class = "material-icons" > volume_up< / span >
2014-01-16 17:32:20 +00:00
< div id = "volumeslider" > < / div >
2013-11-07 09:09:40 +00:00
< / div >
2013-11-05 13:59:12 +00:00
< / div >
2018-04-16 19:22:07 +00:00
2018-05-14 23:13:43 +00:00
< div class = "btn-group" role = "group" >
2015-11-23 10:10:11 +00:00
< audio id = "player" preload = "none" > < / audio >
2014-05-24 16:23:45 +00:00
< button type = "button" class = "btn btn-default" onclick = "clickLocalPlay()" >
2015-10-09 10:06:41 +00:00
< span id = "localplay-icon" class = "glyphicon glyphicon-play" > < / span >
2014-05-24 16:23:45 +00:00
< / button >
2015-10-21 17:24:38 +00:00
< button type = "button" class = "btn btn-default" onclick = "window.open('/player.html');" >
< span id = "localplay-icon" class = "glyphicon glyphicon-new-window" > < / span >
< / button >
2013-11-05 13:59:12 +00:00
< / div >
2018-04-04 17:40:12 +00:00
2018-05-16 23:19:03 +00:00
< / div >
< / div >
< div class = "container justify-content-end" > < / div >
< / nav >
< / header >
< main role = "main" class = "container" >
< div class = "notifications top-right" > < / div >
< div class = "card" >
< div class = "card-header" >
< span id = "panel-heading" > Now playing< / span >
< span id = "panel-heading-info" class = "text pull-right" > < / span >
< / div >
< div class = "card-body" >
< div class = "btn-toolbar hide" id = "queue-buttons" role = "toolbar" >
< div id = "trashmode" class = "btn-group mr-2" data-toggle = "radio" >
< button id = "btntrashmodeup" type = "button" class = "btn btn-secondary" title = "Delete upward" >
< span class = "material-icons" > vertical_align_top< / span >
< span class = "material-icons" > delete< / span >
< / button >
< button id = "btntrashmodesingle" type = "button" class = "btn btn-success" title = "Delete single" >
< span class = "material-icons" > delete< / span >
< / button >
< button id = "btntrashmodedown" type = "button" class = "btn btn-secondary" title = "Delete downward" >
< span class = "material-icons" > delete< / span >
< span class = "material-icons" > vertical_align_bottom< / span >
< / button >
2018-05-14 23:13:43 +00:00
< / div >
2018-05-16 23:19:03 +00:00
< div id = "queue-actions" class = "btn-group mr-2" >
< button type = "button" class = "btn btn-secondary" onclick = "socket.send('MPD_API_RM_ALL');" title = "Clear queue" >
< span class = "material-icons" > clear_all< / span >
< / button >
< a href = "#" data-toggle = "modal" data-target = "#savequeue" class = "btn btn-secondary" title = "Save queue" >
< span class = "material-icons" > save< / span >
< / a >
2018-05-07 21:25:17 +00:00
< / div >
2018-05-16 23:19:03 +00:00
< / div >
2018-05-14 23:13:43 +00:00
2018-05-16 23:19:03 +00:00
< div id = "nowplaying" >
< div id = "album-cover" > < / div >
< h1 >
< span id = "currenttrack" > < / span >
< / h1 >
< h3 id = "artist" > < / h3 >
< h4 id = "album" > < / h4 >
< p id = "counter" class = "text pull-right" > < / p >
< div id = "progressbar" > < / div >
< / div >
2013-11-04 17:18:38 +00:00
2018-05-16 23:19:03 +00:00
< ol id = "breadcrumb" class = "breadcrumb hide" >
< / ol >
2013-11-13 14:30:54 +00:00
2018-05-16 23:19:03 +00:00
< div class = "btn-toolbar hide" id = "filter-toolbar" >
< div class = "btn-group mr-2" data-toggle = "radio" id = "filter" > < / div >
< div class = "btn-group mr-2 pull-right" >
< button id = "add-all-songs" class = "btn btn-secondary" > Add all< / button >
2015-08-17 21:01:47 +00:00
< / div >
2018-05-16 23:19:03 +00:00
< / div >
2015-08-17 21:01:47 +00:00
2018-05-16 23:19:03 +00:00
< table id = "salamisandwich" class = "table table-hover hide" >
< thead >
< tr >
< th > #< / th >
< th > Artist< / th >
< th > Album< / th >
< th > Title< / th >
< th > Length< / th >
< th > < / th >
< / tr >
< / thead >
< tbody >
< / tbody >
< / table >
2015-08-17 21:01:47 +00:00
2018-05-16 23:19:03 +00:00
< div id = "dirble_panel" class = "hide" >
< p id = "dirble_loading" style = "font-size:16px;font-weight:bold;margin-left:4em;" > Loading...< / p >
< table style = "float:right; width:44%; margin-right:4%;" id = "dirble_right" class = "table table-hover" >
< thead >
< tr >
< th > < / th >
< / tr >
< / thead >
< tbody >
< / tbody >
< / table >
< table style = "width:44%; margin-left:4%;" id = "dirble_left" class = "table table-hover" >
2013-11-04 17:18:38 +00:00
< thead >
< tr >
2014-01-17 15:26:26 +00:00
< th > < / th >
2013-11-04 17:18:38 +00:00
< / tr >
< / thead >
< tbody >
< / tbody >
< / table >
2015-08-27 14:15:23 +00:00
< / div >
2018-05-14 23:13:43 +00:00
< ul class = "pagination justify-content-center" >
< li id = "prev" class = "page-item hide" > < a class = "page-link" href = "" > Previous< / a > < / li >
< li id = "next" class = "page-item hide" > < a class = "page-link" href = "" > Next< / a > < / li >
2014-02-22 01:11:45 +00:00
< / ul >
2018-05-16 23:19:03 +00:00
< / div >
< / div >
< / main >
< footer class = "footer" >
< nav class = "navbar navbar-expand navbar-dark fixed-bottom bg-dark" >
< div class = "d-flex flex-fill navbar-nav" id = "navbar-bottom" >
< div class = "nav-item flex-fill text-center" id = "nav-playing" > < a class = "nav-link" href = "#/playing/" > Playing< / a > < / div >
< div class = "nav-item flex-fill text-center" id = "nav-queue" > < a class = "nav-link" href = "#/queue/0" > Queue< / a > < / div >
< div class = "nav-item flex-fill text-center" id = "nav-browse" > < a class = "nav-link" href = "#/browse/0/" > Browse< / a > < / div >
< / div >
< / nav >
< / footer >
2013-11-05 13:59:12 +00:00
2013-11-09 02:02:49 +00:00
<!-- Modal -->
2014-02-22 00:57:26 +00:00
< div class = "modal fade" id = "settings" tabindex = "-1" role = "dialog" aria-labelledby = "settingsLabel" aria-hidden = "true" >
2013-11-09 02:02:49 +00:00
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2018-05-14 23:13:43 +00:00
< h5 class = "modal-title" id = "settingsLabel" > < span class = "material-icons" > settings< / span > Settings< / h5 >
< button type = "button" class = "close" data-dismiss = "modal" aria-label = "Close" >
< span aria-hidden = "true" > × < / span >
< / button >
2013-11-09 02:02:49 +00:00
< / div >
< div class = "modal-body" >
2018-05-14 23:13:43 +00:00
< h4 > < a style = "color:#28a745" href = "https://github.com/jcorporation/ympd" > < span class = "material-icons" > play_circle_outline< / span > myMPD< / a > – < small > MPD Web GUI - written in C, utilizing Websockets and Bootstrap/JS< / small > < / h4 >
< p > myMPD is a lightweight MPD web client that runs without a dedicated webserver or interpreter. It's tuned for minimal resource usage and requires only very litte dependencies. myMPD is a fork of < a style = "color:#28a745" href = "http://www.ympd.org" > ympd< / a > .< / p >
< h5 > myMPD uses following excellent software:< / h5 >
< h6 > < a style = "color:#28a745" href = "http://cesanta.com/docs.html" > Mongoose< / a > < small > GPLv2< / small > < / h6 >
< h6 > < a style = "color:#28a745" href = "http://www.musicpd.org/libs/libmpdclient/" > libMPDClient< / a > < small > BSD License< / small > < / h6 >
2014-02-22 00:57:26 +00:00
< hr / >
2018-02-03 13:51:48 +00:00
< div class = "row" >
< div class = "form-group col-md-6" >
2018-05-14 23:13:43 +00:00
< button id = "btnrandom" type = "button" class = "btn btn-secondary btn-block" title = "Random" >
< span class = "glyphicon glyphicon-random" > < / span > Random
2018-05-13 23:06:12 +00:00
< / button >
< / div >
< div class = "form-group col-md-6" data-toggle = "buttons" >
2018-05-14 23:13:43 +00:00
< button id = "btnconsume" type = "button" class = "btn btn-secondary btn-block" title = "Consume" >
2018-05-13 23:06:12 +00:00
< span class = "glyphicon glyphicon-fire" > < / span > Consume
< / button >
< / div >
< / div >
< div class = "row" >
< div class = "form-group col-md-6" data-toggle = "buttons" >
2018-05-14 23:13:43 +00:00
< button id = "btnsingle" type = "button" class = "btn btn-secondary btn-block" title = "Single" >
2018-05-13 23:06:12 +00:00
< span class = "glyphicon glyphicon-star" > < / span > Single
< / button >
< / div >
< div class = "form-group col-md-6" data-toggle = "buttons" >
2018-05-14 23:13:43 +00:00
< button id = "btncrossfade" type = "button" class = "btn btn-secondary btn-block" title = "Crossfade" >
2018-05-13 23:06:12 +00:00
< span class = "glyphicon glyphicon-link" > < / span > Crossfade
2018-02-03 13:51:48 +00:00
< / button >
< / div >
2018-05-13 23:06:12 +00:00
< / div >
< div class = "row" >
< div class = "form-group col-md-6" data-toggle = "buttons" >
2018-05-14 23:13:43 +00:00
< button id = "btnrepeat" type = "button" class = "btn btn-secondary btn-block" title = "Repeat" >
2018-05-13 23:06:12 +00:00
< span class = "glyphicon glyphicon-repeat" > < / span > Repeat
< / button >
< / div >
2018-02-03 13:51:48 +00:00
< div class = "form-group col-md-6" data-toggle = "buttons" >
2018-05-14 23:13:43 +00:00
< button type = "button" class = "btn btn-secondary btn-block" id = "btnnotify" >
2018-02-03 13:51:48 +00:00
< span class = "glyphicon glyphicon-comment" > < / span > Enable Notifications
< / button >
2018-05-13 23:06:12 +00:00
< / div >
< / div >
< hr / >
< div class = "row" >
< div class = "form-group col-md-6" >
2018-05-14 23:13:43 +00:00
< button type = "button" class = "btn btn-secondary btn-block" onclick = "updateDB();" >
2018-05-13 23:06:12 +00:00
< span class = "glyphicon glyphicon-refresh" > < / span > Update Database
< / button >
2018-02-03 13:51:48 +00:00
< / div >
< / div >
2014-02-22 00:57:26 +00:00
< hr / >
2014-02-04 17:24:01 +00:00
< form role = "form" >
< div class = "row" >
< div class = "form-group col-md-9" >
< label class = "control-label" for = "mpdhost" > MPD Host/IP< / label >
< input type = "text" class = "form-control" id = "mpdhost" / >
< / div >
< div class = "form-group col-md-3" >
2014-02-04 16:58:10 +00:00
< label class = "control-label" for = "mpdport" > MPD Port< / label >
2014-02-04 17:24:01 +00:00
< input type = "text" class = "form-control" id = "mpdport" / >
2014-02-04 16:58:10 +00:00
< / div >
< / div >
2014-02-16 18:46:53 +00:00
< div class = "row" >
< div class = "form-group col-md-6" >
< label class = "control-label" for = "mpd_pw" > MPD Password< / label >
< input type = "password" class = "form-control" id = "mpd_pw" placeholder = "Password" / >
< / div >
< div class = "form-group col-md-6" >
< label class = "control-label" for = "mpd_pw_con" > MPD Password (Confirmation)< / label >
2018-02-02 01:40:40 +00:00
< input type = "password" class = "form-control" id = "mpd_pw_con" placeholder = "Confirmation"
2014-02-16 18:46:53 +00:00
data-placement="right" data-toggle="popover" data-content="Password does not match!"
data-trigger="manual" />
< / div >
2014-02-22 01:11:45 +00:00
< div class = "form-group col-md-12" >
2014-03-08 19:33:22 +00:00
< div id = "mpd_password_set" class = "hide alert alert-info" >
< button type = "button" class = "close" aria-hidden = "true" > × < / button >
MPD Password is set
< / div >
2014-02-22 01:11:45 +00:00
< / div >
2015-10-09 10:06:41 +00:00
< / div >
< div class = "row" >
< div class = "form-group col-md-12" >
< label class = "control-label" for = "mpdstream" > MPD Stream URL< / label >
< input type = "text" class = "form-control" id = "mpdstream" / >
< / div >
2014-02-16 18:46:53 +00:00
< / div >
2014-02-04 16:58:10 +00:00
< / form >
< / div >
< div class = "modal-footer" >
2018-05-14 23:13:43 +00:00
< button type = "button" class = "btn btn-secondary" data-dismiss = "modal" > Cancel< / button >
< button type = "button" class = "btn btn-success" onclick = "confirmSettings();" > Save< / button >
2014-02-04 16:58:10 +00:00
< / div >
< / div > <!-- /.modal - content -->
< / div > <!-- /.modal - dialog -->
< / div > <!-- /.modal -->
2015-03-06 11:40:14 +00:00
<!-- Modal -->
< div class = "modal fade" id = "addstream" tabindex = "-1" role = "dialog" aria-labelledby = "addstreamLabel" aria-hidden = "true" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2018-05-14 23:13:43 +00:00
< h5 class = "modal-title" id = "addstreamLabel" > < span class = "material-icons" > view_stream< / span > Add Stream< / h5 >
< button type = "button" class = "close" data-dismiss = "modal" aria-label = "Close" >
< span aria-hidden = "true" > × < / span >
< / button >
2015-03-06 11:40:14 +00:00
< / div >
< div class = "modal-body" >
< form role = "form" >
< div class = "row" >
2018-02-03 14:06:59 +00:00
< div class = "form-group col-md-12" >
2015-03-06 11:40:14 +00:00
< label class = "control-label" for = "streamurl" > Stream URL< / label >
< input type = "text" class = "form-control" id = "streamurl" / >
< / div >
< / div >
< / form >
< / div >
< div class = "modal-footer" >
2018-05-14 23:13:43 +00:00
< button type = "button" class = "btn btn-secondary" data-dismiss = "modal" > Cancel< / button >
< button type = "button" class = "btn btn-success" onclick = "addStream();" > Add Stream< / button >
2015-03-06 11:40:14 +00:00
< / div >
< / div > <!-- /.modal - content -->
< / div > <!-- /.modal - dialog -->
< / div > <!-- /.modal -->
2018-04-04 17:40:12 +00:00
2015-09-02 17:24:52 +00:00
< div class = "modal fade" id = "savequeue" tabindex = "-1" role = "dialog" aria-labelledby = "savequeueLabel" aria-hidden = "true" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2018-05-14 23:13:43 +00:00
< h5 class = "modal-title" id = "savequeueLabel" > < span class = "material-icons" > save< / span > Save Queue< / h5 >
< button type = "button" class = "close" data-dismiss = "modal" aria-label = "Close" >
< span aria-hidden = "true" > × < / span >
< / button >
2015-09-02 17:24:52 +00:00
< / div >
< div class = "modal-body" >
< form role = "form" >
< div class = "row" >
< div class = "form-group col-md-9" >
< label class = "control-label" for = "playlistname" > Playlist Name< / label >
< input type = "text" class = "form-control" id = "playlistname" / >
< / div >
< / div >
< / form >
< / div >
< div class = "modal-footer" >
2018-05-14 23:13:43 +00:00
< button type = "button" class = "btn btn-secondary" data-dismiss = "modal" > Cancel< / button >
< button type = "button" class = "btn btn-success" onclick = "saveQueue();" > Save Queue< / button >
2015-09-02 17:24:52 +00:00
< / div >
< / div > <!-- /.modal - content -->
< / div > <!-- /.modal - dialog -->
< / div > <!-- /.modal -->
2015-03-06 11:40:14 +00:00
2014-02-22 01:11:45 +00:00
< div class = "modal fade bs-example-modal-sm" id = "wait" tabindex = "-1" role = "dialog" data-backdrop = "static" data-keyboard = "false" aria-hidden = "true" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2018-05-14 23:13:43 +00:00
< h5 > Searching...< / h5 >
2014-02-22 01:11:45 +00:00
< / div >
< div class = "modal-body" >
2018-05-16 23:19:03 +00:00
< div class = "progress" >
< div class = "progress-bar progress-bar-striped progress-bar-animated bg-success" role = "progressbar" aria-valuenow = "45" aria-valuemin = "0" aria-valuemax = "100" style = "width:100%;" > < / div >
2014-02-22 01:11:45 +00:00
< / div >
< / div >
2018-05-16 23:19:03 +00:00
< / div > <!-- /.modal - content -->
< / div > <!-- /.modal - dialog -->
< / div > <!-- /.modal -->
2014-02-04 16:58:10 +00:00
2013-11-05 13:59:12 +00:00
<!-- Bootstrap core JavaScript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
2018-05-14 23:13:43 +00:00
< script src = "js/jquery-3.3.1.min.js" > < / script >
2014-01-17 17:34:22 +00:00
< script src = "js/jquery.cookie.js" > < / script >
2018-05-16 23:19:03 +00:00
< script src = "js/bootstrap.js" > < / script >
2014-01-16 17:38:10 +00:00
< script src = "js/bootstrap-slider.js" > < / script >
2018-05-14 23:13:43 +00:00
< script src = "js/bootstrap-notify.js" > < / script >
2013-11-07 12:47:31 +00:00
< script src = "js/sammy.js" > < / script >
2015-09-04 14:43:16 +00:00
< script src = "js/jquery-ui-sortable.min.js" > < / script >
2013-11-05 13:59:12 +00:00
< script src = "js/mpd.js" > < / script >
2018-05-14 23:13:43 +00:00
< script src = "js/custom.js" > < / script > < / body >
2013-11-05 13:59:12 +00:00
< / html >