aurelia-materialize-bridge
Version:
Aurelia interface to http://materializecss.com/
64 lines (51 loc) • 1.67 kB
text/typescript
import * as au from "../aurelia";
.customAttribute("md-collapsible")
.autoinject
export class MdCollapsible {
constructor(private element: Element) {
this.attributeManager = new au.AttributeManager(this.element);
}
attributeManager: au.AttributeManager;
.ato.bindable.booleanMd
accordion: boolean;
accordionChanged() {
this.attached();
}
.ato.bindable.booleanMd({defaultBindingMode: au.bindingMode.oneTime})
popout: boolean;
.ato.bindable.numberMd({defaultBindingMode: au.bindingMode.oneTime})
inDuration: number; // Transition in duration
.ato.bindable.numberMd({defaultBindingMode: au.bindingMode.oneTime})
outDuration: number; // Transition out duration
instance: M.Collapsible;
bind() {
//
}
attached() {
this.attributeManager.addClasses("collapsible");
if (this.popout) {
this.attributeManager.addClasses("popout");
}
let options: Partial<M.CollapsibleOptions> = {
accordion: this.accordion,
inDuration: this.inDuration,
outDuration: this.outDuration,
onOpenStart: el => au.fireMaterializeEvent(this.element, "open-start", { el }),
onOpenEnd: el => au.fireMaterializeEvent(this.element, "open-end", { el }),
onCloseStart: el => au.fireMaterializeEvent(this.element, "close-start", { el }),
onCloseEnd: el => au.fireMaterializeEvent(this.element, "close-end", { el })
};
au.cleanOptions(options);
this.instance = new M.Collapsible(this.element, options);
}
detached() {
this.attributeManager.removeClasses(["collapsible", "popout"]);
this.instance.destroy();
}
open(index = 0) {
this.instance.open(index);
}
close(index = 0) {
this.instance.close(index);
}
}