diff --git a/admin/error-html.xsl b/admin/error-html.xsl index 3d65d5d5..ea2c5fbd 100644 --- a/admin/error-html.xsl +++ b/admin/error-html.xsl @@ -4,17 +4,16 @@ Error -
- -
-

Response

-

Message

-

- +

+ +
+

Response

+

Message

+

+

Error code:

-
-
-
-
+ + +
diff --git a/admin/includes/head.xsl b/admin/includes/head.xsl index f86a8a14..028ab01c 100644 --- a/admin/includes/head.xsl +++ b/admin/includes/head.xsl @@ -5,8 +5,12 @@ <xsl:if test="$title"><xsl:value-of select="$title"/> — </xsl:if>Icecast Admin + + + + - \ No newline at end of file + diff --git a/admin/includes/header.xsl b/admin/includes/header.xsl index f3f7dc6a..a8d0a1b5 100644 --- a/admin/includes/header.xsl +++ b/admin/includes/header.xsl @@ -2,27 +2,24 @@ - + + - \ No newline at end of file + diff --git a/admin/includes/mountnav.xsl b/admin/includes/mountnav.xsl index 02983591..89424aff 100644 --- a/admin/includes/mountnav.xsl +++ b/admin/includes/mountnav.xsl @@ -2,13 +2,14 @@ - + diff --git a/admin/updatemetadata.xsl b/admin/updatemetadata.xsl index 7d60093c..365b63c9 100644 --- a/admin/updatemetadata.xsl +++ b/admin/updatemetadata.xsl @@ -11,19 +11,28 @@

-
-

Mountpoint

+
+

Mountpoint

+

Update Metadata

