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
main.js 8.42 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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
    const ENV = "dev";
    
    let server_url;
    
    switch (ENV) {
        case "dev":
    
    peter_rabbit's avatar
    peter_rabbit committed
            server_url = "http://localhost";
    
    peter_rabbit's avatar
    peter_rabbit committed
            break;
        case "prod":
            server_url = "http://your_production_server_url:port";
    }
    
    module.exports = { server_url };
    
    },{}],2:[function(require,module,exports){
    const { server_url } = require("./config");
    
    module.exports = {
        images_url: `${server_url}/assets/images`,
    };
    
    },{"./config":1}],3:[function(require,module,exports){
    
    peter_rabbit's avatar
    peter_rabbit committed
    "use strict";
    
    class HomePage {
        constructor(args) {
            Object.assign(this, args);
        }
    
        render() {
            return {
    
    peter_rabbit's avatar
    peter_rabbit committed
                tag: "div",
    
    peter_rabbit's avatar
    peter_rabbit committed
                contents: [
                    {
                        tag: "h1",
                        contents: "Kuadrado Software",
                    },
                ],
            };
        }
    }
    
    module.exports = HomePage;
    
    
    peter_rabbit's avatar
    peter_rabbit committed
    },{}],4:[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
    },{}],5:[function(require,module,exports){
    
    peter_rabbit's avatar
    peter_rabbit committed
    "use strict";
    
    const HomePage = require("./homepage");
    const runPage = require("./run-page");
    
    runPage(HomePage);
    
    
    peter_rabbit's avatar
    peter_rabbit committed
    },{"./homepage":3,"./run-page":6}],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":4,"./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 HOME_LOGO = "logo_kuadrado.svg";
    
    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",
    
                        contents: [
                            {
                                tag: "img",
                                src: `${images_url}/${HOME_LOGO}`,
                            },
                        ],
                    },
                ],
            };
    
    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";
    
    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
                    },
                    {
                        tag: "div",
                        id: "page-container",
                        contents: [this.props.page.render()],
                    },
                    {
                        tag: "footer",
                        contents: [
                            {
                                tag: "a",
                                href: "mailto:kuadrado-software@tutanota.com",
                                contents: "kuadrado-software@tutanota.com",
                            },
                        ],
                    },
                ],
            };
        }
    }
    
    module.exports = Template;
    
    
    },{"./components/navbar":7}]},{},[5]);