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.

script.js 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. function timeformat(sec) {
  2. var d = new Date(null);
  3. d.setSeconds(Math.floor(sec))
  4. return d.toISOString().substr(11, 8);
  5. }
  6. var elems = {
  7. is_playing: $$("#is-playing"),
  8. progress_text: $$("#progress-text"),
  9. progress: $$("#progress"),
  10. pause: $$("#pause"),
  11. skip_back: $$("#skip-back"),
  12. skip_forward: $$("#skip-forward"),
  13. mute: $$("#mute"),
  14. exit: $$("#exit"),
  15. volume: $$("#volume"),
  16. volume_text: $$("#volume-text"),
  17. };
  18. var state = {};
  19. /*
  20. * Update GUI stuff
  21. */
  22. function update(state) {
  23. // Playing
  24. if (state.playing)
  25. elems.is_playing.innerHTML = "Playing";
  26. else
  27. location.href = "/";
  28. // Progress text
  29. elems.progress_text.innerHTML =
  30. timeformat(state.time_pos)+"/"+
  31. timeformat(state.duration);
  32. // Progress bar
  33. elems.progress.value = state.time_pos;
  34. elems.progress.max = state.duration;
  35. // Buttons
  36. elems.pause.className = state.paused ? "active" : "";
  37. elems.mute.className = state.muted ? "active" : "";
  38. // Volume
  39. elems.volume.min = 0;
  40. elems.volume.max = state.volume_max;
  41. elems.volume.value = state.volume;
  42. elems.volume.step = 5;
  43. elems.volume_text.innerHTML = state.volume+"%";
  44. }
  45. function checkState() {
  46. post("/playback/state", null, function(err, res) {
  47. if (err)
  48. return;
  49. state = JSON.parse(res);
  50. update(state);
  51. });
  52. }
  53. checkState();
  54. setInterval(checkState, 500);
  55. /*
  56. * React to input
  57. */
  58. function playerset(key, val) {
  59. post("/playback/set/"+key+"/"+val, null, function() {
  60. checkState();
  61. });
  62. }
  63. // Set time
  64. elems.progress.addEventListener("click", function(evt) {
  65. var pos = (evt.clientX - evt.target.offsetLeft) / evt.target.clientWidth;
  66. pos *= evt.target.max;
  67. playerset("time-pos", pos);
  68. });
  69. // Toggle pause
  70. elems.pause.addEventListener("click", function() {
  71. if (state.paused)
  72. playerset("pause", "no");
  73. else
  74. playerset("pause", "yes");
  75. });
  76. // Back 15 seconds
  77. elems.skip_back.addEventListener("click", function() {
  78. playerset("time-pos", state.time_pos - 15);
  79. });
  80. // Forwards 15 seconds
  81. elems.skip_forward.addEventListener("click", function() {
  82. playerset("time-pos", state.time_pos + 15);
  83. });
  84. // Toggle mute
  85. elems.mute.addEventListener("click", function(evt) {
  86. if (state.muted)
  87. playerset("mute", "no");
  88. else
  89. playerset("mute", "yes");
  90. });
  91. // Exit
  92. elems.exit.addEventListener("click", function(evt) {
  93. post("/playback/exit", null, function() {});
  94. });
  95. // Set volume
  96. elems.volume.addEventListener("change", function(evt) {
  97. playerset("volume", evt.target.value);
  98. });