+ + +
- - + + + +  
-
+
diff --git a/src/admin.c b/src/admin.c index a44e95ba..216211f7 100644 --- a/src/admin.c +++ b/src/admin.c @@ -462,6 +462,8 @@ void admin_send_response(xmlDocPtr doc, char *fullpath_xslt_template; size_t fullpath_xslt_template_len; ice_config_t *config = config_get_config(); + const char *showall; + const char *mount; fullpath_xslt_template_len = strlen(config->adminroot_dir) + strlen(xslt_template) + strlen(PATH_SEPARATOR) + 1; fullpath_xslt_template = malloc(fullpath_xslt_template_len); @@ -470,7 +472,17 @@ void admin_send_response(xmlDocPtr doc, config_release_config(); ICECAST_LOG_DEBUG("Sending XSLT (%s)", fullpath_xslt_template); - xslt_transform(doc, fullpath_xslt_template, client, 200, NULL); + + COMMAND_OPTIONAL(client, "showall", showall); + COMMAND_OPTIONAL(client, "mount", mount); + + if (showall && util_str_to_bool(showall)) { + const char *params[] = {"param-has-mount", mount ? "'true'" : NULL, "param-showall", "'true'", NULL}; + xslt_transform(doc, fullpath_xslt_template, client, 200, NULL, params); + } else { + const char *params[] = {"param-has-mount", mount ? "'true'" : NULL, "param-showall", NULL, NULL}; + xslt_transform(doc, fullpath_xslt_template, client, 200, NULL, params); + } free(fullpath_xslt_template); } } @@ -1238,6 +1250,9 @@ static void command_updatemetadata(client_t *client, node = admin_build_rootnode(doc, "icestats"); srcnode = xmlNewChild(node, NULL, XMLSTR("source"), NULL); xmlSetProp(srcnode, XMLSTR("mount"), XMLSTR(source->mount)); + if (source->running) { + xmlNewTextChild(srcnode, NULL, XMLSTR("content-type"), XMLSTR(source->format->contenttype)); + } xmlDocSetRootElement(doc, node); admin_send_response(doc, client, response, diff --git a/src/client.c b/src/client.c index 65e0d43c..82f2946b 100644 --- a/src/client.c +++ b/src/client.c @@ -642,7 +642,7 @@ void client_send_reportxml(client_t *client, reportxml_t *report, document_domai ICECAST_LOG_DEBUG("Sending XSLT (%s)", fullpath_xslt_template); fastevent_emit(FASTEVENT_TYPE_CLIENT_SEND_RESPONSE, FASTEVENT_FLAG_MODIFICATION_ALLOWED, FASTEVENT_DATATYPE_CLIENT, client); - xslt_transform(doc, fullpath_xslt_template, client, status, location); + xslt_transform(doc, fullpath_xslt_template, client, status, location, NULL); free(fullpath_xslt_template); } diff --git a/src/stats.c b/src/stats.c index daae57ac..365a406a 100644 --- a/src/stats.c +++ b/src/stats.c @@ -903,6 +903,9 @@ static xmlNodePtr _dump_stats_to_doc (xmlNodePtr root, const char *show_mount, i for (i = 0; i < source_real->format->vc.comments; i++) __add_metadata(metadata, source_real->format->vc.user_comments[i]); } + + if (source_real->running) + xmlNewTextChild(xmlnode, NULL, XMLSTR("content-type"), XMLSTR(source_real->format->contenttype)); } avl_tree_unlock(global.source_tree); @@ -1050,7 +1053,7 @@ void stats_transform_xslt(client_t *client) doc = stats_get_xml(0, mount, client); - xslt_transform(doc, xslpath, client, 200, NULL); + xslt_transform(doc, xslpath, client, 200, NULL, NULL); xmlFreeDoc(doc); free(xslpath); diff --git a/src/xslt.c b/src/xslt.c index 963c30f7..37e849df 100644 --- a/src/xslt.c +++ b/src/xslt.c @@ -320,7 +320,7 @@ static inline void _send_error(client_t *client, icecast_error_id_t id, int old_ client_send_error_by_id(client, id); } -void xslt_transform(xmlDocPtr doc, const char *xslfilename, client_t *client, int status, const char *location) +void xslt_transform(xmlDocPtr doc, const char *xslfilename, client_t *client, int status, const char *location, const char **params) { xmlDocPtr res; xsltStylesheetPtr cur; @@ -344,7 +344,7 @@ void xslt_transform(xmlDocPtr doc, const char *xslfilename, client_t *client, in return; } - res = xsltApplyStylesheet(cur, doc, NULL); + res = xsltApplyStylesheet(cur, doc, params); if (res != NULL) { if (xsltSaveResultToString(&string, &len, res, cur) < 0) problem = 1; diff --git a/src/xslt.h b/src/xslt.h index 8a22d550..09501d1c 100644 --- a/src/xslt.h +++ b/src/xslt.h @@ -17,7 +17,7 @@ #include "icecasttypes.h" -void xslt_transform(xmlDocPtr doc, const char *xslfilename, client_t *client, int status, const char *location); +void xslt_transform(xmlDocPtr doc, const char *xslfilename, client_t *client, int status, const char *location, const char **params); void xslt_initialize(void); void xslt_shutdown(void); void xslt_clear_cache(void); diff --git a/web/Makefile.am b/web/Makefile.am index 52696e04..b5dde4f5 100644 --- a/web/Makefile.am +++ b/web/Makefile.am @@ -3,29 +3,14 @@ webdir = $(pkgdatadir)/web nobase_web_DATA = \ - status.xsl \ - favicon.ico \ - icecast.png \ - style.css \ + status.xsl \ auth.xsl \ server_version.xsl \ - tunein.png \ - key.png \ status-json.xsl \ xml2json.xslt \ + favicon.ico \ assets/css/style.css \ - assets/font/FiraMono-Bold.eot \ - assets/font/FiraMono-Regular.eot \ - assets/font/FiraSans-Bold.eot \ - assets/font/FiraSans-BoldItalic.woff \ - assets/font/FiraSans-Italic.eot \ - assets/font/FiraSans-Regular.eot \ - assets/font/FiraMono-Bold.woff \ - assets/font/FiraMono-Regular.woff \ - assets/font/FiraSans-BoldItalic.eot \ - assets/font/FiraSans-Bold.woff \ - assets/font/FiraSans-Italic.woff \ - assets/font/FiraSans-Regular.woff + assets/img/icecast.png EXTRA_DIST = $(nobase_web_DATA) diff --git a/web/assets/css/style.css b/web/assets/css/style.css index 7795c5fe..9ca82fc0 100644 --- a/web/assets/css/style.css +++ b/web/assets/css/style.css @@ -1,981 +1,333 @@ -@charset "UTF-8"; - -/* Typeface */ -@font-face { - font-family: 'FiraSans'; - font-style: normal; - font-weight: normal; - src: url('../font/FiraSans-Regular.eot'); - src: url('../font/FiraSans-Regular.eot?#iefix') format('embedded-opentype'), url('../font/FiraSans-Regular.woff') format('woff'); -} -@font-face { - font-family: 'FiraSans'; - font-style: italic; - font-weight: normal; - src: url('../font/FiraSans-Italic.eot'); - src: url('../font/FiraSans-Italic.eot?#iefix') format('embedded-opentype'), url('../font/FiraSans-Italic.woff') format('woff'); -} -@font-face { - font-family: 'FiraSans'; - font-style: normal; - font-weight: bold; - src: url('fonts/FiraSans/FiraSans-Bold.eot'); - src: url('../font/FiraSans-Bold.eot?#iefix') format('embedded-opentype'), url('../font/FiraSans-Bold.woff') format('woff'); -} -@font-face { - font-family: 'FiraSans'; - font-style: italic; - font-weight: bold; - src: url('../font/FiraSans-BoldItalic.eot'); - src: url('../font/FiraSans-BoldItalic.eot?#iefix') format('embedded-opentype'), url('../font/FiraSans-BoldItalic.woff') format('woff'); -} -@font-face { - font-family: 'FiraMono'; - font-style: normal; - font-weight: normal; - src: url('../font/FiraMono-Regular.eot'); - src: url('../font/FiraMono-Regular.eot?#iefix') format('embedded-opentype'), url('../font/FiraMono-Regular.woff') format('woff'); -} -@font-face { - font-family: 'FiraMono'; - font-style: normal; - font-weight: bold; - src: url('../font/FiraMono-Bold.eot'); - src: url('../font/FiraMono-Bold.eot?#iefix') format('embedded-opentype'), url('../font/FiraMono-Bold.woff') format('woff'); -} - -/* General */ -*, -*:before, -*:after { - font-family: 'FiraSans', sans-serif; - line-height: 1; - margin: 0; - padding: 0; - border: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - text-rendering: optimizelegibility; -} -::selection { - background: #9AABB5; - color: #001826; - text-shadow: none; -} -::-moz-selection { - background: #9AABB5; - color: #001826; - text-shadow: none; -} -.hidden { - clip: rect(0 0 0 0); - overflow: hidden; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - position: absolute; - border: 0; -} - -/* Typography */ -h1, -h2, -h3, -h4 { - line-height: 1.25; -} -h1 { - font-size: 2em; - font-weight: normal; -} -h2 { - font-size: 2em; -} -h3 { - font-size: 1.5em; -} -h4 { - font-size: 1.25em; -} -h5 { - font-size: 1em; - text-transform: uppercase; -} -p, -li, -blockquote, -dl > *, -aside { - line-height: 1.6; - -webkit-hyphens: auto; - -moz-hyphens: auto; - hyphens: auto; -} -blockquote { - font-style: italic; -} -q { - quotes:"\201E" "\201C"; -} -code, -pre { - background-color: #000E17; - color: #9AABB5; - font-family: 'FiraMono', monospace; - line-height: 1.6; -} -code { - word-break: break-all; -} -pre { - white-space: pre-wrap; - padding: 1em; -} -code span, -pre span { - font-family: 'FiraMono', monospace; -} -/* Chrome fix */ -@media screen and (-webkit-min-device-pixel-ratio: 0) { - pre { - word-break: break-all; - } -} -hr { - padding-bottom: 1em; - margin-top: 2em; - clear: both; - border: 0; - border-top: 2px solid #29495C; -} -dt { - font-weight: bold; -} -dd { - margin-left: 1em; -} - -/* Tables */ -table { - width: 100%; - border-collapse: collapse; - border-spacing: 0; -} -th, td { - text-align: left; - line-height: 1.6; - padding: .5em; - vertical-align: top; -} -th { - background-color: #000E17; - text-shadow: 1px 1px 0 rgba(0,0,0,0.5); -} -td { - border: 2px solid #000E17; -} -td a { - word-break: break-all; -} - -/* Inputs */ -::-webkit-input-placeholder { - color: #9AABB5; -} -:-moz-placeholder { - color: #9AABB5; - opacity: 1; -} -::-moz-placeholder { - color: #9AABB5; - opacity: 1; -} -:-ms-input-placeholder { - color: #9AABB5; -} -input::-ms-clear { - display: none; -} -input:not([type="submit"]), textarea { - font: 1em 'FiraMono', monospace -} -input, textarea { - width: 50%; -} -input[type='text'], -input[type='email'], -input[type='password'], -input[type='url'] { - background-color: #000E17; - color: #9AABB5; - display: block; - padding: 1em; -} -input[type='submit'] { - background-color: #001826; - font-size: 1em; - color: #FFFFFF; - display: block; - padding: 1em; - border: 2px solid #29495C; -} -input[type='submit']:hover { - background-color: #29495C; - cursor: pointer; -} -input[type='checkbox'] + label { - display: inline-block !important; - margin: 10px 0 0 10px; -} -form > *:not(:last-child) { - margin-bottom: 1em; -} - -/* Links */ -a:link, -a:visited { - color: #9AABB5; - text-decoration: underline; -} -a:hover, -a:focus, -a:active { - color: #29495C; -} -a.permalink:link, -a.permalink:visited { - text-decoration: none; - display: none; -} -a.permalink:hover, -*:hover > a.permalink { - display: inline-block; - padding-left: .25em; -} - -/* Body */ -body { - background-color: #CAD5DB; - color: #001826; -} -body > * { - margin: 0 auto; -} -body > *:not(:first-child) { - width: 75%; - margin: 0 auto; -} - -/* Header */ -header, -.header { - background-color: #001826; - position: relative; - margin-bottom: 2em; - box-shadow: 0 0 2em rgba(0,0,0,0.5) inset; -} -#xiphbar { - background-color: #666666; - height: 2.25em; - box-shadow: 0 .25em .25em rgba(0,0,0,.5); -} -#xiphbar > div { - width: 75%; - margin: 0 auto; - position: relative; -} -#xiphbar > div > * { - position: absolute; - top: 0.5em; -} -#xiphbar > div > a { - display: block; -} -#xiphbar img { - width: auto; - height: 1.25em; -} -#xiphbar > div > ul { - right: 0; - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - display: flex; - flex-direction: row; - list-style: none; -} -#xiphbar li { - font-size: 14px; - margin: 0; -} -#xiphbar li:not(:first-child) { - margin-left: 1em; -} -#xiphbar a:link, -#xiphbar a:visited { - color: #ffcc66; - text-decoration: none; - text-transform: uppercase; - border: none; -} -#xiphbar a:hover, -#xiphbar a:focus { - color: #ffe6b3; -} -#xiphbar a:active { - color: #FFFFFF; -} -header h1, -.header h1 { - color: #29495C; - text-shadow: 1px 1px 0 rgba(0,0,0,0.5); - width: 75%; - padding: 2em 0; - margin: 0 auto; -} -header h1 a:link, -header h1 a:visited, -.header h1 a:link, -.header h1 a:visited { - color: #FFFFFF; - font-weight: bold; - text-decoration: none; - border-bottom: none; -} -header h1 a:hover, -header h1 a:focus, -.header h1 a:hover, -.header h1 a:focus { - text-decoration: underline; -} -header h1 a:active, -.header h1 a:active { - color: #29495C; -} - -/* Navigation */ -nav, -.nav { - margin: 0 auto; - border-top: 2px solid #29495C; - border-bottom: 2px solid #29495C; -} -nav label, -.nav label, -#toggle-nav { - display: none; -} -nav label:before, -.nav label:before { - content: '\2261'; - color: #29495C; - font-size: 4em; - text-shadow: 1px 1px 0 rgba(0,0,0,0.5); - position: absolute; - top: 0.9em; - right: 0.5em; -} -nav label.nobar:before, -.nav label.nobar:before { - top: 0.4em; -} -nav label:hover, -nav label:hover:before, -.nav label:hover, -.nav label:hover:before { - color: #FFFFFF; - cursor: pointer; -} -#toggle-nav:checked + ul { - display: block; -} -nav ul, -.nav ul { - margin: 0 auto; -} -nav ul:before, -nav ul:after, -.nav ul:before, -.nav ul:after { - display: table; - content: ' '; - clear: both; -} -nav li, -.nav li { - display: table-cell; - width: 1%; -} -nav li.on a, -.nav li.on a { - font-weight: bold; -} -nav a:link, -nav a:visited, -.nav a:link, -.nav a:visited { - background-color: #001826; - color: #FFFFFF - ;letter-spacing: 0.1em; - white-space: nowrap; - text-transform: uppercase; - text-decoration: none; - text-align: center; - padding: 1em; - display: block; - border-right: 2px solid #29495C; - border-bottom: none; - position: relative; -} -nav li:last-child a, -.nav li:last-child a { - border-right: none; -} -nav a:after, -.nav a:after { - content: '\0020'; - color: transparent; - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - opacity: 0; - -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; - filter: alpha(opacity=0); - border: 5px solid #29495C; -} -nav a:focus, -.nav a:focus { - color: #29495C; -} -nav a:hover:after, -nav a:active:after, -nav a:focus:after, -.nav a:hover:after, -.nav a:active:after, -.nav a:focus:after { - opacity: 1; - -ms-filter: none; - filter: none; -} - -/* Content */ -section h2, -.section h2 { - margin-bottom: 1em; -} -section > a:link, -section > a:visited, -.section > a:link, -.section > a:visited { - color: #29495C; -} -section > a:hover, -.section > a:hover { - text-decoration: none; -} -.error { - background-color: #DBCAD5; - color: #5C2949; - padding: .5em 2em; - margin: -1em 0 1em 0; - border: 1px solid #5C2949; -} -.error a { - color: #5C2949; -} -.error a:hover { - text-decoration: none; -} -section > article:not(:last-child), -.section > .article:not(:last-child) { - margin-bottom: 2em; -} -article, -.article { - background-color: #001826; - color: #FFFFFF; - padding: 2em; -} -article h3, -.article h3 { - text-shadow: 1px 1px 0 rgba(0,0,0,0.5); - margin-bottom: 0.7em; - border-bottom: 2px solid #29495C; -} -article h4, -article h5, -.article h4, -.article h5 { - margin-top: 2em; -} -article h3 + h4, -article h3 + h5, -.article h3 + h4, -.article h3 + h5 { - margin-top: 0; -} -article > *:not(:last-child), -.article > *:not(:last-child) { - margin-bottom: 1em; -} -article img, -.article img { - max-width: 100%; -} -article ul, -.article ul { - padding-left: 1em; - margin-top: 1em; -} -article li > ul, -.article li > ul { - margin-top: 0; -} -article nav, -.article .nav { - border-right: 2px solid #29495C; - border-left: 2px solid #29495C; -} -article nav ul, -.article .nav ul { - padding: 0; - margin-top: 0; -} -article aside, -.article .aside { - color: #29495C; - text-align: center; - letter-spacing: 0.1em; - text-transform: uppercase; - padding: 1em 2em 0 2em; - margin: 2em -2em -1em -2em; - border-top: 2px solid #29495C; -} -article aside a:link, -article aside a:visited, -.article .aside a:link, -.article .aside a:visited { - font-weight: bold; - text-decoration: none; -} -.play:link, -.play:visited { - background-color: #000E17; - color: #FFFFFF; - text-decoration: none; - white-space: nowrap; - display: inline-block; - padding: 1em; -} -.play:hover, -.play:active, -.play:focus { - color: #9AABB5; -} -.play span { - font-weight: bold; -} -ul.buttons { - display: -webkit-box; - display: -moz-box; - display: -ms-flexbox; - display: -webkit-flex; - display: flex; - -webkit-flex-flow: row; - flex-direction: row; - -webkit-box-pack: justify; - -moz-box-pack: justify; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - padding: 0; - list-style: none; -} -ul.buttons li { - width: 49%; -} -ul.buttons a { - background-color: #000E17; - color: #FFFFFF; - font-size: 1.25em; - font-weight: bold; - text-decoration: none; - display: block; - padding: 1em; -} -ul.buttons a:hover { - text-decoration: underline; -} -ul.buttons .linux { - background: #000E17 url('../img/logo-linux.svg') no-repeat 95% 50%; - background-size: 2em; -} -ul.buttons .windows { - background: #000E17 url('../img/logo-windows.svg') no-repeat 95% 50%; - background-size: 2em; -} -ul.buttons span { - display: inline-block; - margin-top: 1em; -} - -/* Footer */ -footer, -.footer { - text-align: center; - padding: 2em 0; -} -footer a:link, -footer a:visited, -.footer a:link, -.footer a:visited { - color: #29495C; -} - -/* Desktop and tablet */ -@media only screen and (max-width: 1024px) { - #xiphbar > div > a { - text-align: center; - position: static; - padding-top: 0.5em; - } - #xiphbar > div > ul { - display: none; - } - article nav ul:before, - .article .nav ul:before, - nav ul:after, - .nav ul:after { - display: block; - } - article nav li, - .article .nav li { - display: block; - width: auto; - } - article nav a:after, - .article .nav a:after { - border-right: 7px solid #29495C; - border-left: 7px solid #29495C; - } - article nav li:not(:last-child) a, - .article .nav li:not(:last-child) a { - border-right: none; - border-bottom: 2px solid #29495C; - } - ul.buttons { - -webkit-flex-flow: column; - flex-direction: column; - } - ul.buttons li { - width: 100%; - } - ul.buttons li:not(:last-child) { - margin-bottom: 1em; - } -} - -/* Tablet and smartphone */ -@media only screen and (max-width: 768px) { - * { - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; - } - input, textarea { - width: 100%; - } - .table-block { - word-break: break-all; - } - .table-block thead { - display: none; - } - .table-block td { - display: block; - } - .table-block tr td:first-child { - font-weight: bold; - padding-bottom: 0; - border-bottom: none; - } - .table-block tr td:last-child { - border-top: none; - } - .table-block tr:not(:last-child) td:last-child { - border-bottom: none; - } - .table-flipscroll { - display: block; - width: 100%; - position: relative; - } - .table-flipscroll:after { - content: ' '; - background-image: -ms-linear-gradient(left, transparent 0%, #001826 100%); - background-image: -moz-linear-gradient(left, transparent 0%, #001826 100%); - background-image: -o-linear-gradient(left, transparent 0%, #001826 100%); - background-image: -webkit-gradient(linear, left top, right top, color-stop(0, transparent), color-stop(1, #001826)); - background-image: -webkit-linear-gradient(left, transparent 0%, #001826 100%); - background-image: linear-gradient(to right, transparent 0%, #001826 100%); - position: absolute; - top: 0; - right: 0; - width: 2em; - height: 100%; - } - .table-flipscroll thead { - display: block; - float: left; - } - .table-flipscroll thead tr { - display: block; - } - .table-flipscroll th { - white-space: nowrap; - text-align: right; - display: block; - border-bottom: 3px solid #000E17; - } - .table-flipscroll tbody { - white-space: nowrap; - display: block; - width: auto; - position: relative; - overflow-x: auto; - } - .table-flipscroll tbody tr { - display: inline-block; - vertical-align: top; - } - .table-flipscroll tbody tr:first-child td { - border-left: none; - } - .table-flipscroll tbody tr:not(:last-child) td { - border-right: none; - } - .table-flipscroll td { - text-align: left; - display: block; - border-bottom: none; - } - .table-flipscroll td:last-child { - border-bottom: 2px solid #000E17; - } - nav, - .nav { - width: auto; - } - nav ul:before, - nav ul:after, - .nav ul:before, - .nav ul:after { - display: block; - } - nav li, - .nav li { - display: block; - width: auto; - } - nav a:after, - nav a:after, - .nav a:after, - .nav a:after { - border-right: 7px solid #29495C; - border-left: 7px solid #29495C; - } - nav li:not(:last-child) a, - .nav li:not(:last-child) a { - border-right: none; - border-bottom: 2px solid #29495C; - } -} - -/* Smartphone */ -@media only screen and (max-width: 450px) { - body > *:not(:first-child) { - width: 100%; - } - #xiphbar > div { - width: 100%; - padding: 0 2em; - } - #xiphbar > div > a { - text-align: left; - } - #xiphbar img { - max-width: 100%; - } - header h1, - .header h1 { - line-height: 1; - padding: 1em; - width: auto; - } - header h1 span, - .header h1 span { - display: none; - } - header nav label, - .header nav label { - display: block; - } - header nav ul, - .header nav ul { - display: none; - } - section h2, - section > p, - .section h2, - .section > p { - padding: 0 1em; - } - .error { - border-right: none; - border-left: none; - } - article > *:not(:first-child):not(.buttons), - .article > *:not(:first-child):not(.buttons) { - text-align: justify; - } - .play { - width: 100%; - } - footer, - .footer { - padding: 2em; - } -} - -/* Print */ -@media print { - * { - background-color: #FFFFFF !important; - color: #000000 !important; - text-shadow: none !important; - text-align: left !important; - border: none; - width: 100% !important; - } - h1, - h2, - h3 { - font-size: 1.25em; - } - h3, - h4 { - page-break-after: avoid; - } - pre { - page-break-inside: avoid; - } - table:after { - display: none; - } - th, - td { - width: auto !important; - border: 1px solid #000000; - } - #xiphbar, - nav, - .nav { - display: none; - } - header, - .header { - box-shadow: none; - margin: 0; - } - article, - .article { - padding: 0 1em; - } - article h3, - .article h3 { - border-bottom: none; - } - article a:after, - .article a:after { - content: ' [' attr(href) ']'; - } - article aside, - .article aside { - text-transform: none; - padding: 0; - margin: 0; - border-top: none; - } -} - -/* Highlight (Solarized Dark) */ -.highlight{background-color:#073642;color:#93a1a1} -.highlight .c{color:#586e75 !important;} -.highlight .cm{color:#586e75 !important;} -.highlight .cp{color:#586e75 !important;} -.highlight .c1{color:#586e75 !important;} -.highlight .cs{color:#586e75 !important;font-weight:bold !important;} -.highlight .err{color:#dc322f !important;background:none !important;} -.highlight .k{color:#cb4b16 !important} -.highlight .o{color:#93a1a1 !important;font-weight:bold !important;} -.highlight .p{color:#93a1a1 !important} -.highlight .ow{color:#2aa198 !important;font-weight:bold !important;} -.highlight .gd{color:#93a1a1 !important;background-color:#372c34 !important;display:inline-block;} -.highlight .gd .x{color:#93a1a1 !important;background-color:#4d2d33 !important;display:inline-block;} -.highlight .ge{color:#93a1a1 !important;} -.highlight .gr{color:#aa0000} -.highlight .gh{color:#586e75 !important;} -.highlight .gi{color:#93a1a1 !important;background-color:#1a412b !important;display:inline-block;} -.highlight .gi .x{color:#93a1a1 !important;background-color:#355720 !important;display:inline-block;} -.highlight .go{color:#888888;} -.highlight .gp{color:#555555;} -.highlight .gs{color:#93a1a1 !important;font-weight:bold !important;} -.highlight .gu{color:#6c71c4 !important;} -.highlight .gt{color:#aa0000;} -.highlight .kc{color:#859900 !important;font-weight:bold !important;} -.highlight .kd{color:#268bd2 !important;} -.highlight .kp{color:#cb4b16 !important;font-weight:bold !important;} -.highlight .kr{color:#d33682 !important;font-weight:bold !important;} -.highlight .kt{color:#2aa198 !important;} -.highlight .n{color:#268bd2 !important;} -.highlight .na{color:#268bd2 !important;} -.highlight .nb{color:#859900 !important;} -.highlight .nc{color:#d33682 !important;} -.highlight .no{color:#b58900 !important;} -.highlight .ni{color:#800080;} -.highlight .nl{color:#859900 !important;} -.highlight .ne{color:#268bd2 !important;font-weight:bold !important;} -.highlight .nf{color:#268bd2 !important;font-weight:bold !important;} -.highlight .nn{color:#b58900 !important;} -.highlight .nt{color:#268bd2 !important;font-weight:bold !important;} -.highlight .nx{color:#b58900 !important;} -.highlight .bp{color:#999999;} -.highlight .vc{color:#008080;} -.highlight .vg{color:#268bd2 !important;} -.highlight .vi{color:#268bd2 !important;} -.highlight .nv{color:#268bd2 !important;} -.highlight .w{color:#bbbbbb;} -.highlight .mf{color:#2aa198 !important;} -.highlight .m{color:#2aa198 !important;} -.highlight .mh{color:#2aa198 !important;} -.highlight .mi{color:#2aa198 !important;} -.highlight .mo{color:#009999;} -.highlight .s{color:#2aa198 !important;} -.highlight .sb{color:#d14;} -.highlight .sc{color:#d14;} -.highlight .sd{color:#2aa198 !important;} -.highlight .s2{color:#2aa198 !important;} -.highlight .se{color:#dc322f !important;} -.highlight .sh{color:#d14;} -.highlight .si{color:#268bd2 !important;} -.highlight .sx{color:#d14;} -.highlight .sr{color:#2aa198 !important;} -.highlight .s1{color:#2aa198 !important;} -.highlight .ss{color:#990073;} -.highlight .il{color:#009999;} -.highlight div .gd,.highlight div .gd .x,.highlight div .gi,.highlight div .gi .x{display:inline-block;width:100%;} +html, body { + margin: 0; + padding: 0; + font-family: sans-serif; + line-height: 1; + -webkit-text-size-adjust:100%; -moz-text-size-adjust:100%; -ms-text-size-adjust:100%; + height: 100%; +} + +body { + display: flex; + flex-direction: column; + height: 100%; +} + +body > main { + width: 100%; + flex-grow: 1; +} + +/* Main navigation styles */ + +#main-nav { + display: block; + background: #23282c; + overflow: hidden; + padding: 0.5em 2.5em; + border-bottom: 2px #29495C solid; +} + +#main-nav h1 { + font: normal 16px -apple-system, sans-serif; + vertical-align: middle; + display: inline; + color: #DDD; + margin: 0; +} + +#main-nav a { + text-decoration: none; +} + +#main-nav a#branding { + margin-right: 2em; + float: left; +} + +#main-nav a#branding > img { + height: 32px; + width: 32px; + vertical-align: middle; + margin-right: 0.4em; +} + +#main-nav > ul > li { + margin-right: 1em; +} + +#main-nav > ul > li.right { + float: right; +} + +#main-nav > ul > li > a { + font: normal 16px -apple-system, sans-serif; + position: relative; + line-height: 32px; + color: #DDD; +} + +#main-nav > ul > li > a:hover { + color: #FFF; +} + +/* Fancy animation */ + +#main-nav > ul > li > a:after { + position: absolute; + content: ""; + width: 100%; + bottom: -2px; + left: 0; + border-bottom: 2px #4f8cb0 solid; + transition: all 0.2s ease-in-out 0s; + transform: scaleX(0); +} + +#main-nav > ul > li.adminlink > a:after { + border-bottom: 2px #ff704d solid; +} + +#main-nav > ul > li > a:hover:after { + transform: scaleX(1); +} + +/* Common navigation styles */ + +nav > ul { + list-style: none; + margin: 0; + padding: 0; +} + +nav > ul > li { + display: inline; + font: normal 12pt -apple-system, sans-serif; +} + +/* Navigation lists style */ +/* TODO unify with the above */ + +div.nav ul { + list-style: none; + padding: 0; + text-align: center; +} + +div.nav ul > li { + display: inline; + padding: 0.3em; +} + +div.nav ul > li > a { + color: #29495C; +} + +div.nav > h4 { + margin: 0; +} + +/* Box navigation */ + +ul.boxnav { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-wrap: wrap; +} + +ul.boxnav > li { + margin-left: 1em; +} + +ul.boxnav > li > a { + background-color: #4f8cb0; + border: none; + color: white; + padding: 0.5em 1em; + margin-top: 0.2em; + text-align: center; + text-decoration: none; + display: inline-block; +} + +ul.boxnav > li.critical > a, a.critical { + background-color: #ff704d !important; +} + +th.actions { + width: 10%; +} + +td.actions { + display: flex; + flex-direction: column; +} + +td.actions > a { + background-color: #4f8cb0; + border: none; + color: white; + padding: 0.5em; + margin-top: 0.2em; + text-align: center; + text-decoration: none; + display: inline-block; +} + +td.actions > a:first-child { + margin-top: 0; +} + +/* Playlists list style */ + +ul.playlists { + list-style: none; + margin: 0; + padding: 0; + float: right; +} + +ul.playlists > li { + display: inline; + margin-left: 1em; +} + +ul.playlists > li > a { + background-color: #4CAF50; + border: none; + color: white; + padding: 0.5em 1em; + margin-top: 0.2em; + text-align: center; + text-decoration: none; + display: inline-block; +} + +ul.playlists > li > a::before { + content: "\25ba\20"; +} + +/* Boxes */ + +section.box { + padding: 1em; + background: #F5F5F5; + border: 1px #DDD solid; + margin-bottom: 1em; +} + +section.box h2, +section.box h3, +section.box h4, +section.box h5 { + /*color: #DDD;*/ +} + +section.box h3 { + border-bottom: 2px #888 solid; +} + +section.box .box_title { + margin-top: 0; + padding-bottom: 5px; + /*border-bottom: 2px #29495C solid;*/ +} + +/* Table styling */ + +section.box table { + width: 100%; + border-collapse: collapse; + table-layout: fixed; +} + +section.box table tr:first-child { + border: none; +} + +section.box table tr { + border-top: 1px solid #e7e7e7; +} + +section.box table tbody tr:hover { + background-color: #cccccc; +} + +section.box table.table-keys tr > * { + padding: 0.4em 1.5em; +} + +section.box table.table-block tr > * { + padding: 0.4em 0.4em; +} + +section.box table.table-keys tr td:first-child { + font-weight: bold; +} + +.playlist-container { + overflow-x: auto; +} + +/* Main content styling */ + +main { + display: block; + clear: both; + max-width: 800px; + margin: 0 auto; +} + +footer { + border-top: 2px #29495C solid; + padding: 0.25em 1em; + color: #CCC; + text-align: center; + background: #23282c; +} + +footer a { + color: #EEE; +} + +/* General elements styling */ + +h1, h2, h3, h5 { + color: #001826; +} + +aside { + margin: 0.4em; +} + +/* Error messages */ + +.error { + background-color: #FF9999; + padding: .5em 2em; + border: 1px solid #5C2949; +} +.error a { + color: #5C2949; +} +.error a:hover { + text-decoration: none; +} + +.warning { + border: 1px solid #5C2949; + background-color: #FFFF99; + padding: .5em 2em; +} + +.info { + border: 1px solid #5C2949; + background-color: #ABBBFF; + padding: .5em 2em; +} + +.error > strong, .warning > strong, .info > strong { + display: block; +} diff --git a/web/assets/font/FiraMono-Bold.eot b/web/assets/font/FiraMono-Bold.eot deleted file mode 100644 index 80125a86..00000000 Binary files a/web/assets/font/FiraMono-Bold.eot and /dev/null differ diff --git a/web/assets/font/FiraMono-Bold.woff b/web/assets/font/FiraMono-Bold.woff deleted file mode 100644 index 0e3e6b9f..00000000 Binary files a/web/assets/font/FiraMono-Bold.woff and /dev/null differ diff --git a/web/assets/font/FiraMono-Regular.eot b/web/assets/font/FiraMono-Regular.eot deleted file mode 100644 index 283b4705..00000000 Binary files a/web/assets/font/FiraMono-Regular.eot and /dev/null differ diff --git a/web/assets/font/FiraMono-Regular.woff b/web/assets/font/FiraMono-Regular.woff deleted file mode 100644 index 5aac3240..00000000 Binary files a/web/assets/font/FiraMono-Regular.woff and /dev/null differ diff --git a/web/assets/font/FiraSans-Bold.eot b/web/assets/font/FiraSans-Bold.eot deleted file mode 100644 index 07323b60..00000000 Binary files a/web/assets/font/FiraSans-Bold.eot and /dev/null differ diff --git a/web/assets/font/FiraSans-Bold.woff b/web/assets/font/FiraSans-Bold.woff deleted file mode 100644 index ebc183ee..00000000 Binary files a/web/assets/font/FiraSans-Bold.woff and /dev/null differ diff --git a/web/assets/font/FiraSans-BoldItalic.eot b/web/assets/font/FiraSans-BoldItalic.eot deleted file mode 100644 index 1600c30c..00000000 Binary files a/web/assets/font/FiraSans-BoldItalic.eot and /dev/null differ diff --git a/web/assets/font/FiraSans-BoldItalic.woff b/web/assets/font/FiraSans-BoldItalic.woff deleted file mode 100644 index 51b9f839..00000000 Binary files a/web/assets/font/FiraSans-BoldItalic.woff and /dev/null differ diff --git a/web/assets/font/FiraSans-Italic.eot b/web/assets/font/FiraSans-Italic.eot deleted file mode 100644 index 1369626e..00000000 Binary files a/web/assets/font/FiraSans-Italic.eot and /dev/null differ diff --git a/web/assets/font/FiraSans-Italic.woff b/web/assets/font/FiraSans-Italic.woff deleted file mode 100644 index e27b7f3b..00000000 Binary files a/web/assets/font/FiraSans-Italic.woff and /dev/null differ diff --git a/web/assets/font/FiraSans-Regular.eot b/web/assets/font/FiraSans-Regular.eot deleted file mode 100644 index ab82a339..00000000 Binary files a/web/assets/font/FiraSans-Regular.eot and /dev/null differ diff --git a/web/assets/font/FiraSans-Regular.woff b/web/assets/font/FiraSans-Regular.woff deleted file mode 100644 index 0a82f0a1..00000000 Binary files a/web/assets/font/FiraSans-Regular.woff and /dev/null differ diff --git a/web/icecast.png b/web/assets/img/icecast.png similarity index 100% rename from web/icecast.png rename to web/assets/img/icecast.png diff --git a/web/key.png b/web/key.png deleted file mode 100644 index 8c610e7d..00000000 Binary files a/web/key.png and /dev/null differ diff --git a/web/server_version.xsl b/web/server_version.xsl index dc46fcda..5f9adc71 100644 --- a/web/server_version.xsl +++ b/web/server_version.xsl @@ -3,9 +3,10 @@ Server Information -
-

Server Information

- +

Version

+
+

Server Information

+
@@ -27,26 +28,26 @@ - + - - + + - + - + - +
Downloadicecast.orgicecast.org/download/
Subversionicecast.org/svn.phpGiticecast.org/download/#git
Documentationicecast.org/docs.phpicecast.org/docs/
Stream Directorydir.xiph.orgdir.xiph.org
Communityicecast.org/community.phpicecast.org/contact/
-
+
diff --git a/web/status.xsl b/web/status.xsl index ac5f6172..20238e8a 100644 --- a/web/status.xsl +++ b/web/status.xsl @@ -1,6 +1,8 @@ + + Status @@ -13,157 +15,128 @@ --> - - - -
-
-

Mount Point

-
- - - Login - - - - - -
-
-
- -
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Stream Name:
Stream Description:
Content Type:
Stream started:
Bitrate:
Quality:
Video Quality:
Framesize:
Framerate:
Listeners (current):
Listeners (peak):
Genre:
Stream URL: - -
Currently playing: - - - - - -
- - -

Playlist

- - - - - - - - - +

Status

+ + + + + +
+

Mountpoint

+ + + +

Further information

+
+
AlbumTrackCreatorTitle
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + - - -
Stream Name:
Stream Description:
Content Type:
Stream started:
Bitrate:
Quality:
Video Quality:
Framesize:
Framerate:
Listeners (current):
Listeners (peak):
Genre:
Stream URL: + +
Currently playing: + + - + + +
-
-
-
-
- -

- Not Connected

-
-
-
+ + + + + + + + +

- Not Connected

+
+ + + + + + +
diff --git a/web/style.css b/web/style.css deleted file mode 100644 index fb6ed015..00000000 --- a/web/style.css +++ /dev/null @@ -1,274 +0,0 @@ -html { - margin: 0; - padding: 0; - background-color: #000; -} - -body { - padding: 0 25px 0 50px; - background-color: #000; - font-family: Verdana, sans-serif; - text-decoration: none; - color: #fff; -} - -a { - color: #f8ef64; - text-decoration: none; - border-bottom: 1px dotted #f8ef64; -} - -a:hover { - color: #f8ef64; - text-decoration: none; - border-bottom: 1px solid #f8ef64; -} - -h1 { - font-family: Verdana, sans-serif; - text-decoration: none; - font-weight: bold; - font-size: 3em; - color: #fff; - margin-top: 3px; -} - -h3 { - margin: 0px; - padding: 0px; - font-family: Verdana, sans-serif; - font-weight: bold; - font-size: 110%; - color: #f8ef64; -} - -h1#header{ - padding: 10px 0px 10px 80px; - background: transparent url(/icecast.png) no-repeat scroll left center; -} - -h3 small { - color: #fff; - font-size: 70%; - padding-left: 15px; -} - -form.alignedform label { - text-align: right; - display: inline-block; - vertical-align: middle; - width: 10em; - margin: 0 1em 0 0; -} - -form.alignedform input { - display: inline-block; - vertical-align: middle; - border: 1px solid #f8ef64; - background-color: #333; - color: #f8ef64; - padding: 5px; -} - -#menu { - border-top: 3px solid #7B96C6; - border-bottom: 3px solid #7B96C6; - text-align: center; - margin-bottom: 35px; -} - -#menu ul { - margin: 0; - padding: 0; - list-style: none; - display: inline-block; - vertical-align: middle; -} - -#menu ul li { - float: left; - padding-left: 25px; - padding-right: 25px; -} - -#menu ul li a { - font-family: Verdana, sans-serif; - text-decoration: none; - color: #fff; - font-size: 18px; - border: none; -} - -#menu ul li a:hover { - color: #f8ef64; -} - -.roundbox { - width: 90%; - background-color: #656565; - border-radius: 10px; - padding: 15px 20px; - margin-bottom: 35px; -} - -.roundbox h3 { - margin-bottom: 10px; - border-bottom: 1px groove #ACACAC; -} - -.roundbox table.yellowkeys tr td:last-child { - color: #f8ef64; -} - -table.colortable { - border-collapse: collapse; - padding: 20px 0 20px 0; - margin: 0 auto; -} - -table.colortable td { - border: 1px solid #000; - text-align: center; - padding: 5px; -} - -table.colortable thead tr td { - color: #656565; - background: #f8ef64; - border-color: white; -} - -.roundbox table.yellowkeys tr td { - padding: 5px 5px 0 0; - word-wrap: break-word; - word-break: break-all; -} - -.right { - float: right; -} - -.mounthead h3 { - float: left; - margin-bottom: 0px; - border-bottom: none; -} - -.mountcont { - border-top: 1px groove #ACACAC; - clear: both; -} - -ul.mountlist { - margin: 0; - padding: 0; - list-style: none; - text-align: right; -} - -.mountlist li { - display: inline; -} - -a.play { - padding-left: 22px; - margin-left: 25px; - border: none; - background: transparent url(/tunein.png) no-repeat scroll left center; - background-size: auto 100%; -} - -a.auth { - padding-left: 22px; - margin-left: 25px; - border: none; - background: transparent url(/key.png) no-repeat scroll left top; - background-size: auto 100%; -} - -/* Admin navigation */ - -ul.nav { - margin: 0; - padding: 5px 0 10px 0; - clear: both; - list-style: none; - text-align: center; -} - -ul.nav li { - display: inline; -} - -ul.nav li a { - border: none; - display: inline-block; - padding: .2em .7em; - margin-top: .2em; - background-color: #333; - white-space: nowrap; -} - -ul.nav li a:hover { - color: #fff; -} - -/* Footer */ - -#footer { - border-top: 1px groove #ACACAC; - margin-top: 20px; - font-size: 80%; -} - -@media (max-width: 800px) { - - body { - padding: 0; - } - - .roundbox { - width: auto; - border-radius: 0; - } - - .roundbox table.yellowkeys tr td { - display: block; - padding: 5px 5px 0 0; - } - - .roundbox table.yellowkeys tr td:last-child { - margin-bottom: 5px; - margin-left: 5px; - } - - .scrolltable { - overflow: auto; - } - -} - -@media (max-width: 320px) { - - ul.nav, #menu ul { - display: block; - } - - ul.nav li, #menu ul li { - float: none; - } - - ul.nav li a, #menu ul li a { - display: block; - } - - ul.nav li + li, #menu ul li + li { - border-top: 1px solid #ACACAC; - } - - a.play { - margin-left: 15px; - } - -} - diff --git a/web/tunein.png b/web/tunein.png deleted file mode 100644 index 44d93476..00000000 Binary files a/web/tunein.png and /dev/null differ