From 68275a42fbcc8b520acd7303313f44a73a67d3ab Mon Sep 17 00:00:00 2001 From: Pierre Jarriges <pierre.jarriges@tutanota.com> Date: Thu, 27 May 2021 13:08:02 +0200 Subject: [PATCH] education: stage linux --- config.js | 6 +- public/assets/images/learning_theme_linux.png | Bin 3852 -> 4064 bytes public/education/education.js | 22 +- public/games/games.js | 2 +- public/main.js | 2 +- .../software-development.js | 2 +- public/story-logic-app/index.html | 35 ++ public/story-logic-app/story-logic-app.js | 380 ++++++++++++++++++ .../pages/story-logic-app/story-logic-app.css | 3 + public/style/style.css | 2 +- src/pages/education/education.js | 20 +- src/pages/education/education.scss | 2 +- src/pages/story-logic-app/index.js | 4 + src/pages/story-logic-app/meta.json | 20 + src/pages/story-logic-app/story-logic-app.js | 19 + .../story-logic-app/story-logic-app.scss | 0 16 files changed, 503 insertions(+), 16 deletions(-) create mode 100644 public/story-logic-app/index.html create mode 100644 public/story-logic-app/story-logic-app.js create mode 100644 public/style/pages/story-logic-app/story-logic-app.css create mode 100644 src/pages/story-logic-app/index.js create mode 100644 src/pages/story-logic-app/meta.json create mode 100644 src/pages/story-logic-app/story-logic-app.js create mode 100644 src/pages/story-logic-app/story-logic-app.scss diff --git a/config.js b/config.js index 6f9f8c6..17760e7 100644 --- a/config.js +++ b/config.js @@ -1,12 +1,10 @@ function getServerUrl() { - return `${location.origin}${ - location.origin.charAt(location.origin.length - 1) !== "/" ? "/" : "" - }`; + return `${location.origin}${location.origin.charAt(location.origin.length - 1) !== "/" ? "/" : "" + }`; } module.exports = { getServerUrl, - website_title: "Kuadrado website template", build: { protected_dirs: ["assets", "style", "articles"], default_meta_keys: ["title", "description", "image", "open_graph", "json_ld"], diff --git a/public/assets/images/learning_theme_linux.png b/public/assets/images/learning_theme_linux.png index dd16fa85266a9c4433576ed6eef7d46e53be1f85..cebfbf120831c2e66bc217158db173a4443cba84 100755 GIT binary patch literal 4064 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 delta 3818 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 diff --git a/public/education/education.js b/public/education/education.js index c32aa79..9eeb43d 100644 --- a/public/education/education.js +++ b/public/education/education.js @@ -7,7 +7,7 @@ function getServerUrl() { module.exports = { getServerUrl, - website_title: "Kuadrado website template", + website_title: "Kuadrado website", build: { protected_dirs: ["assets", "style", "articles"], default_meta_keys: ["title", "description", "image", "open_graph", "json_ld"], @@ -146,7 +146,7 @@ const EDU_THEMES = [ // pageUrl: "2d", }, { - title: "Maths et physiques", + title: "Maths et physique", description: "Abordez les notions fondamentales de façon décontractée pour le plaisir de comprendre.", image: "learning_theme_math.png", // pageUrl: "math", @@ -162,6 +162,13 @@ const EDU_THEMES = [ description: "Perdu avec votre ordinateur ou votre smartphone, les logiciels, internet ? Je vous aide pas à pas à comprendre les fondamentaux et à utiliser sereinement la technologie.", image: "learning_theme_pc.png", // pageUrl: "popularization" + }, + { + title: "Stage GNU/Linux", + description: `<b>Passez le cap du libre ! </b><br/> + Stage de 4 séances pour installer Linux, faire ses premiers pas avec les logiciels libres et acquérir une autonomie suffisante pour une utilisation basique. + `, + image: "learning_theme_linux.png" } ]; @@ -249,7 +256,7 @@ class EducationPage extends WebPage { tag: "p", class: "info-body", contents: `Les ateliers sont accessibles aux adultes comme aux enfants, plutôt à partir de 12 ans.<br/> - Les séances ont lieu en groupes mixtes. + Les séances ont lieu en groupes mixtes. Capacité limitée à 5 personnes. ` } ] @@ -332,7 +339,7 @@ class EducationPage extends WebPage { tag: "li", contents: [ { tag: "span", contents: "Inscription au mois" }, - { tag: "span", contents: "50€" }, + { tag: "span", contents: "50€, accès à toutes les plages horaires." }, ] }, { @@ -348,6 +355,13 @@ class EducationPage extends WebPage { { tag: "span", contents: "Cours particuliers" }, { tag: "span", contents: "30€/h, sur place ou en visio. Horaires à définir." }, ] + }, + { + tag: "li", + contents: [ + { tag: "span", contents: "Stage 4 séances de 2h" }, + { tag: "span", contents: "40€ par personne, horaires et dates à définir selon la demande." }, + ] } ] } diff --git a/public/games/games.js b/public/games/games.js index f7a742b..bad4aa7 100644 --- a/public/games/games.js +++ b/public/games/games.js @@ -7,7 +7,7 @@ function getServerUrl() { module.exports = { getServerUrl, - website_title: "Kuadrado website template", + website_title: "Kuadrado website", build: { protected_dirs: ["assets", "style", "articles"], default_meta_keys: ["title", "description", "image", "open_graph", "json_ld"], diff --git a/public/main.js b/public/main.js index cdb3d0f..f599a14 100644 --- a/public/main.js +++ b/public/main.js @@ -7,7 +7,7 @@ function getServerUrl() { module.exports = { getServerUrl, - website_title: "Kuadrado website template", + website_title: "Kuadrado website", build: { protected_dirs: ["assets", "style", "articles"], default_meta_keys: ["title", "description", "image", "open_graph", "json_ld"], diff --git a/public/software-development/software-development.js b/public/software-development/software-development.js index c78fd15..6fb1912 100644 --- a/public/software-development/software-development.js +++ b/public/software-development/software-development.js @@ -7,7 +7,7 @@ function getServerUrl() { module.exports = { getServerUrl, - website_title: "Kuadrado website template", + website_title: "Kuadrado website", build: { protected_dirs: ["assets", "style", "articles"], default_meta_keys: ["title", "description", "image", "open_graph", "json_ld"], diff --git a/public/story-logic-app/index.html b/public/story-logic-app/index.html new file mode 100644 index 0000000..8faa083 --- /dev/null +++ b/public/story-logic-app/index.html @@ -0,0 +1,35 @@ +<!DOCTYPE html> +<html lang="fr" prefix="og: https://ogp.me/ns#"> + <head> + <meta charset="utf-8" /> + <title>Kuadrado Software | Story Logic</title> + <meta name="description" content="appli pour faire des jeux old school"/> + <meta name="author" content="Kuadrado Software" /> + <meta name="image" content="https://kuadrado-software.fr/assets/images/brain.png"/> + + <!-- Open Graph Protocol meta data --> + <meta property="og:title" content="Kuadrado Software | Story Logic"/> + <meta property="og:description" content="appli pour faire des jeux old school"/> + <meta property="og:type" content="website" /> + <meta property="og:url" content="https://kuadrado-software.fr/story-logic-app"/> + <meta property="og:image" content="https://kuadrado-software.fr/assets/images/brain.png"/> + <meta property="twitter:image" content="https://kuadrado-software.fr/assets/images/brain.png"/> + <meta property="og:locale" content="fr_FR"/> + <meta property="og:site_name" content="Kuadrado Software" /> + + <!-- English translation not ready yet --> + <!-- <meta property="og:locale:alternate" content="en_GB" /> --> + + <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" /> + <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> + <link href="/style/style.css" rel="stylesheet" /> + <script type="application/ld+json">{"@context":"https://schema.org","type":"WebPage","description":"appli pour faire des jeux old school","image":["https://kuadrado-software.fr/assets/images/brain.svg"],"keywords":"","name":"Kuadrado Software - Story Logic","url":"https://kuadrado-software.fr/story-logic-app/"}</script> + </head> + <!-- The vocab attribute defines the standard vocabulary used for RDFa standard. + The DOM may contain properties such as "typeof" and "property" accordinly to the schema.org vocabulary --> + <body vocab="https://schema.org/"> + <!-- The H1 tag will be never seen but it's necessary for SEO --> + <main><h1 style="visibility: hidden">Kuadrado Software | Story Logic</h1></main> + </body> + <script type="text/javascript" src="./story-logic-app.js"></script> +</html> diff --git a/public/story-logic-app/story-logic-app.js b/public/story-logic-app/story-logic-app.js new file mode 100644 index 0000000..b69681d --- /dev/null +++ b/public/story-logic-app/story-logic-app.js @@ -0,0 +1,380 @@ +(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ +function getServerUrl() { + return `${location.origin}${ + location.origin.charAt(location.origin.length - 1) !== "/" ? "/" : "" + }`; +} + +module.exports = { + getServerUrl, + website_title: "Kuadrado website", + build: { + protected_dirs: ["assets", "style", "articles"], + default_meta_keys: ["title", "description", "image", "open_graph", "json_ld"], + }, +}; + +},{}],2:[function(require,module,exports){ +const { getServerUrl } = require("./config"); + +module.exports = { + images_url: `${getServerUrl()}assets/images/`, + articles_url: `${getServerUrl()}articles/`, +}; + +},{"./config":1}],3:[function(require,module,exports){ +"use strict"; + +module.exports = { + setRenderCycleRoot(renderCycleRoot) { + this.renderCycleRoot = renderCycleRoot; + }, + objectToHtml: function objectToHtml(obj) { + const { tag } = obj; + + const node = document.createElement(tag); + const excludeKeys = ["tag", "contents", "style_rules", "state"]; + + Object.keys(obj) + .filter(attr => !excludeKeys.includes(attr)) + .forEach(attr => { + if (attr === "class") { + node.classList.add(...obj[attr].split(" ").filter(s => s !== "")); + } else { + node[attr] = obj[attr]; + } + }); + if (obj.contents && typeof obj.contents === "string") { + node.innerHTML = obj.contents; + } else { + obj.contents && + obj.contents.length > 0 && + obj.contents.forEach(el => { + switch (typeof el) { + case "string": + node.innerHTML = el; + break; + case "object": + node.appendChild(objectToHtml(el)); + break; + } + }); + } + + if (obj.style_rules) { + Object.keys(obj.style_rules).forEach(rule => { + node.style[rule] = obj.style_rules[rule]; + }); + } + + return node; + }, + renderCycle: function () { + this.subRender(this.renderCycleRoot.render(), document.getElementsByTagName("main")[0], { + mode: "replace", + }); + }, + subRender(object, htmlNode, options = { mode: "append" }) { + const insert = this.objectToHtml(object); + switch (options.mode) { + case "append": + htmlNode.appendChild(insert); + break; + case "override": + htmlNode.innerHTML = ""; + htmlNode.appendChild(insert); + break; + case "insert-before": + htmlNode.insertBefore(insert, htmlNode.childNodes[options.insertIndex]); + break; + case "adjacent": + /** + * options.insertLocation must be one of: + * + * afterbegin + * afterend + * beforebegin + * beforeend + */ + htmlNode.insertAdjacentHTML(options.insertLocation, insert); + break; + case "replace": + htmlNode.parentNode.replaceChild(insert, htmlNode); + break; + case "remove": + htmlNode.remove(); + break; + } + }, +}; + +},{}],4:[function(require,module,exports){ +"use strict"; + +class WebPage { + constructor(args) { + Object.assign(this, args); + } +} + +module.exports = WebPage; +},{}],5:[function(require,module,exports){ +"use strict"; + +// const { images_url } = require("../../../constants"); +const WebPage = require("../../lib/web-page"); + + +class StoryLogicApp extends WebPage { + render() { + return { + tag: "div", + id: "story-logic-app", + contents: [ + { tag: "strong", contents: "yup" } + ], + }; + } +} + +module.exports = StoryLogicApp; + +},{"../../lib/web-page":4}],6:[function(require,module,exports){ +"use strict"; +const runPage = require("../../run-page"); +const StoryLogicApp = require("./story-logic-app"); +runPage(StoryLogicApp); + +},{"../../run-page":7,"./story-logic-app":5}],7:[function(require,module,exports){ +"use strict"; + +const objectHtmlRenderer = require("object-to-html-renderer") +const Template = require("./template/template"); + +module.exports = function runPage(PageComponent) { + const template = new Template({ page: new PageComponent() }); + objectHtmlRenderer.setRenderCycleRoot(template); + objectHtmlRenderer.renderCycle(); +}; + +},{"./template/template":9,"object-to-html-renderer":3}],8:[function(require,module,exports){ +"use strict"; + +const { images_url } = require("../../../constants"); + +const NAV_MENU_ITEMS = [ + { url: "/games/", text: "Jeux" }, + { + url: "/education/", + text: "Pédagogie", + // submenu: [ + // { url: "/gamedev", text: "Création de jeux vidéo" }, + // ] + }, + { url: "/software-development/", text: "Software" } +]; + +class NavBar { + constructor() { + this.initEventHandlers(); + } + + handleBurgerClick() { + document.getElementById("nav-menu-list").classList.toggle("responsive-show"); + } + + initEventHandlers() { + window.addEventListener("click", event => { + if ( + event.target.id !== "nav-menu-list" && + !event.target.classList.contains("burger") && + !event.target.parentNode.classList.contains("burger") + ) { + document.getElementById("nav-menu-list").classList.remove("responsive-show"); + } + }); + } + + renderHome() { + return { + tag: "div", + class: "home", + contents: [ + { + tag: "a", + href: "/", + contents: [ + { + tag: "img", + alt: "Logo Kuadrado", + src: `${images_url}logo_kuadrado.svg`, + }, + { + tag: "img", + alt: "Kuadrado Software", + class: "logo-text", + src: `${images_url}logo_kuadrado_txt.svg`, + }, + ], + }, + ], + }; + } + + renderMenu(menuItemsArray, isSubmenu = false, parentUrl = "") { + return { + tag: "ul", + id: "nav-menu-list", + class: isSubmenu ? "submenu" : "", + contents: menuItemsArray.map(item => { + const { url, text, submenu } = item; + const href = `${parentUrl}${url}`; + return { + tag: "li", + class: !isSubmenu && window.location.pathname === href ? "active" : "", + contents: [ + { + tag: "a", + href, + contents: text, + }, + ].concat(submenu ? [this.renderMenu(submenu, true, url)] : []), + }; + }), + }; + } + + renderResponsiveBurger() { + return { + tag: "div", + class: "burger", + onclick: this.handleBurgerClick.bind(this), + contents: [{ tag: "span", contents: "···" }], + }; + } + + render() { + return { + tag: "nav", + contents: [ + this.renderHome(), + this.renderResponsiveBurger(), + this.renderMenu(NAV_MENU_ITEMS), + ], + }; + } +} + +module.exports = NavBar; + +},{"../../../constants":2}],9:[function(require,module,exports){ +"use strict"; + +const { in_construction } = require("../../config"); +const { images_url } = require("../../constants"); +const NavBar = require("./components/navbar"); + +class Template { + constructor(props) { + this.props = props; + } + render() { + return { + tag: "main", + contents: [ + { + tag: "header", + contents: [new NavBar().render()], + }, + in_construction && { + tag: "section", + class: "warning-banner", + contents: [ + { + tag: "strong", + class: "page-contents-center", + contents: "Site en construction ...", + }, + ], + }, + { + tag: "section", + id: "page-container", + contents: [this.props.page.render()], + }, + { + tag: "footer", + contents: [ + { + tag: "div", + class: "logo", + contents: [ + { + tag: "img", + alt: `logo Kuadrado`, + src: `${images_url}logo_kuadrado.svg`, + }, + { + tag: "img", + class: "text-logo", + alt: "Kuadrado Software", + src: `${images_url}logo_kuadrado_txt.svg`, + }, + ], + }, + { + tag: "span", + contents: "32 rue Simon Vialet, 07240 Vernoux en Vivarais. Ardèche, France", + }, + { + tag: "div", + contents: [ + { tag: "strong", contents: "<blue>Contact : </blue>" }, + { + tag: "a", + href: "mailto:contact@kuadrado-software.fr", + contents: "contact@kuadrado-software.fr", + }, + ], + }, + { + tag: "div", + class: "social", + contents: [ + { + tag: "strong", + contents: "<blue>Sur les réseaux : </blue>", + }, + { + tag: "a", + href: "https://www.linkedin.com/company/kuadrado-software", + target: "_blank", + contents: "in", + title: "Linkedin", + }, + { + tag: "a", + href: "https://twitter.com/KuadradoSoft", + target: "_blank", + contents: "t", + title: "Twitter", + style_rules: { fontFamily: "serif" }, + }, + ], + }, + { + tag: "span", + contents: `Copyright © ${new Date() + .getFullYear()} Kuadrado Software | + Toutes les images du site ont été réalisées par mes soins et peuvent être réutilisées pour un usage personnel.`, + }, + ], + }, + ], + }; + } +} + +module.exports = Template; + +},{"../../config":1,"../../constants":2,"./components/navbar":8}]},{},[6]); diff --git a/public/style/pages/story-logic-app/story-logic-app.css b/public/style/pages/story-logic-app/story-logic-app.css new file mode 100644 index 0000000..23d770b --- /dev/null +++ b/public/style/pages/story-logic-app/story-logic-app.css @@ -0,0 +1,3 @@ + + +/*# sourceMappingURL=story-logic-app.css.map */ diff --git a/public/style/style.css b/public/style/style.css index abc4eae..f50842c 100644 --- a/public/style/style.css +++ b/public/style/style.css @@ -854,7 +854,7 @@ main #page-container #education-page .edu-themes .edu-theme h3 { color: #00ff00; grid-row: 1; margin: 0; - padding: 0 10px; + padding: 10px; display: flex; align-items: center; border-width: 0 0 0 1px; diff --git a/src/pages/education/education.js b/src/pages/education/education.js index 53c9ac3..8fe9161 100644 --- a/src/pages/education/education.js +++ b/src/pages/education/education.js @@ -25,7 +25,7 @@ const EDU_THEMES = [ // pageUrl: "2d", }, { - title: "Maths et physiques", + title: "Maths et physique", description: "Abordez les notions fondamentales de façon décontractée pour le plaisir de comprendre.", image: "learning_theme_math.png", // pageUrl: "math", @@ -41,6 +41,13 @@ const EDU_THEMES = [ description: "Perdu avec votre ordinateur ou votre smartphone, les logiciels, internet ? Je vous aide pas à pas à comprendre les fondamentaux et à utiliser sereinement la technologie.", image: "learning_theme_pc.png", // pageUrl: "popularization" + }, + { + title: "Stage GNU/Linux", + description: `<b>Passez le cap du libre ! </b><br/> + Stage de 4 séances pour installer Linux, faire ses premiers pas avec les logiciels libres et acquérir une autonomie suffisante pour une utilisation basique. + `, + image: "learning_theme_linux.png" } ]; @@ -128,7 +135,7 @@ class EducationPage extends WebPage { tag: "p", class: "info-body", contents: `Les ateliers sont accessibles aux adultes comme aux enfants, plutôt à partir de 12 ans.<br/> - Les séances ont lieu en groupes mixtes. + Les séances ont lieu en groupes mixtes. Capacité limitée à 5 personnes. ` } ] @@ -211,7 +218,7 @@ class EducationPage extends WebPage { tag: "li", contents: [ { tag: "span", contents: "Inscription au mois" }, - { tag: "span", contents: "50€" }, + { tag: "span", contents: "50€, accès à toutes les plages horaires." }, ] }, { @@ -227,6 +234,13 @@ class EducationPage extends WebPage { { tag: "span", contents: "Cours particuliers" }, { tag: "span", contents: "30€/h, sur place ou en visio. Horaires à définir." }, ] + }, + { + tag: "li", + contents: [ + { tag: "span", contents: "Stage 4 séances de 2h" }, + { tag: "span", contents: "40€ par personne, horaires et dates à définir selon la demande." }, + ] } ] } diff --git a/src/pages/education/education.scss b/src/pages/education/education.scss index c18b3b3..d284dfc 100644 --- a/src/pages/education/education.scss +++ b/src/pages/education/education.scss @@ -54,7 +54,7 @@ color: $green; grid-row: 1; margin: 0; - padding: 0 10px; + padding: 10px; display: flex; align-items: center; border-width: 0 0 0 1px; diff --git a/src/pages/story-logic-app/index.js b/src/pages/story-logic-app/index.js new file mode 100644 index 0000000..8873a8a --- /dev/null +++ b/src/pages/story-logic-app/index.js @@ -0,0 +1,4 @@ +"use strict"; +const runPage = require("../../run-page"); +const StoryLogicApp = require("./story-logic-app"); +runPage(StoryLogicApp); diff --git a/src/pages/story-logic-app/meta.json b/src/pages/story-logic-app/meta.json new file mode 100644 index 0000000..cfbb965 --- /dev/null +++ b/src/pages/story-logic-app/meta.json @@ -0,0 +1,20 @@ +{ + "title": "Kuadrado Software | Story Logic", + "description": "appli pour faire des jeux old school", + "image": "https://kuadrado-software.fr/assets/images/brain.png", + "open_graph": { + "title": "Kuadrado Software | Story Logic", + "description": "appli pour faire des jeux old school" + }, + "json_ld": { + "@context": "https://schema.org", + "type": "WebPage", + "description": "appli pour faire des jeux old school", + "image": [ + "https://kuadrado-software.fr/assets/images/brain.svg" + ], + "keywords": "", + "name": "Kuadrado Software - Story Logic", + "url": "https://kuadrado-software.fr/story-logic-app/" + } +} \ No newline at end of file diff --git a/src/pages/story-logic-app/story-logic-app.js b/src/pages/story-logic-app/story-logic-app.js new file mode 100644 index 0000000..e2c2c92 --- /dev/null +++ b/src/pages/story-logic-app/story-logic-app.js @@ -0,0 +1,19 @@ +"use strict"; + +// const { images_url } = require("../../../constants"); +const WebPage = require("../../lib/web-page"); + + +class StoryLogicApp extends WebPage { + render() { + return { + tag: "div", + id: "story-logic-app", + contents: [ + { tag: "strong", contents: "yup" } + ], + }; + } +} + +module.exports = StoryLogicApp; diff --git a/src/pages/story-logic-app/story-logic-app.scss b/src/pages/story-logic-app/story-logic-app.scss new file mode 100644 index 0000000..e69de29 -- GitLab