spb/drive Public
SPB Drive — self-hosted personal cloud drive (files, previews, sharing) on the MacLustr cluster.
JavaScript 82.7%
CSS 10.6%
Nunjucks 3.6%
Shell 1.8%
SQL 1.3%
1{#2 ─────────────────────────────────────────────3 SPB Drive — Personal Cloud Drive4 ─────────────────────────────────────────────5 Author : Simon-Pierre Boucher6 Contact : contact@spboucher.ai7 File : src/web/views/share-file.njk8 Purpose : Public single-file share page — full preview + download9 License : MIT © Simon-Pierre Boucher10 ─────────────────────────────────────────────11#}12{% extends "base.njk" %}13{% block title %}{{ node.name }} · SPB Drive{% endblock %}14{% block og %}15 <meta property="og:site_name" content="SPB Drive">16 <meta property="og:title" content="{{ og.title }}">17 <meta property="og:type" content="website">18 <meta property="og:url" content="{{ og.url }}">19 <meta property="og:description" content="{{ node.size | filesize }} · shared by Simon-Pierre Boucher">20 {% if og.image %}<meta property="og:image" content="{{ og.image }}">21 <meta name="twitter:card" content="summary_large_image">22 <meta name="twitter:image" content="{{ og.image }}">{% else %}23 <meta name="twitter:card" content="summary">{% endif %}24 <meta name="twitter:title" content="{{ og.title }}">25{% endblock %}26{% block body %}27<div class="share-page"28 data-token="{{ share.token }}"29 data-node-id="{{ node.id }}"30 data-name="{{ node.name }}"31 data-size="{{ node.size }}"32 data-allow-download="{{ '1' if allowDownload else '0' }}">33 <header class="share-topbar">34 <div class="brand"><div class="mark">SPB</div><span>SPB Drive</span></div>35 </header>36 <main class="share-main">37 <div class="share-file-head">38 <span class="fico" id="shareIcon"></span>39 <div>40 <h1>{{ node.name }}</h1>41 <div class="fmeta">{{ node.size | filesize }}</div>42 </div>43 {% if allowDownload %}44 <a class="btn primary" href="/s/{{ share.token }}/dl" download>45 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="16" height="16"><path d="M12 4v12m0 0 5-5m-5 5-5-5"/><path d="M4 19h16"/></svg>46 Download47 </a>48 {% endif %}49 </div>50 <div class="share-stage" id="shareStage"></div>51 </main>52 <footer class="share-footer">53 Shared by Simon-Pierre Boucher · <a href="mailto:contact@spboucher.ai">contact@spboucher.ai</a>54 </footer>55</div>56<script type="module" src="/assets/js/share-page.js"></script>57{% endblock %}58