UNPKG

@paperbits/core

Version:
33 lines (29 loc) 1.22 kB
import * as ko from "knockout"; import { AlignBehavior, AlignBehaviorOptions } from "@paperbits/common/behaviors/behavior.align"; ko.bindingHandlers["alignment"] = { init: (arrowElement: HTMLElement, valueAccessor) => { const config = ko.unwrap(valueAccessor()); const alignment = arrowElement.getAttribute("alignment"); // Attach the behavior for click handling const behaviorOptions: AlignBehaviorOptions = { onAlign: () => { if (config.onChange) { config.onChange(alignment); } } }; const behaviorHandle = AlignBehavior.attach(arrowElement, behaviorOptions); // Apply CSS binding for active state ko.applyBindingsToNode(arrowElement, { css: { active: ko.pureComputed(() => config.position && config.position() === alignment) } }, null); // Dispose behavior on element disposal ko.utils.domNodeDisposal.addDisposeCallback(arrowElement, () => { if (behaviorHandle && behaviorHandle.detach) { behaviorHandle.detach(); } }); } };