summaryrefslogtreecommitdiff
path: root/layouts/_default/baseof.html
diff options
context:
space:
mode:
Diffstat (limited to 'layouts/_default/baseof.html')
-rw-r--r--layouts/_default/baseof.html147
1 files changed, 69 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