define(['require', 'css!./emby-progressring', 'registerElement'], function (require) { 'use strict'; var EmbyProgressRing = Object.create(HTMLDivElement.prototype); EmbyProgressRing.createdCallback = function () { this.classList.add('progressring'); var instance = this; require(['text!./emby-progressring.template.html'], function (template) { instance.innerHTML = template; //if (window.MutationObserver) { // // create an observer instance // var observer = new MutationObserver(function (mutations) { // mutations.forEach(function (mutation) { // instance.setProgress(parseFloat(instance.getAttribute('data-progress') || '0')); // }); // }); // // configuration of the observer: // var config = { attributes: true, childList: false, characterData: false }; // // pass in the target node, as well as the observer options // observer.observe(instance, config); // instance.observer = observer; //} instance.setProgress(parseFloat(instance.getAttribute('data-progress') || '0')); }); }; EmbyProgressRing.setProgress = function (progress) { progress = Math.floor(progress); var angle; if (progress < 25) { angle = -90 + (progress / 100) * 360; this.querySelector('.animate-0-25-b').style.transform = 'rotate(' + angle + 'deg)'; this.querySelector('.animate-25-50-b').style.transform = 'rotate(-90deg)'; this.querySelector('.animate-50-75-b').style.transform = 'rotate(-90deg)'; this.querySelector('.animate-75-100-b').style.transform = 'rotate(-90deg)'; } else if (progress >= 25 && progress < 50) { angle = -90 + ((progress - 25) / 100) * 360; this.querySelector('.animate-0-25-b').style.transform = 'none'; this.querySelector('.animate-25-50-b').style.transform = 'rotate(' + angle + 'deg)'; this.querySelector('.animate-50-75-b').style.transform = 'rotate(-90deg)'; this.querySelector('.animate-75-100-b').style.transform = 'rotate(-90deg)'; } else if (progress >= 50 && progress < 75) { angle = -90 + ((progress - 50) / 100) * 360; this.querySelector('.animate-0-25-b').style.transform = 'none'; this.querySelector('.animate-25-50-b').style.transform = 'none'; this.querySelector('.animate-50-75-b').style.transform = 'rotate(' + angle + 'deg)'; this.querySelector('.animate-75-100-b').style.transform = 'rotate(-90deg)'; } else if (progress >= 75 && progress <= 100) { angle = -90 + ((progress - 75) / 100) * 360; this.querySelector('.animate-0-25-b').style.transform = 'none'; this.querySelector('.animate-25-50-b').style.transform = 'none'; this.querySelector('.animate-50-75-b').style.transform = 'none'; this.querySelector('.animate-75-100-b').style.transform = 'rotate(' + angle + 'deg)'; } this.querySelector('.progressring-text').innerHTML = progress + '%'; }; EmbyProgressRing.attachedCallback = function () { }; EmbyProgressRing.detachedCallback = function () { var observer = this.observer; if (observer) { // later, you can stop observing observer.disconnect(); this.observer = null; } }; document.registerElement('emby-progressring', { prototype: EmbyProgressRing, extends: 'div' }); return EmbyProgressRing; });