Label and checkmark stack in one grid cell (inline-grid, grid-area 1/1, checkmark visibility-hidden until .ok), so the button width is static by construction across the click. Replaces the min-width pin from fix attempt 1, which enlarged buttons by up to 0.64px (ceil of fractional width) and leaked the pin after restore. Applies to paste-view Copy/Link (paste.html + paste.js copyFeedback) and the /new result-box copy button (new.js). Verified with CDP bounding-box probes: Copy width/x identical before/during/after at 1400x900 and 375x812 (including the previously failing 52.36px mobile case), Link button static, checkmark visible during feedback, no minWidth pin set.
68 lines
3.8 KiB
HTML
68 lines
3.8 KiB
HTML
{{template "head" .}}
|
|
{{template "topbar" .}}
|
|
<div class="page">
|
|
<div class="float">
|
|
<div class="paste-title-bar">
|
|
<h1>{{if .Title}}{{.Title}}{{else}}Untitled paste{{end}}</h1>
|
|
{{if .CustomSlug}}<span class="slug">/{{.CustomSlug}}</span>{{end}}
|
|
<div class="spacer"></div>
|
|
<button type="button" class="iconbtn wrap-toggle" title="Toggle line wrap" aria-pressed="false">Wrap</button>
|
|
<a class="iconbtn" href="/raw/{{.ID}}">Raw</a>
|
|
<a class="iconbtn swapbtn" href="#" id="copy-link-btn"><span class="btn-label">Link</span><span class="btn-check">✓</span></a>
|
|
<a class="iconbtn swapbtn" href="#" id="copy-btn"><span class="btn-label">Copy</span><span class="btn-check">✓</span></a>
|
|
{{if .DeletionToken}}<a class="iconbtn danger" href="#" id="delete-btn">Delete</a>{{end}}
|
|
</div>
|
|
</div>
|
|
<div class="float">
|
|
<div class="stats-pill" id="stats-pill">
|
|
<button type="button" class="stats-head" id="stats-toggle" aria-expanded="false">
|
|
<svg class="stats-chev" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg>
|
|
<span class="stats-summary">{{.StatsSummary}}</span>
|
|
</button>
|
|
<div class="stats-body" id="stats-body" hidden>
|
|
<div class="stats-grid">
|
|
<span class="stats-k">Type</span><span class="stats-v">{{.TypeLabel}}</span>
|
|
<span class="stats-k">Size</span><span class="stats-v">{{.SizeHuman}} ({{.LineCount}} lines)</span>
|
|
<span class="stats-k">Views</span><span class="stats-v">{{.ViewCount}}</span>
|
|
<span class="stats-k">Created</span><span class="stats-v" data-ts="{{.CreatedAtUnix}}">{{.CreatedAgo}}</span>
|
|
{{if .ExpiresAt}}<span class="stats-k">Expires</span><span class="stats-v">in {{.ExpiresIn}}</span>{{end}}
|
|
<span class="stats-k">Password</span><span class="stats-v">{{if .HasPassword}}protected{{else}}none{{end}}</span>
|
|
{{if .BurnAfterRead}}{{if .ReadsLimit}}{{with .ReadsLeftN}}<span class="stats-k">Reads left</span><span class="stats-v">{{.}} of {{$.ReadsTotal}}</span>{{end}}{{else}}<span class="stats-k">Burn</span><span class="stats-v">burn after read</span>{{end}}{{end}}
|
|
{{if .CustomSlug}}<span class="stats-k">Custom URL</span><span class="stats-v">/{{.CustomSlug}}</span>{{end}}
|
|
<span class="stats-k">Visibility</span><span class="stats-v">{{.Visibility}}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{if .JustCreated}}
|
|
<div class="created-pill" id="created-pill" role="status">Paste Created</div>
|
|
{{end}}
|
|
{{if .Attachment}}
|
|
<div class="float">
|
|
<div class="attachment-bar">
|
|
{{if .AttachmentImage}}
|
|
<div class="attachment-preview"><img src="/f/{{.Attachment.ID}}/{{.Attachment.Filename}}" alt="{{.Attachment.Filename}}"></div>
|
|
{{end}}
|
|
<a class="attachment-chip" href="/f/{{.Attachment.ID}}/{{.Attachment.Filename}}" data-mime="{{.Attachment.Mime}}">
|
|
<span class="attachment-name">{{.Attachment.Filename}}</span>
|
|
<span class="attachment-size">{{.Attachment.SizeHuman}}</span>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
{{if not .Attachment}}
|
|
<div class="float">
|
|
<div class="code" id="code"><div class="gutter" id="gutter">{{.Gutter}}</div><div class="codebody" id="codebody">{{.ContentHTML}}</div></div>
|
|
</div>
|
|
{{end}}
|
|
<div class="jumpnav hidden" id="jumpnav">
|
|
<button type="button" class="btn jump-btn" data-jump="top">Top</button>
|
|
<button type="button" class="btn jump-btn" data-jump="bottom">Bottom</button>
|
|
</div>
|
|
</div>
|
|
<input type="hidden" id="raw-content" value="{{.ContentAttr}}">
|
|
<script src="/static/paste.js" defer data-paste-id="{{.ID}}"></script>
|
|
<script src="/static/paste-lines.js" defer></script>
|
|
<script src="/static/jump.js" defer></script>
|
|
{{template "foot" .}}
|