UNPKG

@stimulus-library/controllers

Version:

A library of useful controllers for Stimulus

64 lines (63 loc) 1.88 kB
import { BaseController, isHTMLAnchorElement, isTurboFrame } from "@stimulus-library/utilities"; export class TurboFrameRCController extends BaseController { toggle(event) { event === null || event === void 0 ? void 0 : event.preventDefault(); const frame = this._getFrame(); const frameSrc = frame.src; if (frameSrc == null || frameSrc !== this._getSrc()) { this._setSrc(); } else { this._clear(); } } setSrc(event) { event === null || event === void 0 ? void 0 : event.preventDefault(); this._setSrc(); } clear(event) { event === null || event === void 0 ? void 0 : event.preventDefault(); this._clear(); } _setSrc() { const frame = this._getFrame(); if (this.hasLoadingMessageValue) { frame.innerHTML = this.loadingMessageValue; } frame.src = this._getSrc(); } _clear() { const frame = this._getFrame(); frame.src = ""; frame.innerHTML = ""; } _getFrame() { const frame = document.getElementById(`${this.frameIdValue}`); if (frame == null) { throw new Error(`Could not find frame with ID '${this.frameIdValue}'`); } if (!isTurboFrame(frame)) { throw new Error(`Element targeted by ID '${this.frameIdValue}'`); } else { return frame; } } _getSrc() { const element = this.el; if (this.hasSrcValue) { return this.srcValue; } else if (isHTMLAnchorElement(element)) { return element.href; } else { throw new Error("No link given to drive frame to"); } } } TurboFrameRCController.values = { frameId: String, src: String, loadingMessage: String, };