diff --git a/app/components/bridge-controls.js b/app/components/bridge-controls.js index b16e52a..3641d96 100644 --- a/app/components/bridge-controls.js +++ b/app/components/bridge-controls.js @@ -1,7 +1,8 @@ import Em from 'ember'; export default Em.Component.extend({ - classNames: ['bridgeControls', 'container-fluid'], + classNames: ['container-fluid'], + elementId: 'bridgeControls', bridgeIp: null, manualBridgeIp: null, @@ -30,6 +31,16 @@ export default Em.Component.extend({ return 'http://' + this.get('bridgeIp') + '/api/' + this.get('bridgeUsername'); }.property('bridgeIp', 'bridgeUsername'), + didInsertElement: function(){ + //TODO: make less shitty + var observer = new MutationObserver(function(mutations) { + Em.run.once(this, function(){ + Em.$('.bootstrapTooltip').tooltip(); + }); + }); + observer.observe(Em.$('#bridgeControls')[0], {childList: true, subtree: true}); + }, + init: function() { this._super(); diff --git a/app/components/controls/music-control.js b/app/components/controls/music-control.js index 9bf2907..b068af6 100644 --- a/app/components/controls/music-control.js +++ b/app/components/controls/music-control.js @@ -163,8 +163,44 @@ export default Em.Component.extend(musicControlMixin, { // simulate the speaker vibration by running a CSS animation on it Em.$('#beatSpeakerCenter').removeClass('pop').prop('offsetWidth', Em.$('#beatSpeakerCenter').prop('offsetWidth')).addClass('pop'); }, - audioDrop: function(){ - debugger; + dropFiles: function(){ + this.setProperties({ + dragging: false, + draggingOverPlayListArea: false + }); + this.send('handleNewFiles', event.dataTransfer.files); + }, + playListAreaDragOver: function(){ + this.set('draggingOverPlayListArea', true); + }, + playListAreaDragLeave: function(){ + this.set('draggingOverPlayListArea', false); + }, + handleNewFiles: function(files){ + var self = this, + playQueue = this.get('playQueue'), + updatePlayQueue = function(){ + var tags = ID3.getAllTags("local"); + playQueue.push({filename: this.name.replace(/\.[^/.]+$/, ""), url: URL.createObjectURL(this), artist: tags.artist, title: tags.title }); + + ID3.clearAll(); + self.notifyPropertyChange('playQueue'); + + // make sure to init the first song + if(playQueue.length > 0 && self.get('playQueuePointer') === -1){ + self.send('goToSong', 0); + } + }; + + for (var key in files) { + if (files.hasOwnProperty(key)) { + var file = files[key]; + + ID3.loadTags("local", updatePlayQueue.bind(file),{ + dataReader: new FileAPIReader(file) + }); + } + } } }, @@ -269,36 +305,13 @@ export default Em.Component.extend(musicControlMixin, { }, didInsertElement: function () { - var self = this, playQueue = this.get('playQueue'); + var self = this; Em.$('#fileInput').on('change', function () { - var files = this.files, - updatePlayQueue = function(){ - var tags = ID3.getAllTags("local"); - playQueue.push({filename: this.name.replace(/\.[^/.]+$/, ""), url: URL.createObjectURL(this), artist: tags.artist, title: tags.title }); - - ID3.clearAll(); - self.notifyPropertyChange('playQueue'); - - // make sure to init the first song - if(playQueue.length > 0 && self.get('playQueuePointer') === -1){ - self.send('goToSong', 0); - } - }; - - for (var key in files) { - if (files.hasOwnProperty(key)) { - var file = files[key]; - - ID3.loadTags("local", updatePlayQueue.bind(file),{ - dataReader: new FileAPIReader(file) - }); - } - } + var files = this.files; + self.send('handleNewFiles', files); }); - // initialize bootstrap tooltips - Em.$('[data-toggle="tooltip"]').tooltip(); // prevent space/text selection when the user repeatedly clicks on the center Em.$('#beatSpeakerContainer').on('mousedown', '#beatSpeakerCenter', function(event) { event.preventDefault(); @@ -310,25 +323,11 @@ export default Em.Component.extend(musicControlMixin, { if(event.deltaY < 0) { scrollSize *= -1; } - self.send('volumeChanged', self.get('volume') + scrollSize); + var newVolume = self.get('volume') + scrollSize; + + self.send('volumeChanged', newVolume < 0 ? 0 : newVolume); event.preventDefault(); }); - // file drag and drop support - //Em.$('.dragArea').on( - // 'dragover', - // function(e) { - // console.log('dragover'); - // e.preventDefault(); - // e.stopPropagation(); - // } - //).on( - // 'dragenter', - // function(e) { - // console.log('dragenter'); - // e.preventDefault(); - // e.stopPropagation(); - // } - //); }, // component clean up diff --git a/app/components/mixins/music-control.js b/app/components/mixins/music-control.js index 63972a8..969ade1 100644 --- a/app/components/mixins/music-control.js +++ b/app/components/mixins/music-control.js @@ -59,6 +59,7 @@ export default Em.Mixin.create({ timeTotal: 0, dragging: false, + draggingOverPlayListArea: false, playQueueEmpty: Em.computed.empty('playQueue'), playQueueNotEmpty: Em.computed.notEmpty('playQueue'), @@ -116,6 +117,20 @@ export default Em.Mixin.create({ } }.property('playing'), + playListAreaClass: function(){ + var classes = 'cursorPointer dragArea'; + + if(this.get('dragging')){ + classes += ' dragHereHighlight'; + } + + if(this.get('draggingOverPlayListArea')){ + classes += ' draggingOver'; + } + + return classes; + }.property('dragging', 'draggingOverPlayListArea'), + repeatClass: function () { return this.get('repeat') !== 0 ? 'playerControllIcon active' : 'playerControllIcon'; }.property('repeat'), diff --git a/app/styles/app.scss b/app/styles/app.scss index 2a0cfc8..9135774 100644 --- a/app/styles/app.scss +++ b/app/styles/app.scss @@ -377,8 +377,8 @@ md-toolbar { } #volumeBar { - width: 7.143em; - height: 0.571em; + width: 5em; + height: 0.4em; display: inline-block; } @@ -387,8 +387,8 @@ md-toolbar { } .noUi-horizontal .noUi-handle { - width: 0.400em; - height: 1.500em; + width: 0.4em; + height: 1.3em; left: -0.071em; top: -0.500em; transition-duration: 0.1s; @@ -437,7 +437,7 @@ md-toolbar { } #playListArea { - background: lighten($playListBackgroundColor, 20%); + background-color: lighten($playListBackgroundColor, 20%); width: 100%; height: 333px; margin: 10px auto 0 auto; @@ -586,7 +586,12 @@ md-toolbar { box-shadow: 5px 10px 15px 5px rgba(0, 0, 0, 0.1); } -.dragHere { - background-color: white !important; +#playListArea.dragArea.dragHereHighlight { + background-color: white; border: 5px dotted #5383ff; } + +#playListArea.dragArea.draggingOver { + background-color: darken(white, 5%); + box-shadow: inset 0 0 20px 0 rgba(0,0,0,1); +} diff --git a/app/templates/components/controls/group-control.hbs b/app/templates/components/controls/group-control.hbs index 9279eff..fb10a6d 100644 --- a/app/templates/components/controls/group-control.hbs +++ b/app/templates/components/controls/group-control.hbs @@ -1,9 +1,9 @@ -

Light Groups{{paper-icon icon="group-add"}}

+

Light Groups{{paper-icon icon="group-add"}}

{{#paper-list}} {{#each groupsArrData as |group|}} {{#paper-item class=group.rowClass}} -
{{group.name}}
{{#if group.deletable}}{{paper-icon icon="close"}}{{/if}} +
{{group.name}}
{{#if group.deletable}}{{paper-icon icon="close"}}{{/if}} {{/paper-item}} {{/each}} {{/paper-list}} diff --git a/app/templates/components/controls/music-control.hbs b/app/templates/components/controls/music-control.hbs index 43c7426..7b757fa 100644 --- a/app/templates/components/controls/music-control.hbs +++ b/app/templates/components/controls/music-control.hbs @@ -5,23 +5,23 @@ {{range-slider start=seekPosition min=0 max=100 id="seekSlider" slide="seekChanged"}} {{#if playQueueMultiple}} - {{paper-icon icon="skip-previous" class="playerControllIcon"}}{{/if}}{{paper-icon icon=playingIcon class="playerControllIcon"}}{{#if playQueueMultiple}}{{paper-icon icon="skip-next" action="" class="playerControllIcon"}}{{paper-icon icon="skip-next" action="" class="playerControllIcon"}}{{/if}}{{paper-icon icon=volumeClass class="playerControllIcon volumeButton"}}{{paper-icon icon=volumeClass class="playerControllIcon volumeButton"}}{{range-slider start=volume min=0 max=100 slide="volumeChanged" id="volumeBar"}} {{timeElapsedTxt}} / {{timeTotalTxt}} - {{paper-icon icon="fullscreen" class="playerControllIcon"}} @@ -29,20 +29,20 @@
- +
- {{paper-icon icon="shuffle" class=shuffleClass}} + {{paper-icon icon="shuffle" class=shuffleClass}} - {{paper-icon icon=repeatIcon class=repeatClass}} + {{paper-icon icon=repeatIcon class=repeatClass}} {{paper-icon icon="add" class="playerControllIcon" }} + class="pull-right bootstrapTooltip" {{action "addAudio"}}>{{paper-icon icon="add" class="playerControllIcon" }}
-
+
{{#if playQueueEmpty}}
Drag your music files here
{{paper-icon icon="library-music"}} @@ -56,7 +56,7 @@ {{else}} {{item.filename}} {{/if}} -
{{paper-icon icon="close"}}
+
{{paper-icon icon="close"}}
{{/each}}
diff --git a/app/templates/components/light-group.hbs b/app/templates/components/light-group.hbs index ee17a48..b5b6aa5 100644 --- a/app/templates/components/light-group.hbs +++ b/app/templates/components/light-group.hbs @@ -1,5 +1,5 @@ {{#each lightsList as |light|}} - + {{/each}} \ No newline at end of file