From aa636fa4b9e174d609e317745c1e72f9098d2813 Mon Sep 17 00:00:00 2001 From: Saidurga Date: Tue, 30 Sep 2025 12:17:48 +0530 Subject: [PATCH 1/2] durga-html-advancedtags --- css/advanced/Assignment-1/index.html | 0 css/advanced/Assignment-1/style.css | 69 +++++++++++++++++++++++ css/advanced/Assignment-2/animations.html | 60 ++++++++++++++++++++ 3 files changed, 129 insertions(+) create mode 100644 css/advanced/Assignment-1/index.html create mode 100644 css/advanced/Assignment-1/style.css create mode 100644 css/advanced/Assignment-2/animations.html diff --git a/css/advanced/Assignment-1/index.html b/css/advanced/Assignment-1/index.html new file mode 100644 index 00000000..e69de29b diff --git a/css/advanced/Assignment-1/style.css b/css/advanced/Assignment-1/style.css new file mode 100644 index 00000000..3e7719f6 --- /dev/null +++ b/css/advanced/Assignment-1/style.css @@ -0,0 +1,69 @@ + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: Arial, sans-serif; + line-height: 1.6; +} + +header { + background: #0d0a99; + color: #fff; + padding: 20px; + text-align: center; +} + +nav ul { + list-style: none; + display: flex; + justify-content: center; + gap: 20px; + margin-top: 10px; +} + +nav a { + color: #fff; + text-decoration: none; +} + +main { + display: flex; + padding: 20px; + gap: 20px; +} + +article { + flex: 3; + background: #2c13a8; + color: #fff; + padding: 20px; + border-radius: 8px; +} + +aside { + flex: 1; + background: #4d119b; + color: #fff; + padding: 20px; + border-radius: 8px; +} + +footer { + background: #3f12ba; + color: #fff; + text-align: center; + padding: 15px; + margin-top: 20px; + bottom: auto; +} + +@media (max-width: 768px) { + main { + flex-direction: column; + flex:1; + } +} diff --git a/css/advanced/Assignment-2/animations.html b/css/advanced/Assignment-2/animations.html new file mode 100644 index 00000000..45bcfc50 --- /dev/null +++ b/css/advanced/Assignment-2/animations.html @@ -0,0 +1,60 @@ + + + + + + CSS Animation & Media Queries + + + +
Hello Guys..!
+ + From eccb537b8638ce5f69351fd89c850b1d2345576c Mon Sep 17 00:00:00 2001 From: Saidurga Date: Wed, 5 Nov 2025 21:56:00 +0530 Subject: [PATCH 2/2] durga-js-events --- .../Assignment-1/bubbling_delegation.html | 15 +++++ javascript/8-events/Assignment-1/script.js | 35 +++++++++++ javascript/8-events/Assignment-1/style.css | 16 +++++ .../8-events/Assignment-2/keyboardevents.html | 37 ++++++++++++ javascript/8-events/Assignment-2/script.js | 16 +++++ .../Assignment-3/event_propagation.html | 23 +++++++ javascript/8-events/Assignment-3/script.js | 15 +++++ javascript/8-events/Assignment-3/style.css | 20 +++++++ .../Assignment-4/prevent_default.html | 45 ++++++++++++++ javascript/8-events/Assignment-4/script.js | 12 ++++ javascript/8-events/Assignment-5/script.js | 12 ++++ .../Assignment-5/stop_propagation.html | 35 +++++++++++ .../Assignment-6/form_validations.html | 31 ++++++++++ javascript/8-events/Assignment-6/script.js | 60 +++++++++++++++++++ javascript/8-events/Assignment-6/style.css | 49 +++++++++++++++ .../Assignment-7/mutation_observer.html | 17 ++++++ javascript/8-events/Assignment-7/script.js | 24 ++++++++ javascript/8-events/Assignment-7/style.css | 26 ++++++++ 18 files changed, 488 insertions(+) create mode 100644 javascript/8-events/Assignment-1/bubbling_delegation.html create mode 100644 javascript/8-events/Assignment-1/script.js create mode 100644 javascript/8-events/Assignment-1/style.css create mode 100644 javascript/8-events/Assignment-2/keyboardevents.html create mode 100644 javascript/8-events/Assignment-2/script.js create mode 100644 javascript/8-events/Assignment-3/event_propagation.html create mode 100644 javascript/8-events/Assignment-3/script.js create mode 100644 javascript/8-events/Assignment-3/style.css create mode 100644 javascript/8-events/Assignment-4/prevent_default.html create mode 100644 javascript/8-events/Assignment-4/script.js create mode 100644 javascript/8-events/Assignment-5/script.js create mode 100644 javascript/8-events/Assignment-5/stop_propagation.html create mode 100644 javascript/8-events/Assignment-6/form_validations.html create mode 100644 javascript/8-events/Assignment-6/script.js create mode 100644 javascript/8-events/Assignment-6/style.css create mode 100644 javascript/8-events/Assignment-7/mutation_observer.html create mode 100644 javascript/8-events/Assignment-7/script.js create mode 100644 javascript/8-events/Assignment-7/style.css diff --git a/javascript/8-events/Assignment-1/bubbling_delegation.html b/javascript/8-events/Assignment-1/bubbling_delegation.html new file mode 100644 index 00000000..9f815e00 --- /dev/null +++ b/javascript/8-events/Assignment-1/bubbling_delegation.html @@ -0,0 +1,15 @@ + + + + + + Event Delegation & Bubbling + + + +

Event Delegation and Bubbling Example

+
+ + + + diff --git a/javascript/8-events/Assignment-1/script.js b/javascript/8-events/Assignment-1/script.js new file mode 100644 index 00000000..de9664c6 --- /dev/null +++ b/javascript/8-events/Assignment-1/script.js @@ -0,0 +1,35 @@ + +const table = document.getElementById("myTable"); +for (let i = 0; i < 10; i++) { + const row = table.insertRow(); + for (let j = 0; j < 10; j++) { + const cell = row.insertCell(); + cell.textContent = `${i + 1},${j + 1}`; // Display cell position + } +} +table.addEventListener("mouseover", (event) => { + if (event.target.tagName === "TD") { + const cell = event.target; + const row = cell.parentNode; + const colIndex = cell.cellIndex; + + for (let td of row.children) { + td.classList.add("highlight"); + } + + for (let r of table.rows) { + r.cells[colIndex].classList.add("highlight"); + } + } +}); + +table.addEventListener("mouseout", (event) => { + + if (event.target.tagName === "TD") { + for (let row of table.rows) { + for (let cell of row.cells) { + cell.classList.remove("highlight"); + } + } + } +}); diff --git a/javascript/8-events/Assignment-1/style.css b/javascript/8-events/Assignment-1/style.css new file mode 100644 index 00000000..351b46f4 --- /dev/null +++ b/javascript/8-events/Assignment-1/style.css @@ -0,0 +1,16 @@ +table { + border-collapse: collapse; + margin: 20px; +} + +td { + border: 1px solid black; + padding: 10px; + width: 50px; + text-align: center; + cursor: pointer; +} + +.highlight { + background-color: yellow; +} diff --git a/javascript/8-events/Assignment-2/keyboardevents.html b/javascript/8-events/Assignment-2/keyboardevents.html new file mode 100644 index 00000000..9e3abe2d --- /dev/null +++ b/javascript/8-events/Assignment-2/keyboardevents.html @@ -0,0 +1,37 @@ + + + + Keyboard Events Example + + + +

Keyboard Events: Keydown & Keyup

+
KeyDown Events:
+
KeyUp Events:
+ + + + diff --git a/javascript/8-events/Assignment-2/script.js b/javascript/8-events/Assignment-2/script.js new file mode 100644 index 00000000..e4e4e11b --- /dev/null +++ b/javascript/8-events/Assignment-2/script.js @@ -0,0 +1,16 @@ +const keydownDiv = document.getElementById("keydownDiv"); +const keyupDiv = document.getElementById("keyupDiv"); + +let pressedKeys = new Set(); + + +window.addEventListener("keydown", (event) => { + pressedKeys.add(event.key); + const combo = Array.from(pressedKeys).join(" + "); + keydownDiv.textContent = `KeyDown: ${combo}`; +}); + +window.addEventListener("keyup", (event) => { + pressedKeys.delete(event.key); + keyupDiv.textContent = `KeyUp: ${event.key}`; +}); diff --git a/javascript/8-events/Assignment-3/event_propagation.html b/javascript/8-events/Assignment-3/event_propagation.html new file mode 100644 index 00000000..58b29841 --- /dev/null +++ b/javascript/8-events/Assignment-3/event_propagation.html @@ -0,0 +1,23 @@ + + + + + Event Propagation Example + + + +

Event Propagation: Capture, Target, and Bubble

+ +
+ Level 1 +
+ Level 2 +
+ Level 3 (Click Me) +
+
+
+ + + + diff --git a/javascript/8-events/Assignment-3/script.js b/javascript/8-events/Assignment-3/script.js new file mode 100644 index 00000000..0de5b491 --- /dev/null +++ b/javascript/8-events/Assignment-3/script.js @@ -0,0 +1,15 @@ + +const level1 = document.getElementById("level1"); +const level2 = document.getElementById("level2"); +const level3 = document.getElementById("level3"); +level1.addEventListener("click", () => { + alert("Level 1 (Capture Phase)"); +}, true); + +level2.addEventListener("click", () => { + alert("Level 2 (Bubble Phase)"); +}); + +level3.addEventListener("click", () => { + alert("Level 3 (Target Phase)"); +}); diff --git a/javascript/8-events/Assignment-3/style.css b/javascript/8-events/Assignment-3/style.css new file mode 100644 index 00000000..949c45c0 --- /dev/null +++ b/javascript/8-events/Assignment-3/style.css @@ -0,0 +1,20 @@ +#level1, #level2, #level3 { + padding: 40px; + margin: 10px; + border: 2px solid black; + text-align: center; + font-weight: bold; + cursor: pointer; +} + +#level1 { + background-color: #ffd6d6; +} + +#level2 { + background-color: #d6ffd6; +} + +#level3 { + background-color: #d6d6ff; +} diff --git a/javascript/8-events/Assignment-4/prevent_default.html b/javascript/8-events/Assignment-4/prevent_default.html new file mode 100644 index 00000000..297b7732 --- /dev/null +++ b/javascript/8-events/Assignment-4/prevent_default.html @@ -0,0 +1,45 @@ + + + + + + Prevent Default Example + + + + +
+ + + + + + + +
+ +

+ + + + + diff --git a/javascript/8-events/Assignment-4/script.js b/javascript/8-events/Assignment-4/script.js new file mode 100644 index 00000000..7b465666 --- /dev/null +++ b/javascript/8-events/Assignment-4/script.js @@ -0,0 +1,12 @@ +document.getElementById("myForm").addEventListener("submit", function(event) { + const name = document.getElementById("name").value.trim(); + const email = document.getElementById("email").value.trim(); + const message = document.getElementById("message"); + if (name === "" || email === "") { + event.preventDefault(); + message.textContent = "Please fill out all fields before submitting!"; + } else { + message.style.color = "green"; + message.textContent = "Form submitted successfully!"; + } +}); diff --git a/javascript/8-events/Assignment-5/script.js b/javascript/8-events/Assignment-5/script.js new file mode 100644 index 00000000..f975c9ad --- /dev/null +++ b/javascript/8-events/Assignment-5/script.js @@ -0,0 +1,12 @@ + +const parentDiv = document.getElementById("parentDiv"); +const childDiv = document.getElementById("childDiv"); + +parentDiv.addEventListener("click", function() { + alert("Parent div clicked!"); +}); + +childDiv.addEventListener("click", function(event) { + alert("Child div clicked!"); + event.stopPropagation(); +}); diff --git a/javascript/8-events/Assignment-5/stop_propagation.html b/javascript/8-events/Assignment-5/stop_propagation.html new file mode 100644 index 00000000..47347df8 --- /dev/null +++ b/javascript/8-events/Assignment-5/stop_propagation.html @@ -0,0 +1,35 @@ + + + + + + Stop Event Propagation Example + + + + +
+ Parent Div +
+ Child Div (Click Me) +
+
+ + + + diff --git a/javascript/8-events/Assignment-6/form_validations.html b/javascript/8-events/Assignment-6/form_validations.html new file mode 100644 index 00000000..1972e8a7 --- /dev/null +++ b/javascript/8-events/Assignment-6/form_validations.html @@ -0,0 +1,31 @@ + + + + + + Form Validation + + + + +

Registration Form

+ +
+ + + + + + + + + + + + + +
+ + + + diff --git a/javascript/8-events/Assignment-6/script.js b/javascript/8-events/Assignment-6/script.js new file mode 100644 index 00000000..38bb32d7 --- /dev/null +++ b/javascript/8-events/Assignment-6/script.js @@ -0,0 +1,60 @@ +const form = document.getElementById("registerForm"); +const username = document.getElementById("username"); +const email = document.getElementById("email"); +const password = document.getElementById("password"); + +const usernameError = document.getElementById("usernameError"); +const emailError = document.getElementById("emailError"); +const passwordError = document.getElementById("passwordError"); + +username.addEventListener("input", () => { + if (username.value.trim().length < 3) { + usernameError.textContent = "Username must be at least 3 characters"; + username.classList.add("invalid"); + username.classList.remove("valid"); + } else { + usernameError.textContent = ""; + username.classList.add("valid"); + username.classList.remove("invalid"); + } +}); + +email.addEventListener("input", () => { + const emailPattern = /^[^ ]+@[^ ]+\.[a-z]{2,3}$/; + if (!email.value.match(emailPattern)) { + emailError.textContent = "Please enter a valid email"; + email.classList.add("invalid"); + email.classList.remove("valid"); + } else { + emailError.textContent = ""; + email.classList.add("valid"); + email.classList.remove("invalid"); + } +}); + +password.addEventListener("input", () => { + if (password.value.length < 6) { + passwordError.textContent = "Password must be at least 6 characters"; + password.classList.add("invalid"); + password.classList.remove("valid"); + } else { + passwordError.textContent = ""; + password.classList.add("valid"); + password.classList.remove("invalid"); + } +}); + + +form.addEventListener("submit", (e) => { + e.preventDefault(); + + if ( + username.classList.contains("valid") && + email.classList.contains("valid") && + password.classList.contains("valid") + ) { + alert("Form submitted successfully!"); + } else { + alert("Please fix errors before submitting."); + } +}); diff --git a/javascript/8-events/Assignment-6/style.css b/javascript/8-events/Assignment-6/style.css new file mode 100644 index 00000000..7269e825 --- /dev/null +++ b/javascript/8-events/Assignment-6/style.css @@ -0,0 +1,49 @@ +body { + font-family: Arial; + background-color: #f2f2f2; + padding: 20px; +} + +form { + background: #fff; + padding: 20px; + border-radius: 8px; + width: 300px; +} + +label { + display: block; + margin-top: 10px; + font-weight: bold; +} + +input { + width: 100%; + padding: 8px; + margin-top: 5px; + border: 1px solid #ccc; + border-radius: 4px; +} + +.error { + color: red; + font-size: 12px; +} + +input.valid { + border-color: green; +} + +input.invalid { + border-color: red; +} + +button { + margin-top: 15px; + padding: 10px; + background-color: #007bff; + color: white; + border: none; + border-radius: 5px; + cursor: pointer; +} diff --git a/javascript/8-events/Assignment-7/mutation_observer.html b/javascript/8-events/Assignment-7/mutation_observer.html new file mode 100644 index 00000000..bd534dfb --- /dev/null +++ b/javascript/8-events/Assignment-7/mutation_observer.html @@ -0,0 +1,17 @@ + + + + + + Inline Editing with Mutation Observer + + + +
+ This is editable text. + ✏️ +
+ + + + diff --git a/javascript/8-events/Assignment-7/script.js b/javascript/8-events/Assignment-7/script.js new file mode 100644 index 00000000..da0607b3 --- /dev/null +++ b/javascript/8-events/Assignment-7/script.js @@ -0,0 +1,24 @@ +const editableDiv = document.getElementById("editableDiv"); + +const observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + if (mutation.addedNodes.length > 0) { + mutation.addedNodes.forEach((node) => { + if (node.tagName === "TEXTAREA") { + console.log("Textarea added to DOM ✅"); + node.addEventListener("blur", () => { + const newText = node.value.trim() || "No text entered"; + editableDiv.innerHTML = `${newText} ✏️`; + }); + } + }); + } + }); +}); + +observer.observe(editableDiv, { childList: true }); + +editableDiv.addEventListener("click", () => { + const currentText = document.getElementById("textContent").textContent; + editableDiv.innerHTML = ``; +}); diff --git a/javascript/8-events/Assignment-7/style.css b/javascript/8-events/Assignment-7/style.css new file mode 100644 index 00000000..9d6048a9 --- /dev/null +++ b/javascript/8-events/Assignment-7/style.css @@ -0,0 +1,26 @@ +body { + font-family: Arial, sans-serif; + padding: 30px; +} + +.editable { + display: inline-flex; + align-items: center; + border: 1px solid #ccc; + padding: 10px; + border-radius: 8px; + background-color: #f9f9f9; + cursor: pointer; +} + +.icon { + margin-left: 10px; +} + +textarea { + width: 250px; + height: 60px; + border-radius: 6px; + font-size: 16px; + padding: 6px; +}