diff --git a/src/js/components/Header.js b/src/js/components/Header.js index d626f022..5f4c2dec 100755 --- a/src/js/components/Header.js +++ b/src/js/components/Header.js @@ -3,6 +3,7 @@ import React, { PropTypes } from 'react' import FontAwesome from 'react-fontawesome' import Icon from './Icon' +import SearchForm from './SearchForm' import SidebarToggleButton from './SidebarToggleButton' import ContextMenuTrigger from './ContextMenuTrigger' @@ -43,13 +44,24 @@ export default class Header extends React.Component{ } render(){ - return ( -
- - -

{ this.props.title }

- {this.renderOptions()} -
- ); + if (this.props.search){ + return ( +
+ + + + {this.renderOptions()} +
+ ) + } else { + return ( +
+ + +

{ this.props.title }

+ {this.renderOptions()} +
+ ) + } } } \ No newline at end of file diff --git a/src/js/components/SearchForm.js b/src/js/components/SearchForm.js index ffc367f1..54502a54 100755 --- a/src/js/components/SearchForm.js +++ b/src/js/components/SearchForm.js @@ -49,7 +49,7 @@ class SearchForm extends React.Component{
this.handleSubmit(e) }> this.setState({ query: e.target.value }) } value={ this.state.query } />
diff --git a/src/js/components/Sidebar.js b/src/js/components/Sidebar.js index 828211e2..2442e698 100755 --- a/src/js/components/Sidebar.js +++ b/src/js/components/Sidebar.js @@ -5,7 +5,6 @@ import { bindActionCreators } from 'redux' import { Link } from 'react-router' import Icon from './Icon' -import SearchForm from './SearchForm' import Dropzones from './Dropzones' import Thumbnail from './Thumbnail' @@ -22,9 +21,6 @@ class Sidebar extends React.Component{ return ( ); } diff --git a/src/js/components/Track.js b/src/js/components/Track.js index 6dde451c..20d6d7e9 100755 --- a/src/js/components/Track.js +++ b/src/js/components/Track.js @@ -67,13 +67,15 @@ export default class Track extends React.Component{ ) } else if (this.props.context == 'queue'){ - var type = (track.added_from ? helpers.uriType(track.added_from) : null) if (track.added_from && track.added_by){ - var added = {track.added_by} (from {type}) - - } else if (track.added_from){ - var added = (from {type}) + var type = (track.added_from ? helpers.uriType(track.added_from) : null) + if (type == 'discover'){ + var link = discover + } else { + var link = {type} + } + var added = {track.added_by} (from {link}) } else if (track.added_by){ var added = track.added_by diff --git a/src/js/helpers.js b/src/js/helpers.js index e055b035..a43c4b0b 100755 --- a/src/js/helpers.js +++ b/src/js/helpers.js @@ -209,6 +209,12 @@ export let getFromUri = function(element,uri){ return exploded[2] } break + + case 'seeds': + if (exploded[1] == 'discover'){ + return exploded[2] + } + break } return null } @@ -232,6 +238,7 @@ export let uriType = function( uri ){ case 'playlist': case 'search': case 'genre': + case 'discover': return exploded[1] break diff --git a/src/js/index.js b/src/js/index.js index d7588490..ec4d71f8 100755 --- a/src/js/index.js +++ b/src/js/index.js @@ -60,7 +60,7 @@ ReactDOM.render( - + diff --git a/src/js/views/Search.js b/src/js/views/Search.js index 244ce02b..b0f55d73 100755 --- a/src/js/views/Search.js +++ b/src/js/views/Search.js @@ -13,6 +13,7 @@ import ArtistGrid from '../components/ArtistGrid' import AlbumGrid from '../components/AlbumGrid' import PlaylistGrid from '../components/PlaylistGrid' import LazyLoadListener from '../components/LazyLoadListener' +import SearchForm from '../components/SearchForm' import * as helpers from '../helpers' import * as uiActions from '../services/ui/actions' @@ -26,18 +27,26 @@ class Search extends React.Component{ } componentDidMount(){ - this.props.uiActions.startSearch(this.props.params.type, this.props.params.query) + + // Make sure we have search parameters to start with + if (this.props.params && this.props.params.type && this.props.params.query){ + this.props.uiActions.startSearch(this.props.params.type, this.props.params.query) + } } componentWillReceiveProps(newProps){ + + // Make sure we have some search parameters + if (newProps.params && newProps.params.type && newProps.params.query){ - if (this.props.params.query != newProps.params.query || this.props.params.type != newProps.params.type){ - this.props.uiActions.startSearch(newProps.params.type, newProps.params.query) - } + if (this.props.params.query != newProps.params.query || this.props.params.type != newProps.params.type){ + this.props.uiActions.startSearch(newProps.params.type, newProps.params.query) + } - // mopidy comes online - if (!this.props.mopidy_connected && newProps.mopidy_connected){ - this.props.uiActions.startSearch(newProps.params.type, newProps.params.query, true) + // mopidy comes online + if (!this.props.mopidy_connected && newProps.mopidy_connected){ + this.props.uiActions.startSearch(newProps.params.type, newProps.params.query, true) + } } } @@ -234,7 +243,7 @@ class Search extends React.Component{ return (
-
+
{ this.renderResults() }
diff --git a/src/js/views/discover/DiscoverRecommendations.js b/src/js/views/discover/DiscoverRecommendations.js index 789db89d..f3253fdf 100755 --- a/src/js/views/discover/DiscoverRecommendations.js +++ b/src/js/views/discover/DiscoverRecommendations.js @@ -66,7 +66,11 @@ class Discover extends React.Component{ } handleURLSeeds(seeds_string = this.props.params.seeds){ - var seeds = seeds_string.split(',') + + // Rejoin if we've had to uri-encode these as strings + // We'd need to do this if our URL has been encoded so the whole URL can become + // it's own URI (eg iris:discover:spotify_artist_1234) where we can't use ":" + var seeds = seeds_string.split('_').join(':').split(',') for (var i = 0; i < seeds.length; i++){ switch (helpers.uriType(seeds[i])){ @@ -198,6 +202,11 @@ class Discover extends React.Component{ } } } + + var uri = 'iris:discover' + if (this.props.params.seeds){ + uri += ':'+this.props.params.seeds.split(':').join('_') + } return (
@@ -211,7 +220,7 @@ class Discover extends React.Component{

Tracks

- {this.props.recommendations.tracks ? : null} + {this.props.recommendations.tracks ? : null}
) diff --git a/src/scss/app.scss b/src/scss/app.scss index d22e0871..54d34989 100755 --- a/src/scss/app.scss +++ b/src/scss/app.scss @@ -12,7 +12,6 @@ @import 'components/dragger'; @import 'components/images'; @import 'components/icon'; -@import 'components/search-form'; @import 'components/slider'; @import 'components/playback-controls'; @import 'components/sidebar'; diff --git a/src/scss/components/_search-form.scss b/src/scss/components/_search-form.scss deleted file mode 100755 index bb687423..00000000 --- a/src/scss/components/_search-form.scss +++ /dev/null @@ -1,36 +0,0 @@ - -.search-form { - z-index: 3; - position: relative; - - input { - background: transparent; - border-bottom: 1px solid $light_grey; - padding: 16px 0 8px; - width: 100%; - color: $black; - - &:focus, - &:active { - border-color: $turquoise; - } - } - - &.sidebar { - padding: 10px 15px 0 15px; - - .autocomplete-field { - .results { - top: 42px; - } - - &.loading { - .input:after { - background: $turquoise; - } - } - } - } - -} - diff --git a/src/scss/components/_sidebar.scss b/src/scss/components/_sidebar.scss index 73cfd64d..c19df0af 100755 --- a/src/scss/components/_sidebar.scss +++ b/src/scss/components/_sidebar.scss @@ -68,18 +68,18 @@ aside{ nav { z-index: 2; position: relative; - padding-top: 8px; + padding-top: 25px; a { @include feature_font(); - @include gradient_overlay(); + @include gradient_overlay(3px); font-weight: 800; font-size: 15px; color: $darkest_grey; text-decoration: none; display: block; padding: 8px 10px 6px; - margin: 0 15px; + margin: 0 20px; border-radius: 3px; .icon { @@ -116,7 +116,7 @@ aside{ } section { - padding-bottom: 20px; + padding-bottom: 25px; title { display: block; diff --git a/src/scss/global/_core.scss b/src/scss/global/_core.scss index fd1a643c..819ddf44 100755 --- a/src/scss/global/_core.scss +++ b/src/scss/global/_core.scss @@ -43,7 +43,7 @@ main { min-height: 100vh; .content-wrapper { - padding: 40px 40px 50px; + padding: 40px 40px 80px; } a { diff --git a/src/scss/global/_variables.scss b/src/scss/global/_variables.scss index 5e41b514..87f297af 100755 --- a/src/scss/global/_variables.scss +++ b/src/scss/global/_variables.scss @@ -190,8 +190,9 @@ $bp_shallow: 650px; filter: invert(1); } -@mixin gradient_overlay(){ +@mixin gradient_overlay($radius: 0){ position: relative; + border-radius: $radius; &:before { @include animate(); diff --git a/src/scss/views/_search.scss b/src/scss/views/_search.scss index 2d25069d..d35a6cfc 100755 --- a/src/scss/views/_search.scss +++ b/src/scss/views/_search.scss @@ -1,6 +1,18 @@ .search-view { + .search-form { + display: inline-block; + + input { + @include feature_font(); + padding: 0; + font-size: 2rem; + font-weight: 700; + background: transparent; + } + } + .search-result-sections { section { .inner {