[Calf] Adds Songs page.
authorSalvatore Iovene <salvatore.iovene@intel.com>
Tue, 2 Oct 2012 08:17:55 +0000 (11:17 +0300)
committerSalvatore Iovene <salvatore.iovene@intel.com>
Tue, 2 Oct 2012 08:17:55 +0000 (11:17 +0300)
example/index.html
example/javascripts/app/controllers/songs.js [new file with mode: 0644]
example/javascripts/app/models/song.js [new file with mode: 0644]
example/javascripts/app/router.js
example/javascripts/app/store.js
example/javascripts/app/views/song.js [new file with mode: 0644]
example/javascripts/app/views/songs.js [new file with mode: 0644]

index cf789a8..2f96731 100644 (file)
@@ -36,7 +36,7 @@
           <ul class="nav">
             <li><a {{action showArtists href=true}}>Artists</a></li>
             <li><a {{action showAlbums href=true}}>Albums</a></li>
-            <li><a href="#">Songs</a></li>
+            <li><a {{action showSongs href=true}}>Songs</a></li>
           </ul>
         </div>
       </div>
         <strong>{{album.name}}</strong> ({{album.year}})
     </script>
 
+    <script type="text/x-handlebars" data-template-name="songs">
+      {{#each song in controller.arrangedContent}}
+        <li>{{view Calf.SongView contentBinding="song"}}</li>
+      {{/each}}
+    </script>
+
+    <script type="text/x-handlebars" data-template-name="song">
+        <strong>{{song.title}}</strong> ({{song.duration}})
+    </script>
+
     <!-- The glorious cowhide framework. -->
     <script src="../dist/cowhide.js"></script>
 
 
     <script src="javascripts/app/models/artist.js"></script>
     <script src="javascripts/app/models/album.js"></script>
+    <script src="javascripts/app/models/song.js"></script>
 
     <script src="javascripts/app/views/application.js"></script>
     <script src="javascripts/app/views/artists.js"></script>
     <script src="javascripts/app/views/artist.js"></script>
     <script src="javascripts/app/views/albums.js"></script>
     <script src="javascripts/app/views/album.js"></script>
+    <script src="javascripts/app/views/songs.js"></script>
+    <script src="javascripts/app/views/song.js"></script>
 
     <script src="javascripts/app/controllers/application.js"></script>
     <script src="javascripts/app/controllers/artists.js"></script>
     <script src="javascripts/app/controllers/albums.js"></script>
+    <script src="javascripts/app/controllers/songs.js"></script>
 
     <!-- This file contains other code needed by the example app. -->
     <script src="javascripts/example.js"></script>
diff --git a/example/javascripts/app/controllers/songs.js b/example/javascripts/app/controllers/songs.js
new file mode 100644 (file)
index 0000000..baaf838
--- /dev/null
@@ -0,0 +1,20 @@
+(function(app, Ember, _) {
+    'use strict';
+
+    var SongsController = Ember.ArrayController.extend({
+        content: [],
+        sortProperties: ['title'],
+
+        init: function() {
+            var self = this;
+            var data = [];
+
+            _.each(app.Store.getSongs(), function(song) {
+                self.pushObject(song);
+            });
+        }
+    });
+
+    app.SongsController = SongsController;
+    app.songsController = SongsController.create();
+})(window.Calf, window.Ember, window._);
\ No newline at end of file
diff --git a/example/javascripts/app/models/song.js b/example/javascripts/app/models/song.js
new file mode 100644 (file)
index 0000000..269877a
--- /dev/null
@@ -0,0 +1,11 @@
+(function(app, Ember) {
+    'use strict';
+
+    var Song = Ember.Object.extend({
+        id: null,
+        title: null,
+        duration: null
+    });
+
+    app.Song = Song;
+})(window.Calf, window.Ember);
index fb4c847..d8b9958 100644 (file)
@@ -7,6 +7,7 @@
         root: Ember.Route.extend({
             showArtists: Ember.Route.transitionTo('artists'),
             showAlbums: Ember.Route.transitionTo('albums'),
+            showSongs: Ember.Route.transitionTo('songs'),
 
             index: Ember.Route.extend({
                 route: '/',
                     var controller = router.get('applicationController');
                     controller.connectOutlet('albums');
                 }
+            }),
+
+            songs: Ember.Route.extend({
+                route: '/songs',
+                connectOutlets: function(router) {
+                    var controller = router.get('applicationController');
+                    controller.connectOutlet('songs');
+                }
             })
         })
     });
index 0010f95..e93a599 100644 (file)
              "albums": [
                 {"id": 0,
                  "name": "11:11",
-                 "year": 2001
+                 "year": 2001,
+                 "songs": [
+                    {"id": 0,
+                     "title": "Love Affair",
+                     "duration": "2:22"
+                    },
+                    {"id": 1,
+                     "title": "Rejazz",
+                     "duration": "3:37"
+                    },
+                    {"id": 2,
+                     "title": "Back of a Truck",
+                     "duration": "5:52"
+                    }
+                 ]
                 },
                 {"id": 1,
                  "name": "Songs",
             });
 
             return albums;
+        },
+
+        getSongs: function(artist, album) {
+            var songs = [];
+
+            _.each(this.data, function(artist_data) {
+                if (artist_data.albums &&
+                    (artist === undefined || artist_data.id === artist.geT('id'))) {
+                    _.each(artist_data.albums, function(album_data) {
+                        if (album_data.songs &&
+                            (album === undefined || album_data.id === album.get('id'))) {
+                            _.each(album_data.songs, function(song_data) {
+                                songs.push(app.Song.create(song_data));
+                            });
+                        }
+                    });
+                }
+            });
+
+            return songs;
         }
     };
 
diff --git a/example/javascripts/app/views/song.js b/example/javascripts/app/views/song.js
new file mode 100644 (file)
index 0000000..8d91505
--- /dev/null
@@ -0,0 +1,11 @@
+(function(app, Ember) {
+    'use strict';
+
+    var SongView = Ember.View.extend({
+        templateName: 'song',
+        tagName: 'span',
+        classNames: ['song']
+    });
+
+    app.SongView = SongView;
+})(window.Calf, window.Ember);
\ No newline at end of file
diff --git a/example/javascripts/app/views/songs.js b/example/javascripts/app/views/songs.js
new file mode 100644 (file)
index 0000000..18df3c9
--- /dev/null
@@ -0,0 +1,11 @@
+(function(app, Ember) {
+    'use strict';
+
+    var SongsView = Ember.View.extend({
+        templateName: 'songs',
+        tagName: 'ul',
+        classNames: ['item-list', 'striped']
+    });
+
+    app.SongsView = SongsView;
+})(window.Calf, window.Ember);
\ No newline at end of file