|
132 | 132 | </li> |
133 | 133 | <li class="sidebar-item"> |
134 | 134 | <div class="sidebar-item-container"> |
135 | | - <a href="./pages/why.html" class="sidebar-item-text sidebar-link"> |
136 | | - <span class="menu-text">Why make a website for your research?</span></a> |
| 135 | + <a href="./pages/why/index.html" class="sidebar-item-text sidebar-link"> |
| 136 | + <span class="menu-text">Slides: Why make a website for your research?</span></a> |
137 | 137 | </div> |
138 | 138 | </li> |
139 | 139 | <li class="sidebar-item sidebar-item-section"> |
|
147 | 147 | <ul id="quarto-sidebar-section-1" class="collapse list-unstyled sidebar-section depth1 show"> |
148 | 148 | <li class="sidebar-item"> |
149 | 149 | <div class="sidebar-item-container"> |
150 | | - <a href="./pages/setup.html" class="sidebar-item-text sidebar-link"> |
| 150 | + <a href="./pages/setup/index.html" class="sidebar-item-text sidebar-link"> |
151 | 151 | <span class="menu-text">Set-up</span></a> |
152 | 152 | </div> |
153 | 153 | </li> |
154 | 154 | <li class="sidebar-item"> |
155 | 155 | <div class="sidebar-item-container"> |
156 | | - <a href="./pages/basic_structure.html" class="sidebar-item-text sidebar-link"> |
| 156 | + <a href="./pages/basic_structure/index.html" class="sidebar-item-text sidebar-link"> |
157 | 157 | <span class="menu-text">Basic structure</span></a> |
158 | 158 | </div> |
159 | 159 | </li> |
160 | 160 | <li class="sidebar-item"> |
161 | 161 | <div class="sidebar-item-container"> |
162 | | - <a href="./pages/making_a_change.html" class="sidebar-item-text sidebar-link"> |
163 | | - <span class="menu-text">Making a change</span></a> |
| 162 | + <a href="./pages/making_a_change/index.html" class="sidebar-item-text sidebar-link"> |
| 163 | + <span class="menu-text">Exercise 1. Making a change</span></a> |
164 | 164 | </div> |
165 | 165 | </li> |
166 | 166 | <li class="sidebar-item"> |
167 | 167 | <div class="sidebar-item-container"> |
168 | | - <a href="./pages/markdown.html" class="sidebar-item-text sidebar-link"> |
169 | | - <span class="menu-text">Markdown basics</span></a> |
| 168 | + <a href="./pages/markdown/index.html" class="sidebar-item-text sidebar-link"> |
| 169 | + <span class="menu-text">Exercise 2. Markdown basics</span></a> |
170 | 170 | </div> |
171 | 171 | </li> |
172 | 172 | <li class="sidebar-item"> |
173 | 173 | <div class="sidebar-item-container"> |
174 | | - <a href="./pages/quarto_features.html" class="sidebar-item-text sidebar-link"> |
175 | | - <span class="menu-text">Quarto features</span></a> |
| 174 | + <a href="./pages/quarto_features/index.html" class="sidebar-item-text sidebar-link"> |
| 175 | + <span class="menu-text">Exercise 3. Quarto features</span></a> |
176 | 176 | </div> |
177 | 177 | </li> |
178 | 178 | <li class="sidebar-item"> |
179 | 179 | <div class="sidebar-item-container"> |
180 | | - <a href="./pages/media.html" class="sidebar-item-text sidebar-link"> |
181 | | - <span class="menu-text">Images, videos and documents</span></a> |
| 180 | + <a href="./pages/media/index.html" class="sidebar-item-text sidebar-link"> |
| 181 | + <span class="menu-text">Exercise 4. Images, videos and documents</span></a> |
182 | 182 | </div> |
183 | 183 | </li> |
184 | 184 | <li class="sidebar-item"> |
185 | 185 | <div class="sidebar-item-container"> |
186 | | - <a href="./pages/inline_html.html" class="sidebar-item-text sidebar-link"> |
187 | | - <span class="menu-text">Inline HTML</span></a> |
| 186 | + <a href="./pages/inline_html/index.html" class="sidebar-item-text sidebar-link"> |
| 187 | + <span class="menu-text">Exercise 5. Inline HTML</span></a> |
188 | 188 | </div> |
189 | 189 | </li> |
190 | 190 | <li class="sidebar-item"> |
191 | 191 | <div class="sidebar-item-container"> |
192 | | - <a href="./pages/customising.html" class="sidebar-item-text sidebar-link"> |
193 | | - <span class="menu-text">Customising the site appearance</span></a> |
| 192 | + <a href="./pages/customising/index.html" class="sidebar-item-text sidebar-link"> |
| 193 | + <span class="menu-text">Exercise 6. Customising the site appearance</span></a> |
194 | 194 | </div> |
195 | 195 | </li> |
| 196 | + </ul> |
| 197 | + </li> |
| 198 | + <li class="sidebar-item"> |
| 199 | + <div class="sidebar-item-container"> |
| 200 | + <a href="./pages/task/index.html" class="sidebar-item-text sidebar-link"> |
| 201 | + <span class="menu-text">Task: Create a site for your research</span></a> |
| 202 | + </div> |
| 203 | +</li> |
| 204 | + <li class="sidebar-item sidebar-item-section"> |
| 205 | + <div class="sidebar-item-container"> |
| 206 | + <a class="sidebar-item-text sidebar-link text-start" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-2" role="navigation" aria-expanded="true"> |
| 207 | + <span class="menu-text">Optional extras</span></a> |
| 208 | + <a class="sidebar-item-toggle text-start" data-bs-toggle="collapse" data-bs-target="#quarto-sidebar-section-2" role="navigation" aria-expanded="true" aria-label="Toggle section"> |
| 209 | + <i class="bi bi-chevron-right ms-2"></i> |
| 210 | + </a> |
| 211 | + </div> |
| 212 | + <ul id="quarto-sidebar-section-2" class="collapse list-unstyled sidebar-section depth1 show"> |
196 | 213 | <li class="sidebar-item"> |
197 | 214 | <div class="sidebar-item-container"> |
198 | | - <a href="./pages/code.html" class="sidebar-item-text sidebar-link"> |
199 | | - <span class="menu-text">Code</span></a> |
| 215 | + <a href="./pages/blog/index.html" class="sidebar-item-text sidebar-link"> |
| 216 | + <span class="menu-text">Listings (e.g., blog)</span></a> |
| 217 | + </div> |
| 218 | +</li> |
| 219 | + <li class="sidebar-item"> |
| 220 | + <div class="sidebar-item-container"> |
| 221 | + <a href="./pages/sass_css/index.html" class="sidebar-item-text sidebar-link"> |
| 222 | + <span class="menu-text">SASS and CSS</span></a> |
200 | 223 | </div> |
201 | 224 | </li> |
202 | 225 | <li class="sidebar-item"> |
203 | 226 | <div class="sidebar-item-container"> |
204 | | - <a href="./pages/summary.html" class="sidebar-item-text sidebar-link"> |
205 | | - <span class="menu-text">Summary</span></a> |
| 227 | + <a href="./pages/code/index.html" class="sidebar-item-text sidebar-link"> |
| 228 | + <span class="menu-text">Code</span></a> |
206 | 229 | </div> |
207 | 230 | </li> |
208 | 231 | </ul> |
209 | 232 | </li> |
210 | 233 | <li class="sidebar-item"> |
211 | 234 | <div class="sidebar-item-container"> |
212 | | - <a href="./pages/examples.html" class="sidebar-item-text sidebar-link"> |
| 235 | + <a href="./pages/examples/index.html" class="sidebar-item-text sidebar-link"> |
213 | 236 | <span class="menu-text">Examples</span></a> |
214 | 237 | </div> |
215 | 238 | </li> |
@@ -247,7 +270,96 @@ <h2 data-number="1.1" class="anchored" data-anchor-id="all-contributors"><span c |
247 | 270 | </section> |
248 | 271 |
|
249 | 272 | </main> <!-- /main --> |
250 | | -<script src="./styles/autopreview.js"></script> |
| 273 | +<script> |
| 274 | +(function () { |
| 275 | + const slides = Array.from(document.querySelectorAll('.slide')); |
| 276 | + const captionEl = document.getElementById('caption'); |
| 277 | + const counterEl = document.getElementById('counter'); |
| 278 | + const thumbsContainer = document.querySelector('.thumbnails'); |
| 279 | + const stage = document.querySelector('.slide-stage'); |
| 280 | + let current = 0; |
| 281 | + |
| 282 | + // Build arrow buttons |
| 283 | + function makeArrow(dir) { |
| 284 | + const btn = document.createElement('button'); |
| 285 | + btn.className = `arrow arrow-${dir}`; |
| 286 | + btn.setAttribute('aria-label', dir === 'left' ? 'Previous slide' : 'Next slide'); |
| 287 | + btn.innerHTML = dir === 'left' |
| 288 | + ? '<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"/></svg>' |
| 289 | + : '<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"/></svg>'; |
| 290 | + btn.addEventListener('click', () => goTo(dir === 'left' ? current - 1 : current + 1)); |
| 291 | + return btn; |
| 292 | + } |
| 293 | + stage.appendChild(makeArrow('left')); |
| 294 | + stage.appendChild(makeArrow('right')); |
| 295 | + |
| 296 | + // Build thumbnails |
| 297 | + const thumbEls = slides.map((slide, i) => { |
| 298 | + const li = document.createElement('div'); |
| 299 | + li.className = 'thumb' + (i === 0 ? ' active' : ''); |
| 300 | + li.setAttribute('role', 'listitem'); |
| 301 | + li.setAttribute('aria-label', 'Go to slide ' + (i + 1)); |
| 302 | + const img = document.createElement('img'); |
| 303 | + img.src = slide.querySelector('img').src; |
| 304 | + img.alt = ''; |
| 305 | + img.loading = 'lazy'; |
| 306 | + li.appendChild(img); |
| 307 | + li.addEventListener('click', () => goTo(i)); |
| 308 | + thumbsContainer.appendChild(li); |
| 309 | + return li; |
| 310 | + }); |
| 311 | + |
| 312 | + function goTo(index) { |
| 313 | + const n = ((index % slides.length) + slides.length) % slides.length; |
| 314 | + slides[current].classList.remove('active'); |
| 315 | + thumbEls[current].classList.remove('active'); |
| 316 | + current = n; |
| 317 | + slides[current].classList.add('active'); |
| 318 | + thumbEls[current].classList.add('active'); |
| 319 | + |
| 320 | + // Fade caption |
| 321 | + captionEl.classList.add('fade'); |
| 322 | + setTimeout(() => { |
| 323 | + captionEl.textContent = slides[current].dataset.caption || ''; |
| 324 | + counterEl.textContent = (current + 1) + ' / ' + slides.length; |
| 325 | + captionEl.classList.remove('fade'); |
| 326 | + }, 150); |
| 327 | + |
| 328 | + // Scroll thumb into view |
| 329 | + thumbEls[current].scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' }); |
| 330 | + } |
| 331 | + |
| 332 | + // Init |
| 333 | + captionEl.textContent = slides[0].dataset.caption || ''; |
| 334 | + counterEl.textContent = '1 / ' + slides.length; |
| 335 | + |
| 336 | + // Keyboard navigation |
| 337 | + document.addEventListener('keydown', e => { |
| 338 | + if (e.key === 'ArrowLeft') goTo(current - 1); |
| 339 | + if (e.key === 'ArrowRight') goTo(current + 1); |
| 340 | + }); |
| 341 | + |
| 342 | + // Theme toggle |
| 343 | + const toggle = document.querySelector('[data-theme-toggle]'); |
| 344 | + const root = document.documentElement; |
| 345 | + let theme = matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; |
| 346 | + root.setAttribute('data-theme', theme); |
| 347 | + updateToggleIcon(); |
| 348 | + |
| 349 | + toggle.addEventListener('click', () => { |
| 350 | + theme = theme === 'dark' ? 'light' : 'dark'; |
| 351 | + root.setAttribute('data-theme', theme); |
| 352 | + toggle.setAttribute('aria-label', 'Switch to ' + (theme === 'dark' ? 'light' : 'dark') + ' mode'); |
| 353 | + updateToggleIcon(); |
| 354 | + }); |
| 355 | + |
| 356 | + function updateToggleIcon() { |
| 357 | + toggle.innerHTML = theme === 'dark' |
| 358 | + ? '<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="5"/><path d="M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42"/></svg>' |
| 359 | + : '<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>'; |
| 360 | + } |
| 361 | +})(); |
| 362 | +</script> |
251 | 363 | <script id="quarto-html-after-body" type="application/javascript"> |
252 | 364 | window.document.addEventListener("DOMContentLoaded", function (event) { |
253 | 365 | const icon = ""; |
|
0 commit comments