The version of vichan running on lainchan.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
5.8KB

  1. <!DOCTYPE html>
  2. <html style="height:100vh; width:100%;">
  3. <head>
  4. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  5. <meta name="viewport" content="width=device-width,initial-scale=1.0">
  6. <title>{{ settings.title }}</title>
  7. <script type="text/javascript">
  8. var active_page = "radio";
  9. </script>
  10. {% include 'header.html' %}
  11. <link rel="stylesheet" media="screen" href="/stylesheets/dark.css"/>
  12. <link rel="stylesheet" media="screen" href="/stylesheets/cyberpunk.css"/>
  13. <script src="https://lainchan.org/js/jquery.min.js"></script>
  14. <script type="text/javascript">
  15. function check_status(){
  16. $.get("{{ settings.radiostatus }}", function(data){
  17. var el = $( '<div></div>' );
  18. el.html(data.getElementsByTagName('html')[0].innerHTML);
  19. var channel = $("#channel").val();
  20. var nowplaying = el.find(".roundbox").has("h3:contains('mpd-"+channel+"')").find('td:contains("Current")').eq(0).next().text();
  21. var currentlisteners = 0;
  22. el.find(".roundbox").has("h3:contains("+channel+")").find('td:contains("current")').next().each(function() {
  23. currentlisteners += parseInt(this.firstChild.nodeValue, 10);
  24. });
  25. $(".nowplaying").text("Now playing: " + nowplaying);
  26. $(".currentlisteners").text("Current listeners: " + currentlisteners );
  27. });}
  28. function change_channel(e) {
  29. let audio = document.getElementById("player");
  30. let paused = audio.paused;
  31. channel = e.value;
  32. {% set formatlist = settings.formats|split(' ') %}
  33. {% for format in formatlist %}
  34. let {{ "source" ~ format }} = document.getElementById("{{format ~ "source"}}");
  35. {{ "source" ~ format }}.src ="{{ settings.httpprefix ~ settings.radioprefix }}" + channel + ".{{ format }}";
  36. {% endfor %}
  37. audio.load();
  38. if(!paused) {
  39. audio.play();
  40. }
  41. {% for format in formatlist %}
  42. document.getElementById("{{ format }}playlist").href = "{{ settings.httpprefix ~ settings.radioprefix }}" + channel + ".{{ format ~ ".m3u" }}";
  43. {% endfor %}
  44. document.getElementById("fileslink").href = "{{ settings.httpprefix ~ settings.filelistprefix }}" + channel + ".html";
  45. check_status();
  46. }
  47. $(document).ready(function(){
  48. $("#stylesheet").remove();
  49. check_status();
  50. setInterval(check_status, 15000);
  51. });
  52. </script>
  53. </head>
  54. <body style=" background: url(/bg.php) no-repeat center center fixed;
  55. -webkit-background-size: cover;
  56. -moz-background-size: cover;
  57. -o-background-size: cover;
  58. background-size: cover;
  59. ">
  60. <div class="bar top">
  61. {{ boardlist.top }}
  62. </div>
  63. {% if config.url_banner %}<img class="board_image" src="{{ config.url_banner }}" {% if config.banner_width or config.banner_height %}style="{% if config.banner_width %}width:{{ config.banner_width }}px{% endif %};{% if config.banner_width %}height:{{ config.banner_height }}px{% endif %}" {% endif %}alt="" />{% endif %}
  64. <header>
  65. <h1 class="glitch" data-text="{{ settings.title }}"> {{ settings.title }}</h1>
  66. <div class="subtitle">{{ settings.subtitle }}</div>
  67. </header>
  68. <img alt="mascot" src="static/lain_is_cute_datass_small.png" style="display: block; margin: 0 auto;"/>
  69. <div class="ban" style="margin-top: 0px!important; background-color: black; text-align: left!important;">
  70. <h2 style="text-align:center;">WELCOME TO CYBERIA</h2>
  71. <p style="text-align:center;">Welcome to lainchan's radio stream.
  72. </p>
  73. <p class="inlineheading" style="text-align:center;" >Channel:
  74. <select style="float:none;" id="channel" onchange="change_channel(this)">
  75. {% set channellist = settings.channels|split(' ') %}
  76. {% for channel in channellist %}
  77. {% if channel == settings.defaultchannel %}
  78. <option value="{{ channel }}" selected>{{ channel }}</option>
  79. {% else %}
  80. <option value="{{ channel }}">{{ channel }}</option>
  81. {% endif %}
  82. {% endfor %}
  83. </select> </p>
  84. <p style="text-align:center;"> File list is <a id="fileslink" href="{{ settings.httpprefix ~ settings.filelistprefix ~ settings.defaultchannel ~ ".html" }}"> is here</a></p>
  85. <noscript><p style="text-align:center;">Radio statistics and channel switching will be not be updated without JavaScript, please visit {{ settings.radiostatus }} to see them directly.</p></noscript>
  86. <p class="nowplaying" style="text-align:center;"> Now playing:
  87. </p>
  88. <p class="currentlisteners" style="text-align:center;"> Current listeners:
  89. </p>
  90. <ul style="list-style-type: none;-webkit-padding-start: 0px;">
  91. {% set formatlist = settings.formats|split(' ') %}
  92. {% for format in formatlist %}
  93. <li style="text-align:center;"><a id="{{ format }}playlist" href="{{ settings.httpprefix ~ settings.radioprefix ~ settings.defaultchannel ~ "." ~ format ~ ".m3u" }}"> {{ format|upper }} M3U Playlist</a></li>
  94. {% endfor %}
  95. </ul>
  96. <p style="text-align:center;">XSPF considered harmful.</p>
  97. <audio id="player" controls autoplay preload="none" style="margin: 0 5% 20px 5%; width: 90%; box-shadow: 0px 0px 5px black;">
  98. {% for format in formatlist %}
  99. {% if format == "mp3" %}
  100. <source id="{{format}}source" src="{{ settings.httpprefix ~ settings.radioprefix ~ settings.defaultchannel ~ "." ~ format }}" type="audio/mpeg">
  101. {% else %}
  102. <source id="{{format}}source" src="{{ settings.httpprefix ~ settings.radioprefix ~ settings.defaultchannel ~ "." ~ format }}" type="audio/{{ format }}">
  103. {% endif %}
  104. {% endfor %}
  105. <em>Your browser lacks support for OGG Vorbis files. Please open the M3U file or XSPF file in a multimedia player.</em>
  106. </audio>
  107. <p style="text-align:center;"> To upload a voice-over / bump to radio click <a href="{{ settings.httpprefix ~ 'bump.html'}}" >here </a> </p>
  108. </div>
  109. <div class="pages"></div>
  110. <script type="text/javascript">{% raw %}
  111. ready();
  112. {% endraw %}</script>
  113. </body>
  114. </html>