hugo-theme-relearn/dev/index.print.html

514 lines
24 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="height=device-height, width=device-width, initial-scale=1.0, minimum-scale=1.0">
<meta name="generator" content="Hugo 0.110.0">
<meta name="generator" content="Relearn 5.11.2+tip">
<meta name="robots" content="noindex, nofollow, noarchive, noimageindex">
<meta name="description" content="Documentation for Hugo Relearn Theme">
<meta name="author" content="Sören Weber">
<title>Development :: Hugo Relearn Theme</title>
<link href="https://McShelby.github.io/hugo-theme-relearn/dev/index.html" rel="alternate" hreflang="x-default">
<link href="https://McShelby.github.io/hugo-theme-relearn/dev/index.html" rel="alternate" hreflang="en">
<link href="https://McShelby.github.io/hugo-theme-relearn/pir/dev/index.html" rel="alternate" hreflang="pir">
<link href="../images/logo.svg?1676046693" rel="icon" type="image/svg+xml">
<!-- https://github.com/filamentgroup/loadCSS/blob/master/README.md#how-to-use -->
<link href="../css/fontawesome-all.min.css?1676046695" rel="stylesheet" media="print" onload="this.media='all';this.onload=null;"><noscript><link href="../css/fontawesome-all.min.css?1676046695" rel="stylesheet"></noscript>
<link href="../css/nucleus.css?1676046695" rel="stylesheet">
<link href="../css/auto-complete.css?1676046695" rel="stylesheet" media="print" onload="this.media='all';this.onload=null;"><noscript><link href="../css/auto-complete.css?1676046695" rel="stylesheet"></noscript>
<link href="../css/perfect-scrollbar.min.css?1676046695" rel="stylesheet">
<link href="../css/fonts.css?1676046695" rel="stylesheet" media="print" onload="this.media='all';this.onload=null;"><noscript><link href="../css/fonts.css?1676046695" rel="stylesheet"></noscript>
<link href="../css/theme.css?1676046695" rel="stylesheet">
<link href="../css/theme-auto.css?1676046695" rel="stylesheet" id="variant-style">
<link href="../css/variant.css?1676046695" rel="stylesheet">
<link href="../css/print.css?1676046695" rel="stylesheet" media="print">
<link href="../css/format-print.css?1676046695" rel="stylesheet">
<link href="../css/ie.css?1676046695" rel="stylesheet">
<script src="../js/url.js?1676046695"></script>
<script src="../js/variant.js?1676046695"></script>
<script>
// hack to let hugo tell us how to get to the root when using relativeURLs, it needs to be called *url= for it to do its magic:
// https://github.com/gohugoio/hugo/blob/145b3fcce35fbac25c7033c91c1b7ae6d1179da8/transform/urlreplacers/absurlreplacer.go#L72
window.index_js_url="../index.search.js";
var root_url="../";
var baseUri=root_url.replace(/\/$/, '');
// translations
window.T_Copy_to_clipboard = 'Copy to clipboard';
window.T_Copied_to_clipboard = 'Copied to clipboard!';
window.T_Copy_link_to_clipboard = 'Copy link to clipboard';
window.T_Link_copied_to_clipboard = 'Copied link to clipboard!';
window.T_No_results_found = 'No results found for \u0022{0}\u0022';
window.T_N_results_found = '{1} results found for \u0022{0}\u0022';
// some further base stuff
var baseUriFull='https:\/\/McShelby.github.io\/hugo-theme-relearn/';
window.variants && variants.init( [ 'auto', 'relearn-light', 'relearn-dark', 'learn', 'neon', 'blue', 'green', 'red' ] );
</script>
<style>
#body img.bg-white {
background-color: white;
}
</style>
</head>
<body class="mobile-support print disableInlineCopyToClipboard" data-url="../dev/index.html">
<div id="body" class="default-animation">
<div id="sidebar-overlay"></div>
<div id="toc-overlay"></div>
<nav id="topbar" class="highlightable">
<div>
<div id="breadcrumbs">
<span id="sidebar-toggle-span">
<a href="#" id="sidebar-toggle" class="topbar-link" title='Menu (CTRL+ALT+n)'><i class="fas fa-bars fa-fw"></i></a>
</span>
<ol class="links" itemscope itemtype="http://schema.org/BreadcrumbList">
<li itemscope itemtype="https://schema.org/ListItem" itemprop="itemListElement"><a itemprop="item" href="../index.html"><span itemprop="name">Hugo Relearn Theme</span></a><meta itemprop="position" content="1"> > </li>
<li itemscope itemtype="https://schema.org/ListItem" itemprop="itemListElement"><span itemprop="name">Development</span><meta itemprop="position" content="2"></li>
</ol>
</div>
</div>
</nav>
<main id="body-inner" class="highlightable chapter narrow" tabindex="-1">
<div class="flex-block-wrapper">
<div id="head-tags">
</div>
<article class="chapter">
<div class="article-subheading">Chapter 4</div>
<h1 id="development">Development</h1>
<p>This chapter contains information only needed for development and maintaining the theme.</p>
<div class="children children-h2 children-sort-">
<h2><a href="../dev/contributing/index.html">Contributing</a></h2><p>What to know if you want to contribute</p>
<h2><a href="../dev/maintaining/index.html">Maintaining</a></h2><p>What to know as a maintainer</p>
<h2><a href="../dev/screenshots/index.html">Screenshots</a></h2><p>Recipe to create various documentation screenshots</p>
</div>
<footer class="footline">
</footer>
</article>
<section>
<h1 class="a11y-only">Subsections of Development</h1>
<article class="default">
<h1 id="contributing">Contributing</h1>
<h2 id="code-quality">Code Quality</h2>
<p>A new release can happen at any time from the <code>main</code> branch of the <a href="https://github.com/McShelby/hugo-theme-relearn" target="_blank">GitHub project</a> without further accknowledgment. This makes it necessary that, every pushed set of changesets into the <code>main</code> branch <strong>must</strong> be self-contained and correct, resulting in a releasable version.</p>
<p>Stay simple for the user by focusing on the mantra &ldquo;convention over configuration&rdquo;.</p>
<p>At installation the site should work reasonable without (m)any configuration.</p>
<p>Stay close to the Hugo way.</p>
<p>Don&rsquo;t use npm or any preprocessing, our contributors may not be front-end developers.</p>
<p>Document new features in the exampleSite. This also contains entries to the <a href="../basics/migration/">What&rsquo;s new</a> page.</p>
<p>Don&rsquo;t break existing features if you don&rsquo;t have to.</p>
<p>Remove reported issue from the browser&rsquo;s console.</p>
<p>Check for unnecessary whitespace and correct indention of your resulting HTML.</p>
<p>Be compatible to IE11, at least for main functionality, this means:</p>
<ul>
<li>test in IE11</li>
<li>check caniuse.com</li>
<li>don&rsquo;t use JavaScript arrow functions</li>
<li>don&rsquo;t use JavaScript template literals</li>
<li>don&rsquo;t use other fancy JavaScript ES5/6 stuff</li>
</ul>
<h2 id="conventional-commits">Conventional Commits</h2>
<p>Write commit messages in the <a href="https://www.conventionalcommits.org/en/v1.0.0/" target="_blank">conventional commit</a> format.</p>
<p>Following is an impomplete list of some of the used conventional commit types. Be creative.</p>
<table>
<thead>
<tr>
<th>Common</th>
<th>Feature</th>
<th>Structure</th>
<th>Shortcodes</th>
</tr>
</thead>
<tbody>
<tr>
<td>build</td>
<td>a11y</td>
<td>favicon</td>
<td>attachments</td>
</tr>
<tr>
<td>browser</td>
<td>archetypes</td>
<td>search</td>
<td>badge</td>
</tr>
<tr>
<td>chore</td>
<td>alias</td>
<td>menu</td>
<td>button</td>
</tr>
<tr>
<td>docs</td>
<td>generator</td>
<td>history</td>
<td>children</td>
</tr>
<tr>
<td>shortcodes</td>
<td>i18n</td>
<td>scrollbar</td>
<td>expand</td>
</tr>
<tr>
<td>theme</td>
<td>mobile</td>
<td>nav</td>
<td>icon</td>
</tr>
<tr>
<td></td>
<td>print</td>
<td>toc</td>
<td>include</td>
</tr>
<tr>
<td></td>
<td>rss</td>
<td>clipboard</td>
<td>math</td>
</tr>
<tr>
<td></td>
<td>variant</td>
<td>syntaxhighlight</td>
<td>mermaid</td>
</tr>
<tr>
<td></td>
<td></td>
<td>boxes</td>
<td>notice</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td>piratify</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td>siteparam</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td>swagger</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td>tabs</td>
</tr>
</tbody>
</table>
<footer class="footline">
</footer>
</article>
<article class="default">
<h1 id="maintaining">Maintaining</h1>
<h2 id="semver">Semver</h2>
<p>This project tries to follow the <a href="https://semver.org/" target="_blank">semver policy</a> - although not followed 100% in the past.</p>
<p>Usually an entry of <span class="badge cstyle warning badge-with-title"><span class="badge-title"><i class="fa-fw fas fa-exclamation-triangle"></i></span><span class="badge-content">Breaking</span></span> on the <a href="../basics/migration/">What&rsquo;s new</a> page causes a new major release number.</p>
<p>All other entries on the <a href="../basics/migration/">What&rsquo;s new</a> page will increase the minor release number.</p>
<p>Releases resulting in a new major or minor number are called main release.</p>
<p>Releases containing bugixes only, are only increasing the patch release number. Those releases don&rsquo;t result in announcements on the <a href="../basics/migration/">What&rsquo;s new</a> page.</p>
<p>Entries on the <a href="../basics/migration/">What&rsquo;s new</a> page are checked and enforced during the <code>version-release</code> GitHub Action.</p>
<h2 id="managing-issues">Managing Issues</h2>
<p>Issues are categorized and managed by assigning <a href="#labels">labels</a> to it.</p>
<p>Once working on an issue, assign it to a fitting maintainer.</p>
<p>When done, close the ticket. Once an issue is closed, it needs to be assigned to next release milestone.</p>
<p>A once released ticket is not allowed to be reopened and rereleased in a different milestone. This would cause the changelog to be changed even for the milestone the issue was previously released in. Instead write a new ticket.</p>
<h2 id="managing-pull-requests">Managing Pull Requests</h2>
<p>If a PR is merged and closed it needs an accompanied issue assigned to. If there is no issue for a PR, the maintainer needs to create one.</p>
<p>You can assign multiple PRs to one issue as long as they belong together.</p>
<p>Usually set the same labels and milestone for the PR as for the accompanied issue.</p>
<h2 id="labels">Labels</h2>
<h3 id="kind">Kind</h3>
<p>An issue that results in changesets must have exactly one of the following labels. This needs to be assigned latest before release.</p>
<table>
<thead>
<tr>
<th>Label</th>
<th>Description</th>
<th>Changelog section</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #5498d8;">documentation</span></span></td>
<td>Improvements or additions to documentation</td>
<td>-</td>
</tr>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #99d856;">discussion</span></span></td>
<td>This issue was converted to a discussion</td>
<td>-</td>
</tr>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #d8d104;">task</span></span></td>
<td>Maintainence work</td>
<td>Maintenance</td>
</tr>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #d8ae04;">feature</span></span></td>
<td>New feature or request</td>
<td>Features</td>
</tr>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #d88704;">bug</span></span></td>
<td>Something isn&rsquo;t working</td>
<td>Fixes</td>
</tr>
</tbody>
</table>
<h3 id="impact">Impact</h3>
<p>If the issue would cause a new main release due to <a href="#semver">semver semantics</a> it needs one of the according labels and the matching badge on the <a href="../basics/migration/">What&rsquo;s new</a> page.</p>
<table>
<thead>
<tr>
<th>Label</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #d73a4a;">change</span></span></td>
<td>Introduces changes with existing installations</td>
</tr>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #d73a4a;">breaking</span></span></td>
<td>Introduces breaking changes with existing installations</td>
</tr>
</tbody>
</table>
<h3 id="declination">Declination</h3>
<p>If an issue does not result in changesets but is closed anyways, it must have exactly one of the following labels.</p>
<table>
<thead>
<tr>
<th>Label</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #9fa2a5;">duplicate</span></span></td>
<td>This issue or pull request already exists</td>
</tr>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #9fa2a5;">invalid</span></span></td>
<td>This doesn&rsquo;t seem right</td>
</tr>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #9fa2a5;">unresolved</span></span></td>
<td>No progress on this issue</td>
</tr>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #9fa2a5;">wontfix</span></span></td>
<td>This will not be worked on</td>
</tr>
</tbody>
</table>
<h3 id="halt">Halt</h3>
<p>You can assign one further label out of the following list to signal readers that development on an open issue is currently halted for different reasons.</p>
<table>
<thead>
<tr>
<th>Label</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #998f6b;">blocked</span></span></td>
<td>Depends on other issue to be fixed first</td>
</tr>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #998f6b;">idea</span></span></td>
<td>A valuable idea that&rsquo;s currently not worked on</td>
</tr>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #998f6b;">undecided</span></span></td>
<td>No decission was made yet</td>
</tr>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #6426ff;">helpwanted</span></span></td>
<td>Great idea, send in a PR</td>
</tr>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #6426ff;">needsfeedback</span></span></td>
<td>Further information is needed</td>
</tr>
</tbody>
</table>
<h3 id="3rd-party">3rd-Party</h3>
<p>If the issue is not caused by a programming error in the themes own code, you can label the causing program or library.</p>
<table>
<thead>
<tr>
<th>Label</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #e550a7;">browser</span></span></td>
<td>This is a topic related to the browser but not the theme</td>
</tr>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #e550a7;">hugo</span></span></td>
<td>This is a topic related to Hugo itself but not the theme</td>
</tr>
<tr>
<td><span class="badge cstyle default"><span class="badge-content" style="background-color: #e550a7;">mermaid</span></span></td>
<td>This is a topic related to Mermaid itself but not the theme</td>
</tr>
</tbody>
</table>
<h2 id="making-releases">Making Releases</h2>
<p>A release is based on a milestone named like the release itself - just the version number, eg: <code>1.2.3</code>. It&rsquo;s in the maintainers responsiblity to check <a href="#semver">semver semantics</a> of the milestone&rsquo;s name prior to release and change it if necessary.</p>
<p>Making releases is automated by the <code>version-release</code> GitHub Action. It requires the version number of the milestone that should be released. The release will be created from the <code>main</code> branch of the repository.</p>
<p>Treat released milestones as immutable. Don&rsquo;t rerelease an already released milestone. An already released milestone may already been consumed by your users.</p>
<p>During execution of the action a few things are checked. If a check fails the action fails, resulting in no new release. You can correct the errors afterwards and rerun the action.</p>
<p>The following checks will be enforced</p>
<ul>
<li>the milestone exists</li>
<li>there is at least one closed issue assigned to the milestone</li>
<li>all assigned issues for this milestone are closed</li>
<li>if it&rsquo;s a main release, there must be a new <code>&lt;major&gt;.&lt;minor&gt;</code> at the beginning of the <a href="../basics/migration/">What&rsquo;s new</a> page</li>
<li>if it&rsquo;s a patch release, there must be the <code>&lt;major&gt;.&lt;minor&gt;</code> from the previous release at the beginning of the <a href="../basics/migration/">What&rsquo;s new</a> page</li>
</ul>
<p>After a successful run of the action</p>
<ul>
<li>the <a href="https://mcshelby.github.io/hugo-theme-relearn/basics/history/index.html" target="_blank">History</a> page is updated, including release version, release date and text</li>
<li>the <a href="https://mcshelby.github.io/hugo-theme-relearn/basics/migration/index.html" target="_blank">What&rsquo;s new</a> page is updated, including release version, release date and text</li>
<li>the version number for the <code>&lt;meta generator&gt;</code> is updated</li>
<li>the updated files are commited</li>
<li>the milestone is closed</li>
<li>the repository is tagged with the version number (eg. <code>1.2.3</code>), the main version number (eg. <code>1.2.x</code>) and the major version number (eg. <code>1.x</code>)</li>
<li>a new entry in the <a href="https://github.com/McShelby/hugo-theme-relearn/releases" target="_blank">GitHub release list</a> with the according changelog will be created</li>
<li>the <a href="https://mcshelby.github.io/hugo-theme-relearn/index.html" target="_blank">official documentation</a> is built and deployed</li>
<li>the version number for the <code>&lt;meta generator&gt;</code> is updated to a temporary and commited (this helps to determine if users are running directly on the main branch or are using releases)</li>
<li>a new milestone for the next patch release is created (this can later be renamed to a main release if necessary)</li>
</ul>
<footer class="footline">
</footer>
</article>
<article class="default">
<h1 id="screenshots">Screenshots</h1>
<p>Sometimes screenshots need to be redone. This page explains how to create the different screenshots, tools and settings</p>
<h2 id="common">Common</h2>
<p><strong>Creation</strong>:</p>
<ul>
<li>Use English translation</li>
<li>Empty search</li>
<li>Remove history checkmarks but leave it on the page thats used for the screenshot</li>
<li>After resize of the page into the required resolution, reload the page to have all scrollbars in default loading position</li>
</ul>
<h2 id="demo-screenshot">Demo Screenshot</h2>
<p><strong>Content</strong>:</p>
<p>A meaningful full-screen screenshot of an interesting page.</p>
<p>The content should be:</p>
<ul>
<li>timeless: not showing any dates or often edited content</li>
<li>interesting: show a bunch of interesting elements like headings, code, etc</li>
<li>balanced: no cluttering with overpresent elements or coloring</li>
<li>aligned: aligned outlines</li>
</ul>
<p><strong>Used by</strong>:</p>
<ul>
<li>Hugo Themes info: <a href="https://themes.gohugo.io/themes/hugo-theme-relearn/" target="_blank">https://themes.gohugo.io/themes/hugo-theme-relearn/</a> <em>1000 x 1500 @ 1</em></li>
</ul>
<p><strong>Page URL</strong>: <a href="../shortcodes/include/">Screenshot Link</a></p>
<p><strong>Creation</strong>:</p>
<ul>
<li>save as <code>images/screenshot.png</code></li>
</ul>
<p><strong>Remarks</strong>:</p>
<p>The location is mandatory due to Hugo&rsquo;s theme site builder.</p>
<h3 id="preview-imagesscreenshotpng">Preview <code>images/screenshot.png</code></h3>
<p>
<a href="#image-336a81a543ad1c1c8e34e10fd1c326ad" class="lightbox-link">
<img src="../images/screenshot.png?classes=shadow&amp;width=100%25&amp;height=100%25" alt="Screenshot" class="shadow" style="height: 100%; width: 100%;" loading="lazy">
</a>
<a href="javascript:history.back();" class="lightbox" id="image-336a81a543ad1c1c8e34e10fd1c326ad">
<img src="../images/screenshot.png?classes=shadow&amp;width=100%25&amp;height=100%25" alt="Screenshot" class="lightbox-image" loading="lazy">
</a></p>
<h2 id="hero-image">Hero Image</h2>
<p><strong>Content</strong>:</p>
<p>Show the <a href="#demo-screenshot">Demo Screenshot</a> page on different devices and different themes. Composition of the different device screenshots into a template.</p>
<p>The content should be:</p>
<ul>
<li>consistent: always use the same page for all devices</li>
<li>pleasing: use a delightful background</li>
</ul>
<p><strong>Used by</strong>:</p>
<ul>
<li>Hugo Themes gallery: <a href="https://themes.gohugo.io/tags/docs/" target="_blank">https://themes.gohugo.io/tags/docs/</a> <em>900 x 600</em></li>
<li>Hugo Themes notes: <a href="https://themes.gohugo.io/themes/hugo-theme-relearn/" target="_blank">https://themes.gohugo.io/themes/hugo-theme-relearn/</a> <em>1280 x 640</em></li>
<li>GitHub project site: <a href="https://github.com/McShelby/hugo-theme-relearn" target="_blank">https://github.com/McShelby/hugo-theme-relearn</a> <em>1280 x 640</em></li>
<li>GitHub social media preview: <a href="https://github.com/McShelby/hugo-theme-relearn/settings" target="_blank">https://github.com/McShelby/hugo-theme-relearn/settings</a> <em>1280 x 640</em></li>
</ul>
<p><strong>Page URL</strong>: <a href="../shortcodes/include/">Hero Image Link</a></p>
<p><strong>Creation</strong>:</p>
<ul>
<li>Template: <a href="http://www.pixeden.com/psd-web-elements/psd-screen-web-showcase" target="_blank">http://www.pixeden.com/psd-web-elements/psd-screen-web-showcase</a></li>
<li>Desktop: light theme <em>1440 x 900 @ 1</em></li>
<li>Tablet: light theme <em>778 x 1038 @ 1</em></li>
<li>Phone: dark theme <em>450 x 801 @ .666</em></li>
<li>From original template size resize to <em>2700 x 1800</em> centered, scale to <em>900 x 600</em> and save as <code>images/tn.png</code></li>
<li>From original template size resize to <em>3000 x 1500</em> offset y: <em>-330</em>, scale to <em>1280 x 640</em> and save as <code>images/hero.png</code></li>
</ul>
<p><strong>Remarks</strong>:</p>
<p>The location of <code>images/tn.png</code> is mandatory due to Hugo&rsquo;s theme site builder.</p>
<h3 id="preview-imagesheropng">Preview <code>images/hero.png</code></h3>
<p>
<a href="#image-506e132334fd3fa251c16ddc3c9a32f5" class="lightbox-link">
<img src="../images/hero.png?classes=shadow&amp;width=100%25&amp;height=100%25" alt="Hero" class="shadow" style="height: 100%; width: 100%;" loading="lazy">
</a>
<a href="javascript:history.back();" class="lightbox" id="image-506e132334fd3fa251c16ddc3c9a32f5">
<img src="../images/hero.png?classes=shadow&amp;width=100%25&amp;height=100%25" alt="Hero" class="lightbox-image" loading="lazy">
</a></p>
<h3 id="preview-imagestnpng">Preview <code>images/tn.png</code></h3>
<p>
<a href="#image-b49fc9f4244a9eaa54d63e118cadbed7" class="lightbox-link">
<img src="../images/tn.png?classes=shadow&amp;width=100%25&amp;height=100%25" alt="tn" class="shadow" style="height: 100%; width: 100%;" loading="lazy">
</a>
<a href="javascript:history.back();" class="lightbox" id="image-b49fc9f4244a9eaa54d63e118cadbed7">
<img src="../images/tn.png?classes=shadow&amp;width=100%25&amp;height=100%25" alt="tn" class="lightbox-image" loading="lazy">
</a></p>
<footer class="footline">
</footer>
</article>
</section> </div>
</main>
</div>
<script src="../js/clipboard.min.js?1676046695" defer></script>
<script src="../js/perfect-scrollbar.min.js?1676046695" defer></script>
<script src="../js/theme.js?1676046695" defer></script>
</body>
</html>