1
0
Fork 0

Update: Reformated indents and spaces (ws-only patch)

This commit is contained in:
Philipp Schafft 2020-10-09 10:26:18 +00:00
parent fde951551f
commit 0fb8225048
26 changed files with 1006 additions and 1006 deletions

View File

@ -1,66 +1,66 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:include href="includes/page.xsl"/>
<xsl:variable name="title">Dashboard</xsl:variable>
<xsl:include href="includes/page.xsl"/>
<xsl:variable name="title">Dashboard</xsl:variable>
<xsl:template name="content">
<h2><xsl:value-of select="$title" /></h2>
<xsl:for-each select="/report/incident">
<xsl:for-each select="resource[@name='overall-status']">
<section class="box">
<h3 class="box_title">Overview for <code><xsl:value-of select="value[@member='global-config']/value[@member='hostname']/@value" /></code></h3>
<ul class="boxnav">
<li><a href="/admin/reloadconfig.xsl">Reload Configuration</a></li>
</ul>
<div class="side-by-side">
<div>
<h4>Health</h4>
<div class="trafficlight colour-{value[@member='status']/@value}">&#160;</div>
</div>
<div>
<h4>Current load</h4>
<table class="table-block">
<tbody>
<xsl:for-each select="value[@member='global-current']/value">
<tr>
<xsl:variable name="member" select="@member" />
<xsl:variable name="of" select="../../value[@member='global-config']/value[@member=$member]/@value" />
<td><xsl:value-of select="concat(translate(substring(@member, 1, 1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), substring(@member, 2))" /></td>
<td class="barmeter">
<span><xsl:value-of select="@value" /> of <xsl:value-of select="$of" /></span>
<div style="width: calc(100% * {@value} / {$of});">&#160;</div>
</td>
</tr>
</xsl:for-each>
</tbody>
</table>
</div>
</div>
</section>
</xsl:for-each>
<xsl:for-each select="resource[@name='maintenance']">
<section class="box">
<h3 class="box_title">Maintenance</h3>
<xsl:choose>
<xsl:when test="value">
<ul class="maintenance-container">
<xsl:for-each select="value">
<li class="maintenance-level-{value[@member='type']/@value}">
<p><xsl:value-of select="text/text()" /></p>
<ul class="references">
<xsl:for-each select="reference">
<li><a href="{@href}"><xsl:value-of select="concat(translate(substring(@type, 1, 1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), substring(@type, 2))" /></a></li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:when>
<xsl:otherwise>
<p>Nothing to do.</p>
</xsl:otherwise>
</xsl:choose>
</section>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<xsl:template name="content">
<h2><xsl:value-of select="$title" /></h2>
<xsl:for-each select="/report/incident">
<xsl:for-each select="resource[@name='overall-status']">
<section class="box">
<h3 class="box_title">Overview for <code><xsl:value-of select="value[@member='global-config']/value[@member='hostname']/@value" /></code></h3>
<ul class="boxnav">
<li><a href="/admin/reloadconfig.xsl">Reload Configuration</a></li>
</ul>
<div class="side-by-side">
<div>
<h4>Health</h4>
<div class="trafficlight colour-{value[@member='status']/@value}">&#160;</div>
</div>
<div>
<h4>Current load</h4>
<table class="table-block">
<tbody>
<xsl:for-each select="value[@member='global-current']/value">
<tr>
<xsl:variable name="member" select="@member" />
<xsl:variable name="of" select="../../value[@member='global-config']/value[@member=$member]/@value" />
<td><xsl:value-of select="concat(translate(substring(@member, 1, 1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), substring(@member, 2))" /></td>
<td class="barmeter">
<span><xsl:value-of select="@value" /> of <xsl:value-of select="$of" /></span>
<div style="width: calc(100% * {@value} / {$of});">&#160;</div>
</td>
</tr>
</xsl:for-each>
</tbody>
</table>
</div>
</div>
</section>
</xsl:for-each>
<xsl:for-each select="resource[@name='maintenance']">
<section class="box">
<h3 class="box_title">Maintenance</h3>
<xsl:choose>
<xsl:when test="value">
<ul class="maintenance-container">
<xsl:for-each select="value">
<li class="maintenance-level-{value[@member='type']/@value}">
<p><xsl:value-of select="text/text()" /></p>
<ul class="references">
<xsl:for-each select="reference">
<li><a href="{@href}"><xsl:value-of select="concat(translate(substring(@type, 1, 1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), substring(@type, 2))" /></a></li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
</xsl:when>
<xsl:otherwise>
<p>Nothing to do.</p>
</xsl:otherwise>
</xsl:choose>
</section>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,18 +1,18 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:include href="includes/web-page.xsl"/>
<xsl:variable name="title">Error</xsl:variable>
<xsl:include href="includes/web-page.xsl"/>
<xsl:variable name="title">Error</xsl:variable>
<xsl:template name="content">
<h2><xsl:value-of select="$title" /></h2>
<xsl:for-each select="/report/incident">
<section class="box">
<h3 class="box_title">Response</h3>
<h4>Message</h4>
<p><xsl:value-of select="state/text" /></p>
<xsl:if test="state/@definition">
<p>Error code: <xsl:value-of select="state/@definition" /></p>
</xsl:if>
</section>
</xsl:for-each>
</xsl:template>
<xsl:template name="content">
<h2><xsl:value-of select="$title" /></h2>
<xsl:for-each select="/report/incident">
<section class="box">
<h3 class="box_title">Response</h3>
<h4>Message</h4>
<p><xsl:value-of select="state/text" /></p>
<xsl:if test="state/@definition">
<p>Error code: <xsl:value-of select="state/@definition" /></p>
</xsl:if>
</section>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,15 +1,15 @@
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0">
<xsl:output omit-xml-declaration="yes" media-type="text/plain" method="text" indent="no" encoding="UTF-8" />
<xsl:template name="content" match="/report">
<xsl:for-each select="/report/incident">
<xsl:text>Report:&#xa;</xsl:text>
<xsl:value-of select="state/text" />
<xsl:text>&#xa;</xsl:text>
<xsl:if test="state/@definition">
<xsl:text>Error code: </xsl:text>
<xsl:value-of select="state/@definition" />
<xsl:text>&#xa;</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
<xsl:template name="content" match="/report">
<xsl:for-each select="/report/incident">
<xsl:text>Report:&#xa;</xsl:text>
<xsl:value-of select="state/text" />
<xsl:text>&#xa;</xsl:text>
<xsl:if test="state/@definition">
<xsl:text>Error code: </xsl:text>
<xsl:value-of select="state/@definition" />
<xsl:text>&#xa;</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,47 +1,47 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<xsl:include href="includes/mountnav.xsl"/>
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<xsl:include href="includes/mountnav.xsl"/>
<xsl:variable name="title">Set fallback</xsl:variable>
<xsl:variable name="title">Set fallback</xsl:variable>
<xsl:template name="content">
<div class="section">
<h2><xsl:value-of select="$title" /></h2>
<section class="box">
<h3 class="box_title">Mountpoint <code><xsl:value-of select="@mount" /></code></h3>
<!-- Mount nav -->
<xsl:call-template name="mountnav">
<xsl:with-param name="mount" select="current_source"/>
</xsl:call-template>
<xsl:choose>
<xsl:when test="source">
<p>Choose the mountpoint to which you want listeners to fallback to:</p>
<form method="post" action="/admin/fallbacks.xsl">
<label for="fallback" class="hidden">
Set fallback for <code><xsl:value-of select="current_source" /></code> to
</label>
<select name="fallback" id="fallback">
<xsl:for-each select="source">
<option value="{@mount}">
<xsl:value-of select="@mount" />
</option>
</xsl:for-each>
</select>
<input type="hidden" name="mount" value="{current_source}" />
<input type="hidden" name="omode" value="strict" />
&#160;
<input type="submit" value="Set fallback" />
</form>
</xsl:when>
<xsl:otherwise>
<aside class="warning">
<strong>No mounts!</strong>
There are no other mountpoints you could set as fallback.
</aside>
</xsl:otherwise>
</xsl:choose>
</section>
</div>
</xsl:template>
<xsl:template name="content">
<div class="section">
<h2><xsl:value-of select="$title" /></h2>
<section class="box">
<h3 class="box_title">Mountpoint <code><xsl:value-of select="@mount" /></code></h3>
<!-- Mount nav -->
<xsl:call-template name="mountnav">
<xsl:with-param name="mount" select="current_source"/>
</xsl:call-template>
<xsl:choose>
<xsl:when test="source">
<p>Choose the mountpoint to which you want listeners to fallback to:</p>
<form method="post" action="/admin/fallbacks.xsl">
<label for="fallback" class="hidden">
Set fallback for <code><xsl:value-of select="current_source" /></code> to
</label>
<select name="fallback" id="fallback">
<xsl:for-each select="source">
<option value="{@mount}">
<xsl:value-of select="@mount" />
</option>
</xsl:for-each>
</select>
<input type="hidden" name="mount" value="{current_source}" />
<input type="hidden" name="omode" value="strict" />
&#160;
<input type="submit" value="Set fallback" />
</form>
</xsl:when>
<xsl:otherwise>
<aside class="warning">
<strong>No mounts!</strong>
There are no other mountpoints you could set as fallback.
</aside>
</xsl:otherwise>
</xsl:choose>
</section>
</div>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,9 +1,9 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template name="footer">
<xsl:template name="footer">
<div class="footer">
<p>Support Icecast development at <a href="http://icecast.org">icecast.org</a></p>
</div>
<div class="footer">
<p>Support Icecast development at <a href="http://icecast.org">icecast.org</a></p>
</div>
</xsl:template>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,15 +1,15 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template name="head">
<xsl:param name="title"/>
<head>
<meta charset="utf-8" />
<title><xsl:if test="$title"><xsl:value-of select="$title"/></xsl:if>Icecast Admin</title>
<xsl:template name="head">
<xsl:param name="title"/>
<head>
<meta charset="utf-8" />
<title><xsl:if test="$title"><xsl:value-of select="$title"/></xsl:if>Icecast Admin</title>
<link rel="stylesheet" type="text/css" href="/assets/css/style.css" />
<link rel="stylesheet" type="text/css" href="/assets/css/style.css" />
<meta name="theme-color" content="#001826" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="description" content="Icecast Server status page" />
</head>
</xsl:template>
<meta name="theme-color" content="#001826" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<meta name="description" content="Icecast Server status page" />
</head>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,26 +1,26 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template name="header">
<xsl:template name="header">
<header>
<nav id="main-nav" role="primary">
<a href="/" id="branding">
<img src="/assets/img/icecast.png" alt="Logo" />
<h1>Icecast Server administration</h1>
</a>
<ul>
<li class="adminlink"><a href="/admin/dashboard.xsl">Dashboard</a></li>
<li class="adminlink"><a href="/admin/stats.xsl">Server status</a></li>
<li class="adminlink"><a href="/admin/listmounts.xsl">Mountpoint list</a></li>
<li class="adminlink"><a href="/admin/showlog.xsl">Logfiles</a></li>
<xsl:for-each select="(/report/extension/icestats | /icestats | /iceresponse)/modules/module">
<xsl:if test="@management-url and @management-title">
<li class="adminlink"><a href="{@management-url}"><xsl:value-of select="@management-title" /></a></li>
</xsl:if>
</xsl:for-each>
<li class="right"><a href="/status.xsl">Public area</a></li>
</ul>
</nav>
</header>
<header>
<nav id="main-nav" role="primary">
<a href="/" id="branding">
<img src="/assets/img/icecast.png" alt="Logo" />
<h1>Icecast Server administration</h1>
</a>
<ul>
<li class="adminlink"><a href="/admin/dashboard.xsl">Dashboard</a></li>
<li class="adminlink"><a href="/admin/stats.xsl">Server status</a></li>
<li class="adminlink"><a href="/admin/listmounts.xsl">Mountpoint list</a></li>
<li class="adminlink"><a href="/admin/showlog.xsl">Logfiles</a></li>
<xsl:for-each select="(/report/extension/icestats | /icestats | /iceresponse)/modules/module">
<xsl:if test="@management-url and @management-title">
<li class="adminlink"><a href="{@management-url}"><xsl:value-of select="@management-title" /></a></li>
</xsl:if>
</xsl:for-each>
<li class="right"><a href="/status.xsl">Public area</a></li>
</ul>
</nav>
</header>
</xsl:template>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,15 +1,15 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template name="mountnav">
<xsl:param name="mount" select="@mount"/>
<div class="mountnav">
<ul class="boxnav">
<li><a href="/admin/stats.xsl?mount={$mount}#mount-1">Details</a></li>
<li><a href="/admin/listclients.xsl?mount={$mount}">Clients</a></li>
<li><a href="/admin/moveclients.xsl?mount={$mount}">Move listeners</a></li>
<li><a href="/admin/updatemetadata.xsl?mount={$mount}">Metadata</a></li>
<li><a href="/admin/fallbacks.xsl?mount={$mount}&amp;omode=strict">Set fallback</a></li>
<li class="critical"><a href="/admin/killsource.xsl?mount={$mount}">Kill source</a></li>
</ul>
</div>
</xsl:template>
<xsl:template name="mountnav">
<xsl:param name="mount" select="@mount"/>
<div class="mountnav">
<ul class="boxnav">
<li><a href="/admin/stats.xsl?mount={$mount}#mount-1">Details</a></li>
<li><a href="/admin/listclients.xsl?mount={$mount}">Clients</a></li>
<li><a href="/admin/moveclients.xsl?mount={$mount}">Move listeners</a></li>
<li><a href="/admin/updatemetadata.xsl?mount={$mount}">Metadata</a></li>
<li><a href="/admin/fallbacks.xsl?mount={$mount}&amp;omode=strict">Set fallback</a></li>
<li class="critical"><a href="/admin/killsource.xsl?mount={$mount}">Kill source</a></li>
</ul>
</div>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,31 +1,31 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" doctype-system="about:legacy-compat" encoding="utf-8" />
<!-- Import include files -->
<xsl:include href="includes/head.xsl"/>
<xsl:include href="includes/header.xsl"/>
<xsl:include href="includes/footer.xsl"/>
<xsl:output method="html" doctype-system="about:legacy-compat" encoding="utf-8" />
<!-- Import include files -->
<xsl:include href="includes/head.xsl"/>
<xsl:include href="includes/header.xsl"/>
<xsl:include href="includes/footer.xsl"/>
<xsl:template match="/node()">
<html>
<xsl:template match="/node()">
<html>
<xsl:call-template name="head">
<xsl:with-param name="title" select="$title" />
</xsl:call-template>
<xsl:call-template name="head">
<xsl:with-param name="title" select="$title" />
</xsl:call-template>
<body>
<!-- Header/Menu -->
<xsl:call-template name="header" />
<body>
<!-- Header/Menu -->
<xsl:call-template name="header" />
<main role="main">
<xsl:call-template name="content" />
</main>
<main role="main">
<xsl:call-template name="content" />
</main>
<!-- Footer -->
<footer>
<xsl:call-template name="footer" />
</footer>
<!-- Footer -->
<footer>
<xsl:call-template name="footer" />
</footer>
</body>
</html>
</xsl:template>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,23 +1,23 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template name="player">
<div>
<ul class="playlists">
<li><a href="{@mount}">Direct</a></li>
<li><a href="{@mount}.m3u">M3U</a></li>
<li><a href="{@mount}.xspf">XSPF</a></li>
</ul>
<xsl:template name="player">
<div>
<ul class="playlists">
<li><a href="{@mount}">Direct</a></li>
<li><a href="{@mount}.m3u">M3U</a></li>
<li><a href="{@mount}.xspf">XSPF</a></li>
</ul>
<!-- Playlists section -->
<h4>Play stream</h4>
<!-- Playlists section -->
<h4>Play stream</h4>
<!-- Player -->
<xsl:if test="content-type and ((content-type = 'application/ogg') or (content-type = 'audio/ogg') or (content-type = 'audio/webm'))">
<div class="audioplayer">
<audio controls="controls" preload="none">
<source src="{@mount}" type="{content-type}" />
</audio>
</div>
</xsl:if>
</div>
</xsl:template>
<!-- Player -->
<xsl:if test="content-type and ((content-type = 'application/ogg') or (content-type = 'audio/ogg') or (content-type = 'audio/webm'))">
<div class="audioplayer">
<audio controls="controls" preload="none">
<source src="{@mount}" type="{content-type}" />
</audio>
</div>
</xsl:if>
</div>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,29 +1,29 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template name="playlist">
<xsl:if test="playlist/*">
<h4>Playlist</h4>
<div class="playlist-container">
<table class="table-block">
<thead>
<tr>
<th>Album</th>
<th width="10%">Track</th>
<th>Creator</th>
<th width="33%">Title</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="playlist/trackList/track">
<tr>
<td><xsl:value-of select="album" /></td>
<td><xsl:value-of select="trackNum" /></td>
<td><xsl:value-of select="creator" /></td>
<td><xsl:value-of select="title" /></td>
</tr>
</xsl:for-each>
</tbody>
</table>
</div>
</xsl:if>
</xsl:template>
<xsl:template name="playlist">
<xsl:if test="playlist/*">
<h4>Playlist</h4>
<div class="playlist-container">
<table class="table-block">
<thead>
<tr>
<th>Album</th>
<th width="10%">Track</th>
<th>Creator</th>
<th width="33%">Title</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="playlist/trackList/track">
<tr>
<td><xsl:value-of select="album" /></td>
<td><xsl:value-of select="trackNum" /></td>
<td><xsl:value-of select="creator" /></td>
<td><xsl:value-of select="title" /></td>
</tr>
</xsl:for-each>
</tbody>
</table>
</div>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,5 +1,5 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" doctype-system="about:legacy-compat" encoding="utf-8" />
<xsl:output method="html" doctype-system="about:legacy-compat" encoding="utf-8" />
<!-- Import include files -->
<xsl:template match="/node()">
@ -15,15 +15,15 @@
<meta name="description" content="Icecast is free server software for streaming multimedia." />
</head>
<body>
<xsl:text disable-output-escaping="yes">
&lt;!-- WARNING:
DO NOT ATTEMPT TO PARSE ICECAST HTML OUTPUT!
The web interface may change completely between releases.
If you have a need for automatic processing of server data,
please read the appropriate documentation. Latest docs:
https://icecast.org/docs/icecast-latest/icecast2_stats.html
-->
</xsl:text>
<xsl:text disable-output-escaping="yes">
&lt;!-- WARNING:
DO NOT ATTEMPT TO PARSE ICECAST HTML OUTPUT!
The web interface may change completely between releases.
If you have a need for automatic processing of server data,
please read the appropriate documentation. Latest docs:
https://icecast.org/docs/icecast-latest/icecast2_stats.html
-->
</xsl:text>
<!-- Header and menu -->
<header>
<nav id="main-nav" role="primary">
@ -41,15 +41,15 @@
<!--<h1 id="header">Icecast <xsl:value-of select="$title"/></h1>-->
<!-- Content -->
<main role="main">
<xsl:call-template name="content" namespace="http://www.w3.org/1999/xhtml" />
</main>
<!-- Content -->
<main role="main">
<xsl:call-template name="content" namespace="http://www.w3.org/1999/xhtml" />
</main>
<!-- Footer -->
<footer>
<p>Support icecast development at <a href="http://icecast.org">icecast.org</a></p>
</footer>
<!-- Footer -->
<footer>
<p>Support icecast development at <a href="http://icecast.org">icecast.org</a></p>
</footer>
</body>
</html>
</xsl:template>

