UNPKG

@nextcloud/vue

Version:
1 lines 17 kB
{"version":3,"file":"NcTimezonePicker.cjs","sources":["../../src/components/NcTimezonePicker/timezone.js","../../src/components/NcTimezonePicker/timezoneDataProviderService.js","../../src/components/NcTimezonePicker/NcTimezonePicker.vue"],"sourcesContent":["/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport { t } from '../../l10n.js'\n\n/**\n *\n * @param {string[]} timezoneList List of Olsen timezones\n * @param {Array} additionalTimezones List of additional timezones\n * @return {Array}\n */\nexport function getSortedTimezoneList(timezoneList = [], additionalTimezones = []) {\n\tconst sortedByContinent = {}\n\tconst sortedList = []\n\n\tfor (const timezoneId of timezoneList) {\n\t\tconst components = timezoneId.split('/')\n\t\tlet [continent, name] = [components.shift(), components.join('/')]\n\t\tif (!name) {\n\t\t\tname = continent\n\t\t\t// TRANSLATORS This refers to global timezones in the timezone picker\n\t\t\tcontinent = t('Global')\n\t\t}\n\n\t\tsortedByContinent[continent] = sortedByContinent[continent] || {\n\t\t\tcontinent,\n\t\t\tregions: [],\n\t\t}\n\n\t\tsortedByContinent[continent].regions.push({\n\t\t\tlabel: getReadableTimezoneName(name),\n\t\t\tcities: [],\n\t\t\ttimezoneId,\n\t\t})\n\t}\n\n\tfor (const additionalTimezone of additionalTimezones) {\n\t\tconst { continent, label, timezoneId } = additionalTimezone\n\n\t\tsortedByContinent[continent] = sortedByContinent[continent] || {\n\t\t\tcontinent,\n\t\t\tregions: [],\n\t\t}\n\n\t\tsortedByContinent[continent].regions.push({\n\t\t\tlabel,\n\t\t\tcities: [],\n\t\t\ttimezoneId,\n\t\t})\n\t}\n\n\tfor (const continent in sortedByContinent) {\n\t\tif (!Object.prototype.hasOwnProperty.call(sortedByContinent, continent)) {\n\t\t\tcontinue\n\t\t}\n\n\t\tsortedByContinent[continent].regions.sort((a, b) => {\n\t\t\tif (a.label < b.label) {\n\t\t\t\treturn -1\n\t\t\t}\n\n\t\t\treturn 1\n\t\t})\n\t\tsortedList.push(sortedByContinent[continent])\n\t}\n\n\t// Sort continents by name\n\tsortedList.sort((a, b) => {\n\t\tif (a.continent < b.continent) {\n\t\t\treturn -1\n\t\t}\n\n\t\treturn 1\n\t})\n\n\treturn sortedList\n}\n\n/**\n * Get human-readable name for timezoneId\n *\n * @param {string} timezoneId TimezoneId to turn human-readable\n * @return {string}\n */\nexport function getReadableTimezoneName(timezoneId) {\n\treturn timezoneId\n\t\t.split('_')\n\t\t.join(' ')\n\t\t.replace('St ', 'St. ')\n\t\t.split('/')\n\t\t.join(' - ')\n}\n","/**\n * @copyright Copyright (c) 2019 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nimport tzData from '../../../resources/timezones/zones.json'\nimport logger from '../../utils/logger.js'\n\nimport { getTimezoneManager } from '@nextcloud/calendar-js'\n\nconst timezoneManager = getTimezoneManager()\nlet initialized = false\n\n/**\n * Gets the timezone-manager\n * initializes it if necessary\n *\n * @return {object}\n */\nexport default function() {\n\tif (!initialized) {\n\t\tinitialize()\n\t}\n\n\treturn timezoneManager\n}\n\n/**\n * Initializes the timezone-manager with all timezones shipped by the calendar app\n */\nfunction initialize() {\n\tlogger.debug(`Using version ${tzData.version} of the timezone database`)\n\n\tfor (const tzid in tzData.zones) {\n\t\tif (Object.prototype.hasOwnProperty.call(tzData.zones, [tzid])) {\n\t\t\tconst ics = [\n\t\t\t\t'BEGIN:VTIMEZONE',\n\t\t\t\t'TZID:' + tzid,\n\t\t\t\t...tzData.zones[tzid].ics,\n\t\t\t\t'END:VTIMEZONE',\n\t\t\t].join('\\r\\n')\n\t\t\ttimezoneManager.registerTimezoneFromICS(tzid, ics)\n\t\t}\n\t}\n\n\tfor (const tzid in tzData.aliases) {\n\t\tif (Object.prototype.hasOwnProperty.call(tzData.aliases, [tzid])) {\n\t\t\ttimezoneManager.registerAlias(tzid, tzData.aliases[tzid].aliasTo)\n\t\t}\n\t}\n\n\tinitialized = true\n}\n","<!--\n - @copyright Copyright (c) 2021 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<docs>\n### Example\n```vue\n<template>\n\t<span>\n\t\t<NcTimezonePicker v-model=\"tz\" />\n\t</span>\n</template>\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\ttz: 'Hawaiian Standard Time',\n\t\t}\n\t},\n}\n</script>\n```\n</docs>\n\n<template>\n\t<NcSelect :value=\"selectedTimezone\"\n\t\t:options=\"options\"\n\t\t:multiple=\"false\"\n\t\t:clearable=\"false\"\n\t\t:placeholder=\"placeholder\"\n\t\t:selectable=\"isSelectable\"\n\t\t:filter-by=\"filterBy\"\n\t\tlabel=\"label\"\n\t\t@option:selected=\"change\" />\n</template>\n\n<script>\nimport {\n\tgetReadableTimezoneName,\n\tgetSortedTimezoneList,\n} from './timezone.js'\nimport getTimezoneManager from './timezoneDataProviderService.js'\nimport NcSelect from '../NcSelect/index.js'\nimport { t } from '../../l10n.js'\n\nexport default {\n\tname: 'NcTimezonePicker',\n\tcomponents: {\n\t\tNcSelect,\n\t},\n\tprops: {\n\t\t/**\n\t\t * An array of additional timezones to include with the standard database. Useful if there is a custom timezone, e.g. read from user data\n\t\t */\n\t\tadditionalTimezones: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\t/**\n\t\t * The selected timezone. Use v-model for two-way binding. The default timezone is floating, which means a time independent of timezone. See https://icalendar.org/CalDAV-Access-RFC-4791/7-3-date-and-floating-time.html for details.\n\t\t */\n\t\tvalue: {\n\t\t\ttype: String,\n\t\t\tdefault: 'floating',\n\t\t},\n\t},\n\temits: ['input'],\n\tcomputed: {\n\t\tplaceholder() {\n\t\t\treturn t('Type to search time zone')\n\t\t},\n\t\tselectedTimezone() {\n\t\t\tfor (const additionalTimezone of this.additionalTimezones) {\n\t\t\t\tif (additionalTimezone.timezoneId === this.value) {\n\t\t\t\t\treturn additionalTimezone\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tlabel: getReadableTimezoneName(this.value),\n\t\t\t\ttimezoneId: this.value,\n\t\t\t}\n\t\t},\n\t\toptions() {\n\t\t\tconst timezoneManager = getTimezoneManager()\n\t\t\tconst timezoneList = getSortedTimezoneList(timezoneManager.listAllTimezones(), this.additionalTimezones)\n\t\t\t/**\n\t\t\t * Since NcSelect does not support groups,\n\t\t\t * we create an object with the grouped timezones and continent labels.\n\t\t\t */\n\t\t\tlet timezonesGrouped = []\n\t\t\tObject.values(timezoneList).forEach(group => {\n\t\t\t\t// Add an entry as group label\n\t\t\t\ttimezonesGrouped.push({\n\t\t\t\t\tlabel: group.continent,\n\t\t\t\t\ttimezoneId: `tz-group__${group.continent}`,\n\t\t\t\t\tregions: group.regions,\n\t\t\t\t})\n\t\t\t\ttimezonesGrouped = timezonesGrouped.concat(group.regions)\n\t\t\t})\n\t\t\treturn timezonesGrouped\n\t\t},\n\t},\n\tmethods: {\n\t\tchange(newValue) {\n\t\t\tif (!newValue) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Two-way binding of the value prop. Use v-model=\"selectedTimezone\" for two-way binding\n\t\t\t */\n\t\t\tthis.$emit('input', newValue.timezoneId)\n\t\t},\n\n\t\t/**\n\t\t * Returns whether this is a continent label,\n\t\t * or an actual timezone. Continent labels are not selectable.\n\t\t *\n\t\t * @param {string} option The option\n\t\t * @return {boolean}\n\t\t */\n\t\tisSelectable(option) {\n\t\t\treturn !option.timezoneId.startsWith('tz-group__')\n\t\t},\n\n\t\t/**\n\t\t * Function to filter the timezone list.\n\t\t * We search in the timezoneId, so both continent and region names can be matched.\n\t\t *\n\t\t * @param {object} option The timezone option\n\t\t * @param {string} label The label of the timezone\n\t\t * @param {string} search The search string\n\t\t * @return {boolean}\n\t\t */\n\t\tfilterBy(option, label, search) {\n\t\t\t// We split the search term in case one searches \"<continent> <region>\".\n\t\t\tconst terms = search.trim().split(' ')\n\n\t\t\t// For the continent labels, we have to check if one region matches every search term.\n\t\t\tif (option.timezoneId.startsWith('tz-group__')) {\n\t\t\t\treturn option.regions.some(region => {\n\t\t\t\t\treturn this.matchTimezoneId(region.timezoneId, terms)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// For a region, every search term must be found.\n\t\t\treturn this.matchTimezoneId(option.timezoneId, terms)\n\t\t},\n\n\t\tmatchTimezoneId(timezoneId, terms) {\n\t\t\treturn terms.every(term => timezoneId.toLowerCase().includes(term.toLowerCase()))\n\t\t},\n\t},\n}\n</script>\n"],"names":["getSortedTimezoneList","timezoneList","additionalTimezones","sortedByContinent","sortedList","timezoneId","components","continent","name","t","getReadableTimezoneName","additionalTimezone","label","a","b","timezoneManager","getTimezoneManager","initialized","initialize","logger","tzData","tzid","ics","_sfc_main","NcSelect","timezonesGrouped","group","newValue","option","search","terms","region","term"],"mappings":"mOA6BO,SAASA,EAAsBC,EAAe,GAAIC,EAAsB,CAAA,EAAI,CAClF,MAAMC,EAAoB,CAAE,EACtBC,EAAa,CAAE,EAErB,UAAWC,KAAcJ,EAAc,CACtC,MAAMK,EAAaD,EAAW,MAAM,GAAG,EACvC,GAAI,CAACE,EAAWC,CAAI,EAAI,CAACF,EAAW,MAAK,EAAIA,EAAW,KAAK,GAAG,CAAC,EAC5DE,IACJA,EAAOD,EAEPA,EAAYE,EAAC,EAAC,QAAQ,GAGvBN,EAAkBI,CAAS,EAAIJ,EAAkBI,CAAS,GAAK,CAC9D,UAAAA,EACA,QAAS,CAAE,CACX,EAEDJ,EAAkBI,CAAS,EAAE,QAAQ,KAAK,CACzC,MAAOG,EAAwBF,CAAI,EACnC,OAAQ,CAAE,EACV,WAAAH,CACH,CAAG,CAAA,CAGF,UAAWM,KAAsBT,EAAqB,CACrD,KAAM,CAAE,UAAAK,EAAW,MAAAK,EAAO,WAAAP,CAAY,EAAGM,EAEzCR,EAAkBI,CAAS,EAAIJ,EAAkBI,CAAS,GAAK,CAC9D,UAAAA,EACA,QAAS,CAAE,CACX,EAEDJ,EAAkBI,CAAS,EAAE,QAAQ,KAAK,CACzC,MAAAK,EACA,OAAQ,CAAE,EACV,WAAAP,CACH,CAAG,CAAA,CAGF,UAAWE,KAAaJ,EAClB,OAAO,UAAU,eAAe,KAAKA,EAAmBI,CAAS,IAItEJ,EAAkBI,CAAS,EAAE,QAAQ,KAAK,CAACM,EAAGC,IACzCD,EAAE,MAAQC,EAAE,MACR,GAGD,CACP,EACDV,EAAW,KAAKD,EAAkBI,CAAS,CAAC,GAI7C,OAAAH,EAAW,KAAK,CAACS,EAAGC,IACfD,EAAE,UAAYC,EAAE,UACZ,GAGD,CACP,EAEMV,CACR,CAQO,SAASM,EAAwBL,EAAY,CACnD,OAAOA,EACL,MAAM,GAAG,EACT,KAAK,GAAG,EACR,QAAQ,MAAO,MAAM,EACrB,MAAM,GAAG,EACT,KAAK,KAAK,CACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}