diaspora/app/assets/javascripts/app/views/aspects_dropdown_view.js
2012-05-17 19:02:58 -07:00

60 lines
1.5 KiB
JavaScript

app.views.AspectsDropdown = app.views.Base.extend({
templateName : "aspects-dropdown",
events : {
"change .dropdown-menu input" : "setVisibility"
},
presenter : function(){
var selectedAspects = this.model.get("aspect_ids")
, parsedIds = _.map(selectedAspects, parseInt)
return {
aspects : _.map(app.currentUser.get('aspects'), function(aspect){
return _.extend({}, aspect, {checked :_.include(parsedIds, aspect.id) })
}),
public :_.include(selectedAspects, "public"),
'all-aspects' :_.include(selectedAspects, "all_aspects")
}
},
postRenderTemplate : function(){
if(this.model.get("aspect_ids")) {
this.setDropdownText()
} else {
this.setVisibility({target : this.$("input[value='public']").first()})
}
},
setVisibility : function(evt){
var input = $(evt.target).closest("input")
if(_.include(['public', 'all_aspects'], input.val())) {
this.$("input").attr("checked", false)
input.attr("checked", "checked")
} else {
this.$("input.public, input.all_aspects").attr("checked", false)
}
this.setDropdownText()
},
setDropdownText : function(){
var selected = this.$("input").serializeArray()
, text;
switch (selected.length) {
case 0:
text = "Private"
break
case 1:
text = selected[0].name
break
default:
text = ["In", selected.length, "aspects"].join(" ")
break
}
$.trim(this.$(".dropdown-toggle .text").text(text))
}
});