diff --git a/build.js b/build.js index 616d21b8e3810200e7f02cf40f077146dc598f8b..2d553917ab6b7308bd95992a87b9a94ea8e3c1f7 100644 --- a/build.js +++ b/build.js @@ -3,7 +3,7 @@ "use strict"; const build_conf = { - protected_dirs: ["assets", "style", "news-articles", "game-articles", "software-articles"], + protected_dirs: ["assets", "style", "news-articles", "game-articles", "software-articles", "articles"], }; const fs = require("fs"); diff --git a/constants.js b/constants.js index f8bd7698b6cd53b9222fac41700c796e8f29ee8f..6d0ce287a31b694e43c646747957d3e09213b56c 100644 --- a/constants.js +++ b/constants.js @@ -2,7 +2,5 @@ const { server_url } = require("./config"); module.exports = { images_url: `${server_url}assets/images`, - news_articles_url: `${server_url}news-articles`, - game_articles_url: `${server_url}game-articles`, - software_articles_url: `${server_url}software-articles`, + articles_url: `${server_url}articles/`, }; diff --git a/public/game-articles/fantom_quest/fantom_quest.json b/public/articles/games/fantom_quest/fantom_quest.json similarity index 97% rename from public/game-articles/fantom_quest/fantom_quest.json rename to public/articles/games/fantom_quest/fantom_quest.json index 62c6e4a4721414a9b5f139c8c6e623847d42c990..6aeadaa769160f39a5e7d7067324e2b06e536bc8 100755 --- a/public/game-articles/fantom_quest/fantom_quest.json +++ b/public/articles/games/fantom_quest/fantom_quest.json @@ -2,6 +2,7 @@ "title": "Fantom Quest", "subtitle": "Le labyrinthe de la quête d'identité", "tags": ["jeu web", "pixelart", "javascript", "labyrinthe"], + "status": "wip", "body": "<file>fantom_quest.txt", "images": [ "screen_fantom_quest_1.jpg", diff --git a/public/game-articles/fantom_quest/fantom_quest.txt b/public/articles/games/fantom_quest/fantom_quest.txt similarity index 100% rename from public/game-articles/fantom_quest/fantom_quest.txt rename to public/articles/games/fantom_quest/fantom_quest.txt diff --git a/public/game-articles/fantom_quest/images/lucipix.png b/public/articles/games/fantom_quest/images/lucipix.png similarity index 100% rename from public/game-articles/fantom_quest/images/lucipix.png rename to public/articles/games/fantom_quest/images/lucipix.png diff --git a/public/game-articles/fantom_quest/images/pijarpix.png b/public/articles/games/fantom_quest/images/pijarpix.png similarity index 100% rename from public/game-articles/fantom_quest/images/pijarpix.png rename to public/articles/games/fantom_quest/images/pijarpix.png diff --git a/public/game-articles/fantom_quest/images/screen_fantom_quest_1.jpg b/public/articles/games/fantom_quest/images/screen_fantom_quest_1.jpg similarity index 100% rename from public/game-articles/fantom_quest/images/screen_fantom_quest_1.jpg rename to public/articles/games/fantom_quest/images/screen_fantom_quest_1.jpg diff --git a/public/game-articles/fantom_quest/images/screen_fantom_quest_2.jpg b/public/articles/games/fantom_quest/images/screen_fantom_quest_2.jpg similarity index 100% rename from public/game-articles/fantom_quest/images/screen_fantom_quest_2.jpg rename to public/articles/games/fantom_quest/images/screen_fantom_quest_2.jpg diff --git a/public/game-articles/fantom_quest/images/screen_fantom_quest_3.jpg b/public/articles/games/fantom_quest/images/screen_fantom_quest_3.jpg similarity index 100% rename from public/game-articles/fantom_quest/images/screen_fantom_quest_3.jpg rename to public/articles/games/fantom_quest/images/screen_fantom_quest_3.jpg diff --git a/public/game-articles/fantom_quest/images/screen_fantom_quest_4.jpg b/public/articles/games/fantom_quest/images/screen_fantom_quest_4.jpg similarity index 100% rename from public/game-articles/fantom_quest/images/screen_fantom_quest_4.jpg rename to public/articles/games/fantom_quest/images/screen_fantom_quest_4.jpg diff --git a/public/game-articles/fantom_quest/images/screen_fantom_quest_5.jpg b/public/articles/games/fantom_quest/images/screen_fantom_quest_5.jpg similarity index 100% rename from public/game-articles/fantom_quest/images/screen_fantom_quest_5.jpg rename to public/articles/games/fantom_quest/images/screen_fantom_quest_5.jpg diff --git a/public/game-articles/fantom_quest/lucie_ventadour.txt b/public/articles/games/fantom_quest/lucie_ventadour.txt similarity index 63% rename from public/game-articles/fantom_quest/lucie_ventadour.txt rename to public/articles/games/fantom_quest/lucie_ventadour.txt index 33d4e8f317120f143d89948b71a6aa830ba067fb..c0c017ad741c6e11fb8aec53932ea63bae53a39b 100755 --- a/public/game-articles/fantom_quest/lucie_ventadour.txt +++ b/public/articles/games/fantom_quest/lucie_ventadour.txt @@ -1,2 +1,2 @@ Salut moi c'est Lu7, je suis une geek et je vois la vie en pixels >< ! -<a href="https://www.lucieventadour.com/" target="_blank">Site web</a> -- <a href="http://lucipix.canalblog.com/" target="_blank">Blog pix</a> \ No newline at end of file +<a href="https://www.lucieventadour.com/" target="_blank">Site web</a> | <a href="http://lucipix.canalblog.com/" target="_blank">Blog pix</a> \ No newline at end of file diff --git a/public/game-articles/fantom_quest/pijar.txt b/public/articles/games/fantom_quest/pijar.txt similarity index 55% rename from public/game-articles/fantom_quest/pijar.txt rename to public/articles/games/fantom_quest/pijar.txt index e301b6bcffef369e9c6e958f4471dbea4e8e1811..e9b1b474a772a9fe507326dac1a14c8bdf41cf34 100755 --- a/public/game-articles/fantom_quest/pijar.txt +++ b/public/articles/games/fantom_quest/pijar.txt @@ -1,5 +1,5 @@ Salut moi c'est pijar. Je fais des trucs. J'aime bien le code et je fais du dessin et tout. -<a href="https://pierrejarriges-dessins.blogspot.com" target="_blank">Blog Dessin</a> -- <a href="https://soundcloud.com/abstractobject" target="_blank">Soundcloud</a> -<a href="https://gitlab.com/peter_rabbit" target="_blank">Gitlab</a> -- <a href=" https://github.com/codnpix" target="_blank">Github</a> \ No newline at end of file +<a href="https://pierrejarriges-dessins.blogspot.com" target="_blank">Blog Dessin</a> | <a href="https://soundcloud.com/abstractobject" target="_blank">Soundcloud</a> +<a href="https://gitlab.com/peter_rabbit" target="_blank">Gitlab</a> | <a href=" https://github.com/codnpix" target="_blank">Github</a> \ No newline at end of file diff --git a/public/articles/games/index.json b/public/articles/games/index.json new file mode 100755 index 0000000000000000000000000000000000000000..a9d294c4f48cce33b6436c5970e02b71723453d4 --- /dev/null +++ b/public/articles/games/index.json @@ -0,0 +1,3 @@ +{ + "articles": ["fantom_quest"] +} diff --git a/public/articles/news/index.json b/public/articles/news/index.json new file mode 100755 index 0000000000000000000000000000000000000000..0f654c8a8b88dc64a50c56a9175db9c2e20c792a --- /dev/null +++ b/public/articles/news/index.json @@ -0,0 +1,3 @@ +{ + "articles": ["installation-kuadrado"] +} diff --git a/public/news-articles/installation-kuadrado/images/atelier_bureau.jpg b/public/articles/news/installation-kuadrado/images/atelier_bureau.jpg similarity index 100% rename from public/news-articles/installation-kuadrado/images/atelier_bureau.jpg rename to public/articles/news/installation-kuadrado/images/atelier_bureau.jpg diff --git a/public/news-articles/installation-kuadrado/images/local_entree.jpg b/public/articles/news/installation-kuadrado/images/local_entree.jpg similarity index 100% rename from public/news-articles/installation-kuadrado/images/local_entree.jpg rename to public/articles/news/installation-kuadrado/images/local_entree.jpg diff --git a/public/news-articles/installation-kuadrado/installation-kuadrado.json b/public/articles/news/installation-kuadrado/installation-kuadrado.json similarity index 100% rename from public/news-articles/installation-kuadrado/installation-kuadrado.json rename to public/articles/news/installation-kuadrado/installation-kuadrado.json diff --git a/public/news-articles/installation-kuadrado/installation-kuadrado.txt b/public/articles/news/installation-kuadrado/installation-kuadrado.txt similarity index 100% rename from public/news-articles/installation-kuadrado/installation-kuadrado.txt rename to public/articles/news/installation-kuadrado/installation-kuadrado.txt diff --git a/public/articles/software/index.json b/public/articles/software/index.json new file mode 100755 index 0000000000000000000000000000000000000000..b2212f7ce92cb2213681b9ee53b11c52d02a7c84 --- /dev/null +++ b/public/articles/software/index.json @@ -0,0 +1,3 @@ +{ + "articles": ["watergun"] +} diff --git a/public/software-articles/watergun/images/watergun-overview-light.jpg b/public/articles/software/watergun/images/watergun-overview-light.jpg similarity index 100% rename from public/software-articles/watergun/images/watergun-overview-light.jpg rename to public/articles/software/watergun/images/watergun-overview-light.jpg diff --git a/public/software-articles/watergun/watergun.json b/public/articles/software/watergun/watergun.json similarity index 92% rename from public/software-articles/watergun/watergun.json rename to public/articles/software/watergun/watergun.json index 03034ea64fce93bec8bb329b69b9cbedf3c6559b..f87ffaea744975a29d2ded14a21abca91d166a52 100755 --- a/public/software-articles/watergun/watergun.json +++ b/public/articles/software/watergun/watergun.json @@ -1,7 +1,7 @@ { "title": "Watergun", "date": "2021/01/23", - "status": "Work in progress", + "status": "wip", "subtitle": "Un éditeur de site web ultra-light", "body": "<file>watergun.txt", "technical": { diff --git a/public/software-articles/watergun/watergun.txt b/public/articles/software/watergun/watergun.txt similarity index 100% rename from public/software-articles/watergun/watergun.txt rename to public/articles/software/watergun/watergun.txt diff --git a/public/education/education.js b/public/education/education.js index 00e5947caf0aec98751414a4291be4522f15a6df..056d1e0441efd81600e604b6226d64f5377cf8c9 100644 --- a/public/education/education.js +++ b/public/education/education.js @@ -11,9 +11,7 @@ const { server_url } = require("./config"); module.exports = { images_url: `${server_url}assets/images`, - news_articles_url: `${server_url}news-articles`, - game_articles_url: `${server_url}game-articles`, - software_articles_url: `${server_url}software-articles`, + articles_url: `${server_url}articles/`, }; },{"./config":1}],3:[function(require,module,exports){ diff --git a/public/game-articles/index.json b/public/game-articles/index.json deleted file mode 100755 index e1e7267f4a6916f25b1c2ab5967acb4e4d7c62a8..0000000000000000000000000000000000000000 --- a/public/game-articles/index.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "articles": ["fantom_quest/fantom_quest.json"] -} diff --git a/public/games/games.js b/public/games/games.js index 8daf77ab783450ebe5e24079e3213395169c4baf..93f44593c6868a1cd6bc1973efb45b382f19c5d0 100644 --- a/public/games/games.js +++ b/public/games/games.js @@ -11,9 +11,7 @@ const { server_url } = require("./config"); module.exports = { images_url: `${server_url}assets/images`, - news_articles_url: `${server_url}news-articles`, - game_articles_url: `${server_url}game-articles`, - software_articles_url: `${server_url}software-articles`, + articles_url: `${server_url}articles/`, }; },{"./config":1}],3:[function(require,module,exports){ @@ -98,14 +96,24 @@ function getArticleDate(date) { return `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`; } +function getArticleStatus(status) { + switch (status) { + case "wip": + return "En développement"; + case "released": + return "En production"; + } +} + function loadArticles(dir_url) { return new Promise((resolve, reject) => { fetchjson(`${dir_url}/index.json`) .then(json => { Promise.all( - json.articles.map(async articlePath => { - const art = await fetchjson(`${dir_url}/${articlePath}`); - const tmpSplit = articlePath.split("/"); + json.articles.map(async artDir => { + const artPath = `${artDir}/${artDir}.json`; + const art = await fetchjson(`${dir_url}/${artPath}`); + const tmpSplit = artPath.split("/"); tmpSplit.pop(); const absArtPath = `${dir_url}/${tmpSplit.join("/")}`; return Object.assign(art, { path: absArtPath }); @@ -145,6 +153,7 @@ module.exports = { getArticleBody, getArticleDate, populateArticles, + getArticleStatus, }; },{"./fetch":5}],5:[function(require,module,exports){ @@ -263,7 +272,7 @@ module.exports = { "use strict"; const ImageCarousel = require("../../../generic-components/image-carousel"); -const { getArticleBody } = require("../../../lib/article-utils"); +const { getArticleBody, getArticleStatus } = require("../../../lib/article-utils"); class TeamMember { constructor(props) { @@ -313,7 +322,7 @@ class GameArticle { } render() { - const { title, tags, body, subtitle, images, path, team_subarticles } = this.props; + const { title, tags, body, subtitle, images, path, team_subarticles, status } = this.props; return { tag: "article", class: "game-article", @@ -325,11 +334,29 @@ class GameArticle { }, { tag: "div", - class: "game-tags", - contents: tags.map(tag => { - return { tag: "span", contents: tag }; - }), + class: "game-infos", + contents: [ + { + tag: "div", + class: "game-tags", + contents: tags.map(tag => { + return { tag: "span", contents: tag }; + }), + }, + { + tag: "div", + class: "game-status", + contents: [ + { + tag: "span", + class: `project-status ${status}`, + contents: getArticleStatus(status), + }, + ], + }, + ], }, + { tag: "h3", class: "game-subtitle", @@ -368,7 +395,7 @@ module.exports = GameArticle; },{"../../../generic-components/image-carousel":3,"../../../lib/article-utils":4}],8:[function(require,module,exports){ "use strict"; -const { game_articles_url } = require("../../../../constants"); +const { articles_url } = require("../../../../constants"); const { loadArticles, populateArticles } = require("../../../lib/article-utils"); const objectHtmlRenderer = require("../../../lib/object-html-renderer"); const GameArticle = require("./game-article"); @@ -384,7 +411,7 @@ class GameArticles { } loadArticles() { - loadArticles(game_articles_url) + loadArticles(`${articles_url}/games`) .then(articles => { Promise.all( articles.map(async a => { diff --git a/public/main.js b/public/main.js index 26dba74dae114ee4b89f3763de7b4237434dc7de..dcc30fb845ef96a38d8b0e9ce85e6f54713c750f 100644 --- a/public/main.js +++ b/public/main.js @@ -11,9 +11,7 @@ const { server_url } = require("./config"); module.exports = { images_url: `${server_url}assets/images`, - news_articles_url: `${server_url}news-articles`, - game_articles_url: `${server_url}game-articles`, - software_articles_url: `${server_url}software-articles`, + articles_url: `${server_url}articles/`, }; },{"./config":1}],3:[function(require,module,exports){ @@ -88,7 +86,7 @@ module.exports = ImageCarousel; },{"../lib/object-html-renderer":9}],4:[function(require,module,exports){ "use strict"; -const { news_articles_url } = require("../../constants"); +const { articles_url } = require("../../constants"); const objectHtmlRenderer = require("../lib/object-html-renderer"); const ImageCarousel = require("../generic-components/image-carousel"); const { loadArticles, getArticleDate, getArticleBody } = require("../lib/article-utils"); @@ -105,7 +103,7 @@ class NewsArticles { } loadArticles() { - loadArticles(news_articles_url).then(articles => { + loadArticles(`${articles_url}/news`).then(articles => { this.state.articles = articles; this.state.showArticleIndex = this.state.articles.length - 1; this.refresh(); @@ -383,14 +381,24 @@ function getArticleDate(date) { return `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`; } +function getArticleStatus(status) { + switch (status) { + case "wip": + return "En développement"; + case "released": + return "En production"; + } +} + function loadArticles(dir_url) { return new Promise((resolve, reject) => { fetchjson(`${dir_url}/index.json`) .then(json => { Promise.all( - json.articles.map(async articlePath => { - const art = await fetchjson(`${dir_url}/${articlePath}`); - const tmpSplit = articlePath.split("/"); + json.articles.map(async artDir => { + const artPath = `${artDir}/${artDir}.json`; + const art = await fetchjson(`${dir_url}/${artPath}`); + const tmpSplit = artPath.split("/"); tmpSplit.pop(); const absArtPath = `${dir_url}/${tmpSplit.join("/")}`; return Object.assign(art, { path: absArtPath }); @@ -430,6 +438,7 @@ module.exports = { getArticleBody, getArticleDate, populateArticles, + getArticleStatus, }; },{"./fetch":8}],8:[function(require,module,exports){ diff --git a/public/news-articles/index.json b/public/news-articles/index.json deleted file mode 100755 index 42c50f04227b700ae4b22efbca8a0e75cf471812..0000000000000000000000000000000000000000 --- a/public/news-articles/index.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "articles": ["installation-kuadrado/installation-kuadrado.json"] -} diff --git a/public/software-articles/index.json b/public/software-articles/index.json deleted file mode 100755 index b5f5003a38e6f198a059ad35adb148adfe5aaf4a..0000000000000000000000000000000000000000 --- a/public/software-articles/index.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "articles": ["watergun/watergun.json"] -} diff --git a/public/software-development/software-development.js b/public/software-development/software-development.js index 6af223eef707fa0be144ef3863b66d5ec0cde8a5..3ecadce594bf6fa1b1f8fc38f9af292a4d947299 100644 --- a/public/software-development/software-development.js +++ b/public/software-development/software-development.js @@ -11,9 +11,7 @@ const { server_url } = require("./config"); module.exports = { images_url: `${server_url}assets/images`, - news_articles_url: `${server_url}news-articles`, - game_articles_url: `${server_url}game-articles`, - software_articles_url: `${server_url}software-articles`, + articles_url: `${server_url}articles/`, }; },{"./config":1}],3:[function(require,module,exports){ @@ -98,14 +96,24 @@ function getArticleDate(date) { return `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`; } +function getArticleStatus(status) { + switch (status) { + case "wip": + return "En développement"; + case "released": + return "En production"; + } +} + function loadArticles(dir_url) { return new Promise((resolve, reject) => { fetchjson(`${dir_url}/index.json`) .then(json => { Promise.all( - json.articles.map(async articlePath => { - const art = await fetchjson(`${dir_url}/${articlePath}`); - const tmpSplit = articlePath.split("/"); + json.articles.map(async artDir => { + const artPath = `${artDir}/${artDir}.json`; + const art = await fetchjson(`${dir_url}/${artPath}`); + const tmpSplit = artPath.split("/"); tmpSplit.pop(); const absArtPath = `${dir_url}/${tmpSplit.join("/")}`; return Object.assign(art, { path: absArtPath }); @@ -145,6 +153,7 @@ module.exports = { getArticleBody, getArticleDate, populateArticles, + getArticleStatus, }; },{"./fetch":5}],5:[function(require,module,exports){ @@ -262,9 +271,9 @@ module.exports = { },{}],7:[function(require,module,exports){ "use strict"; -const { software_articles_url } = require("../../../../constants"); +const { articles_url } = require("../../../../constants"); const ImageCarousel = require("../../../generic-components/image-carousel"); -const { loadArticles, getArticleBody, getArticleDate } = require("../../../lib/article-utils"); +const { loadArticles, getArticleBody, getArticleDate, getArticleStatus } = require("../../../lib/article-utils"); const objectHtmlRenderer = require("../../../lib/object-html-renderer"); class SoftwareArticle { @@ -299,8 +308,8 @@ class SoftwareArticle { }, { tag: "span", - class: "software-status", - contents: status, + class: `project-status ${status}`, + contents: getArticleStatus(status), }, ], }, @@ -391,7 +400,7 @@ class SoftwareArticles { } loadArticles() { - loadArticles(software_articles_url) + loadArticles(`${articles_url}/software`) .then(articles => { this.state.articles = articles; this.refresh(); diff --git a/public/style/style.css b/public/style/style.css index e4c3310b0622faaaa885027af55e0e6987d9ec49..e39219686d73643fe582676422cede7ffc32b789 100644 --- a/public/style/style.css +++ b/public/style/style.css @@ -337,6 +337,19 @@ main #page-container .page-contents-center { max-width: 100%; margin: 0 auto; } +main #page-container .project-status { + margin: 0 20px; + color: #3c4144; + padding: 10px 20px; + font-weight: bold; + border-radius: 20px; +} +main #page-container .project-status.wip { + background-color: #e5a002; +} +main #page-container .project-status.prod { + background-color: #368736; +} main #page-container #home-page { display: flex; flex-direction: column; @@ -849,7 +862,7 @@ main #page-container #games-page .game-articles article.game-article { grid-template-rows: repeat(6, auto); background-color: #3c4144; } -main #page-container #games-page .game-articles article.game-article *:not(a) { +main #page-container #games-page .game-articles article.game-article *:not(a, .project-status) { color: #d4d9dd; } main #page-container #games-page .game-articles article.game-article .game-title { @@ -861,14 +874,19 @@ main #page-container #games-page .game-articles article.game-article .game-title font-size: 35px; font-style: italic; } -main #page-container #games-page .game-articles article.game-article .game-tags { +main #page-container #games-page .game-articles article.game-article .game-infos { + font-size: 13px; grid-column: 1; + display: grid; + grid-template-columns: auto auto; +} +main #page-container #games-page .game-articles article.game-article .game-infos .game-tags { display: flex; gap: 10px; flex-wrap: wrap; margin: 10px 20px; } -main #page-container #games-page .game-articles article.game-article .game-tags span { +main #page-container #games-page .game-articles article.game-article .game-infos .game-tags span { font-size: 12px; padding: 6px; background-color: #6b7880; @@ -876,6 +894,12 @@ main #page-container #games-page .game-articles article.game-article .game-tags border-radius: 5px; font-weight: 600; } +main #page-container #games-page .game-articles article.game-article .game-infos .game-status { + display: flex; + justify-content: center; + align-items: center; + flex-direction: row; +} main #page-container #games-page .game-articles article.game-article .game-subtitle { grid-column: 1; margin: 10px 20px 30px; @@ -952,6 +976,9 @@ main #page-container #games-page .game-articles article.placeholder * { padding: 20px; font-size: 25px; } + main #page-container #games-page .game-articles article.game-article .game-infos { + grid-template-columns: 1fr; + } main #page-container #games-page .game-articles article.game-article .image-carousel { grid-column: 1; grid-row: 2; @@ -1000,14 +1027,6 @@ main #page-container #software-page .software-articles article.software-article color: #96a5ae; font-style: italic; } -main #page-container #software-page .software-articles article.software-article .software-infos .software-status { - margin: 0 20px; - background-color: #e5a002; - color: #3c4144; - padding: 10px 20px; - font-weight: bold; - border-radius: 20px; -} main #page-container #software-page .software-articles article.software-article .software-subtitle { grid-column: 1; margin: 20px; diff --git a/src/home-page-components/news-articles.js b/src/home-page-components/news-articles.js index 57eacfb7a5a7b5f7192fed5538fff1e5d23cf9d4..9ec021914f6d21657f752f8d1e415ed5d823ae2f 100644 --- a/src/home-page-components/news-articles.js +++ b/src/home-page-components/news-articles.js @@ -1,6 +1,6 @@ "use strict"; -const { news_articles_url } = require("../../constants"); +const { articles_url } = require("../../constants"); const objectHtmlRenderer = require("../lib/object-html-renderer"); const ImageCarousel = require("../generic-components/image-carousel"); const { loadArticles, getArticleDate, getArticleBody } = require("../lib/article-utils"); @@ -17,7 +17,7 @@ class NewsArticles { } loadArticles() { - loadArticles(news_articles_url).then(articles => { + loadArticles(`${articles_url}/news`).then(articles => { this.state.articles = articles; this.state.showArticleIndex = this.state.articles.length - 1; this.refresh(); diff --git a/src/lib/article-utils.js b/src/lib/article-utils.js index 29ac1e1b995486056115d5b72746352cc1f05a0f..efde108f655fbd59e918b05a3777bf9930b55f9c 100644 --- a/src/lib/article-utils.js +++ b/src/lib/article-utils.js @@ -10,14 +10,24 @@ function getArticleDate(date) { return `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`; } +function getArticleStatus(status) { + switch (status) { + case "wip": + return "En développement"; + case "released": + return "En production"; + } +} + function loadArticles(dir_url) { return new Promise((resolve, reject) => { fetchjson(`${dir_url}/index.json`) .then(json => { Promise.all( - json.articles.map(async articlePath => { - const art = await fetchjson(`${dir_url}/${articlePath}`); - const tmpSplit = articlePath.split("/"); + json.articles.map(async artDir => { + const artPath = `${artDir}/${artDir}.json`; + const art = await fetchjson(`${dir_url}/${artPath}`); + const tmpSplit = artPath.split("/"); tmpSplit.pop(); const absArtPath = `${dir_url}/${tmpSplit.join("/")}`; return Object.assign(art, { path: absArtPath }); @@ -57,4 +67,5 @@ module.exports = { getArticleBody, getArticleDate, populateArticles, + getArticleStatus, }; diff --git a/src/pages/games/components/game-article.js b/src/pages/games/components/game-article.js index edd332ab7c4c897aa1978b326fbc56722dd06920..afca661f9a875a78bbd1985546fc0749fe985a1b 100644 --- a/src/pages/games/components/game-article.js +++ b/src/pages/games/components/game-article.js @@ -1,7 +1,7 @@ "use strict"; const ImageCarousel = require("../../../generic-components/image-carousel"); -const { getArticleBody } = require("../../../lib/article-utils"); +const { getArticleBody, getArticleStatus } = require("../../../lib/article-utils"); class TeamMember { constructor(props) { @@ -51,7 +51,7 @@ class GameArticle { } render() { - const { title, tags, body, subtitle, images, path, team_subarticles } = this.props; + const { title, tags, body, subtitle, images, path, team_subarticles, status } = this.props; return { tag: "article", class: "game-article", @@ -63,11 +63,29 @@ class GameArticle { }, { tag: "div", - class: "game-tags", - contents: tags.map(tag => { - return { tag: "span", contents: tag }; - }), + class: "game-infos", + contents: [ + { + tag: "div", + class: "game-tags", + contents: tags.map(tag => { + return { tag: "span", contents: tag }; + }), + }, + { + tag: "div", + class: "game-status", + contents: [ + { + tag: "span", + class: `project-status ${status}`, + contents: getArticleStatus(status), + }, + ], + }, + ], }, + { tag: "h3", class: "game-subtitle", diff --git a/src/pages/games/components/game-articles.js b/src/pages/games/components/game-articles.js index 6f7fb8541a6a899e83e07738c9c81b8b5de96c23..e80d8c709e5b274bca672e6dbb24cb0ed578ba35 100644 --- a/src/pages/games/components/game-articles.js +++ b/src/pages/games/components/game-articles.js @@ -1,6 +1,6 @@ "use strict"; -const { game_articles_url } = require("../../../../constants"); +const { articles_url } = require("../../../../constants"); const { loadArticles, populateArticles } = require("../../../lib/article-utils"); const objectHtmlRenderer = require("../../../lib/object-html-renderer"); const GameArticle = require("./game-article"); @@ -16,7 +16,7 @@ class GameArticles { } loadArticles() { - loadArticles(game_articles_url) + loadArticles(`${articles_url}/games`) .then(articles => { Promise.all( articles.map(async a => { diff --git a/src/pages/games/games.scss b/src/pages/games/games.scss index 341bf603273843810b8f61dc2fce5407f7c66680..2355abfb9768fe3ff985bffec1cbde601655d97f 100644 --- a/src/pages/games/games.scss +++ b/src/pages/games/games.scss @@ -8,7 +8,7 @@ &.game-article { grid-template-rows: repeat(6, auto); background-color: $dark_2; - *:not(a) { + *:not(a, .project-status) { color: $light_0; } .game-title { @@ -20,21 +20,30 @@ font-size: 35px; font-style: italic; } - .game-tags { + .game-infos { + font-size: 13px; grid-column: 1; - display: flex; - gap: 10px; - flex-wrap: wrap; - margin: 10px 20px; - span { - font-size: 12px; - padding: 6px; - background-color: $medium_grey; - color: $light_0; - border-radius: 5px; - font-weight: 600; + display: grid; + grid-template-columns: auto auto; + .game-tags { + display: flex; + gap: 10px; + flex-wrap: wrap; + margin: 10px 20px; + span { + font-size: 12px; + padding: 6px; + background-color: $medium_grey; + color: $light_0; + border-radius: 5px; + font-weight: 600; + } + } + .game-status { + @include flex-center; } } + .game-subtitle { grid-column: 1; margin: 10px 20px 30px; @@ -110,6 +119,9 @@ padding: 20px; font-size: 25px; } + .game-infos { + grid-template-columns: 1fr; + } .image-carousel { grid-column: 1; diff --git a/src/pages/software-development/components/software-articles.js b/src/pages/software-development/components/software-articles.js index 15cb37c0e1f9a6e636565a5afb0d4600ff140301..0d0254d1598becd7d6ac488fadb65acc3893d225 100644 --- a/src/pages/software-development/components/software-articles.js +++ b/src/pages/software-development/components/software-articles.js @@ -1,8 +1,8 @@ "use strict"; -const { software_articles_url } = require("../../../../constants"); +const { articles_url } = require("../../../../constants"); const ImageCarousel = require("../../../generic-components/image-carousel"); -const { loadArticles, getArticleBody, getArticleDate } = require("../../../lib/article-utils"); +const { loadArticles, getArticleBody, getArticleDate, getArticleStatus } = require("../../../lib/article-utils"); const objectHtmlRenderer = require("../../../lib/object-html-renderer"); class SoftwareArticle { @@ -37,8 +37,8 @@ class SoftwareArticle { }, { tag: "span", - class: "software-status", - contents: status, + class: `project-status ${status}`, + contents: getArticleStatus(status), }, ], }, @@ -129,7 +129,7 @@ class SoftwareArticles { } loadArticles() { - loadArticles(software_articles_url) + loadArticles(`${articles_url}/software`) .then(articles => { this.state.articles = articles; this.refresh(); diff --git a/src/pages/software-development/software-development.scss b/src/pages/software-development/software-development.scss index e5a78861ea0b35d8d707eebbb08942d9f3e5e07b..d5549a322054bd99cdcb7eb8f3e139ba755dced1 100644 --- a/src/pages/software-development/software-development.scss +++ b/src/pages/software-development/software-development.scss @@ -27,14 +27,6 @@ color: $light_1; font-style: italic; } - .software-status { - margin: 0 20px; - background-color: $yellow_1; - color: $dark_2; - padding: 10px 20px; - font-weight: bold; - border-radius: 20px; - } } .software-subtitle { diff --git a/src/style.scss b/src/style.scss index 2bc18e6f88dcf7befd8a9ce5d573299c9c9a19bd..79e008eb9e430f69dc88526adb8ed4db8962ef78 100644 --- a/src/style.scss +++ b/src/style.scss @@ -251,6 +251,9 @@ main { .page-contents-center { @include page-contents-center; } + .project-status { + @include project-status + } @import "./homepage.scss"; @import "./pages/education/education.scss"; @import "./pages/games/games.scss"; diff --git a/src/theme.scss b/src/theme.scss index 5d4d057dfaef8f1f794b5a93861d925b161ff41a..627be8433d5c0aa19cd3ffad72899ac5fc13d776 100644 --- a/src/theme.scss +++ b/src/theme.scss @@ -134,6 +134,20 @@ $page_contents_center_width: 1300px; } } +@mixin project-status { + margin: 0 20px; + color: $dark_2; + padding: 10px 20px; + font-weight: bold; + border-radius: 20px; + &.wip { + background-color: $yellow_1; + } + &.prod { + background-color: $kaki; + } +} + @mixin flex-center { display: flex; justify-content: center;