UNPKG

solid-ui

Version:

UI library for writing Solid read-write-web applications

189 lines (182 loc) • 7.81 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.addDefaults = addDefaults; exports.defaultPreferredLanguages = void 0; exports.filterByLanguage = filterByLanguage; exports.getPreferredLanguages = getPreferredLanguages; exports.getPreferredLanguagesFor = getPreferredLanguagesFor; exports.languageCodeURIBase = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var debug = _interopRequireWildcard(require("../../../debug")); var _solidLogic = require("solid-logic"); var ns = _interopRequireWildcard(require("../../../ns")); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } /* Logic to access public data stores * * including filtering resut by natural language etc * See https://solidos.solidcommunity.net/public/2021/01%20Building%20Solid%20Apps%20which%20use%20Public%20Data.html */ /* eslint-disable no-console */ // import * as logic from '../index' // import { authn } from '../../../authn/index' // import { Binding } from '../widgets/forms/autocomplete/publicData' // import { nativeNameForLanguageCode, englishNameForLanguageCode } from './nativeNameForLanguageCode' // const { currentUser } = logic.authn var languageCodeURIBase = exports.languageCodeURIBase = 'https://www.w3.org/ns/iana/language-code/'; /// @@ unsupported on the web (2021) var defaultPreferredLanguages = exports.defaultPreferredLanguages = ['en', 'fr', 'de', 'it', 'ar']; function addDefaults(array) { if (!array) array = []; return array.concat(defaultPreferredLanguages.filter(function (code) { return !array.includes(code); })); } function getPreferredLanguagesFor(_x) { return _getPreferredLanguagesFor.apply(this, arguments); } /* Get the preferred langauges for the user * * Either from solid preferences or browser preferences or default */ function _getPreferredLanguagesFor() { _getPreferredLanguagesFor = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(person) { var _store$fetcher; var doc, list, languageCodeArray; return _regenerator["default"].wrap(function (_context) { while (1) switch (_context.prev = _context.next) { case 0: doc = person.doc(); _context.next = 1; return (_store$fetcher = _solidLogic.store.fetcher) === null || _store$fetcher === void 0 ? void 0 : _store$fetcher.load(doc); case 1: list = _solidLogic.store.any(person, ns.schema('knowsLanguage'), null, doc); if (list) { _context.next = 2; break; } return _context.abrupt("return", defaultPreferredLanguages); case 2: languageCodeArray = []; list.elements.forEach(function (item) { // console.log('@@ item ' + item) var lang = _solidLogic.store.any(item, ns.solid('publicId'), null, doc); if (!lang) { console.warn('getPreferredLanguages: No publiID of language.'); return; } if (!lang.value.startsWith(languageCodeURIBase)) { console.error("What should be a language code ".concat(lang.value, " does not start with ").concat(languageCodeURIBase)); return; } var code = lang.value.slice(languageCodeURIBase.length); languageCodeArray.push(code); }); if (!(languageCodeArray.length > 0)) { _context.next = 3; break; } console.log(" User knows languages with codes: \"".concat(languageCodeArray.join(','), "\"")); return _context.abrupt("return", addDefaults(languageCodeArray)); case 3: return _context.abrupt("return", null); case 4: case "end": return _context.stop(); } }, _callee); })); return _getPreferredLanguagesFor.apply(this, arguments); } function getPreferredLanguages() { return _getPreferredLanguages.apply(this, arguments); } /* From an array of bindings with a names for each row, * remove dupliacte names for the same thing, leaving the user's * preferred language version */ function _getPreferredLanguages() { _getPreferredLanguages = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() { var me, solidLanguagePrefs; return _regenerator["default"].wrap(function (_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: _context2.next = 1; return _solidLogic.authn.currentUser(); case 1: me = _context2.sent; if (!me) { _context2.next = 3; break; } _context2.next = 2; return getPreferredLanguagesFor(me); case 2: solidLanguagePrefs = _context2.sent; if (!solidLanguagePrefs) { _context2.next = 3; break; } return _context2.abrupt("return", solidLanguagePrefs); case 3: if (!(typeof navigator !== 'undefined')) { _context2.next = 5; break; } if (!navigator.languages) { _context2.next = 4; break; } return _context2.abrupt("return", addDefaults(navigator.languages.map(function (longForm) { return longForm.split('-')[0]; }))); case 4: if (!navigator.language) { _context2.next = 5; break; } return _context2.abrupt("return", addDefaults([navigator.language.split('-')[0]])); case 5: return _context2.abrupt("return", defaultPreferredLanguages); case 6: case "end": return _context2.stop(); } }, _callee2); })); return _getPreferredLanguages.apply(this, arguments); } function filterByLanguage(bindings, languagePrefs) { var uris = {}; bindings.forEach(function (binding) { // Organize names by their subject var uri = binding.subject.value; uris[uri] = uris[uri] || []; uris[uri].push(binding); }); var languagePrefs2 = languagePrefs || defaultPreferredLanguages; languagePrefs2.reverse(); // Preferred last var slimmed = []; // console.log(` @@ {languagePrefs2 ${languagePrefs2}`) for (var u in uris) { // needs hasOwnProperty ? var _bindings = uris[u]; var sortMe = _bindings.map(function (binding) { var lang = binding.name['xml:lang']; var index = languagePrefs2.indexOf(lang); var pair = [index, binding]; // console.log(` @@ lang: ${lang}, index: ${index}`) return pair; }); sortMe.sort(); // best at th ebottom sortMe.reverse(); // best at the top // console.debug('@@ sortMe:', sortMe) slimmed.push(sortMe[0][1]); } // map u debug.log(" Filter by language: ".concat(bindings.length, " -> ").concat(slimmed.length)); return slimmed; } //# sourceMappingURL=language.js.map