app/assets/javascripts/hooch.js in hooch-0.14.2 vs app/assets/javascripts/hooch.js in hooch-0.14.3
- old
+ new
@@ -827,42 +827,97 @@
}
}),
FakeCheckbox: Class.extend({
init: function($fake_checkbox){
this.$fake_checkbox = $fake_checkbox
- this.$form = $($fake_checkbox.data('form-selector'))
+ this.$form = this.getForm()
this.$field = this.getField()
var fake_checkbox = this
this.$fake_checkbox.click(function(){ fake_checkbox.change() })
},
change: function(){
if(this.$fake_checkbox.hasClass('checked')){
this.$fake_checkbox.removeClass('checked')
- this.removeValue();
+ this.removeCheckedFromForm()
+ this.removeValue()
} else {
this.$fake_checkbox.addClass('checked')
- this.addValue();
+ this.addCheckedToForm()
+ this.addValue()
}
},
getField: function(){
this.field_name = this.$fake_checkbox.data('field-name')
this.value = this.$fake_checkbox.data('field-value')
- var field_selector = '[name="' + this.field_name +'"][value="' + this.value + '"]'
+ this.field_selector = '[name="' + this.field_name +'"][value="' + this.value + '"]'
var $field
- if(this.$form.find(field_selector).length > 0){
- $field = this.$form.find(field_selector)
- this.$fake_checkbox.addClass('checked')
+ if(this.$form.find(this.field_selector).length > 0){
+ $field = this.$form.find(this.field_selector)
+ this.$fake_checkbox.addClass('checked')
+ this.addCheckedToForm()
} else {
$field = $('<input type="hidden" name="' + this.field_name + '" value="' + this.value + '">')
}
return $field
},
+ getForm: function(){
+ var form_selector = this.$fake_checkbox.data('form-selector')
+ var $form = $(form_selector)
+ if($form.length == 0){
+ console.log("WARNING: hooch.FakeCheckbox could not find the form with the selector '" + form_selector + "'")
+ }
+ var toggleable_selector = this.$fake_checkbox.data('toggle-form')
+ if(toggleable_selector == true || toggleable_selector == 'true'){
+ this.$toggle_form = $form
+ } else {
+ var $toggleable = $(toggleable_selector)
+ if($toggleable.length > 0){
+ this.$toggle_form = $toggleable
+ } else {
+ this.$toggle_form = false
+ }
+ }
+ return $form
+ },
addValue: function(){
- console.log(this.$field)
this.$form.append(this.$field)
+ this.possiblyShowForm()
},
removeValue: function(){
this.$field.detach()
+ this.possiblyHideForm()
+ },
+ possiblyShowForm: function(){
+ if(this.$toggle_form && this.$toggle_form.is(':hidden')){
+ this.$toggle_form.show()
+ }
+ },
+ possiblyHideForm: function(){
+ if(this.$toggle_form && this.$toggle_form.is(':visible') && this.formNoCheckedBoxes()){
+ this.$toggle_form.hide()
+ }
+ },
+ addCheckedToForm: function(){
+ if(this.$toggle_form){
+ var form_checkbox_list = this.$form.data('checked_fake_checkboxes')
+ if(form_checkbox_list){
+ form_checkbox_list.push(this.field_selector)
+ this.$form.data('checked_fake_checkboxes',form_checkbox_list)
+ } else {
+ this.$form.data('checked_fake_checkboxes',[this.field_selector])
+ }
+ }
+ },
+ removeCheckedFromForm: function(){
+ if(this.$toggle_form){
+ var form_checkbox_list = this.$form.data('checked_fake_checkboxes')
+ var fake_checkbox = this
+ var new_list = $.grep(form_checkbox_list, function(fs){return fs != fake_checkbox.field_selector})
+ this.$form.data('checked_fake_checkboxes',new_list)
+ }
+ },
+ formNoCheckedBoxes: function(){
+ return (!this.$form.data('checked_fake_checkboxes') || this.$form.data('checked_fake_checkboxes').length == 0)
}
}),
FakeSelect: Class.extend({
init: function($fake_select){
this.select_display = $fake_select.find('[data-select-display]')