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 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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. sub_delay: $$("#sub-delay"),
  18. sub_delay_less: $$("#sub-delay-less"),
  19. sub_delay_less2: $$("#sub-delay-less2"),
  20. sub_delay_more: $$("#sub-delay-more"),
  21. sub_delay_more2: $$("#sub-delay-more2"),
  22. sub_delay_reset: $$("#sub-delay-reset")
  23. };
  24. var state = {};
  25. /*
  26. * Update GUI stuff
  27. */
  28. function update(state) {
  29. // Playing
  30. if (state.playing)
  31. elems.is_playing.innerHTML = "Playing";
  32. else
  33. location.href = "/";
  34. // Progress text
  35. elems.progress_text.innerHTML =
  36. timeformat(state.time_pos)+"/"+
  37. timeformat(state.duration);
  38. // Progress bar
  39. elems.progress.value = state.time_pos;
  40. elems.progress.max = state.duration;
  41. // Buttons
  42. elems.pause.className = state.paused ? "active" : "";
  43. elems.mute.className = state.muted ? "active" : "";
  44. // Volume
  45. elems.volume.min = 0;
  46. elems.volume.max = state.volume_max;
  47. elems.volume.value = state.volume;
  48. elems.volume.step = 5;
  49. elems.volume_text.innerHTML = state.volume;
  50. // Sub Delay
  51. elems.sub_delay.innerHTML = state.sub_delay;
  52. }
  53. function checkState() {
  54. post("/playback/state", null, function(err, res) {
  55. if (err)
  56. return;
  57. state = JSON.parse(res);
  58. update(state);
  59. });
  60. }
  61. checkState();
  62. setInterval(checkState, 500);
  63. /*
  64. * React to input
  65. */
  66. function playerset(key, val) {
  67. post("/playback/set/"+key+"/"+val, null, function() {
  68. checkState();
  69. });
  70. }
  71. // Set time
  72. elems.progress.addEventListener("click", function(evt) {
  73. var pos = (evt.clientX - evt.target.offsetLeft) / evt.target.clientWidth;
  74. pos *= evt.target.max;
  75. playerset("time-pos", pos);
  76. });
  77. // Toggle pause
  78. elems.pause.addEventListener("click", function() {
  79. if (state.paused)
  80. playerset("pause", "no");
  81. else
  82. playerset("pause", "yes");
  83. });
  84. // Back 15 seconds
  85. elems.skip_back.addEventListener("click", function() {
  86. playerset("time-pos", state.time_pos - 15);
  87. });
  88. // Forwards 15 seconds
  89. elems.skip_forward.addEventListener("click", function() {
  90. playerset("time-pos", state.time_pos + 15);
  91. });
  92. // Toggle mute
  93. elems.mute.addEventListener("click", function(evt) {
  94. if (state.muted)
  95. playerset("mute", "no");
  96. else
  97. playerset("mute", "yes");
  98. });
  99. // Exit
  100. elems.exit.addEventListener("click", function(evt) {
  101. post("/playback/exit", null, function() {});
  102. });
  103. // Set volume
  104. elems.volume.addEventListener("change", function(evt) {
  105. playerset("volume", evt.target.value);
  106. });
  107. elems.volume.addEventListener("keydown", function(evt) {
  108. if (evt.keyCode === 37 || evt.keyCode === 40)
  109. playerset("volume", parseInt(evt.target.value) - parseInt(evt.target.step));
  110. else if (evt.keyCode === 38 || evt.keyCode === 39)
  111. playerset("volume", parseInt(evt.target.value) + parseInt(evt.target.step));
  112. });
  113. // Less subtitle delay
  114. elems.sub_delay_less.addEventListener("click", function() {
  115. playerset("sub-delay", state.sub_delay - 0.1);
  116. });
  117. elems.sub_delay_less2.addEventListener("click", function() {
  118. playerset("sub-delay", state.sub_delay - 1);
  119. });
  120. // More subtitle delay
  121. elems.sub_delay_more.addEventListener("click", function() {
  122. playerset("sub-delay", state.sub_delay + 0.1);
  123. });
  124. elems.sub_delay_more2.addEventListener("click", function() {
  125. playerset("sub-delay", state.sub_delay + 1);
  126. });
  127. // Set subtitle delay to 0
  128. elems.sub_delay_reset.addEventListener("click", function() {
  129. playerset("sub-delay", 0);
  130. });
  131. window.addEventListener("keydown", function(evt) {
  132. console.log(evt.keyCode);
  133. });