From 44695d9b6c871bad2366e3fde89969c862341296 Mon Sep 17 00:00:00 2001 From: Cristiano Magro <cristiano.magro@vola.it> Date: Thu, 26 Dec 2024 23:24:20 +0100 Subject: [PATCH] 03 le lezioni di questa sezione --- 03 - lists conditional/lists-cond-assignment-problem/index.html | 19 + 03 - lists conditional/lists-cond-03-rendering-lists-of-data/app.js | 15 + 03 - lists conditional/lists-cond-04-diving-deeper-into-v-for/styles.css | 80 ++++++ 03 - lists conditional/lists-cond-02-v-if-v-else-v-else-if/app.js | 15 + 03 - lists conditional/lists-cond-05-removing-list-items/app.js | 18 + 03 - lists conditional/lists-cond-02-v-if-v-else-v-else-if/index.html | 29 ++ 03 - lists conditional/lists-cond-06-lists-keys/styles.css | 80 ++++++ 03 - lists conditional/lists-cond-03-rendering-lists-of-data/styles.css | 80 ++++++ 03 - lists conditional/lists-cond-assignment-problem/app.js | 25 ++ 03 - lists conditional/lists-cond-04-diving-deeper-into-v-for/app.js | 15 + 03 - lists conditional/lists-cond-05-removing-list-items/styles.css | 80 ++++++ 03 - lists conditional/lists-cond-06-lists-keys/index.html | 40 +++ 03 - lists conditional/lists-cond-02-v-if-v-else-v-else-if/styles.css | 80 ++++++ 03 - lists conditional/lists-cond-06-lists-keys/app.js | 18 + 03 - lists conditional/lists-cond-03-rendering-lists-of-data/index.html | 29 ++ 03 - lists conditional/lists-cond-04-diving-deeper-into-v-for/index.html | 37 +++ 03 - lists conditional/lists-cond-05-removing-list-items/index.html | 39 +++ 17 files changed, 694 insertions(+), 5 deletions(-) diff --git a/03 - lists conditional/lists-cond-02-v-if-v-else-v-else-if/app.js b/03 - lists conditional/lists-cond-02-v-if-v-else-v-else-if/app.js new file mode 100644 index 0000000..961c6ab --- /dev/null +++ b/03 - lists conditional/lists-cond-02-v-if-v-else-v-else-if/app.js @@ -0,0 +1,15 @@ +const app = Vue.createApp({ + data() { + return { + enteredGoalValue: '', + goals: [] + }; + }, + methods: { + addGoal() { + this.goals.push(this.enteredGoalValue); + } + } +}); + +app.mount('#user-goals'); \ No newline at end of file diff --git a/03 - lists conditional/lists-cond-02-v-if-v-else-v-else-if/index.html b/03 - lists conditional/lists-cond-02-v-if-v-else-v-else-if/index.html new file mode 100644 index 0000000..216fb6e --- /dev/null +++ b/03 - lists conditional/lists-cond-02-v-if-v-else-v-else-if/index.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Vue Basics</title> + <link + href="https://fonts.googleapis.com/css2?family=Jost:wght@400;700&display=swap" + rel="stylesheet" + /> + <link rel="stylesheet" href="styles.css" /> + <script src="https://unpkg.com/vue@next" defer></script> + <script src="app.js" defer></script> + </head> + <body> + <header> + <h1>Vue Course Goals</h1> + </header> + <section id="user-goals"> + <h2>My course goals</h2> + <input type="text" v-model="enteredGoalValue" /> + <button @click="addGoal">Add Goal</button> + <p v-if="goals.length === 0">No goals have been added yet - please start adding some!</p> + <ul v-else> + <li>Goal</li> + </ul> + </section> + </body> +</html> diff --git a/03 - lists conditional/lists-cond-02-v-if-v-else-v-else-if/styles.css b/03 - lists conditional/lists-cond-02-v-if-v-else-v-else-if/styles.css new file mode 100644 index 0000000..fd51300 --- /dev/null +++ b/03 - lists conditional/lists-cond-02-v-if-v-else-v-else-if/styles.css @@ -0,0 +1,80 @@ +* { + box-sizing: border-box; +} + +html { + font-family: 'Jost', sans-serif; +} + +body { + margin: 0; +} + +header { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26); + margin: 3rem; + border-radius: 10px; + padding: 1rem; + background-color: #1b995e; + color: white; + text-align: center; +} + +#user-goals { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26); + margin: 3rem; + border-radius: 10px; + padding: 1rem; + text-align: center; +} + +#user-goals h2 { + font-size: 2rem; + border-bottom: 4px solid #ccc; + color: #1b995e; + margin: 0 0 1rem 0; +} + +#user-goals ul { + list-style: none; + margin: 1rem 0; + padding: 0; +} + +#user-goals li { + margin: 1rem 0; + font-size: 1.25rem; + font-weight: bold; + background-color: #8ddba4; + padding: 0.5rem; + color: #1f1f1f; + border-radius: 25px; +} + +#user-goals input { + font: inherit; + border: 1px solid #ccc; +} + +#user-goals input:focus { + outline: none; + border-color: #1b995e; + background-color: #d7fdeb; +} + +#user-goals button { + font: inherit; + cursor: pointer; + border: 1px solid #ff0077; + background-color: #ff0077; + color: white; + padding: 0.05rem 1rem; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.26); +} + +#user-goals button:hover, +#user-goals button:active { + background-color: #ec3169; + border-color: #ec3169; + box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.26); +} diff --git a/03 - lists conditional/lists-cond-03-rendering-lists-of-data/app.js b/03 - lists conditional/lists-cond-03-rendering-lists-of-data/app.js new file mode 100644 index 0000000..961c6ab --- /dev/null +++ b/03 - lists conditional/lists-cond-03-rendering-lists-of-data/app.js @@ -0,0 +1,15 @@ +const app = Vue.createApp({ + data() { + return { + enteredGoalValue: '', + goals: [] + }; + }, + methods: { + addGoal() { + this.goals.push(this.enteredGoalValue); + } + } +}); + +app.mount('#user-goals'); \ No newline at end of file diff --git a/03 - lists conditional/lists-cond-03-rendering-lists-of-data/index.html b/03 - lists conditional/lists-cond-03-rendering-lists-of-data/index.html new file mode 100644 index 0000000..17a7983 --- /dev/null +++ b/03 - lists conditional/lists-cond-03-rendering-lists-of-data/index.html @@ -0,0 +1,29 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Vue Basics</title> + <link + href="https://fonts.googleapis.com/css2?family=Jost:wght@400;700&display=swap" + rel="stylesheet" + /> + <link rel="stylesheet" href="styles.css" /> + <script src="https://unpkg.com/vue@next" defer></script> + <script src="app.js" defer></script> + </head> + <body> + <header> + <h1>Vue Course Goals</h1> + </header> + <section id="user-goals"> + <h2>My course goals</h2> + <input type="text" v-model="enteredGoalValue" /> + <button @click="addGoal">Add Goal</button> + <p v-if="goals.length === 0">No goals have been added yet - please start adding some!</p> + <ul v-else> + <li v-for="goal in goals">{{ goal }}</li> + </ul> + </section> + </body> +</html> diff --git a/03 - lists conditional/lists-cond-03-rendering-lists-of-data/styles.css b/03 - lists conditional/lists-cond-03-rendering-lists-of-data/styles.css new file mode 100644 index 0000000..fd51300 --- /dev/null +++ b/03 - lists conditional/lists-cond-03-rendering-lists-of-data/styles.css @@ -0,0 +1,80 @@ +* { + box-sizing: border-box; +} + +html { + font-family: 'Jost', sans-serif; +} + +body { + margin: 0; +} + +header { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26); + margin: 3rem; + border-radius: 10px; + padding: 1rem; + background-color: #1b995e; + color: white; + text-align: center; +} + +#user-goals { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26); + margin: 3rem; + border-radius: 10px; + padding: 1rem; + text-align: center; +} + +#user-goals h2 { + font-size: 2rem; + border-bottom: 4px solid #ccc; + color: #1b995e; + margin: 0 0 1rem 0; +} + +#user-goals ul { + list-style: none; + margin: 1rem 0; + padding: 0; +} + +#user-goals li { + margin: 1rem 0; + font-size: 1.25rem; + font-weight: bold; + background-color: #8ddba4; + padding: 0.5rem; + color: #1f1f1f; + border-radius: 25px; +} + +#user-goals input { + font: inherit; + border: 1px solid #ccc; +} + +#user-goals input:focus { + outline: none; + border-color: #1b995e; + background-color: #d7fdeb; +} + +#user-goals button { + font: inherit; + cursor: pointer; + border: 1px solid #ff0077; + background-color: #ff0077; + color: white; + padding: 0.05rem 1rem; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.26); +} + +#user-goals button:hover, +#user-goals button:active { + background-color: #ec3169; + border-color: #ec3169; + box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.26); +} diff --git a/03 - lists conditional/lists-cond-04-diving-deeper-into-v-for/app.js b/03 - lists conditional/lists-cond-04-diving-deeper-into-v-for/app.js new file mode 100644 index 0000000..961c6ab --- /dev/null +++ b/03 - lists conditional/lists-cond-04-diving-deeper-into-v-for/app.js @@ -0,0 +1,15 @@ +const app = Vue.createApp({ + data() { + return { + enteredGoalValue: '', + goals: [] + }; + }, + methods: { + addGoal() { + this.goals.push(this.enteredGoalValue); + } + } +}); + +app.mount('#user-goals'); \ No newline at end of file diff --git a/03 - lists conditional/lists-cond-04-diving-deeper-into-v-for/index.html b/03 - lists conditional/lists-cond-04-diving-deeper-into-v-for/index.html new file mode 100644 index 0000000..a647073 --- /dev/null +++ b/03 - lists conditional/lists-cond-04-diving-deeper-into-v-for/index.html @@ -0,0 +1,37 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Vue Basics</title> + <link + href="https://fonts.googleapis.com/css2?family=Jost:wght@400;700&display=swap" + rel="stylesheet" + /> + <link rel="stylesheet" href="styles.css" /> + <script src="https://unpkg.com/vue@next" defer></script> + <script src="app.js" defer></script> + </head> + <body> + <header> + <h1>Vue Course Goals</h1> + </header> + <section id="user-goals"> + <h2>My course goals</h2> + <input type="text" v-model="enteredGoalValue" /> + <button @click="addGoal">Add Goal</button> + <p v-if="goals.length === 0"> + No goals have been added yet - please start adding some! + </p> + <ul v-else> + <li v-for="(goal, index) in goals">{{ goal }} - {{ index }}</li> + </ul> + <!-- <ul> + <li v-for="num in 10">{{ num }}</li> + </ul> --> + <!-- <ul> + <li v-for="(value, key, index) in {name: 'Max', age: 31}">{{ key }}: {{ value }} - {{ index }}</li> + </ul> --> + </section> + </body> +</html> diff --git a/03 - lists conditional/lists-cond-04-diving-deeper-into-v-for/styles.css b/03 - lists conditional/lists-cond-04-diving-deeper-into-v-for/styles.css new file mode 100644 index 0000000..fd51300 --- /dev/null +++ b/03 - lists conditional/lists-cond-04-diving-deeper-into-v-for/styles.css @@ -0,0 +1,80 @@ +* { + box-sizing: border-box; +} + +html { + font-family: 'Jost', sans-serif; +} + +body { + margin: 0; +} + +header { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26); + margin: 3rem; + border-radius: 10px; + padding: 1rem; + background-color: #1b995e; + color: white; + text-align: center; +} + +#user-goals { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26); + margin: 3rem; + border-radius: 10px; + padding: 1rem; + text-align: center; +} + +#user-goals h2 { + font-size: 2rem; + border-bottom: 4px solid #ccc; + color: #1b995e; + margin: 0 0 1rem 0; +} + +#user-goals ul { + list-style: none; + margin: 1rem 0; + padding: 0; +} + +#user-goals li { + margin: 1rem 0; + font-size: 1.25rem; + font-weight: bold; + background-color: #8ddba4; + padding: 0.5rem; + color: #1f1f1f; + border-radius: 25px; +} + +#user-goals input { + font: inherit; + border: 1px solid #ccc; +} + +#user-goals input:focus { + outline: none; + border-color: #1b995e; + background-color: #d7fdeb; +} + +#user-goals button { + font: inherit; + cursor: pointer; + border: 1px solid #ff0077; + background-color: #ff0077; + color: white; + padding: 0.05rem 1rem; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.26); +} + +#user-goals button:hover, +#user-goals button:active { + background-color: #ec3169; + border-color: #ec3169; + box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.26); +} diff --git a/03 - lists conditional/lists-cond-05-removing-list-items/app.js b/03 - lists conditional/lists-cond-05-removing-list-items/app.js new file mode 100644 index 0000000..d5b295d --- /dev/null +++ b/03 - lists conditional/lists-cond-05-removing-list-items/app.js @@ -0,0 +1,18 @@ +const app = Vue.createApp({ + data() { + return { + enteredGoalValue: '', + goals: [] + }; + }, + methods: { + addGoal() { + this.goals.push(this.enteredGoalValue); + }, + removeGoal(idx) { + this.goals.splice(idx, 1); + } + } +}); + +app.mount('#user-goals'); \ No newline at end of file diff --git a/03 - lists conditional/lists-cond-05-removing-list-items/index.html b/03 - lists conditional/lists-cond-05-removing-list-items/index.html new file mode 100644 index 0000000..23446a2 --- /dev/null +++ b/03 - lists conditional/lists-cond-05-removing-list-items/index.html @@ -0,0 +1,39 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Vue Basics</title> + <link + href="https://fonts.googleapis.com/css2?family=Jost:wght@400;700&display=swap" + rel="stylesheet" + /> + <link rel="stylesheet" href="styles.css" /> + <script src="https://unpkg.com/vue@next" defer></script> + <script src="app.js" defer></script> + </head> + <body> + <header> + <h1>Vue Course Goals</h1> + </header> + <section id="user-goals"> + <h2>My course goals</h2> + <input type="text" v-model="enteredGoalValue" /> + <button @click="addGoal">Add Goal</button> + <p v-if="goals.length === 0"> + No goals have been added yet - please start adding some! + </p> + <ul v-else> + <li v-for="(goal, index) in goals" @click="removeGoal(index)"> + {{ goal }} - {{ index }} + </li> + </ul> + <!-- <ul> + <li v-for="num in 10">{{ num }}</li> + </ul> --> + <!-- <ul> + <li v-for="(value, key, index) in {name: 'Max', age: 31}">{{ key }}: {{ value }} - {{ index }}</li> + </ul> --> + </section> + </body> +</html> diff --git a/03 - lists conditional/lists-cond-05-removing-list-items/styles.css b/03 - lists conditional/lists-cond-05-removing-list-items/styles.css new file mode 100644 index 0000000..fd51300 --- /dev/null +++ b/03 - lists conditional/lists-cond-05-removing-list-items/styles.css @@ -0,0 +1,80 @@ +* { + box-sizing: border-box; +} + +html { + font-family: 'Jost', sans-serif; +} + +body { + margin: 0; +} + +header { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26); + margin: 3rem; + border-radius: 10px; + padding: 1rem; + background-color: #1b995e; + color: white; + text-align: center; +} + +#user-goals { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26); + margin: 3rem; + border-radius: 10px; + padding: 1rem; + text-align: center; +} + +#user-goals h2 { + font-size: 2rem; + border-bottom: 4px solid #ccc; + color: #1b995e; + margin: 0 0 1rem 0; +} + +#user-goals ul { + list-style: none; + margin: 1rem 0; + padding: 0; +} + +#user-goals li { + margin: 1rem 0; + font-size: 1.25rem; + font-weight: bold; + background-color: #8ddba4; + padding: 0.5rem; + color: #1f1f1f; + border-radius: 25px; +} + +#user-goals input { + font: inherit; + border: 1px solid #ccc; +} + +#user-goals input:focus { + outline: none; + border-color: #1b995e; + background-color: #d7fdeb; +} + +#user-goals button { + font: inherit; + cursor: pointer; + border: 1px solid #ff0077; + background-color: #ff0077; + color: white; + padding: 0.05rem 1rem; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.26); +} + +#user-goals button:hover, +#user-goals button:active { + background-color: #ec3169; + border-color: #ec3169; + box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.26); +} diff --git a/03 - lists conditional/lists-cond-06-lists-keys/app.js b/03 - lists conditional/lists-cond-06-lists-keys/app.js new file mode 100644 index 0000000..d5b295d --- /dev/null +++ b/03 - lists conditional/lists-cond-06-lists-keys/app.js @@ -0,0 +1,18 @@ +const app = Vue.createApp({ + data() { + return { + enteredGoalValue: '', + goals: [] + }; + }, + methods: { + addGoal() { + this.goals.push(this.enteredGoalValue); + }, + removeGoal(idx) { + this.goals.splice(idx, 1); + } + } +}); + +app.mount('#user-goals'); \ No newline at end of file diff --git a/03 - lists conditional/lists-cond-06-lists-keys/index.html b/03 - lists conditional/lists-cond-06-lists-keys/index.html new file mode 100644 index 0000000..766b8d8 --- /dev/null +++ b/03 - lists conditional/lists-cond-06-lists-keys/index.html @@ -0,0 +1,40 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>Vue Basics</title> + <link + href="https://fonts.googleapis.com/css2?family=Jost:wght@400;700&display=swap" + rel="stylesheet" + /> + <link rel="stylesheet" href="styles.css" /> + <script src="https://unpkg.com/vue@next" defer></script> + <script src="app.js" defer></script> + </head> + <body> + <header> + <h1>Vue Course Goals</h1> + </header> + <section id="user-goals"> + <h2>My course goals</h2> + <input type="text" v-model="enteredGoalValue" /> + <button @click="addGoal">Add Goal</button> + <p v-if="goals.length === 0"> + No goals have been added yet - please start adding some! + </p> + <ul v-else> + <li v-for="(goal, index) in goals" :key="goal" @click="removeGoal(index)"> + <p>{{ goal }} - {{ index }}</p> + <input type="text" @click.stop> + </li> + </ul> + <!-- <ul> + <li v-for="num in 10">{{ num }}</li> + </ul> --> + <!-- <ul> + <li v-for="(value, key, index) in {name: 'Max', age: 31}">{{ key }}: {{ value }} - {{ index }}</li> + </ul> --> + </section> + </body> +</html> diff --git a/03 - lists conditional/lists-cond-06-lists-keys/styles.css b/03 - lists conditional/lists-cond-06-lists-keys/styles.css new file mode 100644 index 0000000..fd51300 --- /dev/null +++ b/03 - lists conditional/lists-cond-06-lists-keys/styles.css @@ -0,0 +1,80 @@ +* { + box-sizing: border-box; +} + +html { + font-family: 'Jost', sans-serif; +} + +body { + margin: 0; +} + +header { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26); + margin: 3rem; + border-radius: 10px; + padding: 1rem; + background-color: #1b995e; + color: white; + text-align: center; +} + +#user-goals { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26); + margin: 3rem; + border-radius: 10px; + padding: 1rem; + text-align: center; +} + +#user-goals h2 { + font-size: 2rem; + border-bottom: 4px solid #ccc; + color: #1b995e; + margin: 0 0 1rem 0; +} + +#user-goals ul { + list-style: none; + margin: 1rem 0; + padding: 0; +} + +#user-goals li { + margin: 1rem 0; + font-size: 1.25rem; + font-weight: bold; + background-color: #8ddba4; + padding: 0.5rem; + color: #1f1f1f; + border-radius: 25px; +} + +#user-goals input { + font: inherit; + border: 1px solid #ccc; +} + +#user-goals input:focus { + outline: none; + border-color: #1b995e; + background-color: #d7fdeb; +} + +#user-goals button { + font: inherit; + cursor: pointer; + border: 1px solid #ff0077; + background-color: #ff0077; + color: white; + padding: 0.05rem 1rem; + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.26); +} + +#user-goals button:hover, +#user-goals button:active { + background-color: #ec3169; + border-color: #ec3169; + box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.26); +} diff --git a/03 - lists conditional/lists-cond-assignment-problem/app.js b/03 - lists conditional/lists-cond-assignment-problem/app.js index e69de29..6d2b2fa 100644 --- a/03 - lists conditional/lists-cond-assignment-problem/app.js +++ b/03 - lists conditional/lists-cond-assignment-problem/app.js @@ -0,0 +1,25 @@ +const app = Vue.createApp({ + data() { + return { + tasks: [], + taskEntered: "", + showTasks: true, + }; + }, + computed: { + toggleTitle(){ + return this.showTasks ? "Hide" : "Show" + } + }, + watch: {}, + methods: { + addTask(){ + this.tasks.push(this.taskEntered); + }, + toggleTasks(){ + this.showTasks = !this.showTasks; + } + }, + }); + + app.mount("#assignment"); \ No newline at end of file diff --git a/03 - lists conditional/lists-cond-assignment-problem/index.html b/03 - lists conditional/lists-cond-assignment-problem/index.html index c1d904d..cf2fdde 100644 --- a/03 - lists conditional/lists-cond-assignment-problem/index.html +++ b/03 - lists conditional/lists-cond-assignment-problem/index.html @@ -9,7 +9,7 @@ rel="stylesheet" /> <link rel="stylesheet" href="styles.css" /> - <script src="https://unpkg.com/vue@next" defer></script> + <script src="https://unpkg.com/vue@3.4.9/dist/vue.global.js"></script> <script src="app.js" defer></script> </head> <body> @@ -20,14 +20,23 @@ <h2>Assignment</h2> <!-- 1) Add code to manage a list of tasks in a Vue app --> <!-- When clicking "Add Task" a new task with the entered text should be added --> - <input type="text"> - <button>Add Task</button> - <ul> + <input type="text" v-model="taskEntered"> + <button @click="addTask">Add Task</button> + <!-- <ul v-show="showTasks"> --> <!-- 2) Output the list of tasks here --> + <!-- <li v-for="task in tasks">{{task}}</li> </ul> + <ul v-show="!showTasks"> + </ul> --> + + <ul > + <!-- 2) Output the list of tasks here --> + <li v-show="showTasks" v-for="task in tasks" :key="task">{{task}}</li> + </ul> + <!-- 3) When the below button is pressed, the list should be shown or hidden --> <!-- BONUS: Also update the button caption --> - <button>Hide / Show List</button> + <button @click="toggleTasks">{{toggleTitle}} List</button> </section> </body> </html> -- Gitblit v1.8.0