View File

@ -1,57 +1,57 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<xsl:include href="includes/mountnav.xsl"/>
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<xsl:include href="includes/mountnav.xsl"/>
<xsl:variable name="title">Listener Stats</xsl:variable>
<xsl:variable name="title">Listener Stats</xsl:variable>
<xsl:template name="content">
<div class="section">
<h2><xsl:value-of select="$title" /></h2>
<xsl:template name="content">
<div class="section">
<h2><xsl:value-of select="$title" /></h2>
<xsl:for-each select="source">
<section class="box">
<h3 class="box_title">Mountpoint <code><xsl:value-of select="@mount" /></code></h3>
<!-- Mount nav -->
<xsl:call-template name="mountnav" />
<h4>Listeners</h4>
<xsl:choose>
<xsl:when test="listener">
<table class="table-flipscroll">
<thead>
<tr>
<th>IP</th>
<th>Username</th>
<th>Role</th>
<th>Sec. connected</th>
<th>User Agent</th>
<th class="actions">Action</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="listener">
<tr>
<td><xsl:value-of select="ip" /></td>
<td><xsl:value-of select="username" /></td>
<td><xsl:value-of select="role" /></td>
<td><xsl:value-of select="connected" /></td>
<td><xsl:value-of select="useragent" /></td>
<td class="actions">
<a class="critical" href="/admin/killclient.xsl?mount={../@mount}&amp;id={id}">Kick</a>
<a href="/admin/moveclients.xsl?mount={../@mount}&amp;id={id}">Move</a>
</td>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:when>
<xsl:otherwise>
<p>No listeners connected</p>
</xsl:otherwise>
</xsl:choose>
</section>
</xsl:for-each>
<xsl:for-each select="source">
<section class="box">
<h3 class="box_title">Mountpoint <code><xsl:value-of select="@mount" /></code></h3>
<!-- Mount nav -->
<xsl:call-template name="mountnav" />
<h4>Listeners</h4>
<xsl:choose>
<xsl:when test="listener">
<table class="table-flipscroll">
<thead>
<tr>
<th>IP</th>
<th>Username</th>
<th>Role</th>
<th>Sec. connected</th>
<th>User Agent</th>
<th class="actions">Action</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="listener">
<tr>
<td><xsl:value-of select="ip" /></td>
<td><xsl:value-of select="username" /></td>
<td><xsl:value-of select="role" /></td>
<td><xsl:value-of select="connected" /></td>
<td><xsl:value-of select="useragent" /></td>
<td class="actions">
<a class="critical" href="/admin/killclient.xsl?mount={../@mount}&amp;id={id}">Kick</a>
<a href="/admin/moveclients.xsl?mount={../@mount}&amp;id={id}">Move</a>
</td>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:when>
<xsl:otherwise>
<p>No listeners connected</p>
</xsl:otherwise>
</xsl:choose>
</section>
</xsl:for-each>
</div>
</xsl:template>
</div>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,63 +1,63 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<xsl:include href="includes/mountnav.xsl"/>
<xsl:include href="includes/player.xsl"/>
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<xsl:include href="includes/mountnav.xsl"/>
<xsl:include href="includes/player.xsl"/>
<xsl:variable name="title">Active Mountpoints</xsl:variable>
<xsl:variable name="title">Active Mountpoints</xsl:variable>
<!-- Auth template -->
<xsl:template name="authlist">
<ul>
<xsl:for-each select="authentication/role">
<li>Role
<xsl:if test="@name">
<xsl:value-of select="@name" />
</xsl:if>
of type <xsl:value-of select="@type" />
<xsl:if test="@management-url">
<xsl:choose>
<xsl:when test="@can-adduser='true' or @can-deleteuser='true'">
(<a href="{@management-url}">Manage</a>)
</xsl:when>
<xsl:when test="@can-listuser='true'">
(<a href="{@management-url}">List</a>)
</xsl:when>
</xsl:choose>
</xsl:if>
</li>
</xsl:for-each>
</ul>
</xsl:template>
<!-- Auth template -->
<xsl:template name="authlist">
<ul>
<xsl:for-each select="authentication/role">
<li>Role
<xsl:if test="@name">
<xsl:value-of select="@name" />
</xsl:if>
of type <xsl:value-of select="@type" />
<xsl:if test="@management-url">
<xsl:choose>
<xsl:when test="@can-adduser='true' or @can-deleteuser='true'">
(<a href="{@management-url}">Manage</a>)
</xsl:when>
<xsl:when test="@can-listuser='true'">
(<a href="{@management-url}">List</a>)
</xsl:when>
</xsl:choose>
</xsl:if>
</li>
</xsl:for-each>
</ul>
</xsl:template>
<xsl:template name="content">
<div class="section">
<h2><xsl:value-of select="$title" /></h2>
<xsl:choose>
<xsl:when test="source">
<xsl:for-each select="source">
<section class="box">
<h3 class="box_title">Mountpoint <code><xsl:value-of select="@mount" /></code></h3>
<!-- Mount nav -->
<xsl:call-template name="mountnav" />
<xsl:call-template name="player" />
<p><xsl:value-of select="listeners" /> Listener(s)</p>
<xsl:template name="content">
<div class="section">
<h2><xsl:value-of select="$title" /></h2>
<xsl:choose>
<xsl:when test="source">
<xsl:for-each select="source">
<section class="box">
<h3 class="box_title">Mountpoint <code><xsl:value-of select="@mount" /></code></h3>
<!-- Mount nav -->
<xsl:call-template name="mountnav" />
<xsl:call-template name="player" />
<p><xsl:value-of select="listeners" /> Listener(s)</p>
<!-- Mount Authentication -->
<xsl:if test="authentication">
<h4>Mount Authentication</h4>
<xsl:call-template name="authlist" />
</xsl:if>
</section>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<aside class="info">
<strong>No mounts!</strong> There are no active mountpoints.
</aside>
</xsl:otherwise>
</xsl:choose>
</div>
</xsl:template>
<!-- Mount Authentication -->
<xsl:if test="authentication">
<h4>Mount Authentication</h4>
<xsl:call-template name="authlist" />
</xsl:if>
</section>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<aside class="info">
<strong>No mounts!</strong> There are no active mountpoints.
</aside>
</xsl:otherwise>
</xsl:choose>
</div>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,72 +1,72 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<xsl:include href="includes/mountnav.xsl"/>
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<xsl:include href="includes/mountnav.xsl"/>
<xsl:variable name="title">Manage Authentication</xsl:variable>
<xsl:variable name="title">Manage Authentication</xsl:variable>
<xsl:template name="content">
<div class="section">
<h2><xsl:value-of select="$title" /></h2>
<xsl:if test="iceresponse">
<aside class="error">
<xsl:value-of select="iceresponse/message" />
</aside>
</xsl:if>
<xsl:for-each select="role">
<section class="box">
<h3 class="box_title">Role <code><xsl:value-of select="@name" /></code> (<code><xsl:value-of select="@type" /></code>)
<xsl:if test="server_name">
<xsl:text> </xsl:text><small><xsl:value-of select="server_name" /></small>
</xsl:if>
</h3>
<xsl:choose>
<xsl:when test="users/user">
<table class="table-flipscroll">
<thead>
<tr>
<th>User</th>
<xsl:if test="@can-deleteuser = 'true'">
<th class="actions">Action</th>
</xsl:if>
</tr>
</thead>
<tbody>
<xsl:for-each select="users/user">
<tr>
<td><xsl:value-of select="username" /></td>
<xsl:if test="../../@can-deleteuser = 'true'">
<td class="actions">
<a class="critical" href="/admin/manageauth.xsl?id={../../@id}&amp;username={username}&amp;action=delete">Delete</a>
</td>
</xsl:if>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:when>
<xsl:otherwise>
<p>No Users</p>
</xsl:otherwise>
</xsl:choose>
<!-- Form to add Users -->
<xsl:if test="@can-adduser = 'true'">
<h4>Add User</h4>
<form method="post" action="/admin/manageauth.xsl">
<input type="hidden" name="id" value="{@id}"/>
<input type="hidden" name="action" value="add"/>
<xsl:template name="content">
<div class="section">
<h2><xsl:value-of select="$title" /></h2>
<xsl:if test="iceresponse">
<aside class="error">
<xsl:value-of select="iceresponse/message" />
</aside>
</xsl:if>
<xsl:for-each select="role">
<section class="box">
<h3 class="box_title">Role <code><xsl:value-of select="@name" /></code> (<code><xsl:value-of select="@type" /></code>)
<xsl:if test="server_name">
<xsl:text> </xsl:text><small><xsl:value-of select="server_name" /></small>
</xsl:if>
</h3>
<xsl:choose>
<xsl:when test="users/user">
<table class="table-flipscroll">
<thead>
<tr>
<th>User</th>
<xsl:if test="@can-deleteuser = 'true'">
<th class="actions">Action</th>
</xsl:if>
</tr>
</thead>
<tbody>
<xsl:for-each select="users/user">
<tr>
<td><xsl:value-of select="username" /></td>
<xsl:if test="../../@can-deleteuser = 'true'">
<td class="actions">
<a class="critical" href="/admin/manageauth.xsl?id={../../@id}&amp;username={username}&amp;action=delete">Delete</a>
</td>
</xsl:if>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:when>
<xsl:otherwise>
<p>No Users</p>
</xsl:otherwise>
</xsl:choose>
<!-- Form to add Users -->
<xsl:if test="@can-adduser = 'true'">
<h4>Add User</h4>
<form method="post" action="/admin/manageauth.xsl">
<input type="hidden" name="id" value="{@id}"/>
<input type="hidden" name="action" value="add"/>
<label for="username" class="hidden">Username: </label>
<input type="text" id="username" name="username" value="" placeholder="Username" required="required" />
&#160;
<label for="password" class="hidden">Password: </label>
<input type="password" id="password" name="password" value="" placeholder="Password" required="required" />
&#160;
<input type="submit" value="Add new user" />
</form>
</xsl:if>
</section>
</xsl:for-each>
</div>
</xsl:template>
<label for="username" class="hidden">Username: </label>
<input type="text" id="username" name="username" value="" placeholder="Username" required="required" />
&#160;
<label for="password" class="hidden">Password: </label>
<input type="password" id="password" name="password" value="" placeholder="Password" required="required" />
&#160;
<input type="submit" value="Add new user" />
</form>
</xsl:if>
</section>
</xsl:for-each>
</div>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,54 +1,54 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<xsl:include href="includes/mountnav.xsl"/>
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<xsl:include href="includes/mountnav.xsl"/>
<xsl:variable name="title">Move listeners</xsl:variable>
<xsl:variable name="title">Move listeners</xsl:variable>
<xsl:template name="content">
<div class="section">
<h2><xsl:value-of select="$title" /></h2>
<section class="box">
<h3 class="box_title">Mountpoint <code><xsl:value-of select="@mount" /></code></h3>
<!-- Mount nav -->
<xsl:call-template name="mountnav">
<xsl:with-param name="mount" select="current_source"/>
</xsl:call-template>
<xsl:choose>
<xsl:when test="source">
<xsl:choose>
<xsl:when test="param-id">
<input type="hidden" name="id" value="{param-id}" />
<p>Choose the mountpoint to which you want to move the listener to:</p>
</xsl:when>
<xsl:otherwise>
<p>Choose the mountpoint to which you want to move the listeners to:</p>
</xsl:otherwise>
</xsl:choose>
<form method="post" action="/admin/moveclients.xsl">
<label for="moveto" class="hidden">
Move from <code><xsl:value-of select="current_source" /></code> to
</label>
<select name="destination" id="moveto">
<xsl:for-each select="source">
<option value="{@mount}">
<xsl:value-of select="@mount" />
</option>
</xsl:for-each>
</select>
<input type="hidden" name="mount" value="{current_source}" />
&#160;
<input type="submit" value="Move listeners" />
</form>
</xsl:when>
<xsl:otherwise>
<aside class="warning">
<strong>No mounts!</strong>
There are no other mountpoints you could move the listeners to.
</aside>
</xsl:otherwise>
</xsl:choose>
</section>
</div>
</xsl:template>
<xsl:template name="content">
<div class="section">
<h2><xsl:value-of select="$title" /></h2>
<section class="box">
<h3 class="box_title">Mountpoint <code><xsl:value-of select="@mount" /></code></h3>
<!-- Mount nav -->
<xsl:call-template name="mountnav">
<xsl:with-param name="mount" select="current_source"/>
</xsl:call-template>
<xsl:choose>
<xsl:when test="source">
<xsl:choose>
<xsl:when test="param-id">
<input type="hidden" name="id" value="{param-id}" />
<p>Choose the mountpoint to which you want to move the listener to:</p>
</xsl:when>
<xsl:otherwise>
<p>Choose the mountpoint to which you want to move the listeners to:</p>
</xsl:otherwise>
</xsl:choose>
<form method="post" action="/admin/moveclients.xsl">
<label for="moveto" class="hidden">
Move from <code><xsl:value-of select="current_source" /></code> to
</label>
<select name="destination" id="moveto">
<xsl:for-each select="source">
<option value="{@mount}">
<xsl:value-of select="@mount" />
</option>
</xsl:for-each>
</select>
<input type="hidden" name="mount" value="{current_source}" />
&#160;
<input type="submit" value="Move listeners" />
</form>
</xsl:when>
<xsl:otherwise>
<aside class="warning">
<strong>No mounts!</strong>
There are no other mountpoints you could move the listeners to.
</aside>
</xsl:otherwise>
</xsl:choose>
</section>
</div>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,18 +1,18 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<xsl:variable name="title">Server Response</xsl:variable>
<xsl:variable name="title">Server Response</xsl:variable>
<xsl:template name="content">
<h2><xsl:value-of select="$title" /></h2>
<xsl:for-each select="/iceresponse">
<section class="box">
<h3 class="box_title">Response</h3>
<h4>Message</h4>
<p><xsl:value-of select="message" /></p>
<p>(Return Code: <xsl:value-of select="return" />)</p>
</section>
</xsl:for-each>
</xsl:template>
<xsl:template name="content">
<h2><xsl:value-of select="$title" /></h2>
<xsl:for-each select="/iceresponse">
<section class="box">
<h3 class="box_title">Response</h3>
<h4>Message</h4>
<p><xsl:value-of select="message" /></p>
<p>(Return Code: <xsl:value-of select="return" />)</p>
</section>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,24 +1,24 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:include href="includes/page.xsl"/>
<xsl:variable name="title">Logfiles</xsl:variable>
<xsl:include href="includes/page.xsl"/>
<xsl:variable name="title">Logfiles</xsl:variable>
<xsl:template name="content">
<h2><xsl:value-of select="$title" /></h2>
<xsl:for-each select="/report/incident">
<section class="box">
<h3 class="box_title">Logfile <code><xsl:value-of select="resource[@name='logcontent']/value/value[@member='logfile']/@value" /></code></h3>
<ul class="boxnav">
<xsl:for-each select="resource[@name='logfiles']/value/value">
<li><a href="?logfile={@value}"><xsl:value-of select="@value" /></a></li>
</xsl:for-each>
<li class="critical"><a href="/admin/marklog.xsl">Mark logfiles</a></li>
</ul>
<ul class="codeblock">
<xsl:for-each select="resource[@name='logcontent']/value/value[@member='lines']/value">
<li><pre><xsl:value-of select="@value" /></pre></li>
</xsl:for-each>
</ul>
</section>
</xsl:for-each>
</xsl:template>
<xsl:template name="content">
<h2><xsl:value-of select="$title" /></h2>
<xsl:for-each select="/report/incident">
<section class="box">
<h3 class="box_title">Logfile <code><xsl:value-of select="resource[@name='logcontent']/value/value[@member='logfile']/@value" /></code></h3>
<ul class="boxnav">
<xsl:for-each select="resource[@name='logfiles']/value/value">
<li><a href="?logfile={@value}"><xsl:value-of select="@value" /></a></li>
</xsl:for-each>
<li class="critical"><a href="/admin/marklog.xsl">Mark logfiles</a></li>
</ul>
<ul class="codeblock">
<xsl:for-each select="resource[@name='logcontent']/value/value[@member='lines']/value">
<li><pre><xsl:value-of select="@value" /></pre></li>
</xsl:for-each>
</ul>
</section>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,131 +1,131 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<xsl:include href="includes/mountnav.xsl"/>
<xsl:include href="includes/player.xsl"/>
<xsl:include href="includes/playlist.xsl"/>
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<xsl:include href="includes/mountnav.xsl"/>
<xsl:include href="includes/player.xsl"/>
<xsl:include href="includes/playlist.xsl"/>
<xsl:param name="param-showall" />
<xsl:param name="param-has-mount" />
<xsl:variable name="title">Server status</xsl:variable>
<xsl:param name="param-showall" />
<xsl:param name="param-has-mount" />
<xsl:variable name="title">Server status</xsl:variable>
<!-- Auth template -->
<xsl:template name="authlist">
<ul>
<xsl:for-each select="authentication/role">
<li>Role
<xsl:if test="@name">
<xsl:value-of select="@name" />
</xsl:if>
of type <xsl:value-of select="@type" />
<xsl:if test="@management-url">
<xsl:choose>
<xsl:when test="@can-adduser='true' or @can-deleteuser='true'">
(<a href="{@management-url}">Manage</a>)
</xsl:when>
<xsl:when test="@can-listuser='true'">
(<a href="{@management-url}">List</a>)
</xsl:when>
</xsl:choose>
</xsl:if>
</li>
</xsl:for-each>
</ul>
</xsl:template>
<!-- Auth template -->
<xsl:template name="authlist">
<ul>
<xsl:for-each select="authentication/role">
<li>Role
<xsl:if test="@name">
<xsl:value-of select="@name" />
</xsl:if>
of type <xsl:value-of select="@type" />
<xsl:if test="@management-url">
<xsl:choose>
<xsl:when test="@can-adduser='true' or @can-deleteuser='true'">
(<a href="{@management-url}">Manage</a>)
</xsl:when>
<xsl:when test="@can-listuser='true'">
(<a href="{@management-url}">List</a>)
</xsl:when>
</xsl:choose>
</xsl:if>
</li>
</xsl:for-each>
</ul>
</xsl:template>
<xsl:template name="content">
<h2>Server status</h2>
<xsl:template name="content">
<h2>Server status</h2>
<!-- Global stats table -->
<section class="box">
<h3 class="box_title">Global server stats</h3>
<!-- Global subnav -->
<div class="stats">
<ul class="boxnav">
<li><a href="/admin/reloadconfig.xsl">Reload Configuration</a></li>
<li><a href="/admin/?showall=true">Show all mounts</a></li>
</ul>
</div>
<!-- Global stats table -->
<section class="box">
<h3 class="box_title">Global server stats</h3>
<!-- Global subnav -->
<div class="stats">
<ul class="boxnav">
<li><a href="/admin/reloadconfig.xsl">Reload Configuration</a></li>
<li><a href="/admin/?showall=true">Show all mounts</a></li>
</ul>
</div>
<h4>Statistics</h4>
<h4>Statistics</h4>
<table class="table-block">
<thead>
<tr>
<th>Key</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="/icestats/*[not(self::source) and not(self::authentication) and not(self::modules)]">
<tr>
<td><xsl:value-of select="name()" /></td>
<td><xsl:value-of select="text()" /></td>
</tr>
</xsl:for-each>
</tbody>
</table>
<table class="table-block">
<thead>
<tr>
<th>Key</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="/icestats/*[not(self::source) and not(self::authentication) and not(self::modules)]">
<tr>
<td><xsl:value-of select="name()" /></td>
<td><xsl:value-of select="text()" /></td>
</tr>
</xsl:for-each>
</tbody>
</table>
<!-- Global Auth -->
<xsl:if test="authentication">
<h4>Authentication</h4>
<xsl:call-template name="authlist" />
</xsl:if>
</section>
<!-- Global Auth -->
<xsl:if test="authentication">
<h4>Authentication</h4>
<xsl:call-template name="authlist" />
</xsl:if>
</section>
<!-- Mount stats -->
<xsl:if test="$param-showall or $param-has-mount">
<xsl:for-each select="source">
<section class="box" id="mount-{position()}">
<h3 class="box_title">Mountpoint <code><xsl:value-of select="@mount" /></code></h3>
<!-- Mount nav -->
<xsl:call-template name="mountnav" />
<xsl:call-template name="player" />
<h4>Further information</h4>
<table class="table-block">
<thead>
<tr>
<th>Key</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="*[not(self::metadata) and not(self::authentication) and not(self::authenticator) and not(self::listener)]">
<tr>
<td><xsl:value-of select="name()" /></td>
<td><xsl:value-of select="text()" /></td>
</tr>
</xsl:for-each>
</tbody>
</table>
<!-- Mount stats -->
<xsl:if test="$param-showall or $param-has-mount">
<xsl:for-each select="source">
<section class="box" id="mount-{position()}">
<h3 class="box_title">Mountpoint <code><xsl:value-of select="@mount" /></code></h3>
<!-- Mount nav -->
<xsl:call-template name="mountnav" />
<xsl:call-template name="player" />
<h4>Further information</h4>
<table class="table-block">
<thead>
<tr>
<th>Key</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="*[not(self::metadata) and not(self::authentication) and not(self::authenticator) and not(self::listener)]">
<tr>
<td><xsl:value-of select="name()" /></td>
<td><xsl:value-of select="text()" /></td>
</tr>
</xsl:for-each>
</tbody>
</table>
<!-- Extra metadata -->
<xsl:if test="metadata/*">
<h4>Extra Metadata</h4>
<table class="table-block">
<tbody>
<xsl:for-each select="metadata/*">
<tr>
<td><xsl:value-of select="name()" /></td>
<td><xsl:value-of select="text()" /></td>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:if>
<!-- Extra metadata -->
<xsl:if test="metadata/*">
<h4>Extra Metadata</h4>
<table class="table-block">
<tbody>
<xsl:for-each select="metadata/*">
<tr>
<td><xsl:value-of select="name()" /></td>
<td><xsl:value-of select="text()" /></td>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:if>
<!-- Extra playlist -->
<xsl:call-template name="playlist" />
<!-- Extra playlist -->
<xsl:call-template name="playlist" />
<!-- Mount Authentication -->
<xsl:if test="authentication/*">
<h4>Mount Authentication</h4>
<xsl:call-template name="authlist" />
</xsl:if>
<!-- Mount Authentication -->
<xsl:if test="authentication/*">
<h4>Mount Authentication</h4>
<xsl:call-template name="authlist" />
</xsl:if>
</section>
</xsl:for-each>
</xsl:if>
</xsl:template>
</section>
</xsl:for-each>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,39 +1,39 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<xsl:include href="includes/mountnav.xsl"/>
<!-- Import include files -->
<xsl:include href="includes/page.xsl"/>
<xsl:include href="includes/mountnav.xsl"/>
<xsl:variable name="title">Update Metadata</xsl:variable>
<xsl:variable name="title">Update Metadata</xsl:variable>
<xsl:template name="content">
<div class="section">
<h2><xsl:value-of select="$title" /></h2>
<xsl:template name="content">
<div class="section">
<h2><xsl:value-of select="$title" /></h2>
<xsl:for-each select="source">
<section class="box">
<h3 class="box_title">Mountpoint <code><xsl:value-of select="@mount" /></code></h3>
<!-- Mount nav -->
<xsl:call-template name="mountnav" />
<h4>Update Metadata</h4>
<xsl:if test="content-type and not((content-type = 'application/mpeg') or (content-type = 'audio/aac') or (content-type = 'audio/aacp'))">
<aside class="warning">
<strong>Warning</strong>
This is only supported for legacy codecs using ICY as transport such as MP3 and AAC.
</aside>
</xsl:if>
<form method="post" action="/admin/metadata.xsl">
<input type="hidden" name="mount" value="{@mount}" />
<input type="hidden" name="mode" value="updinfo" />
<input type="hidden" name="charset" value="UTF-8" />
<xsl:for-each select="source">
<section class="box">
<h3 class="box_title">Mountpoint <code><xsl:value-of select="@mount" /></code></h3>
<!-- Mount nav -->
<xsl:call-template name="mountnav" />
<h4>Update Metadata</h4>
<xsl:if test="content-type and not((content-type = 'application/mpeg') or (content-type = 'audio/aac') or (content-type = 'audio/aacp'))">
<aside class="warning">
<strong>Warning</strong>
This is only supported for legacy codecs using ICY as transport such as MP3 and AAC.
</aside>
</xsl:if>
<form method="post" action="/admin/metadata.xsl">
<input type="hidden" name="mount" value="{@mount}" />
<input type="hidden" name="mode" value="updinfo" />
<input type="hidden" name="charset" value="UTF-8" />
<label for="metadata" class="hidden">Metadata:</label>
<input type="text" id="metadata" name="song" value="" placeholder="Click to edit" required="required" />
&#160;
<input type="submit" value="Update Metadata" />
</form>
</section>
</xsl:for-each>
<label for="metadata" class="hidden">Metadata:</label>
<input type="text" id="metadata" name="song" value="" placeholder="Click to edit" required="required" />
&#160;
<input type="submit" value="Update Metadata" />
</form>
</section>
</xsl:for-each>
</div>
</xsl:template>
</div>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,54 +1,54 @@
<!--
VCLT xslt stylesheet for Icecast 2.3.2 and above
based on XSPF xslt stylesheet.
Copyright (C) 2007 Thomas B. Ruecker, <thomas@ruecker.fi>
VCLT xslt stylesheet for Icecast 2.3.2 and above
based on XSPF xslt stylesheet.
Copyright (C) 2007 Thomas B. Ruecker, <thomas@ruecker.fi>
Copyright (C) 2011 Philipp Schafft, <lion@lion.leolix.org>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the
Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-->
You should have received a copy of the GNU General Public License
along with this program; if not, write to the
Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-->
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="yes" media-type="audio/x-vclt"
method="text" indent="no" encoding="UTF-8" />
<xsl:template match = "/icestats" >
<xsl:for-each select="source">STREAMURL=<xsl:value-of select="listenurl" />
<xsl:if test="artist"><xsl:text>
</xsl:text>ARTIST=<xsl:value-of select="artist" /></xsl:if>
<xsl:if test="title"><xsl:text>
</xsl:text>TITLE=<xsl:value-of select="title" /></xsl:if>
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="yes" media-type="audio/x-vclt"
method="text" indent="no" encoding="UTF-8" />
<xsl:template match = "/icestats" >
<xsl:for-each select="source">STREAMURL=<xsl:value-of select="listenurl" />
<xsl:if test="artist"><xsl:text>
</xsl:text>ARTIST=<xsl:value-of select="artist" /></xsl:if>
<xsl:if test="title"><xsl:text>
</xsl:text>TITLE=<xsl:value-of select="title" /></xsl:if>
<xsl:if test="server_name"><xsl:text>
</xsl:text>SERVER_NAME=<xsl:value-of select="server_name" /></xsl:if>
<xsl:if test="server_description"><xsl:text>
</xsl:text>DESCRIPTION=<xsl:value-of select="server_description" /></xsl:if>
SIGNALINFO=<xsl:choose>
<xsl:when test="server_type = 'application/ogg'">
<xsl:choose>
<xsl:when test="subtype = 'Vorbis'">codec:ogg_vorbis</xsl:when>
<!-- More codecs should be added here, however I don't know how to find out about the codec.
At the moment we just guess that application/ogg is a Ogg bitstream with some undefined
codec. Everything else is undefined.
-->
<xsl:otherwise>codec:ogg_general</xsl:otherwise>
</xsl:choose>
</xsl:when>
</xsl:choose><xsl:text>
</xsl:text>
<xsl:if test="genre">GENRE=<xsl:value-of select="genre" /></xsl:if>
==
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<xsl:if test="server_name"><xsl:text>
</xsl:text>SERVER_NAME=<xsl:value-of select="server_name" /></xsl:if>
<xsl:if test="server_description"><xsl:text>
</xsl:text>DESCRIPTION=<xsl:value-of select="server_description" /></xsl:if>
SIGNALINFO=<xsl:choose>
<xsl:when test="server_type = 'application/ogg'">
<xsl:choose>
<xsl:when test="subtype = 'Vorbis'">codec:ogg_vorbis</xsl:when>
<!-- More codecs should be added here, however I don't know how to find out about the codec.
At the moment we just guess that application/ogg is a Ogg bitstream with some undefined
codec. Everything else is undefined.
-->
<xsl:otherwise>codec:ogg_general</xsl:otherwise>
</xsl:choose>
</xsl:when>
</xsl:choose><xsl:text>
</xsl:text>
<xsl:if test="genre">GENRE=<xsl:value-of select="genre" /></xsl:if>
==
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,6 +1,6 @@
<!--
XSPF xslt stylesheet for Icecast and above
Copyright (C) 2007 Thomas B. Ruecker, <thomas@ruecker.fi>
XSPF xslt stylesheet for Icecast and above
Copyright (C) 2007 Thomas B. Ruecker, <thomas@ruecker.fi>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -16,58 +16,58 @@
along with this program; if not, write to the
Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-->
-->
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="no" media-type="application/xspf+xml"
method="xml" indent="yes" encoding="UTF-8" />
<xsl:template match = "/icestats" >
<playlist version="1" xmlns="http://xspf.org/ns/0/">
<title><xsl:value-of select="server" /></title>
<creator><xsl:value-of select="server" /></creator>
<trackList >
<!-- end of "header" -->
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="no" media-type="application/xspf+xml"
method="xml" indent="yes" encoding="UTF-8" />
<xsl:template match = "/icestats" >
<playlist version="1" xmlns="http://xspf.org/ns/0/">
<title><xsl:value-of select="server" /></title>
<creator><xsl:value-of select="server" /></creator>
<trackList >
<!-- end of "header" -->
<xsl:for-each select="source">
<xsl:for-each select="source">
<track>
<location><xsl:value-of select="listenurl" /></location>
<track>
<location><xsl:value-of select="listenurl" /></location>
<xsl:if test="artist"><creator><xsl:value-of select="artist" /></creator></xsl:if>
<title><xsl:value-of select="title" /></title>
<!-- The <xsl:text>\n</xsl:text> elements in the following part are used
to enforce linebreaks this format seems to be expected by clients -->
<annotation>
<xsl:if test="server_name">Stream Title: <xsl:value-of select="server_name" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="server_description">Stream Description: <xsl:value-of select="server_description" /></xsl:if>
Content Type:<xsl:value-of select="server_type" /><xsl:text>
</xsl:text>
<xsl:if test="bitrate">Bitrate: <xsl:value-of select="bitrate" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="quality">Quality: <xsl:value-of select="quality" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="video_quality">Video Quality: <xsl:value-of select="video_quality" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="frame_size">Framesize: <xsl:value-of select="frame_size" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="frame_rate">Framerate: <xsl:value-of select="frame_rate" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="listeners">Current Listeners: <xsl:value-of select="listeners" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="listener_peak">Peak Listeners: <xsl:value-of select="listener_peak" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="genre">Stream Genre: <xsl:value-of select="genre" /></xsl:if>
</annotation>
<xsl:if test="artist"><creator><xsl:value-of select="artist" /></creator></xsl:if>
<title><xsl:value-of select="title" /></title>
<!-- The <xsl:text>\n</xsl:text> elements in the following part are used
to enforce linebreaks this format seems to be expected by clients -->
<annotation>
<xsl:if test="server_name">Stream Title: <xsl:value-of select="server_name" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="server_description">Stream Description: <xsl:value-of select="server_description" /></xsl:if>
Content Type:<xsl:value-of select="server_type" /><xsl:text>
</xsl:text>
<xsl:if test="bitrate">Bitrate: <xsl:value-of select="bitrate" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="quality">Quality: <xsl:value-of select="quality" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="video_quality">Video Quality: <xsl:value-of select="video_quality" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="frame_size">Framesize: <xsl:value-of select="frame_size" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="frame_rate">Framerate: <xsl:value-of select="frame_rate" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="listeners">Current Listeners: <xsl:value-of select="listeners" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="listener_peak">Peak Listeners: <xsl:value-of select="listener_peak" /><xsl:text>
</xsl:text></xsl:if>
<xsl:if test="genre">Stream Genre: <xsl:value-of select="genre" /></xsl:if>
</annotation>
<xsl:if test="server_url"><info><xsl:value-of select="server_url" /></info></xsl:if>
<xsl:if test="server_url"><info><xsl:value-of select="server_url" /></info></xsl:if>
</track>
</track>
</xsl:for-each>
</trackList>
</playlist>
</xsl:for-each>
</trackList>
</playlist>
</xsl:template>
</xsl:stylesheet>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,37 +1,37 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:include href="includes/web-page.xsl"/>
<xsl:variable name="title">Authorization Page</xsl:variable>
<xsl:template name="content">
<xsl:for-each select="source">
<xsl:choose>
<xsl:when test="listeners">
<xsl:if test="authenticator">
<div class="roundbox">
<h3 class="mount">
Mount Point <xsl:value-of select="@mount" />
<xsl:if test="server_name">
<small><xsl:value-of select="server_name" /></small>
</xsl:if>
</h3>
<form class="alignedform" method="get" action="/admin/buildm3u">
<p>
<label for="name">Username: </label>
<input id="name" name="username" type="text" />
</p>
<p>
<label for="password">Password: </label>
<input id="password" name="password" type="password" />
</p>
<input type="hidden" name="mount" value="{@mount}" />
<input type="submit" value="Login" />
</form>
</div>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<h3><xsl:value-of select="@mount" /> - Not Connected</h3>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
<xsl:include href="includes/web-page.xsl"/>
<xsl:variable name="title">Authorization Page</xsl:variable>
<xsl:template name="content">
<xsl:for-each select="source">
<xsl:choose>
<xsl:when test="listeners">
<xsl:if test="authenticator">
<div class="roundbox">
<h3 class="mount">
Mount Point <xsl:value-of select="@mount" />
<xsl:if test="server_name">
<small><xsl:value-of select="server_name" /></small>
</xsl:if>
</h3>
<form class="alignedform" method="get" action="/admin/buildm3u">
<p>
<label for="name">Username: </label>
<input id="name" name="username" type="text" />
</p>
<p>
<label for="password">Password: </label>
<input id="password" name="password" type="password" />
</p>
<input type="hidden" name="mount" value="{@mount}" />
<input type="submit" value="Login" />
</form>
</div>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<h3><xsl:value-of select="@mount" /> - Not Connected</h3>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,52 +1,52 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:include href="includes/web-page.xsl"/>
<xsl:variable name="title">Server Information</xsl:variable>
<xsl:template name="content">
<h2>Version</h2>
<section class="box">
<h3 class="box_title">Server Information</h3>
<table class="table-keys">
<tbody>
<xsl:for-each select="/icestats">
<tr>
<td>Location</td>
<td><xsl:value-of select="location" /></td>
</tr>
<tr>
<td>Admin</td>
<td><xsl:value-of select="admin" /></td>
</tr>
<tr>
<td>Host</td>
<td><xsl:value-of select="host" /></td>
</tr>
<tr>
<td>Version</td>
<td><xsl:value-of select="server_id" /></td>
</tr>
</xsl:for-each>
<tr>
<td>Download</td>
<td><a href="https://icecast.org/download/">icecast.org/download/</a></td>
</tr>
<tr>
<td>Git</td>
<td><a href="https://icecast.org/download/#git">icecast.org/download/#git</a></td>
</tr>
<tr>
<td>Documentation</td>
<td><a href="https://icecast.org/docs/">icecast.org/docs/</a></td>
</tr>
<tr>
<td>Stream Directory</td>
<td><a href="https://dir.xiph.org/">dir.xiph.org</a></td>
</tr>
<tr>
<td>Community</td>
<td><a href="https://icecast.org/contact/">icecast.org/contact/</a></td>
</tr>
</tbody>
</table>
</section>
</xsl:template>
<xsl:include href="includes/web-page.xsl"/>
<xsl:variable name="title">Server Information</xsl:variable>
<xsl:template name="content">
<h2>Version</h2>
<section class="box">
<h3 class="box_title">Server Information</h3>
<table class="table-keys">
<tbody>
<xsl:for-each select="/icestats">
<tr>
<td>Location</td>
<td><xsl:value-of select="location" /></td>
</tr>
<tr>
<td>Admin</td>
<td><xsl:value-of select="admin" /></td>
</tr>
<tr>
<td>Host</td>
<td><xsl:value-of select="host" /></td>
</tr>
<tr>
<td>Version</td>
<td><xsl:value-of select="server_id" /></td>
</tr>
</xsl:for-each>
<tr>
<td>Download</td>
<td><a href="https://icecast.org/download/">icecast.org/download/</a></td>
</tr>
<tr>
<td>Git</td>
<td><a href="https://icecast.org/download/#git">icecast.org/download/#git</a></td>
</tr>
<tr>
<td>Documentation</td>
<td><a href="https://icecast.org/docs/">icecast.org/docs/</a></td>
</tr>
<tr>
<td>Stream Directory</td>
<td><a href="https://dir.xiph.org/">dir.xiph.org</a></td>
</tr>
<tr>
<td>Community</td>
<td><a href="https://icecast.org/contact/">icecast.org/contact/</a></td>
</tr>
</tbody>
</table>
</section>
</xsl:template>
</xsl:stylesheet>

