diff --git a/src/js/components/ContextMenu.js b/src/js/components/ContextMenu.js index 2dbc14f6..8117ac95 100755 --- a/src/js/components/ContextMenu.js +++ b/src/js/components/ContextMenu.js @@ -128,13 +128,11 @@ class ContextMenu extends React.Component{ ) } - renderItems(trigger){ - var items = [] - - switch( this.props.context_menu.context ){ + getItems(trigger){ + switch (this.props.context_menu.context) { case 'queue': - items = [ + var items = [ { handleClick: 'playQueueItem', label: 'Play', icon: 'play' }, { handleClick: 'addToPlaylist', label: 'Add to playlist', icon: 'plus', playlists: true }, { handleClick: 'copyURIs', label: 'Copy URIs', icon: 'copy' }, @@ -143,7 +141,7 @@ class ContextMenu extends React.Component{ break case 'editable-playlist': - items = [ + var items = [ { handleClick: 'playItems', label: 'Play', icon: 'play' }, { handleClick: 'playItemsNext', label: 'Play next', icon: 'play' }, { handleClick: 'addToQueue', label: 'Add to queue', icon: 'plus' }, @@ -154,7 +152,7 @@ class ContextMenu extends React.Component{ break default: - items = [ + var items = [ { handleClick: 'playItems', label: 'Play', icon: 'play' }, { handleClick: 'playItemsNext', label: 'Play next', icon: 'play' }, { handleClick: 'addToQueue', label: 'Add to queue', icon: 'plus' }, @@ -164,6 +162,12 @@ class ContextMenu extends React.Component{ break } + return items + } + + renderItems(trigger){ + var items = this.getItems(trigger) + var closeItem = ( this.closeAndDeselectTracks(e) }> @@ -222,8 +226,18 @@ class ContextMenu extends React.Component{ className += ' '+this.props.context_menu.trigger } + var items = this.getItems(trigger) + var height = 0 + if (items) height = items.length * 34 + + console.log(style.top, height) + if (this.props.context_menu.position_x > (window.innerWidth - 154)) className += ' right-align' if (this.props.context_menu.position_x > (window.innerWidth - 308)) className += ' right-align-submenu' + if (this.props.context_menu.position_y > (window.innerHeight - height)){ + style.top = style.top - height + className += ' bottom-align-submenu' + } return (
diff --git a/src/js/services/localstorage/middleware.js b/src/js/services/localstorage/middleware.js index 67bac113..3c323be8 100755 --- a/src/js/services/localstorage/middleware.js +++ b/src/js/services/localstorage/middleware.js @@ -12,7 +12,7 @@ const localstorageMiddleware = (function(){ // append our state to a global variable. This gives us access to debug the store at any point window._store = store - console.log(action) + //console.log(action) switch( action.type ){ diff --git a/src/js/services/mopidy/middleware.js b/src/js/services/mopidy/middleware.js index 8fd46e70..5f2ff38d 100755 --- a/src/js/services/mopidy/middleware.js +++ b/src/js/services/mopidy/middleware.js @@ -211,7 +211,6 @@ const MopidyMiddleware = (function(){ }) break; - // send an instruction to the websocket case 'MOPIDY_URISCHEMES': var uri_schemes = action.data var remove = ['http','https','mms','rtmp','rtmps','rtsp','sc','spotify'] @@ -250,12 +249,17 @@ const MopidyMiddleware = (function(){ case 'MOPIDY_PLAY_URIS': + // stop the radio + if (store.getState().ui.radio && store.getState().ui.radio.enabled){ + store.dispatch( pusherActions.stopRadio() ) + } + // add our first track instruct( socket, store, 'tracklist.add', { uri: action.uris[0], at_position: 0 } ) .then( response => { if( !response || response.length <= 0 ){ - console.error('Could not add URI to tracklist', action.uris[0]) + store.dispatch( uiActions.createNotification('Could not add URI(s) to tracklist', 'error') ) }else{ // play it store.dispatch( mopidyActions.changeTrack( response[0].tlid ) ); diff --git a/src/js/services/pusher/middleware.js b/src/js/services/pusher/middleware.js index 1be34f16..d97b0ff9 100755 --- a/src/js/services/pusher/middleware.js +++ b/src/js/services/pusher/middleware.js @@ -190,6 +190,7 @@ const PusherMiddleware = (function(){ break case 'PUSHER_STOP_RADIO': + store.dispatch( uiActions.createNotification('Stopping radio') ) var data = { action: 'stop_radio', seed_artists: [], diff --git a/src/js/views/Queue.js b/src/js/views/Queue.js index 0bee23bf..55515662 100755 --- a/src/js/views/Queue.js +++ b/src/js/views/Queue.js @@ -2,8 +2,8 @@ import React, { PropTypes } from 'react' import { connect } from 'react-redux' import { bindActionCreators } from 'redux' - import FontAwesome from 'react-fontawesome' + import TrackList from '../components/TrackList' import Track from '../components/Track' import SidebarToggleButton from '../components/SidebarToggleButton' @@ -45,10 +45,15 @@ class Queue extends React.Component{ renderRadio(){ if (!this.props.radio || !this.props.radio.enabled) return null + var seed_sentence = 'nothing' + if (this.props.radio.seed_artists.length > 0) seed_sentence = this.props.radio.seed_artists.length+' artists' + if (this.props.radio.seed_genres.length > 0) seed_sentence =this.props.radio.seed_artists.length+' genres' + if (this.props.radio.seed_tracks.length > 0) seed_sentence =this.props.radio.seed_artists.length+' tracks' + return (
- Playing radio - this.props.pusherActions.stopRadio() }>Stop radio + Playing radio based on {seed_sentence} + this.props.pusherActions.stopRadio() }>  Stop radio
) } diff --git a/src/scss/components/_context-menu.scss b/src/scss/components/_context-menu.scss index 2d76718c..7c4c6207 100755 --- a/src/scss/components/_context-menu.scss +++ b/src/scss/components/_context-menu.scss @@ -16,6 +16,11 @@ right: 140px !important; } + &.bottom-align-submenu .submenu { + top: auto !important; + bottom: 0 !important; + } + .menu-item-wrapper { display: block; position: relative; diff --git a/src/scss/components/_player.scss b/src/scss/components/_player.scss index 7b835645..85581846 100755 --- a/src/scss/components/_player.scss +++ b/src/scss/components/_player.scss @@ -56,7 +56,7 @@ position: fixed; bottom: 0; left: 0; - width: 200px; + width: 220px; box-sizing: border-box; z-index: 97; padding: 14px; diff --git a/src/scss/global/_forms.scss b/src/scss/global/_forms.scss index 944747c1..07944c46 100755 --- a/src/scss/global/_forms.scss +++ b/src/scss/global/_forms.scss @@ -22,6 +22,14 @@ input[type="date"] { } } +.text-button { + cursor: pointer; + + &.destructive { + color: $red; + } +} + .button, button, input[type="button"], diff --git a/src/scss/views/_queue.scss b/src/scss/views/_queue.scss index 72a291de..aec202e6 100755 --- a/src/scss/views/_queue.scss +++ b/src/scss/views/_queue.scss @@ -41,4 +41,12 @@ } } } + + .radio { + margin: 20px auto 0; + padding: 10px 12px; + max-width: 400px; + background: $faint_grey; + box-sizing: border-box; + } } \ No newline at end of file