Skip to content
Snippets Groups Projects
server.js 1.93 KiB
Newer Older
const browserSyncPort = 3000;
const distPath = 'www';
const fs = require('fs')
const path = require('path')

// express server
const { join } = require('path');
const express = require('express');
const app = express();
Alice Poggioli's avatar
Alice Poggioli committed
/**
 * Get the languages of the user's navigator and covert it in a array of exploitable datas.
 * @param {string} stringData 
 */
function parseLanguageData(stringData) {
  var arrayData = stringData.split(',').map(element => 
    element.split(/[-;]/).shift()
  );
  arrayData.push(default_lang)
  return arrayData
}

Alice Poggioli's avatar
Alice Poggioli committed
/**
 * Get the language we can display.
 */
function getAvailableLanguage() {
  const langs = fs.readdirSync(distPath)
  .filter(f => path.basename(f, '.yml').match(/^index-[a-z]{2}\.html/))
  .map(f => f.match(/^index-([a-z]{2})\.html/)[1])
  return langs
}

Alice Poggioli's avatar
Alice Poggioli committed
/**
 * Compare the languages possibles with the languages avalaible and return the matched language.
 * @param {array} availableLanguages 
 * @param {array} userLanguages 
 */
function matchLanguage(availableLanguages, userLanguages) {
  for (let index = 0; index < userLanguages.length; index++) {
    const userLanguage = userLanguages[index];
    for (let index = 0; index < availableLanguages.length; index++) {
      const availableLanguage = availableLanguages[index];
      if (userLanguage === availableLanguage) {
        return userLanguage
      }
    }
  }
}

app
  .use(express.static(distPath))
  // .use('/src', express.static(join(__dirname, 'src')))
  .get(/^[^.]*$/, (req, rep) => {
    var langRequired = matchLanguage(getAvailableLanguage(), parseLanguageData(req.headers["accept-language"]))
    rep.sendFile(join(__dirname, distPath, `/index-${langRequired}.html`))
  }
  )
  .listen(port);

// browser sync
const bs = require('browser-sync').create();
bs.init({
  files: [distPath + '/**/*'],
  proxy: `http://localhost:${port}`,
  open: false,
  notify: false,
  port: browserSyncPort
  // tunnel: true,
});