div
h1 401 - unauthorized
p you're not authorized to access that
div
h1 404 - page not found
p we're having trouble finding what you want
div
h1 500 - internal error
p something went horribly wrong. what did you do?!
#search.welcome
.hero-unit
.span6
h2 Watch music videos on jukesy!
p Get started above by searching Last.fm for an artist, album, or track. Or browse from lists of popular artists and tracks below.
.span3
h2 Coming Soon
ul
li tag/genre radio
li Last.fm scrobbling
li favorites
//p.alpha-warning.span9
// i.icon-warning-sign
// | Jukesy is a beta release. Features may change.
.clear
#search-artists
- if (typeof artists != 'undefined' && artists.length)
h3 Top Artists on Last.fm
.clear
.artists
ul.thumbnails
.clear
.clear
hr
#search-tracks
- if (typeof tracks != 'undefined' && tracks.length)
.btn-group.pull-right
button.btn.btn-primary.btn-large.play-all Play All
button.btn.btn-primary.btn-large.dropdown-toggle('data-toggle'= 'dropdown')
i.icon-caret-down
ul.dropdown-menu
li
a.play-all Play All
li
a.queue-all-next Queue All Next
li
a.queue-all-last Queue All Last
h3 Top Tracks on Last.fm
.clear
.tracks
table.table.table-striped
thead
tr
th.dropdown
th.play
th Track
th Artist
tbody
div
.hero-unit
h1 About
p Jukesy is a music video player and a mash-up of the Last.fm and YouTube APIs.
h3 Contact
p
| You can reach me by email at
a.ll(href= 'mailto:me@adrianbravo.net') me@adrianbravo.net
h3 Code
p
| Jukesy can be forked at
a.ll(target= '_blank', href= 'http://github.com/adrianbravo/jukesy') github
| . You'll find that most of the code is javascript.
h1 Terms of Service
h1 Privacy Policy
h1 Now Playing
- if (tracks.length)
.tracks
table.playlist.table.table-striped
thead
tr
th.dd
th.play
th Track
th Artist
tbody
- else
p There are no tracks in this playlist. Try searching for something.
h1 Playlists - #{user || 'anonymous'}
br
ul.unstyled
each playlist in playlists
li
a.playlist(href= playlist.url
class= (playlist._id ? '' : ' unsaved ') + (playlist.active ? ' active ' : '')) #{playlist.name}
| - #{playlist.tracks_count} #{_.plural(playlist.tracks_count, 'track', 'tracks')}
- if (playlist.nowPlaying)
span.label.label-success listening
- if (playlist.changed)
span.label.label-warning changed
- if (!playlist._id)
span.label.label-important new
p
- if (playlist.time)
| Created on #{moment(playlist.time.created).format('dddd, MMMM Do YYYY, h:mm:ss a')}
- if (!playlist._id || (currentUser && currentUser.username == playlist.user))
.btn-group.pull-right
button.btn.btn-large.btn-info.playlist-save
i.icon-upload-alt
| Save
button.btn.btn-large.btn-info.dropdown-toggle('data-toggle'= 'dropdown')
i.icon-caret-down
ul.dropdown-menu
li
a.playlist-save
i.icon-upload-alt
| Save
- if (playlist._id)
li
a.playlist-autosave
i.icon-refresh
- if (playlist.autosave)
| Disable Autosave
- else
| Enable Autosave
li
a.playlist-sidebar
- if (playlist.sidebar)
i.icon-star-empty
| Remove from Sidebar
- else
i.icon-star
| Add to Sidebar
li
a.playlist-delete
i.icon-trash
| Delete
- if (!playlist.nowPlaying)
.btn-group.pull-right
button.btn.btn-primary.btn-large.play-all Play All
button.btn.btn-primary.btn-large.dropdown-toggle('data-toggle'= 'dropdown')
i.icon-caret-down
ul.dropdown-menu
li
a.play-all Play All
li
a.queue-all-next Queue All Next
li
a.queue-all-last Queue All Last
- if (playlist._id)
li.divider
li
a.add-to-playlist Add to Playlist
//li.divider
//li
// a.share Share
- else if (playlist._id)
//button.btn.btn-primary.btn-large.pull-right.share
// i.icon-share
// | Share
- if (editName)
input.playlist-name-edit(maxlength= '50', name= 'playlist-name', value= playlist.name)
- else
div.playlist-name #{playlist.name}
- if (playlist.nowPlaying)
span.label.label-success listening
- if (playlist.changed)
span.label.label-warning changed
- if (!playlist._id)
span.label.label-important new
- if (playlist._id)
p Created by
a(href= '/user/' + playlist.user) #{playlist.user}
| , #{playlist.tracks_count} #{_.plural(playlist.tracks_count, 'track', 'tracks')}
.clear
- if (playlist.tracks_count)
.tracks
table.playlist.table.table-striped
thead
tr
th.dd
th.play
th Track
th Artist
tbody
- else
br
.hero-unit
h2 This playlist is empty.
.modal-header
h3 Delete #{playlist.name}?
.modal-body
p
| Are you sure you want to delete #{playlist.name}? Think of all the good times.
p
button.btn.btn-large.go-back
i.icon-arrow-left
| Go back
button.btn.btn-large.btn-danger.destroy-confirm.pull-right
i.icon-trash
| Delete it
.modal-header
h3 Add to Playlist
.modal-body
p Select a playlist
ul.unstyled
each playlist in playlists
li.playlist('data-cid'= playlist.cid) #{playlist.name}
.modal-footer
p
button.btn.btn-primary.add
i.icon-plus-sign
| Add
button.btn('data-dismiss'= 'modal') Cancel
.modal-header
a.close('data-dismiss'= 'modal') ×
h3 Sign up for jukesy
.modal-body
form
fieldset
.control-group
label.control-label(for= 'user-new-username') Username
.controls
input#user-new-username(type= 'text', name= 'username')
span.help-inline
.control-group
label.control-label(for= 'user-new-email') Email
.controls
input#user-new-email(type= 'text', name= 'email')
span.help-inline
.control-group
label.control-label(for= 'user-new-password') Password
.controls
input#user-new-password(type= 'password', name= 'password')
span.help-inline
div
a.sign-in(href= '#') Already have an account? Sign in.
.modal-footer
button.btn.btn-primary Sign up
button.btn('data-dismiss'= 'modal') Cancel
- if (user.fullname)
h1 #{user.fullname}
h3 [#{user.username}]
- else
h1 [#{user.username}]
p.bio= user.bio
p
if (user.location)
#{user.location}
if (user.website)
if (user.location)
| ·
a.ll(target= '_blank', href= user.website).website #{user.website}
- if (currentUser && currentUser.username == user.username)
div
a.btn(href= '/user/#{user.username}/edit') Edit settings
// Playlists
h2 Edit Account
form.form-horizontal
fieldset
.control-group
label.control-label(for= 'user-edit-fullname') Full Name
.controls
input#user-edit-fullname(type= 'text', name= 'fullname', value= user.fullname)
span.help-inline
.control-group
label.control-label(for= 'user-edit-bio') Bio
.controls
textarea#user-edit-bio.input-large(rows= 3, name= 'bio')
= escape(user.bio || '')
span.help-inline
.control-group
label.control-label(for= 'user-edit-location') Location
.controls
input#user-edit-location(type= 'text', name= 'location', value= user.location)
span.help-inline
.control-group
label.control-label(for= 'user-edit-website') Website
.controls
input#user-edit-website(type= 'text', name= 'website', value= user.website)
span.help-inline
.control-group
label.control-label(for= 'user-edit-email') Email
.controls
input#user-edit-email(type= 'text', name= 'email', value= user.email)
span.help-inline
p
button.btn.btn-primary Update
|
a.btn(href= '/user/#{user.username}') View Profile
.modal-header
a.close('data-dismiss'= 'modal') ×
h3 Forgot your password?
.modal-body
form
.clear
p.pull-right
// a haiku dedicated to the forgotten password
em Relax. Breathe deeply.
br
em Bathe in serene thoughts, user.
br
em Now fill out this form.
fieldset
.control-group
label.control-label(for= 'forgot-login') Username / Email
.controls
input#forgot-login(type= 'text', name= 'login')
span.help-inline
.modal-footer
button.btn.btn-primary Email me a reset token
button.btn('data-dismiss'= 'modal') Cancel
.modal-header
h3 Reset password
.modal-body
form
fieldset
.control-group
label.control-label(for= 'reset-password') Password
.controls
input#reset-password(type= 'password', name= 'password')
span.help-inline
.control-group
label.control-label(for= 'reset-password-confirm') Password Confirm
.controls
input#reset-password-confirm(type= 'password', name= 'password-confirm')
span.help-inline
.modal-footer
button.btn.btn-primary Reset password
.modal-header
a.close('data-dismiss'= 'modal') ×
h3 Login to jukesy
.modal-body
form
fieldset
.control-group
label.control-label(for= 'session-new-login') Username / Email
.controls
input#session-new-login(type= 'text', name= 'login')
span.help-inline
.control-group
label.control-label(for= 'session-new-password') Password
.controls
input#session-new-password(type= 'password', name= 'password')
span.help-inline
p
a.sign-up(href= '#') Don't have an account yet? Sign up.
p
a.forgot(href= '#') Forgot your password?
.modal-footer
button.btn.btn-primary Sign in
button.btn('data-dismiss'= 'modal') Cancel
.container
.row
.span12
.track-info
#time-read
.time-current
|
.time-duration
.row
.span12.controls
.controls-left
.control#prev
.icon-backward
.control#play-pause
.icon-play
.control#next
.icon-forward
.control#volume
.icon-volume-down
.control#volume-bar
.fill.bar
.controls-middle
.control#timer.progress.progress-success.progress-striped
.track.bar
.fill
.controls-right
.control#repeat.off
.icon-repeat
.control#shuffle.off
.icon-random
.control#radio.off
.icon-rss
.control#fullscreen
.icon-resize-full
.modal-header
a.close('data-dismiss'= 'modal') ×
h3 Keyboard shortcuts
.modal-body#keyboard-shortcuts-modal
.third
ul.unstyled
li
.key /
| search
li
.key SPACE
| pause / play
li
.key ESC
| exit fullscreen
li
.key.big F
| toggle fullscreen
li
.key.big V
| go to video
li
.key.big P
| go to now playing
.third
ul.unstyled
li
.key.big 1 - 9
| switch YouTube videos
li
.key
.icon.icon-arrow-up
| increase volume
li
.key
.icon.icon-arrow-down
| decrease volume
li
.key
.icon.icon-arrow-left
| previous song
li
.key
.icon.icon-arrow-right
| next song
li
.key.big X
| remove current song
.third
ul.unstyled
li
.key.big M
| toggle mute
li
.key.big R
| toggle repeat
li
.key.big S
| toggle shuffle
li
.key.big D
| toggle discovery
li
.key.big Q
| toggle quality
.clear
.modal-header
a.close('data-dismiss'= 'modal') ×
h3 Share
.modal-body#share
p
button.btn.share-facebook
i.icon-facebook-sign
| facebook
button.btn.share-twitter
i.icon-twitter-sign
| twitter
p You can also copy the url manually:
p
textarea#share-url #{url}
.modal-footer
button.btn('data-dismiss'= 'modal')
i.icon-arrow-left
| Go back
a.close('data-dismiss'= 'alert') ×
!= message
ul.nav.pull-right
- if (typeof currentUser == 'undefined')
li
a.sign-up(href= '#') Sign up
li
a.sign-in(href= '#').highlight Login
- else
li.dropdown
a.dropdown-toggle('data-toggle'= 'dropdown', href= '#') Account
i.icon-caret-down
ul.dropdown-menu
li
a(href= '/user/' + currentUser.username) View my profile
li
a(href= '/user/' + currentUser.username + '/edit') Edit settings
li.divider
li
a.ll(href= '/logout') Logout
td.dd
.dropdown
a.dropdown-toggle('data-toggle'= 'dropdown')
i.icon-chevron-down
ul.dropdown-menu
li
a.play-now Play Now
li
a.queue-next Queue Next
li
a.queue-last Queue Last
li.divider
li
a.add-to-playlist Add to Playlist
li
a.remove Remove Track
td.play
a.play-now
.icon-play
td.name
a(href= urlTrack(track.artist, track.name)) #{track.name}
td.artist
a(href= urlArtist(track.artist)) #{track.artist}
.pull-right.remove
i.icon-remove
a(href= urlTrack(track.get('artist'), track.get('name')))= track.get('name')
| by
a(href= urlArtist(track.get('artist')))= track.get('artist')
#search
h2 Search #{query}
#search-tracks
.clear
#search
h2 Search #{query}
#search-albums
.clear
#search
h2 Search #{query}
#search-artists
.clear
#search
h2 Search #{query}
#search-tracks
.clear
hr
#search-albums
.clear
hr
#search-artists
.clear
#search
h2 #{track} by
a(href= '/artist/#{encodeURIComponent(artist)}') #{artist}
#search-tracks
.clear
#search
h2 #{album} by
a(href= '/artist/#{encodeURIComponent(artist)}') #{artist}
#search-tracks
.clear
#search
h2 #{artist}
#search-tracks
.clear
hr
#search-albums
.clear
hr
#search-artists
.clear
#search
h2 #{artist}
#search-tracks
.clear
#search
h2 #{artist}
#search-albums
.clear
#search
h2 #{artist}
#search-artists
.clear
- if (!tracks)
h3 #{displayType}
p Found nothing
- else if (tracks.length)
- if (showMore)
a.btn.btn-large.show-more.pull-right(href= showMore) Show more »
.btn-group.pull-right
button.btn.btn-primary.btn-large.play-all Play All
button.btn.btn-primary.btn-large.dropdown-toggle('data-toggle'= 'dropdown')
i.icon-caret-down
ul.dropdown-menu
li
a.play-all Play All
li
a.queue-all-next Queue All Next
li
a.queue-all-last Queue All Last
li.divider
li
a.add-to-playlist Add to Playlist
li.divider
li
a.share Share
h3 #{displayType}
.clear
.tracks
table.table.table-striped
thead
tr
th.dropdown
th.play
th Track
th Artist
tbody
- if (loadMore)
.load-more
a.btn.btn-large('data-loading-text'= 'Loading...') Load more
- else
h3 #{displayType}
| Loading...
.spinner.pull-right
.bar1
.bar2
.bar3
.bar4
.bar5
.bar6
.bar7
.bar8
.bar9
.bar10
.bar11
.bar12
- if (!albums)
h3 #{displayType}
p Found nothing
- else if (albums.length)
- if (showMore)
a.btn.btn-large.show-more.pull-right(href= showMore) Show more »
h3 #{displayType}
- if (showMore)
.clear
.albums
ul.thumbnails
.clear
- if (loadMore)
.load-more
a.btn.btn-large('data-loading-text'= 'Loading...') Load more
- else
h3 #{displayType}
| Loading...
.spinner.pull-right
.bar1
.bar2
.bar3
.bar4
.bar5
.bar6
.bar7
.bar8
.bar9
.bar10
.bar11
.bar12
- if (!artists)
h3 #{displayType}
p Found nothing
- else if (artists.length)
- if (showMore)
a.btn.btn-large.show-more.pull-right(href= showMore) Show more »
h3 #{displayType}
- if (showMore)
.clear
.artists
ul.thumbnails
.clear
- if (loadMore)
.load-more
a.btn.btn-large('data-loading-text'= 'Loading...') Load more
- else
h3 #{displayType}
| Loading...
.spinner.pull-right
.bar1
.bar2
.bar3
.bar4
.bar5
.bar6
.bar7
.bar8
.bar9
.bar10
.bar11
.bar12
td.dd
.dropdown
a.dropdown-toggle('data-toggle'= 'dropdown')
i.icon-chevron-down
ul.dropdown-menu
li
a.play-now Play
li
a.queue-next Queue Next
li
a.queue-last Queue Last
li.divider
li
a.add-to-playlist Add to Playlist
//li
// a.add-to-favorites Add To Favorites
//li
// a.ban Ban
td.play
a.play-now
.icon-play
td.name
a(href= urlTrack(track.get('artist'), track.get('name')))= track.get('name')
td.artist
a(href= urlArtist(track.get('artist')))= track.get('artist')
a.thumbnail(href= urlAlbum(album.get('artist'), album.get('name')))
.img-wrap
img(src= album.get('image'))
.overlay.fade
.overlay-inner
.name #{album.get('name')}
.artist #{album.get('artist')}
a.thumbnail(href= urlArtist(artist.get('name')))
.img-wrap
img(src= artist.get('image'))
.overlay.fade
.overlay-inner #{artist.get('name')}