Skip to content

Commit 80e14ca

Browse files
Merge pull request #138 from ThisIs-Developer/perf-layout-reflow-optimizations
fix: resolve welcome template first-run missing and new tab button duplication
2 parents ae39c84 + fca498f commit 80e14ca

4 files changed

Lines changed: 34 additions & 28 deletions

File tree

desktop-app/resources/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -854,7 +854,7 @@ <h3 class="modal-section-title">Open-source credits</h3>
854854
</div>
855855
</div>
856856

857-
<template id="default-markdown">---
857+
<script type="text/markdown" id="default-markdown">---
858858
title: Welcome to Markdown Viewer
859859
description: A GitHub-style Markdown renderer with live preview, math, diagrams, and export support.
860860
author: ThisIs-Developer
@@ -1021,7 +1021,7 @@ <h3 class="modal-section-title">Open-source credits</h3>
10211021
## 🛡️ Security Note
10221022

10231023
This is a fully client-side application. Your content never leaves your browser and stays secure on your device.
1024-
</template>
1024+
</script>
10251025

10261026
<script src="/libs/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
10271027
<script src="/js/neutralino.js"></script>

desktop-app/resources/js/script.js

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1139,18 +1139,21 @@ document.addEventListener("DOMContentLoaded", function () {
11391139
};
11401140

11411141
// "+ Create" button at end of tab list (placed outside tabList to prevent ARIA child violation)
1142-
const newBtn = document.createElement('button');
1143-
newBtn.className = 'tab-new-btn';
1144-
newBtn.title = 'New Tab (Ctrl+T)';
1145-
newBtn.setAttribute('aria-label', 'Open new tab');
1146-
newBtn.innerHTML = '<i class="bi bi-plus-lg"></i>';
1147-
newBtn.addEventListener('click', function() { newTab(); });
1148-
1149-
const resetBtn = document.getElementById('tab-reset-btn');
1150-
if (resetBtn) {
1151-
tabList.parentElement.insertBefore(newBtn, resetBtn);
1152-
} else {
1153-
tabList.parentElement.appendChild(newBtn);
1142+
let newBtn = tabList.parentElement.querySelector('.tab-new-btn');
1143+
if (!newBtn) {
1144+
newBtn = document.createElement('button');
1145+
newBtn.className = 'tab-new-btn';
1146+
newBtn.title = 'New Tab (Ctrl+T)';
1147+
newBtn.setAttribute('aria-label', 'Open new tab');
1148+
newBtn.innerHTML = '<i class="bi bi-plus-lg"></i>';
1149+
newBtn.addEventListener('click', function() { newTab(); });
1150+
1151+
const resetBtn = document.getElementById('tab-reset-btn');
1152+
if (resetBtn) {
1153+
tabList.parentElement.insertBefore(newBtn, resetBtn);
1154+
} else {
1155+
tabList.parentElement.appendChild(newBtn);
1156+
}
11541157
}
11551158

11561159
// Auto-scroll active tab into view (paint-aligned to prevent forced reflows)

index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -913,7 +913,7 @@ <h3 class="modal-section-title">Open-source credits</h3>
913913
</div>
914914
</div>
915915

916-
<template id="default-markdown">---
916+
<script type="text/markdown" id="default-markdown">---
917917
title: Welcome to Markdown Viewer
918918
description: A GitHub-style Markdown renderer with live preview, math, diagrams, and export support.
919919
author: ThisIs-Developer
@@ -1080,7 +1080,7 @@ <h3 class="modal-section-title">Open-source credits</h3>
10801080
## 🛡️ Security Note
10811081

10821082
This is a fully client-side application. Your content never leaves your browser and stays secure on your device.
1083-
</template>
1083+
</script>
10841084

10851085
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.2/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
10861086
<script src="script.js"></script>

script.js

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1139,18 +1139,21 @@ document.addEventListener("DOMContentLoaded", function () {
11391139
};
11401140

11411141
// "+ Create" button at end of tab list (placed outside tabList to prevent ARIA child violation)
1142-
const newBtn = document.createElement('button');
1143-
newBtn.className = 'tab-new-btn';
1144-
newBtn.title = 'New Tab (Ctrl+T)';
1145-
newBtn.setAttribute('aria-label', 'Open new tab');
1146-
newBtn.innerHTML = '<i class="bi bi-plus-lg"></i>';
1147-
newBtn.addEventListener('click', function() { newTab(); });
1148-
1149-
const resetBtn = document.getElementById('tab-reset-btn');
1150-
if (resetBtn) {
1151-
tabList.parentElement.insertBefore(newBtn, resetBtn);
1152-
} else {
1153-
tabList.parentElement.appendChild(newBtn);
1142+
let newBtn = tabList.parentElement.querySelector('.tab-new-btn');
1143+
if (!newBtn) {
1144+
newBtn = document.createElement('button');
1145+
newBtn.className = 'tab-new-btn';
1146+
newBtn.title = 'New Tab (Ctrl+T)';
1147+
newBtn.setAttribute('aria-label', 'Open new tab');
1148+
newBtn.innerHTML = '<i class="bi bi-plus-lg"></i>';
1149+
newBtn.addEventListener('click', function() { newTab(); });
1150+
1151+
const resetBtn = document.getElementById('tab-reset-btn');
1152+
if (resetBtn) {
1153+
tabList.parentElement.insertBefore(newBtn, resetBtn);
1154+
} else {
1155+
tabList.parentElement.appendChild(newBtn);
1156+
}
11541157
}
11551158

11561159
// Auto-scroll active tab into view (paint-aligned to prevent forced reflows)

0 commit comments

Comments
 (0)