All files / src/visual/time durationTimeElements.js

10.81% Statements 4/37
0% Branches 0/22
25% Functions 2/8
10.81% Lines 4/37
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164                      31x                                                                                                                                                                                                                                     211x       211x                                                   31x              
/**
 * Imports the config module
 * @module config
 */
import config from "../../config.js";
 
/**
 * Handles all of the duration time elements.
 *
 * @module visual/time/DurationTimeElements.
 */
let DurationTimeElements = (function() {
  /**
   * Syncs the duration time for all elements.
   *
   * @param {Object} durationTime - The object containing all of the song duration times.
   */
  function sync(durationTime) {
    let durationText = computeDurationText(durationTime);
 
    syncGlobal(durationText);
    syncPlaylist(durationText);
    syncSong(durationText);
    syncSongInPlaylist(durationText);
  }
 
  /**
   * Sync the global song duration elements.
   *
   * @param {Object} durationText - The text for the song duration.
   */
  function syncGlobal(durationText) {
    let durationTimeSelectors = document.querySelectorAll(
      ".amplitude-duration-time"
    );
 
    for (let i = 0; i < durationTimeSelectors.length; i++) {
      let playlist = durationTimeSelectors[i].getAttribute(
        "data-amplitude-playlist"
      );
      let songIndex = durationTimeSelectors[i].getAttribute(
        "data-amplitude-song-index"
      );
 
      if (playlist == null && songIndex == null) {
        durationTimeSelectors[i].innerHTML = durationText;
      }
    }
  }
 
  /**
   * Sync the playlist duration times.
   *
   * @param {Object} durationText - The text for the song duration.
   */
  function syncPlaylist(durationText) {
    let durationTimeSelectors = document.querySelectorAll(
      '.amplitude-duration-time[data-amplitude-playlist="' +
        config.active_playlist +
        '"]'
    );
 
    for (let i = 0; i < durationTimeSelectors.length; i++) {
      let songIndex = durationTimeSelectors[i].getAttribute(
        "data-amplitude-song-index"
      );
 
      if (songIndex == null) {
        durationTimeSelectors[i].innerHTML = durationText;
      }
    }
  }
 
  /**
   * Sync the song duration times.
   *
   * @param {Object} durationText - The text for the song duration.
   */
  function syncSong(durationText) {
    if (config.active_playlist == null) {
      let durationTimeSelectors = document.querySelectorAll(
        '.amplitude-duration-time[data-amplitude-song-index="' +
          config.active_index +
          '"]'
      );
 
      for (let i = 0; i < durationTimeSelectors.length; i++) {
        let playlist = durationTimeSelectors[i].getAttribute(
          "data-amplitude-playlist"
        );
 
        if (playlist == null) {
          durationTimeSelectors[i].innerHTML = durationText;
        }
      }
    }
  }
 
  /**
   * Sync the song in playlist duration times.
   *
   * @param {Object} durationText - An object containing the duration text.
   */
  function syncSongInPlaylist(durationText) {
    let activePlaylistIndex =
      config.active_playlist != "" && config.active_playlist != null
        ? config.playlists[config.active_playlist].active_index
        : null;
 
    let durationTimeSelectors = document.querySelectorAll(
      '.amplitude-duration-time[data-amplitude-playlist="' +
        config.active_playlist +
        '"][data-amplitude-song-index="' +
        activePlaylistIndex +
        '"]'
    );
 
    for (let i = 0; i < durationTimeSelectors.length; i++) {
      durationTimeSelectors[i].innerHTML = durationText;
    }
  }
 
  /**
   * Resets all of the duration times to empty.
   */
  function resetTimes() {
    let durationTimeSelectors = document.querySelectorAll(
      ".amplitude-duration-time"
    );
 
    for (let i = 0; i < durationTimeSelectors.length; i++) {
      durationTimeSelectors[i].innerHTML = "00:00";
    }
  }
 
  /**
   * Computes the duration text
   *
   * @param {Object} durationTime - An object containint the duration times.
   */
  function computeDurationText(durationTime) {
    var durationText = "00:00";
 
    if (!isNaN(durationTime.minutes) && !isNaN(durationTime.seconds)) {
      durationText = durationTime.minutes + ":" + durationTime.seconds;
      if (!isNaN(durationTime.hours) && durationTime.hours > 0) {
        durationText = durationTime.hours + ":" + durationText;
      }
    }
 
    return durationText;
  }
 
  /**
   * Return publically accessible methods.
   */
  return {
    sync: sync,
    resetTimes: resetTimes
  };
})();
 
export default DurationTimeElements;