attachments.js
campaigns.js
gmail-accounts.js
index.js
login.js
logs.js
phones.js
recipients.js
saved-templates.js
send-test.js
settings.js
subjects.js
suppression.js
templates.js
---
static/js/pages/campaigns.js:16:    phone_selection: "round_robin", max_per_account: 200,
static/js/pages/campaigns.js:25:    "Company phone", "Unsubscribe", "Confirm & start",
static/js/pages/campaigns.js:28:                      "variables", "accounts", "rotation", "limits", "phone",
static/js/pages/campaigns.js:290:          template_sequence_mode: c.template_sequence_mode, phone_selection: c.phone_selection,
static/js/pages/campaigns.js:414:      b.innerHTML = H("Step 10 — Company phone") + hint("Which active phone number appears as %CompanyPhone%.") +
static/js/pages/campaigns.js:415:        (OPT.phones.length ? pickList("phones", C.phone_selection === "fixed" ? (C.variable_config.phone_id ?? null) : null, p => ({ v: p.id, main: p.phone, sub: p.label || "" }), "phone_fixed", true)
static/js/pages/campaigns.js:416:          : `<div class="notice warn"><span class="n-ico">⚠</span><div>No active phone numbers. %CompanyPhone% will be blank unless numbers are added on the Company Phones page.</div></div>`) +
static/js/pages/campaigns.js:420:             <label class="chk"><input type="radio" name="phSel" value="${m}" ${C.phone_selection === m ? "checked" : ""}>
static/js/pages/campaigns.js:454:            <dt>Phone</dt><dd>${esc(C.phone_selection)}</dd>
static/js/pages/campaigns.js:502:      $$('input[name="phSel"]').forEach(r => r.onchange = () => { C.phone_selection = r.value; renderStep(); });
static/js/pages/campaigns.js:503:      bindPick("phone_fixed", true);
static/js/pages/campaigns.js:504:      $$('#pk_phone_fixed input').forEach(i => i.onchange = () => { C.variable_config.phone_id = +i.value; });
static/js/pages/campaigns.js:598:             phone_selection: C.phone_selection, unsubscribe_enabled: C.unsubscribe_enabled };
static/js/pages/campaigns.js:620:      phone_selection: C.phone_selection, max_per_account: C.max_per_account,
static/js/pages/logs.js:44:                        "templates.upload", "attachments.upload", "phones.import",
static/js/pages/phones.js:6:    const d = await GET(`/phones/list?active_only=${$("#activeOnly").checked}&search=${encodeURIComponent($("#search").value)}&page=${state.page}&page_size=${state.pageSize}`);
static/js/pages/phones.js:7:    state.total = d.total; state.data = d.phones || [];
static/js/pages/phones.js:12:        <td class="mono">${esc(p.phone)}</td>
static/js/pages/phones.js:40:          await POST("/phones/add", { phone: ph.value, label: lb.value });
static/js/pages/phones.js:50:      el("p",{class:"mut",style:"margin-top:0;font-size:.85rem"},"CSV: <span class='mono'>phone,label</span> per row (header optional). TXT: one phone per line. JSON is rejected. Great for bulk-adding 10+ numbers."),
static/js/pages/phones.js:56:          const d = await api("/phones/import", { method:"POST", body: fd });
static/js/pages/phones.js:65:    "Delete ALL phone numbers? This cannot be undone.", async () => {
static/js/pages/phones.js:66:      const d = await POST("/phones/clear-all");
static/js/pages/phones.js:73:      POST(`/phones/${b.dataset.tog}/patch`, { is_active: b.dataset.act !== "1" })
static/js/pages/phones.js:79:      openModal("Edit Label — " + p.phone, el("div",{class:"form"}, el("label",{},"Label"), lb), {
static/js/pages/phones.js:81:          await POST(`/phones/${b.dataset.lbl}/patch`, { label: lb.value });
static/js/pages/phones.js:86:    if (b.dataset.del) confirmedAction("Delete this phone number?", async () => {
static/js/pages/phones.js:87:      await POST(`/phones/${b.dataset.del}/delete`); toast("Deleted","ok"); await load();
static/js/pages/recipients.js:100:        "CSV must contain an <b>email</b> column (headers: email, first_name, last_name, company_name, company_phone + custom columns). TXT format: <span class='mono'>email, first, last</span> per line."),
