aurelia-materialize-bridge
Version:
Aurelia interface to http://materializecss.com/
89 lines (70 loc) • 2.32 kB
text/typescript
import * as au from "../aurelia";
.customElement("md-dropdown")
.autoinject
export class MdDropdownElement {
constructor(private element: Element) {
this.controlId = `md-dropdown-${MdDropdownElement.id++}`;
}
static id = 0;
controlId: string;
.ato.bindable.stringMd({ defaultBindingMode: au.bindingMode.oneTime })
alignment: "left" | "right";
.ato.bindable.booleanMd({ defaultBindingMode: au.bindingMode.oneTime })
autoTrigger: boolean;
.ato.bindable.booleanMd({ defaultBindingMode: au.bindingMode.oneTime })
constrainWidth: boolean;
.bindable({ defaultBindingMode: au.bindingMode.oneTime })
container: Element = null;
.ato.bindable.booleanMd({ defaultBindingMode: au.bindingMode.oneTime })
coverTrigger: boolean;
.ato.bindable.booleanMd({ defaultBindingMode: au.bindingMode.oneTime })
closeOnClick: boolean;
.ato.bindable.booleanMd({ defaultBindingMode: au.bindingMode.oneTime })
hover: boolean;
.ato.bindable.stringMd({ defaultBindingMode: au.bindingMode.oneTime })
title: string;
.ato.bindable.numberMd({ defaultBindingMode: au.bindingMode.oneTime })
inDuration: number;
.ato.bindable.numberMd({ defaultBindingMode: au.bindingMode.oneTime })
outDuration: number;
instance: M.Dropdown;
attached() {
let options: Partial<M.DropdownOptions> = {
alignment: this.alignment,
autoTrigger: this.autoTrigger,
constrainWidth: this.constrainWidth,
container: this.container,
coverTrigger: this.coverTrigger,
closeOnClick: this.closeOnClick,
hover: this.hover,
inDuration: this.inDuration,
outDuration: this.outDuration,
onOpenStart: () => au.fireMaterializeEvent(this.element, "open-start"),
onOpenEnd: () => au.fireMaterializeEvent(this.element, "open-end"),
onCloseStart: () => au.fireMaterializeEvent(this.element, "close-start"),
onCloseEnd: () => au.fireMaterializeEvent(this.element, "close-end")
};
au.cleanOptions(options);
this.instance = new M.Dropdown(this.element, options);
}
detached() {
if (this.instance) {
this.instance.destroy();
}
}
open() {
if (this.instance) {
this.instance.open();
}
}
close() {
if (this.instance) {
this.instance.close();
}
}
recalculateDimensions() {
if (this.instance) {
this.instance.recalculateDimensions();
}
}
}