Sha256: f7a3216f5ccfbcee47e2c5705eb2d035489be91a6338e69bc8e5051d4eb9b2b5

Contents?: true

Size: 1.46 KB

Versions: 13

Compression:

Stored size: 1.46 KB

Contents

import { splitActionAttribute } from "../html/split-action-attribute";
import { handleAction } from "./handle-action";
import { debounce } from "../utils/debounce";

export const initializeActions = () => {
  const actionElements = document.querySelectorAll("[data-action]");
  actionElements.forEach((element) => initializeActionsForElement(element as HTMLElement));
};

const initializeActionsForElement = (element: HTMLElement) => {
  if (element.getAttribute("data-set-event-handler")) return;
  const actions = element.getAttribute("data-action")?.split(" ") || [];
  actions.forEach(action => {
    const { eventType, componentName, stateName, fnName, bounceTime } = splitActionAttribute(action);
    if (!eventType || !componentName || !fnName) return;

    if (eventType === "render") {
      const interval = setInterval(() => {
        if ((window as any).actionCableConnected === true) {
          handleAction(element, stateName, fnName);
          clearInterval(interval);
        }
      }, 10);
      element.setAttribute("data-render-event-handler", "true");
      return;
    }

    if (bounceTime > 0) {
      element.addEventListener(eventType, debounce((event) => 
        handleAction(event.target as HTMLElement, stateName, fnName), bounceTime)
      );
    } else {
      element.addEventListener(eventType, (event) => 
        handleAction(event.target as HTMLElement, stateName, fnName)
      );
    }
    element.setAttribute("data-set-event-handler", "true");
  });
};

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
clapton-0.0.26 lib/clapton/javascripts/src/actions/initialize-actions.ts
clapton-0.0.25 lib/clapton/javascripts/src/actions/initialize-actions.ts
clapton-0.0.24 lib/clapton/javascripts/src/actions/initialize-actions.ts
clapton-0.0.23 lib/clapton/javascripts/src/actions/initialize-actions.ts
clapton-0.0.22 lib/clapton/javascripts/src/actions/initialize-actions.ts
clapton-0.0.21 lib/clapton/javascripts/src/actions/initialize-actions.ts
clapton-0.0.20 lib/clapton/javascripts/src/actions/initialize-actions.ts
clapton-0.0.19 lib/clapton/javascripts/src/actions/initialize-actions.ts
clapton-0.0.18 lib/clapton/javascripts/src/actions/initialize-actions.ts
clapton-0.0.17 lib/clapton/javascripts/src/actions/initialize-actions.ts
clapton-0.0.16 lib/clapton/javascripts/src/actions/initialize-actions.ts
clapton-0.0.15 lib/clapton/javascripts/src/actions/initialize-actions.ts
clapton-0.0.14 lib/clapton/javascripts/src/actions/initialize-actions.ts