Browse Source

Adds mutation observers, event delegation for accordion. Fixes callback context

pull/1139/merge
jlukic 10 years ago
parent
commit
e4a3905c2b
1 changed files with 29 additions and 7 deletions
  1. 36
      src/definitions/modules/accordion.js

36
src/definitions/modules/accordion.js

@ -54,6 +54,7 @@ $.fn.accordion = function(parameters) {
element = this, element = this,
instance = $module.data(moduleNamespace), instance = $module.data(moduleNamespace),
observer,
module module
; ;
@ -61,9 +62,10 @@ $.fn.accordion = function(parameters) {
initialize: function() { initialize: function() {
module.debug('Initializing accordion with bound events', $module); module.debug('Initializing accordion with bound events', $module);
$title
.on('click' + eventNamespace, module.event.click)
$module
.on('click' + eventNamespace, selector.title, module.event.click)
; ;
module.observeChanges();
module.instantiate(); module.instantiate();
}, },
@ -84,6 +86,26 @@ $.fn.accordion = function(parameters) {
; ;
}, },
refresh: function() {
$title = $module.find(selector.title);
$content = $module.find(selector.content);
},
observeChanges: function() {
if(MutationObserver !== undefined) {
observer = new MutationObserver(function(mutations) {
module.debug('DOM tree modified, updating selector cache');
module.refresh();
});
observer.observe(element, {
childList : true,
subtree : true
});
module.debug('Setting up mutation observer', observer);
}
},
event: { event: {
click: function() { click: function() {
$.proxy(module.toggle, this)(); $.proxy(module.toggle, this)();
@ -146,8 +168,8 @@ $.fn.accordion = function(parameters) {
.addClass(className.active) .addClass(className.active)
; ;
$.proxy(module.reset.display, this)(); $.proxy(module.reset.display, this)();
$.proxy(settings.onOpen, element)();
$.proxy(settings.onChange, element)();
$.proxy(settings.onOpen, this)();
$.proxy(settings.onChange, this)();
}) })
; ;
} }
@ -180,8 +202,8 @@ $.fn.accordion = function(parameters) {
.end() .end()
.slideUp(settings.duration, settings.easing, function() { .slideUp(settings.duration, settings.easing, function() {
$.proxy(module.reset.display, this)(); $.proxy(module.reset.display, this)();
$.proxy(settings.onClose, element)();
$.proxy(settings.onChange, element)();
$.proxy(settings.onClose, this)();
$.proxy(settings.onChange, this)();
}) })
; ;
} }
@ -435,6 +457,7 @@ $.fn.accordion = function(parameters) {
}; };
$.fn.accordion.settings = { $.fn.accordion.settings = {
name : 'Accordion', name : 'Accordion',
namespace : 'accordion', namespace : 'accordion',
@ -467,7 +490,6 @@ $.fn.accordion.settings = {
content : '.content' content : '.content'
} }
}; };
// Adds easing // Adds easing

Loading…
Cancel
Save