-
Notifications
You must be signed in to change notification settings - Fork 53
BridgeDev tutorials: 6. Collapsible component
Daniel Bendel edited this page Feb 8, 2016
·
1 revision
This wrapper encapsulates the Materialize collapsible control, ensuring that it behaves as a standard Aurelia component. See how the Aurelia application uses this component here.
File collapsible.js
import { bindable, customAttribute } from 'aurelia-templating';
import { inject } from 'aurelia-dependency-injection';
import { getBooleanFromAttributeValue } from '../common/attributes';
import { AttributeManager } from '../common/attributeManager';
@customAttribute('md-collapsible')
@bindable({ name: 'accordion', defaultValue: false })
@bindable({ name: 'popout', defaultValue: false })
@inject(Element)
export class MdCollapsible {
constructor(element) {
this.element = element;
this.attributeManager = new AttributeManager(this.element);
}
attached() {
this.attributeManager.addClasses('collapsible');
if (getBooleanFromAttributeValue(this.popout)) {
this.attributeManager.addClasses('popout');
}
this.refresh();
}
detached() {
this.attributeManager.removeClasses(['collapsible', 'popout']);
this.attributeManager.removeAttributes(['data-collapsible']);
}
refresh() {
let accordion = getBooleanFromAttributeValue(this.accordion);
if (accordion) {
this.attributeManager.addAttributes({ 'data-collapsible': 'accordion' });
} else {
this.attributeManager.addAttributes({ 'data-collapsible': 'expandable' });
}
$(this.element).collapsible({
accordion
});
}
accordionChanged() {
this.refresh();
}
}
* * * #### Next page: [Next actions](#/help/docs/bridge_developers_tutorials/7._next_actions)