Compare commits
No commits in common. "bvn-modularized" and "main" have entirely different histories.
bvn-modula
...
main
14
.eleventy.js
|
@ -1,14 +0,0 @@
|
|||
module.exports = function (eleventyConfig) {
|
||||
// ✅ Pass through static assets to the root of output
|
||||
eleventyConfig.addPassthroughCopy({ "src/images": "images" });
|
||||
eleventyConfig.addPassthroughCopy({ "src/styles": "styles" });
|
||||
eleventyConfig.addPassthroughCopy({ "src/scripts": "scripts" });
|
||||
|
||||
return {
|
||||
dir: {
|
||||
input: "src",
|
||||
output: "_site",
|
||||
includes: "_includes",
|
||||
},
|
||||
};
|
||||
};
|
|
@ -1 +0,0 @@
|
|||
node_modules/
|
|
@ -1,282 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Demo eCommerce website by Derek L. Seitz - dlseitz.dev">
|
||||
|
||||
<title>About - Bloom Valley Nursery Demo</title>
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/styles/variables.css">
|
||||
|
||||
<link rel="stylesheet" href="/styles/base.css">
|
||||
|
||||
<link rel="stylesheet" href="/styles/header-footer.css">
|
||||
|
||||
<link rel="stylesheet" href="/styles/about.css">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="https://kit.fontawesome.com/abc7c3b0da.js" crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<header role="banner">
|
||||
<div class="logo">
|
||||
<img
|
||||
src="images/Client1_LogoPalette2_F0C06D.png"
|
||||
alt="Bloom Valley Nursery Logo"/>
|
||||
</div>
|
||||
<h1>Bloom Valley Nursery</h1>
|
||||
<!-- Navigation Bar -->
|
||||
<nav role="navigation" aria-label="Main Navigation">
|
||||
<ul>
|
||||
<li>
|
||||
<a href="/" aria-current="page" class="current-page">Home</a></li>
|
||||
<li><a href="/gallery/">Gallery</a></li>
|
||||
<li><a href="/about/">About Us</a></li>
|
||||
<li><a href="/community/">Community Events</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<button
|
||||
id="shopping-cart"
|
||||
aria-label="Open shopping cart"
|
||||
class="fa-solid fa-cart-shopping fa-2xl">
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
|
||||
|
||||
<div id="main-top">
|
||||
<aside
|
||||
id="business-info"
|
||||
aria-label="Hours of operation and contact info"
|
||||
>
|
||||
<h3>Contact Us</h3>
|
||||
<div id="phone">
|
||||
<h4><strong>Phone:</strong></h4>
|
||||
<p>(555) 123-4567</p>
|
||||
</div>
|
||||
<h3>Hours of Operation</h3>
|
||||
<div id="hours">
|
||||
<h4><strong>Monday - Friday:</strong></h4>
|
||||
<p>9:00 AM - 6:00 PM</p>
|
||||
<h4><strong>Saturday & Sunday:</strong></h4>
|
||||
<p>10:00 AM - 5:00 PM</p>
|
||||
</div>
|
||||
</aside>
|
||||
<div id="story" aria-label="History of Bloom Valley Nursery">
|
||||
<h1>The Story of Bloom Valley</h1>
|
||||
<p>
|
||||
Legend has it that in 1822, Benjamin Bloom, his wife Violet, and
|
||||
their young daughter Nora stumbled upon a breathtaking valley
|
||||
brimming with vibrant, rare flowers during their journey westward.
|
||||
Enchanted by its beauty, they decided to settle there, abandoning
|
||||
their plans to reach California. This picturesque haven became known
|
||||
as Bloom Valley.
|
||||
</p>
|
||||
<p>
|
||||
Today, on the very land where the Bloom family found their paradise,
|
||||
stands Bloom Valley Nursery. Still family-owned and operated,
|
||||
siblings Bethany, Vincent, and Nathaniel Bloom carry forward a
|
||||
legacy of preserving and sharing the natural beauty that captivated
|
||||
the hearts of their ancestors over two centuries ago.
|
||||
</p>
|
||||
<p>Though many things have changed through the years, our commitment to serving our community has remained the same. Let us help you cultivate joy, one bloom at a time!</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="main-bottom">
|
||||
<div id="feedback" aria-label="Feedback form">
|
||||
<div id="feedback-intro">
|
||||
<h1>We Want to Hear From You!</h1>
|
||||
<h3>Your feedback provides us with valuable insight into where we stand in our commitment to our neighbors, friends, and the entire Bloom Valley community.</h3>
|
||||
<p>Feel free to contact us by filling out the form below if you have any questions, concerns, or simply want to tell us how we can better serve you in the future. You are also welcome to give us a call at the number above if you need to speak with someone directly. Our friendly staff can help answer your questions or guide you in placing custom orders as well!</p>
|
||||
</div>
|
||||
<div id="feedback-form">
|
||||
<form action="#" method="POST">
|
||||
<div id="customer-info">
|
||||
<div id="name-field">
|
||||
<label for="name">Name:</label>
|
||||
<input
|
||||
type="text"
|
||||
id="name"
|
||||
name="name"
|
||||
aria-label="Enter your name here" placeholder="Your Name"
|
||||
required/>
|
||||
</div>
|
||||
<div id="phone-field">
|
||||
<label for="tel">Phone Number:</label>
|
||||
<input
|
||||
type="tel"
|
||||
id="tel"
|
||||
name="telephone"
|
||||
aria-label="Enter your contact phone number here" placeholder="Your Phone Number"
|
||||
required/>
|
||||
</div>
|
||||
<div id="email-field">
|
||||
<label for="email">Email:</label>
|
||||
<input
|
||||
type="email"
|
||||
id="email"
|
||||
name="email"
|
||||
aria-label="Enter your contact email here" placeholder="user@domain.com"
|
||||
required/>
|
||||
</div>
|
||||
</div>
|
||||
<div id="customer-message">
|
||||
<div id="message-field">
|
||||
<label for="message">Message:</label>
|
||||
<textarea
|
||||
id="message"
|
||||
name="message"
|
||||
rows="5"
|
||||
aria-label="Enter feedback or inquiries here" placeholder="Enter feedback or inquiries here..."
|
||||
required>
|
||||
</textarea>
|
||||
</div>
|
||||
<div id="form-submit-btn">
|
||||
<button
|
||||
id="form-submit"
|
||||
type="submit"
|
||||
aria-label="Submit feedback or inquiry"
|
||||
>Submit
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
<!-- Footer Section -->
|
||||
<footer role="contentinfo">
|
||||
<div id="newsletter-container">
|
||||
<label for="email-input" class="hidden">Enter your email to subscribe to our newsletter</label>
|
||||
<form id="newsletter-form">
|
||||
<input
|
||||
type="email"
|
||||
id="email-input"
|
||||
aria-label="Enter your email to Subscribe"
|
||||
placeholder="Subscribe@BloomValleyNursery.com"
|
||||
/>
|
||||
<button id="submit-btn" type="submit" aria-label="Submit the subscribe form">
|
||||
Subscribe Now!
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div id="footer-nav">
|
||||
<ul>
|
||||
<li><a href="/" class="current-page">Home</a></li>
|
||||
<li><a href="/gallery/">Gallery</a></li>
|
||||
<li><a href="/about/">About Us</a></li>
|
||||
<li><a href="/community/">Community Events</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="social-media">
|
||||
<p>Check us out on social media!</p>
|
||||
<ul class="social-icons">
|
||||
<li id="pinterest">
|
||||
<a href="#" aria-label="Follow us on Pinterest"
|
||||
><i class="fa-brands fa-square-pinterest fa-lg"></i></a></li>
|
||||
<li id="facebook">
|
||||
<a href="#" aria-label="Follow us on Facebook"
|
||||
><i class="fa-brands fa-facebook fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="instagram">
|
||||
<a href="#" aria-label="Follow us on Instagram"
|
||||
><i class="fa-brands fa-instagram fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="twitter">
|
||||
<a href="#" aria-label="Follow us on X (Twitter)"
|
||||
><i class="fa-brands fa-square-x-twitter fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="youtube">
|
||||
<a href="#" aria-label="View our Youtube channel"
|
||||
><i class="fa-brands fa-youtube fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="copyright">© 2025, Derek L. Seitz, <a href="https://dlseitz.dev">dlseitz.dev.</a></div>
|
||||
</footer>
|
||||
<!-- Custom Newsletter Modal -->
|
||||
<div id="custom-alert" class="modal hidden">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="alert-close-btn">×</span>
|
||||
<p id="alert-message"></p>
|
||||
<button id="alert-ok-button">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Shopping Cart -->
|
||||
<div id="cart-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal">×</span>
|
||||
<h2>Your Shopping Cart</h2>
|
||||
<ul id="cart-items"></ul> <!-- Dynamically populated -->
|
||||
<p id="cart-total"></p> <!-- Sub-total will appear here -->
|
||||
<div class="modal-buttons">
|
||||
<button id="clear-cart-modal-btn">Clear Cart</button>
|
||||
<button id="process-order-modal-btn">Process Order</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Item Added -->
|
||||
<div id="item-added-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="item-added-close">×</span>
|
||||
<p id="item-added-message"></p> <!-- Dynamically set message -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Confirmation Modal -->
|
||||
<div id="confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="confirmation-close-btn">×</span>
|
||||
<p id="confirmation-message"></p> <!-- Dynamic confirmation message -->
|
||||
<button id="confirmation-confirm-btn">Confirm</button>
|
||||
<button id="confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Final Confirmation Modal -->
|
||||
<div id="final-confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="final-confirmation-close-btn">×</span>
|
||||
<p id="final-confirmation-message"></p> <!-- Message after successful action -->
|
||||
<button id="final-confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- <a href="https://www.svgbackgrounds.com/set/free-svg-backgrounds-and-patterns/">Free SVG Backgrounds and Patterns by SVGBackgrounds.com</a> -->
|
||||
|
||||
|
||||
|
||||
<script src="/scripts/feedback.js"></script>
|
||||
|
||||
<script src="/scripts/cart.js"></script>
|
||||
|
||||
<script src="/scripts/newsletter.js"></script>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,264 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Demo eCommerce website by Derek L. Seitz - dlseitz.dev">
|
||||
|
||||
<title>Community Events - Bloom Valley Nursery Demo</title>
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/styles/variables.css">
|
||||
|
||||
<link rel="stylesheet" href="/styles/base.css">
|
||||
|
||||
<link rel="stylesheet" href="/styles/header-footer.css">
|
||||
|
||||
<link rel="stylesheet" href="/styles/community.css">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="https://kit.fontawesome.com/abc7c3b0da.js" crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<header role="banner">
|
||||
<div class="logo">
|
||||
<img
|
||||
src="images/Client1_LogoPalette2_F0C06D.png"
|
||||
alt="Bloom Valley Nursery Logo"/>
|
||||
</div>
|
||||
<h1>Bloom Valley Nursery</h1>
|
||||
<!-- Navigation Bar -->
|
||||
<nav role="navigation" aria-label="Main Navigation">
|
||||
<ul>
|
||||
<li>
|
||||
<a href="/" aria-current="page" class="current-page">Home</a></li>
|
||||
<li><a href="/gallery/">Gallery</a></li>
|
||||
<li><a href="/about/">About Us</a></li>
|
||||
<li><a href="/community/">Community Events</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<button
|
||||
id="shopping-cart"
|
||||
aria-label="Open shopping cart"
|
||||
class="fa-solid fa-cart-shopping fa-2xl">
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
|
||||
|
||||
<h1>Mark Your Calendars!</h1>
|
||||
<div id="calendar-events-container">
|
||||
<div class="calendar">
|
||||
<iframe
|
||||
src="https://calendar.google.com/calendar/embed?src=your_calendar_id&ctz=America/Chicago"
|
||||
style="border: 0; width: 90vww; height: 600px"
|
||||
frameborder="0"
|
||||
scrolling="no" aria-label="Google Calendar displaying upcoming events at Bloom Valley Nursery">
|
||||
</iframe><!-- change "your_calendar_id" to an actual Google Calendar ID (Not possible due to the Client Scenario being fictional. This would require creating a fake Google account.)-->
|
||||
</div>
|
||||
<section class="events" aria-label="List of upcoming local events">
|
||||
<h2>Upcoming Events</h2>
|
||||
<div class="event-list">
|
||||
<div id="bvn-events">
|
||||
<h3>Events at Bloom Valley Nursery</h3>
|
||||
<p>
|
||||
All workshops at Bloom Valley Nursery are provided free of charge to
|
||||
anyone interested in learning techniques and ideas for creating a
|
||||
visually appealing living space that can be personalized to suite
|
||||
individual needs. Registration links are provided in each Google
|
||||
Calendar Event by clicking on the date of the event within the
|
||||
Google Calendar on this page.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Gardening and Landscaping 101:</strong><br><strong>When:</strong><br> 2nd Tuesday of
|
||||
Every Month @ 6:30 pm.<br>Join Bethany Bloom as she shares her tips for
|
||||
creating a themed decor through-out the home that you will be
|
||||
delighted to share with your holiday guests.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Deck the Halls</strong><br><strong>When:</strong> Saturday @ 10:00 am.<br>Join
|
||||
Nathaniel and Vincent as they guide us through picking and tending
|
||||
the perfect live Christmas tree for your Christmas decoration
|
||||
focal-point.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Christmas Eve and Christmas Day</strong><br><strong>Bloom Valley
|
||||
Nursery will close on Christmas Eve at 8:00 pm</strong> for any last-minute
|
||||
shopping.<br>The nursery will remain <strong>closed until January 2nd</strong>. During
|
||||
this time, we will be making improvements to the nursery grounds and
|
||||
store with the aim of better serving our Bloom Valley neighbors,
|
||||
friends and family. We are excited to share the new features and changes with
|
||||
you in the New Year!<br><strong>Happy Holidays!!!</strong>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="community-wide">
|
||||
<h3>Community-Wide Events</h3>
|
||||
<p>
|
||||
This section includes local community events for which Bloom Valley
|
||||
Nursery is in partner with or a sponsor of. These events are
|
||||
typically free of charge, but can include sub-events by other local
|
||||
organizations and businesses that may not be free of charge. Check
|
||||
with specific organizations, businesses, and the Bloom Valley
|
||||
Chamber of Commerce for specific details that may not be provided by
|
||||
Bloom Valley Nursery.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Tree Lighting Ceremony</strong><br><strong>When:</strong></br>Thursday @ 6:00 pm.<br>
|
||||
Help us kick off the Holiday festivities by joining the Bloom
|
||||
family, along with the Bloom Valley Chamber of Commerce, the Bloom
|
||||
Valley Garden Club, and many other local businesses and
|
||||
organizations, as we gather <strong>in front of City Hall</strong> for the annual Tree
|
||||
Lighting Ceremony! This event will include performances by the Bloom
|
||||
Valley Junior and Senior High Marching Bands, a workshop for making
|
||||
tree ornaments, the annual Chili Cook-off, and much more!
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- Add more events as needed -->
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<p>
|
||||
For more details, to add events to this page, or to leave feedback,
|
||||
<a
|
||||
href="/about/#feedback"
|
||||
aria-label="Go to the feedback form on the About Us page to leave feedback or inquiries."
|
||||
>click here</a
|
||||
> to send us a message.
|
||||
</p>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
<!-- Footer Section -->
|
||||
<footer role="contentinfo">
|
||||
<div id="newsletter-container">
|
||||
<label for="email-input" class="hidden">Enter your email to subscribe to our newsletter</label>
|
||||
<form id="newsletter-form">
|
||||
<input
|
||||
type="email"
|
||||
id="email-input"
|
||||
aria-label="Enter your email to Subscribe"
|
||||
placeholder="Subscribe@BloomValleyNursery.com"
|
||||
/>
|
||||
<button id="submit-btn" type="submit" aria-label="Submit the subscribe form">
|
||||
Subscribe Now!
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div id="footer-nav">
|
||||
<ul>
|
||||
<li><a href="/" class="current-page">Home</a></li>
|
||||
<li><a href="/gallery/">Gallery</a></li>
|
||||
<li><a href="/about/">About Us</a></li>
|
||||
<li><a href="/community/">Community Events</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="social-media">
|
||||
<p>Check us out on social media!</p>
|
||||
<ul class="social-icons">
|
||||
<li id="pinterest">
|
||||
<a href="#" aria-label="Follow us on Pinterest"
|
||||
><i class="fa-brands fa-square-pinterest fa-lg"></i></a></li>
|
||||
<li id="facebook">
|
||||
<a href="#" aria-label="Follow us on Facebook"
|
||||
><i class="fa-brands fa-facebook fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="instagram">
|
||||
<a href="#" aria-label="Follow us on Instagram"
|
||||
><i class="fa-brands fa-instagram fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="twitter">
|
||||
<a href="#" aria-label="Follow us on X (Twitter)"
|
||||
><i class="fa-brands fa-square-x-twitter fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="youtube">
|
||||
<a href="#" aria-label="View our Youtube channel"
|
||||
><i class="fa-brands fa-youtube fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="copyright">© 2025, Derek L. Seitz, <a href="https://dlseitz.dev">dlseitz.dev.</a></div>
|
||||
</footer>
|
||||
<!-- Custom Newsletter Modal -->
|
||||
<div id="custom-alert" class="modal hidden">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="alert-close-btn">×</span>
|
||||
<p id="alert-message"></p>
|
||||
<button id="alert-ok-button">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Shopping Cart -->
|
||||
<div id="cart-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal">×</span>
|
||||
<h2>Your Shopping Cart</h2>
|
||||
<ul id="cart-items"></ul> <!-- Dynamically populated -->
|
||||
<p id="cart-total"></p> <!-- Sub-total will appear here -->
|
||||
<div class="modal-buttons">
|
||||
<button id="clear-cart-modal-btn">Clear Cart</button>
|
||||
<button id="process-order-modal-btn">Process Order</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Item Added -->
|
||||
<div id="item-added-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="item-added-close">×</span>
|
||||
<p id="item-added-message"></p> <!-- Dynamically set message -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Confirmation Modal -->
|
||||
<div id="confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="confirmation-close-btn">×</span>
|
||||
<p id="confirmation-message"></p> <!-- Dynamic confirmation message -->
|
||||
<button id="confirmation-confirm-btn">Confirm</button>
|
||||
<button id="confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Final Confirmation Modal -->
|
||||
<div id="final-confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="final-confirmation-close-btn">×</span>
|
||||
<p id="final-confirmation-message"></p> <!-- Message after successful action -->
|
||||
<button id="final-confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- <a href="https://www.svgbackgrounds.com/set/free-svg-backgrounds-and-patterns/">Free SVG Backgrounds and Patterns by SVGBackgrounds.com</a> -->
|
||||
|
||||
|
||||
|
||||
<script src="/scripts/cart.js"></script>
|
||||
|
||||
<script src="/scripts/newsletter.js"></script>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,227 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Demo eCommerce website by Derek L. Seitz - dlseitz.dev">
|
||||
|
||||
<title>Gallery - Bloom Valley Nursery Demo</title>
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/styles/variables.css">
|
||||
|
||||
<link rel="stylesheet" href="/styles/base.css">
|
||||
|
||||
<link rel="stylesheet" href="/styles/header-footer.css">
|
||||
|
||||
<link rel="stylesheet" href="/styles/gallery.css">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="https://kit.fontawesome.com/abc7c3b0da.js" crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<header role="banner">
|
||||
<div class="logo">
|
||||
<img
|
||||
src="images/Client1_LogoPalette2_F0C06D.png"
|
||||
alt="Bloom Valley Nursery Logo"/>
|
||||
</div>
|
||||
<h1>Bloom Valley Nursery</h1>
|
||||
<!-- Navigation Bar -->
|
||||
<nav role="navigation" aria-label="Main Navigation">
|
||||
<ul>
|
||||
<li>
|
||||
<a href="/" aria-current="page" class="current-page">Home</a></li>
|
||||
<li><a href="/gallery/">Gallery</a></li>
|
||||
<li><a href="/about/">About Us</a></li>
|
||||
<li><a href="/community/">Community Events</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<button
|
||||
id="shopping-cart"
|
||||
aria-label="Open shopping cart"
|
||||
class="fa-solid fa-cart-shopping fa-2xl">
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
|
||||
|
||||
<div id="gallery-top">
|
||||
<section id="product-carousel-feature" aria-label="Interactive Carousel of Available Products by Category.">
|
||||
<h2>Products by Category</h2>
|
||||
<div id="product-category-card">
|
||||
<button
|
||||
id="scroll-left"
|
||||
aria-label="Scroll products left"
|
||||
aria-controls="product-carousel"
|
||||
class="fa-solid fa-chevron-left"
|
||||
>
|
||||
</button>
|
||||
<div id="product-carousel">
|
||||
<div id="product-list"><!--Product Cards will be dynamically inserted here--></div>
|
||||
</div>
|
||||
<button
|
||||
id="scroll-right"
|
||||
aria-label="Scroll products right"
|
||||
aria-controls="product-carousel"
|
||||
class="fa-solid fa-chevron-right"
|
||||
>
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
<aside id="right-aside">
|
||||
<div id="category-nav-container" aria-label="Available Product Categories">
|
||||
<h2>Shop by Category</h2>
|
||||
<div class="categories">
|
||||
<ul>
|
||||
<li><a href="/gallery/?category=trees#" class="cat-btn">Trees</a></li>
|
||||
<li><a href="/gallery/?category=trees#" class="cat-btn">Shrubs</a></li>
|
||||
<li><a href="/gallery/?category=indoor#" class="cat-btn">Indoor</a></li>
|
||||
<li><a href="/gallery/?category=indoor#" class="cat-btn">Patio</a></li>
|
||||
<li><a href="/gallery/?category=tools#" class="cat-btn">Tools</a></li>
|
||||
<li><a href="/gallery/?category=tools#" class="cat-btn">Accessories</a></li>
|
||||
<li><a href="/gallery/?category=tools#" class="cat-btn">Landscaping</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
<div id="gallery-bottom">
|
||||
<button id="cart-details">View Shopping Cart</button>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<!-- Footer Section -->
|
||||
<footer role="contentinfo">
|
||||
<div id="newsletter-container">
|
||||
<label for="email-input" class="hidden">Enter your email to subscribe to our newsletter</label>
|
||||
<form id="newsletter-form">
|
||||
<input
|
||||
type="email"
|
||||
id="email-input"
|
||||
aria-label="Enter your email to Subscribe"
|
||||
placeholder="Subscribe@BloomValleyNursery.com"
|
||||
/>
|
||||
<button id="submit-btn" type="submit" aria-label="Submit the subscribe form">
|
||||
Subscribe Now!
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div id="footer-nav">
|
||||
<ul>
|
||||
<li><a href="/" class="current-page">Home</a></li>
|
||||
<li><a href="/gallery/">Gallery</a></li>
|
||||
<li><a href="/about/">About Us</a></li>
|
||||
<li><a href="/community/">Community Events</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="social-media">
|
||||
<p>Check us out on social media!</p>
|
||||
<ul class="social-icons">
|
||||
<li id="pinterest">
|
||||
<a href="#" aria-label="Follow us on Pinterest"
|
||||
><i class="fa-brands fa-square-pinterest fa-lg"></i></a></li>
|
||||
<li id="facebook">
|
||||
<a href="#" aria-label="Follow us on Facebook"
|
||||
><i class="fa-brands fa-facebook fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="instagram">
|
||||
<a href="#" aria-label="Follow us on Instagram"
|
||||
><i class="fa-brands fa-instagram fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="twitter">
|
||||
<a href="#" aria-label="Follow us on X (Twitter)"
|
||||
><i class="fa-brands fa-square-x-twitter fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="youtube">
|
||||
<a href="#" aria-label="View our Youtube channel"
|
||||
><i class="fa-brands fa-youtube fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="copyright">© 2025, Derek L. Seitz, <a href="https://dlseitz.dev">dlseitz.dev.</a></div>
|
||||
</footer>
|
||||
<!-- Custom Newsletter Modal -->
|
||||
<div id="custom-alert" class="modal hidden">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="alert-close-btn">×</span>
|
||||
<p id="alert-message"></p>
|
||||
<button id="alert-ok-button">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Shopping Cart -->
|
||||
<div id="cart-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal">×</span>
|
||||
<h2>Your Shopping Cart</h2>
|
||||
<ul id="cart-items"></ul> <!-- Dynamically populated -->
|
||||
<p id="cart-total"></p> <!-- Sub-total will appear here -->
|
||||
<div class="modal-buttons">
|
||||
<button id="clear-cart-modal-btn">Clear Cart</button>
|
||||
<button id="process-order-modal-btn">Process Order</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Item Added -->
|
||||
<div id="item-added-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="item-added-close">×</span>
|
||||
<p id="item-added-message"></p> <!-- Dynamically set message -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Confirmation Modal -->
|
||||
<div id="confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="confirmation-close-btn">×</span>
|
||||
<p id="confirmation-message"></p> <!-- Dynamic confirmation message -->
|
||||
<button id="confirmation-confirm-btn">Confirm</button>
|
||||
<button id="confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Final Confirmation Modal -->
|
||||
<div id="final-confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="final-confirmation-close-btn">×</span>
|
||||
<p id="final-confirmation-message"></p> <!-- Message after successful action -->
|
||||
<button id="final-confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- <a href="https://www.svgbackgrounds.com/set/free-svg-backgrounds-and-patterns/">Free SVG Backgrounds and Patterns by SVGBackgrounds.com</a> -->
|
||||
|
||||
|
||||
|
||||
<script src="/scripts/gallery-carousel.js"></script>
|
||||
|
||||
<script src="/scripts/script.js"></script>
|
||||
|
||||
<script src="/scripts/cart.js"></script>
|
||||
|
||||
<script src="/scripts/newsletter.js"></script>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
266
_site/index.html
|
@ -1,266 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="Demo eCommerce website by Derek L. Seitz - dlseitz.dev">
|
||||
|
||||
<title>Landing - Bloom Valley Nursery Demo</title>
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/styles/variables.css">
|
||||
|
||||
<link rel="stylesheet" href="/styles/base.css">
|
||||
|
||||
<link rel="stylesheet" href="/styles/header-footer.css">
|
||||
|
||||
<link rel="stylesheet" href="/styles/index.css">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="https://kit.fontawesome.com/abc7c3b0da.js" crossorigin="anonymous"></script>
|
||||
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<header role="banner">
|
||||
<div class="logo">
|
||||
<img
|
||||
src="images/Client1_LogoPalette2_F0C06D.png"
|
||||
alt="Bloom Valley Nursery Logo"/>
|
||||
</div>
|
||||
<h1>Bloom Valley Nursery</h1>
|
||||
<!-- Navigation Bar -->
|
||||
<nav role="navigation" aria-label="Main Navigation">
|
||||
<ul>
|
||||
<li>
|
||||
<a href="/" aria-current="page" class="current-page">Home</a></li>
|
||||
<li><a href="/gallery/">Gallery</a></li>
|
||||
<li><a href="/about/">About Us</a></li>
|
||||
<li><a href="/community/">Community Events</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<button
|
||||
id="shopping-cart"
|
||||
aria-label="Open shopping cart"
|
||||
class="fa-solid fa-cart-shopping fa-2xl">
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
|
||||
|
||||
<!-- Main Content Section -->
|
||||
|
||||
<aside id="left-aside">
|
||||
<div id="perks-feature-container" aria-label="Reasons for Shopping With Bloom Valley Nursery">
|
||||
<h2 id="perks-heading">Shopper Perks</h2>
|
||||
<div class="perk-item" aria-label="Perk">
|
||||
<h3>- 50% Off Deal -</h3>
|
||||
<p>New subscribers to our newsletter this month will receive a coupon for 50% off their first purchase! Click here for details! Terms and conditions apply.</p>
|
||||
</div>
|
||||
<div class="perk-item" aria-label="Perk">
|
||||
<h3>Exceptional Quality</h3>
|
||||
<p>Every plant is carefully cultivated from seed or bulb to maturity, offering you vibrant, healthy specimens.</p>
|
||||
</div>
|
||||
<div class="perk-item" aria-label="Perk">
|
||||
<h3>Expert Guidance</h3>
|
||||
<p>Our knowledgeable team is here to help, from selecting the perfect plants to offering planting tips.</p>
|
||||
</div>
|
||||
<div class="perk-item" aria-label="Perk">
|
||||
<h3>Eco-Friendly Practices</h3>
|
||||
<p>We prioritize sustainability by using environmentally conscious growing methods, so you can feel good about your choices.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="testimonials-feature" aria-label="Customer Testimonials About Their Experience With Bloom Valley Nursery.">
|
||||
<h2>What Others Say</h2>
|
||||
<div class="testimonial-container">
|
||||
<div class="testimonial" aria-label="Customer Testimonial.">
|
||||
<p>"My order arrived the very next day. The speed of delivery and high-quality products provided by Bloom Valley Nursery helped my project go smoothly from start to finish!"</p>
|
||||
<h3>- Caroline N.</h3>
|
||||
</div>
|
||||
<div class="testimonial" aria-label="Customer Testimonial.">
|
||||
<p>"Thanks to the Gardening 101 Workshop with Bethany and Bloom Valley Nursery's amazing line of products, I won 'Best Azaleas' at the 2024 Royal Horticultural Society's American Cup!"</p>
|
||||
<h3>- Morris F.</h3>
|
||||
</div>
|
||||
<div class="testimonial" aria-label="Customer Testimonial.">
|
||||
<p>"Bloom Valley Nursery's community garden inspired me take charge of my health. I was able to lose 50 pounds!"</p>
|
||||
<h3>- Gladis B.</h3>
|
||||
</div>
|
||||
</div> </div>
|
||||
</aside>
|
||||
<!--<div id="featured-images">
|
||||
<div class="featured-item">
|
||||
<img src="image1.jpg" alt="Feature 1">
|
||||
</div>-->
|
||||
<section id="featured-container" aria-label="Featured items of the week">
|
||||
<h2> This Week's Featured Items</h2>
|
||||
<ul id="featured-images" aria-label="Images of this week's featured items">
|
||||
<li><a href="/gallery/" id="featured-aloe-plant">
|
||||
<img src="images/indoor/AloePlant.png" alt="An Aloe Vera plant in a turquoise ceramic planter." class="featured-item">Aloe Vera / Turquoise Planter</a></li>
|
||||
<li><a href="/gallery/" id="featured-bird-house">
|
||||
<img src="images/accessories/BirdHouse.png" alt="A handmade wooden birdhouse painted blue." class="featured-item">Handmade Wooden Birdhouse - Blue</a></li>
|
||||
<li><a href="/gallery/" id="featured-apple-tree">
|
||||
<img src="images/trees/AppleTree.png" alt="A Red Gala apple sapling in a burlap wrap." class="featured-item">Red Gala Apple Sapling - Burlap Bound</a></li>
|
||||
<li><a href="/gallery/" id="featured-potting-soil">
|
||||
<img src="images/accessories/PottingSoil.png" alt="A 10 lbs bag of potting soil." class="featured-item">Potting Soil - 10 lbs Bag</a></li>
|
||||
<li><a href="/gallery/" id="featured-spider-plant">
|
||||
<img src="images/indoor/SpiderPlant.png" alt="A Spider plant in a light gray ceramic planter." class="featured-item">Spider Plant / Light Gray Planter</a></li>
|
||||
<li><a href="/gallery/" id="featured-birch-tree">
|
||||
<img src="images/trees/BirchTree.png" alt="A Silver Birch sapling in a disposable plastic container." class="featured-item">Silver Birch Sapling - Containerized</a></li>
|
||||
<li><a href="/gallery/" id="featured-watering-can">
|
||||
<img src="images/accessories/WateringCan.png" alt="A blue painted aluminum watering can." class="featured-item">Painted Aluminum Watering Can - Blue</a></li>
|
||||
<li><a href="/gallery/" id="featured-string-of-pearls">
|
||||
<img src="images/indoor/StringofPearls.png" alt="String-of-pearls plant in hanging white ceramic planter." class="featured-item">String-of-Pearls Plant / Hanging White Planter</a></li>
|
||||
<li><a href="/gallery/" id="featured-maple-tree">
|
||||
<img src="images/trees/MapleTree.png" alt="A Japanese Maple sapling in a burlap wrap." class="featured-item">Japanese Maple Sapling - Burlap Bound</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
<aside id="right-aside">
|
||||
<div id="category-nav-container" aria-label="Available Product Categories">
|
||||
<h2>Shop by Category</h2>
|
||||
<div class="categories">
|
||||
<ul>
|
||||
<li><a href="/gallery/?category=trees#" class="cat-btn">Trees</a></li>
|
||||
<li><a href="/gallery/?category=shrubs#" class="cat-btn">Shrubs</a></li>
|
||||
<li><a href="/gallery/?category=indoor#" class="cat-btn">Indoor</a></li>
|
||||
<li><a href="/gallery/?category=patio#" class="cat-btn">Patio</a></li>
|
||||
<li><a href="/gallery/?category=tools#" class="cat-btn">Tools</a></li>
|
||||
<li><a href="/gallery/?category=accessories#" class="cat-btn">Accessories</a></li>
|
||||
<li><a href="/gallery/?category=landscaping#" class="cat-btn">Landscaping</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
<!-- Content specific to this page goes here -->
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
<!-- Footer Section -->
|
||||
<footer role="contentinfo">
|
||||
<div id="newsletter-container">
|
||||
<label for="email-input" class="hidden">Enter your email to subscribe to our newsletter</label>
|
||||
<form id="newsletter-form">
|
||||
<input
|
||||
type="email"
|
||||
id="email-input"
|
||||
aria-label="Enter your email to Subscribe"
|
||||
placeholder="Subscribe@BloomValleyNursery.com"
|
||||
/>
|
||||
<button id="submit-btn" type="submit" aria-label="Submit the subscribe form">
|
||||
Subscribe Now!
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div id="footer-nav">
|
||||
<ul>
|
||||
<li><a href="/" class="current-page">Home</a></li>
|
||||
<li><a href="/gallery/">Gallery</a></li>
|
||||
<li><a href="/about/">About Us</a></li>
|
||||
<li><a href="/community/">Community Events</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="social-media">
|
||||
<p>Check us out on social media!</p>
|
||||
<ul class="social-icons">
|
||||
<li id="pinterest">
|
||||
<a href="#" aria-label="Follow us on Pinterest"
|
||||
><i class="fa-brands fa-square-pinterest fa-lg"></i></a></li>
|
||||
<li id="facebook">
|
||||
<a href="#" aria-label="Follow us on Facebook"
|
||||
><i class="fa-brands fa-facebook fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="instagram">
|
||||
<a href="#" aria-label="Follow us on Instagram"
|
||||
><i class="fa-brands fa-instagram fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="twitter">
|
||||
<a href="#" aria-label="Follow us on X (Twitter)"
|
||||
><i class="fa-brands fa-square-x-twitter fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="youtube">
|
||||
<a href="#" aria-label="View our Youtube channel"
|
||||
><i class="fa-brands fa-youtube fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="copyright">© 2025, Derek L. Seitz, <a href="https://dlseitz.dev">dlseitz.dev.</a></div>
|
||||
</footer>
|
||||
<!-- Custom Newsletter Modal -->
|
||||
<div id="custom-alert" class="modal hidden">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="alert-close-btn">×</span>
|
||||
<p id="alert-message"></p>
|
||||
<button id="alert-ok-button">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Shopping Cart -->
|
||||
<div id="cart-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal">×</span>
|
||||
<h2>Your Shopping Cart</h2>
|
||||
<ul id="cart-items"></ul> <!-- Dynamically populated -->
|
||||
<p id="cart-total"></p> <!-- Sub-total will appear here -->
|
||||
<div class="modal-buttons">
|
||||
<button id="clear-cart-modal-btn">Clear Cart</button>
|
||||
<button id="process-order-modal-btn">Process Order</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Item Added -->
|
||||
<div id="item-added-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="item-added-close">×</span>
|
||||
<p id="item-added-message"></p> <!-- Dynamically set message -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Confirmation Modal -->
|
||||
<div id="confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="confirmation-close-btn">×</span>
|
||||
<p id="confirmation-message"></p> <!-- Dynamic confirmation message -->
|
||||
<button id="confirmation-confirm-btn">Confirm</button>
|
||||
<button id="confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Final Confirmation Modal -->
|
||||
<div id="final-confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="final-confirmation-close-btn">×</span>
|
||||
<p id="final-confirmation-message"></p> <!-- Message after successful action -->
|
||||
<button id="final-confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- <a href="https://www.svgbackgrounds.com/set/free-svg-backgrounds-and-patterns/">Free SVG Backgrounds and Patterns by SVGBackgrounds.com</a> -->
|
||||
|
||||
|
||||
|
||||
<script src="/scripts/script.js"></script>
|
||||
|
||||
<script src="/scripts/cart.js"></script>
|
||||
|
||||
<script src="/scripts/newsletter.js"></script>
|
||||
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,93 +0,0 @@
|
|||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const feedbackForm = document.querySelector('#feedback-form form');
|
||||
const nameInput = document.getElementById('name');
|
||||
const emailInput = document.getElementById('email');
|
||||
const phoneInput = document.getElementById('tel');
|
||||
const messageInput = document.getElementById('message');
|
||||
|
||||
const alertBox = document.getElementById('custom-alert');
|
||||
const alertMessage = document.getElementById('alert-message');
|
||||
const alertOkButton = document.getElementById('alert-ok-button');
|
||||
const alertCloseButton = document.getElementById('alert-close-btn');
|
||||
|
||||
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; // Email validation regex
|
||||
const phoneRegex = /^[0-9]{10,15}$/; // Phone validation regex (10-15 digits)
|
||||
const nameRegex = /^[a-zA-Z\s]{2,}$/; // Name validation regex (at least 2 letters)
|
||||
const sqlInjectionRegex = /[;'"\\]/; // Prevent SQL injection-like characters
|
||||
|
||||
// Form submission handler
|
||||
feedbackForm.addEventListener('submit', (event) => {
|
||||
event.preventDefault(); // Prevent form submission and page refresh
|
||||
|
||||
const name = nameInput.value.trim();
|
||||
const email = emailInput.value.trim();
|
||||
const phone = phoneInput.value.trim();
|
||||
const message = messageInput.value.trim();
|
||||
|
||||
// Validate each field
|
||||
if (!nameRegex.test(name)) {
|
||||
showCustomAlert('Please enter a valid name (letters and spaces only).');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!emailRegex.test(email)) {
|
||||
showCustomAlert('Please enter a valid email address.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!phoneRegex.test(phone)) {
|
||||
showCustomAlert('Please enter a valid phone number (10-15 digits).');
|
||||
return;
|
||||
}
|
||||
|
||||
if (sqlInjectionRegex.test(message)) {
|
||||
showCustomAlert('Your message contains invalid characters.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Save feedback to localStorage
|
||||
const feedbackData = {
|
||||
name,
|
||||
email,
|
||||
phone,
|
||||
message,
|
||||
timestamp: new Date().toISOString(),
|
||||
};
|
||||
|
||||
// Retrieve existing feedback data or initialize an empty array
|
||||
const feedbackList = JSON.parse(localStorage.getItem('feedbackList')) || [];
|
||||
feedbackList.push(feedbackData); // Add new feedback to the list
|
||||
localStorage.setItem('feedbackList', JSON.stringify(feedbackList)); // Save updated list to localStorage
|
||||
console.log('Feedback saved to localStorage:', feedbackList);
|
||||
|
||||
// Show success message
|
||||
showCustomAlert('Thank you for your feedback! We appreciate hearing from you.');
|
||||
feedbackForm.reset(); // Clear the input fields after submission
|
||||
});
|
||||
|
||||
// Function to show the custom alert modal
|
||||
function showCustomAlert(message) {
|
||||
alertMessage.textContent = message; // Set modal message
|
||||
alertBox.classList.remove('hidden'); // Display the modal
|
||||
alertBox.style.display = 'flex'; // Ensure the modal is visible
|
||||
}
|
||||
|
||||
// Function to close the custom alert modal
|
||||
function closeCustomAlert() {
|
||||
alertBox.classList.add('hidden'); // Hide the modal
|
||||
alertBox.style.display = 'none'; // Ensure it's hidden
|
||||
}
|
||||
|
||||
// Close modal on "OK" button click
|
||||
alertOkButton.addEventListener('click', closeCustomAlert);
|
||||
|
||||
// Close modal on "X" button click
|
||||
alertCloseButton.addEventListener('click', closeCustomAlert);
|
||||
|
||||
// Close modal when clicking outside the modal content
|
||||
window.addEventListener('click', (event) => {
|
||||
if (event.target === alertBox) {
|
||||
closeCustomAlert();
|
||||
}
|
||||
});
|
||||
});
|
|
@ -1,217 +0,0 @@
|
|||
/* |--↓-↓-↓ Start about.html ↓-↓-↓--| */
|
||||
#about-page main {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
#main-top {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
width: 95vw;
|
||||
position: center;
|
||||
}
|
||||
|
||||
#business-info {
|
||||
display: block;
|
||||
align-items: center;
|
||||
width: 25vw;
|
||||
background-color:#f0c06d;
|
||||
border: solid #f7f7f7;
|
||||
border-radius: 10px;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5);
|
||||
|
||||
}
|
||||
|
||||
#phone,
|
||||
#hours {
|
||||
background-color: #f7f7f7;
|
||||
border: solid #bdd4da;
|
||||
border-radius: 10px;
|
||||
margin: 5px 10px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#business-info h3,
|
||||
#feedback-intro h1 {
|
||||
font-size: 1.875rem;
|
||||
text-align: center;
|
||||
text-shadow: 0.5px 0.5px 2px #014038, /* Bottom-right base shadow */
|
||||
-0.5px -0.5px 2px #014038, /* Top-left base shadow */
|
||||
-0.5px 0.5px 2px #014038, /* Bottom-left base shadow */
|
||||
0.5px -0.5px 2px #014038; /* Top-right base shadow */
|
||||
color: #f7f7f7;
|
||||
background-color: #96baa0;
|
||||
border: solid #f7f7f7;
|
||||
max-width: 75vw;
|
||||
border-radius: 10px;
|
||||
padding-left: 10px;
|
||||
transform: translateX(0px);
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#business-info p {
|
||||
text-align: center;
|
||||
font-size: 14pt;
|
||||
}
|
||||
|
||||
#business-info h4 {
|
||||
text-align: center;
|
||||
background-color: #bdd4da;
|
||||
border: solid #f7f7f7;
|
||||
border-radius: 15px;
|
||||
padding: 0 10px;
|
||||
width: 50%;
|
||||
margin-left: 22.5%;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
#story {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: left;
|
||||
width: 70vw;
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
#story h1 {
|
||||
background-color: #96baa0;
|
||||
color: #f7f7f7;
|
||||
border: solid #f7f7f7;
|
||||
border-radius: 15px;
|
||||
text-shadow: 0.5px 0.5px 2px #014038, /* Bottom-right base shadow */
|
||||
-0.5px -0.5px 2px #014038, /* Top-left base shadow */
|
||||
-0.5px 0.5px 2px #014038, /* Bottom-left base shadow */
|
||||
0.5px -0.5px 2px #014038; /* Top-right base shadow */
|
||||
width: 50%;
|
||||
padding: 5px 10px;
|
||||
text-align: center;
|
||||
margin-right: 12.5%;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#story p {
|
||||
color: #014038;
|
||||
font-size: 1.25rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#feedback {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background-color: #96baa0;
|
||||
border: solid #f7f7f7;
|
||||
border-radius: 15px;
|
||||
width: 90vw;
|
||||
margin-top: 30px;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#feedback h1 {
|
||||
background-color: #a4ccd6;
|
||||
border: solid #f7f7f7;
|
||||
border-radius: 10px;
|
||||
width: 50vw;
|
||||
padding: 5px 10px;
|
||||
text-align: center;
|
||||
margin-left: 25vw;
|
||||
margin-right: 25vw;
|
||||
text-shadow: 0.5px 0.5px 2px #014038, /* Bottom-right base shadow */
|
||||
-0.5px -0.5px 2px #014038, /* Top-left base shadow */
|
||||
-0.5px 0.5px 2px #014038, /* Bottom-left base shadow */
|
||||
0.5px -0.5px 2px #014038; /* Top-right base shadow */
|
||||
box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#feedback h3 {
|
||||
color: #00231c;
|
||||
font-weight: bold;
|
||||
width: 85vw;
|
||||
text-align: center;
|
||||
margin-left: 7.5vw;
|
||||
margin-right: 7.5vw;
|
||||
|
||||
}
|
||||
|
||||
#feedback p {
|
||||
color: #00231c;
|
||||
width: 85vw;
|
||||
text-align: center;
|
||||
margin-left: 7.5vw;
|
||||
margin-right: 7.5vw;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#feedback-form form{
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 20px;
|
||||
align-items: baseline;
|
||||
width: 95%;
|
||||
margin-top: 20px; /* Adds some spacing above the form */
|
||||
}
|
||||
|
||||
#customer-info {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-content: center;
|
||||
width: 95%; /* Adjusted width */
|
||||
gap: 25px; /* Adds spacing between input fields */
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#customer-info input {
|
||||
background-color: #f7f7f7;
|
||||
border: solid #014038;
|
||||
border-radius: 15px;
|
||||
width: 90%; /* Ensures the input fields fill the section width */
|
||||
height: 30px; /* Adjusts height to match the textarea */
|
||||
text-align: center;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
#customer-message {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 90%; /* Adjusted width */
|
||||
}
|
||||
|
||||
#customer-message #message-field textarea {
|
||||
width: 50vw; /* Takes full width of the section */
|
||||
height: 30vh; /* Adjust height as needed */
|
||||
background-color: #f7f7f7;
|
||||
border: solid #014038;
|
||||
border-radius: 15px;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
#form-submit-btn {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
margin-top: 10px;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
#form-submit {
|
||||
padding: 10px 20px;
|
||||
background-color: #bdd4da;
|
||||
border: solid #f7f7f7;
|
||||
border-radius: 10px;
|
||||
color: #014038;
|
||||
font-size: 1rem;
|
||||
cursor: pointer;
|
||||
margin-bottom: 10px;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
#form-submit:hover {
|
||||
background-color: #f7f7f7;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
/* | ↑-↑-↑ End About.html ↑-↑-↑--| */
|
|
@ -1,87 +0,0 @@
|
|||
* Global Styles */
|
||||
html {
|
||||
font-size: 17px; /* Base font size for scaling */
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
font-family: 'Calibri', sans-serif;
|
||||
font-size: 1rem; /* Default font size based on 16px */
|
||||
line-height: 1.5;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background-color: #bdd4da; /* Sky Bloom */
|
||||
}
|
||||
|
||||
body h1 {
|
||||
text-shadow: 0.5px 0.5px .5px #f7f7f7, /* Bottom-right top shadow */
|
||||
-0.5px -0.5px .5px #f7f7f7, /* Top-left top shadow */
|
||||
-0.5px 0.5px .5px #f7f7f7, /* Bottom-left top shadow */
|
||||
0.5px -0.5px .5px #f7f7f7; /* Top-right top shadow */
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Title Large (Arial Bold 30px) */
|
||||
h1 {
|
||||
font-family: 'Arial', sans-serif;
|
||||
font-weight: bold;
|
||||
font-size: 1.875rem; /* 30px for title */
|
||||
}
|
||||
|
||||
/* Title (Arial Bold 25px) */
|
||||
h2 {
|
||||
font-family: 'Arial', sans-serif;
|
||||
font-weight: bold;
|
||||
font-size: 1.5625rem;
|
||||
}
|
||||
|
||||
/* Subtitle (Comfortaa Normal 15px) */
|
||||
h3 {
|
||||
font-family: 'Comfortaa', sans-serif;
|
||||
font-size: .9375rem ; /* 15px for subtitle */
|
||||
}
|
||||
|
||||
/* Body Large (Calibri Normal 20px) */
|
||||
p.body-large {
|
||||
font-family: 'Calibri', sans-serif;
|
||||
font-size: 1.25rem; /* 20px for body large */
|
||||
}
|
||||
|
||||
/* Body Strong (Calibri Bold 16px) */
|
||||
strong {
|
||||
font-family: 'Calibri', sans-serif;
|
||||
font-weight: bold;
|
||||
font-size: 1rem; /* 16px for body strong */
|
||||
}
|
||||
|
||||
/* Body (Calibri Normal 16px) */
|
||||
p.body {
|
||||
font-family: 'Calibri', sans-serif;
|
||||
font-size: 1rem; /* 16px for regular body text */
|
||||
}
|
||||
|
||||
/* Captions (Arial Bold 11px) */
|
||||
figcaption {
|
||||
font-family: 'Arial', sans-serif;
|
||||
font-weight: bold;
|
||||
font-size: .6875rem; /* 11px for captions */
|
||||
}
|
||||
|
||||
@media (max-width: 780px) {
|
||||
html{
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
main {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
padding: 20px;
|
||||
}
|
|
@ -1,105 +0,0 @@
|
|||
/* |--↓-↓-↓ Start Community.html ↓-↓-↓--| */
|
||||
#community-page {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
align-items: center;
|
||||
gap: 20px;
|
||||
width: 95vh;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
#community-page h1 {
|
||||
font-size: 1.6rem;
|
||||
background-color: #96baa0;
|
||||
border: solid #f7f7f7;
|
||||
border-radius: 15px;
|
||||
width: 50vw;
|
||||
color: #f7f7f7;
|
||||
text-decoration: underline;
|
||||
text-shadow: 0.5px 0.5px 1px #014038, /* Bottom-right base shadow */
|
||||
-0.5px -0.5px 1px #014038, /* Top-left base shadow */
|
||||
-0.5px 0.5px 1px #014038, /* Bottom-left base shadow */
|
||||
0.5px -0.5px 1px #014038; /* Top-right base shadow */
|
||||
padding: 5px 10px;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
#calendar-events-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 20px;
|
||||
border: none;
|
||||
}
|
||||
.calendar iframe{
|
||||
width: 80vw;
|
||||
height: auto;
|
||||
margin-bottom: 20px;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.events {
|
||||
background-color: #f0c06d;
|
||||
border: solid #014038;
|
||||
border-radius: 15px;
|
||||
padding: 10px;
|
||||
width: 95vw;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.events h2 {
|
||||
background-color: #96baa0;
|
||||
border: solid #f7f7f7;
|
||||
border-radius: 15px;
|
||||
padding: 10px 15px;
|
||||
width: 50vw;
|
||||
text-decoration: underline;
|
||||
font-weight: bold;
|
||||
font-size: 1.4rem;
|
||||
text-align: center;
|
||||
margin-left: 20vw;
|
||||
transform: translateY(-6vh);
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.events h3 {
|
||||
background-color: #96baa080;
|
||||
border: solid #bdd4da;
|
||||
border-radius: 15px;
|
||||
padding: 5px 10px;
|
||||
width: 50vw;
|
||||
text-decoration: underline;
|
||||
font-weight: bold;
|
||||
font-size: 1.2rem;
|
||||
text-align: center;
|
||||
margin-left: 20vw;
|
||||
transform: translateY(-5vh);
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.events p {
|
||||
transform: translateY(-5vh);
|
||||
}
|
||||
|
||||
.event-list ul {
|
||||
list-style-type: none;
|
||||
transform: translateY(-5vh);
|
||||
}
|
||||
|
||||
.event-list li {
|
||||
background-color: #f7f7f7;
|
||||
border: solid #bdd4da;
|
||||
border-radius: 15px;
|
||||
text-align: center;
|
||||
padding: 5px 10px;
|
||||
margin-bottom: 10px;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
.events strong {
|
||||
color:#014038;
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
/* | ↑-↑-↑ End Community.html ↑-↑-↑--| */
|
|
@ -1,194 +0,0 @@
|
|||
/* |--↓-↓-↓ Start gallery.html ↓-↓-↓--| */
|
||||
#main-gallery {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
#gallery-top {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
width: 95vw;
|
||||
gap: 20px
|
||||
}
|
||||
|
||||
#product-carousel-feature h2 {
|
||||
font-size: 1.875rem;
|
||||
text-align: center;
|
||||
text-shadow: 0.5px 0.5px 1px #014038, /* Bottom-right base shadow */
|
||||
-0.5px -0.5px 1px #014038, /* Top-left base shadow */
|
||||
-0.5px 0.5px 1px #014038, /* Bottom-left base shadow */
|
||||
0.5px -0.5px 1px #014038, /* Top-right base shadow */
|
||||
0.5px 0.5px .5px #bdd4da, /* Bottom-right mid shadow */
|
||||
-0.5px -0.5px .5px #bdd4da, /* Top-left mid shadow */
|
||||
-0.5px 0.5px .5px #bdd4da, /* Bottom-left mid shadow */
|
||||
0.5px -0.5px .5px #bdd4da, /* Top-right mid shadow */
|
||||
0.5px 0.5px .5px #f7f7f7, /* Bottom-right top shadow */
|
||||
-0.5px -0.5px .5px #f7f7f7, /* Top-left top shadow */
|
||||
-0.5px 0.5px .5px #f7f7f7, /* Bottom-left top shadow */
|
||||
0.5px -0.5px .5px #f7f7f7; /* Top-right top shadow */
|
||||
color: #f7f7f7;
|
||||
background-color: #96baa0;
|
||||
border: solid #f7f7f7;
|
||||
border-radius: 10px;
|
||||
padding-left: 20px;
|
||||
transform: translateX(30px);
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#product-category-card {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
width: 65vw;
|
||||
}
|
||||
|
||||
#product-carousel {
|
||||
display: flex; /* Flexbox layout for horizontal row */
|
||||
gap: 20px; /* Space between product cards */
|
||||
overflow-x: auto; /* Enable horizontal scrolling */
|
||||
scroll-behavior: smooth; /* Smooth scrolling for buttons */
|
||||
padding: 10px; /* Optional padding inside the carousel */
|
||||
white-space: nowrap; /* Prevent wrapping to a new row */
|
||||
transform: translateX(4vw);
|
||||
}
|
||||
|
||||
.product-card {
|
||||
display: inline-block; /* Ensure cards stay in a row */
|
||||
min-width: 150px; /* Set the card size */
|
||||
max-width: 200px;
|
||||
max-height: auto;
|
||||
flex: 0 0 auto; /* Prevent resizing of cards */
|
||||
border: 1px solid #ddd; /* Optional border */
|
||||
border-radius: 8px;
|
||||
padding: 10px;
|
||||
margin-left: 20px;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
white-space: wrap;
|
||||
background-color: #f7f7f7; /* Optional background */
|
||||
}
|
||||
|
||||
.product-card img {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
display: block;
|
||||
border-radius: 8px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
#scroll-left, #scroll-right {
|
||||
cursor: pointer; /* Show pointer to indicate clickable buttons */
|
||||
background-color: #014038; /* Dark green background */
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 10px;
|
||||
border-radius: 50%;
|
||||
font-size: 1.5rem;
|
||||
transform: translateX(4.5vw);
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.product-card {
|
||||
min-width: 150px;
|
||||
max-width: 200px;
|
||||
}
|
||||
|
||||
#product-carousel {
|
||||
gap: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#main-gallery #right-aside {
|
||||
width: 25vw;
|
||||
}
|
||||
|
||||
#main-gallery #right-aside h2 {
|
||||
font-size: 1.675rem;
|
||||
background-color: #bdd4da;
|
||||
color: #014038;
|
||||
border: solid #014038;
|
||||
border-radius: 5px;
|
||||
padding: 0 5px;
|
||||
white-space: nowrap;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#main-gallery .categories ul {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
#main-gallery .categories ul li {
|
||||
border: solid #014038;
|
||||
border-radius: 5px;
|
||||
background-color: #96baa0;
|
||||
margin-top: 20px;
|
||||
margin-right: 35px;
|
||||
min-width: 100%;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#main-gallery .categories a {
|
||||
color: #014038;
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
|
||||
button#cart-details {
|
||||
background-color: #f7f7f7;
|
||||
border: solid #014038;
|
||||
border-radius: 15px;
|
||||
color: #014038;
|
||||
font-weight: bold;
|
||||
font-size: 1.4em;
|
||||
text-align: center; /* Align text horizontally */
|
||||
height: 30px; /* Adjust height to fit text comfortably */
|
||||
padding: 0 15px; /* Horizontal padding for spacing */
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.3);
|
||||
transform: translateX(-15vw) translateY(-5vh);
|
||||
transition: background-color 0.3s ease, color 0.3s ease;
|
||||
display: flex; /* Flexbox ensures content alignment */
|
||||
align-items: center; /* Center text vertically */
|
||||
justify-content: center; /* Center text horizontally */
|
||||
}
|
||||
|
||||
button#cart-details:hover {
|
||||
background-color: #014033;
|
||||
color: #f7f7f7;
|
||||
border: solid #f7f7f7;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
.product-card {
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.3);
|
||||
transition: background-color 0.3s ease, color 0.3s ease;
|
||||
}
|
||||
|
||||
.add-to-cart-btn {
|
||||
cursor: pointer;
|
||||
background-color: #f7f7f7;
|
||||
border: solid #014038;
|
||||
color: #014038;
|
||||
font-weight: bold;
|
||||
border-radius: 5px;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
transition: background-color 0.3s ease, color 0.3s ease;
|
||||
}
|
||||
|
||||
.add-to-cart-btn:hover {
|
||||
background-color: #014038;
|
||||
border: solid #f7f7f7;
|
||||
color: #f7f7f7;
|
||||
border-radius: 5px;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
|
||||
}
|
||||
/* |--↑-↑-↑ End gallery.html ↑-↑-↑--| */
|
|
@ -1,333 +0,0 @@
|
|||
/* |--↓-↓-↓ Start Header ↓-↓-↓--| */
|
||||
header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20px;
|
||||
background-color: #bdd4da; /* Light teal */
|
||||
border-bottom: 3px solid #96baa0; /* Pale green for contrast */
|
||||
}
|
||||
|
||||
header .logo {
|
||||
position: absolute;
|
||||
left: 3vw;
|
||||
top: 20px;
|
||||
width: auto; /* Maintains aspect ratio */
|
||||
height: auto; /* Constrains the height to 80px */
|
||||
max-width: 20vw;
|
||||
}
|
||||
|
||||
|
||||
header .logo img {
|
||||
display: block;
|
||||
width: 180px;
|
||||
height: auto;
|
||||
max-width: 100%;
|
||||
filter: drop-shadow(0 0 2px #f0c06d) drop-shadow(0 0 0px #014038); /* Yellow outline effect */
|
||||
|
||||
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-family: 'Georgia', serif;
|
||||
font-size: 2.8rem;
|
||||
color: #014038; /* Dark green for the title */
|
||||
margin: 10px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
header p.tagline {
|
||||
font-family: 'Arial', sans-serif;
|
||||
font-size: 1.4rem;
|
||||
color: #96baa0; /* Pale green for the tagline */
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
nav {
|
||||
margin-top: 20px;
|
||||
background-color: #f7f7f7; /* White for navigation background */
|
||||
padding: 10px 20px;
|
||||
border-radius: 5px;
|
||||
width: 100%; /* Ensures the nav spans the width of the header */
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
button#shopping-cart{
|
||||
position: absolute;
|
||||
top: 100px;
|
||||
right: 100px;
|
||||
padding: 20px;
|
||||
border-radius: 10px;
|
||||
background-color: #f7f7f7;
|
||||
color: #014038;
|
||||
cursor: pointer;
|
||||
z-index: 5;
|
||||
transition: background-color 0.3s ease, color 0.3s ease;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
button#shopping-cart:hover {
|
||||
background-color: #014038;
|
||||
color: #96baa0;
|
||||
border: solid #f7f7f7;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
nav ul {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
nav ul li {
|
||||
margin: 0 20px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.current-page {
|
||||
font-size: 1.4em;
|
||||
font-weight: bold;
|
||||
color: #014038;
|
||||
background-color: #96baa0;
|
||||
border: none;
|
||||
text-decoration: underline;
|
||||
white-space: wrap;
|
||||
text-align: center;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
nav ul li a {
|
||||
font-family: 'Arial', sans-serif;
|
||||
font-size: 1rem;
|
||||
font-weight: bold;
|
||||
border: solid #f7f7f7;
|
||||
color: #014038;
|
||||
text-decoration: underline;
|
||||
padding: 8px 15px;
|
||||
border-radius: 10px;
|
||||
transition: background-color 0.3s ease, color 0.3s ease;
|
||||
}
|
||||
|
||||
nav ul li a:hover {
|
||||
background-color: #f7f7f7;
|
||||
color: #014038;
|
||||
border: solid #014038;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
/* |--↓-↓-↓ Start Footer ↓-↓-↓--| */
|
||||
#footer {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#newsletter-container {
|
||||
display: inline-block;
|
||||
margin-bottom: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#email-input {
|
||||
display: inline-block;
|
||||
width: 55%;
|
||||
padding: 5px 10px;
|
||||
text-align: center;
|
||||
border-radius: 10px;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.3);
|
||||
}
|
||||
|
||||
button#submit-btn {
|
||||
display: inline-block;
|
||||
padding: 5px 10px;
|
||||
border-radius: 10px;
|
||||
cursor: pointer;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.3);
|
||||
z-index: 5;
|
||||
}
|
||||
|
||||
footer div label {
|
||||
font-size: 1.2rem;
|
||||
font-weight: bold;
|
||||
color: #014038
|
||||
}
|
||||
|
||||
#newsletter-form {
|
||||
display: inline-block;
|
||||
background-color: #f0c06d;
|
||||
border: solid #f7f7f7;
|
||||
border-radius: 10px;
|
||||
width: 60%;
|
||||
padding: 5px;
|
||||
text-align: center;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#footer-nav ul {
|
||||
position: relative;
|
||||
list-style-type: none;
|
||||
display: inline-block;
|
||||
flex-direction: row;
|
||||
margin-top: 20px;
|
||||
background-color: #f7f7f7; /* White for navigation background */
|
||||
padding: 5px 20px;
|
||||
border-radius: 5px;
|
||||
width: 100%; /* Ensures the nav spans the width of the header */
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); /* Adds subtle shadow for depth */
|
||||
}
|
||||
|
||||
#footer-nav ul li {
|
||||
display: inline-block;
|
||||
align-items: center;
|
||||
padding: 5px 10px;
|
||||
margin: 0 20px;
|
||||
}
|
||||
|
||||
#footer-nav ul li .current-page {
|
||||
font-size: 1.2em;
|
||||
font-weight: bold;
|
||||
color: #014038;
|
||||
background-color: #96baa0;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#footer-nav ul li a {
|
||||
font-family: 'Arial', sans-serif;
|
||||
font-size: 1rem;
|
||||
font-weight: bold;
|
||||
color: #014038; /* Dark green for the links */
|
||||
text-decoration: none;
|
||||
padding: 8px 15px;
|
||||
border-radius: 5px;
|
||||
transition: background-color 0.3s ease, color 0.3s ease;
|
||||
}
|
||||
|
||||
#footer-nav ul li a:hover {
|
||||
background-color: #f7f7f7;
|
||||
color: #014038;
|
||||
border: solid #014038;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
#social-media {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#social-media p {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#social-media ul {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
list-style-type: none;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#social-media ul li {
|
||||
display: inline-block;
|
||||
margin: 0 10px;
|
||||
padding: 0 10px;
|
||||
color: #014038;
|
||||
}
|
||||
|
||||
#social-media ul li a {
|
||||
font-family: 'Arial', sans-serif;
|
||||
font-size: 1rem;
|
||||
color: #014038; /* Dark green for the links */
|
||||
text-decoration: none;
|
||||
padding: 8px 15px;
|
||||
border-radius: 5px;
|
||||
transition: background-color 0.3s ease, color 0.3s ease;
|
||||
}
|
||||
|
||||
#social-media ul li a:hover {
|
||||
background-color: #f0c06d;
|
||||
color: #f7f7f7;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
|
||||
}
|
||||
|
||||
#copyright {
|
||||
text-align: center;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
|
||||
/* Styles for the modal */
|
||||
.modal {
|
||||
display: none; /* Initially hidden */
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0, 0, 0, 0.5); /* Semi-transparent background */
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
background-color: #fff;
|
||||
padding: 20px;
|
||||
border-radius: 10px;
|
||||
width: 80%;
|
||||
max-width: 600px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.modal-buttons button {
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.close-modal {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 20px;
|
||||
font-size: 1.5rem;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.perk-item,
|
||||
.testimonial,
|
||||
.featured-item {
|
||||
display: none; /* Hide all by default */
|
||||
}
|
||||
|
||||
.perk-item.visible,
|
||||
.testimonial.visible,
|
||||
.featured-item.active {
|
||||
display: block; /* Show visible or active items */
|
||||
}
|
||||
|
||||
#featured-images {
|
||||
overflow: hidden; /* Hide anything outside the container */
|
||||
text-align: center; /* Center align content if necessary */
|
||||
width: 100%; /* Match the width of the container */
|
||||
height: auto; /* Let the height adapt to content */
|
||||
}
|
||||
|
||||
#featured-images img {
|
||||
display: none; /* Hide all items initially */
|
||||
max-width: 100%; /* Ensure images are responsive */
|
||||
height: auto; /* Maintain aspect ratio */
|
||||
background-color: #96baa0;
|
||||
border: solid #014038;
|
||||
border-radius: 5px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.visible {
|
||||
display: block;
|
||||
}
|
|
@ -1,216 +0,0 @@
|
|||
#left-aside,
|
||||
#right-aside {
|
||||
flex: 1;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#featured-container {
|
||||
flex: 2;
|
||||
}
|
||||
|
||||
#left-aside {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background-color: #f0c06d;
|
||||
border: solid #f7f7f7;
|
||||
padding: 5px 10px;
|
||||
margin-top: 10px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
#left-aside h2 {
|
||||
border: solid #014038;
|
||||
background-color: #bdd4da;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
#perks-feature-container {
|
||||
background-color: #96baa0;
|
||||
color: #014038;
|
||||
border: solid #014038;
|
||||
border-radius: 10px;
|
||||
padding: 5px 10px;
|
||||
margin-top: 5px;
|
||||
text-align: center;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.perk-item {
|
||||
background-color: #f7f7f7;
|
||||
color: #014038;
|
||||
border: solid #014038;
|
||||
border-radius: 10px;
|
||||
padding: 5px 10px;
|
||||
white-space: wrap;
|
||||
max-height: 250px;
|
||||
min-height: 250px;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
text-align:
|
||||
}
|
||||
|
||||
#perks-heading {
|
||||
font-family: 'Arial', sans-serif;
|
||||
font-weight: bold;
|
||||
font-size: 1.875rem; /* 30px for title */
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#featured-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
margin-right: 40px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
#featured-container h2 {
|
||||
font-size: 1.875rem;
|
||||
text-align: center;
|
||||
text-shadow: 0.5px 0.5px 1px #014038, /* Bottom-right base shadow */
|
||||
-0.5px -0.5px 1px #014038, /* Top-left base shadow */
|
||||
-0.5px 0.5px 1px #014038, /* Bottom-left base shadow */
|
||||
0.5px -0.5px 1px #014038, /* Top-right base shadow */
|
||||
0.5px 0.5px .5px #bdd4da, /* Bottom-right mid shadow */
|
||||
-0.5px -0.5px .5px #bdd4da, /* Top-left mid shadow */
|
||||
-0.5px 0.5px .5px #bdd4da, /* Bottom-left mid shadow */
|
||||
0.5px -0.5px .5px #bdd4da, /* Top-right mid shadow */
|
||||
0.5px 0.5px .5px #f7f7f7, /* Bottom-right top shadow */
|
||||
-0.5px -0.5px .5px #f7f7f7, /* Top-left top shadow */
|
||||
-0.5px 0.5px .5px #f7f7f7, /* Bottom-left top shadow */
|
||||
0.5px -0.5px .5px #f7f7f7; /* Top-right top shadow */
|
||||
color: #f7f7f7;
|
||||
background-color: #96baa0;
|
||||
border: solid #f7f7f7;
|
||||
border-radius: 10px;
|
||||
padding-left: 20px;
|
||||
transform: translateX(30px);
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#featured-container ul {
|
||||
list-style-type: none;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
#featured-image ul li {
|
||||
align-content: space-between;
|
||||
}
|
||||
|
||||
#featured-images ul li a {
|
||||
color: #014038;
|
||||
background-color: #f7f7f7;
|
||||
border-radius: 10px;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
#featured-images a {
|
||||
display: block;
|
||||
text-align: center;
|
||||
font-size: 1.4rem;
|
||||
color:#014038;
|
||||
}
|
||||
|
||||
#featured-images img {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
margin-bottom: 10px;
|
||||
margin-right: 45px;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#testimonials-feature{
|
||||
background-color: #96baa0;
|
||||
color: #014038;
|
||||
border: solid #014038;
|
||||
border-radius: 10px;
|
||||
padding: 5px 10px;
|
||||
margin-top: 10px;
|
||||
white-space: wrap;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#testimonials-feature h2 {
|
||||
font-size: 1.675rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.testimonial {
|
||||
background-color: #f7f7f7;
|
||||
color: #014038;
|
||||
border: solid #014038;
|
||||
border-radius: 5px;
|
||||
padding: 5px 10px;
|
||||
white-space: wrap;
|
||||
min-height: 250px;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#right-aside {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
background-color: #f0c06d;
|
||||
width: 100%;
|
||||
height: auto;
|
||||
padding: 5px 10px;
|
||||
margin-left: 40px;
|
||||
margin-top: 10px;
|
||||
border: solid #f7f7f7;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
#category-nav-container {
|
||||
background-color: #f7f7f7;
|
||||
color: #014038;
|
||||
border: solid #014038;
|
||||
border-radius: 10px;
|
||||
padding: 5px 10px;
|
||||
margin-top: 5px;
|
||||
text-align: center;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#right-aside h2 {
|
||||
font-size: 1.675rem;
|
||||
background-color: #bdd4da;
|
||||
color: #014038;
|
||||
border: solid #014038;
|
||||
border-radius: 10px;
|
||||
padding: 0 5px;
|
||||
white-space: nowrap;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.categories ul {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
.categories ul li {
|
||||
border: solid #014038;
|
||||
border-radius: 10px;
|
||||
background-color: #96baa0;
|
||||
margin-top: 20px;
|
||||
margin-right: 35px;
|
||||
min-width: 100%;
|
||||
transition: background-color 0.3s ease, color 0.3s ease;
|
||||
box-shadow: 1px 2px 3px 0.5px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.categories a {
|
||||
color: #014038;
|
||||
font-size: 1.3rem;
|
||||
font-weight: bold;
|
||||
transition: background-color 0.3s ease, color 0.3s ease;
|
||||
|
||||
}
|
||||
|
||||
.categories ul li:hover {
|
||||
background-color: #f7f7f7;
|
||||
color: #014038;
|
||||
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5);
|
||||
}
|
|
@ -0,0 +1,275 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta
|
||||
name="description"
|
||||
content="Bloom Valley Nursery offers a variety of plants, garden tools, and expert gardening advice for your home and garden."
|
||||
/>
|
||||
<script
|
||||
src="https://kit.fontawesome.com/acb7c3b0da.js"
|
||||
crossorigin="anonymous"
|
||||
></script>
|
||||
<title>About Us - Bloom Valley Nursery</title>
|
||||
<link rel="stylesheet" href="styles.css" />
|
||||
</head>
|
||||
<body id="about-page">
|
||||
<!-- Header Section -->
|
||||
<header role="banner">
|
||||
<div class="logo">
|
||||
<img
|
||||
src="images/Client1_LogoPalette2_F0C06D.png"
|
||||
alt="Bloom Valley Nursery Logo"/>
|
||||
</div>
|
||||
<h1>Bloom Valley Nursery</h1>
|
||||
<!-- Navigation Bar -->
|
||||
<nav role="navigation" aria-label="Main Navigation">
|
||||
<ul>
|
||||
<li>
|
||||
<a href="index.html">Home</a></li>
|
||||
<li><a href="gallery.html">Gallery</a></li>
|
||||
<li><a href="about.html" aria-current="page" class="current-page">About Us</a></li>
|
||||
<li><a href="community.html">Community Events</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<button
|
||||
id="shopping-cart"
|
||||
aria-label="Open shopping cart"
|
||||
class="fa-solid fa-cart-shopping fa-2xl">
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<!-- Main Content Section -->
|
||||
<main role="main" id="main-about">
|
||||
<div id="main-top">
|
||||
<aside
|
||||
id="business-info"
|
||||
aria-label="Hours of operation and contact info"
|
||||
>
|
||||
<h3>Contact Us</h3>
|
||||
<div id="phone">
|
||||
<h4><strong>Phone:</strong></h4>
|
||||
<p>(555) 123-4567</p>
|
||||
</div>
|
||||
<h3>Hours of Operation</h3>
|
||||
<div id="hours">
|
||||
<h4><strong>Monday - Friday:</strong></h4>
|
||||
<p>9:00 AM - 6:00 PM</p>
|
||||
<h4><strong>Saturday & Sunday:</strong></h4>
|
||||
<p>10:00 AM - 5:00 PM</p>
|
||||
</div>
|
||||
</aside>
|
||||
<div id="story" aria-label="History of Bloom Valley Nursery">
|
||||
<h1>The Story of Bloom Valley</h1>
|
||||
<p>
|
||||
Legend has it that in 1822, Benjamin Bloom, his wife Violet, and
|
||||
their young daughter Nora stumbled upon a breathtaking valley
|
||||
brimming with vibrant, rare flowers during their journey westward.
|
||||
Enchanted by its beauty, they decided to settle there, abandoning
|
||||
their plans to reach California. This picturesque haven became known
|
||||
as Bloom Valley.
|
||||
</p>
|
||||
<p>
|
||||
Today, on the very land where the Bloom family found their paradise,
|
||||
stands Bloom Valley Nursery. Still family-owned and operated,
|
||||
siblings Bethany, Vincent, and Nathaniel Bloom carry forward a
|
||||
legacy of preserving and sharing the natural beauty that captivated
|
||||
the hearts of their ancestors over two centuries ago.
|
||||
</p>
|
||||
<p>Though many things have changed through the years, our commitment to serving our community has remained the same. Let us help you cultivate joy, one bloom at a time!</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="main-bottom">
|
||||
<div id="feedback" aria-label="Feedback form">
|
||||
<div id="feedback-intro">
|
||||
<h1>We Want to Hear From You!</h1>
|
||||
<h3>Your feedback provides us with valuable insight into where we stand in our commitment to our neighbors, friends, and the entire Bloom Valley community.</h3>
|
||||
<p>Feel free to contact us by filling out the form below if you have any questions, concerns, or simply want to tell us how we can better serve you in the future. You are also welcome to give us a call at the number above if you need to speak with someone directly. Our friendly staff can help answer your questions or guide you in placing custom orders as well!</p>
|
||||
</div>
|
||||
<div id="feedback-form">
|
||||
<form action="#" method="POST">
|
||||
<div id="customer-info">
|
||||
<div id="name-field">
|
||||
<label for="name">Name:</label>
|
||||
<input
|
||||
type="text"
|
||||
id="name"
|
||||
name="name"
|
||||
aria-label="Enter your name here" placeholder="Your Name"
|
||||
required/>
|
||||
</div>
|
||||
<div id="phone-field">
|
||||
<label for="tel">Phone Number:</label>
|
||||
<input
|
||||
type="tel"
|
||||
id="tel"
|
||||
name="telephone"
|
||||
aria-label="Enter your contact phone number here" placeholder="Your Phone Number"
|
||||
required/>
|
||||
</div>
|
||||
<div id="email-field">
|
||||
<label for="email">Email:</label>
|
||||
<input
|
||||
type="email"
|
||||
id="email"
|
||||
name="email"
|
||||
aria-label="Enter your contact email here" placeholder="user@domain.com"
|
||||
required/>
|
||||
</div>
|
||||
</div>
|
||||
<div id="customer-message">
|
||||
<div id="message-field">
|
||||
<label for="message">Message:</label>
|
||||
<textarea
|
||||
id="message"
|
||||
name="message"
|
||||
rows="5"
|
||||
aria-label="Enter feedback or inquiries here" placeholder="Enter feedback or inquiries here..."
|
||||
required>
|
||||
</textarea>
|
||||
</div>
|
||||
<div id="form-submit-btn">
|
||||
<button
|
||||
id="form-submit"
|
||||
type="submit"
|
||||
aria-label="Submit feedback or inquiry"
|
||||
>Submit
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- Footer Section -->
|
||||
<footer role="contentinfo">
|
||||
<div id="newsletter-container">
|
||||
<label for="email-input" class="hidden">Enter your email to subscribe to our newsletter</label>
|
||||
<form id="newsletter-form">
|
||||
<input
|
||||
type="email"
|
||||
id="email-input"
|
||||
aria-label="Enter your email to Subscribe"
|
||||
placeholder="Subscribe@BloomValleyNursery.com"
|
||||
/>
|
||||
<button id="submit-btn" type="submit" aria-label="Submit the subscribe form">
|
||||
Subscribe Now!
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div id="footer-nav">
|
||||
<ul>
|
||||
<li><a href="index.html">Home</a></li>
|
||||
<li><a href="gallery.html">Gallery</a></li>
|
||||
<li><a href="about.html" class="current-page">About Us</a></li>
|
||||
<li><a href="community.html">Community Events</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="social-media">
|
||||
<p>Check us out on social media!</p>
|
||||
<ul class="social-icons">
|
||||
<li id="pinterest">
|
||||
<a href="#" aria-label="Follow us on Pinterest"
|
||||
><i class="fa-brands fa-square-pinterest fa-lg"></i></a></li>
|
||||
<li id="facebook">
|
||||
<a href="#" aria-label="Follow us on Facebook"
|
||||
><i class="fa-brands fa-facebook fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="instagram">
|
||||
<a href="#" aria-label="Follow us on Instagram"
|
||||
><i class="fa-brands fa-instagram fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="twitter">
|
||||
<a href="#" aria-label="Follow us on X (Twitter)"
|
||||
><i class="fa-brands fa-square-x-twitter fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="youtube">
|
||||
<a href="#" aria-label="View our Youtube channel"
|
||||
><i class="fa-brands fa-youtube fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="copyright">© 2024 Bloom Valley Nursery</div>
|
||||
</footer>
|
||||
<!-- Custom Modal for Newsletter Subscription -->
|
||||
<div id="newsletter-modal" class="modal">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="newsletter-close-btn">×</span>
|
||||
<h2>Newsletter Subscription</h2>
|
||||
<form id="newsletter-form">
|
||||
<input
|
||||
type="email"
|
||||
id="email-input"
|
||||
placeholder="Enter your email"
|
||||
required
|
||||
aria-label="Enter your email to subscribe"
|
||||
/>
|
||||
<button type="submit" id="subscribe-btn">Subscribe</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Custom Alert Modal -->
|
||||
<div id="custom-alert" class="modal hidden">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="alert-close-btn">×</span>
|
||||
<p id="alert-message"></p>
|
||||
<button id="alert-ok-button">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Shopping Cart -->
|
||||
<div id="cart-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal">×</span>
|
||||
<h2>Your Shopping Cart</h2>
|
||||
<ul id="cart-items"></ul> <!-- Dynamically populated -->
|
||||
<p id="cart-total"></p> <!-- Sub-total will appear here -->
|
||||
<div class="modal-buttons">
|
||||
<button id="clear-cart-modal-btn">Clear Cart</button>
|
||||
<button id="process-order-modal-btn">Process Order</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Item Added -->
|
||||
<div id="item-added-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="item-added-close">×</span>
|
||||
<p id="item-added-message"></p> <!-- Dynamically set message -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Confirmation Modal -->
|
||||
<div id="confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="confirmation-close-btn">×</span>
|
||||
<p id="confirmation-message"></p> <!-- Dynamic confirmation message -->
|
||||
<button id="confirmation-confirm-btn">Confirm</button>
|
||||
<button id="confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Final Confirmation Modal -->
|
||||
<div id="final-confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="final-confirmation-close-btn">×</span>
|
||||
<p id="final-confirmation-message"></p> <!-- Message after successful action -->
|
||||
<button id="final-confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- This loads after the page is read by browser -->
|
||||
<script src="cart.js"></script>
|
||||
<script src="newsletter.js"></script>
|
||||
<script src="feedback.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,178 +1,178 @@
|
|||
document.addEventListener('DOMContentLoaded', () => {
|
||||
let cart = JSON.parse(sessionStorage.getItem('cart')) || [];
|
||||
|
||||
// Get modal and cart-related elements
|
||||
const modal = document.getElementById('cart-modal');
|
||||
const closeModal = document.querySelector('.close-modal');
|
||||
const cartItemsContainer = document.getElementById('cart-items');
|
||||
const cartTotalContainer = document.getElementById('cart-total');
|
||||
const clearCartModalButton = document.getElementById('clear-cart-modal-btn');
|
||||
const processOrderModalButton = document.getElementById('process-order-modal-btn');
|
||||
|
||||
// Custom confirmation modals for clear cart and process order
|
||||
const confirmationModal = document.getElementById('confirmation-modal');
|
||||
const confirmationMessage = document.getElementById('confirmation-message');
|
||||
const confirmationCloseButton = document.getElementById('confirmation-close-btn');
|
||||
const confirmationConfirmButton = document.getElementById('confirmation-confirm-btn');
|
||||
|
||||
// Buttons
|
||||
const shoppingCartButton = document.getElementById('shopping-cart');
|
||||
const cartDetailsButton = document.getElementById('cart-details');
|
||||
|
||||
// Custom alert modal for item added
|
||||
const itemAddedModal = document.getElementById('item-added-modal');
|
||||
const itemAddedMessage = document.getElementById('item-added-message');
|
||||
const itemAddedClose = document.getElementById('item-added-close');
|
||||
|
||||
// Final confirmation modal for success messages
|
||||
const finalConfirmationModal = document.getElementById('final-confirmation-modal');
|
||||
const finalConfirmationMessage = document.getElementById('final-confirmation-message');
|
||||
const finalConfirmationCloseButton = document.getElementById('final-confirmation-close-btn');
|
||||
|
||||
// Function to render the cart
|
||||
function renderCart() {
|
||||
cart = JSON.parse(sessionStorage.getItem('cart')) || [];
|
||||
cartItemsContainer.innerHTML = ''; // Clear existing items
|
||||
let total = 0;
|
||||
|
||||
if (cart.length === 0) {
|
||||
cartItemsContainer.innerHTML = '<li>Your cart is empty.</li>';
|
||||
cartTotalContainer.textContent = '';
|
||||
return;
|
||||
}
|
||||
|
||||
cart.forEach(item => {
|
||||
const itemTotal = item.price * item.quantity;
|
||||
total += itemTotal;
|
||||
|
||||
const listItem = document.createElement('li');
|
||||
listItem.textContent = `${item.name} x ${item.quantity} - $${itemTotal.toFixed(2)}`;
|
||||
cartItemsContainer.appendChild(listItem);
|
||||
});
|
||||
|
||||
cartTotalContainer.textContent = `Subtotal: $${total.toFixed(2)}`;
|
||||
}
|
||||
|
||||
// Show cart modal with current cart content
|
||||
function showModal() {
|
||||
renderCart(); // Always render the latest cart
|
||||
modal.style.display = 'flex'; // Show the cart modal
|
||||
}
|
||||
|
||||
// Show confirmation modal for actions (clear or process order)
|
||||
function showConfirmationModal(message, action) {
|
||||
confirmationMessage.textContent = message;
|
||||
confirmationModal.style.display = 'flex'; // Show the confirmation modal
|
||||
|
||||
// Confirm action on the "Confirm" button
|
||||
confirmationConfirmButton.onclick = () => {
|
||||
action(); // Execute the passed action (clear cart, process order)
|
||||
confirmationModal.style.display = 'none'; // Close the confirmation modal after confirming
|
||||
};
|
||||
|
||||
// Close confirmation modal without performing any action
|
||||
confirmationCloseButton.onclick = () => {
|
||||
confirmationModal.style.display = 'none';
|
||||
};
|
||||
}
|
||||
|
||||
// Show final confirmation modal with success message
|
||||
function showFinalConfirmationModal(message) {
|
||||
finalConfirmationMessage.textContent = message;
|
||||
finalConfirmationModal.style.display = 'flex'; // Show the final confirmation modal
|
||||
finalConfirmationCloseButton.onclick = () => {
|
||||
finalConfirmationModal.style.display = 'none'; // Close final confirmation modal
|
||||
};
|
||||
}
|
||||
|
||||
// Show custom modal when item is added to cart
|
||||
function showItemAddedModal(message) {
|
||||
itemAddedMessage.textContent = message; // Set message dynamically
|
||||
itemAddedModal.style.display = 'flex'; // Show the modal
|
||||
itemAddedClose.addEventListener('click', () => {
|
||||
itemAddedModal.style.display = 'none'; // Close the modal
|
||||
});
|
||||
}
|
||||
|
||||
// Attach event listeners to both cart buttons
|
||||
[shoppingCartButton, cartDetailsButton].forEach(button => {
|
||||
if (button) {
|
||||
button.addEventListener('click', showModal); // Open modal when clicked
|
||||
}
|
||||
});
|
||||
|
||||
// Close modal when clicking outside of it
|
||||
window.addEventListener('click', event => {
|
||||
if (event.target === modal) {
|
||||
modal.style.display = 'none';
|
||||
}
|
||||
});
|
||||
|
||||
// Close the modal by clicking the close button (for cart modal)
|
||||
if (closeModal) {
|
||||
closeModal.addEventListener('click', () => {
|
||||
modal.style.display = 'none';
|
||||
});
|
||||
}
|
||||
|
||||
// Add to cart functionality
|
||||
const addToCartButtons = document.querySelectorAll('.add-to-cart-btn');
|
||||
addToCartButtons.forEach(button => {
|
||||
button.addEventListener('click', () => {
|
||||
const productId = parseInt(button.dataset.productId, 10);
|
||||
const product = products.find(item => item.id === productId);
|
||||
|
||||
if (product) {
|
||||
const existingProduct = cart.find(item => item.id === productId);
|
||||
|
||||
if (existingProduct) {
|
||||
existingProduct.quantity++;
|
||||
} else {
|
||||
cart.push({ ...product, quantity: 1 });
|
||||
}
|
||||
|
||||
sessionStorage.setItem('cart', JSON.stringify(cart)); // Save cart to session storage
|
||||
showItemAddedModal(`${product.name} has been added to the cart!`); // Show custom modal
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Event listener for Clear Cart button in the modal
|
||||
if (clearCartModalButton) {
|
||||
clearCartModalButton.addEventListener('click', () => {
|
||||
showConfirmationModal('Are you sure you want to clear the cart?', () => {
|
||||
sessionStorage.removeItem('cart');
|
||||
cart = [];
|
||||
renderCart(); // Re-render cart after clearing it
|
||||
showFinalConfirmationModal('Cart has been cleared!'); // Show final confirmation for cart clearing
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Event listener for Process Order button in the modal
|
||||
if (processOrderModalButton) {
|
||||
processOrderModalButton.addEventListener('click', () => {
|
||||
if (cart.length === 0) {
|
||||
showItemAddedModal('Your cart is empty. Please add items to the cart before processing the order.');
|
||||
return;
|
||||
}
|
||||
|
||||
showConfirmationModal('Are you sure you want to process your order?', () => {
|
||||
const receiptNumber = Math.floor(Math.random() * 1000000); // Generate receipt number
|
||||
showFinalConfirmationModal(`Thank you for your order!\nYour receipt number is ${receiptNumber}.`);
|
||||
sessionStorage.removeItem('cart');
|
||||
cart = [];
|
||||
renderCart(); // Re-render cart after processing the order
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
const allCloseButtons = document.querySelectorAll('.close-modal');
|
||||
allCloseButtons.forEach(button => {
|
||||
button.addEventListener('click', () => {
|
||||
// Close the parent modal of the button clicked
|
||||
const modal = button.closest('.modal');
|
||||
modal.style.display = 'none';
|
||||
});
|
||||
});
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
let cart = JSON.parse(sessionStorage.getItem('cart')) || [];
|
||||
|
||||
// Get modal and cart-related elements
|
||||
const modal = document.getElementById('cart-modal');
|
||||
const closeModal = document.querySelector('.close-modal');
|
||||
const cartItemsContainer = document.getElementById('cart-items');
|
||||
const cartTotalContainer = document.getElementById('cart-total');
|
||||
const clearCartModalButton = document.getElementById('clear-cart-modal-btn');
|
||||
const processOrderModalButton = document.getElementById('process-order-modal-btn');
|
||||
|
||||
// Custom confirmation modals for clear cart and process order
|
||||
const confirmationModal = document.getElementById('confirmation-modal');
|
||||
const confirmationMessage = document.getElementById('confirmation-message');
|
||||
const confirmationCloseButton = document.getElementById('confirmation-close-btn');
|
||||
const confirmationConfirmButton = document.getElementById('confirmation-confirm-btn');
|
||||
|
||||
// Buttons
|
||||
const shoppingCartButton = document.getElementById('shopping-cart');
|
||||
const cartDetailsButton = document.getElementById('cart-details');
|
||||
|
||||
// Custom alert modal for item added
|
||||
const itemAddedModal = document.getElementById('item-added-modal');
|
||||
const itemAddedMessage = document.getElementById('item-added-message');
|
||||
const itemAddedClose = document.getElementById('item-added-close');
|
||||
|
||||
// Final confirmation modal for success messages
|
||||
const finalConfirmationModal = document.getElementById('final-confirmation-modal');
|
||||
const finalConfirmationMessage = document.getElementById('final-confirmation-message');
|
||||
const finalConfirmationCloseButton = document.getElementById('final-confirmation-close-btn');
|
||||
|
||||
// Function to render the cart
|
||||
function renderCart() {
|
||||
cart = JSON.parse(sessionStorage.getItem('cart')) || [];
|
||||
cartItemsContainer.innerHTML = ''; // Clear existing items
|
||||
let total = 0;
|
||||
|
||||
if (cart.length === 0) {
|
||||
cartItemsContainer.innerHTML = '<li>Your cart is empty.</li>';
|
||||
cartTotalContainer.textContent = '';
|
||||
return;
|
||||
}
|
||||
|
||||
cart.forEach(item => {
|
||||
const itemTotal = item.price * item.quantity;
|
||||
total += itemTotal;
|
||||
|
||||
const listItem = document.createElement('li');
|
||||
listItem.textContent = `${item.name} x ${item.quantity} - $${itemTotal.toFixed(2)}`;
|
||||
cartItemsContainer.appendChild(listItem);
|
||||
});
|
||||
|
||||
cartTotalContainer.textContent = `Subtotal: $${total.toFixed(2)}`;
|
||||
}
|
||||
|
||||
// Show cart modal with current cart content
|
||||
function showModal() {
|
||||
renderCart(); // Always render the latest cart
|
||||
modal.style.display = 'flex'; // Show the cart modal
|
||||
}
|
||||
|
||||
// Show confirmation modal for actions (clear or process order)
|
||||
function showConfirmationModal(message, action) {
|
||||
confirmationMessage.textContent = message;
|
||||
confirmationModal.style.display = 'flex'; // Show the confirmation modal
|
||||
|
||||
// Confirm action on the "Confirm" button
|
||||
confirmationConfirmButton.onclick = () => {
|
||||
action(); // Execute the passed action (clear cart, process order)
|
||||
confirmationModal.style.display = 'none'; // Close the confirmation modal after confirming
|
||||
};
|
||||
|
||||
// Close confirmation modal without performing any action
|
||||
confirmationCloseButton.onclick = () => {
|
||||
confirmationModal.style.display = 'none';
|
||||
};
|
||||
}
|
||||
|
||||
// Show final confirmation modal with success message
|
||||
function showFinalConfirmationModal(message) {
|
||||
finalConfirmationMessage.textContent = message;
|
||||
finalConfirmationModal.style.display = 'flex'; // Show the final confirmation modal
|
||||
finalConfirmationCloseButton.onclick = () => {
|
||||
finalConfirmationModal.style.display = 'none'; // Close final confirmation modal
|
||||
};
|
||||
}
|
||||
|
||||
// Show custom modal when item is added to cart
|
||||
function showItemAddedModal(message) {
|
||||
itemAddedMessage.textContent = message; // Set message dynamically
|
||||
itemAddedModal.style.display = 'flex'; // Show the modal
|
||||
itemAddedClose.addEventListener('click', () => {
|
||||
itemAddedModal.style.display = 'none'; // Close the modal
|
||||
});
|
||||
}
|
||||
|
||||
// Attach event listeners to both cart buttons
|
||||
[shoppingCartButton, cartDetailsButton].forEach(button => {
|
||||
if (button) {
|
||||
button.addEventListener('click', showModal); // Open modal when clicked
|
||||
}
|
||||
});
|
||||
|
||||
// Close modal when clicking outside of it
|
||||
window.addEventListener('click', event => {
|
||||
if (event.target === modal) {
|
||||
modal.style.display = 'none';
|
||||
}
|
||||
});
|
||||
|
||||
// Close the modal by clicking the close button (for cart modal)
|
||||
if (closeModal) {
|
||||
closeModal.addEventListener('click', () => {
|
||||
modal.style.display = 'none';
|
||||
});
|
||||
}
|
||||
|
||||
// Add to cart functionality
|
||||
const addToCartButtons = document.querySelectorAll('.add-to-cart-btn');
|
||||
addToCartButtons.forEach(button => {
|
||||
button.addEventListener('click', () => {
|
||||
const productId = parseInt(button.dataset.productId, 10);
|
||||
const product = products.find(item => item.id === productId);
|
||||
|
||||
if (product) {
|
||||
const existingProduct = cart.find(item => item.id === productId);
|
||||
|
||||
if (existingProduct) {
|
||||
existingProduct.quantity++;
|
||||
} else {
|
||||
cart.push({ ...product, quantity: 1 });
|
||||
}
|
||||
|
||||
sessionStorage.setItem('cart', JSON.stringify(cart)); // Save cart to session storage
|
||||
showItemAddedModal(`${product.name} has been added to the cart!`); // Show custom modal
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Event listener for Clear Cart button in the modal
|
||||
if (clearCartModalButton) {
|
||||
clearCartModalButton.addEventListener('click', () => {
|
||||
showConfirmationModal('Are you sure you want to clear the cart?', () => {
|
||||
sessionStorage.removeItem('cart');
|
||||
cart = [];
|
||||
renderCart(); // Re-render cart after clearing it
|
||||
showFinalConfirmationModal('Cart has been cleared!'); // Show final confirmation for cart clearing
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// Event listener for Process Order button in the modal
|
||||
if (processOrderModalButton) {
|
||||
processOrderModalButton.addEventListener('click', () => {
|
||||
if (cart.length === 0) {
|
||||
showItemAddedModal('Your cart is empty. Please add items to the cart before processing the order.');
|
||||
return;
|
||||
}
|
||||
|
||||
showConfirmationModal('Are you sure you want to process your order?', () => {
|
||||
const receiptNumber = Math.floor(Math.random() * 1000000); // Generate receipt number
|
||||
showFinalConfirmationModal(`Thank you for your order!\nYour receipt number is ${receiptNumber}.`);
|
||||
sessionStorage.removeItem('cart');
|
||||
cart = [];
|
||||
renderCart(); // Re-render cart after processing the order
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
const allCloseButtons = document.querySelectorAll('.close-modal');
|
||||
allCloseButtons.forEach(button => {
|
||||
button.addEventListener('click', () => {
|
||||
// Close the parent modal of the button clicked
|
||||
const modal = button.closest('.modal');
|
||||
modal.style.display = 'none';
|
||||
});
|
||||
});
|
|
@ -0,0 +1,256 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta
|
||||
name="description"
|
||||
content="Bloom Valley Nursery offers a variety of plants, garden tools, and expert gardening advice for your home and garden."
|
||||
/>
|
||||
<script
|
||||
src="https://kit.fontawesome.com/acb7c3b0da.js"
|
||||
crossorigin="anonymous"
|
||||
></script>
|
||||
<title>Community Events - Bloom Valley Nursery</title>
|
||||
<link rel="stylesheet" href="styles.css" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- Header Section -->
|
||||
<header role="banner">
|
||||
<div class="logo">
|
||||
<img
|
||||
src="images/Client1_LogoPalette2_F0C06D.png"
|
||||
alt="Bloom Valley Nursery Logo"
|
||||
/>
|
||||
</div>
|
||||
<h1>Bloom Valley Nursery</h1>
|
||||
<!-- Navigation Bar -->
|
||||
<nav role="navigation" aria-label="Main Navigation">
|
||||
<ul>
|
||||
<li><a href="index.html">Home</a></li>
|
||||
<li><a href="gallery.html">Gallery</a></li>
|
||||
<li><a href="about.html">About Us</a></li>
|
||||
<li><a href="community.html" aria-current="page" class="current-page">Community Events</a></li>
|
||||
</ul>
|
||||
<button
|
||||
id="shopping-cart"
|
||||
aria-label="Open shopping cart"
|
||||
class="fa-solid fa-cart-shopping fa-2xl"
|
||||
></button>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<!-- Main Content Section -->
|
||||
<main role="main" id="community-page">
|
||||
<h1>Mark Your Calendars!</h1>
|
||||
<div id="calendar-events-container">
|
||||
<div class="calendar">
|
||||
<iframe
|
||||
src="https://calendar.google.com/calendar/embed?src=your_calendar_id&ctz=America/Chicago"
|
||||
style="border: 0; width: 90vww; height: 600px"
|
||||
frameborder="0"
|
||||
scrolling="no" aria-label="Google Calendar displaying upcoming events at Bloom Valley Nursery">
|
||||
</iframe><!-- change "your_calendar_id" to an actual Google Calendar ID (Not possible due to the Client Scenario being fictional. This would require creating a fake Google account.)-->
|
||||
</div>
|
||||
<section class="events" aria-label="List of upcoming local events">
|
||||
<h2>Upcoming Events</h2>
|
||||
<div class="event-list">
|
||||
<div id="bvn-events">
|
||||
<h3>Events at Bloom Valley Nursery</h3>
|
||||
<p>
|
||||
All workshops at Bloom Valley Nursery are provided free of charge to
|
||||
anyone interested in learning techniques and ideas for creating a
|
||||
visually appealing living space that can be personalized to suite
|
||||
individual needs. Registration links are provided in each Google
|
||||
Calendar Event by clicking on the date of the event within the
|
||||
Google Calendar on this page.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Gardening and Landscaping 101:</strong><br><strong>When:</strong><br> 2nd Tuesday of
|
||||
Every Month @ 6:30 pm.<br>Join Bethany Bloom as she shares her tips for
|
||||
creating a themed decor through-out the home that you will be
|
||||
delighted to share with your holiday guests.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Deck the Halls</strong><br><strong>When:</strong> Saturday @ 10:00 am.<br>Join
|
||||
Nathaniel and Vincent as they guide us through picking and tending
|
||||
the perfect live Christmas tree for your Christmas decoration
|
||||
focal-point.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Christmas Eve and Christmas Day</strong><br><strong>Bloom Valley
|
||||
Nursery will close on Christmas Eve at 8:00 pm</strong> for any last-minute
|
||||
shopping.<br>The nursery will remain <strong>closed until January 2nd</strong>. During
|
||||
this time, we will be making improvements to the nursery grounds and
|
||||
store with the aim of better serving our Bloom Valley neighbors,
|
||||
friends and family. We are excited to share the new features and changes with
|
||||
you in the New Year!<br><strong>Happy Holidays!!!</strong>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="community-wide">
|
||||
<h3>Community-Wide Events</h3>
|
||||
<p>
|
||||
This section includes local community events for which Bloom Valley
|
||||
Nursery is in partner with or a sponsor of. These events are
|
||||
typically free of charge, but can include sub-events by other local
|
||||
organizations and businesses that may not be free of charge. Check
|
||||
with specific organizations, businesses, and the Bloom Valley
|
||||
Chamber of Commerce for specific details that may not be provided by
|
||||
Bloom Valley Nursery.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Tree Lighting Ceremony</strong><br><strong>When:</strong></br>Thursday @ 6:00 pm.<br>
|
||||
Help us kick off the Holiday festivities by joining the Bloom
|
||||
family, along with the Bloom Valley Chamber of Commerce, the Bloom
|
||||
Valley Garden Club, and many other local businesses and
|
||||
organizations, as we gather <strong>in front of City Hall</strong> for the annual Tree
|
||||
Lighting Ceremony! This event will include performances by the Bloom
|
||||
Valley Junior and Senior High Marching Bands, a workshop for making
|
||||
tree ornaments, the annual Chili Cook-off, and much more!
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- Add more events as needed -->
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<p>
|
||||
For more details, to add events to this page, or to leave feedback,
|
||||
<a
|
||||
href="about.html#feedback"
|
||||
aria-label="Go to the feedback form on the About Us page to leave feedback or inquiries."
|
||||
>click here</a
|
||||
> to send us a message.
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<!-- Footer Section -->
|
||||
<footer role="contentinfo">
|
||||
<div id="newsletter-container">
|
||||
<label for="email-input" class="hidden">Enter your email to subscribe to our newsletter</label>
|
||||
<form id="newsletter-form">
|
||||
<input
|
||||
type="email"
|
||||
id="email-input"
|
||||
aria-label="Enter your email to Subscribe"
|
||||
placeholder="Subscribe@BloomValleyNursery.com"
|
||||
/>
|
||||
<button id="submit-btn" type="submit" aria-label="Submit the subscribe form">
|
||||
Subscribe Now!
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div id="footer-nav">
|
||||
<ul>
|
||||
<li><a href="index.html">Home</a></li>
|
||||
<li><a href="gallery.html">Gallery</a></li>
|
||||
<li><a href="about.html">About Us</a></li>
|
||||
<li><a href="community.html" class="current-page">Community Events</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="social-media">
|
||||
<p>Check us out on social media!</p>
|
||||
<ul class="social-icons">
|
||||
<li id="pinterest">
|
||||
<a href="#" aria-label="Follow us on Pinterest"
|
||||
><i class="fa-brands fa-square-pinterest fa-lg"></i></a></li>
|
||||
<li id="facebook">
|
||||
<a href="#" aria-label="Follow us on Facebook"
|
||||
><i class="fa-brands fa-facebook fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="instagram">
|
||||
<a href="#" aria-label="Follow us on Instagram"
|
||||
><i class="fa-brands fa-instagram fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="twitter">
|
||||
<a href="#" aria-label="Follow us on X (Twitter)"
|
||||
><i class="fa-brands fa-square-x-twitter fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="youtube">
|
||||
<a href="#" aria-label="View our Youtube channel"
|
||||
><i class="fa-brands fa-youtube fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="copyright">© 2024 Bloom Valley Nursery</div>
|
||||
</footer>
|
||||
<!-- Custom Modal for Newsletter Subscription -->
|
||||
<div id="newsletter-modal" class="modal">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="newsletter-close-btn">×</span>
|
||||
<h2>Newsletter Subscription</h2>
|
||||
<form id="newsletter-form">
|
||||
<input
|
||||
type="email"
|
||||
id="email-input"
|
||||
placeholder="Enter your email"
|
||||
required
|
||||
aria-label="Enter your email to subscribe"
|
||||
/>
|
||||
<button type="submit" id="subscribe-btn">Subscribe</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Custom Alert Modal -->
|
||||
<div id="custom-alert" class="modal hidden">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="alert-close-btn">×</span>
|
||||
<p id="alert-message"></p>
|
||||
<button id="alert-ok-button">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Shopping Cart -->
|
||||
<div id="cart-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal">×</span>
|
||||
<h2>Your Shopping Cart</h2>
|
||||
<ul id="cart-items"></ul> <!-- Dynamically populated -->
|
||||
<p id="cart-total"></p> <!-- Sub-total will appear here -->
|
||||
<div class="modal-buttons">
|
||||
<button id="clear-cart-modal-btn">Clear Cart</button>
|
||||
<button id="process-order-modal-btn">Process Order</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Item Added -->
|
||||
<div id="item-added-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="item-added-close">×</span>
|
||||
<p id="item-added-message"></p> <!-- Dynamically set message -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Confirmation Modal -->
|
||||
<div id="confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="confirmation-close-btn">×</span>
|
||||
<p id="confirmation-message"></p> <!-- Dynamic confirmation message -->
|
||||
<button id="confirmation-confirm-btn">Confirm</button>
|
||||
<button id="confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Final Confirmation Modal -->
|
||||
<div id="final-confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="final-confirmation-close-btn">×</span>
|
||||
<p id="final-confirmation-message"></p> <!-- Message after successful action -->
|
||||
<button id="final-confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- This loads after the page is read by browser -->
|
||||
<script src="cart.js"></script>
|
||||
<script src="newsletter.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,93 +1,93 @@
|
|||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const feedbackForm = document.querySelector('#feedback-form form');
|
||||
const nameInput = document.getElementById('name');
|
||||
const emailInput = document.getElementById('email');
|
||||
const phoneInput = document.getElementById('tel');
|
||||
const messageInput = document.getElementById('message');
|
||||
|
||||
const alertBox = document.getElementById('custom-alert');
|
||||
const alertMessage = document.getElementById('alert-message');
|
||||
const alertOkButton = document.getElementById('alert-ok-button');
|
||||
const alertCloseButton = document.getElementById('alert-close-btn');
|
||||
|
||||
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; // Email validation regex
|
||||
const phoneRegex = /^[0-9]{10,15}$/; // Phone validation regex (10-15 digits)
|
||||
const nameRegex = /^[a-zA-Z\s]{2,}$/; // Name validation regex (at least 2 letters)
|
||||
const sqlInjectionRegex = /[;'"\\]/; // Prevent SQL injection-like characters
|
||||
|
||||
// Form submission handler
|
||||
feedbackForm.addEventListener('submit', (event) => {
|
||||
event.preventDefault(); // Prevent form submission and page refresh
|
||||
|
||||
const name = nameInput.value.trim();
|
||||
const email = emailInput.value.trim();
|
||||
const phone = phoneInput.value.trim();
|
||||
const message = messageInput.value.trim();
|
||||
|
||||
// Validate each field
|
||||
if (!nameRegex.test(name)) {
|
||||
showCustomAlert('Please enter a valid name (letters and spaces only).');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!emailRegex.test(email)) {
|
||||
showCustomAlert('Please enter a valid email address.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!phoneRegex.test(phone)) {
|
||||
showCustomAlert('Please enter a valid phone number (10-15 digits).');
|
||||
return;
|
||||
}
|
||||
|
||||
if (sqlInjectionRegex.test(message)) {
|
||||
showCustomAlert('Your message contains invalid characters.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Save feedback to localStorage
|
||||
const feedbackData = {
|
||||
name,
|
||||
email,
|
||||
phone,
|
||||
message,
|
||||
timestamp: new Date().toISOString(),
|
||||
};
|
||||
|
||||
// Retrieve existing feedback data or initialize an empty array
|
||||
const feedbackList = JSON.parse(localStorage.getItem('feedbackList')) || [];
|
||||
feedbackList.push(feedbackData); // Add new feedback to the list
|
||||
localStorage.setItem('feedbackList', JSON.stringify(feedbackList)); // Save updated list to localStorage
|
||||
console.log('Feedback saved to localStorage:', feedbackList);
|
||||
|
||||
// Show success message
|
||||
showCustomAlert('Thank you for your feedback! We appreciate hearing from you.');
|
||||
feedbackForm.reset(); // Clear the input fields after submission
|
||||
});
|
||||
|
||||
// Function to show the custom alert modal
|
||||
function showCustomAlert(message) {
|
||||
alertMessage.textContent = message; // Set modal message
|
||||
alertBox.classList.remove('hidden'); // Display the modal
|
||||
alertBox.style.display = 'flex'; // Ensure the modal is visible
|
||||
}
|
||||
|
||||
// Function to close the custom alert modal
|
||||
function closeCustomAlert() {
|
||||
alertBox.classList.add('hidden'); // Hide the modal
|
||||
alertBox.style.display = 'none'; // Ensure it's hidden
|
||||
}
|
||||
|
||||
// Close modal on "OK" button click
|
||||
alertOkButton.addEventListener('click', closeCustomAlert);
|
||||
|
||||
// Close modal on "X" button click
|
||||
alertCloseButton.addEventListener('click', closeCustomAlert);
|
||||
|
||||
// Close modal when clicking outside the modal content
|
||||
window.addEventListener('click', (event) => {
|
||||
if (event.target === alertBox) {
|
||||
closeCustomAlert();
|
||||
}
|
||||
});
|
||||
});
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const feedbackForm = document.querySelector('#feedback-form form');
|
||||
const nameInput = document.getElementById('name');
|
||||
const emailInput = document.getElementById('email');
|
||||
const phoneInput = document.getElementById('tel');
|
||||
const messageInput = document.getElementById('message');
|
||||
|
||||
const alertBox = document.getElementById('custom-alert');
|
||||
const alertMessage = document.getElementById('alert-message');
|
||||
const alertOkButton = document.getElementById('alert-ok-button');
|
||||
const alertCloseButton = document.getElementById('alert-close-btn');
|
||||
|
||||
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; // Email validation regex
|
||||
const phoneRegex = /^[0-9]{10,15}$/; // Phone validation regex (10-15 digits)
|
||||
const nameRegex = /^[a-zA-Z\s]{2,}$/; // Name validation regex (at least 2 letters)
|
||||
const sqlInjectionRegex = /[;'"\\]/; // Prevent SQL injection-like characters
|
||||
|
||||
// Form submission handler
|
||||
feedbackForm.addEventListener('submit', (event) => {
|
||||
event.preventDefault(); // Prevent form submission and page refresh
|
||||
|
||||
const name = nameInput.value.trim();
|
||||
const email = emailInput.value.trim();
|
||||
const phone = phoneInput.value.trim();
|
||||
const message = messageInput.value.trim();
|
||||
|
||||
// Validate each field
|
||||
if (!nameRegex.test(name)) {
|
||||
showCustomAlert('Please enter a valid name (letters and spaces only).');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!emailRegex.test(email)) {
|
||||
showCustomAlert('Please enter a valid email address.');
|
||||
return;
|
||||
}
|
||||
|
||||
if (!phoneRegex.test(phone)) {
|
||||
showCustomAlert('Please enter a valid phone number (10-15 digits).');
|
||||
return;
|
||||
}
|
||||
|
||||
if (sqlInjectionRegex.test(message)) {
|
||||
showCustomAlert('Your message contains invalid characters.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Save feedback to localStorage
|
||||
const feedbackData = {
|
||||
name,
|
||||
email,
|
||||
phone,
|
||||
message,
|
||||
timestamp: new Date().toISOString(),
|
||||
};
|
||||
|
||||
// Retrieve existing feedback data or initialize an empty array
|
||||
const feedbackList = JSON.parse(localStorage.getItem('feedbackList')) || [];
|
||||
feedbackList.push(feedbackData); // Add new feedback to the list
|
||||
localStorage.setItem('feedbackList', JSON.stringify(feedbackList)); // Save updated list to localStorage
|
||||
console.log('Feedback saved to localStorage:', feedbackList);
|
||||
|
||||
// Show success message
|
||||
showCustomAlert('Thank you for your feedback! We appreciate hearing from you.');
|
||||
feedbackForm.reset(); // Clear the input fields after submission
|
||||
});
|
||||
|
||||
// Function to show the custom alert modal
|
||||
function showCustomAlert(message) {
|
||||
alertMessage.textContent = message; // Set modal message
|
||||
alertBox.classList.remove('hidden'); // Display the modal
|
||||
alertBox.style.display = 'flex'; // Ensure the modal is visible
|
||||
}
|
||||
|
||||
// Function to close the custom alert modal
|
||||
function closeCustomAlert() {
|
||||
alertBox.classList.add('hidden'); // Hide the modal
|
||||
alertBox.style.display = 'none'; // Ensure it's hidden
|
||||
}
|
||||
|
||||
// Close modal on "OK" button click
|
||||
alertOkButton.addEventListener('click', closeCustomAlert);
|
||||
|
||||
// Close modal on "X" button click
|
||||
alertCloseButton.addEventListener('click', closeCustomAlert);
|
||||
|
||||
// Close modal when clicking outside the modal content
|
||||
window.addEventListener('click', (event) => {
|
||||
if (event.target === alertBox) {
|
||||
closeCustomAlert();
|
||||
}
|
||||
});
|
||||
});
|
|
@ -1,130 +1,130 @@
|
|||
// Gallery Carousel .js
|
||||
const products = {
|
||||
trees: [
|
||||
{ id: 1, name: "Crepe Mertyl Tree", description: "Beautiful Crepe Mertyl tree.", price: 55.00, image: "images/trees/crepe-mertyl.jpg" },
|
||||
{ id: 2, name: "Silver Birch Tree", description: "Sturdy Silver Birch tree.", price: 45.00, image: "images/trees/silver-birch.jpg" },
|
||||
{ id: 3, name: "Apple Tree", description: "Fruitful apple tree.", price: 35.00, image: "images/trees/apple-tree.jpg" },
|
||||
{ id: 4, name: "Potted Spruce Tree", description: "Miniature Spruce in a white planter.", price: 35.00, image: "images/trees/potted-spruce.jpg" }
|
||||
],
|
||||
indoor: [
|
||||
{ id: 5, name: "Aloe Plant", description: "Thrives with 6-8 hours of direct sunlight a day.", price: 15.00, image: "images/indoor/aloe-plant.jpg" },
|
||||
{ id: 6, name: "Peperonia Plant", description: "Low-maintenance and perfect for spaces with lots of natural light.", price: 12.50, image: "images/indoor/peperonia.jpg" },
|
||||
{ id: 7, name: "String-of-Pearls Plant", description: "Best placed in east-facing windows or on shaded patios and balconies.", price: 20.00, image: "images/indoor/string-of-pearls.jpg" },
|
||||
{ id: 12, name: "Venus Fly Trap", description: "Perfect for young botanists or your fly problem!", price: 12.50, image: "images/indoor/venus-fly-trap.jpg"}
|
||||
],
|
||||
tools: [
|
||||
{ id: 8, name: "Watering Cans", description: "Galvanized aluminum watering cans (x2).", price: 25.00, image: "images/tools/watering-cans.jpg" },
|
||||
{ id: 9, name: "Potting Soil", description: "Premium-blend of nutrient-rich potting soil - 10 lb bag.", price: 8.00, image: "images/tools/potting-soil.png" },
|
||||
{ id: 10, name: "Bird House", description: "Handmade wooden bird house for hanging or mounting.", price: 11.00, image: "images/tools/birdhouse.jpg" },
|
||||
{ id: 11, name: "Gardening Tools", description: "Wooden handled gardening tools.", price: 20.00, image: "images/tools/gardening-tools.jpg"}
|
||||
]
|
||||
};
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
console.log("DOM fully loaded and parsed"); // Check if the DOM is ready
|
||||
|
||||
const productCarousel = document.getElementById('product-carousel');
|
||||
const scrollLeftButton = document.getElementById('scroll-left');
|
||||
const scrollRightButton = document.getElementById('scroll-right');
|
||||
const categoryButtons = document.querySelectorAll('.cat-btn');
|
||||
|
||||
// Scroll button functionality
|
||||
scrollLeftButton.addEventListener('click', () => {
|
||||
productCarousel.scrollBy({ left: -300, behavior: 'smooth' });
|
||||
});
|
||||
|
||||
scrollRightButton.addEventListener('click', () => {
|
||||
productCarousel.scrollBy({ left: 300, behavior: 'smooth' });
|
||||
});
|
||||
|
||||
// Map buttons to categories
|
||||
categoryButtons.forEach(button => {
|
||||
button.addEventListener('click', (event) => {
|
||||
event.preventDefault(); // Prevent default navigation
|
||||
const url = new URL(button.href); // Parse the URL
|
||||
const category = url.searchParams.get('category'); // Get category from the query parameter
|
||||
updateProductList(category); // Update the product list
|
||||
});
|
||||
});
|
||||
|
||||
// Load default category or the one from the current URL
|
||||
const currentUrl = new URL(window.location.href);
|
||||
const defaultCategory = currentUrl.searchParams.get('category') || 'trees';
|
||||
updateProductList(defaultCategory);
|
||||
});
|
||||
|
||||
function updateScrollButtons() {
|
||||
const scrollLeftButton = document.getElementById('scroll-left');
|
||||
const scrollRightButton = document.getElementById('scroll-right');
|
||||
const productCarousel = document.getElementById('product-carousel');
|
||||
|
||||
scrollLeftButton.style.display = productCarousel.scrollLeft === 0 ? 'none' : 'block';
|
||||
scrollRightButton.style.display =
|
||||
productCarousel.scrollWidth - productCarousel.clientWidth === productCarousel.scrollLeft
|
||||
? 'none'
|
||||
: 'block';
|
||||
}
|
||||
|
||||
function updateProductList(category) {
|
||||
const productList = document.getElementById("product-list");
|
||||
if (!productList) {
|
||||
console.error("Element with ID 'product-list' not found in the DOM.");
|
||||
return;
|
||||
}
|
||||
|
||||
productList.innerHTML = ""; // Clear existing products
|
||||
console.log(`Updating product list for category: ${category}`); // Debugging line
|
||||
|
||||
const selectedProducts = products[category];
|
||||
|
||||
if (selectedProducts) {
|
||||
selectedProducts.forEach(product => {
|
||||
const productCard = document.createElement("div");
|
||||
productCard.className = "product-card";
|
||||
|
||||
console.log(`Creating product card for: ${product.name}`); // Debugging line
|
||||
|
||||
productCard.innerHTML = `
|
||||
<img src="${product.image}" alt="${product.name}">
|
||||
<h3>${product.name}</h3>
|
||||
<p>${product.description}</p>
|
||||
<p>$${product.price}</p>
|
||||
<button class="add-to-cart-btn" data-product-id="${product.id}">Add to Cart</button>
|
||||
`;
|
||||
productList.appendChild(productCard);
|
||||
|
||||
// Add event listener for "Add to Cart" button
|
||||
const addToCartButton = productCard.querySelector('.add-to-cart-btn');
|
||||
addToCartButton.addEventListener('click', () => {
|
||||
addToCart(product.id);
|
||||
});
|
||||
});
|
||||
} else {
|
||||
console.error(`No products found for category: ${category}`);
|
||||
}
|
||||
}
|
||||
|
||||
function addToCart(productId) {
|
||||
const product = findProductById(productId);
|
||||
if (product) {
|
||||
let cart = JSON.parse(sessionStorage.getItem('cart')) || [];
|
||||
const existingProduct = cart.find(item => item.id === productId);
|
||||
|
||||
if (existingProduct) {
|
||||
existingProduct.quantity++;
|
||||
} else {
|
||||
cart.push({ ...product, quantity: 1 });
|
||||
}
|
||||
|
||||
sessionStorage.setItem('cart', JSON.stringify(cart));
|
||||
alert(`${product.name} has been added to your cart!`);
|
||||
}
|
||||
}
|
||||
|
||||
function findProductById(productId) {
|
||||
for (let category in products) {
|
||||
const product = products[category].find(item => item.id === productId);
|
||||
if (product) return product;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
// Gallery Carousel .js
|
||||
const products = {
|
||||
trees: [
|
||||
{ id: 1, name: "Crepe Mertyl Tree", description: "Beautiful Crepe Mertyl tree.", price: 55.00, image: "images/trees/crepe-mertyl.jpg" },
|
||||
{ id: 2, name: "Silver Birch Tree", description: "Sturdy Silver Birch tree.", price: 45.00, image: "images/trees/silver-birch.jpg" },
|
||||
{ id: 3, name: "Apple Tree", description: "Fruitful apple tree.", price: 35.00, image: "images/trees/apple-tree.jpg" },
|
||||
{ id: 4, name: "Potted Spruce Tree", description: "Miniature Spruce in a white planter.", price: 35.00, image: "images/trees/potted-spruce.jpg" }
|
||||
],
|
||||
indoor: [
|
||||
{ id: 5, name: "Aloe Plant", description: "Thrives with 6-8 hours of direct sunlight a day.", price: 15.00, image: "images/indoor/aloe-plant.jpg" },
|
||||
{ id: 6, name: "Peperonia Plant", description: "Low-maintenance and perfect for spaces with lots of natural light.", price: 12.50, image: "images/indoor/peperonia.jpg" },
|
||||
{ id: 7, name: "String-of-Pearls Plant", description: "Best placed in east-facing windows or on shaded patios and balconies.", price: 20.00, image: "images/indoor/string-of-pearls.jpg" },
|
||||
{ id: 12, name: "Venus Fly Trap", description: "Perfect for young botanists or your fly problem!", price: 12.50, image: "images/indoor/venus-fly-trap.jpg"}
|
||||
],
|
||||
tools: [
|
||||
{ id: 8, name: "Watering Cans", description: "Galvanized aluminum watering cans (x2).", price: 25.00, image: "images/tools/watering-cans.jpg" },
|
||||
{ id: 9, name: "Potting Soil", description: "Premium-blend of nutrient-rich potting soil - 10 lb bag.", price: 8.00, image: "images/tools/potting-soil.png" },
|
||||
{ id: 10, name: "Bird House", description: "Handmade wooden bird house for hanging or mounting.", price: 11.00, image: "images/tools/birdhouse.jpg" },
|
||||
{ id: 11, name: "Gardening Tools", description: "Wooden handled gardening tools.", price: 20.00, image: "images/tools/gardening-tools.jpg"}
|
||||
]
|
||||
};
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
console.log("DOM fully loaded and parsed"); // Check if the DOM is ready
|
||||
|
||||
const productCarousel = document.getElementById('product-carousel');
|
||||
const scrollLeftButton = document.getElementById('scroll-left');
|
||||
const scrollRightButton = document.getElementById('scroll-right');
|
||||
const categoryButtons = document.querySelectorAll('.cat-btn');
|
||||
|
||||
// Scroll button functionality
|
||||
scrollLeftButton.addEventListener('click', () => {
|
||||
productCarousel.scrollBy({ left: -300, behavior: 'smooth' });
|
||||
});
|
||||
|
||||
scrollRightButton.addEventListener('click', () => {
|
||||
productCarousel.scrollBy({ left: 300, behavior: 'smooth' });
|
||||
});
|
||||
|
||||
// Map buttons to categories
|
||||
categoryButtons.forEach(button => {
|
||||
button.addEventListener('click', (event) => {
|
||||
event.preventDefault(); // Prevent default navigation
|
||||
const url = new URL(button.href); // Parse the URL
|
||||
const category = url.searchParams.get('category'); // Get category from the query parameter
|
||||
updateProductList(category); // Update the product list
|
||||
});
|
||||
});
|
||||
|
||||
// Load default category or the one from the current URL
|
||||
const currentUrl = new URL(window.location.href);
|
||||
const defaultCategory = currentUrl.searchParams.get('category') || 'trees';
|
||||
updateProductList(defaultCategory);
|
||||
});
|
||||
|
||||
function updateScrollButtons() {
|
||||
const scrollLeftButton = document.getElementById('scroll-left');
|
||||
const scrollRightButton = document.getElementById('scroll-right');
|
||||
const productCarousel = document.getElementById('product-carousel');
|
||||
|
||||
scrollLeftButton.style.display = productCarousel.scrollLeft === 0 ? 'none' : 'block';
|
||||
scrollRightButton.style.display =
|
||||
productCarousel.scrollWidth - productCarousel.clientWidth === productCarousel.scrollLeft
|
||||
? 'none'
|
||||
: 'block';
|
||||
}
|
||||
|
||||
function updateProductList(category) {
|
||||
const productList = document.getElementById("product-list");
|
||||
if (!productList) {
|
||||
console.error("Element with ID 'product-list' not found in the DOM.");
|
||||
return;
|
||||
}
|
||||
|
||||
productList.innerHTML = ""; // Clear existing products
|
||||
console.log(`Updating product list for category: ${category}`); // Debugging line
|
||||
|
||||
const selectedProducts = products[category];
|
||||
|
||||
if (selectedProducts) {
|
||||
selectedProducts.forEach(product => {
|
||||
const productCard = document.createElement("div");
|
||||
productCard.className = "product-card";
|
||||
|
||||
console.log(`Creating product card for: ${product.name}`); // Debugging line
|
||||
|
||||
productCard.innerHTML = `
|
||||
<img src="${product.image}" alt="${product.name}">
|
||||
<h3>${product.name}</h3>
|
||||
<p>${product.description}</p>
|
||||
<p>$${product.price}</p>
|
||||
<button class="add-to-cart-btn" data-product-id="${product.id}">Add to Cart</button>
|
||||
`;
|
||||
productList.appendChild(productCard);
|
||||
|
||||
// Add event listener for "Add to Cart" button
|
||||
const addToCartButton = productCard.querySelector('.add-to-cart-btn');
|
||||
addToCartButton.addEventListener('click', () => {
|
||||
addToCart(product.id);
|
||||
});
|
||||
});
|
||||
} else {
|
||||
console.error(`No products found for category: ${category}`);
|
||||
}
|
||||
}
|
||||
|
||||
function addToCart(productId) {
|
||||
const product = findProductById(productId);
|
||||
if (product) {
|
||||
let cart = JSON.parse(sessionStorage.getItem('cart')) || [];
|
||||
const existingProduct = cart.find(item => item.id === productId);
|
||||
|
||||
if (existingProduct) {
|
||||
existingProduct.quantity++;
|
||||
} else {
|
||||
cart.push({ ...product, quantity: 1 });
|
||||
}
|
||||
|
||||
sessionStorage.setItem('cart', JSON.stringify(cart));
|
||||
alert(`${product.name} has been added to your cart!`);
|
||||
}
|
||||
}
|
||||
|
||||
function findProductById(productId) {
|
||||
for (let category in products) {
|
||||
const product = products[category].find(item => item.id === productId);
|
||||
if (product) return product;
|
||||
}
|
||||
return null;
|
||||
}
|
|
@ -0,0 +1,219 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta
|
||||
name="description"
|
||||
content="Bloom Valley Nursery offers a variety of plants, garden tools, and expert gardening advice for your home and garden."
|
||||
/>
|
||||
<script
|
||||
src="https://kit.fontawesome.com/acb7c3b0da.js"
|
||||
crossorigin="anonymous"
|
||||
></script>
|
||||
<title>Gallery - Bloom Valley Nursery</title>
|
||||
<link rel="stylesheet" href="styles.css" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- Header Section -->
|
||||
<header role="banner">
|
||||
<div class="logo">
|
||||
<img
|
||||
src="images/Client1_LogoPalette2_F0C06D.png"
|
||||
alt="Bloom Valley Nursery Logo"/>
|
||||
</div>
|
||||
<h1>Bloom Valley Nursery</h1>
|
||||
<!-- Navigation Bar -->
|
||||
<nav role="navigation" aria-label="Main Navigation">
|
||||
<ul>
|
||||
<li>
|
||||
<a href="index.html">Home</a></li>
|
||||
<li><a href="gallery.html" aria-current="page" class="current-page">Gallery</a></li>
|
||||
<li><a href="about.html">About Us</a></li>
|
||||
<li><a href="community.html">Community Events</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<button
|
||||
id="shopping-cart"
|
||||
aria-label="Open shopping cart"
|
||||
class="fa-solid fa-cart-shopping fa-2xl">
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<!-- Main Content Section -->
|
||||
<main role="main" id="main-gallery">
|
||||
<div id="gallery-top">
|
||||
<section id="product-carousel-feature" aria-label="Interactive Carousel of Available Products by Category.">
|
||||
<h2>Products by Category</h2>
|
||||
<div id="product-category-card">
|
||||
<button
|
||||
id="scroll-left"
|
||||
aria-label="Scroll products left"
|
||||
aria-controls="product-carousel"
|
||||
class="fa-solid fa-chevron-left"
|
||||
>
|
||||
</button>
|
||||
<div id="product-carousel">
|
||||
<div id="product-list"><!--Product Cards will be dynamically inserted here--></div>
|
||||
</div>
|
||||
<button
|
||||
id="scroll-right"
|
||||
aria-label="Scroll products right"
|
||||
aria-controls="product-carousel"
|
||||
class="fa-solid fa-chevron-right"
|
||||
>
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
<aside id="right-aside">
|
||||
<div id="category-nav-container" aria-label="Available Product Categories">
|
||||
<h2>Shop by Category</h2>
|
||||
<div class="categories">
|
||||
<ul>
|
||||
<li><a href="gallery.html?category=trees#" class="cat-btn">Trees</a></li>
|
||||
<li><a href="gallery.html?category=trees#" class="cat-btn">Shrubs</a></li>
|
||||
<li><a href="gallery.html?category=indoor#" class="cat-btn">Indoor</a></li>
|
||||
<li><a href="gallery.html?category=indoor#" class="cat-btn">Patio</a></li>
|
||||
<li><a href="gallery.html?category=tools#" class="cat-btn">Tools</a></li>
|
||||
<li><a href="gallery.html?category=tools#" class="cat-btn">Accessories</a></li>
|
||||
<li><a href="gallery.html?category=tools#" class="cat-btn">Landscaping</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
<div id="gallery-bottom">
|
||||
<button id="cart-details">View Shopping Cart</button>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- Footer Section -->
|
||||
<footer role="contentinfo">
|
||||
<div id="newsletter-container">
|
||||
<label for="email-input" class="hidden">Enter your email to subscribe to our newsletter</label>
|
||||
<form id="newsletter-form">
|
||||
<input
|
||||
type="email"
|
||||
id="email-input"
|
||||
aria-label="Enter your email to Subscribe"
|
||||
placeholder="Subscribe@BloomValleyNursery.com"
|
||||
/>
|
||||
<button id="submit-btn" type="submit" aria-label="Submit the subscribe form">
|
||||
Subscribe Now!
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div id="footer-nav">
|
||||
<ul>
|
||||
<li><a href="index.html">Home</a></li>
|
||||
<li><a href="gallery.html" class="current-page">Gallery</a></li>
|
||||
<li><a href="about.html">About Us</a></li>
|
||||
<li><a href="community.html">Community Events</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="social-media">
|
||||
<p>Check us out on social media!</p>
|
||||
<ul class="social-icons">
|
||||
<li id="pinterest">
|
||||
<a href="#" aria-label="Follow us on Pinterest"
|
||||
><i class="fa-brands fa-square-pinterest fa-lg"></i></a></li>
|
||||
<li id="facebook">
|
||||
<a href="#" aria-label="Follow us on Facebook"
|
||||
><i class="fa-brands fa-facebook fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="instagram">
|
||||
<a href="#" aria-label="Follow us on Instagram"
|
||||
><i class="fa-brands fa-instagram fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="twitter">
|
||||
<a href="#" aria-label="Follow us on X (Twitter)"
|
||||
><i class="fa-brands fa-square-x-twitter fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="youtube">
|
||||
<a href="#" aria-label="View our Youtube channel"
|
||||
><i class="fa-brands fa-youtube fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="copyright">© 2024 Bloom Valley Nursery</div>
|
||||
</footer>
|
||||
<!-- Custom Modal for Newsletter Subscription -->
|
||||
<div id="newsletter-modal" class="modal">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="newsletter-close-btn">×</span>
|
||||
<h2>Newsletter Subscription</h2>
|
||||
<form id="newsletter-form">
|
||||
<input
|
||||
type="email"
|
||||
id="email-input"
|
||||
placeholder="Enter your email"
|
||||
required
|
||||
aria-label="Enter your email to subscribe"
|
||||
/>
|
||||
<button type="submit" id="subscribe-btn">Subscribe</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Custom Alert Modal -->
|
||||
<div id="custom-alert" class="modal hidden">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="alert-close-btn">×</span>
|
||||
<p id="alert-message"></p>
|
||||
<button id="alert-ok-button">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Shopping Cart -->
|
||||
<div id="cart-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal">×</span>
|
||||
<h2>Your Shopping Cart</h2>
|
||||
<ul id="cart-items"></ul> <!-- Dynamically populated -->
|
||||
<p id="cart-total"></p> <!-- Sub-total will appear here -->
|
||||
<div class="modal-buttons">
|
||||
<button id="clear-cart-modal-btn">Clear Cart</button>
|
||||
<button id="process-order-modal-btn">Process Order</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Item Added -->
|
||||
<div id="item-added-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="item-added-close">×</span>
|
||||
<p id="item-added-message"></p> <!-- Dynamically set message -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Confirmation Modal -->
|
||||
<div id="confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="confirmation-close-btn">×</span>
|
||||
<p id="confirmation-message"></p> <!-- Dynamic confirmation message -->
|
||||
<button id="confirmation-confirm-btn">Confirm</button>
|
||||
<button id="confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Final Confirmation Modal -->
|
||||
<div id="final-confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="final-confirmation-close-btn">×</span>
|
||||
<p id="final-confirmation-message"></p> <!-- Message after successful action -->
|
||||
<button id="final-confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- This loads after the page is read by browser -->
|
||||
<script src="gallery-carousel.js"></script>
|
||||
<script src="cart.js"></script>
|
||||
<script src="newsletter.js"></script>
|
||||
</body>
|
||||
</html>
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 110 KiB |
Before Width: | Height: | Size: 123 KiB After Width: | Height: | Size: 123 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 256 KiB After Width: | Height: | Size: 256 KiB |
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 127 KiB After Width: | Height: | Size: 127 KiB |
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
Before Width: | Height: | Size: 91 KiB After Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 107 KiB |
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 201 KiB After Width: | Height: | Size: 201 KiB |
|
@ -0,0 +1,239 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta
|
||||
name="description"
|
||||
content="Bloom Valley Nursery offers a variety of plants, garden tools, and expert gardening advice for your home and garden."
|
||||
/>
|
||||
<script
|
||||
src="https://kit.fontawesome.com/acb7c3b0da.js"
|
||||
crossorigin="anonymous"
|
||||
></script>
|
||||
<title>Homepage - Bloom Valley Nursery</title>
|
||||
<link rel="stylesheet" href="styles.css" />
|
||||
</head>
|
||||
<body>
|
||||
<!-- Header Section -->
|
||||
<header role="banner">
|
||||
<div class="logo">
|
||||
<img
|
||||
src="images/Client1_LogoPalette2_F0C06D.png"
|
||||
alt="Bloom Valley Nursery Logo"/>
|
||||
</div>
|
||||
<h1>Bloom Valley Nursery</h1>
|
||||
<!-- Navigation Bar -->
|
||||
<nav role="navigation" aria-label="Main Navigation">
|
||||
<ul>
|
||||
<li>
|
||||
<a href="index.html" aria-current="page" class="current-page">Home</a></li>
|
||||
<li><a href="gallery.html">Gallery</a></li>
|
||||
<li><a href="about.html">About Us</a></li>
|
||||
<li><a href="community.html">Community Events</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<button
|
||||
id="shopping-cart"
|
||||
aria-label="Open shopping cart"
|
||||
class="fa-solid fa-cart-shopping fa-2xl">
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<!-- Main Content Section -->
|
||||
<main role="main" id="main-index">
|
||||
<aside id="left-aside">
|
||||
<div id="perks-feature-container" aria-label="Reasons for Shopping With Bloom Valley Nursery">
|
||||
<h2 id="perks-heading">Shopper Perks</h2>
|
||||
<div class="perk-item" aria-label="Perk">
|
||||
<h3>- 50% Off Deal -</h3>
|
||||
<p>New subscribers to our newsletter this month will receive a coupon for 50% off their first purchase! Click here for details! Terms and conditions apply.</p>
|
||||
</div>
|
||||
<div class="perk-item" aria-label="Perk">
|
||||
<h3>Exceptional Quality</h3>
|
||||
<p>Every plant is carefully cultivated from seed or bulb to maturity, offering you vibrant, healthy specimens.</p>
|
||||
</div>
|
||||
<div class="perk-item" aria-label="Perk">
|
||||
<h3>Expert Guidance</h3>
|
||||
<p>Our knowledgeable team is here to help, from selecting the perfect plants to offering planting tips.</p>
|
||||
</div>
|
||||
<div class="perk-item" aria-label="Perk">
|
||||
<h3>Eco-Friendly Practices</h3>
|
||||
<p>We prioritize sustainability by using environmentally conscious growing methods, so you can feel good about your choices.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="testimonials-feature" aria-label="Customer Testimonials About Their Experience With Bloom Valley Nursery.">
|
||||
<h2>What Others Say</h2>
|
||||
<div class="testimonial-container">
|
||||
<div class="testimonial" aria-label="Customer Testimonial.">
|
||||
<p>"My order arrived the very next day. The speed of delivery and high-quality products provided by Bloom Valley Nursery helped my project go smoothly from start to finish!"</p>
|
||||
<h3>- Caroline N.</h3>
|
||||
</div>
|
||||
<div class="testimonial" aria-label="Customer Testimonial.">
|
||||
<p>"Thanks to the Gardening 101 Workshop with Bethany and Bloom Valley Nursery's amazing line of products, I won 'Best Azaleas' at the 2024 Royal Horticultural Society's American Cup!"</p>
|
||||
<h3>- Morris F.</h3>
|
||||
</div>
|
||||
<div class="testimonial" aria-label="Customer Testimonial.">
|
||||
<p>"Bloom Valley Nursery's community garden inspired me take charge of my health. I was able to lose 50 pounds!"</p>
|
||||
<h3>- Gladis B.</h3>
|
||||
</div>
|
||||
</div> </div>
|
||||
</aside>
|
||||
<!--<div id="featured-images">
|
||||
<div class="featured-item">
|
||||
<img src="image1.jpg" alt="Feature 1">
|
||||
</div>-->
|
||||
<section id="featured-container" aria-label="Featured items of the week">
|
||||
<h2> This Week's Featured Items</h2>
|
||||
<ul id="featured-images" aria-label="Images of this week's featured items">
|
||||
<li><a href="gallery.html" id="featured-aloe-plant">
|
||||
<img src="images/indoor/AloePlant.png" alt="An Aloe Vera plant in a turquoise ceramic planter." class="featured-item">Aloe Vera / Turquoise Planter</a></li>
|
||||
<li><a href="gallery.html" id="featured-bird-house">
|
||||
<img src="images/accessories/BirdHouse.png" alt="A handmade wooden birdhouse painted blue." class="featured-item">Handmade Wooden Birdhouse - Blue</a></li>
|
||||
<li><a href="gallery.html" id="featured-apple-tree">
|
||||
<img src="images/trees/AppleTree.png" alt="A Red Gala apple sapling in a burlap wrap." class="featured-item">Red Gala Apple Sapling - Burlap Bound</a></li>
|
||||
<li><a href="gallery.html" id="featured-potting-soil">
|
||||
<img src="images/accessories/PottingSoil.png" alt="A 10 lbs bag of potting soil." class="featured-item">Potting Soil - 10 lbs Bag</a></li>
|
||||
<li><a href="gallery.html" id="featured-spider-plant">
|
||||
<img src="images/indoor/SpiderPlant.png" alt="A Spider plant in a light gray ceramic planter." class="featured-item">Spider Plant / Light Gray Planter</a></li>
|
||||
<li><a href="gallery.html" id="featured-birch-tree">
|
||||
<img src="images/trees/BirchTree.png" alt="A Silver Birch sapling in a disposable plastic container." class="featured-item">Silver Birch Sapling - Containerized</a></li>
|
||||
<li><a href="gallery.html" id="featured-watering-can">
|
||||
<img src="images/accessories/WateringCan.png" alt="A blue painted aluminum watering can." class="featured-item">Painted Aluminum Watering Can - Blue</a></li>
|
||||
<li><a href="gallery.html" id="featured-string-of-pearls">
|
||||
<img src="images/indoor/StringofPearls.png" alt="String-of-pearls plant in hanging white ceramic planter." class="featured-item">String-of-Pearls Plant / Hanging White Planter</a></li>
|
||||
<li><a href="gallery.html" id="featured-maple-tree">
|
||||
<img src="images/trees/MapleTree.png" alt="A Japanese Maple sapling in a burlap wrap." class="featured-item">Japanese Maple Sapling - Burlap Bound</a></li>
|
||||
</ul>
|
||||
</section>
|
||||
<aside id="right-aside">
|
||||
<div id="category-nav-container" aria-label="Available Product Categories">
|
||||
<h2>Shop by Category</h2>
|
||||
<div class="categories">
|
||||
<ul>
|
||||
<li><a href="gallery.html?category=trees#" class="cat-btn">Trees</a></li>
|
||||
<li><a href="gallery.html?category=shrubs#" class="cat-btn">Shrubs</a></li>
|
||||
<li><a href="gallery.html?category=indoor#" class="cat-btn">Indoor</a></li>
|
||||
<li><a href="gallery.html?category=patio#" class="cat-btn">Patio</a></li>
|
||||
<li><a href="gallery.html?category=tools#" class="cat-btn">Tools</a></li>
|
||||
<li><a href="gallery.html?category=accessories#" class="cat-btn">Accessories</a></li>
|
||||
<li><a href="gallery.html?category=landscaping#" class="cat-btn">Landscaping</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
<!-- Content specific to this page goes here -->
|
||||
</main>
|
||||
|
||||
<!-- Footer Section -->
|
||||
<footer role="contentinfo">
|
||||
<div id="newsletter-container">
|
||||
<label for="email-input" class="hidden">Enter your email to subscribe to our newsletter</label>
|
||||
<form id="newsletter-form">
|
||||
<input
|
||||
type="email"
|
||||
id="email-input"
|
||||
aria-label="Enter your email to Subscribe"
|
||||
placeholder="Subscribe@BloomValleyNursery.com"
|
||||
/>
|
||||
<button id="submit-btn" type="submit" aria-label="Submit the subscribe form">
|
||||
Subscribe Now!
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div id="footer-nav">
|
||||
<ul>
|
||||
<li><a href="index.html" class="current-page">Home</a></li>
|
||||
<li><a href="gallery.html">Gallery</a></li>
|
||||
<li><a href="about.html">About Us</a></li>
|
||||
<li><a href="community.html">Community Events</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="social-media">
|
||||
<p>Check us out on social media!</p>
|
||||
<ul class="social-icons">
|
||||
<li id="pinterest">
|
||||
<a href="#" aria-label="Follow us on Pinterest"
|
||||
><i class="fa-brands fa-square-pinterest fa-lg"></i></a></li>
|
||||
<li id="facebook">
|
||||
<a href="#" aria-label="Follow us on Facebook"
|
||||
><i class="fa-brands fa-facebook fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="instagram">
|
||||
<a href="#" aria-label="Follow us on Instagram"
|
||||
><i class="fa-brands fa-instagram fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="twitter">
|
||||
<a href="#" aria-label="Follow us on X (Twitter)"
|
||||
><i class="fa-brands fa-square-x-twitter fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="youtube">
|
||||
<a href="#" aria-label="View our Youtube channel"
|
||||
><i class="fa-brands fa-youtube fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="copyright">© 2024 Bloom Valley Nursery</div>
|
||||
</footer>
|
||||
<!-- Custom Newsletter Modal -->
|
||||
<div id="custom-alert" class="modal hidden">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="alert-close-btn">×</span>
|
||||
<p id="alert-message"></p>
|
||||
<button id="alert-ok-button">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Shopping Cart -->
|
||||
<div id="cart-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal">×</span>
|
||||
<h2>Your Shopping Cart</h2>
|
||||
<ul id="cart-items"></ul> <!-- Dynamically populated -->
|
||||
<p id="cart-total"></p> <!-- Sub-total will appear here -->
|
||||
<div class="modal-buttons">
|
||||
<button id="clear-cart-modal-btn">Clear Cart</button>
|
||||
<button id="process-order-modal-btn">Process Order</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Item Added -->
|
||||
<div id="item-added-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="item-added-close">×</span>
|
||||
<p id="item-added-message"></p> <!-- Dynamically set message -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Confirmation Modal -->
|
||||
<div id="confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="confirmation-close-btn">×</span>
|
||||
<p id="confirmation-message"></p> <!-- Dynamic confirmation message -->
|
||||
<button id="confirmation-confirm-btn">Confirm</button>
|
||||
<button id="confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Final Confirmation Modal -->
|
||||
<div id="final-confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="final-confirmation-close-btn">×</span>
|
||||
<p id="final-confirmation-message"></p> <!-- Message after successful action -->
|
||||
<button id="final-confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- This loads after the page is read by browser -->
|
||||
<script src="script.js"></script>
|
||||
<script src="cart.js"></script>
|
||||
<script src="newsletter.js"></script>
|
||||
</body>
|
||||
</html>
|
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 213 KiB After Width: | Height: | Size: 213 KiB |
Before Width: | Height: | Size: 228 KiB After Width: | Height: | Size: 228 KiB |
Before Width: | Height: | Size: 221 KiB After Width: | Height: | Size: 221 KiB |
Before Width: | Height: | Size: 189 KiB After Width: | Height: | Size: 189 KiB |
Before Width: | Height: | Size: 203 KiB After Width: | Height: | Size: 203 KiB |
Before Width: | Height: | Size: 166 KiB After Width: | Height: | Size: 166 KiB |
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 165 KiB |
Before Width: | Height: | Size: 162 KiB After Width: | Height: | Size: 162 KiB |
Before Width: | Height: | Size: 159 KiB After Width: | Height: | Size: 159 KiB |
Before Width: | Height: | Size: 193 KiB After Width: | Height: | Size: 193 KiB |
Before Width: | Height: | Size: 188 KiB After Width: | Height: | Size: 188 KiB |
Before Width: | Height: | Size: 256 KiB After Width: | Height: | Size: 256 KiB |
Before Width: | Height: | Size: 191 KiB After Width: | Height: | Size: 191 KiB |
Before Width: | Height: | Size: 282 KiB After Width: | Height: | Size: 282 KiB |
Before Width: | Height: | Size: 213 KiB After Width: | Height: | Size: 213 KiB |
Before Width: | Height: | Size: 177 KiB After Width: | Height: | Size: 177 KiB |
Before Width: | Height: | Size: 235 KiB After Width: | Height: | Size: 235 KiB |
Before Width: | Height: | Size: 212 KiB After Width: | Height: | Size: 212 KiB |
Before Width: | Height: | Size: 210 KiB After Width: | Height: | Size: 210 KiB |
Before Width: | Height: | Size: 212 KiB After Width: | Height: | Size: 212 KiB |
Before Width: | Height: | Size: 216 KiB After Width: | Height: | Size: 216 KiB |
Before Width: | Height: | Size: 282 KiB After Width: | Height: | Size: 282 KiB |
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 158 KiB |
Before Width: | Height: | Size: 286 KiB After Width: | Height: | Size: 286 KiB |
Before Width: | Height: | Size: 255 KiB After Width: | Height: | Size: 255 KiB |
Before Width: | Height: | Size: 241 KiB After Width: | Height: | Size: 241 KiB |
Before Width: | Height: | Size: 184 KiB After Width: | Height: | Size: 184 KiB |
Before Width: | Height: | Size: 191 KiB After Width: | Height: | Size: 191 KiB |
Before Width: | Height: | Size: 168 KiB After Width: | Height: | Size: 168 KiB |
Before Width: | Height: | Size: 259 KiB After Width: | Height: | Size: 259 KiB |
Before Width: | Height: | Size: 232 KiB After Width: | Height: | Size: 232 KiB |
|
@ -1,50 +1,50 @@
|
|||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const newsletterForm = document.getElementById('newsletter-form');
|
||||
const emailInput = document.getElementById('email-input');
|
||||
const alertBox = document.getElementById('custom-alert');
|
||||
const alertMessage = document.getElementById('alert-message');
|
||||
const alertOkButton = document.getElementById('alert-ok-button');
|
||||
const alertCloseButton = document.getElementById('alert-close-btn');
|
||||
|
||||
// Form submission handler
|
||||
newsletterForm.addEventListener('submit', (event) => {
|
||||
event.preventDefault(); // Prevent form from submitting and refreshing the page
|
||||
|
||||
const email = emailInput.value.trim();
|
||||
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
||||
|
||||
// Check if email is valid
|
||||
if (!emailRegex.test(email)) {
|
||||
showCustomAlert('Please enter a valid email address.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Show success message
|
||||
showCustomAlert(`Thank you for subscribing, ${email}!`);
|
||||
newsletterForm.reset(); // Clear the input field after submission
|
||||
});
|
||||
|
||||
// Function to show the custom alert modal
|
||||
function showCustomAlert(message) {
|
||||
alertMessage.textContent = message; // Set the alert message
|
||||
alertBox.classList.remove('hidden'); // Show the alert modal
|
||||
alertBox.style.display = 'flex'; // Ensure the modal is displayed
|
||||
|
||||
// Close the modal when the "OK" button is clicked
|
||||
alertOkButton.addEventListener('click', closeCustomAlert);
|
||||
alertCloseButton.addEventListener('click', closeCustomAlert);
|
||||
}
|
||||
|
||||
// Function to hide the custom alert modal
|
||||
function closeCustomAlert() {
|
||||
alertBox.classList.add('hidden'); // Hide the alert modal
|
||||
alertBox.style.display = 'none'; // Ensure the modal is hidden
|
||||
}
|
||||
|
||||
// Close the modal if clicking outside the modal content
|
||||
window.addEventListener('click', (event) => {
|
||||
if (event.target === alertBox) {
|
||||
closeCustomAlert();
|
||||
}
|
||||
});
|
||||
});
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const newsletterForm = document.getElementById('newsletter-form');
|
||||
const emailInput = document.getElementById('email-input');
|
||||
const alertBox = document.getElementById('custom-alert');
|
||||
const alertMessage = document.getElementById('alert-message');
|
||||
const alertOkButton = document.getElementById('alert-ok-button');
|
||||
const alertCloseButton = document.getElementById('alert-close-btn');
|
||||
|
||||
// Form submission handler
|
||||
newsletterForm.addEventListener('submit', (event) => {
|
||||
event.preventDefault(); // Prevent form from submitting and refreshing the page
|
||||
|
||||
const email = emailInput.value.trim();
|
||||
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
||||
|
||||
// Check if email is valid
|
||||
if (!emailRegex.test(email)) {
|
||||
showCustomAlert('Please enter a valid email address.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Show success message
|
||||
showCustomAlert(`Thank you for subscribing, ${email}!`);
|
||||
newsletterForm.reset(); // Clear the input field after submission
|
||||
});
|
||||
|
||||
// Function to show the custom alert modal
|
||||
function showCustomAlert(message) {
|
||||
alertMessage.textContent = message; // Set the alert message
|
||||
alertBox.classList.remove('hidden'); // Show the alert modal
|
||||
alertBox.style.display = 'flex'; // Ensure the modal is displayed
|
||||
|
||||
// Close the modal when the "OK" button is clicked
|
||||
alertOkButton.addEventListener('click', closeCustomAlert);
|
||||
alertCloseButton.addEventListener('click', closeCustomAlert);
|
||||
}
|
||||
|
||||
// Function to hide the custom alert modal
|
||||
function closeCustomAlert() {
|
||||
alertBox.classList.add('hidden'); // Hide the alert modal
|
||||
alertBox.style.display = 'none'; // Ensure the modal is hidden
|
||||
}
|
||||
|
||||
// Close the modal if clicking outside the modal content
|
||||
window.addEventListener('click', (event) => {
|
||||
if (event.target === alertBox) {
|
||||
closeCustomAlert();
|
||||
}
|
||||
});
|
||||
});
|
|
@ -4,8 +4,5 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"servor": "^4.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@11ty/eleventy": "^3.1.2"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,47 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="description" content="{{ metaDesc }}">
|
||||
|
||||
<title>{{title}}</title>
|
||||
|
||||
{% if stylesheet %}
|
||||
{% for style in stylesheet %}
|
||||
<link rel="stylesheet" href="{{ style }}">
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if hCAPTCHA %}
|
||||
<script src="{{ hCAPTCHA }}" async defer></script>
|
||||
{% endif %}
|
||||
|
||||
{% if fontAwesome %}
|
||||
<script src="{{ fontAwesome }}" crossorigin="anonymous"></script>
|
||||
{% endif %}
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
{% include "header.html" %}
|
||||
|
||||
<main>
|
||||
|
||||
{{ content | safe }}
|
||||
|
||||
</main>
|
||||
|
||||
{% include "footer.html" %}
|
||||
|
||||
<!-- <a href="https://www.svgbackgrounds.com/set/free-svg-backgrounds-and-patterns/">Free SVG Backgrounds and Patterns by SVGBackgrounds.com</a> -->
|
||||
|
||||
{% if pageScripts %}
|
||||
{% for script in pageScripts %}
|
||||
<script src="{{ script }}"></script>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,103 +0,0 @@
|
|||
<!-- Footer Section -->
|
||||
<footer role="contentinfo">
|
||||
<div id="newsletter-container">
|
||||
<label for="email-input" class="hidden">Enter your email to subscribe to our newsletter</label>
|
||||
<form id="newsletter-form">
|
||||
<input
|
||||
type="email"
|
||||
id="email-input"
|
||||
aria-label="Enter your email to Subscribe"
|
||||
placeholder="Subscribe@BloomValleyNursery.com"
|
||||
/>
|
||||
<button id="submit-btn" type="submit" aria-label="Submit the subscribe form">
|
||||
Subscribe Now!
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div id="footer-nav">
|
||||
<ul>
|
||||
<li><a href="/" class="current-page">Home</a></li>
|
||||
<li><a href="/gallery/">Gallery</a></li>
|
||||
<li><a href="/about/">About Us</a></li>
|
||||
<li><a href="/community/">Community Events</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="social-media">
|
||||
<p>Check us out on social media!</p>
|
||||
<ul class="social-icons">
|
||||
<li id="pinterest">
|
||||
<a href="#" aria-label="Follow us on Pinterest"
|
||||
><i class="fa-brands fa-square-pinterest fa-lg"></i></a></li>
|
||||
<li id="facebook">
|
||||
<a href="#" aria-label="Follow us on Facebook"
|
||||
><i class="fa-brands fa-facebook fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="instagram">
|
||||
<a href="#" aria-label="Follow us on Instagram"
|
||||
><i class="fa-brands fa-instagram fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="twitter">
|
||||
<a href="#" aria-label="Follow us on X (Twitter)"
|
||||
><i class="fa-brands fa-square-x-twitter fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
<li id="youtube">
|
||||
<a href="#" aria-label="View our Youtube channel"
|
||||
><i class="fa-brands fa-youtube fa-lg"></i
|
||||
></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="copyright">© 2025, Derek L. Seitz, <a href="https://dlseitz.dev">dlseitz.dev.</a></div>
|
||||
</footer>
|
||||
<!-- Custom Newsletter Modal -->
|
||||
<div id="custom-alert" class="modal hidden">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="alert-close-btn">×</span>
|
||||
<p id="alert-message"></p>
|
||||
<button id="alert-ok-button">OK</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Shopping Cart -->
|
||||
<div id="cart-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal">×</span>
|
||||
<h2>Your Shopping Cart</h2>
|
||||
<ul id="cart-items"></ul> <!-- Dynamically populated -->
|
||||
<p id="cart-total"></p> <!-- Sub-total will appear here -->
|
||||
<div class="modal-buttons">
|
||||
<button id="clear-cart-modal-btn">Clear Cart</button>
|
||||
<button id="process-order-modal-btn">Process Order</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modal for Item Added -->
|
||||
<div id="item-added-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="item-added-close">×</span>
|
||||
<p id="item-added-message"></p> <!-- Dynamically set message -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Confirmation Modal -->
|
||||
<div id="confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="confirmation-close-btn">×</span>
|
||||
<p id="confirmation-message"></p> <!-- Dynamic confirmation message -->
|
||||
<button id="confirmation-confirm-btn">Confirm</button>
|
||||
<button id="confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Final Confirmation Modal -->
|
||||
<div id="final-confirmation-modal" class="modal" style="display: none;">
|
||||
<div class="modal-content">
|
||||
<span class="close-modal" id="final-confirmation-close-btn">×</span>
|
||||
<p id="final-confirmation-message"></p> <!-- Message after successful action -->
|
||||
<button id="final-confirmation-close-btn">Close</button>
|
||||
</div>
|
||||
</div>
|
|
@ -1,25 +0,0 @@
|
|||
<header role="banner">
|
||||
<div class="logo">
|
||||
<img
|
||||
src="images/Client1_LogoPalette2_F0C06D.png"
|
||||
alt="Bloom Valley Nursery Logo"/>
|
||||
</div>
|
||||
<h1>Bloom Valley Nursery</h1>
|
||||
<!-- Navigation Bar -->
|
||||
<nav role="navigation" aria-label="Main Navigation">
|
||||
<ul>
|
||||
<li>
|
||||
<a href="/" aria-current="page" class="current-page">Home</a></li>
|
||||
<li><a href="/gallery/">Gallery</a></li>
|
||||
<li><a href="/about/">About Us</a></li>
|
||||
<li><a href="/community/">Community Events</a></li>
|
||||
</ul>
|
||||
<div>
|
||||
<button
|
||||
id="shopping-cart"
|
||||
aria-label="Open shopping cart"
|
||||
class="fa-solid fa-cart-shopping fa-2xl">
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
116
src/about.njk
|
@ -1,116 +0,0 @@
|
|||
---
|
||||
layout: base.njk
|
||||
metaDesc: "Demo eCommerce website by Derek L. Seitz - dlseitz.dev"
|
||||
title: "About - Bloom Valley Nursery Demo"
|
||||
stylesheet:
|
||||
- "/styles/variables.css"
|
||||
- "/styles/base.css"
|
||||
- "/styles/header-footer.css"
|
||||
- "/styles/about.css"
|
||||
fontAwesome: "https://kit.fontawesome.com/abc7c3b0da.js"
|
||||
isLandingPage: false
|
||||
pageScripts:
|
||||
- "/scripts/feedback.js"
|
||||
- "/scripts/cart.js"
|
||||
- "/scripts/newsletter.js"
|
||||
---
|
||||
|
||||
<div id="main-top">
|
||||
<aside
|
||||
id="business-info"
|
||||
aria-label="Hours of operation and contact info"
|
||||
>
|
||||
<h3>Contact Us</h3>
|
||||
<div id="phone">
|
||||
<h4><strong>Phone:</strong></h4>
|
||||
<p>(555) 123-4567</p>
|
||||
</div>
|
||||
<h3>Hours of Operation</h3>
|
||||
<div id="hours">
|
||||
<h4><strong>Monday - Friday:</strong></h4>
|
||||
<p>9:00 AM - 6:00 PM</p>
|
||||
<h4><strong>Saturday & Sunday:</strong></h4>
|
||||
<p>10:00 AM - 5:00 PM</p>
|
||||
</div>
|
||||
</aside>
|
||||
<div id="story" aria-label="History of Bloom Valley Nursery">
|
||||
<h1>The Story of Bloom Valley</h1>
|
||||
<p>
|
||||
Legend has it that in 1822, Benjamin Bloom, his wife Violet, and
|
||||
their young daughter Nora stumbled upon a breathtaking valley
|
||||
brimming with vibrant, rare flowers during their journey westward.
|
||||
Enchanted by its beauty, they decided to settle there, abandoning
|
||||
their plans to reach California. This picturesque haven became known
|
||||
as Bloom Valley.
|
||||
</p>
|
||||
<p>
|
||||
Today, on the very land where the Bloom family found their paradise,
|
||||
stands Bloom Valley Nursery. Still family-owned and operated,
|
||||
siblings Bethany, Vincent, and Nathaniel Bloom carry forward a
|
||||
legacy of preserving and sharing the natural beauty that captivated
|
||||
the hearts of their ancestors over two centuries ago.
|
||||
</p>
|
||||
<p>Though many things have changed through the years, our commitment to serving our community has remained the same. Let us help you cultivate joy, one bloom at a time!</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="main-bottom">
|
||||
<div id="feedback" aria-label="Feedback form">
|
||||
<div id="feedback-intro">
|
||||
<h1>We Want to Hear From You!</h1>
|
||||
<h3>Your feedback provides us with valuable insight into where we stand in our commitment to our neighbors, friends, and the entire Bloom Valley community.</h3>
|
||||
<p>Feel free to contact us by filling out the form below if you have any questions, concerns, or simply want to tell us how we can better serve you in the future. You are also welcome to give us a call at the number above if you need to speak with someone directly. Our friendly staff can help answer your questions or guide you in placing custom orders as well!</p>
|
||||
</div>
|
||||
<div id="feedback-form">
|
||||
<form action="#" method="POST">
|
||||
<div id="customer-info">
|
||||
<div id="name-field">
|
||||
<label for="name">Name:</label>
|
||||
<input
|
||||
type="text"
|
||||
id="name"
|
||||
name="name"
|
||||
aria-label="Enter your name here" placeholder="Your Name"
|
||||
required/>
|
||||
</div>
|
||||
<div id="phone-field">
|
||||
<label for="tel">Phone Number:</label>
|
||||
<input
|
||||
type="tel"
|
||||
id="tel"
|
||||
name="telephone"
|
||||
aria-label="Enter your contact phone number here" placeholder="Your Phone Number"
|
||||
required/>
|
||||
</div>
|
||||
<div id="email-field">
|
||||
<label for="email">Email:</label>
|
||||
<input
|
||||
type="email"
|
||||
id="email"
|
||||
name="email"
|
||||
aria-label="Enter your contact email here" placeholder="user@domain.com"
|
||||
required/>
|
||||
</div>
|
||||
</div>
|
||||
<div id="customer-message">
|
||||
<div id="message-field">
|
||||
<label for="message">Message:</label>
|
||||
<textarea
|
||||
id="message"
|
||||
name="message"
|
||||
rows="5"
|
||||
aria-label="Enter feedback or inquiries here" placeholder="Enter feedback or inquiries here..."
|
||||
required>
|
||||
</textarea>
|
||||
</div>
|
||||
<div id="form-submit-btn">
|
||||
<button
|
||||
id="form-submit"
|
||||
type="submit"
|
||||
aria-label="Submit feedback or inquiry"
|
||||
>Submit
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
|
@ -1,99 +0,0 @@
|
|||
---
|
||||
layout: base.njk
|
||||
metaDesc: "Demo eCommerce website by Derek L. Seitz - dlseitz.dev"
|
||||
title: "Community Events - Bloom Valley Nursery Demo"
|
||||
stylesheet:
|
||||
- "/styles/variables.css"
|
||||
- "/styles/base.css"
|
||||
- "/styles/header-footer.css"
|
||||
- "/styles/community.css"
|
||||
fontAwesome: "https://kit.fontawesome.com/abc7c3b0da.js"
|
||||
isLandingPage: false
|
||||
pageScripts:
|
||||
- "/scripts/cart.js"
|
||||
- "/scripts/newsletter.js"
|
||||
---
|
||||
|
||||
<h1>Mark Your Calendars!</h1>
|
||||
<div id="calendar-events-container">
|
||||
<div class="calendar">
|
||||
<iframe
|
||||
src="https://calendar.google.com/calendar/embed?src=your_calendar_id&ctz=America/Chicago"
|
||||
style="border: 0; width: 90vww; height: 600px"
|
||||
frameborder="0"
|
||||
scrolling="no" aria-label="Google Calendar displaying upcoming events at Bloom Valley Nursery">
|
||||
</iframe><!-- change "your_calendar_id" to an actual Google Calendar ID (Not possible due to the Client Scenario being fictional. This would require creating a fake Google account.)-->
|
||||
</div>
|
||||
<section class="events" aria-label="List of upcoming local events">
|
||||
<h2>Upcoming Events</h2>
|
||||
<div class="event-list">
|
||||
<div id="bvn-events">
|
||||
<h3>Events at Bloom Valley Nursery</h3>
|
||||
<p>
|
||||
All workshops at Bloom Valley Nursery are provided free of charge to
|
||||
anyone interested in learning techniques and ideas for creating a
|
||||
visually appealing living space that can be personalized to suite
|
||||
individual needs. Registration links are provided in each Google
|
||||
Calendar Event by clicking on the date of the event within the
|
||||
Google Calendar on this page.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Gardening and Landscaping 101:</strong><br><strong>When:</strong><br> 2nd Tuesday of
|
||||
Every Month @ 6:30 pm.<br>Join Bethany Bloom as she shares her tips for
|
||||
creating a themed decor through-out the home that you will be
|
||||
delighted to share with your holiday guests.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Deck the Halls</strong><br><strong>When:</strong> Saturday @ 10:00 am.<br>Join
|
||||
Nathaniel and Vincent as they guide us through picking and tending
|
||||
the perfect live Christmas tree for your Christmas decoration
|
||||
focal-point.
|
||||
</li>
|
||||
<li>
|
||||
<strong>Christmas Eve and Christmas Day</strong><br><strong>Bloom Valley
|
||||
Nursery will close on Christmas Eve at 8:00 pm</strong> for any last-minute
|
||||
shopping.<br>The nursery will remain <strong>closed until January 2nd</strong>. During
|
||||
this time, we will be making improvements to the nursery grounds and
|
||||
store with the aim of better serving our Bloom Valley neighbors,
|
||||
friends and family. We are excited to share the new features and changes with
|
||||
you in the New Year!<br><strong>Happy Holidays!!!</strong>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div id="community-wide">
|
||||
<h3>Community-Wide Events</h3>
|
||||
<p>
|
||||
This section includes local community events for which Bloom Valley
|
||||
Nursery is in partner with or a sponsor of. These events are
|
||||
typically free of charge, but can include sub-events by other local
|
||||
organizations and businesses that may not be free of charge. Check
|
||||
with specific organizations, businesses, and the Bloom Valley
|
||||
Chamber of Commerce for specific details that may not be provided by
|
||||
Bloom Valley Nursery.
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
<strong>Tree Lighting Ceremony</strong><br><strong>When:</strong></br>Thursday @ 6:00 pm.<br>
|
||||
Help us kick off the Holiday festivities by joining the Bloom
|
||||
family, along with the Bloom Valley Chamber of Commerce, the Bloom
|
||||
Valley Garden Club, and many other local businesses and
|
||||
organizations, as we gather <strong>in front of City Hall</strong> for the annual Tree
|
||||
Lighting Ceremony! This event will include performances by the Bloom
|
||||
Valley Junior and Senior High Marching Bands, a workshop for making
|
||||
tree ornaments, the annual Chili Cook-off, and much more!
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- Add more events as needed -->
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<p>
|
||||
For more details, to add events to this page, or to leave feedback,
|
||||
<a
|
||||
href="/about/#feedback"
|
||||
aria-label="Go to the feedback form on the About Us page to leave feedback or inquiries."
|
||||
>click here</a
|
||||
> to send us a message.
|
||||
</p>
|
|
@ -1,61 +0,0 @@
|
|||
---
|
||||
layout: base.njk
|
||||
metaDesc: "Demo eCommerce website by Derek L. Seitz - dlseitz.dev"
|
||||
title: "Gallery - Bloom Valley Nursery Demo"
|
||||
stylesheet:
|
||||
- "/styles/variables.css"
|
||||
- "/styles/base.css"
|
||||
- "/styles/header-footer.css"
|
||||
- "/styles/gallery.css"
|
||||
fontAwesome: "https://kit.fontawesome.com/abc7c3b0da.js"
|
||||
isLandingPage: false
|
||||
pageScripts:
|
||||
- "/scripts/gallery-carousel.js"
|
||||
- "/scripts/script.js"
|
||||
- "/scripts/cart.js"
|
||||
- "/scripts/newsletter.js"
|
||||
---
|
||||
|
||||
<div id="gallery-top">
|
||||
<section id="product-carousel-feature" aria-label="Interactive Carousel of Available Products by Category.">
|
||||
<h2>Products by Category</h2>
|
||||
<div id="product-category-card">
|
||||
<button
|
||||
id="scroll-left"
|
||||
aria-label="Scroll products left"
|
||||
aria-controls="product-carousel"
|
||||
class="fa-solid fa-chevron-left"
|
||||
>
|
||||
</button>
|
||||
<div id="product-carousel">
|
||||
<div id="product-list"><!--Product Cards will be dynamically inserted here--></div>
|
||||
</div>
|
||||
<button
|
||||
id="scroll-right"
|
||||
aria-label="Scroll products right"
|
||||
aria-controls="product-carousel"
|
||||
class="fa-solid fa-chevron-right"
|
||||
>
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
<aside id="right-aside">
|
||||
<div id="category-nav-container" aria-label="Available Product Categories">
|
||||
<h2>Shop by Category</h2>
|
||||
<div class="categories">
|
||||
<ul>
|
||||
<li><a href="/gallery/?category=trees#" class="cat-btn">Trees</a></li>
|
||||
<li><a href="/gallery/?category=trees#" class="cat-btn">Shrubs</a></li>
|
||||
<li><a href="/gallery/?category=indoor#" class="cat-btn">Indoor</a></li>
|
||||
<li><a href="/gallery/?category=indoor#" class="cat-btn">Patio</a></li>
|
||||
<li><a href="/gallery/?category=tools#" class="cat-btn">Tools</a></li>
|
||||
<li><a href="/gallery/?category=tools#" class="cat-btn">Accessories</a></li>
|
||||
<li><a href="/gallery/?category=tools#" class="cat-btn">Landscaping</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
<div id="gallery-bottom">
|
||||
<button id="cart-details">View Shopping Cart</button>
|
||||
</div>
|
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 73 KiB |
Before Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 110 KiB |
Before Width: | Height: | Size: 123 KiB |
Before Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 213 KiB |
Before Width: | Height: | Size: 228 KiB |