diff --git a/build.js b/build.js index 1e0c84dee36b9f54704a7eab10f6487f2945fe4a..4635aa02ed211a71a747b8bc2598cc31e16a2d5e 100644 --- a/build.js +++ b/build.js @@ -4,19 +4,38 @@ const fs = require("fs"); const browserify = require("browserify"); +const Uglify = require("uglify-js"); +const _dir = process.cwd(); const config = require("./config"); -const curDir = process.cwd(); const build_conf = config.build; +const build_minified = process.argv.includes("prod"); + +function build_bundle(input_path, output_path) { + if (build_minified) { + const bundle = browserify() + .add(input_path) + .bundle(); + let stream = ""; + bundle.on("data", chunk => stream += chunk); + bundle.on("end", () => { + const minified = Uglify.minify(stream); + const out = fs.createWriteStream(output_path); + out.write(minified.code); + }); + } else { + browserify() + .add(input_path) + .bundle() + .pipe(fs.createWriteStream(output_path)); + } +} // Handle home page -const b = browserify(); -b.add(`${curDir}/src/main.js`) - .bundle() - .pipe(fs.createWriteStream(`${curDir}/public/main.js`)); +build_bundle(`${_dir}/src/main.js`, `${_dir}/public/main.js`) // Handle subpages function getPageHtml(pageName, pageMeta) { - let html = fs.readFileSync(`${curDir}/public/index.html`, "utf-8"); + let html = fs.readFileSync(`${_dir}/public/index.html`, "utf-8"); const setMeta = function (metaName, value) { html = html.replace( html.match(new RegExp(`<meta\\s*name="${metaName}"[^>]+>`, "g"))[0], @@ -186,11 +205,7 @@ function createPages(rootdir, destdir) { fs.mkdirSync(targetDirPath); } - const b = browserify(); - - b.add(fPath) - .bundle() - .pipe(fs.createWriteStream(`${targetDirPath}/${p}.js`)); + build_bundle(fPath, `${targetDirPath}/${p}.js`); const page = fs.createWriteStream(`${targetDirPath}/index.html`); const pageMeta = JSON.parse(fs.readFileSync(`${fPath}/meta.json`, "utf-8")); @@ -219,4 +234,4 @@ function createPages(rootdir, destdir) { } } -createPages(`${curDir}/src/pages`, `${curDir}/public`); +createPages(`${_dir}/src/pages`, `${_dir}/public`); diff --git a/package-lock.json b/package-lock.json index e9126f795f324518bc8c4ec7215ba61fdaf361cd..e33ac692b82a78e7fe92bef77283694c91d2bdf5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,1907 @@ { "name": "kuadrado-website", "version": "1.0.3", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "JSONStream": { + "packages": { + "": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "object-to-html-renderer": "^1.0.0" + }, + "devDependencies": { + "browserify": "^17.0.0", + "sass": "^1.32.0", + "uglify-js": "^3.13.10" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", + "dev": true + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", + "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", + "dev": true, + "dependencies": { + "array-filter": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bn.js": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "node_modules/browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "dev": true, + "dependencies": { + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "JSONStream": "^1.0.3", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + }, + "bin": { + "browser-pack": "bin/cmd.js" + } + }, + "node_modules/browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dev": true, + "dependencies": { + "resolve": "^1.17.0" + } + }, + "node_modules/browserify": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-17.0.0.tgz", + "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", + "dev": true, + "dependencies": { + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^2.0.0", + "browserify-zlib": "~0.2.0", + "buffer": "~5.2.1", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.1", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^3.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.2.1", + "JSONStream": "^1.0.3", + "labeled-stream-splicer": "^2.0.0", + "mkdirp-classic": "^0.5.2", + "module-deps": "^6.2.3", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "^1.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum-object": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^3.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.12.0", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "node_modules/cached-path-relative": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", + "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", + "dev": true + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", + "dev": true, + "dependencies": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "node_modules/deps-sort": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", + "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", + "dev": true, + "dependencies": { + "JSONStream": "^1.0.3", + "shasum-object": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + }, + "bin": { + "deps-sort": "bin/cmd.js" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "dependencies": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "dev": true, + "dependencies": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.18.0-next.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", + "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.1", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.3", + "string.prototype.trimstart": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", + "dev": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", + "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "node_modules/get-intrinsic": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", + "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dev": true, + "dependencies": { + "source-map": "~0.5.3" + } + }, + "node_modules/insert-module-globals": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", + "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", + "dev": true, + "dependencies": { + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + }, + "bin": { + "insert-module-globals": "bin/cmd.js" + } + }, + "node_modules/is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz", + "integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.4.tgz", + "integrity": "sha512-ILaRgn4zaSrVNXNGtON6iFNotXW3hAPF3+0fB1usg2jFlWqo5fEDdmJkz0zBfoi7Dgskr8Khi2xZ8cXqZEfXNA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/labeled-stream-splicer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" + } + }, + "node_modules/lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/module-deps": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", + "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", + "dev": true, + "dependencies": { + "browser-resolve": "^2.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "JSONStream": "^1.0.3", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "module-deps": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-to-html-renderer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/object-to-html-renderer/-/object-to-html-renderer-1.0.0.tgz", + "integrity": "sha512-ZB+jYQ0cjH+I4YWx6UcifaOP26ZY/KEdIzYZc9h96L/hGWbBx/aSBSnR/rn30+Y/0SaR/JNfLZiBhKorJNJ7Rg==" + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true, + "dependencies": { + "path-platform": "~0.11.15" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.32.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.4.tgz", + "integrity": "sha512-N0BT0PI/t3+gD8jKa83zJJUb7ssfQnRRfqN+GIErokW6U4guBpfYl8qYB+OFLEho+QvnV5ZH1R9qhUC/Z2Ch9w==", + "dev": true, + "dependencies": { + "chokidar": ">=2.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shasum-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", + "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", + "dev": true, + "dependencies": { + "fast-safe-stringify": "^2.0.7" + } + }, + "node_modules/shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "dependencies": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-http": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.1.tgz", + "integrity": "sha512-S7OqaYu0EkFpgeGFb/NPOoPLxFko7TPqtEeFg5DXPB4v/KETHG0Ln6fRFrNezoelpaDKmycEmmZ81cC9DAwgYg==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "node_modules/subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "dependencies": { + "minimist": "^1.1.0" + } + }, + "node_modules/syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dev": true, + "dependencies": { + "acorn-node": "^1.2.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true, + "dependencies": { + "process": "~0.11.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/uglify-js": { + "version": "3.13.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", + "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==", + "dev": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", + "dev": true, + "bin": { + "umd": "bin/cli.js" + } + }, + "node_modules/undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + }, + "bin": { + "undeclared-identifiers": "bin.js" + } + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/util": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", + "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "node_modules/which-typed-array": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", + "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + } + }, + "dependencies": { "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", @@ -164,9 +2052,9 @@ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "combine-source-map": "~0.8.0", "defined": "^1.0.0", + "JSONStream": "^1.0.3", "safe-buffer": "^5.1.1", "through2": "^2.0.0", "umd": "^3.0.0" @@ -187,7 +2075,6 @@ "integrity": "sha512-SaHqzhku9v/j6XsQMRxPyBrSP3gnwmE27gLJYZgMT2GeK3J0+0toN+MnuNYDfHwVGQfLiMZ7KSNSIXHemy905w==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^2.0.0", @@ -209,6 +2096,7 @@ "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.2.1", + "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "mkdirp-classic": "^0.5.2", "module-deps": "^6.2.3", @@ -860,11 +2748,11 @@ "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "acorn-node": "^1.5.2", "combine-source-map": "^0.8.0", "concat-stream": "^1.6.1", "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", "path-is-absolute": "^1.0.1", "process": "~0.11.0", "through2": "^2.0.0", @@ -993,6 +2881,16 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, "labeled-stream-splicer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", @@ -1077,7 +2975,6 @@ "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "browser-resolve": "^2.0.0", "cached-path-relative": "^1.0.2", "concat-stream": "~1.6.0", @@ -1085,6 +2982,7 @@ "detective": "^5.2.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", + "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.4.0", @@ -1488,6 +3386,15 @@ "readable-stream": "^2.0.2" } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, "string.prototype.trimend": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", @@ -1508,15 +3415,6 @@ "define-properties": "^1.1.3" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, "subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", @@ -1581,6 +3479,12 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "uglify-js": { + "version": "3.13.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", + "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==", + "dev": true + }, "umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", diff --git a/package.json b/package.json index 8be3810b6859c054b3d4926debc19912c1746544..4f7800ff16e9d96e8918bef75ce14ea41f3c663b 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,9 @@ "main": "src/main.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "style": "sass --watch ./src:public/style", - "build": "node build.js" + "style": "sass --watch ./src/style.scss ./public/style/style.css --style=compressed", + "build": "node build.js", + "build-prod": "node build.js prod" }, "repository": "https://gitlab.com/peter_rabbit/kuadrado-website", "author": "Kuadrado", @@ -17,6 +18,7 @@ }, "devDependencies": { "browserify": "^17.0.0", - "sass": "^1.32.0" + "sass": "^1.32.0", + "uglify-js": "^3.13.10" } -} +} \ No newline at end of file diff --git a/public/education/education.js b/public/education/education.js index 9a7ac5221be5d8cd92a331e54e320d963753a5e4..bc6aad73cd867f79a12d4e956ed8641b050f080c 100644 --- a/public/education/education.js +++ b/public/education/education.js @@ -1,660 +1,11 @@ -(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, - 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"); - -const EDU_THEMES = [ - // { - // title: "Création de jeux vidéo", - // description: "Conception, graphisme et animation, programmation, je vous accompagne dans la découverte des techniques pour créer un jeu vidéo de A à Z", - // image: "learning_theme_conception.png", - // pageUrl: "gamedev", - // }, - { - title: "Programmation", - description: `<b>Franchissez le mur du code !</b><br /> - Apprenez à programmer avec différents langages (Python, Javascript, C ...), pour du web, du logiciel, du jeu vidéo ou autre.`, - image: "learning_theme_coding.png", - // pageUrl: "coding", - }, - { - title: "Dessin numérique et animation 2D", - description: `Apprenez à utiliser des logiciels libres de création graphique 2D et d'animation.<br /> - Créez des personnages et des décors, menez votre projet de dessin animé, d'illustration ou de jeu vidéo.`, - image: "learning_theme_2d.png", - // pageUrl: "2d", - }, - { - 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", - }, - // { - // title: "Musique et sons électroniques", - // description: "Découvrez des logiciels libres de composition musicales, de synthèse sonore et de prise de son.", - // image: "learning_theme_sound.png", - // pageUrl: "sound", - // }, - { - title: "Aide informatique générale", - 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/> +!function s(a,o,r){function i(t,e){if(!o[t]){if(!a[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(c)return c(t,!0);throw(n=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",n}n=o[t]={exports:{}},a[t][0].call(n.exports,function(e){return i(a[t][1][e]||e)},n,n.exports,s,a,o,r)}return o[t].exports}for(var c="function"==typeof require&&require,e=0;e<r.length;e++)i(r[e]);return i}({1:[function(e,t,n){t.exports={getServerUrl:function(){return`${location.origin}${"/"!==location.origin.charAt(location.origin.length-1)?"/":""}`},build:{protected_dirs:["assets","style","articles"],default_meta_keys:["title","description","image","open_graph","json_ld"]}}},{}],2:[function(e,t,n){const{getServerUrl:s}=e("./config");t.exports={images_url:`${s()}assets/images/`,articles_url:`${s()}articles/`}},{"./config":1}],3:[function(e,t,n){"use strict";t.exports={setRenderCycleRoot(e){this.renderCycleRoot=e},objectToHtml:function t(n){var{tag:e}=n;const s=document.createElement(e),a=["tag","contents","style_rules","state"];return Object.keys(n).filter(e=>!a.includes(e)).forEach(e=>{"class"===e?s.classList.add(...n[e].split(" ").filter(e=>""!==e)):s[e]=n[e]}),n.contents&&"string"==typeof n.contents?s.innerHTML=n.contents:n.contents&&0<n.contents.length&&n.contents.forEach(e=>{switch(typeof e){case"string":s.innerHTML=e;break;case"object":s.appendChild(t(e))}}),n.style_rules&&Object.keys(n.style_rules).forEach(e=>{s.style[e]=n.style_rules[e]}),s},renderCycle:function(){this.subRender(this.renderCycleRoot.render(),document.getElementsByTagName("main")[0],{mode:"replace"})},subRender(e,t,n={mode:"append"}){var s=this.objectToHtml(e);switch(n.mode){case"append":t.appendChild(s);break;case"override":t.innerHTML="",t.appendChild(s);break;case"insert-before":t.insertBefore(s,t.childNodes[n.insertIndex]);break;case"adjacent":t.insertAdjacentHTML(n.insertLocation,s);break;case"replace":t.parentNode.replaceChild(s,t);break;case"remove":t.remove()}}}},{}],4:[function(e,t,n){"use strict";t.exports=class{constructor(e){Object.assign(this,e)}}},{}],5:[function(e,t,n){"use strict";const{images_url:s}=e("../../../constants");e=e("../../lib/web-page");const a=[{title:"Programmation",description:`<b>Franchissez le mur du code !</b><br /> + Apprenez à programmer avec différents langages (Python, Javascript, C ...), pour du web, du logiciel, du jeu vidéo ou autre.`,image:"learning_theme_coding.png"},{title:"Dessin numérique et animation 2D",description:`Apprenez à utiliser des logiciels libres de création graphique 2D et d'animation.<br /> + Créez des personnages et des décors, menez votre projet de dessin animé, d'illustration ou de jeu vidéo.`,image:"learning_theme_2d.png"},{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"},{title:"Aide informatique générale",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"},{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" - } -]; - -class EducationPage extends WebPage { - render() { - return { - tag: "div", - id: "education-page", - typeof: "EducationalOrganization", - contents: [ - { - tag: "div", - class: "page-header logo-left", - contents: [ - { - tag: "div", - class: "page-contents-center grid-wrapper", - contents: [ - { - tag: "div", - class: "logo", - contents: [ - { - tag: "img", - alt: "image brain", - src: `${images_url}brain.svg`, - }, - ], - }, - { tag: "h1", contents: "Pédagogie" }, - { - tag: "p", - contents: `Animation d'ateliers informatiques accessibles à tous. - Programmation, graphisme 2D, jeux vidéo, vulgarisation, accompagnement de projet, etc.`, - }, - ], - }, - ], - }, - { - tag: "div", - class: "title-banner", - }, - { - tag: "section", - class: "bg-dark", - contents: [ - { - tag: "div", - class: "page-contents-center", - contents: [ - { - tag: "ul", - class: "edu-themes", - contents: EDU_THEMES.map(theme => { - return { - tag: "li", - class: "edu-theme", - contents: [ - { tag: "img", width: 250, height: 140, class: "pixelated", src: `${images_url}${theme.image}` }, - { tag: "h3", contents: theme.title }, - { tag: "p", contents: theme.description }, - ] - } - }) - }, - ] - }, - ] - }, - { - tag: "section", - class: "practical-info", - contents: [ - { - tag: "div", - class: "page-contents-center", - contents: [ - { - tag: "div", - class: "info-block", - contents: [ - { tag: "h3", class: "info-title", contents: "Pour qui ?" }, - { - tag: "p", - class: "info-body", - contents: `Les ateliers sont accessibles aux adultes comme aux enfants, plutôt à partir de 12 ans.<br/> + `,image:"learning_theme_linux.png"}];class o extends e{render(){return{tag:"div",id:"education-page",typeof:"EducationalOrganization",contents:[{tag:"div",class:"page-header logo-left",contents:[{tag:"div",class:"page-contents-center grid-wrapper",contents:[{tag:"div",class:"logo",contents:[{tag:"img",alt:"image brain",src:`${s}brain.svg`}]},{tag:"h1",contents:"Pédagogie"},{tag:"p",contents:`Animation d'ateliers informatiques accessibles à tous. + Programmation, graphisme 2D, jeux vidéo, vulgarisation, accompagnement de projet, etc.`}]}]},{tag:"div",class:"title-banner"},{tag:"section",class:"bg-dark",contents:[{tag:"div",class:"page-contents-center",contents:[{tag:"ul",class:"edu-themes",contents:a.map(e=>({tag:"li",class:"edu-theme",contents:[{tag:"img",width:250,height:140,class:"pixelated",src:`${s}${e.image}`},{tag:"h3",contents:e.title},{tag:"p",contents:e.description}]}))}]}]},{tag:"section",class:"practical-info",contents:[{tag:"div",class:"page-contents-center",contents:[{tag:"div",class:"info-block",contents:[{tag:"h3",class:"info-title",contents:"Pour qui ?"},{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. Capacité limitée à 5 personnes. - ` - } - ] - }, - { - tag: "div", - class: "info-block", - contents: [ - { tag: "h3", class: "info-title", contents: "Où ça ?" }, - { - tag: "p", - class: "info-body", - contents: "Dans mon local professionnel : <br /><blue>32 rue Simon Vialet, passage du Cheminou, 07240 Vernoux en Vivarais.</blue>" - } - ] - }, - { - tag: "div", - class: "info-block", - contents: [ - { tag: "h3", class: "info-title", contents: "Quel matériel ?" }, - { - tag: "p", - class: "info-body", - contents: `Le matériel informatique est fourni sur place (ordinateurs et tablettes graphique) + `}]},{tag:"div",class:"info-block",contents:[{tag:"h3",class:"info-title",contents:"Où ça ?"},{tag:"p",class:"info-body",contents:"Dans mon local professionnel : <br /><blue>32 rue Simon Vialet, passage du Cheminou, 07240 Vernoux en Vivarais.</blue>"}]},{tag:"div",class:"info-block",contents:[{tag:"h3",class:"info-title",contents:"Quel matériel ?"},{tag:"p",class:"info-body",contents:`Le matériel informatique est fourni sur place (ordinateurs et tablettes graphique) mais il est possible d'amener le sien. - <br />Il est recommandé d'apporter au moins une clé USB pour faire ses sauvegardes.` - } - ] - }, - { - tag: "div", - class: "info-block", - contents: [ - { tag: "h3", class: "info-title", contents: "Quand ?" }, - { - tag: "ul", - class: "info-body tabled", - contents: [ - { - tag: "li", - contents: [ - { tag: "span", contents: "Mardi" }, - { tag: "span", contents: "16h - 18h" }, - ] - }, - { - tag: "li", - contents: [ - { tag: "span", contents: "Mercredi" }, - { tag: "span", contents: "14h - 16h" }, - ] - }, - { - tag: "li", - contents: [ - { tag: "span", contents: "Jeudi" }, - { tag: "span", contents: "16h - 18h" }, - ] - }, - { - tag: "li", - class: "fullwidth", - contents: "<em><blue>Ouvert de Septembre à Juin, sauf vacances scolaires ou fermetures exceptionnelles</blue></em>" - } - ] - }, - ] - }, - { - tag: "div", - class: "info-block", - contents: [ - { tag: "h3", class: "info-title", contents: "Combien ça coûte ?" }, - { - tag: "ul", - class: "info-body tabled", - contents: [ - { - tag: "li", - contents: [ - { tag: "span", contents: "Inscription au mois" }, - { tag: "span", contents: "50€, accès à toutes les plages horaires." }, - ] - }, - { - tag: "li", - contents: [ - { tag: "span", contents: "Inscription à la séance" }, - { tag: "span", contents: "15€" }, - ] - }, - { - tag: "li", - contents: [ - { 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." }, - ] - } - ] - } - ] - }, - { - tag: "div", - class: "info-block", - contents: [ - { tag: "h3", class: "info-title", contents: "Pour s'inscrire ou en savoir plus" }, - { - tag: "ul", - class: "info-body", - contents: [ - { - tag: "li", - contents: [ - { tag: "span", contents: "Me contacter" }, - { - tag: "a", - href: "mailto:contact@kuadrado-software.fr", - contents: "contact@kuadrado-software.fr", - } - ] - }, - { - tag: "li", - contents: [ - { tag: "span", contents: "" }, - { - tag: "a", - href: "tel:+33475780872", - contents: "04 75 78 08 72", - property: "telephone", - }, - ] - }, - { - tag: "li", - contents: [ - { tag: "span", contents: "ou passer directement me voir au local !" } - ] - } - ] - } - ] - } - ] - } - ] - - }, - ], - }; - } -} - -module.exports = EducationPage; - -},{"../../../constants":2,"../../lib/web-page":4}],6:[function(require,module,exports){ -"use strict"; -const runPage = require("../../run-page"); -const EducationPage = require("./education"); -runPage(EducationPage); - -},{"../../run-page":7,"./education":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]); + <br />Il est recommandé d'apporter au moins une clé USB pour faire ses sauvegardes.`}]},{tag:"div",class:"info-block",contents:[{tag:"h3",class:"info-title",contents:"Quand ?"},{tag:"ul",class:"info-body tabled",contents:[{tag:"li",contents:[{tag:"span",contents:"Mardi"},{tag:"span",contents:"16h - 18h"}]},{tag:"li",contents:[{tag:"span",contents:"Mercredi"},{tag:"span",contents:"14h - 16h"}]},{tag:"li",contents:[{tag:"span",contents:"Jeudi"},{tag:"span",contents:"16h - 18h"}]},{tag:"li",class:"fullwidth",contents:"<em><blue>Ouvert de Septembre à Juin, sauf vacances scolaires ou fermetures exceptionnelles</blue></em>"}]}]},{tag:"div",class:"info-block",contents:[{tag:"h3",class:"info-title",contents:"Combien ça coûte ?"},{tag:"ul",class:"info-body tabled",contents:[{tag:"li",contents:[{tag:"span",contents:"Inscription au mois"},{tag:"span",contents:"50€, accès à toutes les plages horaires."}]},{tag:"li",contents:[{tag:"span",contents:"Inscription à la séance"},{tag:"span",contents:"15€"}]},{tag:"li",contents:[{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."}]}]}]},{tag:"div",class:"info-block",contents:[{tag:"h3",class:"info-title",contents:"Pour s'inscrire ou en savoir plus"},{tag:"ul",class:"info-body",contents:[{tag:"li",contents:[{tag:"span",contents:"Me contacter"},{tag:"a",href:"mailto:contact@kuadrado-software.fr",contents:"contact@kuadrado-software.fr"}]},{tag:"li",contents:[{tag:"span",contents:""},{tag:"a",href:"tel:+33475780872",contents:"04 75 78 08 72",property:"telephone"}]},{tag:"li",contents:[{tag:"span",contents:"ou passer directement me voir au local !"}]}]}]}]}]}]}}}t.exports=o},{"../../../constants":2,"../../lib/web-page":4}],6:[function(e,t,n){"use strict";const s=e("../../run-page");e=e("./education");s(e)},{"../../run-page":7,"./education":5}],7:[function(e,t,n){"use strict";const s=e("object-to-html-renderer"),a=e("./template/template");t.exports=function(e){e=new a({page:new e});s.setRenderCycleRoot(e),s.renderCycle()}},{"./template/template":9,"object-to-html-renderer":3}],8:[function(e,t,n){"use strict";const{images_url:s}=e("../../../constants"),a=[{url:"/games/",text:"Jeux"},{url:"/education/",text:"Pédagogie"},{url:"/software-development/",text:"Software"}];t.exports=class{constructor(){this.initEventHandlers()}handleBurgerClick(){document.getElementById("nav-menu-list").classList.toggle("responsive-show")}initEventHandlers(){window.addEventListener("click",e=>{"nav-menu-list"===e.target.id||e.target.classList.contains("burger")||e.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:`${s}logo_kuadrado.svg`},{tag:"img",alt:"Kuadrado Software",class:"logo-text",src:`${s}logo_kuadrado_txt.svg`}]}]}}renderMenu(e,o=!1,r=""){return{tag:"ul",id:"nav-menu-list",class:o?"submenu":"",contents:e.map(e=>{const{url:t,text:n,submenu:s}=e,a=`${r}${t}`;return{tag:"li",class:o||window.location.pathname!==a?"":"active",contents:[{tag:"a",href:a,contents:n}].concat(s?[this.renderMenu(s,!0,t)]:[])}})}}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(a)]}}}},{"../../../constants":2}],9:[function(e,t,n){"use strict";const{in_construction:s}=e("../../config"),{images_url:a}=e("../../constants"),o=e("./components/navbar");t.exports=class{constructor(e){this.props=e}render(){return{tag:"main",contents:[{tag:"header",contents:[(new o).render()]},s&&{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:`${a}logo_kuadrado.svg`},{tag:"img",class:"text-logo",alt:"Kuadrado Software",src:`${a}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.`}]}]}}}},{"../../config":1,"../../constants":2,"./components/navbar":8}]},{},[6]); \ No newline at end of file diff --git a/public/games/games.js b/public/games/games.js index 70c035645b1525ab7af82cb14c437b1a0588c79f..0d18235bc3ce0508537c80d774e7db3da3dcd7df 100644 --- a/public/games/games.js +++ b/public/games/games.js @@ -1,769 +1,3 @@ -(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, - 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"; - -const objectHtmlRenderer = require("object-to-html-renderer") - -class ImageCarousel { - constructor(props) { - this.props = props; - this.id = performance.now(); - this.state = { - showImageIndex: 0, - }; - this.RUN_INTERVAL = 5000; - this.props.images.length > 1 && this.run(); - } - - run() { - this.runningInterval = setInterval(() => { - let { showImageIndex } = this.state; - const { images } = this.props; - this.state.showImageIndex = showImageIndex < images.length - 1 ? ++showImageIndex : 0; - this.refreshImage(); - }, this.RUN_INTERVAL); - } - - setImageIndex(i) { - clearInterval(this.runningInterval); - this.state.showImageIndex = i; - this.refreshImage(); - } - - refreshImage() { - objectHtmlRenderer.subRender(this.render(), document.getElementById(this.id), { - mode: "replace", - }); - } - - render() { - const { showImageIndex } = this.state; - const { images } = this.props; - return { - tag: "div", - id: this.id, - class: "image-carousel", - contents: [ - { - tag: "img", - property: "image", - alt: `image carousel ${images[showImageIndex].replace(/\.[A-Za-z]+/, "")}`, - src: images[showImageIndex], - }, - images.length > 1 && { - tag: "div", - class: "carousel-bullets", - contents: images.map((_, i) => { - const active = showImageIndex === i; - return { - tag: "span", - class: `bullet ${active ? "active" : ""}`, - onclick: this.setImageIndex.bind(this, i), - }; - }), - }, - ], - }; - } -} - -module.exports = ImageCarousel; - -},{"object-to-html-renderer":3}],5:[function(require,module,exports){ -"use strict"; - -const { fetchjson, fetchtext } = require("./fetch"); - -function getArticleBody(text) { - return text.replaceAll("\n", "<br/>"); -} - -function getArticleDate(date) { - return `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`; -} - -function loadArticles(dir_url) { - return new Promise((resolve, reject) => { - fetchjson(`${dir_url}/index.json`) - .then(json => { - Promise.all( - 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 }); - }) - ) - .then(articles => { - populateArticles(articles) - .then(completeArticles => resolve(completeArticles)) - .catch(e => reject(e)); - }) - .catch(e => reject(e)); - }) - .catch(e => console.log(e)); - }); -} - -function populateArticles(articles) { - return new Promise((resolve, reject) => { - Promise.all( - articles.map(async article => { - if (article.body.indexOf("<file>") !== -1) { - const txtPath = article.body.replace("<file>", ""); - const textValue = await fetchtext(`${article.path}/${txtPath}`); - article.body = textValue; - article.date = article.date ? new Date(article.date) : undefined; - } - return article; - }) - ) - .then(completeArticles => resolve(completeArticles.sort((a, b) => a.date - b.date))) - .catch(e => reject(e)); - }); -} - -module.exports = { - loadArticles, - getArticleBody, - getArticleDate, - populateArticles, -}; - -},{"./fetch":6}],6:[function(require,module,exports){ -"use strict"; - -function fetchjson(url) { - return new Promise((resolve, reject) => { - fetch(url) - .then(r => r.json()) - .then(r => resolve(r)) - .catch(e => reject(e)); - }); -} - -function fetchtext(url) { - return new Promise((resolve, reject) => { - fetch(url) - .then(r => r.text()) - .then(r => resolve(r)) - .catch(e => reject(e)); - }); -} - -module.exports = { - fetchjson, - fetchtext, -}; - -},{}],7:[function(require,module,exports){ -"use strict"; - -class WebPage { - constructor(args) { - Object.assign(this, args); - } -} - -module.exports = WebPage; -},{}],8:[function(require,module,exports){ -"use strict"; - -const ImageCarousel = require("../../../generic-components/image-carousel"); -const { getArticleBody } = require("../../../lib/article-utils"); - -class TeamMember { - constructor(props) { - this.props = props; - } - - render() { - const { title, subtitle, body, images, path } = this.props; - return { - tag: "div", - class: "team-member", - typeof: "Person", - property: "author", - contents: [ - { - tag: "div", - class: "team-member-img", - contents: [ - { - tag: "img", - alt: `ìmage team member ${title}`, - src: images.map(im => `${path}/images/${im}`)[0], - property: "image", - }, - ], - }, - { - tag: "h3", - class: "team-member-title", - contents: title, - property: "name", - }, - { - tag: "strong", - class: "team-member-subtitle", - contents: subtitle, - property: "jobTitle", - }, - { - tag: "p", - class: "team-member-body", - contents: getArticleBody(body), - property: "description", - }, - ], - }; - } -} - -class GameArticle { - constructor(props) { - this.props = props; - } - - render() { - const { - title, - tags, - body, - subtitle, - images, - path, - team_subarticles, - image_banner, - } = this.props; - return { - tag: "article", - typeof: "VideoGame", - additionalType: "Article", - class: "game-article", - contents: [ - { - tag: "h2", - property: "name", - class: "game-title", - contents: title, - }, - { - tag: "div", - class: "game-banner", - contents: [ - { tag: "img", class: "pixelated", src: `${path}/images/${image_banner}` }, - ], - }, - { - tag: "div", - class: "game-tags", - contents: tags.map(tag => { - return { tag: "span", contents: tag, property: "about" }; - }), - }, - { - tag: "h3", - class: "game-subtitle", - contents: subtitle, - property: "alternativeHeadline", - }, - { - tag: "div", - class: "game-description", - property: "description", - contents: getArticleBody(body), - }, - new ImageCarousel({ images: images.map(img => `${path}/images/${img}`) }).render(), - { - tag: "div", - class: "game-team", - contents: [ - { - tag: "h2", - contents: "L'équipe", - }, - { - tag: "div", - class: "team-members", - contents: team_subarticles.map(tsa => - new TeamMember({ ...tsa }).render() - ), - }, - ], - }, - ], - }; - } -} - -module.exports = GameArticle; - -},{"../../../generic-components/image-carousel":4,"../../../lib/article-utils":5}],9:[function(require,module,exports){ -"use strict"; - -const { articles_url } = require("../../../../constants"); -const { loadArticles, populateArticles } = require("../../../lib/article-utils"); -const objectHtmlRenderer = require("object-to-html-renderer") -const GameArticle = require("./game-article"); - -class GameArticles { - constructor(props) { - this.props = props; - this.state = { - articles: [], - }; - this.id = performance.now(); - this.loadArticles(); - } - - loadArticles() { - loadArticles(`${articles_url}games`) - .then(articles => { - Promise.all( - articles.map(async a => { - if (a.team_subarticles) { - a.team_subarticles = await populateArticles( - a.team_subarticles.map(sa => Object.assign(sa, { path: a.path })) - ); - } - return a; - }) - ).then(completeArticles => { - this.state.articles = completeArticles; - this.refresh(); - }); - }) - .catch(e => console.log(e)); - } - - renderPlaceholder() { - return { - tag: "article", - class: "placeholder", - contents: [{ tag: "div" }, { tag: "div" }], - }; - } - - refresh() { - objectHtmlRenderer.subRender(this.render(), document.getElementById(this.id), { - mode: "replace", - }); - } - - render() { - const { articles } = this.state; - return { - tag: "section", - class: "game-articles page-contents-center", - id: this.id, - contents: - articles.length > 0 - ? articles.map(article => new GameArticle({ ...article }).render()) - : [this.renderPlaceholder()], - }; - } -} - -module.exports = GameArticles; - -},{"../../../../constants":2,"../../../lib/article-utils":5,"./game-article":8,"object-to-html-renderer":3}],10:[function(require,module,exports){ -"use strict"; - -const { images_url } = require("../../../constants"); -const WebPage = require("../../lib/web-page"); -const GameArticles = require("./components/game-articles"); - -class GamesPage extends WebPage { - render() { - return { - tag: "div", - id: "games-page", - contents: [ - { - tag: "div", - class: "page-header logo-left", - contents: [ - { - tag: "div", - class: "page-contents-center grid-wrapper", - contents: [ - { - tag: "div", - class: "logo", - contents: [ - { - tag: "img", - alt: "image game controller", - src: `${images_url}game_controller.svg`, - }, - ], - }, - { tag: "h1", contents: "Jeux" }, - { - tag: "p", - contents: `Création de jeux vidéos indépendants. - <br/>Jeux web, PC et projets en cours de développement`, - }, - ], - }, - ], - }, - new GameArticles().render(), - ], - }; - } -} - -module.exports = GamesPage; - -},{"../../../constants":2,"../../lib/web-page":7,"./components/game-articles":9}],11:[function(require,module,exports){ -"use strict"; - -"use strict"; -const runPage = require("../../run-page"); -const GamesPage = require("./games"); -runPage(GamesPage); - -},{"../../run-page":12,"./games":10}],12:[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":14,"object-to-html-renderer":3}],13:[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}],14:[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":13}]},{},[11]); +!function n(r,a,o){function c(t,e){if(!a[t]){if(!r[t]){var s="function"==typeof require&&require;if(!e&&s)return s(t,!0);if(i)return i(t,!0);throw(s=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",s}s=a[t]={exports:{}},r[t][0].call(s.exports,function(e){return c(r[t][1][e]||e)},s,s.exports,n,r,a,o)}return a[t].exports}for(var i="function"==typeof require&&require,e=0;e<o.length;e++)c(o[e]);return c}({1:[function(e,t,s){t.exports={getServerUrl:function(){return`${location.origin}${"/"!==location.origin.charAt(location.origin.length-1)?"/":""}`},build:{protected_dirs:["assets","style","articles"],default_meta_keys:["title","description","image","open_graph","json_ld"]}}},{}],2:[function(e,t,s){const{getServerUrl:n}=e("./config");t.exports={images_url:`${n()}assets/images/`,articles_url:`${n()}articles/`}},{"./config":1}],3:[function(e,t,s){"use strict";t.exports={setRenderCycleRoot(e){this.renderCycleRoot=e},objectToHtml:function t(s){var{tag:e}=s;const n=document.createElement(e),r=["tag","contents","style_rules","state"];return Object.keys(s).filter(e=>!r.includes(e)).forEach(e=>{"class"===e?n.classList.add(...s[e].split(" ").filter(e=>""!==e)):n[e]=s[e]}),s.contents&&"string"==typeof s.contents?n.innerHTML=s.contents:s.contents&&0<s.contents.length&&s.contents.forEach(e=>{switch(typeof e){case"string":n.innerHTML=e;break;case"object":n.appendChild(t(e))}}),s.style_rules&&Object.keys(s.style_rules).forEach(e=>{n.style[e]=s.style_rules[e]}),n},renderCycle:function(){this.subRender(this.renderCycleRoot.render(),document.getElementsByTagName("main")[0],{mode:"replace"})},subRender(e,t,s={mode:"append"}){var n=this.objectToHtml(e);switch(s.mode){case"append":t.appendChild(n);break;case"override":t.innerHTML="",t.appendChild(n);break;case"insert-before":t.insertBefore(n,t.childNodes[s.insertIndex]);break;case"adjacent":t.insertAdjacentHTML(s.insertLocation,n);break;case"replace":t.parentNode.replaceChild(n,t);break;case"remove":t.remove()}}}},{}],4:[function(e,t,s){"use strict";const n=e("object-to-html-renderer");t.exports=class{constructor(e){this.props=e,this.id=performance.now(),this.state={showImageIndex:0},this.RUN_INTERVAL=5e3,1<this.props.images.length&&this.run()}run(){this.runningInterval=setInterval(()=>{var{showImageIndex:e}=this.state,{images:t}=this.props;this.state.showImageIndex=e<t.length-1?++e:0,this.refreshImage()},this.RUN_INTERVAL)}setImageIndex(e){clearInterval(this.runningInterval),this.state.showImageIndex=e,this.refreshImage()}refreshImage(){n.subRender(this.render(),document.getElementById(this.id),{mode:"replace"})}render(){const{showImageIndex:s}=this.state,{images:e}=this.props;return{tag:"div",id:this.id,class:"image-carousel",contents:[{tag:"img",property:"image",alt:`image carousel ${e[s].replace(/\.[A-Za-z]+/,"")}`,src:e[s]},1<e.length&&{tag:"div",class:"carousel-bullets",contents:e.map((e,t)=>{return{tag:"span",class:`bullet ${s===t?"active":""}`,onclick:this.setImageIndex.bind(this,t)}})}]}}}},{"object-to-html-renderer":3}],5:[function(e,t,s){"use strict";const{fetchjson:a,fetchtext:n}=e("./fetch");function o(e){return new Promise((t,s)=>{Promise.all(e.map(async e=>{var t;return-1!==e.body.indexOf("<file>")&&(t=e.body.replace("<file>",""),t=await n(`${e.path}/${t}`),e.body=t,e.date=e.date?new Date(e.date):void 0),e})).then(e=>t(e.sort((e,t)=>e.date-t.date))).catch(e=>s(e))})}t.exports={loadArticles:function(r){return new Promise((t,s)=>{a(`${r}/index.json`).then(e=>{Promise.all(e.articles.map(async e=>{const t=`${e}/${e}.json`;var s=await a(`${r}/${t}`);const n=t.split("/");n.pop();e=`${r}/${n.join("/")}`;return Object.assign(s,{path:e})})).then(e=>{o(e).then(e=>t(e)).catch(e=>s(e))}).catch(e=>s(e))}).catch(e=>console.log(e))})},getArticleBody:function(e){return e.replaceAll("\n","<br/>")},getArticleDate:function(e){return`${e.getDate()}-${e.getMonth()+1}-${e.getFullYear()}`},populateArticles:o}},{"./fetch":6}],6:[function(e,t,s){"use strict";t.exports={fetchjson:function(e){return new Promise((t,s)=>{fetch(e).then(e=>e.json()).then(e=>t(e)).catch(e=>s(e))})},fetchtext:function(e){return new Promise((t,s)=>{fetch(e).then(e=>e.text()).then(e=>t(e)).catch(e=>s(e))})}}},{}],7:[function(e,t,s){"use strict";t.exports=class{constructor(e){Object.assign(this,e)}}},{}],8:[function(e,t,s){"use strict";const i=e("../../../generic-components/image-carousel"),{getArticleBody:l}=e("../../../lib/article-utils");class g{constructor(e){this.props=e}render(){const{title:e,subtitle:t,body:s,images:n,path:r}=this.props;return{tag:"div",class:"team-member",typeof:"Person",property:"author",contents:[{tag:"div",class:"team-member-img",contents:[{tag:"img",alt:`ìmage team member ${e}`,src:n.map(e=>`${r}/images/${e}`)[0],property:"image"}]},{tag:"h3",class:"team-member-title",contents:e,property:"name"},{tag:"strong",class:"team-member-subtitle",contents:t,property:"jobTitle"},{tag:"p",class:"team-member-body",contents:l(s),property:"description"}]}}}t.exports=class{constructor(e){this.props=e}render(){const{title:e,tags:t,body:s,subtitle:n,images:r,path:a,team_subarticles:o,image_banner:c}=this.props;return{tag:"article",typeof:"VideoGame",additionalType:"Article",class:"game-article",contents:[{tag:"h2",property:"name",class:"game-title",contents:e},{tag:"div",class:"game-banner",contents:[{tag:"img",class:"pixelated",src:`${a}/images/${c}`}]},{tag:"div",class:"game-tags",contents:t.map(e=>({tag:"span",contents:e,property:"about"}))},{tag:"h3",class:"game-subtitle",contents:n,property:"alternativeHeadline"},{tag:"div",class:"game-description",property:"description",contents:l(s)},new i({images:r.map(e=>`${a}/images/${e}`)}).render(),{tag:"div",class:"game-team",contents:[{tag:"h2",contents:"L'équipe"},{tag:"div",class:"team-members",contents:o.map(e=>new g({...e}).render())}]}]}}}},{"../../../generic-components/image-carousel":4,"../../../lib/article-utils":5}],9:[function(e,t,s){"use strict";const{articles_url:n}=e("../../../../constants"),{loadArticles:r,populateArticles:a}=e("../../../lib/article-utils"),o=e("object-to-html-renderer"),c=e("./game-article");t.exports=class{constructor(e){this.props=e,this.state={articles:[]},this.id=performance.now(),this.loadArticles()}loadArticles(){r(`${n}games`).then(e=>{Promise.all(e.map(async t=>(t.team_subarticles&&(t.team_subarticles=await a(t.team_subarticles.map(e=>Object.assign(e,{path:t.path})))),t))).then(e=>{this.state.articles=e,this.refresh()})}).catch(e=>console.log(e))}renderPlaceholder(){return{tag:"article",class:"placeholder",contents:[{tag:"div"},{tag:"div"}]}}refresh(){o.subRender(this.render(),document.getElementById(this.id),{mode:"replace"})}render(){const{articles:e}=this.state;return{tag:"section",class:"game-articles page-contents-center",id:this.id,contents:0<e.length?e.map(e=>new c({...e}).render()):[this.renderPlaceholder()]}}}},{"../../../../constants":2,"../../../lib/article-utils":5,"./game-article":8,"object-to-html-renderer":3}],10:[function(e,t,s){"use strict";const{images_url:n}=e("../../../constants");var r=e("../../lib/web-page");const a=e("./components/game-articles");class o extends r{render(){return{tag:"div",id:"games-page",contents:[{tag:"div",class:"page-header logo-left",contents:[{tag:"div",class:"page-contents-center grid-wrapper",contents:[{tag:"div",class:"logo",contents:[{tag:"img",alt:"image game controller",src:`${n}game_controller.svg`}]},{tag:"h1",contents:"Jeux"},{tag:"p",contents:`Création de jeux vidéos indépendants. + <br/>Jeux web, PC et projets en cours de développement`}]}]},(new a).render()]}}}t.exports=o},{"../../../constants":2,"../../lib/web-page":7,"./components/game-articles":9}],11:[function(e,t,s){"use strict";const n=e("../../run-page");e=e("./games");n(e)},{"../../run-page":12,"./games":10}],12:[function(e,t,s){"use strict";const n=e("object-to-html-renderer"),r=e("./template/template");t.exports=function(e){e=new r({page:new e});n.setRenderCycleRoot(e),n.renderCycle()}},{"./template/template":14,"object-to-html-renderer":3}],13:[function(e,t,s){"use strict";const{images_url:n}=e("../../../constants"),r=[{url:"/games/",text:"Jeux"},{url:"/education/",text:"Pédagogie"},{url:"/software-development/",text:"Software"}];t.exports=class{constructor(){this.initEventHandlers()}handleBurgerClick(){document.getElementById("nav-menu-list").classList.toggle("responsive-show")}initEventHandlers(){window.addEventListener("click",e=>{"nav-menu-list"===e.target.id||e.target.classList.contains("burger")||e.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:`${n}logo_kuadrado.svg`},{tag:"img",alt:"Kuadrado Software",class:"logo-text",src:`${n}logo_kuadrado_txt.svg`}]}]}}renderMenu(e,a=!1,o=""){return{tag:"ul",id:"nav-menu-list",class:a?"submenu":"",contents:e.map(e=>{const{url:t,text:s,submenu:n}=e,r=`${o}${t}`;return{tag:"li",class:a||window.location.pathname!==r?"":"active",contents:[{tag:"a",href:r,contents:s}].concat(n?[this.renderMenu(n,!0,t)]:[])}})}}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(r)]}}}},{"../../../constants":2}],14:[function(e,t,s){"use strict";const{in_construction:n}=e("../../config"),{images_url:r}=e("../../constants"),a=e("./components/navbar");t.exports=class{constructor(e){this.props=e}render(){return{tag:"main",contents:[{tag:"header",contents:[(new a).render()]},n&&{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:`${r}logo_kuadrado.svg`},{tag:"img",class:"text-logo",alt:"Kuadrado Software",src:`${r}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.`}]}]}}}},{"../../config":1,"../../constants":2,"./components/navbar":13}]},{},[11]); \ No newline at end of file diff --git a/public/main.js b/public/main.js index 9df16af29673b91b0374f1faac1960149033fde7..82098e2b804afb1d1fa2d65807e4d06282780699 100644 --- a/public/main.js +++ b/public/main.js @@ -1,501 +1,10 @@ -(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, - 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"; - -const objectHtmlRenderer = require("object-to-html-renderer") - -class ImageCarousel { - constructor(props) { - this.props = props; - this.id = performance.now(); - this.state = { - showImageIndex: 0, - }; - this.RUN_INTERVAL = 5000; - this.props.images.length > 1 && this.run(); - } - - run() { - this.runningInterval = setInterval(() => { - let { showImageIndex } = this.state; - const { images } = this.props; - this.state.showImageIndex = showImageIndex < images.length - 1 ? ++showImageIndex : 0; - this.refreshImage(); - }, this.RUN_INTERVAL); - } - - setImageIndex(i) { - clearInterval(this.runningInterval); - this.state.showImageIndex = i; - this.refreshImage(); - } - - refreshImage() { - objectHtmlRenderer.subRender(this.render(), document.getElementById(this.id), { - mode: "replace", - }); - } - - render() { - const { showImageIndex } = this.state; - const { images } = this.props; - return { - tag: "div", - id: this.id, - class: "image-carousel", - contents: [ - { - tag: "img", - property: "image", - alt: `image carousel ${images[showImageIndex].replace(/\.[A-Za-z]+/, "")}`, - src: images[showImageIndex], - }, - images.length > 1 && { - tag: "div", - class: "carousel-bullets", - contents: images.map((_, i) => { - const active = showImageIndex === i; - return { - tag: "span", - class: `bullet ${active ? "active" : ""}`, - onclick: this.setImageIndex.bind(this, i), - }; - }), - }, - ], - }; - } -} - -module.exports = ImageCarousel; - -},{"object-to-html-renderer":3}],5:[function(require,module,exports){ -"use strict"; - -class KuadradoValues { - render() { - return { - tag: "section", - class: "kuadrado-values", - contents: [ - { - tag: "div", - class: "page-contents-center", - contents: [ - { - tag: "h2", - contents: "<blue>Éthique</blue>", - }, - { - tag: "ul", - class: "values-list", - contents: [ - [ - "<emoji>📖</emoji> <blue>Partage des connaissances</blue>", - `Pour sortir de l'élitisme de l'ingénierie, pour sortir de la domination par l'obscurantisme et de la consommation aveugle, - pour aller plus loin ensemble, le partage du savoir est fondamental.`, - ], - [ - "<emoji>💻</emoji> <blue>Logiciels libres et open source</blue>", - `Toutes mes productions numériques, jeux vidéo, web, software, sont +!function n(r,a,o){function i(t,e){if(!a[t]){if(!r[t]){var s="function"==typeof require&&require;if(!e&&s)return s(t,!0);if(c)return c(t,!0);throw(s=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",s}s=a[t]={exports:{}},r[t][0].call(s.exports,function(e){return i(r[t][1][e]||e)},s,s.exports,n,r,a,o)}return a[t].exports}for(var c="function"==typeof require&&require,e=0;e<o.length;e++)i(o[e]);return i}({1:[function(e,t,s){t.exports={getServerUrl:function(){return`${location.origin}${"/"!==location.origin.charAt(location.origin.length-1)?"/":""}`},build:{protected_dirs:["assets","style","articles"],default_meta_keys:["title","description","image","open_graph","json_ld"]}}},{}],2:[function(e,t,s){const{getServerUrl:n}=e("./config");t.exports={images_url:`${n()}assets/images/`,articles_url:`${n()}articles/`}},{"./config":1}],3:[function(e,t,s){"use strict";t.exports={setRenderCycleRoot(e){this.renderCycleRoot=e},objectToHtml:function t(s){var{tag:e}=s;const n=document.createElement(e),r=["tag","contents","style_rules","state"];return Object.keys(s).filter(e=>!r.includes(e)).forEach(e=>{"class"===e?n.classList.add(...s[e].split(" ").filter(e=>""!==e)):n[e]=s[e]}),s.contents&&"string"==typeof s.contents?n.innerHTML=s.contents:s.contents&&0<s.contents.length&&s.contents.forEach(e=>{switch(typeof e){case"string":n.innerHTML=e;break;case"object":n.appendChild(t(e))}}),s.style_rules&&Object.keys(s.style_rules).forEach(e=>{n.style[e]=s.style_rules[e]}),n},renderCycle:function(){this.subRender(this.renderCycleRoot.render(),document.getElementsByTagName("main")[0],{mode:"replace"})},subRender(e,t,s={mode:"append"}){var n=this.objectToHtml(e);switch(s.mode){case"append":t.appendChild(n);break;case"override":t.innerHTML="",t.appendChild(n);break;case"insert-before":t.insertBefore(n,t.childNodes[s.insertIndex]);break;case"adjacent":t.insertAdjacentHTML(s.insertLocation,n);break;case"replace":t.parentNode.replaceChild(n,t);break;case"remove":t.remove()}}}},{}],4:[function(e,t,s){"use strict";const n=e("object-to-html-renderer");t.exports=class{constructor(e){this.props=e,this.id=performance.now(),this.state={showImageIndex:0},this.RUN_INTERVAL=5e3,1<this.props.images.length&&this.run()}run(){this.runningInterval=setInterval(()=>{var{showImageIndex:e}=this.state,{images:t}=this.props;this.state.showImageIndex=e<t.length-1?++e:0,this.refreshImage()},this.RUN_INTERVAL)}setImageIndex(e){clearInterval(this.runningInterval),this.state.showImageIndex=e,this.refreshImage()}refreshImage(){n.subRender(this.render(),document.getElementById(this.id),{mode:"replace"})}render(){const{showImageIndex:s}=this.state,{images:e}=this.props;return{tag:"div",id:this.id,class:"image-carousel",contents:[{tag:"img",property:"image",alt:`image carousel ${e[s].replace(/\.[A-Za-z]+/,"")}`,src:e[s]},1<e.length&&{tag:"div",class:"carousel-bullets",contents:e.map((e,t)=>{return{tag:"span",class:`bullet ${s===t?"active":""}`,onclick:this.setImageIndex.bind(this,t)}})}]}}}},{"object-to-html-renderer":3}],5:[function(e,t,s){"use strict";t.exports=class{render(){return{tag:"section",class:"kuadrado-values",contents:[{tag:"div",class:"page-contents-center",contents:[{tag:"h2",contents:"<blue>Éthique</blue>"},{tag:"ul",class:"values-list",contents:[["<emoji>📖</emoji> <blue>Partage des connaissances</blue>",`Pour sortir de l'élitisme de l'ingénierie, pour sortir de la domination par l'obscurantisme et de la consommation aveugle, + pour aller plus loin ensemble, le partage du savoir est fondamental.`],["<emoji>💻</emoji> <blue>Logiciels libres et open source</blue>",`Toutes mes productions numériques, jeux vidéo, web, software, sont <b><a href="https://fr.wikipedia.org/wiki/Logiciel_libre" target="_blank">libres et open source</a></b>. - <br/> ainsi que les outils engagés dans leur fabrication.`, - ], - [ - "<emoji>🌿</emoji> <blue>Écologie</blue>", - `Nous vivons une époque ou l'utilisation de la technologie connaît une croissance exponentielle notament + <br/> ainsi que les outils engagés dans leur fabrication.`],["<emoji>🌿</emoji> <blue>Écologie</blue>",`Nous vivons une époque ou l'utilisation de la technologie connaît une croissance exponentielle notament à travers internet. <br/>Il est primordial de construire le numérique dans une direction de légèreté et d'économie de - ressources.`, - ], - ].map(v => { - const [title, body] = v; - return { - tag: "li", - contents: [ - { tag: "h3", contents: title }, - { tag: "p", contents: body }, - ], - }; - }), - }, - ], - }, - ], - }; - } -} - -module.exports = KuadradoValues; - -},{}],6:[function(require,module,exports){ -"use strict"; - -const { articles_url } = require("../../constants"); -const objectHtmlRenderer = require("object-to-html-renderer"); -const ImageCarousel = require("../generic-components/image-carousel"); -const { loadArticles, getArticleDate, getArticleBody } = require("../lib/article-utils"); - -class NewsArticles { - constructor() { - this.id = performance.now().toString(); - this.state = { - loading: true, - articles: [], - showArticleIndex: -1, - }; - this.loadArticles(); - } - - loadArticles() { - loadArticles(`${articles_url}news`).then(articles => { - this.state.articles = articles; - this.state.showArticleIndex = this.state.articles.length - 1; - this.refresh(); - }); - } - - refresh() { - objectHtmlRenderer.subRender(this.render(), document.getElementById(this.id), { - mode: "replace", - }); - } - - renderArticle(articleData) { - return { - tag: "article", - class: `${articleData.images ? "grid-2" : "grid-1"}`, - typeof: "Article", - contents: [ - { - tag: "div", - class: "date", - contents: [ - { - tag: "time", - property: "datePublished", - contents: getArticleDate(articleData.date), - }, - ], - }, - { - tag: "div", - class: "title", - contents: [ - { - tag: "h3", - contents: articleData.title, - property: "headline", - }, - ], - }, - { - tag: "div", - class: "subtitle", - contents: [ - { - tag: "strong", - contents: articleData.subtitle, - property: "alternativeHeadline", - }, - ], - }, - { - tag: "div", - class: "body", - contents: [ - { - tag: "p", - contents: getArticleBody(articleData.body), - property: "articleBody", - }, - ], - }, - articleData.images && - new ImageCarousel({ - images: articleData.images.map(img => `${articleData.path}/images/${img}`), - }).render(), - ], - }; - } - - renderArticlePlaceholder() { - return { - tag: "article", - class: "article-placeholder", - contents: [ - { tag: "div", class: "date" }, - { tag: "div", class: "title" }, - { tag: "div", class: "subtitle" }, - { tag: "div", class: "body" }, - { tag: "div", class: "image-carousel" }, - ], - }; - } - - handleChangeArticle(dir) { - let { showArticleIndex, articles } = this.state; - showArticleIndex = - dir === "prev" - ? showArticleIndex - 1 >= 0 - ? showArticleIndex - 1 - : 0 - : showArticleIndex + 1 <= articles.length - 1 - ? showArticleIndex + 1 - : articles.length - 1; - this.state.showArticleIndex = showArticleIndex; - this.refresh(); - } - - render() { - const { articles, showArticleIndex } = this.state, - showNext = showArticleIndex < articles.length - 1, - showPrev = showArticleIndex > 0; - return { - tag: "div", - id: this.id, - class: "articles-displayer page-contents-center", - contents: - articles.length > 0 - ? [ - this.renderArticle(articles[showArticleIndex]), - { - tag: "div", - class: "prev-next-buttons", - contents: [ - { - tag: "button", - class: `prev-btn ${!showPrev ? "disabled" : "active"}`, - contents: "Précédent", - onclick: this.handleChangeArticle.bind(this, "prev"), - }, - { - tag: "button", - class: `next-btn ${!showNext ? "disabled" : "active"}`, - contents: "Suivant", - onclick: this.handleChangeArticle.bind(this, "next"), - }, - ], - }, - ] - : [this.renderArticlePlaceholder()], - }; - } -} - -module.exports = NewsArticles; - -},{"../../constants":2,"../generic-components/image-carousel":4,"../lib/article-utils":10,"object-to-html-renderer":3}],7:[function(require,module,exports){ -"use strict"; - -const { images_url } = require("../../constants"); - -class ThemeCard { - constructor(props) { - this.props = props; - } - - render() { - return { - tag: "a", - class: "theme-card", - href: this.props.href, - contents: [ - { - tag: "div", - class: "card-img", - contents: [{ tag: "img", alt:`thematic image ${this.props.img.replace(/\.[A-Za-z]+/, "")}`,src: `${images_url}${this.props.img}` }], - }, - { - tag: "div", - class: "card-title", - contents: [{ tag: "h2", class: "section-title", contents: this.props.title }], - }, - { - tag: "div", - class: "card-description", - contents: [{ tag: "p", contents: this.props.description }], - }, - ], - }; - } -} - -module.exports = ThemeCard; - -},{"../../constants":2}],8:[function(require,module,exports){ -"use strict"; - -class WhoAmI { - render() { - return { - tag: "section", - id: "whoami", - contents: [ - { - tag: "div", - class: "page-contents-center", - contents: [ - { - tag: "h2", - contents: "Qui sommes-nous-je ?", - }, - { - tag: "div", - class: "presentation-card", - contents: [ - { - tag: "div", - class: "header", - contents: [ - { - tag: "div", - class: "pic", - contents: [ - { - tag: "img", - alt: - "portrait Pierre Jarriges pixel art by Lucie Ventadour", - src: "assets/images/pijar_profile_lt_square.png", - }, - ], - }, - { - tag: "div", - class: "header-text", - contents: [ - { - tag: "h3", - contents: "Pierre Jarriges", - }, - { - tag: "h4", - contents: - "Artiste, auteur BD, compositeur, développeur informatique", - }, - { - tag: "strong", - contents: - "Créateur de <blue>Kuadrado Software</blue> en Février 2021.", - }, - ], - }, - ], - }, - { - tag: "div", - class: "body", - contents: [ - { - tag: "p", - contents: ` + ressources.`]].map(e=>{var[t,e]=e;return{tag:"li",contents:[{tag:"h3",contents:t},{tag:"p",contents:e}]}})}]}]}}}},{}],6:[function(e,t,s){"use strict";const{articles_url:n}=e("../../constants"),r=e("object-to-html-renderer"),a=e("../generic-components/image-carousel"),{loadArticles:o,getArticleDate:i,getArticleBody:c}=e("../lib/article-utils");t.exports=class{constructor(){this.id=performance.now().toString(),this.state={loading:!0,articles:[],showArticleIndex:-1},this.loadArticles()}loadArticles(){o(`${n}news`).then(e=>{this.state.articles=e,this.state.showArticleIndex=this.state.articles.length-1,this.refresh()})}refresh(){r.subRender(this.render(),document.getElementById(this.id),{mode:"replace"})}renderArticle(t){return{tag:"article",class:`${t.images?"grid-2":"grid-1"}`,typeof:"Article",contents:[{tag:"div",class:"date",contents:[{tag:"time",property:"datePublished",contents:i(t.date)}]},{tag:"div",class:"title",contents:[{tag:"h3",contents:t.title,property:"headline"}]},{tag:"div",class:"subtitle",contents:[{tag:"strong",contents:t.subtitle,property:"alternativeHeadline"}]},{tag:"div",class:"body",contents:[{tag:"p",contents:c(t.body),property:"articleBody"}]},t.images&&new a({images:t.images.map(e=>`${t.path}/images/${e}`)}).render()]}}renderArticlePlaceholder(){return{tag:"article",class:"article-placeholder",contents:[{tag:"div",class:"date"},{tag:"div",class:"title"},{tag:"div",class:"subtitle"},{tag:"div",class:"body"},{tag:"div",class:"image-carousel"}]}}handleChangeArticle(e){let{showArticleIndex:t,articles:s}=this.state;t="prev"===e?0<=t-1?t-1:0:t+1<=s.length-1?t+1:s.length-1,this.state.showArticleIndex=t,this.refresh()}render(){var{articles:e,showArticleIndex:t}=this.state,s=t<e.length-1,n=0<t;return{tag:"div",id:this.id,class:"articles-displayer page-contents-center",contents:0<e.length?[this.renderArticle(e[t]),{tag:"div",class:"prev-next-buttons",contents:[{tag:"button",class:`prev-btn ${n?"active":"disabled"}`,contents:"Précédent",onclick:this.handleChangeArticle.bind(this,"prev")},{tag:"button",class:`next-btn ${s?"active":"disabled"}`,contents:"Suivant",onclick:this.handleChangeArticle.bind(this,"next")}]}]:[this.renderArticlePlaceholder()]}}}},{"../../constants":2,"../generic-components/image-carousel":4,"../lib/article-utils":10,"object-to-html-renderer":3}],7:[function(e,t,s){"use strict";const{images_url:n}=e("../../constants");t.exports=class{constructor(e){this.props=e}render(){return{tag:"a",class:"theme-card",href:this.props.href,contents:[{tag:"div",class:"card-img",contents:[{tag:"img",alt:`thematic image ${this.props.img.replace(/\.[A-Za-z]+/,"")}`,src:`${n}${this.props.img}`}]},{tag:"div",class:"card-title",contents:[{tag:"h2",class:"section-title",contents:this.props.title}]},{tag:"div",class:"card-description",contents:[{tag:"p",contents:this.props.description}]}]}}}},{"../../constants":2}],8:[function(e,t,s){"use strict";t.exports=class{render(){return{tag:"section",id:"whoami",contents:[{tag:"div",class:"page-contents-center",contents:[{tag:"h2",contents:"Qui sommes-nous-je ?"},{tag:"div",class:"presentation-card",contents:[{tag:"div",class:"header",contents:[{tag:"div",class:"pic",contents:[{tag:"img",alt:"portrait Pierre Jarriges pixel art by Lucie Ventadour",src:"assets/images/pijar_profile_lt_square.png"}]},{tag:"div",class:"header-text",contents:[{tag:"h3",contents:"Pierre Jarriges"},{tag:"h4",contents:"Artiste, auteur BD, compositeur, développeur informatique"},{tag:"strong",contents:"Créateur de <blue>Kuadrado Software</blue> en Février 2021."}]}]},{tag:"div",class:"body",contents:[{tag:"p",contents:` “ La création de <b><blue>Kuadrado Software</blue></b> vient de la volonté de développer différents axes ensembles : <br /><br /> <emoji>🎮</emoji> D'une part exprimer une passion en créant des <b>jeux vidéo indépendants</b> sur un modèle léger et artisanal dans @@ -515,467 +24,5 @@ class WhoAmI { dans le même état d'esprit, former des équipes de travail et de création, et s'inscrire dans un tissu local de savoir-faire, tout en gardant un modèle d'entreprise basé sur l'indépendance, afin de rester aussi léger, libéral, et modulaire que possible.†- `, - }, - ], - }, - ], - }, - ], - }, - ], - }; - } -} - -module.exports = WhoAmI; - -},{}],9:[function(require,module,exports){ -"use strict"; - -const { images_url } = require("../constants"); -const KuadradoValues = require("./home-page-components/kuadrado-values"); -const NewsArticles = require("./home-page-components/news-articles"); -const ThemeCard = require("./home-page-components/theme-card"); -const WhoAmI = require("./home-page-components/whoami"); -const WebPage = require("./lib/web-page"); - -class HomePage extends WebPage { - render() { - return { - tag: "div", - id: "home-page", - contents: [ - { - tag: "div", - class: "page-header", - contents: [ - { - tag: "div", - class: "big-logo page-contents-center", - contents: [ - { - tag: "img", - alt: "logo Kuadrado", - src: `${images_url}logo_kuadrado.svg`, - }, - { - tag: "img", - class: "logo-text", - alt: "Kuadrado", - src: `${images_url}logo_kuadrado_txt.svg`, - }, - ], - }, - { tag: "h1", contents: "Kuadrado Software", class: "page-contents-center" }, - { - tag: "p", - class: "page-contents-center", - contents: `Créations numériques, jeux vidéo, pédagogie.`, - }, - { - tag: "ul", - class: "philo-bubbles", - contents: ["Simplicité", "Légèreté", "Écologie"].map(word => { - return { - tag: "li", - contents: [{ tag: "span", contents: word }], - }; - }), - }, - ], - }, - { - tag: "section", - class: "page-contents-center poles", - contents: [ - { - title: "Jeux", - img: "game_controller.svg", - href: "/games/", - description: - "Créations vidéoludiques, jeux web et jeux PC, projets en cours.", - }, - { - title: "Pédagogie", - img: "brain.svg", - href: "/education/", - description: `S'approprier la technologie par le partage de connaissances.`, - }, - { - title: "Software", - img: "meca_proc.svg", - href: "/software-development/", - description: `R&D, projets expérimentaux, web et outillage logiciel`, - }, - ].map(cardProps => new ThemeCard(cardProps).render()), - }, - { - tag: "section", - class: "page-philo", - contents: [ - { - tag: "p", - class: "page-contents-center", - contents: `Travailler pour le plaisir de créer, de maîtriser et de comprendre.`, - }, - ], - }, - { - tag: "section", - class: "page-contents-center", - id:"news", - contents: [ - { tag: "h2", contents: "Actu", class: "section-title" }, - new NewsArticles().render(), - ], - }, - new KuadradoValues().render(), - new WhoAmI().render(), - ], - }; - } -} - -module.exports = HomePage; - -},{"../constants":2,"./home-page-components/kuadrado-values":5,"./home-page-components/news-articles":6,"./home-page-components/theme-card":7,"./home-page-components/whoami":8,"./lib/web-page":12}],10:[function(require,module,exports){ -"use strict"; - -const { fetchjson, fetchtext } = require("./fetch"); - -function getArticleBody(text) { - return text.replaceAll("\n", "<br/>"); -} - -function getArticleDate(date) { - return `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`; -} - -function loadArticles(dir_url) { - return new Promise((resolve, reject) => { - fetchjson(`${dir_url}/index.json`) - .then(json => { - Promise.all( - 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 }); - }) - ) - .then(articles => { - populateArticles(articles) - .then(completeArticles => resolve(completeArticles)) - .catch(e => reject(e)); - }) - .catch(e => reject(e)); - }) - .catch(e => console.log(e)); - }); -} - -function populateArticles(articles) { - return new Promise((resolve, reject) => { - Promise.all( - articles.map(async article => { - if (article.body.indexOf("<file>") !== -1) { - const txtPath = article.body.replace("<file>", ""); - const textValue = await fetchtext(`${article.path}/${txtPath}`); - article.body = textValue; - article.date = article.date ? new Date(article.date) : undefined; - } - return article; - }) - ) - .then(completeArticles => resolve(completeArticles.sort((a, b) => a.date - b.date))) - .catch(e => reject(e)); - }); -} - -module.exports = { - loadArticles, - getArticleBody, - getArticleDate, - populateArticles, -}; - -},{"./fetch":11}],11:[function(require,module,exports){ -"use strict"; - -function fetchjson(url) { - return new Promise((resolve, reject) => { - fetch(url) - .then(r => r.json()) - .then(r => resolve(r)) - .catch(e => reject(e)); - }); -} - -function fetchtext(url) { - return new Promise((resolve, reject) => { - fetch(url) - .then(r => r.text()) - .then(r => resolve(r)) - .catch(e => reject(e)); - }); -} - -module.exports = { - fetchjson, - fetchtext, -}; - -},{}],12:[function(require,module,exports){ -"use strict"; - -class WebPage { - constructor(args) { - Object.assign(this, args); - } -} - -module.exports = WebPage; -},{}],13:[function(require,module,exports){ -"use strict"; - -const HomePage = require("./homepage"); -const runPage = require("./run-page"); - -runPage(HomePage); - -},{"./homepage":9,"./run-page":14}],14:[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":16,"object-to-html-renderer":3}],15:[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}],16:[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":15}]},{},[13]); + `}]}]}]}]}}}},{}],9:[function(e,t,s){"use strict";const{images_url:n}=e("../constants"),r=e("./home-page-components/kuadrado-values"),a=e("./home-page-components/news-articles"),o=e("./home-page-components/theme-card"),i=e("./home-page-components/whoami");class c extends e("./lib/web-page"){render(){return{tag:"div",id:"home-page",contents:[{tag:"div",class:"page-header",contents:[{tag:"div",class:"big-logo page-contents-center",contents:[{tag:"img",alt:"logo Kuadrado",src:`${n}logo_kuadrado.svg`},{tag:"img",class:"logo-text",alt:"Kuadrado",src:`${n}logo_kuadrado_txt.svg`}]},{tag:"h1",contents:"Kuadrado Software",class:"page-contents-center"},{tag:"p",class:"page-contents-center",contents:"Créations numériques, jeux vidéo, pédagogie."},{tag:"ul",class:"philo-bubbles",contents:["Simplicité","Légèreté","Écologie"].map(e=>({tag:"li",contents:[{tag:"span",contents:e}]}))}]},{tag:"section",class:"page-contents-center poles",contents:[{title:"Jeux",img:"game_controller.svg",href:"/games/",description:"Créations vidéoludiques, jeux web et jeux PC, projets en cours."},{title:"Pédagogie",img:"brain.svg",href:"/education/",description:"S'approprier la technologie par le partage de connaissances."},{title:"Software",img:"meca_proc.svg",href:"/software-development/",description:"R&D, projets expérimentaux, web et outillage logiciel"}].map(e=>new o(e).render())},{tag:"section",class:"page-philo",contents:[{tag:"p",class:"page-contents-center",contents:"Travailler pour le plaisir de créer, de maîtriser et de comprendre."}]},{tag:"section",class:"page-contents-center",id:"news",contents:[{tag:"h2",contents:"Actu",class:"section-title"},(new a).render()]},(new r).render(),(new i).render()]}}}t.exports=c},{"../constants":2,"./home-page-components/kuadrado-values":5,"./home-page-components/news-articles":6,"./home-page-components/theme-card":7,"./home-page-components/whoami":8,"./lib/web-page":12}],10:[function(e,t,s){"use strict";const{fetchjson:a,fetchtext:n}=e("./fetch");function o(e){return new Promise((t,s)=>{Promise.all(e.map(async e=>{var t;return-1!==e.body.indexOf("<file>")&&(t=e.body.replace("<file>",""),t=await n(`${e.path}/${t}`),e.body=t,e.date=e.date?new Date(e.date):void 0),e})).then(e=>t(e.sort((e,t)=>e.date-t.date))).catch(e=>s(e))})}t.exports={loadArticles:function(r){return new Promise((t,s)=>{a(`${r}/index.json`).then(e=>{Promise.all(e.articles.map(async e=>{const t=`${e}/${e}.json`;var s=await a(`${r}/${t}`);const n=t.split("/");n.pop();e=`${r}/${n.join("/")}`;return Object.assign(s,{path:e})})).then(e=>{o(e).then(e=>t(e)).catch(e=>s(e))}).catch(e=>s(e))}).catch(e=>console.log(e))})},getArticleBody:function(e){return e.replaceAll("\n","<br/>")},getArticleDate:function(e){return`${e.getDate()}-${e.getMonth()+1}-${e.getFullYear()}`},populateArticles:o}},{"./fetch":11}],11:[function(e,t,s){"use strict";t.exports={fetchjson:function(e){return new Promise((t,s)=>{fetch(e).then(e=>e.json()).then(e=>t(e)).catch(e=>s(e))})},fetchtext:function(e){return new Promise((t,s)=>{fetch(e).then(e=>e.text()).then(e=>t(e)).catch(e=>s(e))})}}},{}],12:[function(e,t,s){"use strict";t.exports=class{constructor(e){Object.assign(this,e)}}},{}],13:[function(e,t,s){"use strict";var n=e("./homepage");const r=e("./run-page");r(n)},{"./homepage":9,"./run-page":14}],14:[function(e,t,s){"use strict";const n=e("object-to-html-renderer"),r=e("./template/template");t.exports=function(e){e=new r({page:new e});n.setRenderCycleRoot(e),n.renderCycle()}},{"./template/template":16,"object-to-html-renderer":3}],15:[function(e,t,s){"use strict";const{images_url:n}=e("../../../constants"),r=[{url:"/games/",text:"Jeux"},{url:"/education/",text:"Pédagogie"},{url:"/software-development/",text:"Software"}];t.exports=class{constructor(){this.initEventHandlers()}handleBurgerClick(){document.getElementById("nav-menu-list").classList.toggle("responsive-show")}initEventHandlers(){window.addEventListener("click",e=>{"nav-menu-list"===e.target.id||e.target.classList.contains("burger")||e.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:`${n}logo_kuadrado.svg`},{tag:"img",alt:"Kuadrado Software",class:"logo-text",src:`${n}logo_kuadrado_txt.svg`}]}]}}renderMenu(e,a=!1,o=""){return{tag:"ul",id:"nav-menu-list",class:a?"submenu":"",contents:e.map(e=>{const{url:t,text:s,submenu:n}=e,r=`${o}${t}`;return{tag:"li",class:a||window.location.pathname!==r?"":"active",contents:[{tag:"a",href:r,contents:s}].concat(n?[this.renderMenu(n,!0,t)]:[])}})}}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(r)]}}}},{"../../../constants":2}],16:[function(e,t,s){"use strict";const{in_construction:n}=e("../../config"),{images_url:r}=e("../../constants"),a=e("./components/navbar");t.exports=class{constructor(e){this.props=e}render(){return{tag:"main",contents:[{tag:"header",contents:[(new a).render()]},n&&{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:`${r}logo_kuadrado.svg`},{tag:"img",class:"text-logo",alt:"Kuadrado Software",src:`${r}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.`}]}]}}}},{"../../config":1,"../../constants":2,"./components/navbar":15}]},{},[13]); \ No newline at end of file diff --git a/public/software-development/software-development.js b/public/software-development/software-development.js index 6d902af0c325f9a454a26d36bd49d0c5901d3bd8..f17ce3634e0a1eb79b2aceae61fb550577198759 100644 --- a/public/software-development/software-development.js +++ b/public/software-development/software-development.js @@ -1,810 +1,2 @@ -(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, - 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"; - -const objectHtmlRenderer = require("object-to-html-renderer") - -class ImageCarousel { - constructor(props) { - this.props = props; - this.id = performance.now(); - this.state = { - showImageIndex: 0, - }; - this.RUN_INTERVAL = 5000; - this.props.images.length > 1 && this.run(); - } - - run() { - this.runningInterval = setInterval(() => { - let { showImageIndex } = this.state; - const { images } = this.props; - this.state.showImageIndex = showImageIndex < images.length - 1 ? ++showImageIndex : 0; - this.refreshImage(); - }, this.RUN_INTERVAL); - } - - setImageIndex(i) { - clearInterval(this.runningInterval); - this.state.showImageIndex = i; - this.refreshImage(); - } - - refreshImage() { - objectHtmlRenderer.subRender(this.render(), document.getElementById(this.id), { - mode: "replace", - }); - } - - render() { - const { showImageIndex } = this.state; - const { images } = this.props; - return { - tag: "div", - id: this.id, - class: "image-carousel", - contents: [ - { - tag: "img", - property: "image", - alt: `image carousel ${images[showImageIndex].replace(/\.[A-Za-z]+/, "")}`, - src: images[showImageIndex], - }, - images.length > 1 && { - tag: "div", - class: "carousel-bullets", - contents: images.map((_, i) => { - const active = showImageIndex === i; - return { - tag: "span", - class: `bullet ${active ? "active" : ""}`, - onclick: this.setImageIndex.bind(this, i), - }; - }), - }, - ], - }; - } -} - -module.exports = ImageCarousel; - -},{"object-to-html-renderer":3}],5:[function(require,module,exports){ -"use strict"; - -const { fetchjson, fetchtext } = require("./fetch"); - -function getArticleBody(text) { - return text.replaceAll("\n", "<br/>"); -} - -function getArticleDate(date) { - return `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`; -} - -function loadArticles(dir_url) { - return new Promise((resolve, reject) => { - fetchjson(`${dir_url}/index.json`) - .then(json => { - Promise.all( - 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 }); - }) - ) - .then(articles => { - populateArticles(articles) - .then(completeArticles => resolve(completeArticles)) - .catch(e => reject(e)); - }) - .catch(e => reject(e)); - }) - .catch(e => console.log(e)); - }); -} - -function populateArticles(articles) { - return new Promise((resolve, reject) => { - Promise.all( - articles.map(async article => { - if (article.body.indexOf("<file>") !== -1) { - const txtPath = article.body.replace("<file>", ""); - const textValue = await fetchtext(`${article.path}/${txtPath}`); - article.body = textValue; - article.date = article.date ? new Date(article.date) : undefined; - } - return article; - }) - ) - .then(completeArticles => resolve(completeArticles.sort((a, b) => a.date - b.date))) - .catch(e => reject(e)); - }); -} - -module.exports = { - loadArticles, - getArticleBody, - getArticleDate, - populateArticles, -}; - -},{"./fetch":6}],6:[function(require,module,exports){ -"use strict"; - -function fetchjson(url) { - return new Promise((resolve, reject) => { - fetch(url) - .then(r => r.json()) - .then(r => resolve(r)) - .catch(e => reject(e)); - }); -} - -function fetchtext(url) { - return new Promise((resolve, reject) => { - fetch(url) - .then(r => r.text()) - .then(r => resolve(r)) - .catch(e => reject(e)); - }); -} - -module.exports = { - fetchjson, - fetchtext, -}; - -},{}],7:[function(require,module,exports){ -"use strict"; - -class WebPage { - constructor(args) { - Object.assign(this, args); - } -} - -module.exports = WebPage; -},{}],8:[function(require,module,exports){ -"use strict"; - -const { articles_url } = require("../../../../constants"); -const ImageCarousel = require("../../../generic-components/image-carousel"); -const { loadArticles, getArticleBody, getArticleDate } = require("../../../lib/article-utils"); -const objectHtmlRenderer = require("object-to-html-renderer") - -class SoftwareArticle { - constructor(props) { - this.props = props; - } - - render() { - const { title, date, body, subtitle, images, path, technical, releases } = this.props; - return { - tag: "article", - class: "software-article", - typeof: "SoftwareApplication", - additionalType: "Article", - contents: [ - { - tag: "h2", - class: "software-title", - contents: title, - property: "name", - }, - { - tag: "time", - class: "software-date", - contents: getArticleDate(date), - property: "datePublished", - }, - { - tag: "h3", - class: "software-subtitle", - contents: subtitle, - property: "alternativeHeadline", - }, - { - tag: "div", - class: "software-description", - contents: getArticleBody(body), - property: "description", - }, - new ImageCarousel({ images: images.map(img => `${path}/images/${img}`) }).render(), - { - tag: "div", - class: "software-technical", - contents: [ - { - tag: "h2", - contents: "Details", - }, - { - tag: "ul", - class: "technical-details", - contents: [ - { - tag: "li", - class: "detail", - contents: [ - { tag: "label", contents: "Stack" }, - { - tag: "div", - contents: [ - { - tag: "ul", - contents: technical.stack.map(tech => { - return { - tag: "li", - contents: tech, - property: "about", - }; - }), - }, - ], - }, - ], - }, - { - tag: "li", - class: "detail", - contents: [ - { tag: "label", contents: "Version actuelle" }, - { - tag: "div", - contents: technical.version, - property: "version", - }, - ], - }, - { - tag: "li", - class: "detail", - contents: [ - { tag: "label", contents: "License" }, - { - tag: "div", - contents: technical.license, - property: "license", - }, - ], - }, - { - tag: "li", - class: "detail", - contents: [ - { - tag: "label", - contents: "Code source", - }, - { - tag: "a", - href: technical.repository, - target: "_blank", - contents: technical.repository.replace( - /https?:\/\/(www\.)?/g, - "" - ), - property: "url", - }, - ], - }, - ], - }, - releases && { - tag: "h2", - contents: "Releases", - }, - releases && { - tag: "ul", - class: "releases", - contents: [ - { - tag: "li", - class: "detail", - contents: [ - { - tag: "label", - class: "label", - contents: "Plateforme", - }, - { - tag: "label", - class: "label", - contents: "Téléchargement", - }, - ], - }, - ].concat( - releases.map(rel => { - return { - tag: "li", - class: "release detail", - contents: [ - { - tag: "label", - contents: rel.platform, - }, - { - tag: "a", - download: rel.download, - href: `${path}/release/${rel.download}`, - contents: rel.download, - property: "url", - }, - ], - }; - }) - ), - }, - ], - }, - ], - }; - } -} - -class SoftwareArticles { - constructor(props) { - this.props = props; - this.state = { - articles: [], - }; - this.id = performance.now(); - this.loadArticles(); - } - - loadArticles() { - loadArticles(`${articles_url}software`) - .then(articles => { - this.state.articles = articles; - this.refresh(); - this.fixScroll(); - }) - .catch(e => console.log(e)); - } - - renderPlaceholder() { - return { - tag: "article", - class: "placeholder", - contents: [ - { tag: "div", class: "title" }, - { tag: "div", class: "body" }, - { tag: "div", class: "details" }, - ], - }; - } - - refresh() { - objectHtmlRenderer.subRender(this.render(), document.getElementById(this.id), { - mode: "replace", - }); - } - - fixScroll() { - if (window.location.href.includes("#")) { - window.scrollTo( - 0, - document.getElementById(window.location.href.match(/#.+/)[0].replace("#", "")) - .offsetTop - ); - } - } - - render() { - const { articles } = this.state; - return { - tag: "section", - class: "software-articles page-contents-center", - id: this.id, - contents: - articles.length > 0 - ? articles.map(article => new SoftwareArticle({ ...article }).render()) - : [this.renderPlaceholder()], - }; - } -} - -module.exports = SoftwareArticles; - -},{"../../../../constants":2,"../../../generic-components/image-carousel":4,"../../../lib/article-utils":5,"object-to-html-renderer":3}],9:[function(require,module,exports){ -"use strict"; - -const { images_url } = require("../../../constants"); -const WebPage = require("../../lib/web-page"); -const SoftwareArticles = require("./components/software-articles"); - -class SoftwareDevelopment extends WebPage { - render() { - return { - tag: "div", - id: "software-page", - contents: [ - { - tag: "div", - class: "page-header logo-left", - contents: [ - { - tag: "div", - class: "page-contents-center grid-wrapper", - contents: [ - { - tag: "div", - class: "logo", - contents: [ - { - tag: "img", - alt: `image mechanic electronic`, - src: `${images_url}meca_proc.svg`, - }, - ], - }, - { tag: "h1", contents: "Software" }, - { - tag: "p", - contents: `R&D, projets expérimentaux, outillage logiciel pour le développement de jeu ou pour le web.`, - }, - ], - }, - ], - }, - new SoftwareArticles().render(), - ], - }; - } -} - -module.exports = SoftwareDevelopment; - -},{"../../../constants":2,"../../lib/web-page":7,"./components/software-articles":8}],10:[function(require,module,exports){ -"use strict"; - -"use strict"; -const runPage = require("../../run-page"); -const SoftwareDevelopment = require("./software-development"); -runPage(SoftwareDevelopment); - -},{"../../run-page":11,"./software-development":9}],11:[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":13,"object-to-html-renderer":3}],12:[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}],13:[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":12}]},{},[10]); +!function s(r,a,o){function c(t,e){if(!a[t]){if(!r[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(i)return i(t,!0);throw(n=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",n}n=a[t]={exports:{}},r[t][0].call(n.exports,function(e){return c(r[t][1][e]||e)},n,n.exports,s,r,a,o)}return a[t].exports}for(var i="function"==typeof require&&require,e=0;e<o.length;e++)c(o[e]);return c}({1:[function(e,t,n){t.exports={getServerUrl:function(){return`${location.origin}${"/"!==location.origin.charAt(location.origin.length-1)?"/":""}`},build:{protected_dirs:["assets","style","articles"],default_meta_keys:["title","description","image","open_graph","json_ld"]}}},{}],2:[function(e,t,n){const{getServerUrl:s}=e("./config");t.exports={images_url:`${s()}assets/images/`,articles_url:`${s()}articles/`}},{"./config":1}],3:[function(e,t,n){"use strict";t.exports={setRenderCycleRoot(e){this.renderCycleRoot=e},objectToHtml:function t(n){var{tag:e}=n;const s=document.createElement(e),r=["tag","contents","style_rules","state"];return Object.keys(n).filter(e=>!r.includes(e)).forEach(e=>{"class"===e?s.classList.add(...n[e].split(" ").filter(e=>""!==e)):s[e]=n[e]}),n.contents&&"string"==typeof n.contents?s.innerHTML=n.contents:n.contents&&0<n.contents.length&&n.contents.forEach(e=>{switch(typeof e){case"string":s.innerHTML=e;break;case"object":s.appendChild(t(e))}}),n.style_rules&&Object.keys(n.style_rules).forEach(e=>{s.style[e]=n.style_rules[e]}),s},renderCycle:function(){this.subRender(this.renderCycleRoot.render(),document.getElementsByTagName("main")[0],{mode:"replace"})},subRender(e,t,n={mode:"append"}){var s=this.objectToHtml(e);switch(n.mode){case"append":t.appendChild(s);break;case"override":t.innerHTML="",t.appendChild(s);break;case"insert-before":t.insertBefore(s,t.childNodes[n.insertIndex]);break;case"adjacent":t.insertAdjacentHTML(n.insertLocation,s);break;case"replace":t.parentNode.replaceChild(s,t);break;case"remove":t.remove()}}}},{}],4:[function(e,t,n){"use strict";const s=e("object-to-html-renderer");t.exports=class{constructor(e){this.props=e,this.id=performance.now(),this.state={showImageIndex:0},this.RUN_INTERVAL=5e3,1<this.props.images.length&&this.run()}run(){this.runningInterval=setInterval(()=>{var{showImageIndex:e}=this.state,{images:t}=this.props;this.state.showImageIndex=e<t.length-1?++e:0,this.refreshImage()},this.RUN_INTERVAL)}setImageIndex(e){clearInterval(this.runningInterval),this.state.showImageIndex=e,this.refreshImage()}refreshImage(){s.subRender(this.render(),document.getElementById(this.id),{mode:"replace"})}render(){const{showImageIndex:n}=this.state,{images:e}=this.props;return{tag:"div",id:this.id,class:"image-carousel",contents:[{tag:"img",property:"image",alt:`image carousel ${e[n].replace(/\.[A-Za-z]+/,"")}`,src:e[n]},1<e.length&&{tag:"div",class:"carousel-bullets",contents:e.map((e,t)=>{return{tag:"span",class:`bullet ${n===t?"active":""}`,onclick:this.setImageIndex.bind(this,t)}})}]}}}},{"object-to-html-renderer":3}],5:[function(e,t,n){"use strict";const{fetchjson:a,fetchtext:s}=e("./fetch");function o(e){return new Promise((t,n)=>{Promise.all(e.map(async e=>{var t;return-1!==e.body.indexOf("<file>")&&(t=e.body.replace("<file>",""),t=await s(`${e.path}/${t}`),e.body=t,e.date=e.date?new Date(e.date):void 0),e})).then(e=>t(e.sort((e,t)=>e.date-t.date))).catch(e=>n(e))})}t.exports={loadArticles:function(r){return new Promise((t,n)=>{a(`${r}/index.json`).then(e=>{Promise.all(e.articles.map(async e=>{const t=`${e}/${e}.json`;var n=await a(`${r}/${t}`);const s=t.split("/");s.pop();e=`${r}/${s.join("/")}`;return Object.assign(n,{path:e})})).then(e=>{o(e).then(e=>t(e)).catch(e=>n(e))}).catch(e=>n(e))}).catch(e=>console.log(e))})},getArticleBody:function(e){return e.replaceAll("\n","<br/>")},getArticleDate:function(e){return`${e.getDate()}-${e.getMonth()+1}-${e.getFullYear()}`},populateArticles:o}},{"./fetch":6}],6:[function(e,t,n){"use strict";t.exports={fetchjson:function(e){return new Promise((t,n)=>{fetch(e).then(e=>e.json()).then(e=>t(e)).catch(e=>n(e))})},fetchtext:function(e){return new Promise((t,n)=>{fetch(e).then(e=>e.text()).then(e=>t(e)).catch(e=>n(e))})}}},{}],7:[function(e,t,n){"use strict";t.exports=class{constructor(e){Object.assign(this,e)}}},{}],8:[function(e,t,n){"use strict";const{articles_url:s}=e("../../../../constants"),i=e("../../../generic-components/image-carousel"),{loadArticles:r,getArticleBody:l,getArticleDate:d}=e("../../../lib/article-utils"),a=e("object-to-html-renderer");class o{constructor(e){this.props=e}render(){const{title:e,date:t,body:n,subtitle:s,images:r,path:a,technical:o,releases:c}=this.props;return{tag:"article",class:"software-article",typeof:"SoftwareApplication",additionalType:"Article",contents:[{tag:"h2",class:"software-title",contents:e,property:"name"},{tag:"time",class:"software-date",contents:d(t),property:"datePublished"},{tag:"h3",class:"software-subtitle",contents:s,property:"alternativeHeadline"},{tag:"div",class:"software-description",contents:l(n),property:"description"},new i({images:r.map(e=>`${a}/images/${e}`)}).render(),{tag:"div",class:"software-technical",contents:[{tag:"h2",contents:"Details"},{tag:"ul",class:"technical-details",contents:[{tag:"li",class:"detail",contents:[{tag:"label",contents:"Stack"},{tag:"div",contents:[{tag:"ul",contents:o.stack.map(e=>({tag:"li",contents:e,property:"about"}))}]}]},{tag:"li",class:"detail",contents:[{tag:"label",contents:"Version actuelle"},{tag:"div",contents:o.version,property:"version"}]},{tag:"li",class:"detail",contents:[{tag:"label",contents:"License"},{tag:"div",contents:o.license,property:"license"}]},{tag:"li",class:"detail",contents:[{tag:"label",contents:"Code source"},{tag:"a",href:o.repository,target:"_blank",contents:o.repository.replace(/https?:\/\/(www\.)?/g,""),property:"url"}]}]},c&&{tag:"h2",contents:"Releases"},c&&{tag:"ul",class:"releases",contents:[{tag:"li",class:"detail",contents:[{tag:"label",class:"label",contents:"Plateforme"},{tag:"label",class:"label",contents:"Téléchargement"}]}].concat(c.map(e=>({tag:"li",class:"release detail",contents:[{tag:"label",contents:e.platform},{tag:"a",download:e.download,href:`${a}/release/${e.download}`,contents:e.download,property:"url"}]})))}]}]}}}t.exports=class{constructor(e){this.props=e,this.state={articles:[]},this.id=performance.now(),this.loadArticles()}loadArticles(){r(`${s}software`).then(e=>{this.state.articles=e,this.refresh(),this.fixScroll()}).catch(e=>console.log(e))}renderPlaceholder(){return{tag:"article",class:"placeholder",contents:[{tag:"div",class:"title"},{tag:"div",class:"body"},{tag:"div",class:"details"}]}}refresh(){a.subRender(this.render(),document.getElementById(this.id),{mode:"replace"})}fixScroll(){window.location.href.includes("#")&&window.scrollTo(0,document.getElementById(window.location.href.match(/#.+/)[0].replace("#","")).offsetTop)}render(){const{articles:e}=this.state;return{tag:"section",class:"software-articles page-contents-center",id:this.id,contents:0<e.length?e.map(e=>new o({...e}).render()):[this.renderPlaceholder()]}}}},{"../../../../constants":2,"../../../generic-components/image-carousel":4,"../../../lib/article-utils":5,"object-to-html-renderer":3}],9:[function(e,t,n){"use strict";const{images_url:s}=e("../../../constants");var r=e("../../lib/web-page");const a=e("./components/software-articles");class o extends r{render(){return{tag:"div",id:"software-page",contents:[{tag:"div",class:"page-header logo-left",contents:[{tag:"div",class:"page-contents-center grid-wrapper",contents:[{tag:"div",class:"logo",contents:[{tag:"img",alt:"image mechanic electronic",src:`${s}meca_proc.svg`}]},{tag:"h1",contents:"Software"},{tag:"p",contents:"R&D, projets expérimentaux, outillage logiciel pour le développement de jeu ou pour le web."}]}]},(new a).render()]}}}t.exports=o},{"../../../constants":2,"../../lib/web-page":7,"./components/software-articles":8}],10:[function(e,t,n){"use strict";const s=e("../../run-page");e=e("./software-development");s(e)},{"../../run-page":11,"./software-development":9}],11:[function(e,t,n){"use strict";const s=e("object-to-html-renderer"),r=e("./template/template");t.exports=function(e){e=new r({page:new e});s.setRenderCycleRoot(e),s.renderCycle()}},{"./template/template":13,"object-to-html-renderer":3}],12:[function(e,t,n){"use strict";const{images_url:s}=e("../../../constants"),r=[{url:"/games/",text:"Jeux"},{url:"/education/",text:"Pédagogie"},{url:"/software-development/",text:"Software"}];t.exports=class{constructor(){this.initEventHandlers()}handleBurgerClick(){document.getElementById("nav-menu-list").classList.toggle("responsive-show")}initEventHandlers(){window.addEventListener("click",e=>{"nav-menu-list"===e.target.id||e.target.classList.contains("burger")||e.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:`${s}logo_kuadrado.svg`},{tag:"img",alt:"Kuadrado Software",class:"logo-text",src:`${s}logo_kuadrado_txt.svg`}]}]}}renderMenu(e,a=!1,o=""){return{tag:"ul",id:"nav-menu-list",class:a?"submenu":"",contents:e.map(e=>{const{url:t,text:n,submenu:s}=e,r=`${o}${t}`;return{tag:"li",class:a||window.location.pathname!==r?"":"active",contents:[{tag:"a",href:r,contents:n}].concat(s?[this.renderMenu(s,!0,t)]:[])}})}}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(r)]}}}},{"../../../constants":2}],13:[function(e,t,n){"use strict";const{in_construction:s}=e("../../config"),{images_url:r}=e("../../constants"),a=e("./components/navbar");t.exports=class{constructor(e){this.props=e}render(){return{tag:"main",contents:[{tag:"header",contents:[(new a).render()]},s&&{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:`${r}logo_kuadrado.svg`},{tag:"img",class:"text-logo",alt:"Kuadrado Software",src:`${r}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.`}]}]}}}},{"../../config":1,"../../constants":2,"./components/navbar":12}]},{},[10]); \ No newline at end of file diff --git a/public/style/home-page-components/news-articles.css b/public/style/home-page-components/news-articles.css deleted file mode 100644 index 4fa2a445880e30bc1b0750c5ea67d5fb6586bad0..0000000000000000000000000000000000000000 --- a/public/style/home-page-components/news-articles.css +++ /dev/null @@ -1,17 +0,0 @@ -/* Error: Undefined variable. - * , - * 22 | color: $medium_grey; - * | ^^^^^^^^^^^^ - * ' - * src/home-page-components/news-articles.scss 22:28 root stylesheet */ - -body::before { - font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono", - "Droid Sans Mono", monospace, monospace; - white-space: pre; - display: block; - padding: 1em; - margin-bottom: 1em; - border-bottom: 2px solid black; - content: "Error: Undefined variable.\a \2577 \a 22 \2502 color: $medium_grey;\a \2502 ^^^^^^^^^^^^\a \2575 \a src/home-page-components/news-articles.scss 22:28 root stylesheet"; -} diff --git a/public/style/home-page-components/whoami.css b/public/style/home-page-components/whoami.css deleted file mode 100644 index f5a70270dcbd26374a8af1335e8b27c0e6c35316..0000000000000000000000000000000000000000 --- a/public/style/home-page-components/whoami.css +++ /dev/null @@ -1,17 +0,0 @@ -/* Error: Undefined mixin. - * , - * 5 | @include flex-center-col; - * | ^^^^^^^^^^^^^^^^^^^^^^^^ - * ' - * src/home-page-components/whoami.scss 5:9 root stylesheet */ - -body::before { - font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono", - "Droid Sans Mono", monospace, monospace; - white-space: pre; - display: block; - padding: 1em; - margin-bottom: 1em; - border-bottom: 2px solid black; - content: "Error: Undefined mixin.\a \2577 \a 5 \2502 @include flex-center-col;\a \2502 ^^^^^^^^^^^^^^^^^^^^^^^^\a \2575 \a src/home-page-components/whoami.scss 5:9 root stylesheet"; -} diff --git a/public/style/homepage.css b/public/style/homepage.css deleted file mode 100644 index 00062e138a7561026f6d5f3c844b24f36d52b985..0000000000000000000000000000000000000000 --- a/public/style/homepage.css +++ /dev/null @@ -1,17 +0,0 @@ -/* Error: Undefined variable. - * , - * 7 | color: $light_2; - * | ^^^^^^^^ - * ' - * src/homepage.scss 7:16 root stylesheet */ - -body::before { - font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono", - "Droid Sans Mono", monospace, monospace; - white-space: pre; - display: block; - padding: 1em; - margin-bottom: 1em; - border-bottom: 2px solid black; - content: "Error: Undefined variable.\a \2577 \a 7 \2502 color: $light_2;\a \2502 ^^^^^^^^\a \2575 \a src/homepage.scss 7:16 root stylesheet"; -} diff --git a/public/style/pages/education/education.css b/public/style/pages/education/education.css deleted file mode 100644 index 8c81e7e0e4cb2971d212ade9a40b6d07803ebd27..0000000000000000000000000000000000000000 --- a/public/style/pages/education/education.css +++ /dev/null @@ -1,17 +0,0 @@ -/* Error: Undefined variable. - * , - * 25 | background-color: $yellow_2; - * | ^^^^^^^^^ - * ' - * src/pages/education/education.scss 25:27 root stylesheet */ - -body::before { - font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono", - "Droid Sans Mono", monospace, monospace; - white-space: pre; - display: block; - padding: 1em; - margin-bottom: 1em; - border-bottom: 2px solid black; - content: "Error: Undefined variable.\a \2577 \a 25 \2502 background-color: $yellow_2;\a \2502 ^^^^^^^^^\a \2575 \a src/pages/education/education.scss 25:27 root stylesheet"; -} diff --git a/public/style/pages/education/subpages/game-studio-club/game-studio-club.css b/public/style/pages/education/subpages/game-studio-club/game-studio-club.css deleted file mode 100644 index 90586b2992a72e02cfcbff01b2d27cbad98e4e32..0000000000000000000000000000000000000000 --- a/public/style/pages/education/subpages/game-studio-club/game-studio-club.css +++ /dev/null @@ -1,3 +0,0 @@ - - -/*# sourceMappingURL=game-studio-club.css.map */ diff --git a/public/style/pages/games/games.css b/public/style/pages/games/games.css deleted file mode 100644 index e86516d63c998ee9dfcce27ad674fcee98d6b858..0000000000000000000000000000000000000000 --- a/public/style/pages/games/games.css +++ /dev/null @@ -1,17 +0,0 @@ -/* Error: Undefined variable. - * , - * 15 | color: $light_2; - * | ^^^^^^^^ - * ' - * src/pages/games/games.scss 15:28 root stylesheet */ - -body::before { - font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono", - "Droid Sans Mono", monospace, monospace; - white-space: pre; - display: block; - padding: 1em; - margin-bottom: 1em; - border-bottom: 2px solid black; - content: "Error: Undefined variable.\a \2577 \a 15 \2502 color: $light_2;\a \2502 ^^^^^^^^\a \2575 \a src/pages/games/games.scss 15:28 root stylesheet"; -} diff --git a/public/style/pages/software-development/software-development.css b/public/style/pages/software-development/software-development.css deleted file mode 100644 index e9e1acc3555438dcd5b93518ab6d9c4fdd42bd53..0000000000000000000000000000000000000000 --- a/public/style/pages/software-development/software-development.css +++ /dev/null @@ -1,17 +0,0 @@ -/* Error: Undefined variable. - * , - * 11 | color: $light_2; - * | ^^^^^^^^ - * ' - * src/pages/software-development/software-development.scss 11:24 root stylesheet */ - -body::before { - font-family: "Source Code Pro", "SF Mono", Monaco, Inconsolata, "Fira Mono", - "Droid Sans Mono", monospace, monospace; - white-space: pre; - display: block; - padding: 1em; - margin-bottom: 1em; - border-bottom: 2px solid black; - content: "Error: Undefined variable.\a \2577 \a 11 \2502 color: $light_2;\a \2502 ^^^^^^^^\a \2575 \a src/pages/software-development/software-development.scss 11:24 root stylesheet"; -} diff --git a/public/style/pages/story-logic-app/story-logic-app.css b/public/style/pages/story-logic-app/story-logic-app.css deleted file mode 100644 index 23d770b3730d719695e5294d4062d406bfa3f9d7..0000000000000000000000000000000000000000 --- a/public/style/pages/story-logic-app/story-logic-app.css +++ /dev/null @@ -1,3 +0,0 @@ - - -/*# sourceMappingURL=story-logic-app.css.map */ diff --git a/public/style/style.css b/public/style/style.css index f50842c09183b9676cad9d6baad8869c4654eee6..450e8b2e36c098ab0823e450055dadd9a7bbdb3c 100644 --- a/public/style/style.css +++ b/public/style/style.css @@ -1,1274 +1 @@ -body { - font-family: Arial, Helvetica, sans-serif; - margin: 0; -} -body * { - box-sizing: border-box; - color: #35393c; - line-height: 1.3em; -} -body ul { - margin: 0; - padding: 0; - list-style-type: none; -} -body a { - color: #4baabb; - text-decoration: none; -} -body a:hover { - color: #72e3f0; -} -body blue { - color: #4baabb; -} -body red { - color: #9c3030; -} -body green { - color: #368736; -} -body emoji { - font-style: initial; - font-size: 25px; -} -body .bg-blue { - background-color: #4baabb; - color: white; -} -body .bg-dark { - background-color: #3c4144; - color: #aabbc8; -} -body #seo-title { - visibility: hidden; -} -body img.pixelated { - image-rendering: pixelated; - image-rendering: -moz-crisp-edges; - image-rendering: crisp-edges; -} - -main { - display: flex; - flex-direction: column; - align-items: center; - min-height: 100vh; -} -main .warning-banner { - background: url("/assets/images/wallpaper_warning.svg"); - width: 100%; - height: 40px; - padding: 20px 10%; - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; -} -main .warning-banner strong { - font-size: 18px; - color: #1c3db2; -} -main .image-carousel { - overflow: hidden; - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - background-color: black; - position: relative; -} -main .image-carousel img { - position: absolute; - max-width: 100%; - max-height: 400px; -} -main .image-carousel .carousel-bullets { - position: absolute; - bottom: 0; - padding: 20px; - display: flex; - gap: 10px; -} -main .image-carousel .carousel-bullets .bullet { - cursor: pointer; - width: 8px; - height: 8px; - background-color: #6b7880; - border-radius: 100%; - box-shadow: 0 0 3px black; -} -main .image-carousel .carousel-bullets .bullet.active { - background-color: #d4d9dd; -} -@media screen and (max-width: 900px) { - main .image-carousel img { - max-height: 100%; - } - main .image-carousel .carousel-bullets { - gap: 30px; - } - main .image-carousel .carousel-bullets .bullet { - width: 12px; - height: 12px; - } -} -main header { - width: 100%; - background-color: white; - position: sticky; - position: -webkit-sticky; - top: 0; - z-index: 10; -} -main header nav { - display: flex; - align-items: center; - height: 60px; -} -main header nav .home { - margin: 0 10px; -} -main header nav .home a { - display: flex; - align-items: center; - gap: 10px; -} -main header nav .home a img { - height: 40px; - width: auto; -} -main header nav .home a img.logo-text { - width: 120px; - height: auto; -} -main header nav ul { - display: flex; - padding: 0; - margin: 0; - list-style-type: none; - height: 100%; -} -main header nav ul li { - position: relative; -} -main header nav ul li a { - display: flex; - align-items: center; - height: 100%; - padding: 10px 20px; - color: #96a5ae; - font-weight: 800; - text-decoration: none; -} -main header nav ul li .submenu { - visibility: hidden; - overflow: hidden; - position: absolute; - height: auto; - max-height: 0; - transition: max-height 0.6s; - top: 100%; - left: 50%; - flex-direction: column; - background-color: white; - white-space: nowrap; -} -main header nav ul li.active a { - color: #3c4144; - border-bottom: 3px solid; -} -main header nav ul li:hover a { - color: #3c4144; -} -main header nav ul li:hover .submenu { - visibility: unset; - max-height: 1000px; -} -main header nav ul li:hover .submenu a { - color: #96a5ae; - border: none; -} -main header nav ul li:hover .submenu li:hover a { - color: #3c4144; -} -main header nav .burger { - display: none; -} -@media screen and (max-width: 560px) { - main header nav { - justify-content: space-between; - } - main header nav .burger { - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - flex-direction: column; - font-weight: bold; - border: 1px solid; - margin: 0 20px; - cursor: pointer; - border-radius: 100%; - width: 35px; - height: 35px; - color: #555d61; - font-size: 25px; - } - main header nav ul { - display: none; - } - main header nav ul.responsive-show { - display: flex; - flex-direction: column; - position: absolute; - right: 0; - max-width: 100vw; - min-width: 50vw; - top: 60px; - background-color: white; - box-shadow: 0 4px 6px 2px #0000000a; - height: unset; - } - main header nav ul.responsive-show li.active a { - border: none; - } - main header nav ul.responsive-show li .submenu { - display: flex; - visibility: visible; - position: relative; - height: unset; - max-height: unset; - transition: max-height 0.6s; - top: unset; - left: unset; - margin-left: 20px; - } - main header nav ul.responsive-show li .submenu li a { - font-weight: 400; - font-size: 14px; - color: #96a5ae; - } -} -main #page-container { - width: 100%; - flex: 1; -} -main #page-container .page-header { - background-image: url("/assets/images/wallpaper_binary.png"); - padding: 50px 0; -} -main #page-container .page-header h1 { - padding: 15px 40px 0; - font-size: 25px; - color: #4baabb; - margin: 0 auto; -} -main #page-container .page-header p { - color: #72e3f0; - font-style: italic; - padding: 15px 40px 15px 100px; - margin: 0 auto; - font-size: 18px; -} -main #page-container .page-header p * { - color: #72e3f0; -} -main #page-container .page-header .big-logo { - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - gap: 20px; - padding: 20px; -} -main #page-container .page-header .big-logo img { - width: 200px; - max-width: 100%; -} -main #page-container .page-header .big-logo img.logo-text { - width: 300px; - max-width: 100%; -} -main #page-container .page-header .logo { - padding-left: 30px; - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; -} -main #page-container .page-header .logo img { - width: 100%; -} -@media screen and (max-width: 560px) { - main #page-container .page-header h1 { - padding: 15px 20px 0; - } - main #page-container .page-header p { - padding: 20px 20px 30px 40px; - text-align: justify; - } - main #page-container .page-header .big-logo { - flex-direction: column; - } -} -main #page-container .page-header.logo-left .grid-wrapper { - display: grid; - grid-template-columns: 120px 1fr; - grid-template-rows: auto 1fr; -} -main #page-container .page-header.logo-left .grid-wrapper h1 { - width: 100%; -} -main #page-container .page-header.logo-left .grid-wrapper .logo { - grid-column: 1; - grid-row: 1; - width: 100%; -} -main #page-container .page-header.logo-left .grid-wrapper p { - margin: 0; - grid-column: 1/span 2; -} -@media screen and (max-width: 780px) { - main #page-container .page-header.logo-left .grid-wrapper h1 { - padding: 0 20px; - } - main #page-container .page-header.logo-left .grid-wrapper .logo { - padding: 0 20px; - } -} -main #page-container .page-philo { - background-image: url("/assets/images/wallpaper_binary.png"); - padding: 120px 30px; -} -main #page-container .page-philo p { - width: 100%; - max-width: 600px; - font-size: 18px; - color: #aabbc8; - text-align: center; - font-style: italic; - font-weight: bold; -} -main #page-container .page-philo p * { - color: #aabbc8; -} -main #page-container .page-contents-center { - width: 1300px; - max-width: 100%; - margin: 0 auto; -} -@media screen and (max-width: 1300px) { - main #page-container .page-contents-center { - padding: 20px 20px 0; - } -} -main #page-container h2.page-section-title { - color: #4baabb; - padding: 20px 0 10px; - width: 1300px; - max-width: 100%; - margin: 0 auto; -} -@media screen and (max-width: 1300px) { - main #page-container h2.page-section-title { - padding: 20px 20px 0; - } -} -main #page-container #home-page { - display: flex; - flex-direction: column; -} -main #page-container #home-page .section-title { - padding: 10px; - margin: 0; - color: #aabbc8; -} -main #page-container #home-page .page-header .philo-bubbles { - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - flex-wrap: wrap; - gap: 40px; - margin: 30px 20px; -} -@media screen and (max-width: 780px) { - main #page-container #home-page .page-header .philo-bubbles { - gap: 20px; - } -} -main #page-container #home-page .page-header .philo-bubbles li { - border-radius: 100%; - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - background-color: #d4d9dd; - width: 100px; - height: 100px; -} -main #page-container #home-page .page-header .philo-bubbles li * { - color: #6b7880; -} -@media screen and (max-width: 560px) { - main #page-container #home-page .page-header .philo-bubbles li { - width: 75px; - height: 75px; - } - main #page-container #home-page .page-header .philo-bubbles li * { - font-size: 12px; - } -} -main #page-container #home-page .page-header .philo-bubbles li:first-child { - background-color: #6b7880; -} -main #page-container #home-page .page-header .philo-bubbles li:first-child * { - color: white; -} -main #page-container #home-page .page-header .philo-bubbles li:last-child { - background-color: #35393c; -} -main #page-container #home-page .page-header .philo-bubbles li:last-child * { - color: #96a5ae; -} -main #page-container #home-page #news { - padding: 60px 20px; -} -main #page-container #home-page #news .articles-displayer { - margin: 0 auto 40px; -} -main #page-container #home-page #news .articles-displayer .prev-next-buttons { - display: flex; - justify-content: space-between; -} -main #page-container #home-page #news .articles-displayer .prev-next-buttons .prev-btn, -main #page-container #home-page #news .articles-displayer .prev-next-buttons .next-btn { - border: none; - background: none; - display: flex; - align-items: center; - gap: 10px; - padding: 5px 0; -} -main #page-container #home-page #news .articles-displayer .prev-next-buttons .prev-btn.disabled, -main #page-container #home-page #news .articles-displayer .prev-next-buttons .next-btn.disabled { - visibility: hidden; - pointer-events: none; -} -main #page-container #home-page #news .articles-displayer .prev-next-buttons .prev-btn.active, -main #page-container #home-page #news .articles-displayer .prev-next-buttons .next-btn.active { - cursor: pointer; - color: #6b7880; -} -main #page-container #home-page #news .articles-displayer .prev-next-buttons .prev-btn.active:hover, -main #page-container #home-page #news .articles-displayer .prev-next-buttons .next-btn.active:hover { - color: #3c4144; -} -main #page-container #home-page #news .articles-displayer .prev-next-buttons .next-btn.active::after { - content: " "; - border-style: solid; - border-width: 2px 2px 0 0; - width: 8px; - height: 8px; - transform: rotate(45deg); - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; -} -main #page-container #home-page #news .articles-displayer .prev-next-buttons .prev-btn.active::before { - content: " "; - border-style: solid; - border-width: 2px 2px 0 0; - width: 8px; - height: 8px; - transform: rotate(-135deg); - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; -} -main #page-container #home-page #news .articles-displayer article { - display: grid; - gap: 5px 50px; - grid-template-rows: auto auto auto 1fr; - position: relative; - padding-left: 20px; -} -main #page-container #home-page #news .articles-displayer article.grid-1 { - grid-template-columns: 1fr; -} -main #page-container #home-page #news .articles-displayer article.grid-2 { - grid-template-columns: 1fr 1fr; -} -main #page-container #home-page #news .articles-displayer article .date { - grid-column: 1; - grid-row: 1; - text-align: right; -} -main #page-container #home-page #news .articles-displayer article .date time { - color: #6b7880; - font-style: italic; - font-size: 12px; -} -main #page-container #home-page #news .articles-displayer article .title { - grid-column: 1; - grid-row: 2; -} -main #page-container #home-page #news .articles-displayer article .title h3 { - margin: 0 0 10px; -} -main #page-container #home-page #news .articles-displayer article .subtitle { - grid-column: 1; - grid-row: 3; - font-style: italic; - font-size: 15px; -} -main #page-container #home-page #news .articles-displayer article .body { - grid-column: 1; - grid-row: 4; - min-height: 200px; - padding-bottom: 40px; - text-align: justify; -} -main #page-container #home-page #news .articles-displayer article .image-carousel { - grid-row: 1/span 4; - grid-column: 2; -} -main #page-container #home-page #news .articles-displayer article .image-carousel img { - max-height: 100%; -} -main #page-container #home-page #news .articles-displayer article.article-placeholder { - padding: 0; -} -main #page-container #home-page #news .articles-displayer article.article-placeholder * { - background-color: #d4d9dd; -} -main #page-container #home-page #news .articles-displayer article.article-placeholder .date { - height: 10px; -} -main #page-container #home-page #news .articles-displayer article.article-placeholder .title { - height: 40px; -} -main #page-container #home-page #news .articles-displayer article.article-placeholder .subtitle { - height: 30px; -} -@media screen and (max-width: 900px) { - main #page-container #home-page #news .articles-displayer article { - gap: 5px; - padding: 0; - } - main #page-container #home-page #news .articles-displayer article.grid-2 { - grid-template-columns: 1fr; - grid-template-rows: 300px auto auto auto 1fr; - } - main #page-container #home-page #news .articles-displayer article.grid-2 .date { - grid-row: 2; - } - main #page-container #home-page #news .articles-displayer article.grid-2 .title { - grid-row: 3; - } - main #page-container #home-page #news .articles-displayer article.grid-2 .subtitle { - grid-row: 4; - } - main #page-container #home-page #news .articles-displayer article.grid-2 .body { - grid-row: 5; - } - main #page-container #home-page #news .articles-displayer article.grid-2 .image-carousel { - grid-row: 1; - grid-column: 1; - } - main #page-container #home-page #news .articles-displayer article.grid-1 .date { - grid-row: 1; - } - main #page-container #home-page #news .articles-displayer article.grid-1 .title { - grid-row: 2; - } - main #page-container #home-page #news .articles-displayer article.grid-1 .subtitle { - grid-row: 3; - } - main #page-container #home-page #news .articles-displayer article.grid-1 .body { - grid-row: 4; - } - main #page-container #home-page #news .articles-displayer article .date, -main #page-container #home-page #news .articles-displayer article .title, -main #page-container #home-page #news .articles-displayer article .subtitle { - padding: 0 10px; - } - main #page-container #home-page #news .articles-displayer article .body { - padding: 0 10px 30px; - } -} -main #page-container #home-page .poles { - display: grid; - grid-template-columns: 1fr 1fr 1fr; - gap: 30px; - padding: 100px 0; -} -main #page-container #home-page .poles .theme-card { - display: flex; - flex-direction: column; - width: 100%; - cursor: pointer; - transition: transform 0.3s; -} -main #page-container #home-page .poles .theme-card .card-img { - width: 100%; - height: 240px; - overflow: hidden; - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - flex-direction: column; - position: relative; -} -main #page-container #home-page .poles .theme-card .card-img img { - position: absolute; - max-width: 100%; - height: 100%; - padding: 10px; -} -main #page-container #home-page .poles .theme-card .card-title h2 { - margin: 0; - text-align: center; - padding: 10px 20px; - color: #4baabb; - display: block; - background-color: white; -} -main #page-container #home-page .poles .theme-card .card-description { - flex: 1; - padding: 30px 20px; -} -main #page-container #home-page .poles .theme-card .card-description p { - margin: 0; - color: #4baabb; - text-align: center; -} -main #page-container #home-page .poles .theme-card:hover { - transform: scale(1.03); -} -main #page-container #home-page .kuadrado-values { - background-image: url("/assets/images/wallpaper_binary_light.png"); - padding: 100px 0 120px; -} -main #page-container #home-page .kuadrado-values *:not(a, blue) { - color: #d4d9dd; -} -main #page-container #home-page .kuadrado-values h2 { - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - margin: 0 auto 60px; - width: 120px; - height: 120px; - background-image: url("/assets/images/wallpaper_binary.png"); - border-radius: 100%; - color: #72e3f0; -} -main #page-container #home-page .kuadrado-values ul.values-list { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 30px; -} -main #page-container #home-page .kuadrado-values ul.values-list li { - background-image: url("/assets/images/wallpaper_binary.png"); - padding: 30px 20px 40px; -} -main #page-container #home-page .kuadrado-values ul.values-list li h3 { - text-align: center; -} -main #page-container #home-page .kuadrado-values ul.values-list li p { - text-align: justify; -} -main #page-container #home-page #whoami { - padding: 20px 0 50px; -} -main #page-container #home-page #whoami .page-contents-center { - padding: 40px; - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - flex-direction: column; -} -main #page-container #home-page #whoami .page-contents-center h2 { - text-align: center; - background-color: #6b7880; - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - flex-direction: column; - width: 220px; - height: 220px; - border-radius: 100%; - padding: 30px; - margin: 40px 0; - color: #72e3f0; -} -main #page-container #home-page #whoami .page-contents-center .presentation-card .header { - display: grid; - grid-template-columns: auto 1fr; - gap: 30px; - padding: 50px 0; -} -main #page-container #home-page #whoami .page-contents-center .presentation-card .header .pic { - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - flex-direction: column; -} -main #page-container #home-page #whoami .page-contents-center .presentation-card .header .pic img { - width: 150px; - height: auto; - border-radius: 100%; -} -main #page-container #home-page #whoami .page-contents-center .presentation-card .header .header-text h3 { - font-size: 22px; - color: #96a5ae; - margin: 0; -} -main #page-container #home-page #whoami .page-contents-center .presentation-card .header .header-text h4 { - font-size: 18px; -} -main #page-container #home-page #whoami .page-contents-center .presentation-card .header .header-text strong, -main #page-container #home-page #whoami .page-contents-center .presentation-card .header .header-text h4 { - color: #96a5ae; -} -main #page-container #home-page #whoami .page-contents-center .presentation-card .body p { - font-size: 18px; - font-style: italic; - font-family: serif; - color: #555d61; -} -main #page-container #home-page #whoami .page-contents-center .presentation-card .body p *:not(blue, a) { - color: #555d61; -} -@media screen and (max-width: 560px) { - main #page-container #home-page #whoami .page-contents-center .presentation-card .header { - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - flex-direction: column; - } - main #page-container #home-page #whoami .page-contents-center .presentation-card .header .header-text { - text-align: center; - } -} -@media screen and (max-width: 900px) { - main #page-container #home-page .poles { - grid-template-columns: 1fr; - gap: 40px; - } - main #page-container #home-page .poles .theme-card { - transition: transform 0.3s; - } - main #page-container #home-page .poles .theme-card .card-img { - height: 300px; - } - main #page-container #home-page .poles .theme-card .card-img img { - min-width: unset; - height: 100%; - } - main #page-container #home-page .poles .theme-card .card-title h2 { - padding: 5px 20px; - } - main #page-container #home-page .poles .theme-card .card-description { - padding: 20px 30px; - } - main #page-container #home-page .poles .theme-card:hover { - transform: none; - } - main #page-container #home-page .kuadrado-values ul.values-list { - grid-template-columns: 1fr; - } -} -@media screen and (max-width: 1300px) { - main #page-container #home-page .poles { - padding: 20px; - } - main #page-container #home-page .articles-displayer { - padding: 0; - } -} -main #page-container #education-page h3.big { - font-size: 30px; -} -main #page-container #education-page .title-banner { - display: flex; - justify-content: flex-end; - flex-direction: column; - height: 20vw; - min-height: 250px; - background-image: url("/assets/images/popularization_banner.png"); - background-size: cover; - background-repeat: no-repeat; - background-position: center; -} -main #page-container #education-page .title-banner h2 { - color: white; - font-size: 2.5em; - margin: 40px; - text-shadow: 0 0 6px #0003; -} -main #page-container #education-page .special-announcement { - background-color: #ffd000; -} -main #page-container #education-page .special-announcement .page-contents-center { - padding: 0 20px; - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; -} -main #page-container #education-page .special-announcement .page-contents-center p { - color: #555d61; - font-size: 20px; - font-weight: 600; - margin: 0; - padding: 40px 0; -} -main #page-container #education-page .edu-themes { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 50px; - font-family: monospace; - padding: 70px 0; -} -main #page-container #education-page .edu-themes .edu-theme { - display: grid; - grid-template-columns: auto 1fr; -} -main #page-container #education-page .edu-themes .edu-theme * { - border-style: dashed; - border-color: #00ff00; - border-width: 0 0 0 0; -} -main #page-container #education-page .edu-themes .edu-theme h3 { - color: #00ff00; - grid-row: 1; - margin: 0; - padding: 10px; - display: flex; - align-items: center; - border-width: 0 0 0 1px; -} -main #page-container #education-page .edu-themes .edu-theme img { - width: 100%; - grid-row: 1/span 2; - border-width: 1px 0 1px 1px; -} -main #page-container #education-page .edu-themes .edu-theme p { - text-align: justify; - color: #72e3f0; - grid-row: 2; - margin: 0; - padding: 10px 30px 0 10px; - border-width: 1px 1px 1px 0; -} -main #page-container #education-page .edu-themes .edu-theme p * { - color: #72e3f0; -} -main #page-container #education-page .practical-info { - padding: 50px 0; -} -main #page-container #education-page .practical-info .page-contents-center { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 50px; -} -main #page-container #education-page .practical-info .page-contents-center .info-block { - display: grid; - grid-template-rows: auto 1fr; -} -main #page-container #education-page .practical-info .page-contents-center .info-block .info-title { - color: #4baabb; - margin: 0; - border-bottom: 1px dashed #aabbc8; - border-left: 1px dashed #aabbc8; - padding: 10px; -} -main #page-container #education-page .practical-info .page-contents-center .info-block .info-body { - margin: 0; - padding: 20px 10px; - border-right: 1px dashed #aabbc8; - border-bottom: 1px dashed #aabbc8; -} -main #page-container #education-page .practical-info .page-contents-center .info-block ul { - display: flex; - flex-direction: column; - gap: 5px; -} -main #page-container #education-page .practical-info .page-contents-center .info-block ul li:not(.fullwidth) { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 10px; -} -main #page-container #education-page .practical-info .page-contents-center .info-block ul.tabled li span { - padding: 3px 0; -} -main #page-container #education-page .practical-info .page-contents-center .info-block ul.tabled li span:first-child { - font-weight: bold; - color: #6b7880; -} -main #page-container #education-page .practical-info .page-contents-center .info-block ul.tabled li span:last-child { - color: #4baabb; -} -@media screen and (max-width: 1200px) { - main #page-container #education-page .edu-themes { - grid-template-columns: 1fr; - gap: 30px; - padding: 70px 0; - } -} -@media screen and (max-width: 780px) { - main #page-container #education-page .practical-info .page-contents-center { - grid-template-columns: 1fr; - gap: 30px; - } - main #page-container #education-page .practical-info .page-contents-center .info-block .info-title { - border-top: 1px dashed #aabbc8; - } - main #page-container #education-page .practical-info .page-contents-center .info-block .info-body { - border-bottom: none; - } -} -@media screen and (max-width: 560px) { - main #page-container #education-page .edu-themes .edu-theme h3 { - border-width: 0 0 1px 1px; - } - main #page-container #education-page .edu-themes .edu-theme img { - max-width: 150px; - height: auto; - grid-row: 1; - border-width: 1px 0 0 1px; - } - main #page-container #education-page .edu-themes .edu-theme p { - grid-row: 2; - grid-column: 1/span 2; - padding: 20px 10px 30px 10px; - border-width: 0 1px 1px 1px; - } -} -main #page-container #games-page .game-articles article { - display: grid; - grid-template-columns: 0.7fr 1fr; - gap: 30px 50px; - margin: 20px 0; -} -main #page-container #games-page .game-articles article.game-article { - grid-template-rows: repeat(7, auto); - width: 100%; -} -main #page-container #games-page .game-articles article.game-article .game-title { - grid-column: 1/span 2; - margin: 0; - padding: 30px 20px; - color: #aabbc8; - font-size: 35px; - font-style: italic; -} -main #page-container #games-page .game-articles article.game-article .game-banner { - grid-column: 1/span 2; - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - flex-direction: column; - background-color: black; - overflow: hidden; -} -main #page-container #games-page .game-articles article.game-article .game-banner img { - height: 500px; -} -main #page-container #games-page .game-articles article.game-article .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 { - font-size: 12px; - padding: 4px; - background-color: #d4d9dd; - color: #6b7880; - border-radius: 5px; - font-weight: 600; -} -main #page-container #games-page .game-articles article.game-article .game-subtitle { - grid-column: 1; - margin: 10px 20px; - color: #6b7880; -} -main #page-container #games-page .game-articles article.game-article .game-description { - grid-column: 1; - text-align: justify; - margin: 10px 20px 30px; -} -main #page-container #games-page .game-articles article.game-article .image-carousel { - grid-column: 2; - grid-row: 3/span 4; - height: 100%; -} -main #page-container #games-page .game-articles article.game-article .game-team { - grid-column: 1/span 2; -} -main #page-container #games-page .game-articles article.game-article .game-team h2 { - color: #6b7880; - padding: 10px 20px; - font-style: italic; - font-size: 20px; - margin: 0; -} -main #page-container #games-page .game-articles article.game-article .game-team .team-members { - display: flex; - flex-direction: column; -} -main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member { - display: grid; - grid-template-columns: 80px 1fr; - grid-template-rows: auto auto 1fr; - margin: 10px; -} -main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member .team-member-img { - grid-row: 1/span 3; - overflow: hidden; -} -main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member .team-member-img img { - width: 100%; - padding: 0 10px 0 0; -} -main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member .team-member-title { - margin: 0 0 5px; - color: #6b7880; -} -main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member .team-member-subtitle { - margin: 0 10px; - font-size: 14px; - color: #96a5ae; - font-style: italic; -} -main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member .team-member-body { - margin: 10px 10px 20px 20px; - text-align: justify; -} -main #page-container #games-page .game-articles article.placeholder { - height: 400px; -} -main #page-container #games-page .game-articles article.placeholder * { - background-color: #d4d9dd; -} -@media screen and (max-width: 900px) { - main #page-container #games-page .game-articles article { - grid-template-columns: 1fr; - } - main #page-container #games-page .game-articles article.game-article { - grid-template-rows: repeat(6, auto); - } - main #page-container #games-page .game-articles article.game-article .game-title { - grid-column: 1; - padding: 0; - font-size: 25px; - } - main #page-container #games-page .game-articles article.game-article .game-banner { - grid-column: 1; - margin: 0 -20px; - } - main #page-container #games-page .game-articles article.game-article .image-carousel { - grid-column: 1; - grid-row: 3; - height: 400px; - margin: 0 -20px; - } - main #page-container #games-page .game-articles article.game-article .game-team { - grid-column: 1; - } - main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member { - grid-template-columns: 70px 1fr; - } - main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member .team-member-img { - grid-row: 1/span 2; - } - main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member .team-member-body { - grid-column: 1/span 2; - } -} -main #page-container #software-page .software-articles { - margin: 20px auto 50px; -} -main #page-container #software-page .software-articles article.software-article { - display: grid; - grid-template-columns: 1fr 0.7fr; - margin: 0 0 30px; - gap: 10px 30px; -} -main #page-container #software-page .software-articles article.software-article .software-title { - grid-column: 1/span 2; - color: #aabbc8; - margin: 0; - padding: 10px; -} -main #page-container #software-page .software-articles article.software-article .software-date { - margin: 0; - color: #96a5ae; - font-style: italic; - text-align: right; - color: #6b7880; - font-style: italic; - font-size: 12px; -} -main #page-container #software-page .software-articles article.software-article .software-subtitle { - grid-column: 1; - margin: 10px; - color: #6b7880; -} -main #page-container #software-page .software-articles article.software-article .software-description { - grid-column: 1; - text-align: justify; - margin: 10px; -} -main #page-container #software-page .software-articles article.software-article .image-carousel { - grid-column: 2; - grid-row: 2/span 6; - min-height: 250px; -} -main #page-container #software-page .software-articles article.software-article .software-technical { - grid-column: 1; -} -main #page-container #software-page .software-articles article.software-article .software-technical h2 { - color: #6b7880; - margin: 0 10px; - padding: 10px 0 0; - font-size: 16px; -} -main #page-container #software-page .software-articles article.software-article .software-technical ul.technical-details { - margin: 10px; -} -main #page-container #software-page .software-articles article.software-article .software-technical ul.technical-details .detail { - display: grid; - grid-template-columns: 1fr auto; - font-size: 12px; - border-bottom: 1px solid #d4d9dd; - padding: 5px 0; -} -main #page-container #software-page .software-articles article.software-article .software-technical ul.technical-details .detail label { - font-weight: bold; - color: #6b7880; -} -main #page-container #software-page .software-articles article.software-article .software-technical ul.technical-details .detail ul { - display: flex; - flex-wrap: wrap; - gap: 10px; -} -main #page-container #software-page .software-articles article.software-article .software-technical ul.releases { - margin: 10px; -} -main #page-container #software-page .software-articles article.software-article .software-technical .detail { - display: grid; - grid-template-columns: 1fr auto; - font-size: 12px; - border-bottom: 1px solid #d4d9dd; - padding: 5px 0; -} -main #page-container #software-page .software-articles article.software-article .software-technical .detail label { - font-weight: bold; - color: #6b7880; -} -main #page-container #software-page .software-articles article.software-article .software-technical .detail .label { - color: #aabbc8; -} -main #page-container #software-page .software-articles article.software-article .software-technical .detail ul { - display: flex; - flex-wrap: wrap; - gap: 10px; -} -@media screen and (max-width: 900px) { - main #page-container #software-page .software-articles article.software-article { - grid-template-columns: 1fr; - } - main #page-container #software-page .software-articles article.software-article .software-title { - grid-column: 1; - } - main #page-container #software-page .software-articles article.software-article .image-carousel { - grid-column: 1; - grid-row: 2; - height: 200px; - } - main #page-container #software-page .software-articles article.software-article .software-technical { - grid-column: 1; - } -} -main #page-container #software-page .software-articles article.placeholder { - display: flex; - flex-direction: column; - gap: 10px; - margin: 30px; -} -main #page-container #software-page .software-articles article.placeholder * { - background-color: #d4d9dd; -} -main #page-container #software-page .software-articles article.placeholder .title { - height: 60px; -} -main #page-container #software-page .software-articles article.placeholder .body { - height: 400px; -} -main #page-container #software-page .software-articles article.placeholder .details { - height: 200px; -} -main footer { - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - flex-direction: column; - width: 100%; - background-image: url("/assets/images/wallpaper_binary.png"); - padding: 40px 20px; - gap: 20px; - font-size: 12px; -} -main footer span { - color: #96a5ae; - text-align: center; -} -main footer .logo { - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - gap: 10px; -} -main footer .logo img { - width: 35px; -} -main footer .logo img.text-logo { - width: 100px; -} -main footer .social { - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - gap: 20px; -} -main footer .social a { - background-color: #555d61; - display: flex; - justify-content: center; - align-items: center; - flex-direction: row; - width: 25px; - height: 25px; - font-weight: bold; - font-size: 16px; - border-radius: 100%; -} - -/*# sourceMappingURL=style.css.map */ +body{font-family:Arial,Helvetica,sans-serif;margin:0}body *{box-sizing:border-box;color:#35393c;line-height:1.3em}body ul{margin:0;padding:0;list-style-type:none}body a{color:#4baabb;text-decoration:none}body a:hover{color:#72e3f0}body blue{color:#4baabb}body red{color:#9c3030}body green{color:#368736}body emoji{font-style:initial;font-size:25px}body .bg-blue{background-color:#4baabb;color:#fff}body .bg-dark{background-color:#3c4144;color:#aabbc8}body #seo-title{visibility:hidden}body img.pixelated{image-rendering:pixelated;image-rendering:-moz-crisp-edges;image-rendering:crisp-edges}main{display:flex;flex-direction:column;align-items:center;min-height:100vh}main .warning-banner{background:url("/assets/images/wallpaper_warning.svg");width:100%;height:40px;padding:20px 10%;display:flex;justify-content:center;align-items:center;flex-direction:row}main .warning-banner strong{font-size:18px;color:#1c3db2}main .image-carousel{overflow:hidden;display:flex;justify-content:center;align-items:center;flex-direction:row;background-color:#000;position:relative}main .image-carousel img{position:absolute;max-width:100%;max-height:400px}main .image-carousel .carousel-bullets{position:absolute;bottom:0;padding:20px;display:flex;gap:10px}main .image-carousel .carousel-bullets .bullet{cursor:pointer;width:8px;height:8px;background-color:#6b7880;border-radius:100%;box-shadow:0 0 3px #000}main .image-carousel .carousel-bullets .bullet.active{background-color:#d4d9dd}@media screen and (max-width: 900px){main .image-carousel img{max-height:100%}main .image-carousel .carousel-bullets{gap:30px}main .image-carousel .carousel-bullets .bullet{width:12px;height:12px}}main header{width:100%;background-color:#fff;position:sticky;position:-webkit-sticky;top:0;z-index:10}main header nav{display:flex;align-items:center;height:60px}main header nav .home{margin:0 10px}main header nav .home a{display:flex;align-items:center;gap:10px}main header nav .home a img{height:40px;width:auto}main header nav .home a img.logo-text{width:120px;height:auto}main header nav ul{display:flex;padding:0;margin:0;list-style-type:none;height:100%}main header nav ul li{position:relative}main header nav ul li a{display:flex;align-items:center;height:100%;padding:10px 20px;color:#96a5ae;font-weight:800;text-decoration:none}main header nav ul li .submenu{visibility:hidden;overflow:hidden;position:absolute;height:auto;max-height:0;transition:max-height .6s;top:100%;left:50%;flex-direction:column;background-color:#fff;white-space:nowrap}main header nav ul li.active a{color:#3c4144;border-bottom:3px solid}main header nav ul li:hover a{color:#3c4144}main header nav ul li:hover .submenu{visibility:unset;max-height:1000px}main header nav ul li:hover .submenu a{color:#96a5ae;border:none}main header nav ul li:hover .submenu li:hover a{color:#3c4144}main header nav .burger{display:none}@media screen and (max-width: 560px){main header nav{justify-content:space-between}main header nav .burger{display:flex;justify-content:center;align-items:center;flex-direction:row;flex-direction:column;font-weight:bold;border:1px solid;margin:0 20px;cursor:pointer;border-radius:100%;width:35px;height:35px;color:#555d61;font-size:25px}main header nav ul{display:none}main header nav ul.responsive-show{display:flex;flex-direction:column;position:absolute;right:0;max-width:100vw;min-width:50vw;top:60px;background-color:#fff;box-shadow:0 4px 6px 2px #0000000a;height:unset}main header nav ul.responsive-show li.active a{border:none}main header nav ul.responsive-show li .submenu{display:flex;visibility:visible;position:relative;height:unset;max-height:unset;transition:max-height .6s;top:unset;left:unset;margin-left:20px}main header nav ul.responsive-show li .submenu li a{font-weight:400;font-size:14px;color:#96a5ae}}main #page-container{width:100%;flex:1}main #page-container .page-header{background-image:url("/assets/images/wallpaper_binary.png");padding:50px 0}main #page-container .page-header h1{padding:15px 40px 0;font-size:25px;color:#4baabb;margin:0 auto}main #page-container .page-header p{color:#72e3f0;font-style:italic;padding:15px 40px 15px 100px;margin:0 auto;font-size:18px}main #page-container .page-header p *{color:#72e3f0}main #page-container .page-header .big-logo{display:flex;justify-content:center;align-items:center;flex-direction:row;gap:20px;padding:20px}main #page-container .page-header .big-logo img{width:200px;max-width:100%}main #page-container .page-header .big-logo img.logo-text{width:300px;max-width:100%}main #page-container .page-header .logo{padding-left:30px;display:flex;justify-content:center;align-items:center;flex-direction:row}main #page-container .page-header .logo img{width:100%}@media screen and (max-width: 560px){main #page-container .page-header h1{padding:15px 20px 0}main #page-container .page-header p{padding:20px 20px 30px 40px;text-align:justify}main #page-container .page-header .big-logo{flex-direction:column}}main #page-container .page-header.logo-left .grid-wrapper{display:grid;grid-template-columns:120px 1fr;grid-template-rows:auto 1fr}main #page-container .page-header.logo-left .grid-wrapper h1{width:100%}main #page-container .page-header.logo-left .grid-wrapper .logo{grid-column:1;grid-row:1;width:100%}main #page-container .page-header.logo-left .grid-wrapper p{margin:0;grid-column:1/span 2}@media screen and (max-width: 780px){main #page-container .page-header.logo-left .grid-wrapper h1{padding:0 20px}main #page-container .page-header.logo-left .grid-wrapper .logo{padding:0 20px}}main #page-container .page-philo{background-image:url("/assets/images/wallpaper_binary.png");padding:120px 30px}main #page-container .page-philo p{width:100%;max-width:600px;font-size:18px;color:#aabbc8;text-align:center;font-style:italic;font-weight:bold}main #page-container .page-philo p *{color:#aabbc8}main #page-container .page-contents-center{width:1300px;max-width:100%;margin:0 auto}@media screen and (max-width: 1300px){main #page-container .page-contents-center{padding:20px 20px 0}}main #page-container h2.page-section-title{color:#4baabb;padding:20px 0 10px;width:1300px;max-width:100%;margin:0 auto}@media screen and (max-width: 1300px){main #page-container h2.page-section-title{padding:20px 20px 0}}main #page-container #home-page{display:flex;flex-direction:column}main #page-container #home-page .section-title{padding:10px;margin:0;color:#aabbc8}main #page-container #home-page .page-header .philo-bubbles{display:flex;justify-content:center;align-items:center;flex-direction:row;flex-wrap:wrap;gap:40px;margin:30px 20px}@media screen and (max-width: 780px){main #page-container #home-page .page-header .philo-bubbles{gap:20px}}main #page-container #home-page .page-header .philo-bubbles li{border-radius:100%;display:flex;justify-content:center;align-items:center;flex-direction:row;background-color:#d4d9dd;width:100px;height:100px}main #page-container #home-page .page-header .philo-bubbles li *{color:#6b7880}@media screen and (max-width: 560px){main #page-container #home-page .page-header .philo-bubbles li{width:75px;height:75px}main #page-container #home-page .page-header .philo-bubbles li *{font-size:12px}}main #page-container #home-page .page-header .philo-bubbles li:first-child{background-color:#6b7880}main #page-container #home-page .page-header .philo-bubbles li:first-child *{color:#fff}main #page-container #home-page .page-header .philo-bubbles li:last-child{background-color:#35393c}main #page-container #home-page .page-header .philo-bubbles li:last-child *{color:#96a5ae}main #page-container #home-page #news{padding:60px 20px}main #page-container #home-page #news .articles-displayer{margin:0 auto 40px}main #page-container #home-page #news .articles-displayer .prev-next-buttons{display:flex;justify-content:space-between}main #page-container #home-page #news .articles-displayer .prev-next-buttons .prev-btn,main #page-container #home-page #news .articles-displayer .prev-next-buttons .next-btn{border:none;background:none;display:flex;align-items:center;gap:10px;padding:5px 0}main #page-container #home-page #news .articles-displayer .prev-next-buttons .prev-btn.disabled,main #page-container #home-page #news .articles-displayer .prev-next-buttons .next-btn.disabled{visibility:hidden;pointer-events:none}main #page-container #home-page #news .articles-displayer .prev-next-buttons .prev-btn.active,main #page-container #home-page #news .articles-displayer .prev-next-buttons .next-btn.active{cursor:pointer;color:#6b7880}main #page-container #home-page #news .articles-displayer .prev-next-buttons .prev-btn.active:hover,main #page-container #home-page #news .articles-displayer .prev-next-buttons .next-btn.active:hover{color:#3c4144}main #page-container #home-page #news .articles-displayer .prev-next-buttons .next-btn.active::after{content:" ";border-style:solid;border-width:2px 2px 0 0;width:8px;height:8px;transform:rotate(45deg);display:flex;justify-content:center;align-items:center;flex-direction:row}main #page-container #home-page #news .articles-displayer .prev-next-buttons .prev-btn.active::before{content:" ";border-style:solid;border-width:2px 2px 0 0;width:8px;height:8px;transform:rotate(-135deg);display:flex;justify-content:center;align-items:center;flex-direction:row}main #page-container #home-page #news .articles-displayer article{display:grid;gap:5px 50px;grid-template-rows:auto auto auto 1fr;position:relative;padding-left:20px}main #page-container #home-page #news .articles-displayer article.grid-1{grid-template-columns:1fr}main #page-container #home-page #news .articles-displayer article.grid-2{grid-template-columns:1fr 1fr}main #page-container #home-page #news .articles-displayer article .date{grid-column:1;grid-row:1;text-align:right}main #page-container #home-page #news .articles-displayer article .date time{color:#6b7880;font-style:italic;font-size:12px}main #page-container #home-page #news .articles-displayer article .title{grid-column:1;grid-row:2}main #page-container #home-page #news .articles-displayer article .title h3{margin:0 0 10px}main #page-container #home-page #news .articles-displayer article .subtitle{grid-column:1;grid-row:3;font-style:italic;font-size:15px}main #page-container #home-page #news .articles-displayer article .body{grid-column:1;grid-row:4;min-height:200px;padding-bottom:40px;text-align:justify}main #page-container #home-page #news .articles-displayer article .image-carousel{grid-row:1/span 4;grid-column:2}main #page-container #home-page #news .articles-displayer article .image-carousel img{max-height:100%}main #page-container #home-page #news .articles-displayer article.article-placeholder{padding:0}main #page-container #home-page #news .articles-displayer article.article-placeholder *{background-color:#d4d9dd}main #page-container #home-page #news .articles-displayer article.article-placeholder .date{height:10px}main #page-container #home-page #news .articles-displayer article.article-placeholder .title{height:40px}main #page-container #home-page #news .articles-displayer article.article-placeholder .subtitle{height:30px}@media screen and (max-width: 900px){main #page-container #home-page #news .articles-displayer article{gap:5px;padding:0}main #page-container #home-page #news .articles-displayer article.grid-2{grid-template-columns:1fr;grid-template-rows:300px auto auto auto 1fr}main #page-container #home-page #news .articles-displayer article.grid-2 .date{grid-row:2}main #page-container #home-page #news .articles-displayer article.grid-2 .title{grid-row:3}main #page-container #home-page #news .articles-displayer article.grid-2 .subtitle{grid-row:4}main #page-container #home-page #news .articles-displayer article.grid-2 .body{grid-row:5}main #page-container #home-page #news .articles-displayer article.grid-2 .image-carousel{grid-row:1;grid-column:1}main #page-container #home-page #news .articles-displayer article.grid-1 .date{grid-row:1}main #page-container #home-page #news .articles-displayer article.grid-1 .title{grid-row:2}main #page-container #home-page #news .articles-displayer article.grid-1 .subtitle{grid-row:3}main #page-container #home-page #news .articles-displayer article.grid-1 .body{grid-row:4}main #page-container #home-page #news .articles-displayer article .date,main #page-container #home-page #news .articles-displayer article .title,main #page-container #home-page #news .articles-displayer article .subtitle{padding:0 10px}main #page-container #home-page #news .articles-displayer article .body{padding:0 10px 30px}}main #page-container #home-page .poles{display:grid;grid-template-columns:1fr 1fr 1fr;gap:30px;padding:100px 0}main #page-container #home-page .poles .theme-card{display:flex;flex-direction:column;width:100%;cursor:pointer;transition:transform .3s}main #page-container #home-page .poles .theme-card .card-img{width:100%;height:240px;overflow:hidden;display:flex;justify-content:center;align-items:center;flex-direction:row;flex-direction:column;position:relative}main #page-container #home-page .poles .theme-card .card-img img{position:absolute;max-width:100%;height:100%;padding:10px}main #page-container #home-page .poles .theme-card .card-title h2{margin:0;text-align:center;padding:10px 20px;color:#4baabb;display:block;background-color:#fff}main #page-container #home-page .poles .theme-card .card-description{flex:1;padding:30px 20px}main #page-container #home-page .poles .theme-card .card-description p{margin:0;color:#4baabb;text-align:center}main #page-container #home-page .poles .theme-card:hover{transform:scale(1.03)}main #page-container #home-page .kuadrado-values{background-image:url("/assets/images/wallpaper_binary_light.png");padding:100px 0 120px}main #page-container #home-page .kuadrado-values *:not(a,blue){color:#d4d9dd}main #page-container #home-page .kuadrado-values h2{display:flex;justify-content:center;align-items:center;flex-direction:row;margin:0 auto 60px;width:120px;height:120px;background-image:url("/assets/images/wallpaper_binary.png");border-radius:100%;color:#72e3f0}main #page-container #home-page .kuadrado-values ul.values-list{display:grid;grid-template-columns:repeat(3, 1fr);gap:30px}main #page-container #home-page .kuadrado-values ul.values-list li{background-image:url("/assets/images/wallpaper_binary.png");padding:30px 20px 40px}main #page-container #home-page .kuadrado-values ul.values-list li h3{text-align:center}main #page-container #home-page .kuadrado-values ul.values-list li p{text-align:justify}main #page-container #home-page #whoami{padding:20px 0 50px}main #page-container #home-page #whoami .page-contents-center{padding:40px;display:flex;justify-content:center;align-items:center;flex-direction:row;flex-direction:column}main #page-container #home-page #whoami .page-contents-center h2{text-align:center;background-color:#6b7880;display:flex;justify-content:center;align-items:center;flex-direction:row;flex-direction:column;width:220px;height:220px;border-radius:100%;padding:30px;margin:40px 0;color:#72e3f0}main #page-container #home-page #whoami .page-contents-center .presentation-card .header{display:grid;grid-template-columns:auto 1fr;gap:30px;padding:50px 0}main #page-container #home-page #whoami .page-contents-center .presentation-card .header .pic{display:flex;justify-content:center;align-items:center;flex-direction:row;flex-direction:column}main #page-container #home-page #whoami .page-contents-center .presentation-card .header .pic img{width:150px;height:auto;border-radius:100%}main #page-container #home-page #whoami .page-contents-center .presentation-card .header .header-text h3{font-size:22px;color:#96a5ae;margin:0}main #page-container #home-page #whoami .page-contents-center .presentation-card .header .header-text h4{font-size:18px}main #page-container #home-page #whoami .page-contents-center .presentation-card .header .header-text strong,main #page-container #home-page #whoami .page-contents-center .presentation-card .header .header-text h4{color:#96a5ae}main #page-container #home-page #whoami .page-contents-center .presentation-card .body p{font-size:18px;font-style:italic;font-family:serif;color:#555d61}main #page-container #home-page #whoami .page-contents-center .presentation-card .body p *:not(blue,a){color:#555d61}@media screen and (max-width: 560px){main #page-container #home-page #whoami .page-contents-center .presentation-card .header{display:flex;justify-content:center;align-items:center;flex-direction:row;flex-direction:column}main #page-container #home-page #whoami .page-contents-center .presentation-card .header .header-text{text-align:center}}@media screen and (max-width: 900px){main #page-container #home-page .poles{grid-template-columns:1fr;gap:40px}main #page-container #home-page .poles .theme-card{transition:transform .3s}main #page-container #home-page .poles .theme-card .card-img{height:300px}main #page-container #home-page .poles .theme-card .card-img img{min-width:unset;height:100%}main #page-container #home-page .poles .theme-card .card-title h2{padding:5px 20px}main #page-container #home-page .poles .theme-card .card-description{padding:20px 30px}main #page-container #home-page .poles .theme-card:hover{transform:none}main #page-container #home-page .kuadrado-values ul.values-list{grid-template-columns:1fr}}@media screen and (max-width: 1300px){main #page-container #home-page .poles{padding:20px}main #page-container #home-page .articles-displayer{padding:0}}main #page-container #education-page h3.big{font-size:30px}main #page-container #education-page .title-banner{display:flex;justify-content:flex-end;flex-direction:column;height:20vw;min-height:250px;background-image:url("/assets/images/popularization_banner.png");background-size:cover;background-repeat:no-repeat;background-position:center}main #page-container #education-page .title-banner h2{color:#fff;font-size:2.5em;margin:40px;text-shadow:0 0 6px #0003}main #page-container #education-page .special-announcement{background-color:#ffd000}main #page-container #education-page .special-announcement .page-contents-center{padding:0 20px;display:flex;justify-content:center;align-items:center;flex-direction:row}main #page-container #education-page .special-announcement .page-contents-center p{color:#555d61;font-size:20px;font-weight:600;margin:0;padding:40px 0}main #page-container #education-page .edu-themes{display:grid;grid-template-columns:1fr 1fr;gap:50px;font-family:monospace;padding:70px 0}main #page-container #education-page .edu-themes .edu-theme{display:grid;grid-template-columns:auto 1fr}main #page-container #education-page .edu-themes .edu-theme *{border-style:dashed;border-color:lime;border-width:0 0 0 0}main #page-container #education-page .edu-themes .edu-theme h3{color:lime;grid-row:1;margin:0;padding:10px;display:flex;align-items:center;border-width:0 0 0 1px}main #page-container #education-page .edu-themes .edu-theme img{width:100%;grid-row:1/span 2;border-width:1px 0 1px 1px}main #page-container #education-page .edu-themes .edu-theme p{text-align:justify;color:#72e3f0;grid-row:2;margin:0;padding:10px 30px 0 10px;border-width:1px 1px 1px 0}main #page-container #education-page .edu-themes .edu-theme p *{color:#72e3f0}main #page-container #education-page .practical-info{padding:50px 0}main #page-container #education-page .practical-info .page-contents-center{display:grid;grid-template-columns:1fr 1fr;gap:50px}main #page-container #education-page .practical-info .page-contents-center .info-block{display:grid;grid-template-rows:auto 1fr}main #page-container #education-page .practical-info .page-contents-center .info-block .info-title{color:#4baabb;margin:0;border-bottom:1px dashed #aabbc8;border-left:1px dashed #aabbc8;padding:10px}main #page-container #education-page .practical-info .page-contents-center .info-block .info-body{margin:0;padding:20px 10px;border-right:1px dashed #aabbc8;border-bottom:1px dashed #aabbc8}main #page-container #education-page .practical-info .page-contents-center .info-block ul{display:flex;flex-direction:column;gap:5px}main #page-container #education-page .practical-info .page-contents-center .info-block ul li:not(.fullwidth){display:grid;grid-template-columns:1fr 1fr;gap:10px}main #page-container #education-page .practical-info .page-contents-center .info-block ul.tabled li span{padding:3px 0}main #page-container #education-page .practical-info .page-contents-center .info-block ul.tabled li span:first-child{font-weight:bold;color:#6b7880}main #page-container #education-page .practical-info .page-contents-center .info-block ul.tabled li span:last-child{color:#4baabb}@media screen and (max-width: 1200px){main #page-container #education-page .edu-themes{grid-template-columns:1fr;gap:30px;padding:70px 0}}@media screen and (max-width: 780px){main #page-container #education-page .practical-info .page-contents-center{grid-template-columns:1fr;gap:30px}main #page-container #education-page .practical-info .page-contents-center .info-block .info-title{border-top:1px dashed #aabbc8}main #page-container #education-page .practical-info .page-contents-center .info-block .info-body{border-bottom:none}}@media screen and (max-width: 560px){main #page-container #education-page .edu-themes .edu-theme h3{border-width:0 0 1px 1px}main #page-container #education-page .edu-themes .edu-theme img{max-width:150px;height:auto;grid-row:1;border-width:1px 0 0 1px}main #page-container #education-page .edu-themes .edu-theme p{grid-row:2;grid-column:1/span 2;padding:20px 10px 30px 10px;border-width:0 1px 1px 1px}}main #page-container #games-page .game-articles article{display:grid;grid-template-columns:.7fr 1fr;gap:30px 50px;margin:20px 0}main #page-container #games-page .game-articles article.game-article{grid-template-rows:repeat(7, auto);width:100%}main #page-container #games-page .game-articles article.game-article .game-title{grid-column:1/span 2;margin:0;padding:30px 20px;color:#aabbc8;font-size:35px;font-style:italic}main #page-container #games-page .game-articles article.game-article .game-banner{grid-column:1/span 2;display:flex;justify-content:center;align-items:center;flex-direction:row;flex-direction:column;background-color:#000;overflow:hidden}main #page-container #games-page .game-articles article.game-article .game-banner img{height:500px}main #page-container #games-page .game-articles article.game-article .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{font-size:12px;padding:4px;background-color:#d4d9dd;color:#6b7880;border-radius:5px;font-weight:600}main #page-container #games-page .game-articles article.game-article .game-subtitle{grid-column:1;margin:10px 20px;color:#6b7880}main #page-container #games-page .game-articles article.game-article .game-description{grid-column:1;text-align:justify;margin:10px 20px 30px}main #page-container #games-page .game-articles article.game-article .image-carousel{grid-column:2;grid-row:3/span 4;height:100%}main #page-container #games-page .game-articles article.game-article .game-team{grid-column:1/span 2}main #page-container #games-page .game-articles article.game-article .game-team h2{color:#6b7880;padding:10px 20px;font-style:italic;font-size:20px;margin:0}main #page-container #games-page .game-articles article.game-article .game-team .team-members{display:flex;flex-direction:column}main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member{display:grid;grid-template-columns:80px 1fr;grid-template-rows:auto auto 1fr;margin:10px}main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member .team-member-img{grid-row:1/span 3;overflow:hidden}main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member .team-member-img img{width:100%;padding:0 10px 0 0}main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member .team-member-title{margin:0 0 5px;color:#6b7880}main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member .team-member-subtitle{margin:0 10px;font-size:14px;color:#96a5ae;font-style:italic}main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member .team-member-body{margin:10px 10px 20px 20px;text-align:justify}main #page-container #games-page .game-articles article.placeholder{height:400px}main #page-container #games-page .game-articles article.placeholder *{background-color:#d4d9dd}@media screen and (max-width: 900px){main #page-container #games-page .game-articles article{grid-template-columns:1fr}main #page-container #games-page .game-articles article.game-article{grid-template-rows:repeat(6, auto)}main #page-container #games-page .game-articles article.game-article .game-title{grid-column:1;padding:0;font-size:25px}main #page-container #games-page .game-articles article.game-article .game-banner{grid-column:1;margin:0 -20px}main #page-container #games-page .game-articles article.game-article .image-carousel{grid-column:1;grid-row:3;height:400px;margin:0 -20px}main #page-container #games-page .game-articles article.game-article .game-team{grid-column:1}main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member{grid-template-columns:70px 1fr}main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member .team-member-img{grid-row:1/span 2}main #page-container #games-page .game-articles article.game-article .game-team .team-members .team-member .team-member-body{grid-column:1/span 2}}main #page-container #software-page .software-articles{margin:20px auto 50px}main #page-container #software-page .software-articles article.software-article{display:grid;grid-template-columns:1fr .7fr;margin:0 0 30px;gap:10px 30px}main #page-container #software-page .software-articles article.software-article .software-title{grid-column:1/span 2;color:#aabbc8;margin:0;padding:10px}main #page-container #software-page .software-articles article.software-article .software-date{margin:0;color:#96a5ae;font-style:italic;text-align:right;color:#6b7880;font-style:italic;font-size:12px}main #page-container #software-page .software-articles article.software-article .software-subtitle{grid-column:1;margin:10px;color:#6b7880}main #page-container #software-page .software-articles article.software-article .software-description{grid-column:1;text-align:justify;margin:10px}main #page-container #software-page .software-articles article.software-article .image-carousel{grid-column:2;grid-row:2/span 6;min-height:250px}main #page-container #software-page .software-articles article.software-article .software-technical{grid-column:1}main #page-container #software-page .software-articles article.software-article .software-technical h2{color:#6b7880;margin:0 10px;padding:10px 0 0;font-size:16px}main #page-container #software-page .software-articles article.software-article .software-technical ul.technical-details{margin:10px}main #page-container #software-page .software-articles article.software-article .software-technical ul.technical-details .detail{display:grid;grid-template-columns:1fr auto;font-size:12px;border-bottom:1px solid #d4d9dd;padding:5px 0}main #page-container #software-page .software-articles article.software-article .software-technical ul.technical-details .detail label{font-weight:bold;color:#6b7880}main #page-container #software-page .software-articles article.software-article .software-technical ul.technical-details .detail ul{display:flex;flex-wrap:wrap;gap:10px}main #page-container #software-page .software-articles article.software-article .software-technical ul.releases{margin:10px}main #page-container #software-page .software-articles article.software-article .software-technical .detail{display:grid;grid-template-columns:1fr auto;font-size:12px;border-bottom:1px solid #d4d9dd;padding:5px 0}main #page-container #software-page .software-articles article.software-article .software-technical .detail label{font-weight:bold;color:#6b7880}main #page-container #software-page .software-articles article.software-article .software-technical .detail .label{color:#aabbc8}main #page-container #software-page .software-articles article.software-article .software-technical .detail ul{display:flex;flex-wrap:wrap;gap:10px}@media screen and (max-width: 900px){main #page-container #software-page .software-articles article.software-article{grid-template-columns:1fr}main #page-container #software-page .software-articles article.software-article .software-title{grid-column:1}main #page-container #software-page .software-articles article.software-article .image-carousel{grid-column:1;grid-row:2;height:200px}main #page-container #software-page .software-articles article.software-article .software-technical{grid-column:1}}main #page-container #software-page .software-articles article.placeholder{display:flex;flex-direction:column;gap:10px;margin:30px}main #page-container #software-page .software-articles article.placeholder *{background-color:#d4d9dd}main #page-container #software-page .software-articles article.placeholder .title{height:60px}main #page-container #software-page .software-articles article.placeholder .body{height:400px}main #page-container #software-page .software-articles article.placeholder .details{height:200px}main footer{display:flex;justify-content:center;align-items:center;flex-direction:row;flex-direction:column;width:100%;background-image:url("/assets/images/wallpaper_binary.png");padding:40px 20px;gap:20px;font-size:12px}main footer span{color:#96a5ae;text-align:center}main footer .logo{display:flex;justify-content:center;align-items:center;flex-direction:row;gap:10px}main footer .logo img{width:35px}main footer .logo img.text-logo{width:100px}main footer .social{display:flex;justify-content:center;align-items:center;flex-direction:row;gap:20px}main footer .social a{background-color:#555d61;display:flex;justify-content:center;align-items:center;flex-direction:row;width:25px;height:25px;font-weight:bold;font-size:16px;border-radius:100%}/*# sourceMappingURL=style.css.map */ diff --git a/public/style/theme.css b/public/style/theme.css deleted file mode 100644 index be282753b4b9e2e1ea74fcf748545648d82d3617..0000000000000000000000000000000000000000 --- a/public/style/theme.css +++ /dev/null @@ -1,3 +0,0 @@ - - -/*# sourceMappingURL=theme.css.map */ diff --git a/src/style.scss b/src/style.scss index ffed060e308f8d73a936524092cdda7d01044574..5095b552e321162c058c0d998b7c33edb913ccc3 100644 --- a/src/style.scss +++ b/src/style.scss @@ -371,6 +371,7 @@ main { padding: 20px 0 10px; @include page-contents-center; } + @import "./homepage.scss"; @import "./pages/education/education.scss"; @import "./pages/games/games.scss";