UNPKG

lazo-next

Version:

A client-server web framework built on Node.js that allows front-end developers to easily create a 100% SEO compliant, component MVC structured web application with an optimized first page load.

75 lines (59 loc) 2.27 kB
define(['underscore'], function (_) { 'use strict'; return { keyRegex: /^(?:[a-z]{2}(?:-[A-Z]{2})?[\/\\])(.+)/, getLocales: function (ctx) { var languages = []; if (LAZO.isClient) { return languages.concat(navigator.languages || [navigator.language]).concat(['defaults']); } else { return languages.concat(this.resolveAcceptLanguge(ctx._request.raw.req.headers['accept-language'])).concat(['defaults']); } }, resolveAssets: function (map, ctx) { var locales = this.getLocales(ctx); var i = locales.length; var assets = {}; var localeAssets; while (i--) { localeAssets = map[locales[i]]; if (!_.isUndefined(localeAssets)) { _.extend(assets, localeAssets); } } return assets; }, resolveAssetKey: function (key, ctx) { return key.replace(this.keyRegex, '$1'); }, resolveAssetPath: function (path, component, ctx) { var prefix = component === 'app' ? '/' : '/components/'; return prefix + component + '/assets/' + path; }, resolveAcceptLanguge: function (languages, ctx) { languages = _.map(languages.split(','), function (language) { var langQuality = language.split(';'); var languageParts = langQuality[0].split('-'); return { language: languageParts[0], langLocale: langQuality[0], quality: langQuality[1] ? parseFloat(langQuality[1].split('=')[1]) : 1 }; }); languages.sort(function (a, b) { if (a.language === b.language) { if (a.quality < b.quality) { return 1; } if (a.quality > b.quality) { return -1; } } return 0; }); return _.map(languages, function (lang) { return lang.langLocale; }); } }; });