Much design work

This commit is contained in:
nelsonlaquet 2013-08-13 00:11:14 -05:00
parent c148919345
commit f4e6e87213
22 changed files with 637 additions and 1825 deletions

View file

@ -1,13 +0,0 @@
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
</head>
<body>
<h2>Password Reset</h2>
<div>
To reset your password, complete this form: {{ URL::to('password/reset', array($token)) }}.
</div>
</body>
</html>

View file

@ -2,27 +2,28 @@
@section('content') @section('content')
<header> <header>
<div> <a href="/">Pony.fm</a>
<h1><a href="/">Pony.fm</a></h1>
<div class="now-playing"> <div class="now-playing">
<pfm-player></pfm-player> <pfm-player></pfm-player>
</div> </div>
</div>
</header> </header>
<div class="site-body"> <div class="site-body">
<section class="sidebar" ng-controller="sidebar"> <ul class="sidebar" ng-controller="sidebar">
<nav>
<ul>
@if (Auth::check()) @if (Auth::check())
<li ng-class="{selected: $state.includes('home')}"><a href="/">Dashboard</a></li> <li ng-class="{selected: $state.includes('home')}"><a href="/">Dashboard <i class="icon-home"></i></a></li>
@else @else
<li ng-class="{selected: $state.includes('home')}"><a href="/">Home</a></li> <li ng-class="{selected: $state.includes('home')}"><a href="/">Home <i class="icon-home"></i></a></li>
@endif @endif
<li><h3>Discover</h3></li> <li ng-class="{selected: $state.includes('tracks') || $state.includes('track') || $state.includes('albums') || $state.includes('album') || $state.includes('artists') || $state.includes('artist')}">
<li ng-class="{selected: $state.includes('tracks') || $state.includes('track')}"><a href="/tracks">Music <i class="icon-music"></i></a></li> <a href="/tracks">Discover <i class="icon-music"></i></a>
<li ng-class="{selected: $state.includes('albums') || $state.includes('album')}"><a href="/albums">Albums <i class="icon-th-list"></i></a></li> </li>
<li ng-class="{selected: $state.includes('artists') || $state.includes('artist')}"><a href="/artists">Artists <i class="icon-user"></i></a></li>
@if (Auth::check())
<li ng-class="{selected: $state.includes('account-content') || isActive('/account')}"><a href="/account/tracks">Account <i class="icon-user"></i></a></li>
@endif
<li ng-class="{selected: isActive('/about')}"><a href="/about">Meta <i class="icon-info"></i></a></li>
@if (Auth::check()) @if (Auth::check())
<li> <li>
@ -43,34 +44,8 @@
<li><a href="#" pfm-eat-click ng-click="deletePlaylist(playlist)" ng-show="playlist.user_id == auth.user_id">Delete</a></li> <li><a href="#" pfm-eat-click ng-click="deletePlaylist(playlist)" ng-show="playlist.user_id == auth.user_id">Delete</a></li>
</ul> </ul>
</li> </li>
<li>
<h3>
<a href="#" title="Upload Track"><i class="icon-upload"></i></a>
Account
</h3>
</li>
{{-- <li ng-class="{selected: $state.includes('account-favourites')}"><a href="/account/favourites">Favourites</a></li> --}}
<li ng-class="{selected: $state.includes('account-content')}"><a href="/account/tracks">Your Content</a></li>
<li ng-class="{selected: isActive('/account')}"><a href="/account">Settings</a></li>
@endif
<li><h3>Meta</h3></li>
@if (!Auth::check())
<li ng-class="{selected: isActive('/login')}"><a href="/login">Login</a></li>
{{-- <li ng-class="{selected: isActive('/register')}"><a href="/register">Register</a></li> --}}
@endif
<li ng-class="{selected: isActive('/about')}"><a href="/about">About</a></li>
<li ng-class="{selected: isActive('/faq')}"><a href="/faq">FAQ</a></li>
@if (Auth::check())
<li><a href="#" ng-click="logout()" pfm-eat-click>Logout</a></li>
@endif @endif
</ul> </ul>
</nav>
</section>
<ui-view class="site-content"> <ui-view class="site-content">
@yield('app_content') @yield('app_content')
</ui-view> </ui-view>
@ -86,17 +61,7 @@
@section('scripts') @section('scripts')
<div id="fb-root"></div>
<script> <script>
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=186765381447538";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
window.pfm = { window.pfm = {
token: "{{Session::token()}}", token: "{{Session::token()}}",
auth: { auth: {

View file

@ -11,9 +11,6 @@
@yield('styles') @yield('styles')
</head> </head>
<body ng-app="ponyfm" ng-controller="application" uploader> <body ng-app="ponyfm" ng-controller="application" uploader>
<div class="background-color"></div>
<div class="background-two"></div>
<div class="background-one"></div>
@yield('content') @yield('content')
@yield('scripts') @yield('scripts')
</body> </body>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -1,11 +1,11 @@
window.handleResize = () -> window.handleResize = () ->
windowHeight = $(window).height() windowHeight = $(window).height()
$siteBody = $ '.site-body' $siteBody = $ '.site-body'
$siteBody.height windowHeight - $('header').height() - 1 $siteBody.height windowHeight - $('header').height()
$('.stretch-to-bottom').each () -> $('.stretch-to-bottom').each () ->
$this = $ this $this = $ this
newHeight = windowHeight - $this.offset().top + 1 newHeight = windowHeight - $this.offset().top
if newHeight > 0 if newHeight > 0
$this.height newHeight $this.height newHeight
@ -16,11 +16,6 @@ window.handleResize = () ->
$this.css $this.css
height: '15em' height: '15em'
# if $this.height() > $this.data 'real-height'
# $this.css {height: 'auto'}
# $this.find('.reveal').css {display: 'none'}
# return
$this.find('.reveal').click (e) -> $this.find('.reveal').click (e) ->
e.preventDefault() e.preventDefault()
$this.css {height: 'auto'} $this.css {height: 'auto'}

View file

@ -1,436 +1,2 @@
@import-once 'base/bootstrap/bootstrap'; @import-once 'base/bootstrap/bootstrap';
@import-once 'mixins'; @import-once 'mixins';
@media (max-width: 1200px) {
html {
.license-grid {
li {
width: 50%;
> div {
margin: 5px !important;
}
}
}
}
}
.account-settings-form {
}
ul.playlists {
overflow-y: auto;
margin: 0px;
padding: 0px;
list-style: none;
margin: 0px 5px;
margin-top: 10px;
li {
overflow: hidden;
margin: 0px;
padding: 0px;
height: 40px;
border-bottom: 1px solid #ddd;
img {
border-right: 1px solid #ddd;
padding: 0px;
display: block;
height: 40px;
width: 40px;
float: left;
}
.btn-group {
float: right;
display: block;
margin-top: 7px;
margin-right: 7px;
.btn {
.border-radius(0px);
}
}
a.main {
display: block;
text-decoration: none;
color: #444;
.is-public {
display: block;
float: right;
font-weight: bold;
margin-top: 10px;
margin-right: 10px;
font-size: 8pt;
}
.title {
.ellipsis();
margin-left: 50px;
line-height: 40px;
height: 40px;
display: block;
}
&:hover {
background: #eee;
}
}
}
}
.image-selector {
width: 500px;
max-height: 300px;
overflow-y: auto;
ul {
list-style: none;
padding: 0px;
margin: 0px;
li {
margin: 0px;
float: left;
width: 20%;
cursor: pointer;
img {
.transition(all 400ms);
display: block;
width: 100px;
height: 100px;
}
&:hover {
img {
opacity: .8;
}
}
}
}
}
html {
.two-pane-view.closed {
.account-albums-listing {
li {
.box-sizing(border-box);
width: 20%;
a {
padding: 15px;
.image {
.img-polaroid();
position: relative;
left: -5px;
width: 100%;
height: auto;
float: none;
}
.title {
margin: 0px;
font-size: 12pt;
padding: 0px;
margin-top: 5px;
}
.published {
margin: 0px;
padding: 0px;
}
}
}
}
}
}
.account-tracks-listing, .account-albums-listing {
overflow-y: auto;
margin: 0px;
padding: 0px;
list-style: none;
li {
.box-sizing(border-box);
padding: 0px;
margin: 0px;
line-height: normal;
&.empty {
.alert();
float: none !important;
width: auto !important;
display: block;
padding: 5px;
font-size: 9pt;
}
&.is-not-published a {
background: fadeout(@yellow, 90%);
}
&.selected, &.selected:hover {
a {
#gradient>.vertical(#149bdf, #0480be);
cursor: default;
color: #fff;
.published {
color: #eee;
}
}
}
a {
.transition(350px ease-out all);
display: block;
margin: 0px;
padding: 5px;
font-size: 9pt;
font-weight: normal;
overflow: hidden;
.image {
width: 32px;
height: 32px;
float: left;
display: block;
}
.title {
.ellipsis();
display: block;
margin-left: 37px;
}
.published {
display: block;
color: #777;
margin-left: 37px;
font-size: 8pt;
}
&:hover {
background: #ddd;
text-decoration: none;
}
}
}
}
.two-pane-view {
.list {
.dropdowns {
margin-top: 0px;
}
}
.editor {
display: none;
.album-track-listing {
padding: 0px;
clear: both;
margin: 0px;
margin-top: 10px;
list-style: none;
li {
overflow: hidden;
line-height: normal;
padding: 0px;
margin: 0px;
font-size: 8pt;
border-bottom: 1px dashed #ddd;
div {
padding: 2px;
}
span {
display: block;
float: left;
margin-left: 5px;
margin-top: 2px;
}
.btn {
line-height: normal;
padding: 2px 5px;
margin: 0px;
}
&.ui-sortable-helper {
#gradient>.vertical(@dropdownLinkBackgroundHover, darken(@dropdownLinkBackgroundHover, 5%));
border: none;
color: #fff;
}
&.ui-sortable-placeholder {
background: @yellow;
}
}
}
.show-songs, .album {
.btn {
display: block;
float: none;
}
}
.show-songs, .album, .track-selector {
.btn {
.border-radius(0px);
padding: 3px 10px;
font-size: 8pt;
text-align: left;
}
.error {
margin-top: 10px;
}
.pfm-popup {
width: 300px;
ul {
margin: 0px;
padding: 0px;
list-style: none;
li {
margin: 0px;
padding: 0px;
a {
.ellipsis();
display: block;
padding: 3px 10px;
font-size: 8pt;
color: #333333;
&:hover {
#gradient>.vertical(@dropdownLinkBackgroundHover, darken(@dropdownLinkBackgroundHover, 5%));
text-decoration: none;
color: @dropdownLinkColorHover;
}
}
&.selected {
a {
#gradient>.vertical(@green, darken(@green, 5%));
color: #fff;
font-weight: bold;
&:hover {
#gradient>.vertical(fadeout(@green, 20%), fadeout(darken(@green, 5%), 20%));
}
}
}
}
}
}
}
}
&.closed {
.account-tracks-listing, .account-albums-listing {
.clearfix();
li {
float: left;
width: 25%;
&.empty {
}
}
}
}
&.open {
.list {
.box-shadow(2px 0px 2px rgba(0, 0, 0, 0.2));
width: 250px;
float: left;
}
.editor {
margin-left: 260px;
margin-right: 10px;
display: block;
.stretch-to-bottom {
overflow-y: auto;
padding-right: 10px;
}
}
}
}
.license-grid {
margin: 0px;
padding: 0px;
overflow: hidden;
list-style: none;
li {
float: left;
width: 25%;
> div {
margin: 0px 5px;
border: 1px solid #ddd;
padding: 10px;
cursor: pointer;
strong {
font-size: 9pt;
display: block;
margin: 0px;
margin-bottom: 5px;
padding: 0px;
line-height: normal;
}
}
p {
min-height: 120px;
font-size: 9pt;
}
a {
.border-radius(0px);
display: block;
width: auto;
}
&.selected {
> div {
cursor: default;
border-color: @blue;
}
}
&:hover > div {
border: 1px solid #3366CC;
}
&:first-child > div {
margin-left: 0px;
}
&:last-child > div {
margin-right: 0px;
}
}
}

View file

@ -1,99 +0,0 @@
@import-once 'base/bootstrap/bootstrap';
@import-once 'mixins';
.albums-listing, .artist-listing {
overflow-y: auto;
margin: 0px;
padding: 0px;
list-style: none;
li {
.box-sizing(border-box);
width: 20%;
float: left;
padding: 0px;
margin: 0px;
line-height: normal;
&.empty {
.alert();
.border-radius(0px);
float: none !important;
width: auto !important;
display: block;
margin-top: 5px;
padding: 5px;
font-size: 9pt;
}
&.is-not-published a {
background: fadeout(@yellow, 90%);
}
&.selected, &.selected:hover {
a {
#gradient>.vertical(#149bdf, #0480be);
cursor: default;
color: #fff;
.published {
color: #eee;
}
}
}
a {
.transition(350px ease-out all);
display: block;
margin: 0px;
font-size: 9pt;
font-weight: normal;
overflow: hidden;
padding: 15px;
.image {
}
.title {
margin: 0px;
font-size: 12pt;
padding: 0px;
margin-top: 5px;
}
.published {
margin: 0px;
padding: 0px;
}
.image {
.img-polaroid();
float: left;
display: block;
position: relative;
left: -5px;
width: 100%;
height: auto;
float: none;
}
.title {
.ellipsis();
display: block;
}
.published {
display: block;
color: #777;
font-size: 8pt;
}
&:hover {
background: #ddd;
text-decoration: none;
}
}
}
}

View file

@ -1,6 +1,26 @@
@import-once 'base/bootstrap/bootstrap'; @import-once 'base/bootstrap/bootstrap';
@import-once 'mixins'; @import-once 'mixins';
.fade-hide, .fade-show {
.transition(all cubic-bezier(0.250, 0.460, 0.450, 0.940) 350ms);
}
.fade-hide {
opacity:1;
}
.fade-hide.fade-hide-active {
opacity:0;
}
.fade-show {
opacity:0;
}
.fade-show.fade-show-active {
opacity:1;
}
.slide-down-enter, .slide-down-leave, .slide-down-enter, .slide-down-leave,
.slide-up-enter, .slide-up-leave, .slide-up-enter, .slide-up-leave,
.slide-right-enter, .slide-right-leave { .slide-right-enter, .slide-right-leave {

View file

@ -1,11 +1,14 @@
@import url(http://fonts.googleapis.com/css?family=Josefin+Sans);
@import 'base/bootstrap/bootstrap'; @import 'base/bootstrap/bootstrap';
@import 'base/font-awesome/font-awesome'; @import 'base/font-awesome/font-awesome';
@import 'variables';
@import 'mixins'; @import 'mixins';
@import 'layout'; @import 'layout';
@import 'home';
@import 'account-content'; @import 'account-content';
@import 'components'; @import 'components';
@import 'forms'; @import 'forms';
@import 'tracks';
@import 'albums';
@import 'animations'; @import 'animations';
@import 'body';
@import 'player';
@import 'tracks';

27
public/styles/body.less Normal file
View file

@ -0,0 +1,27 @@
@import-once 'variables';
@import-once 'base/bootstrap/bootstrap';
.site-content{
.box-sizing(border-box);
padding: 10px;
h1 {
margin: 0px;
margin-bottom: 5px;
font-size: 15pt;
color: @pfm-purple;
line-height: normal;
overflow: hidden;
font-weight: normal;
a {
color: #555;
float: right;
font-size: 10pt;
&:hover {
text-decoration: none;
}
}
}
}

View file

@ -1,27 +1,159 @@
@import-once 'base/bootstrap/bootstrap'; @import-once 'base/bootstrap/bootstrap';
@import-once 'mixins'; @import-once 'mixins';
@import-once 'variables';
.fade-hide, .fade-show { .stretch-to-bottom {
.transition(all cubic-bezier(0.250, 0.460, 0.450, 0.940) 350ms); overflow-y: auto;
} }
.fade-hide { .dropdowns {
opacity:1; .clearfix();
list-style: none;
padding: 0px;
margin: 0px;
margin-bottom: 10px;
> li {
float: left;
margin: 0px;
padding: 0px;
margin-right: 10px;
line-height: normal;
&.open {
> .btn {
background: @pfm-purple;
color: #fff;
}
.dropdown-menu {
.box-shadow(none);
margin: 0px;
border: 2px solid @pfm-purple;
li.selected {
a {
background: @pfm-purple;
color: #fff;
}
}
li {
a:hover {
background: lighten(@pfm-purple, 5%);
}
}
}
}
> .btn {
border: none;
background: #eee;
font-size: 8pt;
padding: 3px 7px;
text-shadow: none;
&.btn-info {
background: @pfm-purple;
}
}
}
} }
.fade-hide.fade-hide-active { .tabs {
opacity:0; .clearfix();
list-style: none;
padding: 0px;
margin: 0px;
margin-bottom: 10px;
border-bottom: 4px solid #ddd;
font-size: 15px;
li {
margin: 0px;
float: left;
line-height: normal;
a {
padding: 5px 13px;
display: block;
color: #555;
&:hover {
text-decoration: none;
}
}
&.active {
a {
background: #eee;
color: #000;
border-bottom: 4px solid @pfm-purple;
margin-bottom: -4px;
}
}
}
} }
.fade-show { ui-view {
opacity:0; display: block;
&:before {
.transition(opacity 250ms);
opacity: 0;
background: #fff;
content: ' ';
top: 0px;
left: 0px;
z-index: 999;
width: 0px;
height: 0px;
position: absolute;
display: block;
overflow: hidden;
}
&.loading {
position: relative;
&:before {
opacity: .8;
width: 100%;
height: 100%;
}
}
} }
.fade-show.fade-show-active { .toolbar {
opacity:1; #gradient>.vertical(#555, #222);
list-style: none;
margin: 0px;
margin-bottom: 10px;
padding: 0px;
overflow: hidden;
li {
float: left;
a, button {
.border-radius(0px);
font-size: 9pt;
}
&.delete {
float: right;
}
}
} }
html body { html body {
.btn {
.border-radius(0px);
}
.ui-datepicker { .ui-datepicker {
.border-radius(0px); .border-radius(0px);
@ -34,9 +166,11 @@ html body {
border-bottom: 1px solid #777; border-bottom: 1px solid #777;
margin: -3px; margin: -3px;
} }
.ui-datepicker-calendar {
} }
.alert {
.border-radius(0px);
margin-bottom: 10px;
} }
} }
@ -73,48 +207,6 @@ html .dropdown-menu {
} }
} }
.dropdowns {
.clearfix();
list-style: none;
padding: 0px;
margin: 10px 0px;
> li {
margin: 0px;
margin-right: 5px;
padding: 0px;
float: left;
> a {
.border-radius(0px);
padding: 3px 10px;
font-size: 8pt;
}
ul {
.border-radius(0px);
padding: 0px;
li.selected {
a {
background: @blue;
color: #fff;
&:hover {
background: fadeout(@blue, 20%);
}
}
}
a {
padding: 3px 10px;
font-size: 8pt;
}
}
}
}
.pfm-popup { .pfm-popup {
.box-shadow(0 5px 10px rgba(0, 0, 0, 0.2)); .box-shadow(0 5px 10px rgba(0, 0, 0, 0.2));
z-index: 1000; z-index: 1000;
@ -184,10 +276,6 @@ html .dropdown-menu {
form { form {
margin: 0px; margin: 0px;
} }
.btn {
.border-radius(0px);
}
} }
html { html {
@ -200,8 +288,9 @@ html {
.pagination { .pagination {
border: none; border: none;
background: #ddd; background: #eee;
margin: 5px 0px; margin: 0px;
margin-bottom: 10px;
padding: 0px; padding: 0px;
overflow: hidden; overflow: hidden;
@ -225,11 +314,12 @@ html {
padding: 1px 10px; padding: 1px 10px;
display: block; display: block;
float: left; float: left;
color: @pfm-purple;
} }
} }
li.active a { li.active a {
background: #444; background: @pfm-purple;
color: #ddd; color: #ddd;
} }
} }

View file

@ -1,5 +1,6 @@
.pfm-form, .editor { @import-once "base/bootstrap/bootstrap";
.form-row {
.form-row {
margin-bottom: 10px; margin-bottom: 10px;
.error { .error {
@ -15,9 +16,9 @@
padding: 3px; padding: 3px;
font-size: 8pt; font-size: 8pt;
} }
} }
.has-error { .has-error {
label { label {
color: @red; color: @red;
} }
@ -25,47 +26,20 @@
.error { .error {
display: block; display: block;
} }
} }
.alert { label.strong {
.border-radius(0px);
margin-bottom: 10px;
}
.toolbar {
#gradient>.vertical(#555, #222);
list-style: none;
margin: 0px;
margin-bottom: 10px;
padding: 0px;
overflow: hidden;
li {
float: left;
a, button {
.border-radius(0px);
font-size: 9pt;
}
&.delete {
float: right;
}
}
}
label.strong {
font-size: 8pt; font-size: 8pt;
font-weight: bold; font-weight: bold;
} }
input[type="text"], input[type="password"], input[type="date"], textarea { input[type="text"], input[type="password"], input[type="date"], textarea {
padding: 3px; padding: 3px;
border: 1px solid; border: 1px solid;
border-color: #9c9c9c #9c9c9c #ccc #ccc; border-color: #9c9c9c #9c9c9c #ccc #ccc;
} }
input[type="text"], input[type="password"], input[type="date"], textarea, select { input[type="text"], input[type="password"], input[type="date"], textarea, select {
.border-radius(0px); .border-radius(0px);
.box-sizing(border-box); .box-sizing(border-box);
@ -76,23 +50,22 @@
&:focus { &:focus {
.box-shadow(none); .box-shadow(none);
} }
} }
select { select {
height: auto; height: auto;
line-height: normal; line-height: normal;
padding: 0px; padding: 0px;
} }
label { label {
input[type="checkbox"] { input[type="checkbox"] {
margin: 0px; margin: 0px;
margin-top: -2px; margin-top: -2px;
vertical-align: middle; vertical-align: middle;
} }
} }
textarea { textarea {
height: 60px; height: 60px;
}
} }

View file

@ -1,4 +0,0 @@
.home-container {
max-width: 900px;
margin: auto;
}

View file

@ -1,697 +1,144 @@
@import-once 'base/bootstrap/bootstrap'; @import-once 'base/bootstrap/bootstrap';
@import-once 'mixins'; @import-once 'mixins';
@import-once 'variables';
html, body { html, body {
height: 100%;
} }
html body { html body {
height: 100%; height: 100%;
font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; background: @pfm-dark-grey;
background: url('http://mlpforums.com/public/style_images/mlp/bg1.png'); font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
} }
.background-color { header, .site-body {
background: rgba(42, 42, 42, 1); .box-shadow(0 0 7px rgba(0, 0, 0, .3));
position: fixed; max-width: 1200px;
left: 0px; margin: auto;
top: 0px;
width: 50%;
height: 100%;
z-index: -5;
}
ui-view {
display: block;
&:before {
.transition(opacity 250ms);
opacity: 0;
background: #fff;
content: ' ';
top: 0px;
left: 0px;
z-index: 999;
width: 0px;
height: 0px;
position: absolute;
display: block;
overflow: hidden;
}
&.loading {
position: relative;
&:before {
opacity: .8;
width: 100%;
height: 100%;
}
}
} }
header { header {
.clearfix(); > a {
.box-shadow(0px 1px 8px rgba(0, 0, 0, 0.2)); display: block;
background: #222;
> div {
max-width: 1200px;
margin: auto;
}
position: relative;
color: #fff;
h1 {
font-size: 14pt;
margin: 0px;
padding: 0px 10px;
line-height: 47px;
float: left; float: left;
width: 130px; width: (@pfm-sidebar-size - 25);
height: 64px;
a { line-height: 52px;
text-decoration: none; background: @pfm-purple;
color: rgba(255, 255, 255, .6); color: #fff;
font-size: 24pt;
padding-left: 25px;
font-weight: lighter;
position: relative;
z-index: 600;
font-family: 'Josefin Sans', sans-serif;
&:hover { &:hover {
color: #aaa; background: darken(@pfm-purple, 25%);
text-decoration: none;
}
}
}
.now-playing {
.clearfix();
margin-top: 5px;
padding-left: 5px;
margin-left: 149px;
background: #222;
.current-track {
margin-top: 4px;
}
.image {
float: left;
width: 40px;
height: 40px;
background: #aaa;
img {
display: block;
width: 100%;
height: 100%;
}
}
.transport {
margin-top: -3px;
margin-bottom: 3px;
margin-left: 46px;
height: 5px;
background: #555;
position: relative;
margin-right: 6px;
cursor: pointer;
&:hover {
}
.bar, .loader-bar {
position: absolute;
height: 100%;
top: 0px;
left: 0px;
}
.loader-bar {
background: #888;
z-index: 200;
}
.bar {
background: #fd8500;
z-index: 500;
}
}
.title {
margin-left: 45px;
.artist, .song {
.ellipsis();
display: block;
line-height: normal;
a:hover {
text-decoration: none;
color: #3587CC;
}
}
.artist a {
color: #ddd;
font-size: 8pt;
}
.song a {
color: #fff; color: #fff;
}
}
.buttons {
float: right;
margin: 0px;
padding: 0px;
list-style: none;
margin-top: 3px;
margin-right: 5px;
li {
float: left;
margin: 0px;
padding: 0px;
position: relative;
a {
display: block;
float: left;
font-size: 16px;
padding: 5px 10px;
color: #ddd;
}
.volume-slider {
.box-shadow(0px 5px 9px rgba(50, 50, 50, 0.5));
position: absolute;
border-bottom: 1px solid #fff;
border-top: 3px solid #3366CC;
top: 30px;
background: #eee;
list-style: none;
margin: 0px;
display: none;
width: 100%;
padding: 10px 0px;
z-index: 300;
.bar {
width: 5px;
height: 180px;
background: #aaa;
margin: auto;
position: relative;
cursor: pointer;
.knob {
.border-radius(20px);
height: 15px;
width: 15px;
display: block;
background: #1F3D7B;
border: 2px solid #1F3D7B;
position: absolute;
top: 0px;
left: -7px;
font-size: 1px;
padding: 0px;
}
}
}
&:hover, &.keep-open {
#gradient>.vertical(#fff, #ddd);
.volume-slider {
display: block;
}
a {
text-decoration: none; text-decoration: none;
color: #000;
}
}
}
}
}
nav ul {
.navigation-list-horiz();
float: left;
margin-top: 19px;
li {
line-height: 28px;
}
a {
position: relative;
padding: 0px 20px;
color: #ddd;
z-index: 1;
overflow: hidden;
.not-selectable();
border: none;
&:after {
#gradient>.vertical(#fff, #ddd);
}
&:before {
.transition(250ms top ease-out);
#gradient>.vertical(#5b9fdc, #1f79c2);
}
&:after, &:before {
position: absolute;
top: -100%;
left: 0px;
width: 100%;
height: 100%;
content: " ";
z-index: -1;
}
}
li.selected, li.selected:hover {
a {
cursor: default;
color: #fff;
&:after {
display: none;
}
&:before {
top: 0px;
}
}
}
li:hover {
a {
text-decoration: none;
color: #000;
&:after {
top: 0px;
}
}
} }
} }
} }
.site-body { .now-playing {
max-width: 1200px; margin-left: @pfm-sidebar-size;
margin: auto; height: 64px;
background: #eee;
.sidebar {
height: 100%;
float: left;
width: 148px;
z-index: 2000;
nav {
h3 {
color: rgba(255, 255, 255, .6);
font-size: 12px;
padding: 5px;
background: #222;
line-height: normal;
font-weight: bold;
margin: 0px;
position: relative; position: relative;
z-index: 500;
}
.sidebar {
width: @pfm-sidebar-size;
height: 100%;
background: @pfm-light-grey;
float: left;
list-style: none;
padding: 0px;
margin: 0px;
font-size: 10pt;
li {
margin: 0px;
padding: 0px;
line-height: normal;
&.selected {
background: #fff;
> a {
color: #000;
}
}
h3 {
padding: 10px 25px;
padding-right: 10px;
margin: 0px;
font-size: 10pt;
color: #eee;
background: darken(@pfm-light-grey, 10%);
line-height: normal;
a { a {
.not-selectable();
display: block; display: block;
position: absolute; float: right;
right: 0px; width: 20px;
top: 0px;
padding: 5px;
line-height: normal;
text-decoration: none;
font-size: 12px;
width: 22px;
text-align: center; text-align: center;
color: rgba(255, 255, 255, .7); color: #fff;
&.selected, &.selected:hover {
color: @blue;
cursor: default;
}
&:hover { &:hover {
color: #fff; text-decoration: none;
} color: #000;
&.view-all {
right: 22px;
} }
} }
} }
> ul { .dropdown-menu a {
margin: 0px; color: #000;
padding: 0px; }
list-style: none;
> li { &:hover > a.dropdown-toggle {
margin: 0px; display: block;
padding: 0px; }
line-height: normal;
.dropdown-menu { > a.dropdown-toggle {
width: 148px; float: right;
min-width: 148px; padding: 10px 0px;
display: none;
} }
> a { > a {
.border-radius(0px);
.not-selectable();
.ellipsis();
font-size: 12px;
margin: 0px;
border: none;
color: rgba(255, 255, 255, .7);
font-weight: bold;
padding: 8px 5px;
line-height: normal;
display: block; display: block;
text-decoration: none; padding: 10px 25px;
padding-right: 0px;
i {
float: right;
width: 22px;
text-align: center;
}
&:hover {
color: #fff;
}
&.menu {
float: right;
font-size: 15px;
display: none;
}
}
&:hover {
> a.menu {
display: block;
}
}
&.selected, &.selected:hover {
> a:not(.menu) {
color: @blue;
cursor: default;
}
}
&.none {
span {
display: block;
padding: 8px 12px;
color: #555;
font-style: italic;
font-size: 8pt;
}
}
}
}
}
}
.site-content {
.perspective();
overflow: hidden; overflow: hidden;
border: 5px solid #222; color: #fff;
border-top: none;
border-bottom: none;
position: relative;
height: 100%; > i {
margin-left: 148px; display: block;
float: right;
width: 20px;
text-align: center;
margin-right: 10px;
}
> div { &:hover {
.box-sizing(border-box); text-decoration: none;
width: 100%;
height: 100%;
background: #fff;
padding: 0px 15px;
padding-top: 10px;
} }
} }
}
.inner-view {
position: relative;
> div {
width: 100%;
height: 100%;
background: #fff;
position: relative;
} }
} }
.site-content { .site-content {
h1, h2 { overflow: hidden;
border: none; margin-left: @pfm-sidebar-size;
background: none; background: #fff;
color: #747474; height: 100%;
font-weight: 300; z-index: 100;
line-height: normal;
font-weight: normal;
margin: 0px;
padding: 5px 0px;
a {
display: block;
float: right;
font-size: 10pt;
margin-top: 8px;
text-decoration: none;
}
.subtitle {
font-size: 10pt;
display: block;
padding: 3px 0px;
a {
float: none;
display: inline;
}
}
}
h1 {
font-size: 24px;
}
h2 {
font-size: 20px;
border-bottom: 2px solid #ddd;
margin-bottom: 2px;
}
}
html {
.tabs {
.clearfix();
list-style: none;
border-bottom: 4px solid #ddd;
margin: 0px;
padding: 0px;
li {
margin: 0px;
padding: 0px;
float: left;
a {
display: block;
border: none;
background: none;
color: #747474;
font-weight: 300;
font-size: 15px;
line-height: normal;
font-weight: normal;
padding: 5px 10px;
&:hover {
color: #000;
text-decoration: none;
}
}
&.active {
a {
color: #000;
border-bottom: 4px solid orange;
margin-bottom: -4px;
cursor: default;
}
}
}
}
} }
.file-over-notice { .file-over-notice {
display: none; display: none;
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, .8);
color: #fff;
z-index: 10000;
p {
width: 300px;
margin: auto;
display: table-cell;
vertical-align: middle;
text-align: center;
font-size: 24pt;
font-weight: bold;
}
}
body.file-over {
.file-over-notice {
display: table;
}
}
html {
.modal-backdrop {
background: rgba(0, 0, 0, .9);
}
.modal {
.border-radius(0px);
}
.modal-header, .modal-footer {
.border-radius(0px);
}
}
.overlay {
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, .9);
}
.overlay.upload-dialog .inner {
.box-sizing(border-box);
max-width: 550px;
padding: 0px 20px;
padding-top: 10px;
height: 100%;
overflow-y: auto;
margin: auto;
h2 {
color: #fff;
font-size: 12pt;
margin: 0px;
span {
display: block;
float: right;
font-size: 9pt;
color: #ddd;
text-decoration: underline;
}
}
.close-button {
.border-radius(0px);
width: auto;
margin-bottom: 10px;
float: none;
display: block;
}
.uploads {
margin: 0px;
padding: 0px;
list-style: none;
li {
margin-bottom: 5px;
background: #000;
font-size: 9pt;
position: relative;
z-index: 1;
color: #fff;
border: 2px solid #444;
p {
margin: 5px;
padding: 0px;
}
.bar {
position: absolute;
top: 0px;
left: 0px;
height: 100%;
background: @green;
z-index: -1;
}
&.has-error {
border-color: @red;
.bar {
display: none;
}
}
&.is-processing {
border-color: @blue;
.bar {
display: none;
}
}
}
}
}
.upload-queue-leave {
.transition(400ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all);
position: absolute;
display: block;
}
.upload-queue-leave.upload-queue-leave-active, .upload-queue-enter {
.transform(scale(0));
opacity: 0;
}
.upload-queue-leave {
.transform(scale(1));
}
.stretch-to-bottom {
overflow-y: auto;
} }

101
public/styles/player.less Normal file
View file

@ -0,0 +1,101 @@
@import-once 'variables';
@import-once 'mixins';
.track-player {
overflow: hidden;
padding: 10px;
.image {
float: left;
width: 43px;
height: 43px;
img {
.img-polaroid();
display: block;
width: 100%;
padding: 1px;
}
}
.inner {
margin-left: 55px;
}
.song, .artist {
.ellipsis();
line-height: normal;
display: block;
a {
color: #555;
&:hover {
text-decoration: none;
color: #111;
}
}
}
.song {
font-weight: bold;
}
.volume-slider {
display: none;
}
.transport {
background: @pfm-light-grey;
height: 8px;
position: relative;
cursor: pointer;
margin-top: 4px;
.bar {
z-index: 500;
background: @pfm-purple;
}
.loader-bar {
z-index: 200;
background: #ddd;
}
.bar, .loader-bar {
position: absolute;
top: 0px;
left: 0px;
height: 100%;
}
}
.buttons {
list-style: none;
margin: 0px;
padding: 0px;
float: right;
li {
line-height: normal;
float: left;
margin: 0px;
padding: 0px;
font-size: 15pt;
> a {
display: block;
padding: 5px 0px;
width: 40px;
text-align: center;
color: #5A5A5A;
&:hover {
text-decoration: none;
background: darken(#eee, 10%);
color: #000;
}
}
}
}
}

View file

@ -1,161 +1,53 @@
@import-once 'base/bootstrap/bootstrap'; @import-once 'base/bootstrap/bootstrap';
@import-once 'mixins'; @import-once 'mixins';
@import-once 'variables';
.comments { .tracks-listing.four-columns {
ul {
margin: 0px;
padding: 0px;
list-style: none;
margin-bottom: 5px;
li { li {
.clearfix();
margin: 0px;
padding: 3px;
border-bottom: 1px solid #ddd;
.meta {
font-size: 8pt;
float: right;
}
.content {
margin-left: 45px;
}
img {
.img-polaroid();
float: left; float: left;
width: 32px; width: 25%;
height: 32px;
padding: 2px;
} }
}
.tracks-listing.three-columns {
li {
float: left;
width: 33.3333%;
} }
}
.tracks-listing.two-columns {
li {
float: left;
width: 50%;
} }
} }
.tracks-listing { .tracks-listing {
overflow-y: auto; @icon-size: 42px;
margin: 0px; margin: 0px;
padding: 0px; padding: 0px;
list-style: none; list-style: none;
&.no-artist {
li {
.info {
.artist {
display: none;
}
}
}
}
&.condensed {
li {
margin: 0px;
border-bottom: 1px solid #ddd;
}
}
&.two-column {
li { li {
.clearfix();
.box-sizing(border-box); .box-sizing(border-box);
width: 50%;
float: left;
margin: 0px;
padding: 5px;
}
}
&.four-column {
li {
.box-sizing(border-box);
width: 25%;
float: left;
margin: 0px;
padding: 5px;
}
}
li {
overflow: hidden;
margin: 10px 0px;
padding: 0px;
line-height: normal; line-height: normal;
margin: 5px 0px;
&.empty { padding: 0px;
.alert(); padding-right: 10px;
.border-radius(0px);
float: none !important;
width: auto !important;
display: block;
margin-top: 5px;
padding: 5px;
font-size: 9pt;
&:hover {
background-color: @warningBackground;
}
}
&.is-playing, &:hover.is-playing {
background: #444;
.icons {
span, a {
color: #fff;
}
}
.info {
.title {
color: rgba(255, 255, 255, .9);
}
.metadata {
color: #ddd;
}
}
}
&:hover {
background: #eee;
.image { .image {
.play-button {
display: block;
}
}
}
&.is-favourited {
.icon-favourite {
color: @orange;
text-decoration: none;
i {
color: #FFD76E;
text-shadow: 0px 0px 2px rgba(0,0,0,0.8);
&:before {
content: "\f005"
}
}
}
}
.image {
height: 40px;
width: 40px;
float: left; float: left;
width: @icon-size;
height: @icon-size;
position: relative; position: relative;
.play-button { .play-button {
.transition(background 250ms ease-out); .transition(background 250ms ease-out);
position: absolute; position: absolute;
top: 0px; top: 0px;
left: 0px; left: 0px;
@ -175,235 +67,91 @@
} }
img { img {
.img-polaroid();
padding: 3px;
padding: 0px;
display: block; display: block;
height: 38px; width: 100%;
width: 38px;
} }
} }
.icons { .icons {
float: right; float: right;
font-size: 14px; display: block;
margin-right: 2px; margin-top: 5px;
margin-top: 4px;
i.icon-microphone-off {
opacity: .5;
}
i.icon-microphone-off, i.icon-microphone {
color: #777;
}
a { a {
text-decoration: none; text-decoration: none;
} }
}
a, span { a.info {
display: block; display: block;
float: left; margin-left: (@icon-size + 10);
margin: 0px 3px;
line-height: 0px;
}
.icon-microphone-off { &:hover {
opacity: .5;
}
}
.info {
text-decoration: none; text-decoration: none;
}
> span {
display: block; display: block;
padding: 3px 0px; }
margin-left: 40px; }
padding-left: 5px;
line-height: normal;
.title { .title {
.ellipsis(); .ellipsis();
display: block;
text-decoration: none;
color: @blue;
}
.metadata { color: #000;
margin-top: 3px;
display: block;
color: #777;
font-size: 8pt;
}
}
}
}
.user-details {
.header {
.box-shadow(0px 2px 3px rgba(0, 0, 0, .3));
background: #eee;
h1 {
padding: 5px;
}
.tabs {
background: #f0f0f0;
margin: 0px;
border: none;
border-top: 1px solid #ddd;
}
}
}
.user-details, .track-details, .album-details, .playlist-details {
.comments {
.alert {
.border-radius(0px);
margin: 5px 0px;
}
button {
.border-radius(0px);
}
}
.stretch-to-bottom {
padding-top: 10px;
}
.cover-image {
img {
.img-polaroid();
.box-sizing(border-box);
width: 100%;
display: block;
margin-bottom: 5px;
}
.btn {
.border-radius(0px);
display: block;
width: 'auto';
margin: 5px 0px;
}
.stats {
margin: 0px;
padding: 0px;
list-style: none;
li {
margin: 0px;
padding: 5px 0px;
border-bottom: 1px solid #ddd;
}
}
}
}
.track-details, .album-details, .playlist-details {
h1 {
}
.lyrics {
font-size: 10pt;
color: #222;
position: relative;
overflow: hidden;
padding: 0px;
margin: 0px;
h2 {
}
.reveal {
#gradient>.vertical(rgba(255,255,255,0), rgba(255,255,255,1));
.box-sizing(border-box);
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
z-index: 400;
border: 2px solid #fff;
cursor: pointer;
&:hover {
border: 2px solid @blue;
}
a {
.box-sizing(border-box);
display: block;
position: absolute;
bottom: 0px;
left: 0px;
width: 100%;
background: #eee;
padding: 3px;
z-index: 500;
text-decoration: none;
font-size: 10pt;
}
}
}
}
.track-details {
h1 {
margin-left: 55px;
}
.tracks-listing li .image .play-button {
display: block;
}
.tracks-listing {
float: left;
margin-top: 5px; margin-top: 5px;
} }
.tracks-listing li { .artist, .published-at, .genre {
margin: 0px; color: #777;
margin-bottom: 5px; font-size: 80%;
float: left; }
.published-at {
float: right;
}
.artist, .published-at {
margin-top: 2px;
}
&:hover {
background: #eee;
.image { .image {
height: 50px;
width: 50px;
.play-button { .play-button {
line-height: 48px; display: block;
} }
img {
width: 48px;
height: 48px;
} }
} }
.icons, .info { &.is-playing {
display: none; background: #ddd;
}
}
}
html {
.track-toolbar {
padding: 5px;
.btn:first-child, > .btn:last-child {
.border-radius(0px);
} }
> .btn { &.is-favourited {
border-right: none; .icons {
a.icon-favourite {
color: @orange;
text-decoration: none;
i {
color: #FFD76E;
text-shadow: 0px 0px 2px rgba(0,0,0,0.8);
&:before {
content: "\f005"
}
} }
.dropdown:first-child {
border-right: 1px solid #cccccc;
} }
.dropdown {
float: right;
border-right: none;
.btn-primary {
color: #fff;
} }
} }
} }

View file

@ -0,0 +1,5 @@
@pfm-purple: #B885BD;
@pfm-dark-grey: #646464;
@pfm-light-grey: #969696;
@pfm-light-purple: #dac5db;
@pfm-sidebar-size: 160px;

View file

@ -1,11 +1,9 @@
<div class="dashboard"> <section class="recent-tracks stretch-to-bottom">
<section class="recent-tracks stretch-to-bottom">
<div> <div>
<h1> <h1>
<a href="#"><i class="icon-music"></i> see more</a> <a href="/tracks"><i class="icon-music"></i> see more</a>
The Newest Tunes The Newest Tunes
</h1> </h1>
<pfm-tracks-list tracks="recentTracks" class="two-column"></pfm-tracks-list> <pfm-tracks-list tracks="recentTracks" class="two-columns"></pfm-tracks-list>
</div> </div>
</section> </section>
</div>

View file

@ -1,15 +1,5 @@
<div class="current-track" ng-show="player.isPlaying"> <div class="track-player" ng-show="player.isPlaying">
<div class="image">
<img ng-src="{{player.currentTrack.covers.thumbnail}}" />
</div>
<div class="transport" ng-click="seek($event)">
<div class="bar" pfm-progress-bar="player.currentTrack.progress"></div>
<div class="loader-bar" pfm-progress-bar="player.currentTrack.loadingProgress"></div>
</div>
<ul class="buttons"> <ul class="buttons">
<li><a pfm-eat-click ng-click="playPrev()" class="previous" href="#"><i class="icon-th-list"></i></a></li>
<li><a pfm-eat-click ng-click="playPrev()" class="previous" href="#"><i class="icon-download-alt"></i></a></li>
<li><a pfm-eat-click ng-click="playPrev()" class="previous" href="#"><i class="icon-star"></i></a></li>
<li><a pfm-eat-click ng-click="playPrev()" class="previous" href="#"><i class="icon-fast-backward"></i></a></li> <li><a pfm-eat-click ng-click="playPrev()" class="previous" href="#"><i class="icon-fast-backward"></i></a></li>
<li> <li>
<a pfm-eat-click ng-click="playPause()" class="play" href="#"> <a pfm-eat-click ng-click="playPause()" class="play" href="#">
@ -27,8 +17,17 @@
</div> </div>
</li> </li>
</ul> </ul>
<div class="image">
<img ng-src="{{player.currentTrack.covers.thumbnail}}" />
</div>
<div class="inner">
<div class="title"> <div class="title">
<span class="song"><a href="{{player.currentTrack.url}}">{{player.currentTrack.title}}</a></span> <span class="song"><a href="{{player.currentTrack.url}}">{{player.currentTrack.title}}</a></span>
<span class="artist"><a href="{{player.currentTrack.user.url}}">{{player.currentTrack.user.name}}</a></span> <span class="artist"><a href="{{player.currentTrack.user.url}}">{{player.currentTrack.user.name}}</a></span>
</div> </div>
<div class="transport" ng-click="seek($event)">
<div class="bar" pfm-progress-bar="player.currentTrack.progress"></div>
<div class="loader-bar" pfm-progress-bar="player.currentTrack.loadingProgress"></div>
</div>
</div>
</div> </div>

View file

@ -13,11 +13,8 @@
</div> </div>
<a class="info" href="{{track.url}}"> <a class="info" href="{{track.url}}">
<span class="title">{{track.title}}</span> <span class="title">{{track.title}}</span>
<span class="metadata"> <span class="published-at">{{track.published_at.date | momentFromNow}}</span>
<span class="artist">by: {{track.user.name}} /</span> <span class="artist">{{track.user.name}} / {{track.genre.name}}</span>
<span class="genre">{{track.genre.name}}</span> /
{{track.published_at.date | momentFromNow}}
</span>
</a> </a>
</li> </li>
<li ng-show="!tracks.length" class="empty"> <li ng-show="!tracks.length" class="empty">

View file

@ -1,11 +1,8 @@
<div> <ul class="tabs">
<ul class="tabs"> <li ng-class="{active: $state.includes('tracks.search')}"><a href="/tracks">Tracks</a></li>
<li ng-class="{active: $state.includes('tracks.search')}"><a href="/tracks">Search</a></li> <li ng-class="{active: $state.includes('tracks.popular')}"><a href="/artists">Artists</a></li>
<!-- <li ng-class="{active: $state.includes('tracks.random')}"><a href="/albums">Albums</a></li>
<li ng-class="{active: $state.includes('tracks.popular')}"><a href="/tracks/popular">Popular</a></li> <li ng-class="{active: $state.includes('tracks.random')}"><a href="/playlists">Playlists</a></li>
<li ng-class="{active: $state.includes('tracks.random')}"><a href="/tracks/random">Random</a></li> </ul>
-->
</ul>
<ui-view></ui-view> <ui-view></ui-view>
</div>

View file

@ -1,3 +1,3 @@
<div class="stretch-to-bottom"> <div class="stretch-to-bottom">
<pfm-tracks-list tracks="tracks" class="two-column"></pfm-tracks-list> <pfm-tracks-list tracks="tracks" class="two-columns"></pfm-tracks-list>
</div> </div>