bindRulesEvents function domain

Last updated: 2026-03-04T23:21:38.433Z

Metrics

LOC: 72 Complexity: 13 Params: 0

Signature

bindRulesEvents(): : void

Architecture violations

View all

  • [warning] max-cyclomatic-complexity: 'bindRulesEvents' has cyclomatic complexity 13 (max 10)

Source Code

function bindRulesEvents(): void {
  document
    .getElementById("btn-save-rule")
    ?.addEventListener("click", async () => {
      const urlPattern = (
        document.getElementById("rule-url") as HTMLInputElement
      ).value.trim();
      const fieldSelector = (
        document.getElementById("rule-selector") as HTMLInputElement
      ).value.trim();

      if (!urlPattern || !fieldSelector) {
        showToast(t("errorFillUrlAndSelector"), "error");
        return;
      }

      const fieldTypeValue = ruleTypeSelect?.getValue().trim() ?? "";
      if (!fieldTypeValue) {
        showToast(t("errorSelectFieldType"), "error");
        return;
      }

      const isUpdating = !!currentEditingRuleId;
      const rule: FieldRule = {
        id: currentEditingRuleId || generateId(),
        urlPattern,
        fieldSelector,
        fieldName:
          (
            document.getElementById("rule-field-name") as HTMLInputElement
          ).value.trim() || undefined,
        fieldType: fieldTypeValue as FieldType,
        generator: (ruleGeneratorSelect?.getValue() ??
          "auto") as FieldRule["generator"],
        generatorParams: collectRuleParams(),
        fixedValue:
          (
            document.getElementById("rule-fixed") as HTMLInputElement
          ).value.trim() || undefined,
        priority:
          parseInt(
            (document.getElementById("rule-priority") as HTMLInputElement)
              .value,
            10,
          ) || 10,
        createdAt: isUpdating
          ? (
              (await chrome.runtime.sendMessage({
                type: "GET_RULES",
              })) as FieldRule[]
            ).find((r) => r.id === currentEditingRuleId)?.createdAt ||
            Date.now()
          : Date.now(),
        updatedAt: Date.now(),
      };

      await chrome.runtime.sendMessage({ type: "SAVE_RULE", payload: rule });
      await loadRules();

      cancelEditRule();
      showToast(isUpdating ? t("toastRuleUpdated") : t("toastRuleSaved"));
    });

  document.getElementById("btn-cancel-rule")?.addEventListener("click", () => {
    cancelEditRule();
    showToast(t("toastEditCancelled"));
  });

  ruleGeneratorSelect?.on("change", () => {
    updateRuleParamsSection();
  });
}

Dependencies (Outgoing)

graph LR bindRulesEvents["bindRulesEvents"] generateId["generateId"] collectRuleParams["collectRuleParams"] loadRules["loadRules"] cancelEditRule["cancelEditRule"] updateRuleParamsSection["updateRuleParamsSection"] bindRulesEvents -->|calls| generateId bindRulesEvents -->|calls| collectRuleParams bindRulesEvents -->|calls| loadRules bindRulesEvents -->|calls| cancelEditRule bindRulesEvents -->|calls| updateRuleParamsSection style bindRulesEvents fill:#dbeafe,stroke:#2563eb,stroke-width:2px click bindRulesEvents "3107cd11f10b1501.html" click generateId "fe0b977e1a4503ec.html" click collectRuleParams "546661d5d9be8ecf.html" click loadRules "9993895f2b3163a1.html" click cancelEditRule "fd39c6ea074f2721.html" click updateRuleParamsSection "40c364fb8f9a0ec0.html"
TargetType
generateId calls
collectRuleParams calls
loadRules calls
cancelEditRule calls
updateRuleParamsSection calls
click dynamic_call
change dynamic_call

Impact (Incoming)

graph LR bindRulesEvents["bindRulesEvents"] initRulesTab["initRulesTab"] initRulesTab -->|calls| bindRulesEvents style bindRulesEvents fill:#dbeafe,stroke:#2563eb,stroke-width:2px click bindRulesEvents "3107cd11f10b1501.html" click initRulesTab "d8b3be773c58391d.html"
SourceType
initRulesTab calls