Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const fs = require("fs");
  2. const path = require("path");
  3. const cyrillicToTransit = require("cyrillic-to-translit-js");
  4.  
  5. const { paths } = require("../../lib/config");
  6. const { languages, clm, structure } = require(paths.clm.config);
  7. const { getFullId } = require("../../lib/util/sl-id-parser");
  8. const webpackSlideBuild = require("../../lib/webpack-slide-builder");
  9. const thumbMaker = require("../../lib/thumb-maker");
  10. const archiveMaker = require("../../lib/archive-maker");
  11.  
  12. module.exports = async (api, projectOptions, args, slidesToBuild, clmName) => {
  13.   let lang;
  14.   for (let sl of slidesToBuild) {
  15.     const htmlContent = `<!DOCTYPE html>
  16. <html lang="en">
  17.   <head>
  18.     <meta charset="UTF-8" />
  19.     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  20.     <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  21.     <title>Document</title>
  22.   </head>
  23.   <body>
  24.     <div id="div"></div>
  25.     <script>
  26.       var url = window.location.href;
  27.       var re = /index.html/gi;
  28.       var newstr = url.replace(re, "${clm.productId}_${sl.lang.toUpperCase()}_${
  29.      structure[0].id
  30.    }.html");
  31.  
  32.       window.location.href = newstr;
  33.     </script>
  34.   </body>
  35. </html>`;
  36.  
  37.     lang = sl.lang;
  38.  
  39.     fs.writeFile(
  40.       `${path.join(paths.dist, clmName, sl.lang)}/index.html`,
  41.       htmlContent,
  42.       error => {
  43.         /* handle error */
  44.       }
  45.     );
  46.  
  47.     const outSlName = getFullId(sl.id, sl.lang);
  48.  
  49.     process.env.VUE_APP_CLM = "pharma-touch";
  50.     process.env.VUE_APP_SL_ID = sl.id;
  51.     process.env.VUE_APP_SL_PATH = sl.path;
  52.     process.env.VUE_APP_SL_LANG = sl.lang;
  53.     process.env.VUE_APP_OUT_DIR_PATH = path.join(paths.dist, clmName, sl.lang);
  54.     process.env.VUE_APP_OUT_HTML_NAME = outSlName;
  55.  
  56.     /** Webpack Build **/
  57.     await webpackSlideBuild(api, projectOptions);
  58.  
  59.         if (!args.options["no-screens"] && args.options["local"]) {
  60.       await require("../../lib/screens-maker")(sl, false);
  61.     } else if (!args.options["no-screens"] && !args.options["local"]) {
  62.       await require("../../lib/screens-maker")(sl, true);
  63.     }
  64.  
  65.  
  66.        await thumbMaker({
  67.       width: 435,
  68.       height: 272,
  69.       thumbName: `${process.env.VUE_APP_SL_ID}.jpg`,
  70.       thumbPath: path.join(
  71.         paths.src,
  72.         "components",
  73.         "QuadraMenu",
  74.         "images",
  75.         "map"
  76.       )
  77.     });
  78.  
  79.     fs.readdirSync(`${path.join(paths.dist, clmName, lang)}/js`).forEach(
  80.       file => {
  81.         let pathToJS = `${path.join(paths.dist, clmName, lang)}/js/${file}`;
  82.  
  83.         let JS = fs.readFileSync(pathToJS, "utf8");
  84.         var strict = JS.replace(/"use strict"/g, " ");
  85.  
  86.         fs.writeFileSync(pathToJS, strict, "utf8");
  87.  
  88.         JS = fs.readFileSync(pathToJS, "utf8");
  89.         var es = JS.replace(/let /g, "var ");
  90.  
  91.         fs.writeFileSync(pathToJS, es, "utf8");
  92.       }
  93.     );
  94.   }
  95.  
  96.   for (let lang of languages.filter(lang => args.lang.test(lang))) {
  97.     const outBuildDir = path.join(paths.dist, clmName, lang);
  98.  
  99.     /** Create structure.json **/
  100.     createStructureForPT(outBuildDir, lang);
  101.  
  102.     /** Create Archive **/
  103.     await archiveMaker({
  104.       contentPath: outBuildDir,
  105.       archiveName: `${clm.productId}_${lang.toUpperCase()}`,
  106.       archivePath: path.join(paths.zip, clmName)
  107.     });
  108.   }
  109. };
  110.  
  111. /**
  112.  * Create special Json for pharma-touch
  113.  *
  114.  * @param outBuildDir
  115.  * @param lang
  116.  */
  117. function createStructureForPT(outBuildDir, lang) {
  118.   const json = {};
  119.  
  120.   json.slides = structure.map((sl, index) => ({
  121.     mapname: clm.productId,
  122.     name: sl.name ? getTransitName(sl.name, lang) : sl.id,
  123.     filename: getFullId(sl.id, lang) + ".html",
  124.     preview: getFullId(sl.id, lang) + ".jpg",
  125.     ishidden: 0,
  126.     position: index + 1
  127.   }));
  128.  
  129.   fs.writeFileSync(
  130.     path.join(outBuildDir, "slides.json"),
  131.     JSON.stringify(json, null, "  ")
  132.   );
  133. }
  134.  
  135. /**
  136.  * Return translit name
  137.  *
  138.  * @param name
  139.  * @param lang
  140.  * @returns {string}
  141.  */
  142. function getTransitName(name, lang) {
  143.   name = typeof name === "string" ? name : name[lang];
  144.  
  145.   switch (lang) {
  146.     case "ua":
  147.       return cyrillicToTransit({ preset: "uk" }).transform(name);
  148.  
  149.     case "ru":
  150.       return cyrillicToTransit({ preset: "ru" }).transform(name);
  151.     default:
  152.       return name;
  153.   }
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement