@paperbits/core
Version:
Paperbits core components.
29 lines (25 loc) • 1.13 kB
text/typescript
import * as ko from "knockout";
import { HyperlinkModel } from "@paperbits/common/permalinks";
import { HyperlinkBehavior } from "@paperbits/common/behaviors/behavior.hyperlink";
import { BehaviorHandle } from "@paperbits/common/behaviors";
ko.bindingHandlers["hyperlink"] = {
update(element: HTMLElement, valueAccessor: () => HyperlinkModel): void {
const hyperlink: HyperlinkModel = valueAccessor();
let behaviorHandle: BehaviorHandle;
if (ko.isObservable(hyperlink)) {
hyperlink.subscribe(newValue => {
if (behaviorHandle && behaviorHandle.detach) {
behaviorHandle.detach();
}
behaviorHandle = HyperlinkBehavior.attach(element, newValue);
});
}
const initial = ko.unwrap(hyperlink);
behaviorHandle = HyperlinkBehavior.attach(element, initial);
if (behaviorHandle && behaviorHandle.detach) {
ko.utils.domNodeDisposal.addDisposeCallback(element, () => {
behaviorHandle.detach();
});
}
}
};