summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Davis <thomasalwyndavis@gmail.com>2012-11-13 14:49:14 -0800
committerThomas Davis <thomasalwyndavis@gmail.com>2012-11-13 14:49:14 -0800
commit3c2636d722c3ba4e1e547f729b87ae8bad38e984 (patch)
treeab1d47ba47964dac6f0436607be418609a218501
parent65e371cf0d17e5d5222e76a9f3e9dda7bcf9eb34 (diff)
parente3697f1cbd389611d53538a3bdc6da0ea9fac77f (diff)
downloadbackbonetutorials-3c2636d722c3ba4e1e547f729b87ae8bad38e984.zip
backbonetutorials-3c2636d722c3ba4e1e547f729b87ae8bad38e984.tar.gz
backbonetutorials-3c2636d722c3ba4e1e547f729b87ae8bad38e984.tar.bz2
Merge pull request #62 from headwinds/gh-pages
Animating the podiums plus odd duplicate rendering
-rw-r--r--examples/modular-backbone/css/style.css45
-rw-r--r--examples/modular-backbone/js/router.js16
-rw-r--r--examples/modular-backbone/js/views/contributors/ContributorsListView.js175
-rw-r--r--examples/modular-backbone/js/views/contributors/ContributorsView.js12
-rw-r--r--examples/modular-backbone/templates/contributors/contributorsListTemplate.html48
-rw-r--r--examples/modular-backbone/templates/contributors/contributorsTemplate.html6
6 files changed, 261 insertions, 41 deletions
diff --git a/examples/modular-backbone/css/style.css b/examples/modular-backbone/css/style.css
index 589fe37..9af288d 100644
--- a/examples/modular-backbone/css/style.css
+++ b/examples/modular-backbone/css/style.css
@@ -52,7 +52,7 @@ h1{
}
#page {
-
+ width: 960px;
}
#page .main {
@@ -138,6 +138,36 @@ h1{
}
+#page #contributors-list .podium {
+ display: block;
+ position: relative;
+ float: left;
+ height: 100%;
+ width: 320px;
+}
+
+#page #contributors-list .podium .top {
+ display: block;
+ position: relative;
+ float: left;
+}
+
+#page #contributors-list .podium .base {
+ display: block;
+ position: relative;
+ float: left;
+ background-color: rgba(214, 214, 214, 0.38);
+ width: 100%;
+}
+
+#page #contributors-list .podium .base p {
+ text-align: left;
+ color: #666;
+ font-weight: normal;
+ font-size: 12px;
+ margin-left: 10px;
+}
+
#page #contributors-list ul.contributors {
list-style: none;
margin: 0px;
@@ -161,7 +191,6 @@ h1{
padding: 0px;
top: 0px;
left: 0px;
- border: 1px solid #CCC;
}
#page #contributors-list ul.contributors li div.contributor ul {
@@ -195,16 +224,15 @@ h1{
left: 0px;
width: 100%;
height: 14px;
- background-color: #CCC;
text-align: center;
font-size: 10px;
- font-weight: bold;
- color:#999;
+ font-weight: normal;
+ color:#333;
line-height: 14px !important;
}
#page #contributors-list ul.contributors li div.contributor ul li.username p a {
- color:#999;
+ color:#333;
text-decoration: none;
}
@@ -249,12 +277,11 @@ h1{
width:100%;
height: 15%;
top: 85%;
- background-color: #333;
text-align: center;
line-height: 14px !important;
font-size: 10px;
- font-weight: bold;
- color:#666;
+ font-weight: normal;
+ color:#333;
margin:0px;
padding:0px;
}
diff --git a/examples/modular-backbone/js/router.js b/examples/modular-backbone/js/router.js
index 9239cb2..3c3973f 100644
--- a/examples/modular-backbone/js/router.js
+++ b/examples/modular-backbone/js/router.js
@@ -8,6 +8,9 @@ define([
'views/contributors/ContributorsView',
'views/footer/FooterView'
], function($, _, Backbone, HomeView, ProjectsView, ContributorsView, FooterView) {
+
+ var contributorsView;
+
var AppRouter = Backbone.Router.extend({
routes: {
// Define some URL routes
@@ -18,7 +21,9 @@ define([
'*actions': 'defaultAction'
}
});
+
var initialize = function(){
+
var app_router = new AppRouter;
app_router.on('route:showProjects', function(){
@@ -31,12 +36,15 @@ define([
app_router.on('route:showContributors', function () {
+ // there is a problem here -- when it draws the first everything is fine
+ // but when it returns to this view, it adds the items to the list again
+ // even though the collection has the same number of models
+ // why won't it empty the divs?! I can do it in the console...
+ if ( String(contributorsView) !== "undefined" ) contributorsView.clearListView();
+
// Like above, call render but know that this view has nested sub views which
// handle loading and displaying data from the GitHub API
- var contributorsView = new ContributorsView();
- //contributorsView.initialize();
- //contributorsView.render();
-
+ contributorsView = new ContributorsView();
});
app_router.on('route:defaultAction', function (actions) {
diff --git a/examples/modular-backbone/js/views/contributors/ContributorsListView.js b/examples/modular-backbone/js/views/contributors/ContributorsListView.js
index 629e96f..2bb4ec4 100644
--- a/examples/modular-backbone/js/views/contributors/ContributorsListView.js
+++ b/examples/modular-backbone/js/views/contributors/ContributorsListView.js
@@ -7,29 +7,104 @@ define([
], function($, _, Backbone, ContributorsCollection, contributorListTemplate){
var ContributorsListView = Backbone.View.extend({
+
+ goldContributors : [],
+ silverContributors : [],
+ bronzeContributors : [],
+
el : $("#contributors-list"),
tagName:"ul",
- render : function() {
+
+ initialize : function() {
+
+ var that = this;
+ that.bind("reset", that.clearView);
+ },
+
+ clearListView : function(){
+ console.log("clearing sub sub view");
+
+ $("#gold-podium").empty();
+ $("#silver-podium").empty();
+ $("#bronze-podium").empty();
+
+ },
+
+ render : function() {
+
+ // when it returns to this view, why does it redraw without clearing the lists?!
+ // something to do with how it's animating I think...not sure
var that = this;
+
+ that.clearListView();
+
that.awardMedals(this.collection.models);
+ // hide the container list while adding contributors
+ $('#contributors-list').hide();
+
+ // there are 3 podiums for each group
+ var podium;
+
+ var goldPodium = {
+ baseHeight: '80px',
+ baseWidth: '120px',
+ achievement: 'Over 50 Contributions'
+ };
+
+ var silverPodium = {
+ baseHeight: '60px',
+ baseWidth: '160px',
+ achievement: '5 - 50 Contributions'
+ }
+
+ var bronzePodium = {
+ baseHeight: '40px',
+ baseWidth: '680px',
+ achievement: '1 - 5 Contributions'
+ }
+
+
var data = {
- contributors: this.collection.models,
- _: _
+ contributors: that.goldContributors,
+ _: _,
+ podium : goldPodium
};
+ // render gold list
+ data.contributors = that.goldContributors;
+ data.podium = goldPodium;
var compiledTemplate = _.template( contributorListTemplate, data );
- $("#contributors-list").html( compiledTemplate );
+ $("#gold-podium").html( compiledTemplate );
+ // render silver list
+ data.contributors = that.silverContributors;
+ data.podium = silverPodium;
+ var compiledTemplate = _.template( contributorListTemplate, data );
+ $("#silver-podium").html( compiledTemplate );
+
+ // render bronze list
+ data.contributors = that.bronzeContributors;
+ data.podium = bronzePodium;
+ var compiledTemplate = _.template( contributorListTemplate, data );
+ $("#bronze-podium").html( compiledTemplate );
+
+ that.animate();
+
return this;
},
awardMedals : function(aModels) {
+
+ var that = this;
+
var goldMedalHex = '#CFB52B';
var silverMedalHex = '#E6E8FA';
var bronzeMedalHex = '#A67D3D';
var githubPath;
+ var contributors;
+ var count = 0;
_.each(aModels, function(contributor) {
@@ -39,13 +114,16 @@ define([
if ( contributions >= 50 ) {
medalHex = goldMedalHex;
- picWidth = '160px';
+ picWidth = '120px';
+ contributors = that.goldContributors;
} else if ( contributions < 50 && contributions >= 5) {
medalHex = silverMedalHex;
- picWidth = '120px';
+ picWidth = '100px';
+ contributors = that.silverContributors;
} else {
medalHex = bronzeMedalHex;
picWidth = '80px';
+ contributors = that.bronzeContributors;
}
githubPath = "https://github.com/" + contributor.get('login');
@@ -53,8 +131,93 @@ define([
contributor.set( 'medalHex', medalHex);
contributor.set( 'picWidth', picWidth);
contributor.set( 'githubPath', githubPath);
+ contributor.set( 'name', 'contributor' + count );
+ contributors.push(contributor);
+
+ count++;
+
+ });
+ },
+ animate : function() {
+
+ var that = this;
+
+ console.log("animating...");
+
+ $("#gold-podium").hide();
+ $("#silver-podium").hide();
+ $("#bronze-podium").hide();
+
+
+ // hide the container list while adding contributors
+ $('#contributors-list').show();
+
+ // animate in bronze
+ $("#bronze-podium").find(".base").hide();
+ $("#bronze-podium").find(".base").slideDown('slow').delay(0);
+
+ _.each(that.bronzeContributors, function(contributor) {
+ var hideId = '#' + contributor.get('name');
+
+ $( hideId ).hide();
+
+ });
+
+ var bronzeDelayCount = 1000;
+ var bronzeDelayInc = 200;
+ _.each(that.bronzeContributors, function(contributor) {
+ var animateId = '#' + contributor.get('name');
+
+ $( animateId ).delay(bronzeDelayCount).slideDown('slow');
+ bronzeDelayCount += bronzeDelayInc;
+ });
+
+
+ console.log(bronzeDelayCount);
+
+ // animate in silver
+ $("#silver-podium").find(".base").hide();
+ $("#silver-podium").find(".base").slideDown('slow').delay(bronzeDelayCount);
+ _.each(that.silverContributors, function(contributor) {
+ var hideId = '#' + contributor.get('name');
+
+ $( hideId ).hide();
+
});
+
+ var silverDelayCount = bronzeDelayCount;
+ var silverDelayInc = 400;
+ _.each(that.silverContributors, function(contributor) {
+ var animateId = '#' + contributor.get('name');
+
+ $( animateId ).delay(silverDelayCount).slideDown('slow');
+ silverDelayCount += silverDelayInc;
+ });
+
+ // animate in gold
+ $("#gold-podium").find(".base").hide();
+ $("#gold-podium").find(".base").slideDown('slow').delay(silverDelayCount);
+ _.each(that.goldContributors, function(contributor) {
+ var hideId = '#' + contributor.get('name');
+
+ $( hideId ).hide();
+
+ });
+
+ var goldDelayCount = silverDelayCount;
+ var goldDelayInc = 600;
+ _.each(that.goldContributors, function(contributor) {
+ var animateId = '#' + contributor.get('name');
+
+ $( animateId ).delay(goldDelayCount).slideDown('slow');
+ goldDelayCount += goldDelayInc;
+ });
+
+ $("#bronze-podium").show();
+ $("#silver-podium").show();
+ $("#gold-podium").show();
+
}
});
diff --git a/examples/modular-backbone/js/views/contributors/ContributorsView.js b/examples/modular-backbone/js/views/contributors/ContributorsView.js
index d5dc83c..e05e5a5 100644
--- a/examples/modular-backbone/js/views/contributors/ContributorsView.js
+++ b/examples/modular-backbone/js/views/contributors/ContributorsView.js
@@ -7,6 +7,8 @@ define([
'text!templates/contributors/contributorsTemplate.html'
], function($, _, Backbone, ContributorsCollection, ContributorsListView, contributorsTemplate){
+ var contributorsListView;
+
var ContributorsView = Backbone.View.extend({
el: $("#page"),
@@ -21,7 +23,7 @@ define([
this.collection = new ContributorsCollection([]);
this.collection.fetch({ success : onDataHandler, dataType: "jsonp" });
-
+
},
render: function(){
@@ -39,7 +41,7 @@ define([
this.$el.html( compiledTemplate );
// sub view
- var contributorsListView = new ContributorsListView({ collection: this.collection});
+ contributorsListView = new ContributorsListView({ collection: this.collection});
contributorsListView.render();
},
@@ -54,9 +56,15 @@ define([
});
return total;
+ },
+
+ clearListView: function() {
+ console.log("clearing sub view");
+ contributorsListView.clearListView();
}
+
});
return ContributorsView;
});
diff --git a/examples/modular-backbone/templates/contributors/contributorsListTemplate.html b/examples/modular-backbone/templates/contributors/contributorsListTemplate.html
index 5e52fbe..ae0166c 100644
--- a/examples/modular-backbone/templates/contributors/contributorsListTemplate.html
+++ b/examples/modular-backbone/templates/contributors/contributorsListTemplate.html
@@ -1,20 +1,30 @@
-<ul class="contributors">
- <% _.each(contributors, function(contributor){ %>
- <li style="width:<%= contributor.get('picWidth')%>; height: <%= contributor.get('picWidth')%>">
- <div class="contributor" style="width:<%= contributor.get('picWidth')%>; height: <%= contributor.get('picWidth')%>">
- <ul>
- <li class="pic" style="width:<%= contributor.get('picWidth')%>; height: <%= contributor.get('picWidth')%>">
- <p><a href="<%= contributor.get('githubPath') %>"><img width="<%= contributor.get("picWidth") %>" src="<%= contributor.get('avatar_url') %>&s=<%= contributor.get("picWidth") %>"></a></p>
- </li>
- <li class="username" style="width:<%= contributor.get('picWidth')%>;">
- <p><a href="<%= contributor.get('githubPath') %>"><%= contributor.get("login") %></a></p>
- </li>
- <li class="contributions" style="width:<%= contributor.get('picWidth')%>; height: <%= contributor.get('picWidth')%>">
- <p style="background-color:<%= contributor.get("medalHex") %>"><%= contributor.get("contributions") %></p>
- </li>
- </ul>
- </div>
- </li>
- <% }); %>
-</ul>
+<div class="base" style="height:<%= podium.baseHeight %>">
+ <p><%= podium.achievement %></p>
+</div>
+<div class="top">
+ <ul class="contributors">
+ <% _.each(contributors, function(contributor){ %>
+ <li style="width:<%= contributor.get('picWidth')%>; height: <%= contributor.get('picWidth')%>">
+ <div class="contributor" id="<%= contributor.get('name')%>" style="width:<%= contributor.get('picWidth')%>; height: <%= contributor.get('picWidth')%>">
+ <ul>
+ <li class="pic" style="background-color: <%= contributor.get('medalHex') %>; width:<%= contributor.get('picWidth')%>; height: <%= contributor.get('picWidth')%>">
+ <p>
+ <a href="<%= contributor.get('githubPath') %>" style="width:<%= contributor.get('picWidth')%>; height: <%= contributor.get('picWidth')%>; background: url(<%= contributor.get('avatar_url') %>) no-repeat center; background-size: <%= String( Number(contributor.get('picWidth').split("px")[0] ) - 40) + 'px' %> <%= String( Number(contributor.get('picWidth').split("px")[0] ) - 40) + 'px' %>">
+ </a>
+ </p>
+ </li>
+ <li class="username" style="width:<%= contributor.get('picWidth')%>;">
+ <p><a href="<%= contributor.get('githubPath') %>"><%= contributor.get("login") %></a></p>
+ </li>
+ <li class="contributions" style="width:<%= contributor.get('picWidth')%>; height: <%= contributor.get('picWidth')%>">
+ <p style="background-color:<%= contributor.get("medalHex") %>"><%= contributor.get("contributions") %></p>
+ </li>
+ </ul>
+ </div>
+ </li>
+ <% }); %>
+ </ul>
+</div>
+
+
diff --git a/examples/modular-backbone/templates/contributors/contributorsTemplate.html b/examples/modular-backbone/templates/contributors/contributorsTemplate.html
index 08643f2..10e1652 100644
--- a/examples/modular-backbone/templates/contributors/contributorsTemplate.html
+++ b/examples/modular-backbone/templates/contributors/contributorsTemplate.html
@@ -6,5 +6,9 @@
<tr><td><%= total_contributions %></td><td><%= total_contributors %></td></tr>
</tbody>
</table>
-<div id="contributors-list"></div>
+<div id="contributors-list">
+ <div id="bronze-podium" class="podium" style="width:640px"></div>
+ <div id="gold-podium" class="podium" style="width:120px"></div>
+ <div id="silver-podium" class="podium" style="width:200px"></div>
+</div>