Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
software-development.js 11.4 KiB
Newer Older
peter_rabbit's avatar
peter_rabbit committed
(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){
peter_rabbit's avatar
peter_rabbit committed
module.exports = {
    server_url: `${location.origin}${
        location.origin.charAt(location.origin.length - 1) !== "/" ? "/" : ""
    }`,
    in_construction: true,
};
peter_rabbit's avatar
peter_rabbit committed

},{}],2:[function(require,module,exports){
const { server_url } = require("./config");

module.exports = {
    images_url: `${server_url}/assets/images`,
peter_rabbit's avatar
peter_rabbit committed
    news_articles_url: `${server_url}/news-articles`,
    game_articles_url: `${server_url}/game-articles`,
    software_articles_url: `${server_url}/software-articles`,
peter_rabbit's avatar
peter_rabbit committed
};

},{"./config":1}],3:[function(require,module,exports){
peter_rabbit's avatar
peter_rabbit committed
"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;
        }
    },
};

peter_rabbit's avatar
peter_rabbit committed
},{}],4:[function(require,module,exports){
peter_rabbit's avatar
peter_rabbit committed
"use strict";

peter_rabbit's avatar
peter_rabbit committed
const { images_url } = require("../../../constants");

peter_rabbit's avatar
peter_rabbit committed
class SoftwareDevelopment {
peter_rabbit's avatar
peter_rabbit committed
    constructor(args) {
        Object.assign(this, args);
    }

    render() {
        return {
peter_rabbit's avatar
peter_rabbit committed
            tag: "div",
peter_rabbit's avatar
peter_rabbit committed
            id: "software-page",
peter_rabbit's avatar
peter_rabbit committed
            contents: [
                {
peter_rabbit's avatar
peter_rabbit committed
                    tag: "div",
peter_rabbit's avatar
peter_rabbit committed
                    class: "page-header logo-left",
                    contents: [
                        {
                            tag: "div",
                            class: "page-contents-center grid-wrapper",
                            contents: [
                                {
                                    tag: "div",
                                    class: "logo",
                                    contents: [{ tag: "img", src: `${images_url}/meca_proc.svg` }],
                                },
                                { tag: "h1", contents: "Software" },
                                {
                                    tag: "p",
                                    contents: `Développement web et outillage autour du gamedev. 
                                    <br />Quand nous avons besoin d'un service logiciel simple et qu'il est pertinent de le 
                                    développer nous même nous essayons au maximum de le réaliser de façon générique et de le publier sous license libre et open source`,
                                },
                            ],
                        },
                    ],
peter_rabbit's avatar
peter_rabbit committed
module.exports = SoftwareDevelopment;
peter_rabbit's avatar
peter_rabbit committed

peter_rabbit's avatar
peter_rabbit committed
},{"../../../constants":2}],5:[function(require,module,exports){
peter_rabbit's avatar
peter_rabbit committed
"use strict";

"use strict";
const runPage = require("../../run-page");
peter_rabbit's avatar
peter_rabbit committed
const SoftwareDevelopment = require("./software-development");
runPage(SoftwareDevelopment);
peter_rabbit's avatar
peter_rabbit committed

peter_rabbit's avatar
peter_rabbit committed
},{"../../run-page":6,"./software-development":4}],6:[function(require,module,exports){
peter_rabbit's avatar
peter_rabbit committed
"use strict";

const objectHtmlRenderer = require("./lib/object-html-renderer");
peter_rabbit's avatar
peter_rabbit committed
const Template = require("./template/template");
peter_rabbit's avatar
peter_rabbit committed

module.exports = function runPage(PageComponent) {
peter_rabbit's avatar
peter_rabbit committed
    const template = new Template({ page: new PageComponent() });
    objectHtmlRenderer.setRenderCycleRoot(template);
peter_rabbit's avatar
peter_rabbit committed
    objectHtmlRenderer.renderCycle();
};

},{"./lib/object-html-renderer":3,"./template/template":8}],7:[function(require,module,exports){
peter_rabbit's avatar
peter_rabbit committed
"use strict";

const { images_url } = require("../../../constants");
peter_rabbit's avatar
peter_rabbit committed

peter_rabbit's avatar
peter_rabbit committed
const NAV_MENU_ITEMS = [
    ["/games/", "Jeux"],
    ["/software-development/", "Software"],
peter_rabbit's avatar
peter_rabbit committed
    [
        "/education/",
peter_rabbit's avatar
peter_rabbit committed
        "Pédagogie",
        [
            // submenu
            ["/education/#game-studio-club", "Game Studio Club"],
            ["/education/#popularization", "Vulgarisation numérique"],
peter_rabbit's avatar
peter_rabbit committed
        ],
    ],
];

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",
peter_rabbit's avatar
peter_rabbit committed
                        { tag: "img", src: `${images_url}/logo_kuadrado.svg` },
                        {
                            tag: "img",
                            class: "logo-text",
                            src: `${images_url}/logo_kuadrado_txt.svg`,
                        },
peter_rabbit's avatar
peter_rabbit committed
    renderMenu(menuItemsArray, isSubmenu = false) {
peter_rabbit's avatar
peter_rabbit committed
            tag: "ul",
            id: "nav-menu-list",
peter_rabbit's avatar
peter_rabbit committed
            class: isSubmenu ? "submenu" : "",
            contents: menuItemsArray.map(link => {
                const [href, text, submenu] = link;
peter_rabbit's avatar
peter_rabbit committed
                return {
                    tag: "li",
                    class: !isSubmenu && window.location.pathname === href ? "active" : "",
peter_rabbit's avatar
peter_rabbit committed
                    contents: [
                        {
                            tag: "a",
                            href,
peter_rabbit's avatar
peter_rabbit committed
                        },
                    ].concat(submenu ? [this.renderMenu(submenu, true)] : []),
peter_rabbit's avatar
peter_rabbit committed
                };
            }),
        };
    }

    renderResponsiveBurger() {
        return {
            tag: "div",
            class: "burger",
            onclick: this.handleBurgerClick.bind(this),
            contents: [{ tag: "span", contents: "···" }],
        };
peter_rabbit's avatar
peter_rabbit committed
    }

    render() {
        return {
            tag: "nav",
            contents: [
                this.renderHome(),
                this.renderResponsiveBurger(),
                this.renderMenu(NAV_MENU_ITEMS),
            ],
        };
    }
}

module.exports = NavBar;

},{"../../../constants":2}],8:[function(require,module,exports){
"use strict";

peter_rabbit's avatar
peter_rabbit committed
const { in_construction } = require("../../config");
peter_rabbit's avatar
peter_rabbit committed
const { images_url } = require("../../constants");
const NavBar = require("./components/navbar");

class Template {
    constructor(props) {
        this.props = props;
    }
peter_rabbit's avatar
peter_rabbit committed
    render() {
        return {
            tag: "main",
            contents: [
                {
                    tag: "header",
                    contents: [new NavBar().render()],
peter_rabbit's avatar
peter_rabbit committed
                },
peter_rabbit's avatar
peter_rabbit committed
                in_construction && {
                    tag: "section",
                    class: "warning-banner",
                    contents: [
                        {
                            tag: "strong",
                            class: "page-contents-center",
                            contents: "Site en construction ...",
                        },
                    ],
                },
peter_rabbit's avatar
peter_rabbit committed
                    tag: "section",
peter_rabbit's avatar
peter_rabbit committed
                    id: "page-container",
                    contents: [this.props.page.render()],
                },
                {
                    tag: "footer",
                    contents: [
peter_rabbit's avatar
peter_rabbit committed
                        {
                            tag: "div",
                            class: "logo",
                            contents: [
                                {
                                    tag: "img",
                                    src: `${images_url}/logo_kuadrado.svg`,
                                },
                                {
                                    tag: "img",
peter_rabbit's avatar
peter_rabbit committed
                                    class: "text-logo",
peter_rabbit's avatar
peter_rabbit committed
                                    src: `${images_url}/logo_kuadrado_txt.svg`,
                                },
                            ],
                        },
                        {
peter_rabbit's avatar
peter_rabbit committed
                            tag: "span",
                            contents:
                                "Toutes les images du site ont été réalisées par nos soins et peuvent être réutilisées pour un usage personnel.",
peter_rabbit's avatar
peter_rabbit committed
                        },
peter_rabbit's avatar
peter_rabbit committed
                        {
                            tag: "a",
peter_rabbit's avatar
peter_rabbit committed
                            href: "mailto:contact@kuadrado-software.fr",
                            contents: "contact@kuadrado-software.fr",
peter_rabbit's avatar
peter_rabbit committed
                        },
                    ],
                },
            ],
        };
    }
}

module.exports = Template;

peter_rabbit's avatar
peter_rabbit committed
},{"../../config":1,"../../constants":2,"./components/navbar":7}]},{},[5]);