| 1 |
{% extends "base.html" %} |
| 2 |
|
| 3 |
{% block title %}Export Your Data - Makenot.work{% endblock %} |
| 4 |
{% block body_attrs %} class="padded-page export-page"{% endblock %} |
| 5 |
|
| 6 |
{% block head %} |
| 7 |
{% endblock %} |
| 8 |
|
| 9 |
{% block content %} |
| 10 |
{% include "partials/site_header.html" %} |
| 11 |
|
| 12 |
<div class="container"> |
| 13 |
<a href="/dashboard" class="back-link">← Back to Dashboard</a> |
| 14 |
|
| 15 |
<header class="dashboard-export-header"> |
| 16 |
<div> |
| 17 |
<h1 class="page-title">Export Your Data</h1> |
| 18 |
<p class="subtitle">Download your content, projects, and transaction history.</p> |
| 19 |
</div> |
| 20 |
<button class="btn-primary export-all-btn" id="export-all-btn" onclick="exportAll()"> |
| 21 |
Export All |
| 22 |
</button> |
| 23 |
</header> |
| 24 |
|
| 25 |
<div class="export-cards"> |
| 26 |
<div class="export-card"> |
| 27 |
<div class="export-card-info"> |
| 28 |
<div class="export-card-title">Projects & Items</div> |
| 29 |
<div class="export-card-desc">All your project and item metadata including titles, descriptions, prices, and tags.</div> |
| 30 |
<div class="export-card-meta">JSON format</div> |
| 31 |
<div class="export-status" id="projects-status"></div> |
| 32 |
</div> |
| 33 |
<button class="btn-secondary" |
| 34 |
hx-post="/api/export/projects" |
| 35 |
hx-target="#projects-status" |
| 36 |
hx-swap="innerHTML" |
| 37 |
hx-indicator="#projects-spinner"> |
| 38 |
Download |
| 39 |
<span id="projects-spinner" class="htmx-indicator"> ...</span> |
| 40 |
</button> |
| 41 |
</div> |
| 42 |
|
| 43 |
<div class="export-card"> |
| 44 |
<div class="export-card-info"> |
| 45 |
<div class="export-card-title">Sales History</div> |
| 46 |
<div class="export-card-desc">Record of all sales you've made, including dates, amounts, and item titles.</div> |
| 47 |
<div class="export-card-meta">CSV format</div> |
| 48 |
<div class="export-status" id="sales-status"></div> |
| 49 |
</div> |
| 50 |
<button class="btn-secondary" |
| 51 |
hx-post="/api/export/sales" |
| 52 |
hx-target="#sales-status" |
| 53 |
hx-swap="innerHTML" |
| 54 |
hx-indicator="#sales-spinner"> |
| 55 |
Download |
| 56 |
<span id="sales-spinner" class="htmx-indicator"> ...</span> |
| 57 |
</button> |
| 58 |
</div> |
| 59 |
|
| 60 |
<div class="export-card"> |
| 61 |
<div class="export-card-info"> |
| 62 |
<div class="export-card-title">Collaborator Payouts</div> |
| 63 |
<div class="export-card-desc">Record of all revenue shared with collaborators on your projects, both incoming and outgoing.</div> |
| 64 |
<div class="export-card-meta">CSV format</div> |
| 65 |
<div class="export-status" id="splits-status"></div> |
| 66 |
</div> |
| 67 |
<button class="btn-secondary" |
| 68 |
hx-post="/api/export/splits" |
| 69 |
hx-target="#splits-status" |
| 70 |
hx-swap="innerHTML" |
| 71 |
hx-indicator="#splits-spinner"> |
| 72 |
Download |
| 73 |
<span id="splits-spinner" class="htmx-indicator"> ...</span> |
| 74 |
</button> |
| 75 |
</div> |
| 76 |
|
| 77 |
<div class="export-card"> |
| 78 |
<div class="export-card-info"> |
| 79 |
<div class="export-card-title">Purchase History</div> |
| 80 |
<div class="export-card-desc">Record of all items you've purchased, for your personal records.</div> |
| 81 |
<div class="export-card-meta">CSV format</div> |
| 82 |
<div class="export-status" id="purchases-status"></div> |
| 83 |
</div> |
| 84 |
<button class="btn-secondary" |
| 85 |
hx-post="/api/export/purchases" |
| 86 |
hx-target="#purchases-status" |
| 87 |
hx-swap="innerHTML" |
| 88 |
hx-indicator="#purchases-spinner"> |
| 89 |
Download |
| 90 |
<span id="purchases-spinner" class="htmx-indicator"> ...</span> |
| 91 |
</button> |
| 92 |
</div> |
| 93 |
|
| 94 |
<div class="export-card"> |
| 95 |
<div class="export-card-info"> |
| 96 |
<div class="export-card-title">Followers & Members</div> |
| 97 |
<div class="export-card-desc">List of users who follow you or have memberships to your projects.</div> |
| 98 |
<div class="export-card-meta">CSV format</div> |
| 99 |
<div class="export-status" id="followers-status"></div> |
| 100 |
</div> |
| 101 |
<button class="btn-secondary" |
| 102 |
hx-post="/api/export/followers" |
| 103 |
hx-target="#followers-status" |
| 104 |
hx-swap="innerHTML" |
| 105 |
hx-indicator="#followers-spinner"> |
| 106 |
Download |
| 107 |
<span id="followers-spinner" class="htmx-indicator"> ...</span> |
| 108 |
</button> |
| 109 |
</div> |
| 110 |
|
| 111 |
{% if has_content %} |
| 112 |
<div class="export-card"> |
| 113 |
<div class="export-card-info"> |
| 114 |
<div class="export-card-title">Content Files</div> |
| 115 |
<div class="export-card-desc">All your uploaded audio files, cover images, version downloads, and dynamic clips.</div> |
| 116 |
<div class="export-card-meta">ZIP archive ({{ content_size }})</div> |
| 117 |
<div class="export-status" id="content-status"></div> |
| 118 |
</div> |
| 119 |
<button class="btn-secondary" |
| 120 |
hx-post="/api/export/content" |
| 121 |
hx-target="#content-status" |
| 122 |
hx-swap="innerHTML" |
| 123 |
hx-indicator="#content-spinner"> |
| 124 |
Download |
| 125 |
<span id="content-spinner" class="htmx-indicator"> ...</span> |
| 126 |
</button> |
| 127 |
</div> |
| 128 |
{% endif %} |
| 129 |
</div> |
| 130 |
|
| 131 |
<div class="export-note"> |
| 132 |
<h3>About Your Data</h3> |
| 133 |
<p>Your data belongs to you. These exports contain everything we store about your account and content. If you're planning to delete your account, we recommend downloading your data first.</p> |
| 134 |
</div> |
| 135 |
</div> |
| 136 |
|
| 137 |
<script> |
| 138 |
function exportAll() { |
| 139 |
var btn = document.getElementById('export-all-btn'); |
| 140 |
var buttons = document.querySelectorAll('.export-card button.secondary'); |
| 141 |
if (buttons.length === 0) return; |
| 142 |
|
| 143 |
btn.disabled = true; |
| 144 |
btn.textContent = 'Exporting...'; |
| 145 |
var i = 0; |
| 146 |
|
| 147 |
function next() { |
| 148 |
if (i >= buttons.length) { |
| 149 |
btn.textContent = 'Done'; |
| 150 |
setTimeout(function() { btn.textContent = 'Export All'; btn.disabled = false; }, 3000); |
| 151 |
return; |
| 152 |
} |
| 153 |
buttons[i].click(); |
| 154 |
i++; |
| 155 |
setTimeout(next, 1500); |
| 156 |
} |
| 157 |
next(); |
| 158 |
} |
| 159 |
</script> |
| 160 |
{% endblock %} |
| 161 |
|