From 5fcde8c60befaa9a8c9893c44b7417eb106bd5fc Mon Sep 17 00:00:00 2001 From: Dan Barber Date: Fri, 13 Dec 2013 13:28:07 +0000 Subject: [PATCH] Browser panes refactor. --- assets/css/common.css.sass | 1 + assets/css/library.css.sass | 21 ++++++++++++++------- assets/js/controls/library.js | 28 ++++++++++++++++++++++------ public/views/library.ejs | 2 +- public/views/library/albums.ejs | 4 ++-- public/views/library/artists.ejs | 2 +- public/views/library/songs.ejs | 2 +- 7 files changed, 42 insertions(+), 18 deletions(-) diff --git a/assets/css/common.css.sass b/assets/css/common.css.sass index e73591e..5da03b2 100644 --- a/assets/css/common.css.sass +++ b/assets/css/common.css.sass @@ -14,6 +14,7 @@ body height: 100% max-width: 320px margin: 0 auto + overflow: hidden #content height: 100% diff --git a/assets/css/library.css.sass b/assets/css/library.css.sass index a01ba9b..dd8b65b 100644 --- a/assets/css/library.css.sass +++ b/assets/css/library.css.sass @@ -1,21 +1,25 @@ #library background: white - display: none position: absolute - top: 0 - padding: 2.5em 0 0 + top: 100% height: 100% width: 100% z-index: 2 - &.show - display: block + @include transition(top 0.35s ease-in-out) header + top: 100% + z-index: 1 @extend .header + @include transition(top 0.35s ease-in-out) a.close position: absolute right: 10px top: 8px @include button + &.show + top: 0 + header + top: 0 .browser position: absolute height: 100% @@ -26,11 +30,14 @@ left: -$interface-width * 2 &[data-pane="4"] left: -$interface-width * 3 - ul, ol + ol, ul + @extend .list + div position: absolute width: $interface-width - @extend .list height: 100% + padding: 2.5em 0 0 + overflow: auto &:first-child left: 0 &:nth-child(2) diff --git a/assets/js/controls/library.js b/assets/js/controls/library.js index 9f5fb7f..ba8fbec 100644 --- a/assets/js/controls/library.js +++ b/assets/js/controls/library.js @@ -2,11 +2,11 @@ var Library = can.Control.extend({ init: function(element, options) { this.element = element; - this.browser = new can.Model({ pane: 1 }); + this.browser = new can.Model({ title: 'Library', pane: 1 }); element.html( can.view('views/library.ejs', { browser: this.browser }) ); - var rootControl = new Pane('#library .root', { show: 'root' }) + var rootControl = new Pane('#library .root', { show: 'root' }); this.panes = new can.List([rootControl]); }, @@ -26,11 +26,27 @@ var Library = can.Control.extend({ this.browser.attr('pane', this.browser.attr('pane') - 1); }, + addPane: function(data) { + var newElement = document.createElement('div'); + newElement.className = data.show; + $('.browser', this.element).append(newElement); + var newPane = new Pane(newElement, data); + this.panes.push(newPane); + this.nextPane(); + }, + 'a.close click': 'hide', + 'route': function(data) { + this.hide(); + }, + ':page route': function(data) { if (data.page == 'library') { this.show(); + if (data.show) { + this.addPane(data); + } } } @@ -38,7 +54,7 @@ var Library = can.Control.extend({ var Pane = can.Control.extend({ - init: function(element, data, pane) { + init: function(element, data) { this.element = element; this.data = data; this.renderPane[data.show].call(this, data); @@ -51,13 +67,13 @@ var Pane = can.Control.extend({ ); }, artists: function(data) { - Artist.findAll({}, renderCallback('artists')); + Artist.findAll({}, this.renderCallback('artists')); }, albums: function(data) { - Album.findAll({ artist: data.artist }, renderCallback('albums')); + Album.findAll({ artist: data.artist }, this.renderCallback('albums')); }, songs: function(data) { - Song.findAll({ artist: data.artist, album: data.album }, renderCallback('songs')); + Song.findAll({ artist: data.artist, album: data.album }, this.renderCallback('songs')); } }, diff --git a/public/views/library.ejs b/public/views/library.ejs index 9770005..031104d 100644 --- a/public/views/library.ejs +++ b/public/views/library.ejs @@ -1,6 +1,6 @@
Close -

Library

+

<%= browser.attr('title') %>

diff --git a/public/views/library/albums.ejs b/public/views/library/albums.ejs index ec995fc..550a6d4 100644 --- a/public/views/library/albums.ejs +++ b/public/views/library/albums.ejs @@ -1,11 +1,11 @@
    - <% list(albums, function(album) { %> + <% list(items, function(album) { %>
  1. <%== can.route.link(album.attr('title'), { page: 'library', show: 'songs', artist: album.attr('artist'), - album: album.attr('album') + album: album.attr('title') }) %>
  2. <% }) %> diff --git a/public/views/library/artists.ejs b/public/views/library/artists.ejs index 965a93b..d9ed604 100644 --- a/public/views/library/artists.ejs +++ b/public/views/library/artists.ejs @@ -1,5 +1,5 @@
      - <% list(artists, function(artist) { %> + <% list(items, function(artist) { %>
    1. <%== can.route.link(artist.attr('name'), { page: 'library', diff --git a/public/views/library/songs.ejs b/public/views/library/songs.ejs index 344e3bb..86642d8 100644 --- a/public/views/library/songs.ejs +++ b/public/views/library/songs.ejs @@ -1,5 +1,5 @@
        - <% list(songs, function(song) { %> + <% list(items, function(song) { %>
      1. <%= song.attr('title') %>