Add ability to toggle aspects

This commit is contained in:
Fabián Rodríguez 2012-11-21 20:52:15 -02:00
parent a3162d76dd
commit 29c48ca557
7 changed files with 73 additions and 6 deletions

View file

@ -1,3 +1,21 @@
app.collections.Aspects = Backbone.Collection.extend({ app.collections.Aspects = Backbone.Collection.extend({
model: app.models.Aspect model: app.models.Aspect,
selectedAspectsIds: function(){
return _.pluck(_.filter(this.toJSON(), function(a){
return a.selected;
}), 'id');
},
allSelected: function(){
return this.length === _.filter(this.toJSON(), function(a){ return a.selected; }).length;
},
selectAll: function(){
this.map(function(a){ a.set({ 'selected' : true })} );
},
deselectAll: function(){
this.map(function(a){ a.set({ 'selected' : false })} );
}
}) })

View file

@ -1,2 +1,5 @@
app.models.Aspect = Backbone.Model.extend({ app.models.Aspect = Backbone.Model.extend({
toggleSelected: function(){
this.set({'selected' : !this.get('selected')});
}
}); });

View file

@ -91,7 +91,7 @@ app.Router = Backbone.Router.extend({
aspects_stream : function(){ aspects_stream : function(){
var ids = app.aspects.selectedAspects(); var ids = app.aspects.selectedAspectsIds();
app.stream = new app.models.Stream([], {url: '/aspects'}); app.stream = new app.models.Stream([], {url: '/aspects'});
app.stream.fetch({data: $.param({a_ids:ids})}); app.stream.fetch({data: $.param({a_ids:ids})});

View file

@ -3,6 +3,23 @@ app.views.Aspect = app.views.Base.extend({
tagName: "li", tagName: "li",
initialize: function(){
if (this.model.get('selected')){
this.$el.addClass('active');
};
},
events: {
'click a.aspect_selector': 'toggleAspect'
},
toggleAspect: function(evt){
if (evt) { evt.preventDefault(); };
this.$el.toggleClass('active');
this.model.toggleSelected();
app.router.aspects_stream();
},
presenter : function() { presenter : function() {
return _.extend(this.defaultPresenter(), { return _.extend(this.defaultPresenter(), {
aspect : this.model aspect : this.model

View file

@ -3,7 +3,11 @@ app.views.AspectsList = app.views.Base.extend({
el: '#aspects_list', el: '#aspects_list',
postRenderTemplate : function() { events: {
'click .toggle_selector' : 'toggleAll'
},
postRenderTemplate: function() {
this.collection.each(this.appendAspect, this); this.collection.each(this.appendAspect, this);
this.$('a[rel*=facebox]').facebox(); this.$('a[rel*=facebox]').facebox();
}, },
@ -12,6 +16,30 @@ app.views.AspectsList = app.views.Base.extend({
$("#aspects_list > *:last").before(new app.views.Aspect({ $("#aspects_list > *:last").before(new app.views.Aspect({
model: aspect, attributes: {'data-aspect_id': aspect.get('id')} model: aspect, attributes: {'data-aspect_id': aspect.get('id')}
}).render().el); }).render().el);
} },
toggleAll: function(evt){
if (evt) { evt.preventDefault(); };
if (this.collection.allSelected()) {
this.collection.deselectAll();
this.$('li:not(:last)').removeClass("active");
} else {
this.collection.selectAll();
this.$('li:not(:last)').addClass("active");
}
this.toggleSelector();
app.router.aspects_stream();
},
toggleSelector: function(){
var selector = this.$('a.toggle_selector');
if (this.collection.allSelected()) {
selector.text(Diaspora.I18n.t('aspect_navigation.deselect_all'));
} else {
selector.text(Diaspora.I18n.t('aspect_navigation.select_all'));
}
}
}) })

View file

@ -1,6 +1,6 @@
<a class="toggle_selector" href="#"> <a class="toggle_selector" href="#">
Select All o no {{ t "aspect_navigation.select_all" }}
</a> </a>
<li> <li>
<a class="new_aspect" href="/aspects/new" rel="facebox">t('.add_an_aspect')</a> <a class="new_aspect" href="/aspects/new" rel="facebox">{{ t "aspect_navigation.add_an_aspect" }}</a>
</li> </li>

View file

@ -64,6 +64,7 @@ en:
select_all: "Select all" select_all: "Select all"
deselect_all: "Deselect all" deselect_all: "Deselect all"
no_aspects: "No aspects selected" no_aspects: "No aspects selected"
add_an_aspect: "+ Add an aspect"
getting_started: getting_started:
hey: "Hey, <%= name %>!" hey: "Hey, <%= name %>!"
no_tags: "Hey, you haven't followed any tags! Continue anyway?" no_tags: "Hey, you haven't followed any tags! Continue anyway?"