communityStation.html 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. <template name="communityStation">
  2. <header>
  3. <nav>
  4. <div class="nav-wrapper light-blue accent-4">
  5. <ul class="left hide-on-med-and-down">
  6. <li><a style="margin-left: 0px; padding-left: 20px; padding-right: 20px;" href="/" class="brand-logo">Musare</a></li>
  7. <!--li><a id="vote-skip" class="tooltipped" data-position="bottom" data-delay="50" data-tooltip="Vote to skip this song"><i class="material-icons left">skip_next</i>{{votes}}</a></li-->
  8. {{#if isCommunityStationOwner name}}
  9. {{#if playing}}
  10. <li style="margin-left: 144px;"><a id="pause" data-position="bottom" data-delay="50" data-tooltip="Pause this room" data-activates="chat-slide-out" class="tooltipped"><i class="material-icons">pause</i></a></li>
  11. {{else}}
  12. <li style="margin-left: 144px;"><a id="play" data-position="bottom" data-delay="50" data-tooltip="Play this room" data-activates="chat-slide-out" class="tooltipped"><i class="material-icons">play_arrow</i></a></li>
  13. {{/if}}
  14. <li><a id="skip" data-position="bottom" data-delay="50" data-tooltip="Skip this song" data-activates="chat-slide-out" class="tooltipped"><i class="material-icons">skip_next</i></a></li>
  15. <li><a id="edit_room" href="#edit_room_modal" data-position="bottom" data-delay="50" data-tooltip="Edit this room" data-activates="chat-slide-out" class="tooltipped"><i class="material-icons">settings</i></a></li>
  16. {{/if}}
  17. </ul>
  18. <span class="brand-logo center">{{communityStationDisplayName}} <small>(by {{communityStationOwnerName}})</small></span>
  19. <ul class="right hide-on-med-and-down">
  20. <!--li><a href="#" data-position="bottom" data-delay="50" data-tooltip="Playlist" id="playlist-slideout" data-activates="playlist-slide-out" class="tooltipped header-collapse"><i class="material-icons">queue_music</i></a></li-->
  21. {{#if isLoggedIn}}
  22. <li><a href="#" data-position="bottom" data-delay="50" data-tooltip="Chat" id="chat-slideout" data-activates="chat-slide-out" class="tooltipped header-collapse"><i class="material-icons">chat</i></a></li>
  23. {{/if}}
  24. {{#if isCommunityStationOwner name}}
  25. <li><a href="#" data-position="bottom" data-delay="50" data-tooltip="Users" id="users-slideout" data-activates="users-slide-out" class="tooltipped header-collapse"><i class="material-icons">people</i></a></li>
  26. <li><a href="#" data-position="bottom" data-delay="50" data-tooltip="Allowed" id="allowed-slideout" data-activates="allowed-slide-out" class="tooltipped header-collapse"><i class="material-icons">assignment</i></a></li>
  27. <li><a href="#" data-position="bottom" data-delay="50" data-tooltip="Playlists" id="playlists-slideout" data-activates="playlists-slide-out" class="tooltipped header-collapse"><i class="material-icons">library_music</i></a></li>
  28. {{/if}}
  29. </ul>
  30. </div>
  31. </nav>
  32. </header>
  33. {{> alerts}}
  34. <main id="room-content">
  35. <div class="container room-container">
  36. <div class="row">
  37. <div class="col s12 m10 l8 offset-l2 offset-m1" id="media-container">
  38. <div class="video-container">
  39. <div id="player"></div>
  40. </div>
  41. </div>
  42. <div class="col s12 m10 l8 offset-l2 offset-m1">
  43. <h4 id="time-display"><span id="time-elapsed"></span> / <span id="time-total"></span></h4>
  44. <h3>{{{title}}}</h3>
  45. <div class="row">
  46. <form action="#" class="left col s4 m4 l4">
  47. <p class="range-field" style="margin-top: 0">
  48. <input type="range" id="volume_slider" min="0" max="100"/>
  49. </p>
  50. </form>
  51. </div>
  52. <div class="seeker-bar-container white" id="preview-progress">
  53. <div class="seeker-bar light-blue" style="width: 0%"></div>
  54. </div>
  55. </div>
  56. </div>
  57. </div>
  58. </main>
  59. <!--Chat slideout-->
  60. <div id="chat-slide-out" class="side-nav room-slideout">
  61. <h5>Chat</h5>
  62. <ul class="chat-ul">
  63. {{#each globalChat}}
  64. {{#emojione}}
  65. <li class="chat-message" style="line-height: 30px">
  66. <span title="{{time}}" style="float: right; margin-top: 15px">{{rtime time}}</span>
  67. <a style="text-decoration: none; font-size: 0.9em; height: 0.9em; font-weight: 500" href="/u/{{this.username}}" target="_blank"><span class="rank-{{this.rawrank}}">{{this.rank}}</span>{{this.username}}</a>
  68. <p style="clear: both; line-height: 1.2em; margin-left: 13px; margin-bottom: 0; font-size: 1.2em">{{{this.message}}}</p>
  69. </li>
  70. {{/emojione}}
  71. <div class="divider" style="margin-top: 15px;"></div>
  72. {{/each}}
  73. </ul>
  74. <div>
  75. <div class="row" id="chat-input-div">
  76. <div class="input-field col s12">
  77. {{#if currentUser}}
  78. <input id="chat-message" type="text">
  79. <label for="chat-message">Send a message</label>
  80. {{else}}
  81. <input id="chat-message" class="disabled" disabled type="text">
  82. <label for="chat-message">You have to be logged in to chat.</label>
  83. {{/if}}
  84. </div>
  85. </div>
  86. {{#if currentUser}}
  87. <a id="submit" class="waves-effect waves-light btn">Send</a>
  88. {{else}}
  89. <a id="submit" class="waves-effect waves-light btn disabled" disabled>Send</a>
  90. {{/if}}
  91. </div>
  92. </div>
  93. <!--Playlist slideout-->
  94. <!--div id="playlist-slide-out" class="side-nav room-slideout">
  95. <h5>Playlist</h5>
  96. </div-->
  97. <div id="users-slide-out" class="side-nav room-slideout">
  98. <h5>Users In Room</h5>
  99. <ul style="margin-bottom: 64px;">
  100. {{#each usersInRoom}}
  101. <li><a href=/u/{{this}} target="_blank">{{this}}</a></li>
  102. {{/each}}
  103. </ul>
  104. {{#if currentUser}}
  105. <a class="btn btn-block musare white-text waves-effect waves-light" href="#" id="logout" style="position: fixed; bottom: 0; width: 342px;">Logout</a>
  106. {{else}}
  107. <a class="btn btn-block musare white-text waves-effect waves-light" href="/login" style="position: fixed; bottom: 0; width: 342px;">Login / Register</a>
  108. {{/if}}
  109. </div>
  110. <div id="allowed-slide-out" class="side-nav room-slideout">
  111. <h5>Allowed</h5>
  112. <ul class="list-ul" id="allowed-ul">
  113. {{#each allowed}}
  114. <li>
  115. <a href=/u/{{this.name}} target="_blank">
  116. {{this.name}}
  117. {{#if isCommunityStationOwner name}}
  118. <a href="#" class="right remove-allowed" data-user={{this.id}}>
  119. <i class="material-icons" style="line-height: 64px;">remove</i>
  120. </a>
  121. {{/if}}
  122. </a>
  123. </li>
  124. {{/each}}
  125. </ul>
  126. {{#if isCommunityStationOwner name}}
  127. <div>
  128. <div class="row" id="chat-input-div">
  129. <div class="input-field col s12">
  130. <input id="add-allowed" type="text">
  131. <label for="add-allowed">Add user</label>
  132. </div>
  133. </div>
  134. <a id="add-allowed-submit" class="waves-effect waves-light btn">Add</a>
  135. </div>
  136. {{/if}}
  137. </div>
  138. <div id="playlists-slide-out" class="side-nav room-slideout">
  139. <h5>Playlists</h5>
  140. <ul class="list-ul" id="playlists-ul">
  141. {{#each playlists}}
  142. <li>
  143. <a href="#edit_playlist_modal" class="edit-playlist-button" data-playlist={{this.name}}>
  144. {{this.displayName}}
  145. <a href="#" class="right select-playlist" data-playlist={{this.name}}>
  146. {{#if isCommunityStationOwner name}}
  147. {{#if isPlaylistSelected name this.name}}
  148. <i class="material-icons" style="line-height: 64px;">check_circle</i>
  149. {{else}}
  150. <i class="material-icons" data-playlist={{this.name}} style="line-height: 64px;" title="Select playlist">panorama_fish_eye</i>
  151. {{/if}}
  152. {{/if}}
  153. </a>
  154. </a>
  155. </li>
  156. {{/each}}
  157. </ul>
  158. <div>
  159. <a id="add-playlist-modal-button" class="waves-effect waves-light btn" href="#create_playlist_modal">Create Playlist</a>
  160. </div>
  161. </div>
  162. <!-- Edit Room Modal -->
  163. <div id="edit_room_modal" class="modal">
  164. <div class="modal-content">
  165. <h4>Edit Room</h4>
  166. <div class="input-field">
  167. <input id="edit_room_description" value={{room.roomDesc}} type="text">
  168. <label for="edit_room_description">Description</label>
  169. </div>
  170. <div class="input-field">
  171. <input id="edit_room_display" value={{room.displayName}} type="text">
  172. <label for="edit_room_display">Display Name</label>
  173. </div>
  174. <div class="input-field col s12">
  175. <select id="edit_room_privacy">
  176. <option value="public" {{getSelected 'public' room.privacy}}>Public</option>
  177. <option value="unlisted" {{getSelected 'unlisted' room.privacy}}>Unlisted</option>
  178. <option value="community" {{getSelected 'community' room.privacy}}>Private</option>
  179. </select>
  180. <label>Room Privacy</label>
  181. </div>
  182. <button class="btn waves-effect waves-light" id="save_edit_room_changes">Save Changes</button>
  183. <button class="btn waves-effect waves-light right red" id="delete_room">Delete Room</button>
  184. </div>
  185. <div class="divider"></div>
  186. <div class="modal-footer">
  187. <a class="modal-action modal-close waves-effect btn">Close</a>
  188. </div>
  189. </div>
  190. <!-- Edit Playlist Modal -->
  191. <div id="edit_playlist_modal" class="modal">
  192. <div class="modal-content">
  193. <h4>Editing: {{editingPlaylist.name}}</h4>
  194. <ul class="collection">
  195. {{#each song in editingPlaylist.songs}}
  196. <li class="collection-item">
  197. <a href="https://youtube.com/watch?v={{song.id}}" target="_blank">{{song.title}}</a>
  198. <a href="#" class="secondary-content playlistSongRemove" data-id={{song.id}}><i class="material-icons" data-id={{song.id}}>delete</i></a>
  199. {{#if hasMoreThanOne editingPlaylist.songs}}
  200. {{#if isFirst song editingPlaylist.songs}}
  201. <a href="#" class="secondary-content playlistSongDown" data-id={{song.id}}><i class="material-icons" data-id={{song.id}}>keyboard_arrow_down</i></a>
  202. {{else}}
  203. {{#if isLast song editingPlaylist.songs}}
  204. <a href="#" class="secondary-content playlistSongUp" data-id={{song.id}}><i class="material-icons" data-id={{song.id}}>keyboard_arrow_up</i></a>
  205. {{else}}
  206. <a href="#" class="secondary-content playlistSongDown" data-id={{song.id}}><i class="material-icons" data-id={{song.id}}>keyboard_arrow_down</i></a>
  207. <a href="#" class="secondary-content playlistSongUp" data-id={{song.id}}><i class="material-icons" data-id={{song.id}}>keyboard_arrow_up</i></a>
  208. {{/if}}
  209. {{/if}}
  210. {{/if}}
  211. </li>
  212. {{/each}}
  213. </ul>
  214. <div class="input-field">
  215. <input id="song-input" type="text" class="validate">
  216. <label for="search_for_song">Search for song to add</label>
  217. </div>
  218. <a class="waves-effect waves-light btn" id="search-song"><i class="material-icons left">search</i>Search</a>
  219. {{#if singleVideoResultsActive}}
  220. <div id="single-video-results">
  221. <div style="overflow: auto; height: 400px; margin-top: 1rem;">
  222. <ul class="collection light-blue-text">
  223. {{#each result in singleVideoResults}}
  224. <li class="collection-item avatar youtube-search-result-li">
  225. <img src="{{result.image}}" onerror="this.src='/notes.png'" alt="" class="video-import-thumbnail">
  226. <span class="title video-import-text">{{result.title}}</span>
  227. <p class="video-import-text">{{result.artist}} <br>
  228. <a href="https://youtube.com/watch?v={{result.id}}" target="_blank">View Video In YouTube</a>
  229. </p>
  230. <a href="#" class="secondary-content addSong" data-result="{{result.id}}"><i class="material-icons" data-result="{{result.id}}">add</i></a>
  231. </li>
  232. {{/each}}
  233. </ul>
  234. </div>
  235. </div>
  236. {{/if}}
  237. <br>
  238. <div class="input-field">
  239. <input id="rename-playlist-name" type="text" class="validate" value={{editingPlaylist.name}}>
  240. <label for="rename-playlist-name">Rename playlist name</label>
  241. </div>
  242. <div class="input-field">
  243. <input id="rename-playlist-display-name" type="text" class="validate" value={{editingPlaylist.displayName}}>
  244. <label for="rename-playlist-display-name">Rename playlist display name</label>
  245. </div>
  246. <button class="btn waves-effect waves-light musare" id="rename-playlist-button">Rename playlist</button>
  247. </div>
  248. <div class="divider"></div>
  249. <div class="modal-footer">
  250. <a class="modal-action modal-close waves-effect btn">Close</a>
  251. <button class="btn waves-effect waves-light left red" id="delete_playlist">Delete playlist</button>
  252. </div>
  253. </div>
  254. <!-- Create Playlist Modal -->
  255. <div id="create_playlist_modal" class="modal">
  256. <div class="modal-content">
  257. <h4>Create Modal</h4>
  258. <div class="input-field">
  259. <input id="create_playlist_name" type="text">
  260. <label for="create_playlist_name">Name</label>
  261. </div>
  262. <div class="input-field">
  263. <input id="create_playlist_display_name" type="text">
  264. <label for="create_playlist_display_name">Display Name</label>
  265. </div>
  266. <button class="btn waves-effect waves-light" id="create_playlist_submit">Create</button>
  267. </div>
  268. <div class="divider"></div>
  269. <div class="modal-footer">
  270. <a class="modal-action modal-close waves-effect btn">Close</a>
  271. </div>
  272. </div>
  273. <script>
  274. $(".edit-playlist-button").leanModal({
  275. dismissible: true,
  276. opacity: .5,
  277. in_duration: 500,
  278. out_duration: 200
  279. });
  280. $("#add-playlist-modal-button").leanModal({
  281. dismissible: true,
  282. opacity: .5,
  283. in_duration: 500,
  284. out_duration: 200
  285. });
  286. $("#edit_room").leanModal({
  287. dismissible: true,
  288. opacity: .5,
  289. in_duration: 500,
  290. out_duration: 200
  291. });
  292. $(".dropdown-button").dropdown({
  293. belowOrigin: true
  294. });
  295. $('select').material_select();
  296. $("#chat-slideout").sideNav({
  297. menuWidth: 350,
  298. edge: 'right'
  299. });
  300. $("#playlist-slideout").sideNav({
  301. menuWidth: 350,
  302. edge: 'right'
  303. });
  304. $("#users-slideout").sideNav({
  305. menuWidth: 350,
  306. edge: 'right'
  307. });
  308. $("#allowed-slideout").sideNav({
  309. menuWidth: 350,
  310. edge: 'right'
  311. });
  312. $("#playlists-slideout").sideNav({
  313. menuWidth: 350,
  314. edge: 'right'
  315. });
  316. $('.tooltipped').tooltip({delay: 50});
  317. </script>
  318. </template>