Skip to content

Commit c280c4b

Browse files
EssamSoftclaude
andcommitted
Add RTL toggle button for preview pane
Adds an RTL button (text-only, no icon) to both the desktop toolbar and mobile menu that toggles right-to-left direction on the markdown preview. State is persisted to localStorage and restored on page load. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent beb6b94 commit c280c4b

3 files changed

Lines changed: 27 additions & 0 deletions

File tree

index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ <h1 class="h4 mb-0 me-2">Markdown Viewer</h1>
139139
<i class="bi bi-share"></i> Share
140140
</button>
141141

142+
<button id="rtl-toggle" class="tool-button" title="Toggle RTL Preview">RTL</button>
143+
142144
<button id="theme-toggle" class="tool-button" title="Toggle Dark Mode">
143145
<i class="bi bi-moon"></i>
144146
</button>
@@ -235,6 +237,8 @@ <h5>Menu</h5>
235237
<i class="bi bi-share me-2"></i> Share
236238
</button>
237239

240+
<button id="mobile-rtl-toggle" class="mobile-menu-item" title="Toggle RTL Preview">RTL</button>
241+
238242
<button id="mobile-theme-toggle" class="mobile-menu-item" title="Toggle Dark Mode">
239243
<i class="bi bi-moon me-2"></i> Dark Mode
240244
</button>

script.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ document.addEventListener("DOMContentLoaded", function () {
6161
const mobileThemeToggle = document.getElementById("mobile-theme-toggle");
6262
const shareButton = document.getElementById("share-button");
6363
const mobileShareButton = document.getElementById("mobile-share-button");
64+
const rtlToggleButton = document.getElementById("rtl-toggle");
65+
const mobileRtlToggle = document.getElementById("mobile-rtl-toggle");
6466
const githubImportModal = document.getElementById("github-import-modal");
6567
const githubImportTitle = document.getElementById("github-import-title");
6668
const githubImportUrlInput = document.getElementById("github-import-url");
@@ -1524,6 +1526,18 @@ This is a fully client-side application. Your content never leaves your browser
15241526
saveGlobalState({ syncScrollingEnabled });
15251527
}
15261528

1529+
// RTL Preview Toggle
1530+
let rtlEnabled = false;
1531+
1532+
function toggleRTL() {
1533+
rtlEnabled = !rtlEnabled;
1534+
markdownPreview.setAttribute("dir", rtlEnabled ? "rtl" : "ltr");
1535+
[rtlToggleButton, mobileRtlToggle].forEach(btn => {
1536+
if (btn) btn.classList.toggle("rtl-active", rtlEnabled);
1537+
});
1538+
saveGlobalState({ rtlEnabled });
1539+
}
1540+
15271541
// View Mode Functions - Story 1.1 & 1.2
15281542
function setViewMode(mode) {
15291543
if (mode === currentViewMode) return;
@@ -1745,6 +1759,7 @@ This is a fully client-side application. Your content never leaves your browser
17451759

17461760
initTabs();
17471761
if (loadGlobalState().syncScrollingEnabled === false) toggleSyncScrolling();
1762+
if (loadGlobalState().rtlEnabled === true) toggleRTL();
17481763
updateMobileStats();
17491764

17501765
// Initialize resizer - Story 1.3
@@ -1801,6 +1816,8 @@ This is a fully client-side application. Your content never leaves your browser
18011816
editorPane.addEventListener("scroll", syncEditorToPreview);
18021817
previewPane.addEventListener("scroll", syncPreviewToEditor);
18031818
toggleSyncButton.addEventListener("click", toggleSyncScrolling);
1819+
rtlToggleButton.addEventListener("click", toggleRTL);
1820+
mobileRtlToggle.addEventListener("click", () => { toggleRTL(); closeMobileMenu(); });
18041821
themeToggle.addEventListener("click", function () {
18051822
const theme =
18061823
document.documentElement.getAttribute("data-theme") === "dark"

styles.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,12 @@ body {
302302
font-size: 16px;
303303
}
304304

305+
.tool-button.rtl-active {
306+
background-color: var(--button-active);
307+
border-color: var(--accent-color, #0969da);
308+
color: var(--accent-color, #0969da);
309+
}
310+
305311
.file-input {
306312
display: none;
307313
}

0 commit comments

Comments
 (0)