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"));