/ theme / assets / loading-spinner.js
loading-spinner.js
 1  function _rgbToHsl(r, g, b) {
 2      (r /= 255), (g /= 255), (b /= 255);
 3      const max = Math.max(r, g, b),
 4          min = Math.min(r, g, b);
 5      let h,
 6          s,
 7          l = (max + min) / 2;
 8      if (max === min) {
 9          h = s = 0; // achromatic
10      } else {
11          const d = max - min;
12          s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
13          switch (max) {
14              case r:
15                  h = (g - b) / d + (g < b ? 6 : 0);
16                  break;
17              case g:
18                  h = (b - r) / d + 2;
19                  break;
20              case b:
21                  h = (r - g) / d + 4;
22                  break;
23          }
24          h /= 6;
25      }
26      return [h * 360, s * 100, l * 100];
27  }
28  
29  function _loadingSpinnerColor(rgb) {
30      rgb = rgb.replace("#", "");
31      const _rgb = (i) => parseInt(rgb.substr(i * 2, 2), 16);
32      let [h, s, _] = _rgbToHsl(_rgb(0), _rgb(1), _rgb(2));
33      h = Math.trunc(h - 206);
34      s = 100 + s - 89;
35      const L = document.createElement("style");
36      L.textContent = `#loadingSpinner, .plotly-loading-spinner {filter: hue-rotate(${h}deg) saturate(${s}%);}`;
37      document.head.appendChild(L);
38  }
39  
40  _loadingSpinnerColor(document.currentScript.getAttribute("color"));