From b63e90472953ef518a15defbedd1198ccd2c476c Mon Sep 17 00:00:00 2001
From: Cristiano Magro <cristiano.magro@vola.it>
Date: Fri, 27 Dec 2024 22:05:54 +0100
Subject: [PATCH] lesson 06 all steps

---
 06 - introducing components/cmp-intro-02-understanding-the-problem/app.js     |   28 ++++
 06 - introducing components/cmp-intro-03-introducing-components/app.js        |   53 +++++++
 06 - introducing components/cmp-intro-03-introducing-components/styles.css    |   63 +++++++++
 06 - introducing components/cmp-intro-03-introducing-components/index.html    |   27 +++
 06 - introducing components/cmp-intro-01-starting-setup/styles.css            |   63 +++++++++
 06 - introducing components/cmp-intro-02-understanding-the-problem/styles.css |   63 +++++++++
 06 - introducing components/cmp-intro-01-starting-setup/index.html            |   40 +++++
 06 - introducing components/cmp-intro-01-starting-setup/app.js                |    0 
 06 - introducing components/cmp-intro-02-understanding-the-problem/index.html |   34 ++++
 9 files changed, 371 insertions(+), 0 deletions(-)

diff --git a/06 - introducing components/cmp-intro-01-starting-setup/app.js b/06 - introducing components/cmp-intro-01-starting-setup/app.js
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/06 - introducing components/cmp-intro-01-starting-setup/app.js
diff --git a/06 - introducing components/cmp-intro-01-starting-setup/index.html b/06 - introducing components/cmp-intro-01-starting-setup/index.html
new file mode 100644
index 0000000..e00c538
--- /dev/null
+++ b/06 - introducing components/cmp-intro-01-starting-setup/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>FriendList</h1>
+    </header>
+    <section id="app">
+      <ul>
+        <li>
+          <h2>Manuel Lorenz</h2>
+          <button>Show Details</button>
+          <ul>
+            <li><strong>Phone:</strong> 01234 5678 991</li>
+            <li><strong>Email:</strong> manuel@localhost.com</li>
+          </ul>
+        </li>
+        <li>
+          <h2>Julie Jones</h2>
+          <button>Show Details</button>
+          <ul>
+            <li><strong>Phone:</strong> 09876 543 221</li>
+            <li><strong>Email:</strong> julie@localhost.com</li>
+          </ul>
+        </li>
+      </ul>
+    </section>
+  </body>
+</html>
diff --git a/06 - introducing components/cmp-intro-01-starting-setup/styles.css b/06 - introducing components/cmp-intro-01-starting-setup/styles.css
new file mode 100644
index 0000000..700054f
--- /dev/null
+++ b/06 - introducing components/cmp-intro-01-starting-setup/styles.css
@@ -0,0 +1,63 @@
+* {
+  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 auto;
+  border-radius: 10px;
+  padding: 1rem;
+  background-color: #58004d;
+  color: white;
+  text-align: center;
+  width: 90%;
+  max-width: 40rem;
+}
+
+#app ul {
+  margin: 0;
+  padding: 0;
+  list-style: none;
+}
+
+#app li {
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
+  margin: 1rem auto;
+  border-radius: 10px;
+  padding: 1rem;
+  text-align: center;
+  width: 90%;
+  max-width: 40rem;
+}
+
+#app h2 {
+  font-size: 2rem;
+  border-bottom: 4px solid #ccc;
+  color: #58004d;
+  margin: 0 0 1rem 0;
+}
+
+#app 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);
+}
+
+#app button:hover,
+#app button:active {
+  background-color: #ec3169;
+  border-color: #ec3169;
+  box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.26);
+}
diff --git a/06 - introducing components/cmp-intro-02-understanding-the-problem/app.js b/06 - introducing components/cmp-intro-02-understanding-the-problem/app.js
new file mode 100644
index 0000000..06869f7
--- /dev/null
+++ b/06 - introducing components/cmp-intro-02-understanding-the-problem/app.js
@@ -0,0 +1,28 @@
+const app = Vue.createApp({
+  data() {
+    return {
+      detailsAreVisible: false,
+      friends: [
+        {
+          id: 'manuel',
+          name: 'Manuel Lorenz',
+          phone: '01234 5678 991',
+          email: 'manuel@localhost.com',
+        },
+        {
+          id: 'julie',
+          name: 'Julie Jones',
+          phone: '09876 543 221',
+          email: 'julie@localhost.com',
+        },
+      ],
+    };
+  },
+  methods: {
+    toggleDetails() {
+      this.detailsAreVisible = !this.detailsAreVisible;
+    }
+  }
+});
+
+app.mount('#app');
diff --git a/06 - introducing components/cmp-intro-02-understanding-the-problem/index.html b/06 - introducing components/cmp-intro-02-understanding-the-problem/index.html
new file mode 100644
index 0000000..8b65a93
--- /dev/null
+++ b/06 - introducing components/cmp-intro-02-understanding-the-problem/index.html
@@ -0,0 +1,34 @@
+<!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>FriendList</h1>
+    </header>
+    <section id="app">
+      <ul>
+        <li v-for="friend in friends" :key="friend.id">
+          <h2>{{ friend.name }}</h2>
+          <button @click="toggleDetails()">
+            {{ detailsAreVisible ? 'Hide' : 'Show' }} Details
+          </button>
+          <ul v-if="detailsAreVisible">
+            <li><strong>Phone:</strong> {{ friend.phone }}</li>
+            <li><strong>Email:</strong> {{ friend.email }}</li>
+          </ul>
+        </li>
+      </ul>
+    </section>
+  </body>
+</html>
diff --git a/06 - introducing components/cmp-intro-02-understanding-the-problem/styles.css b/06 - introducing components/cmp-intro-02-understanding-the-problem/styles.css
new file mode 100644
index 0000000..700054f
--- /dev/null
+++ b/06 - introducing components/cmp-intro-02-understanding-the-problem/styles.css
@@ -0,0 +1,63 @@
+* {
+  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 auto;
+  border-radius: 10px;
+  padding: 1rem;
+  background-color: #58004d;
+  color: white;
+  text-align: center;
+  width: 90%;
+  max-width: 40rem;
+}
+
+#app ul {
+  margin: 0;
+  padding: 0;
+  list-style: none;
+}
+
+#app li {
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
+  margin: 1rem auto;
+  border-radius: 10px;
+  padding: 1rem;
+  text-align: center;
+  width: 90%;
+  max-width: 40rem;
+}
+
+#app h2 {
+  font-size: 2rem;
+  border-bottom: 4px solid #ccc;
+  color: #58004d;
+  margin: 0 0 1rem 0;
+}
+
+#app 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);
+}
+
+#app button:hover,
+#app button:active {
+  background-color: #ec3169;
+  border-color: #ec3169;
+  box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.26);
+}
diff --git a/06 - introducing components/cmp-intro-03-introducing-components/app.js b/06 - introducing components/cmp-intro-03-introducing-components/app.js
new file mode 100644
index 0000000..bb146ea
--- /dev/null
+++ b/06 - introducing components/cmp-intro-03-introducing-components/app.js
@@ -0,0 +1,53 @@
+const app = Vue.createApp({
+  data() {
+    return {
+      friends: [
+        {
+          id: 'manuel',
+          name: 'Manuel Lorenz',
+          phone: '01234 5678 991',
+          email: 'manuel@localhost.com',
+        },
+        {
+          id: 'julie',
+          name: 'Julie Jones',
+          phone: '09876 543 221',
+          email: 'julie@localhost.com',
+        },
+      ],
+    };
+  },
+});
+
+app.component('friend-contact', {
+  template: `
+  <li>
+    <h2>{{ friend.name }}</h2>
+    <button @click="toggleDetails()">
+      {{ detailsAreVisible ? 'Hide' : 'Show' }} Details
+    </button>
+    <ul v-if="detailsAreVisible">
+      <li><strong>Phone:</strong> {{ friend.phone }}</li>
+      <li><strong>Email:</strong> {{ friend.email }}</li>
+    </ul>
+  </li>
+  `,
+  data() {
+    return {
+      detailsAreVisible: false,
+      friend: {
+        id: 'manuel',
+        name: 'Manuel Lorenzo',
+        phone: '01234 5678 991',
+        email: 'manuel@localhost.com',
+      },
+    };
+  },
+  methods: {
+    toggleDetails() {
+      this.detailsAreVisible = !this.detailsAreVisible;
+    },
+  },
+});
+
+app.mount('#app');
diff --git a/06 - introducing components/cmp-intro-03-introducing-components/index.html b/06 - introducing components/cmp-intro-03-introducing-components/index.html
new file mode 100644
index 0000000..e79eb5c
--- /dev/null
+++ b/06 - introducing components/cmp-intro-03-introducing-components/index.html
@@ -0,0 +1,27 @@
+<!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>FriendList</h1>
+    </header>
+    <friend-contact></friend-contact>
+    <section id="app">
+      <ul>
+        <friend-contact></friend-contact>
+        <friend-contact></friend-contact>
+      </ul>
+    </section>
+  </body>
+</html>
diff --git a/06 - introducing components/cmp-intro-03-introducing-components/styles.css b/06 - introducing components/cmp-intro-03-introducing-components/styles.css
new file mode 100644
index 0000000..700054f
--- /dev/null
+++ b/06 - introducing components/cmp-intro-03-introducing-components/styles.css
@@ -0,0 +1,63 @@
+* {
+  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 auto;
+  border-radius: 10px;
+  padding: 1rem;
+  background-color: #58004d;
+  color: white;
+  text-align: center;
+  width: 90%;
+  max-width: 40rem;
+}
+
+#app ul {
+  margin: 0;
+  padding: 0;
+  list-style: none;
+}
+
+#app li {
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
+  margin: 1rem auto;
+  border-radius: 10px;
+  padding: 1rem;
+  text-align: center;
+  width: 90%;
+  max-width: 40rem;
+}
+
+#app h2 {
+  font-size: 2rem;
+  border-bottom: 4px solid #ccc;
+  color: #58004d;
+  margin: 0 0 1rem 0;
+}
+
+#app 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);
+}
+
+#app button:hover,
+#app button:active {
+  background-color: #ec3169;
+  border-color: #ec3169;
+  box-shadow: 1px 1px 4px rgba(0, 0, 0, 0.26);
+}

--
Gitblit v1.8.0