View File

@ -1,25 +1,25 @@
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="xml2json.xslt"/>
<xsl:output indent="no" omit-xml-declaration="yes" method="text" encoding="UTF-8" media-type="application/json"/>
<xsl:strip-space elements="*"/>
<xsl:import href="xml2json.xslt"/>
<xsl:output indent="no" omit-xml-declaration="yes" method="text" encoding="UTF-8" media-type="application/json"/>
<xsl:strip-space elements="*"/>
<!-- override imported transform variable to enable output -->
<xsl:variable name="output">true</xsl:variable>
<!-- override imported transform variable to enable output -->
<xsl:variable name="output">true</xsl:variable>
<!-- hide certain nodes from all sources -->
<xsl:template match="icestats/source/max_listeners"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/public"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/source_ip"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/slow_listeners"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/*[contains(name(), 'total_bytes')]"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/user_agent" ><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/listener" ><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<!-- hide certain nodes from all sources -->
<xsl:template match="icestats/source/max_listeners"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/public"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/source_ip"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/slow_listeners"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/*[contains(name(), 'total_bytes')]"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/user_agent" ><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/source/listener" ><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<!-- hide certain global nodes -->
<xsl:template match="icestats/sources"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/clients"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/stats"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/listeners"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="node()[contains(name(), 'connections')]"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<!-- hide certain global nodes -->
<xsl:template match="icestats/sources"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/clients"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/stats"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="icestats/listeners"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
<xsl:template match="node()[contains(name(), 'connections')]"><xsl:if test="not(following-sibling::*)">"dummy":null}</xsl:if></xsl:template>
</xsl:stylesheet>

