summaryrefslogtreecommitdiff
path: root/layouts
diff options
context:
space:
mode:
authorleiyu3 <s444814187@gmail.com>2025-07-17 15:51:53 -0400
committerleiyu3 <s444814187@gmail.com>2025-07-17 15:51:53 -0400
commit410b700036782b10ce5b5a7324a9c2b2c16fb286 (patch)
treec749b2d192cabd4e72c7f8dc0a89d12a2d3a4d4d /layouts
parent0ad3aded292b86234ebb75e8403b6abd964f4d80 (diff)
downloadletsworship-410b700036782b10ce5b5a7324a9c2b2c16fb286.tar.gz
letsworship-410b700036782b10ce5b5a7324a9c2b2c16fb286.zip
setlist mvp
Diffstat (limited to 'layouts')
-rw-r--r--layouts/_default/baseof.html147
-rw-r--r--layouts/_default/home.html8
-rw-r--r--layouts/_default/single.html8
3 files changed, 85 insertions, 78 deletions
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
index 9dad6a7..bdb4b03 100644
--- a/layouts/_default/baseof.html
+++ b/layouts/_default/baseof.html
@@ -28,15 +28,6 @@
28 </div> 28 </div>
29 29
30 30
31 <div id="setlist-tab">Setlist</div>
32
33 <div id="setlist-sidebar" class="hidden">
34 <h6>Set List</h3>
35 <ul id="setlist"></ul>
36 <button id="add-to-setlist">+ Add Song</button>
37 </div>
38
39
40 </body> 31 </body>
41 32
42 <script> 33 <script>
@@ -69,6 +60,75 @@
69 } 60 }
70 61
71 setTheme(); 62 setTheme();
63
64 document.addEventListener("DOMContentLoaded", () => {
65 const setlistTab = document.getElementById("setlist-tab");
66 const setlistSidebar = document.getElementById("setlist-sidebar");
67 const setlistEl = document.getElementById("setlist");
68 const addButton = document.getElementById("add-to-setlist");
69
70 // Load setlist from localStorage
71 let setlist = JSON.parse(localStorage.getItem("setlist")) || [];
72
73 function saveSetlist() {
74 localStorage.setItem("setlist", JSON.stringify(setlist));
75 }
76
77 function renderSetlist() {
78 setlistEl.innerHTML = "";
79 setlist.forEach((song) => {
80 const li = document.createElement("li");
81
82 const link = document.createElement("a");
83 link.href = song.url;
84 link.textContent = song.title;
85 link.style.flex = "1";
86
87 const key = document.createElement("span");
88 key.textContent = `[${song.key}] `;
89 key.style.marginLeft = "6px";
90 key.style.color = "#555";
91
92 const removeBtn = document.createElement("button");
93 removeBtn.textContent = "−";
94 removeBtn.addEventListener("click", () => {
95 setlist = setlist.filter((s) => s.url !== song.url);
96 saveSetlist();
97 renderSetlist();
98 });
99
100 li.appendChild(key);
101 li.appendChild(link);
102 li.appendChild(removeBtn);
103 setlistEl.appendChild(li);
104 });
105}
106
107 // Toggle sidebar
108 setlistTab.addEventListener("click", () => {
109 setlistSidebar.classList.toggle("hidden");
110 });
111
112 // Add current song
113 addButton.addEventListener("click", () => {
114 const title = document.title.split(" | ")[0]; // Adjust to your site's title format
115 const url = window.location.href;
116 const keySelector = document.getElementById("key-selector");
117 const transposedKey = keySelector?.value || "C";
118
119 const exists = setlist.some((s) => s.url === url);
120 if (!exists) {
121 // Add ?key=E or &key=E if query already exists
122 const urlObj = new URL(url);
123 urlObj.searchParams.set("key", transposedKey);
124 setlist.push({ title, url: urlObj.toString(), key: transposedKey });
125 saveSetlist();
126 renderSetlist();
127 }
128});
129
130 renderSetlist();
131});
72 132
73 133
74</script> 134</script>
@@ -161,75 +221,6 @@ document.addEventListener("DOMContentLoaded", () => {
161 document.body.classList.toggle("hide-chords", !toggle.checked); 221 document.body.classList.toggle("hide-chords", !toggle.checked);
162 }); 222 });
163}); 223});
164
165document.addEventListener("DOMContentLoaded", () => {
166 const setlistTab = document.getElementById("setlist-tab");
167 const setlistSidebar = document.getElementById("setlist-sidebar");
168 const setlistEl = document.getElementById("setlist");
169 const addButton = document.getElementById("add-to-setlist");
170
171 // Load setlist from localStorage
172 let setlist = JSON.parse(localStorage.getItem("setlist")) || [];
173
174 function saveSetlist() {
175 localStorage.setItem("setlist", JSON.stringify(setlist));
176 }
177
178 function renderSetlist() {
179 setlistEl.innerHTML = "";
180 setlist.forEach((song) => {
181 const li = document.createElement("li");
182
183 const link = document.createElement("a");
184 link.href = song.url;
185 link.textContent = song.title;
186 link.style.flex = "1";
187
188 const key = document.createElement("span");
189 key.textContent = ` (${song.key})`;
190 key.style.marginLeft = "6px";
191 key.style.color = "#555";
192
193 const removeBtn = document.createElement("button");
194 removeBtn.textContent = "−";
195 removeBtn.addEventListener("click", () => {
196 setlist = setlist.filter((s) => s.url !== song.url);
197 saveSetlist();
198 renderSetlist();
199 });
200
201 li.appendChild(link);
202 li.appendChild(key);
203 li.appendChild(removeBtn);
204 setlistEl.appendChild(li);
205 });
206}
207
208 // Toggle sidebar
209 setlistTab.addEventListener("click", () => {
210 setlistSidebar.classList.toggle("hidden");
211 });
212
213 // Add current song
214 addButton.addEventListener("click", () => {
215 const title = document.title.split(" | ")[0]; // Adjust to your site's title format
216 const url = window.location.href;
217 const keySelector = document.getElementById("key-selector");
218 const transposedKey = keySelector?.value || "C";
219
220 const exists = setlist.some((s) => s.url === url);
221 if (!exists) {
222 // Add ?key=E or &key=E if query already exists
223 const urlObj = new URL(url);
224 urlObj.searchParams.set("key", transposedKey);
225 setlist.push({ title, url: urlObj.toString(), key: transposedKey });
226 saveSetlist();
227 renderSetlist();
228 }
229});
230
231 renderSetlist();
232});
233</script> 224</script>
234{{ end }} 225{{ end }}
235 226
diff --git a/layouts/_default/home.html b/layouts/_default/home.html
index 52db7eb..997ed7d 100644
--- a/layouts/_default/home.html
+++ b/layouts/_default/home.html
@@ -72,6 +72,14 @@
72 {{ .Content }} 72 {{ .Content }}
73</div> 73</div>
74 74
75 <div id="setlist-tab">Setlist</div>
76
77 <div id="setlist-sidebar" class="hidden">
78 <h6>Set List</h3>
79 <ul id="setlist"></ul>
80 <button id="add-to-setlist" style="display: none">+ Add Song</button>
81 </div>
82
75<div class="back-to-top"> 83<div class="back-to-top">
76<a href="#top"> 84<a href="#top">
77 back to top 85 back to top
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
index ad55680..3c863a1 100644
--- a/layouts/_default/single.html
+++ b/layouts/_default/single.html
@@ -63,6 +63,14 @@
63 {{ .Content }} 63 {{ .Content }}
64 </div> 64 </div>
65 65
66 <div id="setlist-tab">Setlist</div>
67
68 <div id="setlist-sidebar" class="hidden">
69 <h6>Set List</h3>
70 <ul id="setlist"></ul>
71 <button id="add-to-setlist">+ Add Song</button>
72 </div>
73
66 {{/* Back to top */}} 74 {{/* Back to top */}}
67 <div class="back-to-top"> 75 <div class="back-to-top">
68 <a href="#top"> 76 <a href="#top">