diaspora/public/javascripts/app/views/aspects_dropdown_view.js
2012-03-27 14:52:51 -07:00

68 lines
1.6 KiB
JavaScript

app.views.AspectsDropdown = app.views.Base.extend({
templateName : "aspects-dropdown",
events : {
"click .dropdown-menu a" : "setVisibility"
},
postRenderTemplate : function(){
this.setVisibility({target : this.$("a[data-visibility='all-aspects']").first()})
},
setVisibility : function(evt){
var self = this
, link = $(evt.target).closest("a")
, visibilityCallbacks = {
'public' : setPublic,
'all-aspects' : setPrivate,
'custom' : setCustom
}
visibilityCallbacks[link.data("visibility")]()
this.setAspectIds()
function setPublic (){
deselectAll()
selectAspect()
self.setDropdownText(link.text())
}
function setPrivate (){
deselectAll()
selectAspect()
self.setDropdownText(link.text())
}
function setCustom (){
deselectOverrides()
link.parents("li").toggleClass("selected")
self.setDropdownText(link.text())
evt.stopImmediatePropagation();
}
function selectAspect() {
link.parents("li").addClass("selected")
}
function deselectOverrides() {
self.$("a.public, a.all-aspects").parent().removeClass("selected")
}
function deselectAll() {
self.$("li.selected").removeClass("selected")
}
},
setDropdownText : function(text){
$.trim(this.$(".dropdown-toggle .text").text(text))
},
setAspectIds : function(){
var selectedAspects = this.$("li.selected a")
var aspectIds = _.map(selectedAspects, function(aspect){
return $(aspect).data("aspect-id")}
)
this.$("input.aspect_ids").val(aspectIds)
}
})