Hey am new to Javascript and am working on a quote website. I have a website which is a quote website example. To understand the question let see the CodePen.
The CodePen https://codepen.io/Akash11166666/pen/JjRzqzp
As saw in my CodePen there were some quotes and a copy buttons bellow them. Just see at the bottom of the page you can a selection which decides how many quotes do you want in a page.
Now my problem is that selection which is located in the bottom of the page. I don’t need the selection. I can solve it by removing all the other options. But I need it to be clean from root. I tried to remove the whole html of selection but it destroys the Javascript and none of the other functions work.
What I need is, can we remove the selection from html and it’s function from Javascript and make the quotes limited to 16 in per page.
I have asked with my friends but none of them got it. As am new to Javascript am not aware about this issues.
I thank in advance for those who answer this question.
For reference my CodePen project Html
<div class="mainStatus"> <h2 class="statusHeading">Latest English Status</h2> <div class="allquotes"></div> <div class="pagable-status"> <label>Page <span class="page-no-curr">1</span> of <span class="page-no-count">1</span></label> <div class="pagable-actions"> <button class="page-btn-first">≪</button> <button class="page-btn-prev"><</button> <input type="number" name="page-curr" min="1" value="1" /> <button class="page-btn-next">></button> <button class="page-btn-last">≫</button> <select name="page-size"> <option>5</option> <option>10</option> <option>20</option> </select> </div> <label>(<span class="result-count"></span> items)</label> </div>
Css
/* Main Status */ .hidden { display:none; } .mainStatus{ background-color: #fff; border-radius: 10px; box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2); padding-bottom: 5px; margin: 10px; margin-top: 10px; max-width: 95%; width: 95%; height: auto; border-radius: 20px; box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2); } .statusHeading{ text-align: center; background-color: #18b495; color: #ffffff; padding: 10px 10px 10px 10px; border-top-right-radius: 20px; border-top-left-radius: 20px; font-weight: 300; font-size: 20px; } .latestatus{ display: grid; height: auto; box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2); padding: 10px 20px 10px 20px; border-radius: 30px; margin: 10px 10px 10px 10px; width: 445px; min-height: 130px; font-size: 15px; } .allStatus{ display: flex; } .latestatus p{ width: auto; position: relative; } .copystatus{ font-weight: 500; text-transform: uppercase; width: 100px; height: 40px; } .pagable { display: flex; flex-direction: column; border: var(--pageable-border); background: var(--pageable-background); } .pagable .pagable-results { display: flex; flex-direction: column; flex: 1; padding: 0.25em; } .pagable .pagable-status { display: flex; flex-direction: row; justify-content: space-between; padding: 0.25em; background: var(--pageable-status-background); } .pagable .pagable-actions { display: grid; grid-auto-flow: column; grid-gap: 0.25em; } .pagable .pagable-actions input[name="page-curr"] { width: 3em; } .btn { display: inline-block; padding: 10px 20px; cursor: pointer; background: #18b495; color: #fff; border: none; border-radius: 30px; } .btn:hover { transform: scale(0.98); } .status-copy-alert { position: relative; background-color: #18b495; color: #ffffff; padding: 10px 10px; border-radius: 5px; left: 8px; text-transform: uppercase; letter-spacing: 0.05em; font-weight: 500; visibility: visible; } .status-copy-alert:before{ content:""; position: absolute; height: 10px; width: 10px; background-color: #18b495; left: -5px; transform: rotate(45deg); top: 39%; }
Javascript
const resultEl = document.querySelector('.allquotes'); const pageSize = document.querySelector('select[name="page-size"]'); const pageCurr = document.querySelector('input[name="page-curr"]') const resultCount = document.querySelector('.result-count') const pageNoCurr = document.querySelector('.page-no-curr'); const pageNoCount = document.querySelector('.page-no-count') const btnFirst = document.querySelector('.page-btn-first'); const btnPrev = document.querySelector('.page-btn-prev'); const btnNext = document.querySelector('.page-btn-next'); const btnLast = document.querySelector('.page-btn-last'); let results = []; const getResultCount = () => results.length; const getPageSize = () => +pageSize.value; const getCurrPage = () => +pageCurr.value; const getPageCount = () => Math.ceil(getResultCount() / getPageSize()); const pageResponse = (records, pageSize, page) => (start => records.slice(start, Math.min(records.length, start + pageSize))) (pageSize * (page - 1)); const main = async() => { btnFirst.addEventListener('click', navFirst); btnPrev.addEventListener('click', navPrev); btnNext.addEventListener('click', navNext); btnLast.addEventListener('click', navLast); pageSize.addEventListener('change', changeCount); results = await retrieveAllQuotes(); updatePager(results); redraw(); }; const redraw = () => { resultEl.innerHTML = ''; const paged = pageResponse(results, getPageSize(), getCurrPage()); const contents = document.createElement('div'); contents.innerHTML = paged.map(record => `<div class='latestatus'><p class='copytxt'>${record.quotes}</p><div> <button class="copystatus btn">Copy</button><span class="status-copy-alert hidden" id="status-copy-alert">Copied</span> </div></div>`).join(''); resultEl.append(contents); }; const navFirst = (e) => { pageNoCurr.textContent = 1; pageCurr.value = 1; redraw(); } const navPrev = (e) => { const pages = getPageCount(); const curr = getCurrPage(); const prevPage = curr > 1 ? curr - 1 : curr; pageCurr.value = prevPage; pageNoCurr.textContent = prevPage; redraw(); } const navNext = (e) => { const pages = getPageCount(); const curr = getCurrPage(); const nextPage = curr < pages ? curr + 1 : curr; pageCurr.value = nextPage; pageNoCurr.textContent = nextPage; redraw(); } const navLast = (e) => { pageNoCurr.textContent = getPageCount(); pageCurr.value = getPageCount(); redraw(); } const changeCount = () => { updatePager(); redraw(); }; const updatePager = () => { const count = getPageCount(); const curr = getCurrPage(); pageCurr.value = curr > count ? 1 : curr; pageNoCurr.textContent = curr > count ? 1 : curr; pageNoCount.textContent = count; resultCount.textContent = getResultCount(); }; const retrieveAllQuotes = async function() { // write your asynchronous fetching here return[{ quotes: "1The cat is better than dog." }, { quotes: "2Google is a open source library." }, { quotes: "3Cats are better than ferrets." }, { quotes: "4Love books." }, { quotes: "5Life is short make it possible." }, { quotes: "6The cat is better than dog" }, { quotes: "7Google is a open source library." }, { quotes: "8Cats are better than ferrets." }, { quotes: "9Love books." }, { quotes: "10Life is short make it possible." }, ]; } document.querySelector('.allquotes').addEventListener( 'click', function (e) { e.preventDefault(); if (e.target && e.target.matches('.copystatus')) { const quote = e.target.parentNode.closest('.latestatus') .childNodes[0].textContent; const notify = e.target.nextSibling.closest('.status-copy-alert'); notify.classList.toggle('hidden'); setTimeout(() => { notify.classList.add('hidden'); }, 600); const textArea = document.createElement('textarea'); textArea.value = quote; document.body.appendChild(textArea); textArea.select(); document.execCommand('Copy'); textArea.remove(); } }, false ); main();
Answer
There might be more to it (some event listeners need to be removed), but fundamentally just change
const getPageSize = () => +pageSize.value;
to
const getPageSize = () => 16;