import {get_strings} from 'core/str'; /** * Load the translation of strings from a strings object * @param {Object} strings The map of strings * @returns {Object} The map with strings loaded in */ export function load_strings(strings){ for(let idx in strings){ let stringkeys = []; for(const handle in strings[idx]){ const key = strings[idx][handle]; let parts = key.split("$"); let identifier = parts[0]; let component = (parts.length > 1)?parts[1]:'local_treestudyplan'; stringkeys.push({ key: identifier, component: component}); } get_strings(stringkeys).then(function(str){ let i = 0; for(const key in strings[idx]){ strings[idx][key] = str[i]; i++; } }); } return strings; } /** * Load the translation of strings from a strings object based on keys * Used for loading values for a drop down menu or the like * @param {Object} string_keys The map of stringkeys * @returns {Object} The map with strings loaded in */ export function load_stringkeys(string_keys){ for(let idx in string_keys){ // Get text strings for condition settings let stringkeys = []; for(const i in string_keys[idx]){ const key = string_keys[idx][i].textkey; let parts = key.split("$"); let identifier = parts[0]; let component = (parts.length > 1)?parts[1]:'local_treestudyplan'; stringkeys.push({ key: identifier, component: component}); } get_strings(stringkeys).then(function(strings){ for(const i in strings) { const s = strings[i]; const l = string_keys[idx][i]; l.text = s; } }); } return string_keys; } /** * Format a date according to localized custom * @param {Date|string} d The date to convert * @param {boolean} short Short format (default false) * @returns {string} */ export function format_date(d,short){ if(!(d instanceof Date)){ d = new Date(d); } let monthformat = "short"; if(short){ monthformat = "numeric"; } return d.toLocaleDateString(document.documentElement.lang,{ year: 'numeric', month: monthformat, day: 'numeric' }); } /** * Provides standardized information about the period between two dates * As * @param {Date|string} first First day of the span * @param {Date|string} last Last day of the span * @returns {Object} Object containing formatted start and end dates and span information */ export function datespaninfo(first,last){ if(!(first instanceof Date)){ first = new Date(first);} if(!(last instanceof Date)){ last = new Date(last);} // Make sure the end date is at the very end of the day and the start date at the very beginning first.setHours(0); first.setMinutes(0); first.setSeconds(0); first.setMilliseconds(0); last.setHours(23); last.setMinutes(59); last.setSeconds(59); last.setMilliseconds(999); const dayspan = Math.round(((last - first)+1)/(24*60*60*1000)); // Add one millisecond to offset the 999 ms const years = Math.floor(dayspan/365); // Yes, we ignore leap years/leap days const ydaysleft = dayspan % 365; const weeks = Math.floor(ydaysleft/7); const wdaysleft = ydaysleft % 7; return { first: first, last: last, totaldays: dayspan, years: years, weeks: weeks, days: wdaysleft, formatted: { first: format_date(first), last: format_date(last), } }; }