View File

@ -1,132 +1,132 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:include href="includes/web-page.xsl"/>
<xsl:include href="includes/player.xsl"/>
<xsl:include href="includes/playlist.xsl"/>
<xsl:variable name="title">Status</xsl:variable>
<xsl:template name="content">
<!--mount point stats-->
<h2>Status</h2>
<xsl:choose>
<xsl:when test="source">
<xsl:for-each select="source">
<xsl:choose>
<xsl:when test="listeners">
<section class="box">
<h3 class="box_title">Mountpoint <code><xsl:value-of select="@mount" /></code></h3>
<xsl:call-template name="player" />
<xsl:include href="includes/web-page.xsl"/>
<xsl:include href="includes/player.xsl"/>
<xsl:include href="includes/playlist.xsl"/>
<xsl:variable name="title">Status</xsl:variable>
<xsl:template name="content">
<!--mount point stats-->
<h2>Status</h2>
<xsl:choose>
<xsl:when test="source">
<xsl:for-each select="source">
<xsl:choose>
<xsl:when test="listeners">
<section class="box">
<h3 class="box_title">Mountpoint <code><xsl:value-of select="@mount" /></code></h3>
<xsl:call-template name="player" />
<!-- Stream info and stats -->
<h4>Further information</h4>
<div class="mountcont">
<table class="table-keys">
<tbody>
<xsl:if test="server_name">
<tr>
<td>Stream Name:</td>
<td><xsl:value-of select="server_name" /></td>
</tr>
</xsl:if>
<xsl:if test="server_description">
<tr>
<td>Stream Description:</td>
<td><xsl:value-of select="server_description" /></td>
</tr>
</xsl:if>
<xsl:if test="server_type">
<tr>
<td>Content Type:</td>
<td><xsl:value-of select="server_type" /></td>
</tr>
</xsl:if>
<xsl:if test="stream_start">
<tr>
<td>Stream started:</td>
<td class="streamstats"><xsl:value-of select="stream_start" /></td>
</tr>
</xsl:if>
<xsl:if test="bitrate">
<tr>
<td>Bitrate:</td>
<td class="streamstats"><xsl:value-of select="bitrate" /></td>
</tr>
</xsl:if>
<xsl:if test="quality">
<tr>
<td>Quality:</td>
<td class="streamstats"><xsl:value-of select="quality" /></td>
</tr>
</xsl:if>
<xsl:if test="video_quality">
<tr>
<td>Video Quality:</td>
<td class="streamstats"><xsl:value-of select="video_quality" /></td>
</tr>
</xsl:if>
<xsl:if test="frame_size">
<tr>
<td>Framesize:</td>
<td class="streamstats"><xsl:value-of select="frame_size" /></td>
</tr>
</xsl:if>
<xsl:if test="frame_rate">
<tr>
<td>Framerate:</td>
<td class="streamstats"><xsl:value-of select="frame_rate" /></td>
</tr>
</xsl:if>
<xsl:if test="listeners">
<tr>
<td>Listeners (current):</td>
<td class="streamstats"><xsl:value-of select="listeners" /></td>
</tr>
</xsl:if>
<xsl:if test="listener_peak">
<tr>
<td>Listeners (peak):</td>
<td class="streamstats"><xsl:value-of select="listener_peak" /></td>
</tr>
</xsl:if>
<xsl:if test="genre">
<tr>
<td>Genre:</td>
<td class="streamstats"><xsl:value-of select="genre" /></td>
</tr>
</xsl:if>
<xsl:if test="server_url">
<tr>
<td>Stream URL:</td>
<td class="streamstats">
<a href="{server_url}"><xsl:value-of select="server_url" /></a>
</td>
</tr>
</xsl:if>
<tr>
<td>Currently playing:</td>
<td class="streamstats">
<xsl:if test="artist">
<xsl:value-of select="artist" /> -
</xsl:if>
<xsl:value-of select="title" />
</td>
</tr>
</tbody>
</table>
<!-- Extra playlist -->
<xsl:call-template name="playlist" />
</div>
</section>
</xsl:when>
<xsl:otherwise>
<h3><xsl:value-of select="@mount" /> - Not Connected</h3>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<aside class="info">
<strong>No mounts!</strong> There are no active mountpoints.
</aside>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- Stream info and stats -->
<h4>Further information</h4>
<div class="mountcont">
<table class="table-keys">
<tbody>
<xsl:if test="server_name">
<tr>
<td>Stream Name:</td>
<td><xsl:value-of select="server_name" /></td>
</tr>
</xsl:if>
<xsl:if test="server_description">
<tr>
<td>Stream Description:</td>
<td><xsl:value-of select="server_description" /></td>
</tr>
</xsl:if>
<xsl:if test="server_type">
<tr>
<td>Content Type:</td>
<td><xsl:value-of select="server_type" /></td>
</tr>
</xsl:if>
<xsl:if test="stream_start">
<tr>
<td>Stream started:</td>
<td class="streamstats"><xsl:value-of select="stream_start" /></td>
</tr>
</xsl:if>
<xsl:if test="bitrate">
<tr>
<td>Bitrate:</td>
<td class="streamstats"><xsl:value-of select="bitrate" /></td>
</tr>
</xsl:if>
<xsl:if test="quality">
<tr>
<td>Quality:</td>
<td class="streamstats"><xsl:value-of select="quality" /></td>
</tr>
</xsl:if>
<xsl:if test="video_quality">
<tr>
<td>Video Quality:</td>
<td class="streamstats"><xsl:value-of select="video_quality" /></td>
</tr>
</xsl:if>
<xsl:if test="frame_size">
<tr>
<td>Framesize:</td>
<td class="streamstats"><xsl:value-of select="frame_size" /></td>
</tr>
</xsl:if>
<xsl:if test="frame_rate">
<tr>
<td>Framerate:</td>
<td class="streamstats"><xsl:value-of select="frame_rate" /></td>
</tr>
</xsl:if>
<xsl:if test="listeners">
<tr>
<td>Listeners (current):</td>
<td class="streamstats"><xsl:value-of select="listeners" /></td>
</tr>
</xsl:if>
<xsl:if test="listener_peak">
<tr>
<td>Listeners (peak):</td>
<td class="streamstats"><xsl:value-of select="listener_peak" /></td>
</tr>
</xsl:if>
<xsl:if test="genre">
<tr>
<td>Genre:</td>
<td class="streamstats"><xsl:value-of select="genre" /></td>
</tr>
</xsl:if>
<xsl:if test="server_url">
<tr>
<td>Stream URL:</td>
<td class="streamstats">
<a href="{server_url}"><xsl:value-of select="server_url" /></a>
</td>
</tr>
</xsl:if>
<tr>
<td>Currently playing:</td>
<td class="streamstats">
<xsl:if test="artist">
<xsl:value-of select="artist" /> -
</xsl:if>
<xsl:value-of select="title" />
</td>
</tr>
</tbody>
</table>
<!-- Extra playlist -->
<xsl:call-template name="playlist" />
</div>
</section>
</xsl:when>
<xsl:otherwise>
<h3><xsl:value-of select="@mount" /> - Not Connected</h3>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<aside class="info">
<strong>No mounts!</strong> There are no active mountpoints.
</aside>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>