Skip to content

Commit 6110cd0

Browse files
committed
Set description limit for new list form, both front end and backend
1 parent 5b10e6d commit 6110cd0

File tree

3 files changed

+49
-2
lines changed

3 files changed

+49
-2
lines changed

controllers/listing.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@ module.exports.search = async (req, res) => {
9898
// Destructure the properties from req.body.listing, including tags
9999
const { title, description, price, country, location, tags } = req.body.listing;
100100

101+
//Description limit
102+
if(description.length > 1000){
103+
req.flash("error", "Maximum 1000 charecters allowed!");
104+
return res.redirect("/listing/new");
105+
}
106+
101107
// Ensure tags is an array (if it's a comma-separated string, split it)
102108
let tagArray = [];
103109
if (tags) {

public/js/script.js

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,4 +172,44 @@ listingImageInput.addEventListener('change', function() {
172172
fileError.classList.remove("alert-error");
173173
fileError.classList.add("nomal-error");
174174
}
175-
});
175+
});
176+
177+
178+
179+
// // Set the descriptiopn limit
180+
// const description = document.querySelector("#list-description");
181+
// const desError = document.querySelector("#des-error");
182+
// description.addEventListener("change", function(){
183+
// if(description.value.length >= 1000){
184+
// desError.classList.remove("nomal-error");
185+
// desError.classList.add("alert-error");
186+
// description.value = "";
187+
// }
188+
// else{
189+
// desError.classList.remove("alert-error");
190+
// desError.classList.add("nomal-error");
191+
// }
192+
// })
193+
194+
195+
196+
// Set the description limit
197+
const description = document.querySelector("#list-description");
198+
const desError = document.querySelector("#des-error");
199+
const maxChars = 1000;
200+
201+
description.addEventListener("input", function() {
202+
const currentLength = description.value.length;
203+
204+
if (currentLength > maxChars) {
205+
// Limit the description to the maximum allowed characters
206+
description.value = description.value.substring(0, maxChars);
207+
desError.textContent = "You have reached the 1000-character limit!";
208+
desError.classList.add("alert-error");
209+
desError.classList.remove("normal-error");
210+
} else {
211+
desError.textContent = `Maximum ${maxChars} characters!`;
212+
desError.classList.remove("alert-error");
213+
desError.classList.add("normal-error");
214+
}
215+
});

views/new.ejs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@
115115
<div class="mb-3 listing_form">
116116
<label for="description" class="form-label">Description</label>
117117
<br>
118-
<textarea name="listing[description]" class="form-control" cols="30" rows="5" placeholder="Enter description....." required></textarea>
118+
<textarea name="listing[description]" id="list-description" class="form-control" cols="30" rows="5" placeholder="Enter description....." required></textarea>
119+
<small class="" id="des-error"></small>
119120
<div class="invalid-feedback">Please add a description!</div>
120121
<div class="valid-feedback">Looks good!</div>
121122
</div>

0 commit comments

Comments
 (0)