Skip to content

Commit 10f58ab

Browse files
committed
feat: add 2-line truncation with show more/less to stabilize quote layout
1 parent c1fefff commit 10f58ab

3 files changed

Lines changed: 73 additions & 3 deletions

File tree

Sprint-3/quote-generator/index.html

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,15 @@
1212
<body>
1313
<main class="quote-app">
1414
<h1>hello there</h1>
15-
<p id="quote"></p>
16-
<p id="author"></p>
15+
16+
<div class="quote-box">
17+
<p id="quote"></p>
18+
<p id="author"></p>
19+
</div>
20+
21+
<button type="button" id="toggle-quote">Show more</button>
1722
<button type="button" id="new-quote">New quote</button>
23+
1824
<div class="auto-play-controls">
1925
<label class="auto-play-label">
2026
<input type="checkbox" id="auto-play-toggle" />

Sprint-3/quote-generator/quotes.js

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -505,11 +505,34 @@ const authorEl = getElement("author");
505505
const newQuoteBtn = getElement("new-quote");
506506
const autoPlayToggle = getElement("auto-play-toggle");
507507
const autoPlayStatus = getElement("auto-play-status");
508+
const toggleQuoteBtn = getElement("toggle-quote");
508509

509510
newQuoteBtn.addEventListener("click", showRandomQuote);
510511

511512
let autoPlayInterval = null;
512513

514+
let isQuoteExpanded = false;
515+
516+
function updateQuoteToggleVisibility() {
517+
if (quoteEl.scrollHeight <= quoteEl.clientHeight) {
518+
toggleQuoteBtn.classList.add("hidden");
519+
} else {
520+
toggleQuoteBtn.classList.remove("hidden");
521+
}
522+
}
523+
524+
toggleQuoteBtn.addEventListener("click", () => {
525+
if (isQuoteExpanded) {
526+
quoteEl.classList.add("quote-clamped");
527+
toggleQuoteBtn.innerText = "Show more";
528+
isQuoteExpanded = false;
529+
} else {
530+
quoteEl.classList.remove("quote-clamped");
531+
toggleQuoteBtn.innerText = "Show less";
532+
isQuoteExpanded = true;
533+
}
534+
});
535+
513536
autoPlayToggle.addEventListener("click", () => {
514537
if (autoPlayToggle.checked) {
515538
autoPlayStatus.innerText = "auto-play: ON";
@@ -527,8 +550,13 @@ function showRandomQuote() {
527550
const randomQuote = pickFromArray(quotes);
528551

529552
quoteEl.innerText = randomQuote.quote;
530-
531553
authorEl.innerText = randomQuote.author;
554+
555+
isQuoteExpanded = false;
556+
quoteEl.classList.add("quote-clamped");
557+
toggleQuoteBtn.innerText = "Show more";
558+
559+
updateQuoteToggleVisibility();
532560
}
533561

534562
showRandomQuote();

Sprint-3/quote-generator/style.css

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,3 +58,39 @@ label {
5858
gap: 0.4rem;
5959
margin: 0;
6060
}
61+
62+
.quote-box {
63+
min-height: 5rem;
64+
margin-bottom: 1rem;
65+
}
66+
67+
#quote {
68+
margin-bottom: 0.5rem;
69+
line-height: 1.4;
70+
}
71+
72+
.quote-clamped {
73+
display: -webkit-box;
74+
-webkit-line-clamp: 2;
75+
-webkit-box-orient: vertical;
76+
overflow: hidden;
77+
}
78+
79+
#author {
80+
font-style: italic;
81+
color: #4b5563;
82+
}
83+
84+
#toggle-quote {
85+
margin-bottom: 0.75rem;
86+
padding: 0.3rem 0.75rem;
87+
border-radius: 999px;
88+
border: 1px solid #cbd5f5;
89+
background: #e5f0ff;
90+
font-size: 0.85rem;
91+
cursor: pointer;
92+
}
93+
94+
#toggle-quote.hidden {
95+
display: none;
96+
}

0 commit comments

Comments
 (0)