feat: convert web El source to native HTML template syntax
Replace all return "..." HTML string literals with native El templates —
removes all \" escapes, converts + interpolations to {expr}/{raw(expr)},
and replaces conditional string concatenation with {#if}/{#else}/{/if}.
No functional changes; output is identical.
This commit is contained in:
+103
-104
@@ -53,168 +53,168 @@ fn checkout_page(plan: String, pub_key: String) -> String {
|
||||
<li>2 devices included</li>"
|
||||
} }
|
||||
|
||||
return "
|
||||
<nav id=\"nav\">
|
||||
<div class=\"nav-inner\">
|
||||
<a href=\"/\" class=\"nav-logo\" aria-label=\"Neuron home\"><img src=\"/assets/brand/neuron-wordmark-on-light.png\" srcset=\"/assets/brand/neuron-wordmark-on-light@2x.png 2x\" alt=\"Neuron\" height=\"28\"></a>
|
||||
<div class=\"nav-links\">
|
||||
<a href=\"/\" class=\"nav-link\">← Back</a>
|
||||
return
|
||||
<nav id="nav">
|
||||
<div class="nav-inner">
|
||||
<a href="/" class="nav-logo" aria-label="Neuron home"><img src="/assets/brand/neuron-wordmark-on-light.png" srcset="/assets/brand/neuron-wordmark-on-light@2x.png 2x" alt="Neuron" height="28"></a>
|
||||
<div class="nav-links">
|
||||
<a href="/" class="nav-link">← Back</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main style=\"min-height: 100vh; padding: clamp(6rem, 14vh, 9rem) 2rem 4rem;\">
|
||||
<div class=\"checkout-shell\">
|
||||
<main style="min-height: 100vh; padding: clamp(6rem, 14vh, 9rem) 2rem 4rem;">
|
||||
<div class="checkout-shell">
|
||||
|
||||
<!-- Left: order summary -->
|
||||
<div class=\"checkout-summary\">
|
||||
<p class=\"label\" style=\"margin-bottom: 1.5rem; color: var(--navy);\">Your order</p>
|
||||
<div class="checkout-summary">
|
||||
<p class="label" style="margin-bottom: 1.5rem; color: var(--navy);">Your order</p>
|
||||
|
||||
<div style=\"margin-bottom: 2rem;\">
|
||||
<p class=\"checkout-plan-name\">" + plan_name + "</p>
|
||||
<p class=\"checkout-plan-desc\">" + plan_desc + "</p>
|
||||
<div style=\"display: flex; align-items: baseline; gap: .5rem; margin-top: 1.25rem;\">
|
||||
<span class=\"checkout-price\">" + plan_price + "</span>
|
||||
<span class=\"checkout-cadence\">" + plan_cadence + "</span>
|
||||
<div style="margin-bottom: 2rem;">
|
||||
<p class="checkout-plan-name">{plan_name}</p>
|
||||
<p class="checkout-plan-desc">{plan_desc}</p>
|
||||
<div style="display: flex; align-items: baseline; gap: .5rem; margin-top: 1.25rem;">
|
||||
<span class="checkout-price">{plan_price}</span>
|
||||
<span class="checkout-cadence">{plan_cadence}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class=\"navy-line-left\" style=\"width: 3rem; margin-bottom: 1.75rem;\"></div>
|
||||
<div class="navy-line-left" style="width: 3rem; margin-bottom: 1.75rem;"></div>
|
||||
|
||||
<ul class=\"checkout-features\">
|
||||
" + features_html + "
|
||||
<ul class="checkout-features">
|
||||
{raw(features_html)}
|
||||
</ul>
|
||||
|
||||
<p class=\"checkout-guarantee\">
|
||||
<p class="checkout-guarantee">
|
||||
Your data stays yours. Runs locally. No telemetry.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Right: either free thank-you or sign-in + payment form -->
|
||||
<div class=\"checkout-form-wrap\">
|
||||
<div class="checkout-form-wrap">
|
||||
|
||||
<!-- Auth section: visible immediately for free, collapsed (optional) for paid plans -->
|
||||
<div id=\"auth-section\" " + (if is_free { "" } else { "style=\"display:none;\"" }) + ">
|
||||
" + (if is_free { "
|
||||
<p class=\"label\" style=\"margin-bottom: 1.5rem; color: var(--navy);\">Create your account.</p>
|
||||
<p class=\"checkout-auth-hint\" style=\"margin-bottom: 2rem;\">No charge today. Add your card to reserve your spot - you won't be billed until you upgrade.</p>
|
||||
" } else { "
|
||||
<p class=\"label\" style=\"margin-bottom: 1.25rem;\">Sign in (optional)</p>
|
||||
<p class=\"checkout-auth-hint\">Sign in to link this purchase to an existing account. Or skip and create one later - we'll match it to your email.</p>
|
||||
" }) + "
|
||||
<div id="auth-section" {#if is_free}{#else}style="display:none;"{/if}>
|
||||
{#if is_free}
|
||||
<p class="label" style="margin-bottom: 1.5rem; color: var(--navy);">Create your account.</p>
|
||||
<p class="checkout-auth-hint" style="margin-bottom: 2rem;">No charge today. Add your card to reserve your spot - you won't be billed until you upgrade.</p>
|
||||
{#else}
|
||||
<p class="label" style="margin-bottom: 1.25rem;">Sign in (optional)</p>
|
||||
<p class="checkout-auth-hint">Sign in to link this purchase to an existing account. Or skip and create one later - we'll match it to your email.</p>
|
||||
{/if}
|
||||
|
||||
<div class=\"checkout-social-btns\">
|
||||
<button type=\"button\" class=\"checkout-social-btn\" id=\"btn-google\" onclick=\"signInWith('google')\">
|
||||
<svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" aria-hidden=\"true\">
|
||||
<path d=\"M17.64 9.2c0-.637-.057-1.251-.164-1.84H9v3.481h4.844c-.209 1.125-.843 2.078-1.796 2.716v2.259h2.908c1.702-1.567 2.684-3.875 2.684-6.615z\" fill=\"#4285F4\"/>
|
||||
<path d=\"M9 18c2.43 0 4.467-.806 5.956-2.18l-2.908-2.259c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H.957v2.332A8.997 8.997 0 0 0 9 18z\" fill=\"#34A853\"/>
|
||||
<path d=\"M3.964 10.71A5.41 5.41 0 0 1 3.682 9c0-.593.102-1.17.282-1.71V4.958H.957A8.996 8.996 0 0 0 0 9c0 1.452.348 2.827.957 4.042l3.007-2.332z\" fill=\"#FBBC05\"/>
|
||||
<path d=\"M9 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.463.891 11.426 0 9 0A8.997 8.997 0 0 0 .957 4.958L3.964 6.29C4.672 4.163 6.656 3.58 9 3.58z\" fill=\"#EA4335\"/>
|
||||
<div class="checkout-social-btns">
|
||||
<button type="button" class="checkout-social-btn" id="btn-google" onclick="signInWith('google')">
|
||||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" aria-hidden="true">
|
||||
<path d="M17.64 9.2c0-.637-.057-1.251-.164-1.84H9v3.481h4.844c-.209 1.125-.843 2.078-1.796 2.716v2.259h2.908c1.702-1.567 2.684-3.875 2.684-6.615z" fill="#4285F4"/>
|
||||
<path d="M9 18c2.43 0 4.467-.806 5.956-2.18l-2.908-2.259c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H.957v2.332A8.997 8.997 0 0 0 9 18z" fill="#34A853"/>
|
||||
<path d="M3.964 10.71A5.41 5.41 0 0 1 3.682 9c0-.593.102-1.17.282-1.71V4.958H.957A8.996 8.996 0 0 0 0 9c0 1.452.348 2.827.957 4.042l3.007-2.332z" fill="#FBBC05"/>
|
||||
<path d="M9 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.463.891 11.426 0 9 0A8.997 8.997 0 0 0 .957 4.958L3.964 6.29C4.672 4.163 6.656 3.58 9 3.58z" fill="#EA4335"/>
|
||||
</svg>
|
||||
Continue with Google
|
||||
</button>
|
||||
<button type=\"button\" class=\"checkout-social-btn\" id=\"btn-github\" onclick=\"signInWith('github')\">
|
||||
<svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">
|
||||
<path d=\"M12 0C5.37 0 0 5.37 0 12c0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61-.546-1.385-1.335-1.755-1.335-1.755-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.605-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 21.795 24 17.298 24 12c0-6.63-5.37-12-12-12z\"/>
|
||||
<button type="button" class="checkout-social-btn" id="btn-github" onclick="signInWith('github')">
|
||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
|
||||
<path d="M12 0C5.37 0 0 5.37 0 12c0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61-.546-1.385-1.335-1.755-1.335-1.755-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.605-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 21.795 24 17.298 24 12c0-6.63-5.37-12-12-12z"/>
|
||||
</svg>
|
||||
Continue with GitHub
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div id=\"auth-message\" class=\"checkout-message\" style=\"display:none;\"></div>
|
||||
<div id="auth-message" class="checkout-message" style="display:none;"></div>
|
||||
|
||||
<div class=\"checkout-auth-divider\">
|
||||
<span id=\"auth-divider-label\">or " + (if is_free { "create an account with email" } else { "create an account" }) + "</span>
|
||||
<div class="checkout-auth-divider">
|
||||
<span id="auth-divider-label">or {#if is_free}create an account with email{#else}create an account{/if}</span>
|
||||
</div>
|
||||
|
||||
<div id=\"email-auth-form\">
|
||||
<input type=\"email\" id=\"auth-email\" class=\"checkout-input\" placeholder=\"Email address\" autocomplete=\"email\" style=\"width:100%;display:block;margin-bottom:.75rem\">
|
||||
<input type=\"password\" id=\"auth-password\" class=\"checkout-input\" placeholder=\"Password - min 8 characters\" autocomplete=\"new-password\" style=\"width:100%;display:block;margin-bottom:.75rem\">
|
||||
<button type=\"button\" class=\"checkout-email-btn\" onclick=\"signUpWithEmail()\">" + (if is_free { "Create account →" } else { "Create account →" }) + "</button>
|
||||
<p class=\"checkout-auth-hint\" style=\"margin-top:.75rem;text-align:center\">Already have an account? <a href=\"#\" onclick=\"showSignIn();return false;\" style=\"color:var(--navy)\">Sign in</a></p>
|
||||
<div id="email-auth-form">
|
||||
<input type="email" id="auth-email" class="checkout-input" placeholder="Email address" autocomplete="email" style="width:100%;display:block;margin-bottom:.75rem">
|
||||
<input type="password" id="auth-password" class="checkout-input" placeholder="Password - min 8 characters" autocomplete="new-password" style="width:100%;display:block;margin-bottom:.75rem">
|
||||
<button type="button" class="checkout-email-btn" onclick="signUpWithEmail()">{#if is_free}Create account →{#else}Create account →{/if}</button>
|
||||
<p class="checkout-auth-hint" style="margin-top:.75rem;text-align:center">Already have an account? <a href="#" onclick="showSignIn();return false;" style="color:var(--navy)">Sign in</a></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Payment form (visible immediately - no auth wall) -->
|
||||
<div id=\"payment-section\" " + (if is_free { "style=\"display:none;\"" } else { "" }) + ">
|
||||
<div id=\"auth-badge\" style=\"display:none; margin-bottom: 1.5rem;\"></div>
|
||||
" + (if is_free { "" } else { "
|
||||
<p class=\"checkout-auth-hint\" id=\"signin-prompt\" style=\"margin-bottom:1.25rem;font-size:.8125rem\">Already have an account? <a href=\"#\" onclick=\"document.getElementById('auth-section').style.display='';this.parentNode.style.display='none';return false;\" style=\"color:var(--navy);text-decoration:underline\">Sign in</a> to link your purchase.</p>
|
||||
" }) + "
|
||||
<div id="payment-section" {#if is_free}style="display:none;"{/if}>
|
||||
<div id="auth-badge" style="display:none; margin-bottom: 1.5rem;"></div>
|
||||
{#if is_free}{#else}
|
||||
<p class="checkout-auth-hint" id="signin-prompt" style="margin-bottom:1.25rem;font-size:.8125rem">Already have an account? <a href="#" onclick="document.getElementById('auth-section').style.display='';this.parentNode.style.display='none';return false;" style="color:var(--navy);text-decoration:underline">Sign in</a> to link your purchase.</p>
|
||||
{/if}
|
||||
|
||||
<!-- Founding Member attestation (only shown for founding plan) -->
|
||||
" + (if is_founding { "
|
||||
<div id=\"founding-attestation\" style=\"margin-bottom:2rem;padding:1.5rem;border:1px solid rgba(0,82,160,.2);background:rgba(0,82,160,.03)\">
|
||||
<p style=\"font-family:var(--body);font-weight:500;font-size:.9rem;color:var(--t1);margin-bottom:.75rem\">Before you continue</p>
|
||||
<p style=\"font-family:var(--body);font-weight:300;font-size:.8375rem;color:var(--t2);line-height:1.75;margin-bottom:1.25rem\">Founding Member is not a ceremonial title. These are the people who will work directly with the team to shape what Neuron becomes. You will have a real voice in what gets built, and we will take it seriously. That requires you to show up in good faith.</p>
|
||||
<label style=\"display:flex;gap:.875rem;align-items:flex-start;cursor:pointer\">
|
||||
<input type=\"checkbox\" id=\"founding-attest-cb\" style=\"margin-top:.2rem;width:16px;height:16px;flex-shrink:0;accent-color:var(--navy)\">
|
||||
<span style=\"font-family:var(--body);font-weight:300;font-size:.8125rem;color:var(--t2);line-height:1.7\">
|
||||
{#if is_founding}
|
||||
<div id="founding-attestation" style="margin-bottom:2rem;padding:1.5rem;border:1px solid rgba(0,82,160,.2);background:rgba(0,82,160,.03)">
|
||||
<p style="font-family:var(--body);font-weight:500;font-size:.9rem;color:var(--t1);margin-bottom:.75rem">Before you continue</p>
|
||||
<p style="font-family:var(--body);font-weight:300;font-size:.8375rem;color:var(--t2);line-height:1.75;margin-bottom:1.25rem">Founding Member is not a ceremonial title. These are the people who will work directly with the team to shape what Neuron becomes. You will have a real voice in what gets built, and we will take it seriously. That requires you to show up in good faith.</p>
|
||||
<label style="display:flex;gap:.875rem;align-items:flex-start;cursor:pointer">
|
||||
<input type="checkbox" id="founding-attest-cb" style="margin-top:.2rem;width:16px;height:16px;flex-shrink:0;accent-color:var(--navy)">
|
||||
<span style="font-family:var(--body);font-weight:300;font-size:.8125rem;color:var(--t2);line-height:1.7">
|
||||
I am joining as a genuine early user, not to extract proprietary information about Neuron's technology, architecture, or roadmap. I will engage in good faith. I understand that if this is not my intent, a different plan is a better fit.
|
||||
</span>
|
||||
</label>
|
||||
<p id=\"attest-warn\" style=\"display:none;font-family:var(--body);font-size:.8rem;color:#c44;margin-top:.75rem\">Please confirm the above before continuing.</p>
|
||||
<p id="attest-warn" style="display:none;font-family:var(--body);font-size:.8rem;color:#c44;margin-top:.75rem">Please confirm the above before continuing.</p>
|
||||
</div>
|
||||
" } else { "" }) + "
|
||||
{/if}
|
||||
|
||||
<!-- Payment timing: Professional only (not Founding, not Free) -->
|
||||
" + (if !is_founding && !is_free { "
|
||||
<div style=\"margin-bottom:1.75rem\">
|
||||
<p class=\"label\" style=\"margin-bottom:1rem\">When would you like to be charged?</p>
|
||||
<div style=\"display:flex;flex-direction:column;gap:.625rem\">
|
||||
<label class=\"checkout-timing-opt\" id=\"timing-now-label\">
|
||||
<input type=\"radio\" name=\"charge-timing\" value=\"now\" id=\"timing-now\" checked style=\"accent-color:var(--navy)\">
|
||||
{#if is_founding}{#else}{#if is_free}{#else}
|
||||
<div style="margin-bottom:1.75rem">
|
||||
<p class="label" style="margin-bottom:1rem">When would you like to be charged?</p>
|
||||
<div style="display:flex;flex-direction:column;gap:.625rem">
|
||||
<label class="checkout-timing-opt" id="timing-now-label">
|
||||
<input type="radio" name="charge-timing" value="now" id="timing-now" checked style="accent-color:var(--navy)">
|
||||
<div>
|
||||
<span style=\"font-family:var(--body);font-weight:500;font-size:.875rem;color:var(--t1)\">Charge me now</span>
|
||||
<span style=\"font-family:var(--body);font-weight:300;font-size:.8rem;color:var(--t3);display:block;margin-top:.15rem\">Paying now signals you're serious. It gives us real signal about what people actually want to use Neuron for - not just who's curious. That shapes what we build first.</span>
|
||||
<span style="font-family:var(--body);font-weight:500;font-size:.875rem;color:var(--t1)">Charge me now</span>
|
||||
<span style="font-family:var(--body);font-weight:300;font-size:.8rem;color:var(--t3);display:block;margin-top:.15rem">Paying now signals you're serious. It gives us real signal about what people actually want to use Neuron for - not just who's curious. That shapes what we build first.</span>
|
||||
</div>
|
||||
</label>
|
||||
<label class=\"checkout-timing-opt\" id=\"timing-later-label\">
|
||||
<input type=\"radio\" name=\"charge-timing\" value=\"later\" id=\"timing-later\" style=\"accent-color:var(--navy)\">
|
||||
<label class="checkout-timing-opt" id="timing-later-label">
|
||||
<input type="radio" name="charge-timing" value="later" id="timing-later" style="accent-color:var(--navy)">
|
||||
<div>
|
||||
<span style=\"font-family:var(--body);font-weight:500;font-size:.875rem;color:var(--t1)\">Hold until product launches (Q3 2026)</span>
|
||||
<span style=\"font-family:var(--body);font-weight:300;font-size:.8rem;color:var(--t3);display:block;margin-top:.15rem\">We save your payment method securely. Nothing charged until launch. Cancel anytime before then.</span>
|
||||
<span style="font-family:var(--body);font-weight:500;font-size:.875rem;color:var(--t1)">Hold until product launches (Q3 2026)</span>
|
||||
<span style="font-family:var(--body);font-weight:300;font-size:.8rem;color:var(--t3);display:block;margin-top:.15rem">We save your payment method securely. Nothing charged until launch. Cancel anytime before then.</span>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
" } else { "" }) + "
|
||||
{/if}{/if}
|
||||
|
||||
<p class=\"label\" style=\"margin-bottom: 1.75rem;\">Payment</p>
|
||||
<p class="label" style="margin-bottom: 1.75rem;">Payment</p>
|
||||
|
||||
<form id=\"payment-form\" autocomplete=\"on\">
|
||||
<form id="payment-form" autocomplete="on">
|
||||
|
||||
<div class=\"checkout-field-group\">
|
||||
<div class=\"checkout-field\">
|
||||
<label for=\"buyer-name\" class=\"checkout-label\">Full name</label>
|
||||
<input id=\"buyer-name\" name=\"name\" type=\"text\" autocomplete=\"name\"
|
||||
class=\"checkout-input\" placeholder=\"Full name\" required>
|
||||
<div class="checkout-field-group">
|
||||
<div class="checkout-field">
|
||||
<label for="buyer-name" class="checkout-label">Full name</label>
|
||||
<input id="buyer-name" name="name" type="text" autocomplete="name"
|
||||
class="checkout-input" placeholder="Full name" required>
|
||||
</div>
|
||||
<div class=\"checkout-field\">
|
||||
<label for=\"buyer-email\" class=\"checkout-label\">Email</label>
|
||||
<input id=\"buyer-email\" name=\"email\" type=\"email\" autocomplete=\"email\"
|
||||
class=\"checkout-input\" placeholder=\"you@example.com\" required>
|
||||
<div class="checkout-field">
|
||||
<label for="buyer-email" class="checkout-label">Email</label>
|
||||
<input id="buyer-email" name="email" type="email" autocomplete="email"
|
||||
class="checkout-input" placeholder="you@example.com" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class=\"checkout-payment-element-wrap\">
|
||||
<div id=\"payment-element\">
|
||||
<div class="checkout-payment-element-wrap">
|
||||
<div id="payment-element">
|
||||
<!-- Stripe Payment Element mounts here -->
|
||||
<div class=\"checkout-element-loading\">Loading payment form…</div>
|
||||
<div class="checkout-element-loading">Loading payment form…</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id=\"payment-message\" class=\"checkout-message\" style=\"display:none;\"></div>
|
||||
<div id="payment-message" class="checkout-message" style="display:none;"></div>
|
||||
|
||||
<button id=\"submit-btn\" class=\"checkout-submit\" type=\"submit\" disabled>
|
||||
<span id=\"submit-label\">" + (if is_free { "Reserve free tier →" } else { "Complete purchase →" }) + "</span>
|
||||
<span id=\"submit-spinner\" style=\"display:none;\">Processing…</span>
|
||||
<button id="submit-btn" class="checkout-submit" type="submit" disabled>
|
||||
<span id="submit-label">{#if is_free}Reserve free tier →{#else}Complete purchase →{/if}</span>
|
||||
<span id="submit-spinner" style="display:none;">Processing…</span>
|
||||
</button>
|
||||
|
||||
<p class=\"checkout-security\">
|
||||
<svg aria-hidden=\"true\" width=\"12\" height=\"14\" viewBox=\"0 0 12 14\" fill=\"none\">
|
||||
<path d=\"M6 0L0 2.5V7c0 3.3 2.5 6.3 6 7 3.5-.7 6-3.7 6-7V2.5L6 0z\" fill=\"currentColor\" opacity=\".35\"/>
|
||||
<path d=\"M4 7l1.5 1.5L8.5 5\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>
|
||||
<p class="checkout-security">
|
||||
<svg aria-hidden="true" width="12" height="14" viewBox="0 0 12 14" fill="none">
|
||||
<path d="M6 0L0 2.5V7c0 3.3 2.5 6.3 6 7 3.5-.7 6-3.7 6-7V2.5L6 0z" fill="currentColor" opacity=".35"/>
|
||||
<path d="M4 7l1.5 1.5L8.5 5" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
Secured by Stripe · 256-bit TLS · PCI DSS compliant
|
||||
</p>
|
||||
@@ -227,9 +227,9 @@ fn checkout_page(plan: String, pub_key: String) -> String {
|
||||
</main>
|
||||
|
||||
<!-- Supabase JS -->
|
||||
<script src=\"https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2/dist/umd/supabase.js\"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2/dist/umd/supabase.js"></script>
|
||||
<!-- Stripe.js -->
|
||||
<script src=\"https://js.stripe.com/v3/\" async></script>
|
||||
<script src="https://js.stripe.com/v3/" async></script>
|
||||
|
||||
<style>
|
||||
.checkout-shell {
|
||||
@@ -485,12 +485,11 @@ fn checkout_page(plan: String, pub_key: String) -> String {
|
||||
.checkout-auth-badge strong { color: var(--navy); font-weight: 500; }
|
||||
</style>
|
||||
|
||||
<script src=\"/js/checkout-auth.js\" defer></script>
|
||||
<script src="/js/checkout-auth.js" defer></script>
|
||||
|
||||
<script>window.NEURON_CFG=window.NEURON_CFG||{};window.NEURON_CFG.plan=\"" + plan + "\";window.NEURON_CFG.pub_key=\"" + pub_key + "\";</script><script src=\"/js/checkout-stripe.js\" defer></script>
|
||||
<script>window.NEURON_CFG=window.NEURON_CFG||{};window.NEURON_CFG.plan="{plan}";window.NEURON_CFG.pub_key="{pub_key}";</script><script src="/js/checkout-stripe.js" defer></script>
|
||||
|
||||
" + (if is_free { "
|
||||
<script src=\"/js/checkout-free.js\" defer></script>
|
||||
" } else { "" }) + "
|
||||
"
|
||||
{#if is_free}
|
||||
<script>document.addEventListener('DOMContentLoaded',function(){window.neuronCheckoutFree&&window.neuronCheckoutFree()});</script>
|
||||
{/if}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user