@gez/date-time-kit
Version:
77 lines (72 loc) • 3.22 kB
text/typescript
import { getCurrentTzOffset, html } from '../../utils';
import { Ele as PeriodSelectorEle } from '../period-selector';
import { limitKeys } from './quick-key';
PeriodSelectorEle.define();
import { Ele as I18nEle } from '../i18n';
I18nEle.define();
import { arrowRightSvg, backArrowSvg } from '../../assets';
export const utcText = (tzOffset = getCurrentTzOffset()) =>
tzOffset > 0
? (`UTC-${(~~(tzOffset / 60) + '').padStart(2, '0')}:${((tzOffset % 60) + '').padStart(2, '0')}` as const)
: (`UTC+${(~~-(tzOffset / 60) + '').padStart(2, '0')}:${((-tzOffset % 60) + '').padStart(2, '0')}` as const);
const genTzRadio = (tzOffset: number) =>
html`<label><input type="radio" name="tz" value="${
tzOffset
}" hidden/><i class="radio"></i><span>${utcText(tzOffset)}</span></label>`;
export default html`
<dt-popover part="popover">
<slot name="trigger" slot="trigger"><input type="button" value="quick selector"/></slot>
<div class="menu top" part="menu top" slot="pop"
><div class="radio-grp">${limitKeys
.map(
(k) =>
html`<label data-field="${k}"
><input type="radio" name="radio" value="${k}" hidden
/><i class="radio"></i><dt-i18n i18n-key="quick.${k}">${k}</dt-i18n
></label>`
)
.join('')}<label class="custom-trigger" data-field="custom"
><input type="radio" name="radio" value="custom" hidden
/><i class="radio"></i><dt-i18n i18n-key="quick.custom" style="display:inline-block">Custom</dt-i18n
>${arrowRightSvg}</label
></div
><i class="dividing-line"></i
><div class="tz-trigger" data-field="timezone"
><span
><dt-i18n i18n-key="quick.timezoneWithColon"></dt-i18n
><bdo>${utcText()}</bdo
></span
>${arrowRightSvg}</div
></div
><div class="menu tz" part="menu tz"
><div class="title"
>${backArrowSvg}<span><dt-i18n i18n-key="quick.timezone"></dt-i18n></span
></div
><fieldset class="subtitle"
><legend><dt-i18n i18n-key="quick.recommend"></dt-i18n></legend
>${[...new Set([getCurrentTzOffset(), 2 * -60])].map(genTzRadio).join('')}</fieldset
><fieldset class="subtitle"
><legend><dt-i18n i18n-key="quick.timezoneList"></dt-i18n></legend
>${[
-12, -11, -10, -9.5, -9, -8, -7, -6, -5, -4, -3, -3.5, -2, -1, 0, 1,
2, 3, 3.5, 4, 4.5, 5, 5.5, 5.75, 6, 6.5, 7, 8, 8.75, 9, 9.5, 10,
10.5, 11, 12, 12.45, 13, 14
]
.map((tz) =>
tz === 2 || tz * -60 === getCurrentTzOffset()
? ''
: genTzRadio(tz * -60)
)
.join('')}</fieldset
></div
><div class="menu custom" part="menu custom"
><div class="title"
>${backArrowSvg}<span><dt-i18n i18n-key="quick.custom" style="display:inline-block">Custom</dt-i18n></span
></div
><dt-period-selector></dt-period-selector
><div class="btns"
><button id="reset"><dt-i18n i18n-key="box.reset"></dt-i18n></button
><button id="done"><dt-i18n i18n-key="box.confirm"></dt-i18n></button
></div
></div>
</dt-popover>`;