Update example website

This commit is contained in:
Andras Schmelczer 2025-06-15 14:46:51 +01:00
parent 3e87a68dfd
commit 4851e85986
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C
3 changed files with 245 additions and 225 deletions

View file

@ -3,88 +3,75 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta
name="description"
content="Easily merge three versions of a text document with this 3-way text merge tool."
/>
<meta property="og:title" content="3-Way Text Merge" />
<meta
property="og:description"
content="Easily merge three versions of a text document with this 3-way text merge tool."
/>
<meta property="og:type" content="website" />
<meta
property="og:url"
content="https://github.com/schmelczer/reconcile"
/>
<meta property="og:image" content="/favicon.ico" />
<link rel="icon" type="image/x-icon" href="favicon.ico" />
<title>3-Way Text Merge</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div class="container">
<header>
<h1>3-Way Text Merge</h1>
<div class="diamond-layout">
<div class="diamond-row diamond-row-top">
<div class="text-area diamond-parent">
<label for="original">Original</label>
<textarea id="original" rows="10"></textarea>
</div>
</div>
<div class="diamond-row diamond-row-middle">
<div class="text-area diamond-left">
<label for="left">Left</label>
<textarea id="left" rows="10"></textarea>
</div>
<div class="text-area diamond-right">
<label for="right">Right</label>
<textarea id="right" rows="10"></textarea>
</div>
</div>
<div class="diamond-row diamond-row-bottom">
<div class="diamond-bottom-content">
<button id="merge-button">Merge</button>
<div class="text-area diamond-result">
<label for="merged">Merged</label>
<textarea id="merged" rows="10" readonly></textarea>
</div>
</div>
</div>
<p>Use this tool to merge three versions of a text.</p>
</header>
<main>
<div class="text-area diamond-parent">
<label for="original">Original</label>
<textarea id="original" name="original"></textarea>
</div>
</div>
<script type="module">
import init, { mergeText } from "./reconcile.js";
async function run() {
await init();
<div class="text-area diamond-left">
<label for="left">First concurrent edit</label>
<textarea id="left" name="left"></textarea>
</div>
const originalTextArea = document.getElementById("original");
const leftTextArea = document.getElementById("left");
const rightTextArea = document.getElementById("right");
const mergedTextArea = document.getElementById("merged");
const mergeButton = document.getElementById("merge-button");
<div class="text-area diamond-right">
<label for="right">Second concurrent edit</label>
<textarea id="right" name="right"></textarea>
</div>
const sampleTexts = [
"The quick brown fox jumps over the lazy dog.",
"Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium.",
"A journey of a thousand miles begins with a single step.",
"To be, or not to be, that is the question.",
];
<button id="merge-button" type="button">Merge</button>
function loadSample() {
const randomIndex = Math.floor(
Math.random() * sampleTexts.length
);
const text = sampleTexts[randomIndex];
originalTextArea.value = text;
leftTextArea.value = text;
rightTextArea.value = text;
mergedTextArea.value = "";
}
<div class="text-area diamond-result">
<label for="merged">Deconflicted result (readonly)</label>
<textarea id="merged" name="merged" readonly></textarea>
</div>
</main>
mergeButton.addEventListener("click", () => {
const original = originalTextArea.value;
const left = leftTextArea.value;
const right = rightTextArea.value;
<footer>
<p>2025 Andras Schmelczer</p>
<a
href="https://github.com/schmelczer/reconcile"
class="github-link"
aria-label="GitHub repository"
>
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
>
<path
d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"
/>
</svg>
</a>
</footer>
try {
const result = mergeText(original, left, right);
mergedTextArea.value = result;
} catch (e) {
mergedTextArea.value = `Error: ${e}`;
}
});
window.addEventListener("load", loadSample);
}
run();
</script>
<script type="module" src="script.js"></script>
</body>
</html>