diff -r 9cffc7f32f14 -r ce52f0fca330 cms/app-client/app/components/player-sound-control.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cms/app-client/app/components/player-sound-control.js Mon Dec 19 21:58:02 2016 +0100 @@ -0,0 +1,118 @@ +import Ember from 'ember'; +import * as d3s from 'd3-scale'; + +const speakerClassScale = d3s.scaleQuantize() + .domain([0, 1]) + .range(['fa-volume-down', 'fa-volume-up']); + + +export default Ember.Component.extend({ + classNames: ['player-sound-control'], + + popcorn: null, + + volume: Ember.computed('popcorn', { + get: function() { + let popcorn = this.get('popcorn'); + if(!popcorn) { + return 0; + } + return popcorn.volume(); + }, + set: function(key, value) { + let popcorn = this.get('popcorn'); + if(!popcorn) { + return 0; + } + const newValue = Math.min(1.0, Math.max(0, value)); + popcorn.volume(newValue); + return newValue; + } + }), + + muted: Ember.computed('popcorn', { + get: function() { + let popcorn = this.get('popcorn'); + if(!popcorn) { + return false; + } + return popcorn.muted(); + }, + set: function(key, value) { + let popcorn = this.get('popcorn'); + if(!popcorn) { + return false; + } + if(value) { + popcorn.mute(); + } else { + popcorn.unmute(); + } + return value; + } + + }), + + popcornObserver: Ember.observer('popcorn', function() { + let popcorn = this.get('popcorn'); + if(!popcorn) { + return; + } + popcorn.on('volumechange', () => { this.notifyPropertyChange('volume'); this.notifyPropertyChange('muted'); }); + + }), + + speakerClass: Ember.computed('volume', 'muted', function() { + const volume = this.get('volume'); + const muted = this.get('muted'); + if(muted || volume === 0 ) { + return "fa-volume-off"; + } else { + return speakerClassScale(volume); + } + }), + + mouseEnter: function() { + let baseOffset = this.$("#sound-control-speaker").offset(); + if(this.get('muted')) { + return; + } + this.$("#sound-control-scale").show(400); + this.$("#sound-control-scale").offset({ top: baseOffset.top + 55, left: baseOffset.left}); + }, + mouseLeave: function() { + this.$("#sound-control-scale").hide(400); + }, + + didInsertElement: function() { + this.set('volumeSliderHandler', this.$(".volume-slider").on("input change", (event) => { this.set('volume',Ember.$(event.target).val()); })); + }, + + willDestroyElement: function() { + let volumeSliderHandler = this.get('volumeSliderHandler'); + if(volumeSliderHandler) { + this.$(".volume-slider").off({"input change": volumeSliderHandler}); + } + }, + + actions: { + muteToggle() { + this.set('muted', !this.get('muted')); + }, + clickMinus() { + if(this.get('muted')) { + return; + } + let volume = this.get('volume'); + this.set('volume', volume - 0.1); + }, + clickPlus() { + if(this.get('muted')) { + return; + } + let volume = this.get('volume'); + this.set('volume', volume + 0.1); + } + } + +});