Diff -- /var/www/vhosts/3dshawn.com/site1/TEMPLATES/page_wrapper.html
Diff

/var/www/vhosts/3dshawn.com/site1/TEMPLATES/page_wrapper.html

modified on local at 2026-07-12 23:12:57

Added
+20
lines
Removed
-0
lines
Context
197
unchanged
Blobs
from f27a09c19bbb
to 391021e56726
Restore this content →
Unified diff
Naive LCS-based line diff. Additions in emerald, deletions in rose. Both sides decompressed live from BLOB_STORE.
11<!doctype html>
22<html lang="en">
33<head>
44 <meta charset="utf-8">
55 <meta name="viewport" content="width=device-width, initial-scale=1">
66 <meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate, max-age=0">
77 <title>$page_title -- $brand_name</title>
88 <link rel="stylesheet" href="/assets/styles/drift_sense.css?v=$asset_version">
99 <link rel="stylesheet" href="/assets/styles/help_tips.css?v=$asset_version">
1010 <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><rect x='0.75' y='0.75' width='30.5' height='30.5' rx='7.5' fill='%230a1220' stroke='%2314b8a6' stroke-width='1.5'/><text x='16' y='22' font-family='Arial,Helvetica,sans-serif' font-size='14' font-weight='700' fill='%232dd4bf' text-anchor='middle'>DS</text></svg>">
1111</head>
1212<body>
1313<div class="app-shell app">
1414
1515 <aside class="sidebar">
1616 <a class="sidebar-brand" href="[url:dashboard]">
1717 <div class="logo">DS</div>
1818 <div class="brand-text">
1919 <div class="brand-name">Drift<span class="accent">Sense</span></div>
2020 <div class="brand-sub">$brand_tagline</div>
2121 </div>
2222 </a>
2323
2424 <div class="sidebar-section-label">Monitor</div>
2525 <a href="[url:dashboard]" class="sidebar-link[if:$active_dashboard] active[/if]">
2626 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="7" height="9"/><rect x="14" y="3" width="7" height="5"/><rect x="14" y="12" width="7" height="9"/><rect x="3" y="16" width="7" height="5"/></svg>
2727 <span>Dashboard</span>
2828 </a>
2929 <a href="[url:file_changes]" class="sidebar-link[if:$active_file_changes] active[/if]">
3030 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg>
3131 <span>File changes</span>
3232 </a>
3333 <a href="/search.cgi" class="sidebar-link[if:$active_search] active[/if]">
3434 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg>
3535 <span>Search captures</span>
3636 </a>
3737 <a href="/portfolio_drift.cgi" class="sidebar-link[if:$active_portfolio_drift] active[/if]">
3838 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg>
3939 <span>Portfolio drift</span>
40 </a>
41 <a href="/broadcast.cgi" class="sidebar-link[if:$active_broadcast] active[/if]">
42 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 11a9 9 0 0 1 9 9"/><path d="M4 4a16 16 0 0 1 16 16"/><circle cx="5" cy="19" r="1"/></svg>
43 <span>Broadcast</span>
44 </a>
45 <a href="/watchlist.cgi" class="sidebar-link[if:$active_watchlist] active[/if]">
46 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polygon points="12 2 15 8.5 22 9.3 17 14 18.2 21 12 17.8 5.8 21 7 14 2 9.3 9 8.5 12 2"/></svg>
47 <span>Watch-list</span>
48 </a>
49 <a href="/file_bio.cgi" class="sidebar-link[if:$active_file_bio] active[/if]">
50 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
51 <span>File biography</span>
4052 </a>
4153 <a href="[url:schema_changes]" class="sidebar-link[if:$active_schema_changes] active[/if]">
4254 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M3 5v6c0 1.7 4 3 9 3s9-1.3 9-3V5"/><path d="M3 11v6c0 1.7 4 3 9 3s9-1.3 9-3v-6"/></svg>
4355 <span>Schema changes</span>
4456 </a>
4557 <a href="[url:table_locks]" class="sidebar-link[if:$active_table_locks] active[/if]">
4658 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="11" width="18" height="11" rx="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>
4759 <span>Table locks</span>
4860 </a>
4961 <a href="[url:named_releases]" class="sidebar-link[if:$active_named_releases] active[/if]">
5062 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 13V7a2 2 0 0 0-2-2h-4l-2-3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h5"/><path d="M14 19l2 2 4-4"/></svg>
5163 <span>Named releases</span>
64 </a>
65 <a href="/release_diff.cgi" class="sidebar-link[if:$active_release_diff] active[/if]">
66 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="8 3 4 7 8 11"/><polyline points="16 21 20 17 16 13"/><line x1="4" y1="7" x2="20" y2="7"/><line x1="4" y1="17" x2="20" y2="17"/></svg>
67 <span>Release diff</span>
5268 </a>
5369 <a href="/sites.cgi" class="sidebar-link[if:$active_sites] active[/if]">
5470 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/></svg>
5571 <span>Sites ($sites_ct)</span>
5672 </a>
5773
5874 [if:$has_stables]
5975 <div class="sidebar-section-label">Stable versions</div>
6076 [loop:@stable_releases]
6177 <a href="$restore_url" class="sidebar-link ds-stable-link" title="Restore all pinned to this stable version">
6278 <span class="ds-stable-tag">v</span>
6379 <span>$label</span>
6480 </a>
6581 [/loop]
6682 [/if]
6783
6884 <div class="sidebar-section-label">Notify &amp; export</div>
6985 <a href="/alerts.cgi" class="sidebar-link[if:$active_alerts] active[/if]">
7086 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></svg>
7187 <span>Alerts</span>
7288 </a>
7389 <a href="/export.cgi" class="sidebar-link[if:$active_export] active[/if]">
7490 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
7591 <span>Compliance export</span>
7692 </a>
7793 <a href="/purge_log.cgi" class="sidebar-link[if:$active_purge_log] active[/if]">
7894 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="3 6 5 6 21 6"/><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/><line x1="10" y1="11" x2="10" y2="17"/><line x1="14" y1="11" x2="14" y2="17"/></svg>
7995 <span>Purge log</span>
96 </a>
97 <a href="/orphan_blobs.cgi" class="sidebar-link[if:$active_orphan_blobs] active[/if]">
98 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="9"/><line x1="7" y1="7" x2="17" y2="17"/></svg>
99 <span>Orphan blobs</span>
80100 </a>
81101
82102 <div class="sidebar-section-label">Configuration</div>
83103 <a href="[url:databases]" class="sidebar-link[if:$active_databases] active[/if]">
84104 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M21 12c0 1.7-4 3-9 3s-9-1.3-9-3"/><path d="M3 5v14c0 1.7 4 3 9 3s9-1.3 9-3V5"/></svg>
85105 <span>Databases</span>
86106 </a>
87107 <a href="[url:file_monitors]" class="sidebar-link[if:$active_file_monitors] active[/if]">
88108 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"/></svg>
89109 <span>File monitors</span>
90110 </a>
91111 <a href="[url:servers]" class="sidebar-link[if:$active_servers] active[/if]">
92112 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="2" width="20" height="8" rx="2"/><rect x="2" y="14" width="20" height="8" rx="2"/><line x1="6" y1="6" x2="6.01" y2="6"/><line x1="6" y1="18" x2="6.01" y2="18"/></svg>
93113 <span>Servers &amp; agents</span>
94114 </a>
95115 <a href="[url:containers]" class="sidebar-link[if:$active_containers] active[/if]">
96116 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="7.5 4.21 12 6.81 16.5 4.21"/><polyline points="7.5 19.79 7.5 14.6 3 12"/><polyline points="21 12 16.5 14.6 16.5 19.79"/></svg>
97117 <span>Containers</span>
98118 </a>
99119 <a href="[url:settings]" class="sidebar-link[if:$active_settings] active[/if]">
100120 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="3"/><path d="M12 1v6m0 10v6M4.22 4.22l4.24 4.24m7.08 7.08l4.24 4.24M1 12h6m10 0h6M4.22 19.78l4.24-4.24m7.08-7.08l4.24-4.24"/></svg>
101121 <span>Settings</span>
102122 </a>
103123
104124 <div class="sidebar-section-label">Account</div>
105125 <a href="/logout.cgi" class="sidebar-link sidebar-link-logout">
106126 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/><polyline points="16 17 21 12 16 7"/><line x1="21" y1="12" x2="9" y2="12"/></svg>
107127 <span>Sign out</span>
108128 </a>
109129 </aside>
110130
111131 <div class="app-main">
112132 <header class="topbar">
113133 <button type="button" class="topbar-iconbtn" id="sidebarToggle" title="Collapse sidebar">
114134 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/></svg>
115135 </button>
116136 <div class="topbar-title">$page_title</div>
117137 <div class="topbar-spacer"></div>
118138 <form class="topbar-search" method="GET" action="/search.cgi">
119139 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="7"/><line x1="20" y1="20" x2="16.65" y2="16.65"/></svg>
120140 <input type="text" name="q" placeholder="Search captures..." autocomplete="off">
121141 </form>
122142 <div class="topbar-actions">
123143 <a href="/alerts.cgi" class="topbar-iconbtn" title="Alerts">
124144 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></svg>
125145 </a>
126146 <div class="profile-dropdown" id="profileDropdown">
127147 <button type="button" class="profile-btn" onclick="document.getElementById('profileMenu').classList.toggle('open');">
128148 <div class="avatar">$user_initials</div>
129149 <div style="text-align:left;line-height:1.2">
130150 <div style="font-size:13px;font-weight:600">$user_name</div>
131151 <div style="font-size:11px;color:var(--text-dim)">Watchtower Console</div>
132152 </div>
133153 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><polyline points="6 9 12 15 18 9"/></svg>
134154 </button>
135155 <div class="profile-dropdown-menu" id="profileMenu">
136156 <div style="padding:12px 12px 10px;border-bottom:1px solid var(--border);margin-bottom:6px">
137157 <div style="font-weight:600;font-size:13.5px">$user_name</div>
138158 <div style="font-size:11.5px;color:var(--text-muted)">$user_email</div>
139159 <div style="margin-top:6px;display:flex;gap:6px"><span class="badge primary" style="background:linear-gradient(135deg,var(--accent),var(--accent-deep));color:#030710;font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:6px">Operator</span></div>
140160 </div>
141161 <div class="profile-dropdown-section">Monitor</div>
142162 <a href="/dashboard.cgi"><span class="dropdown-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><rect x="3" y="3" width="7" height="9"/><rect x="14" y="3" width="7" height="5"/><rect x="14" y="12" width="7" height="9"/><rect x="3" y="16" width="7" height="5"/></svg></span> Dashboard</a>
143163 <a href="/file_changes.cgi"><span class="dropdown-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/></svg></span> File changes</a>
144164 <a href="/search.cgi"><span class="dropdown-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><circle cx="11" cy="11" r="8"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg></span> Search captures</a>
145165 <a href="/portfolio_drift.cgi"><span class="dropdown-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/></svg></span> Portfolio drift</a>
146166 <a href="/named_releases.cgi"><span class="dropdown-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><path d="M20 13V7a2 2 0 0 0-2-2h-4l-2-3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h5"/><path d="M14 19l2 2 4-4"/></svg></span> Named releases</a>
147167 <a href="/sites.cgi"><span class="dropdown-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><rect x="3" y="3" width="7" height="7"/><rect x="14" y="3" width="7" height="7"/><rect x="3" y="14" width="7" height="7"/><rect x="14" y="14" width="7" height="7"/></svg></span> Sites ($sites_ct)</a>
148168
149169 <div class="profile-dropdown-divider"></div>
150170 <div class="profile-dropdown-section">Notify &amp; export</div>
151171 <a href="/alerts.cgi"><span class="dropdown-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/></svg></span> Alerts</a>
152172 <a href="/export.cgi"><span class="dropdown-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg></span> Compliance export</a>
153173 <a href="/purge_log.cgi"><span class="dropdown-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><polyline points="3 6 5 6 21 6"/><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/></svg></span> Purge log</a>
154174
155175 <div class="profile-dropdown-divider"></div>
156176 <div class="profile-dropdown-section">Configuration</div>
157177 <a href="/databases.cgi"><span class="dropdown-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M21 12c0 1.7-4 3-9 3s-9-1.3-9-3"/><path d="M3 5v14c0 1.7 4 3 9 3s9-1.3 9-3V5"/></svg></span> Databases</a>
158178 <a href="/file_monitors.cgi"><span class="dropdown-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"/></svg></span> File monitors</a>
159179 <a href="/servers.cgi"><span class="dropdown-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><rect x="2" y="2" width="20" height="8" rx="2"/><rect x="2" y="14" width="20" height="8" rx="2"/></svg></span> Servers &amp; agents</a>
160180 <a href="/settings.cgi"><span class="dropdown-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><circle cx="12" cy="12" r="3"/><path d="M12 1v6m0 10v6"/></svg></span> Settings</a>
161181
162182 <div class="profile-dropdown-divider"></div>
163183 <div class="profile-dropdown-section">Account</div>
164184 <a href="/logout.cgi"><span class="dropdown-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/><polyline points="16 17 21 12 16 7"/><line x1="21" y1="12" x2="9" y2="12"/></svg></span> Sign out</a>
165185 </div>
166186 </div>
167187 </div>
168188 </header>
169189 <div class="app-content">
170190$page_body
171191 </div>
172192 </div>
173193
174194</div>
175195<script src="/assets/js/tz_localize.js?v=$asset_version"></script>
176196<script src="/assets/js/ds_charts.js?v=$asset_version"></script>
177197<script src="/assets/js/ds_help.js?v=$asset_version"></script>
178198<script>
179199(function(){
180200 // Sidebar collapse toggle (icons-only) persisted in localStorage
181201 var btn = document.getElementById('sidebarToggle');
182202 var KEY = 'ds-sidebar-collapsed';
183203 try { if (localStorage.getItem(KEY) === '1') document.documentElement.classList.add('sidebar-collapsed'); } catch(e){}
184204 if (btn) btn.addEventListener('click', function(){
185205 document.documentElement.classList.toggle('sidebar-collapsed');
186206 try { localStorage.setItem(KEY, document.documentElement.classList.contains('sidebar-collapsed') ? '1' : '0'); } catch(e){}
187207 });
188208 // Close profile dropdown on outside click
189209 document.addEventListener('click', function(e){
190210 var m = document.getElementById('profileMenu');
191211 var d = document.getElementById('profileDropdown');
192212 if (m && d && !d.contains(e.target)) m.classList.remove('open');
193213 });
194214})();
195215</script>
196216</body>
197217</html>
Keyboard: j next diff k previous diff g top G bottom r restore c compile-check ? help