diff --git a/.babelrc b/.babelrc index dfb789cd44ba0e6b8f22e3479dd33bfe8b1fd83e..91da8764f2dae9a505eb68e48176ee9da634f181 100644 --- a/.babelrc +++ b/.babelrc @@ -1,3 +1,5 @@ { - "presets": ["@babel/env"] + "presets": [ + ["@babel/env", {"modules": false}] + ] } \ No newline at end of file diff --git a/index.html b/index.html index 059864d784d0f8290a8fc1fe1597a9a0a9b99809..a3a71188dc204c83ff65d3ab77042567562fff46 100644 --- a/index.html +++ b/index.html @@ -14,7 +14,7 @@ <link rel="stylesheet" href="css/pizzaList.css"> <link rel="stylesheet" href="css/footer.css"> - <script src="build/main.js" defer></script> + <script type="module" src="build/main.js" defer></script> </head> <body> <header> diff --git a/src/components/Component.js b/src/components/Component.js new file mode 100644 index 0000000000000000000000000000000000000000..bec5bb21dd98e3282c0989933ad1c12c06f4332d --- /dev/null +++ b/src/components/Component.js @@ -0,0 +1,22 @@ +class Component { + tagname; + children; + attribute; + constructor(tagname, attribute, children) { + this.tagname = tagname; + this.attribute = attribute; + this.children = children; + } + + renderAttribute() { + return `${this.attribute.name}="${this.attribute.value}"`; + } + + render() { + if (this.tagname == "img") { + return `<${this.tagname} ${this.renderAttribute()}/>`; + } + return `<${this.tagname}>${this.children}</${this.tagname}>`; + } +} +export default Component; diff --git a/src/components/Img.js b/src/components/Img.js new file mode 100644 index 0000000000000000000000000000000000000000..5ac6c17689e343e756607ff1d513d47139bdb9bb --- /dev/null +++ b/src/components/Img.js @@ -0,0 +1,9 @@ +import Component from "./Component.js"; + +class Img extends Component { + constructor(attribute) { + super("img", { name: "src", value: attribute }); + } +} + +export default Img; diff --git a/src/data.js b/src/data.js new file mode 100644 index 0000000000000000000000000000000000000000..d0738e901011c70e54cb0c96550a2be1df768319 --- /dev/null +++ b/src/data.js @@ -0,0 +1,28 @@ +const data = [ + { + name: "Regina", + base: "tomate", + price_small: 6.5, + price_large: 9.95, + image: + "https://images.unsplash.com/photo-1532246420286-127bcd803104?fit=crop&w=500&h=300", + }, + { + name: "Napolitaine", + base: "tomate", + price_small: 6.5, + price_large: 8.95, + image: + "https://images.unsplash.com/photo-1562707666-0ef112b353e0?&fit=crop&w=500&h=300", + }, + { + name: "So Spicy", + base: "crème", + price_small: 5.5, + price_large: 8, + image: + "https://images.unsplash.com/photo-1458642849426-cfb724f15ef7?fit=crop&w=500&h=300", + }, +]; + +export default data; diff --git a/src/main.js b/src/main.js index 88b43995e7b5ca3b2b5edd245e5e151150decc6e..77324a88e2b3b15cf3fbf203845a2ce20c0f9164 100644 --- a/src/main.js +++ b/src/main.js @@ -1,118 +1,6 @@ -// D. Manipulation des chaînes - -// const name = 'Regina'; -// const url = `images/${name.toLowerCase()}.jpg`; -// const html = ` -// <article class="pizzaThumbnail"> -// <a href="${url}"> -// <img src="${url}" /> -// <section>${name}</section> -// </a> -// </article> -// `; -// document.querySelector('.pageContent').innerHTML = html; - -// // E.1. Manipulation des tableaux -// let data = [ 'Regina', 'Napolitaine', 'Spicy' ]; -// html = ''; -// // E.1. boucle for : -// for (let i = 0; i < data.length; i++) { -// const nom = data[i], -// url = `images/${nom.toLowerCase()}.jpg`; -// html += `<article class="pizzaThumbnail"> -// <a href="${url}"> -// <img src="${url}" /> -// <section>${nom}</section> -// </a> -// </article>`; -// } -// document.querySelector('.pageContent').innerHTML = html; - -// E.1. Array.forEach : -// html = ''; -// data.forEach( nom => { -// const url = `images/${nom.toLowerCase()}.jpg`; -// html += `<a href="${url}"> -// <img src="${url}" /> -// <h4>${nom}</h4> -// </a>`; -// }) -// document.querySelector('.pageContent').innerHTML = html; - -// // E.1. Array.map + Array.join : -// html = data.map( nom => `<a href="images/${nom.toLowerCase()}.jpg"> -// <img src="images/${nom.toLowerCase()}.jpg" /> -// <h4>${nom}</h4> -// </a>`).join(''); -// document.querySelector('.pageContent').innerHTML = html; - -// // E.1. Array.reduce : -// html = data.reduce( (str, nom) => str+`<a href="images/${nom.toLowerCase()}.jpg"> -// <img src="images/${nom.toLowerCase()}.jpg" /> -// <h4>${nom}</h4> -// </a>`,''); -// document.querySelector('.pageContent').innerHTML = html; - -// E.2. Les objets littéraux - -const data = [ - { - name: "Regina", - base: "tomate", - price_small: 6.5, - price_large: 9.95, - image: - "https://images.unsplash.com/photo-1532246420286-127bcd803104?fit=crop&w=500&h=300", - }, - { - name: "Napolitaine", - base: "tomate", - price_small: 6.5, - price_large: 8.95, - image: - "https://images.unsplash.com/photo-1562707666-0ef112b353e0?&fit=crop&w=500&h=300", - }, - { - name: "So Spicy", - base: "crème", - price_small: 5.5, - price_large: 8, - image: - "https://images.unsplash.com/photo-1458642849426-cfb724f15ef7?fit=crop&w=500&h=300", - }, -]; - -class Component { - tagname; - children; - attribute; - constructor(tagname, attribute, children) { - this.tagname = tagname; - this.attribute = attribute; - this.children = children; - } - - renderAttribute() { - return `${this.attribute.name}="${this.attribute.value}"`; - } - - render() { - if (this.tagname == "img") { - return `<${this.tagname} ${this.renderAttribute()}/>`; - } - return `<${this.tagname}>${this.children}</${this.tagname}>`; - } -} - -class Img extends Component { - constructor(attribute) { - super("img", { name: "src", value: attribute }); - } - - render() { - return super.render(); - } -} +import data from "./data.js"; +import Component from "./components/Component.js"; +import Img from "./components/Img.js"; const title = new Component("h1", null, "La Carte"); document.querySelector(".pageTitle").innerHTML = title.render(); @@ -134,57 +22,3 @@ const img2 = new Img( document.querySelector(".pageContent").innerHTML = img2.render(); console.log("Generated : " + img2.render()); - -/* -function render(pizzas) { - const html = pizzas.reduce( (str, {image, name, price_small, price_large}) => str + - `<article class="pizzaThumbnail"> - <a href="${image}"> - <img src="${image}" /> - <section> - <h4>${name}</h4> - <ul> - <li>Prix petit format : ${price_small.toFixed(2)} €</li> - <li>Prix grand format : ${price_large.toFixed(2)} €</li> - </ul> - </section> - </a> - </article>`, ''); - document.querySelector('.pageContent').innerHTML = html; -} - -// G.1. Tri de tableaux -function sortByName(a, b) { - if ( a.name < b.name ) { - return -1; - } else if ( a.name > b.name ) { - return 1; - } - return 0; -} - -// tri par price_small croissant PUIS par price_large croissant -function sortByPrice(a, b) { - if ( a.price_small !== b.price_small ) { - return a.price_small - b.price_small; - } - return a.price_large - b.price_large; -} - -// // Attention : data.sort() modifie le tableau original -render( data ); -// render( data.sort(sortByName) ); -// render( data.sort(sortByPrice) ); - -// // G.2. Système de filtre -// render( data.filter( pizza => pizza.base == 'tomate' )) -// render( data.filter( pizza => pizza.price_small < 6 )) -// // deux possibilités pour les pizzas avec deux fois la lettre "i" -// render( data.filter( pizza => pizza.name.split('i').length == 3 )) -// render( data.filter( pizza => pizza.name.match(/i/g).length == 2 )) - -// // G.3. Destructuring -// render( data.filter( ({base}) => base == 'tomate' )) -// render( data.filter( ({price_small}) => price_small < 6 )) -// render( data.filter( ({name}) => name.match(/i/g).length === 2 )); -*/