1 line
52 KiB
Plaintext
1 line
52 KiB
Plaintext
{"version":3,"file":"665.dd98ad0e0dd312b7f805.chunk.js","mappings":"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","sources":["webpack://tweb/./src/components/checkboxField.ts","webpack://tweb/./src/components/countryInputField.ts","webpack://tweb/./src/components/scrollable.ts","webpack://tweb/./src/components/telInputField.ts","webpack://tweb/./src/helpers/dom/findUpTag.ts","webpack://tweb/./src/helpers/dom/placeCaretAtEnd.ts","webpack://tweb/./src/helpers/dom/toggleDisability.ts","webpack://tweb/./src/helpers/formatPhoneNumber.ts","webpack://tweb/./src/helpers/object/getDeepProperty.ts"],"sourcesContent":["/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type ListenerSetter from '../helpers/listenerSetter';\r\nimport ripple from './ripple';\r\nimport {LangPackKey, _i18n} from '../lib/langPack';\r\nimport getDeepProperty from '../helpers/object/getDeepProperty';\r\nimport rootScope from '../lib/rootScope';\r\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\r\n\r\nexport type CheckboxFieldOptions = {\r\n text?: LangPackKey,\r\n textArgs?: any[],\r\n name?: string,\r\n round?: boolean,\r\n toggle?: boolean,\r\n stateKey?: string,\r\n stateValues?: any[],\r\n disabled?: boolean,\r\n checked?: boolean,\r\n restriction?: boolean,\r\n withRipple?: boolean,\r\n withHover?: boolean,\r\n listenerSetter?: ListenerSetter\r\n};\r\nexport default class CheckboxField {\r\n public input: HTMLInputElement;\r\n public label: HTMLLabelElement;\r\n public span: HTMLSpanElement;\r\n\r\n constructor(options: CheckboxFieldOptions = {}) {\r\n const label = this.label = document.createElement('label');\r\n label.classList.add('checkbox-field');\r\n\r\n if(options.restriction) {\r\n label.classList.add('checkbox-field-restriction');\r\n }\r\n\r\n if(options.round) {\r\n label.classList.add('checkbox-field-round');\r\n }\r\n\r\n if(options.disabled) {\r\n this.toggleDisability(true);\r\n }\r\n\r\n const input = this.input = document.createElement('input');\r\n input.classList.add('checkbox-field-input');\r\n input.type = 'checkbox';\r\n if(options.name) {\r\n input.id = 'input-' + options.name;\r\n }\r\n\r\n if(options.checked) {\r\n input.checked = true;\r\n }\r\n\r\n if(options.stateKey) {\r\n let loaded = false;\r\n const onChange = () => {\r\n if(!loaded) {\r\n return;\r\n }\r\n\r\n let value: any;\r\n if(options.stateValues) {\r\n value = options.stateValues[input.checked ? 1 : 0];\r\n } else {\r\n value = input.checked;\r\n }\r\n\r\n rootScope.managers.appStateManager.setByKey(options.stateKey, value);\r\n };\r\n\r\n apiManagerProxy.getState().then((state) => {\r\n loaded = true;\r\n const stateValue = getDeepProperty(state, options.stateKey);\r\n let checked: boolean;\r\n if(options.stateValues) {\r\n checked = options.stateValues.indexOf(stateValue) === 1;\r\n } else {\r\n checked = stateValue;\r\n }\r\n\r\n this.setValueSilently(checked);\r\n });\r\n\r\n if(options.listenerSetter) options.listenerSetter.add(input)('change', onChange);\r\n else input.addEventListener('change', onChange);\r\n }\r\n\r\n let span: HTMLSpanElement;\r\n if(options.text) {\r\n span = this.span = document.createElement('span');\r\n span.classList.add('checkbox-caption');\r\n _i18n(span, options.text, options.textArgs);\r\n } else {\r\n label.classList.add('checkbox-without-caption');\r\n }\r\n\r\n label.append(input);\r\n\r\n if(options.toggle) {\r\n label.classList.add('checkbox-field-toggle');\r\n\r\n const toggle = document.createElement('div');\r\n toggle.classList.add('checkbox-toggle');\r\n label.append(toggle);\r\n } else {\r\n const box = document.createElement('div');\r\n box.classList.add('checkbox-box');\r\n\r\n const checkSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n checkSvg.classList.add('checkbox-box-check');\r\n checkSvg.setAttributeNS(null, 'viewBox', '0 0 24 24');\r\n const use = document.createElementNS('http://www.w3.org/2000/svg', 'use');\r\n use.setAttributeNS(null, 'href', '#check');\r\n use.setAttributeNS(null, 'x', '-1');\r\n checkSvg.append(use);\r\n\r\n const bg = document.createElement('div');\r\n bg.classList.add('checkbox-box-background');\r\n\r\n const border = document.createElement('div');\r\n border.classList.add('checkbox-box-border');\r\n\r\n box.append(border, bg, checkSvg);\r\n\r\n label.append(box);\r\n }\r\n\r\n if(span) {\r\n label.append(span);\r\n }\r\n\r\n if(options.withRipple) {\r\n label.classList.add('checkbox-ripple', 'hover-effect');\r\n ripple(label, undefined, undefined, true);\r\n // label.prepend(input);\r\n } else if(options.withHover) {\r\n label.classList.add('hover-effect');\r\n }\r\n }\r\n\r\n get checked() {\r\n return this.input.checked;\r\n }\r\n\r\n set checked(checked: boolean) {\r\n /* if(this.checked === checked) {\r\n return;\r\n } */\r\n\r\n this.setValueSilently(checked);\r\n\r\n const event = new Event('change', {bubbles: true, cancelable: true});\r\n this.input.dispatchEvent(event);\r\n }\r\n\r\n public setValueSilently(checked: boolean) {\r\n this.input.checked = checked;\r\n }\r\n\r\n public toggleDisability(disable: boolean) {\r\n this.label.classList.toggle('checkbox-disabled', disable);\r\n return () => this.toggleDisability(!disable);\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport IS_EMOJI_SUPPORTED from '../environment/emojiSupport';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport simulateEvent from '../helpers/dom/dispatchEvent';\nimport findUpClassName from '../helpers/dom/findUpClassName';\nimport findUpTag from '../helpers/dom/findUpTag';\nimport replaceContent from '../helpers/dom/replaceContent';\nimport setInnerHTML from '../helpers/dom/setInnerHTML';\nimport fastSmoothScroll from '../helpers/fastSmoothScroll';\nimport {randomLong} from '../helpers/random';\nimport {HelpCountry, HelpCountryCode} from '../layer';\nimport I18n, {i18n} from '../lib/langPack';\nimport wrapEmojiText from '../lib/richTextProcessor/wrapEmojiText';\nimport rootScope from '../lib/rootScope';\nimport {getCountryEmoji} from '../vendor/emoji';\nimport InputField, {InputFieldOptions} from './inputField';\nimport Scrollable from './scrollable';\n\nlet countries: HelpCountry.helpCountry[];\nconst setCountries = () => {\n countries = I18n.countriesList\n .filter((country) => !country.pFlags?.hidden)\n .sort((a, b) => (a.name || a.default_name).localeCompare(b.name || b.default_name));\n};\n\nlet init = () => {\n setCountries();\n rootScope.addEventListener('language_change', () => {\n setCountries();\n });\n};\n\nexport default class CountryInputField extends InputField {\n private lastCountrySelected: HelpCountry;\n private lastCountryCodeSelected: HelpCountryCode;\n\n private hideTimeout: number;\n private selectWrapper: HTMLElement;\n\n private liMap: Map<string, HTMLLIElement[]>;\n\n constructor(public options: InputFieldOptions & {\n onCountryChange?: (country: HelpCountry.helpCountry, code: HelpCountryCode.helpCountryCode) => void,\n noPhoneCodes?: boolean\n } = {}) {\n super({\n label: 'Country',\n name: randomLong(),\n ...options\n });\n\n if(init) {\n init();\n init = undefined;\n }\n\n this.liMap = new Map();\n\n this.container.classList.add('input-select');\n\n const selectWrapper = this.selectWrapper = document.createElement('div');\n selectWrapper.classList.add('select-wrapper', 'z-depth-3', 'hide');\n\n const arrowDown = document.createElement('span');\n arrowDown.classList.add('arrow', 'arrow-down');\n this.container.append(arrowDown);\n\n const selectList = document.createElement('ul');\n selectWrapper.appendChild(selectList);\n\n const scroll = new Scrollable(selectWrapper);\n\n let initSelect = () => {\n initSelect = null;\n\n countries.forEach((c) => {\n const emoji = getCountryEmoji(c.iso2);\n\n const liArr: Array<HTMLLIElement> = [];\n for(let i = 0, length = Math.min(c.country_codes.length, options.noPhoneCodes ? 1 : Infinity); i < length; ++i) {\n const countryCode = c.country_codes[i];\n const li = document.createElement('li');\n\n const wrapped = wrapEmojiText(emoji);\n if(IS_EMOJI_SUPPORTED) {\n const spanEmoji = document.createElement('span');\n setInnerHTML(spanEmoji, wrapped);\n li.append(spanEmoji);\n } else {\n setInnerHTML(li, wrapped);\n }\n\n const el = i18n(c.default_name as any);\n el.dataset.defaultName = c.default_name;\n li.append(el);\n\n if(!options.noPhoneCodes) {\n const span = document.createElement('span');\n span.classList.add('phone-code');\n span.innerText = '+' + countryCode.country_code;\n li.appendChild(span);\n }\n\n liArr.push(li);\n selectList.append(li);\n }\n\n this.liMap.set(c.iso2, liArr);\n });\n\n selectList.addEventListener('mousedown', (e) => {\n if(e.button !== 0) { // other buttons but left shall not pass\n return;\n }\n\n const target = findUpTag(e.target, 'LI')\n this.selectCountryByTarget(target);\n // console.log('clicked', e, countryName, phoneCode);\n });\n\n this.container.appendChild(selectWrapper);\n };\n\n initSelect();\n\n this.input.addEventListener('focus', (e) => {\n if(initSelect) {\n initSelect();\n } else {\n countries.forEach((c) => {\n this.liMap.get(c.iso2).forEach((li) => li.style.display = '');\n });\n }\n\n clearTimeout(this.hideTimeout);\n this.hideTimeout = undefined;\n\n selectWrapper.classList.remove('hide');\n void selectWrapper.offsetWidth; // reflow\n selectWrapper.classList.add('active');\n\n this.select();\n\n fastSmoothScroll({\n // container: page.pageEl.parentElement.parentElement,\n container: findUpClassName(this.container, 'scrollable-y'),\n element: this.input,\n position: 'start',\n margin: 4\n });\n\n setTimeout(() => {\n if(!mouseDownHandlerAttached) {\n document.addEventListener('mousedown', onMouseDown, {capture: true});\n mouseDownHandlerAttached = true;\n }\n }, 0);\n });\n\n let mouseDownHandlerAttached = false;\n const onMouseDown = (e: MouseEvent) => {\n if(findUpClassName(e.target, 'input-select')) {\n return;\n }\n if(e.target === this.input) {\n return;\n }\n\n this.hidePicker();\n document.removeEventListener('mousedown', onMouseDown, {capture: true});\n mouseDownHandlerAttached = false;\n };\n\n /* false && this.input.addEventListener('blur', function(this: typeof this.input, e) {\n hidePicker();\n\n e.cancelBubble = true;\n }, {capture: true}); */\n\n const onKeyPress = (e: KeyboardEvent) => {\n const key = e.key;\n if(e.ctrlKey || key === 'Control') return false;\n\n // let i = new RegExp('^' + this.value, 'i');\n const _value = this.value.toLowerCase();\n const matches: HelpCountry[] = [];\n countries.forEach((c) => {\n const names = [\n c.name,\n c.default_name,\n c.iso2\n ];\n\n names.filter(Boolean).forEach((name) => {\n const abbr = name.split(' ').filter((word) => /\\w/.test(word)).map((word) => word[0]).join('');\n if(abbr.length > 1) {\n names.push(abbr);\n }\n });\n\n const good = !!names.filter(Boolean).find((str) => str.toLowerCase().indexOf(_value) !== -1)/* === 0 */;// i.test(c.name);\n\n this.liMap.get(c.iso2).forEach((li) => li.style.display = good ? '' : 'none');\n if(good) matches.push(c);\n });\n\n // Код ниже автоматически выберет страну если она осталась одна при поиске\n /* if(matches.length === 1 && matches[0].li.length === 1) {\n if(matches[0].name === lastCountrySelected) return false;\n //console.log('clicking', matches[0]);\n\n var clickEvent = document.createEvent('MouseEvents');\n clickEvent.initEvent('mousedown', true, true);\n matches[0].li[0].dispatchEvent(clickEvent);\n return false;\n } else */if(matches.length === 0) {\n countries.forEach((c) => {\n this.liMap.get(c.iso2).forEach((li) => li.style.display = '');\n });\n } else if(matches.length === 1 && key === 'Enter') {\n cancelEvent(e);\n this.selectCountryByTarget(this.liMap.get(matches[0].iso2)[0]);\n }\n };\n\n this.input.addEventListener('keyup', onKeyPress);\n this.input.addEventListener('keydown', (e) => {\n if(e.key === 'Enter') {\n onKeyPress(e);\n }\n });\n\n arrowDown.addEventListener('mousedown', (e) => {\n if(this.input.matches(':focus')) {\n this.hidePicker();\n this.input.blur();\n } else {\n e.cancelBubble = true;\n e.preventDefault();\n this.input.focus();\n }\n });\n }\n\n public getSelected() {\n return {country: this.lastCountrySelected, code: this.lastCountryCodeSelected};\n }\n\n public hidePicker = () => {\n if(this.hideTimeout !== undefined) return;\n this.selectWrapper.classList.remove('active');\n this.hideTimeout = window.setTimeout(() => {\n this.selectWrapper.classList.add('hide');\n this.hideTimeout = undefined;\n }, 200);\n }\n\n public selectCountryByTarget = (target: HTMLElement) => {\n const defaultName = target.querySelector<HTMLElement>('[data-default-name]').dataset.defaultName;\n const phoneCodeEl = target.querySelector<HTMLElement>('.phone-code');\n const phoneCode = phoneCodeEl?.innerText;\n const countryCode = phoneCode && phoneCode.replace(/\\D/g, '');\n\n replaceContent(this.input, i18n(defaultName as any));\n simulateEvent(this.input, 'input');\n this.lastCountrySelected = countries.find((c) => c.default_name === defaultName);\n this.lastCountryCodeSelected = countryCode && this.lastCountrySelected.country_codes.find((_countryCode) => _countryCode.country_code === countryCode);\n\n this.options.onCountryChange?.(this.lastCountrySelected, this.lastCountryCodeSelected);\n this.hidePicker();\n }\n\n public selectCountryByIso2(iso2: string) {\n this.selectCountryByTarget(this.liMap.get(iso2)[0]);\n }\n\n public override(country: HelpCountry, code: HelpCountryCode, countryName?: string) {\n replaceContent(this.input, country ? i18n(country.default_name as any) : countryName);\n this.lastCountrySelected = country;\n this.lastCountryCodeSelected = code;\n this.options.onCountryChange?.(this.lastCountrySelected, this.lastCountryCodeSelected);\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\r\nimport {logger, LogTypes} from '../lib/logger';\r\nimport fastSmoothScroll, {ScrollOptions} from '../helpers/fastSmoothScroll';\r\nimport useHeavyAnimationCheck from '../hooks/useHeavyAnimationCheck';\r\nimport cancelEvent from '../helpers/dom/cancelEvent';\r\nimport {IS_ANDROID} from '../environment/userAgent';\r\n/*\r\nvar el = $0;\r\nvar height = 0;\r\nvar checkUp = false;\r\n\r\ndo {\r\n height += el.scrollHeight;\r\n} while(el = (checkUp ? el.previousElementSibling : el.nextElementSibling));\r\nconsole.log(height);\r\n*/\r\n\r\n/*\r\nArray.from($0.querySelectorAll('.bubble-content')).forEach((_el) => {\r\n //_el.style.display = '';\r\n //return;\r\n\r\n let el = _el.parentElement;\r\n let height = el.scrollHeight;\r\n let width = el.scrollWidth;\r\n el.style.width = width + 'px';\r\n el.style.height = height + 'px';\r\n _el.style.display = 'none';\r\n});\r\n*/\r\n\r\n/* const scrollables: Map<HTMLElement, Scrollable> = new Map();\r\nconst scrollsIntersector = new IntersectionObserver((entries) => {\r\n for(let entry of entries) {\r\n const scrollable = scrollables.get(entry.target as HTMLElement);\r\n\r\n if(entry.isIntersecting) {\r\n scrollable.isVisible = true;\r\n } else {\r\n scrollable.isVisible = false;\r\n\r\n if(!isInDOM(entry.target)) {\r\n scrollsIntersector.unobserve(scrollable.container);\r\n scrollables.delete(scrollable.container);\r\n }\r\n }\r\n }\r\n}); */\r\n\r\nconst SCROLL_THROTTLE = IS_ANDROID ? 200 : 24;\r\n\r\nexport class ScrollableBase {\r\n protected log: ReturnType<typeof logger>;\r\n\r\n public splitUp: HTMLElement;\r\n public onScrollMeasure: number = 0;\r\n\r\n public lastScrollPosition: number = 0;\r\n public lastScrollDirection: number = 0;\r\n\r\n public onAdditionalScroll: () => void;\r\n public onScrolledTop: () => void;\r\n public onScrolledBottom: () => void;\r\n\r\n public isHeavyAnimationInProgress = false;\r\n protected needCheckAfterAnimation = false;\r\n\r\n public checkForTriggers?: () => void;\r\n\r\n public scrollProperty: 'scrollTop' | 'scrollLeft';\r\n\r\n protected removeHeavyAnimationListener: () => void;\r\n protected addedScrollListener: boolean;\r\n\r\n constructor(public el: HTMLElement, logPrefix = '', public container: HTMLElement = document.createElement('div')) {\r\n this.container.classList.add('scrollable');\r\n\r\n this.log = logger('SCROLL' + (logPrefix ? '-' + logPrefix : ''), LogTypes.Error);\r\n\r\n if(el) {\r\n Array.from(el.children).forEach((c) => this.container.append(c));\r\n\r\n el.append(this.container);\r\n }\r\n // this.onScroll();\r\n }\r\n\r\n public addScrollListener() {\r\n if(this.addedScrollListener) {\r\n return;\r\n }\r\n\r\n this.addedScrollListener = true;\r\n this.container.addEventListener('scroll', this.onScroll, {passive: true, capture: true});\r\n }\r\n\r\n public removeScrollListener() {\r\n if(!this.addedScrollListener) {\r\n return;\r\n }\r\n\r\n this.addedScrollListener = false;\r\n this.container.removeEventListener('scroll', this.onScroll, {capture: true});\r\n }\r\n\r\n public setListeners() {\r\n if(this.removeHeavyAnimationListener) {\r\n return;\r\n }\r\n\r\n window.addEventListener('resize', this.onScroll, {passive: true});\r\n this.addScrollListener();\r\n\r\n this.removeHeavyAnimationListener = useHeavyAnimationCheck(() => {\r\n this.isHeavyAnimationInProgress = true;\r\n\r\n if(this.onScrollMeasure) {\r\n this.cancelMeasure();\r\n this.needCheckAfterAnimation = true;\r\n }\r\n }, () => {\r\n this.isHeavyAnimationInProgress = false;\r\n\r\n if(this.needCheckAfterAnimation) {\r\n this.onScroll();\r\n this.needCheckAfterAnimation = false;\r\n }\r\n });\r\n }\r\n\r\n public removeListeners() {\r\n if(!this.removeHeavyAnimationListener) {\r\n return;\r\n }\r\n\r\n window.removeEventListener('resize', this.onScroll);\r\n this.removeScrollListener();\r\n\r\n this.removeHeavyAnimationListener();\r\n this.removeHeavyAnimationListener = undefined;\r\n }\r\n\r\n public destroy() {\r\n this.removeListeners();\r\n this.onAdditionalScroll = undefined;\r\n this.onScrolledTop = undefined;\r\n this.onScrolledBottom = undefined;\r\n }\r\n\r\n public append(element: HTMLElement) {\r\n this.container.append(element);\r\n }\r\n\r\n public scrollIntoViewNew(options: Omit<ScrollOptions, 'container'>) {\r\n // return Promise.resolve();\r\n // this.removeListeners();\r\n return fastSmoothScroll({\r\n ...options,\r\n container: this.container\r\n });/* .finally(() => {\r\n this.setListeners();\r\n }); */\r\n }\r\n\r\n public onScroll = () => {\r\n // if(this.debug) {\r\n // this.log('onScroll call', this.onScrollMeasure);\r\n // }\r\n\r\n // return;\r\n\r\n if(this.isHeavyAnimationInProgress) {\r\n this.cancelMeasure();\r\n this.needCheckAfterAnimation = true;\r\n return;\r\n }\r\n\r\n // if(this.onScrollMeasure || ((this.scrollLocked || (!this.onScrolledTop && !this.onScrolledBottom)) && !this.splitUp && !this.onAdditionalScroll)) return;\r\n if((!this.onScrolledTop && !this.onScrolledBottom) && !this.splitUp && !this.onAdditionalScroll) return;\r\n if(this.onScrollMeasure) return;\r\n // if(this.onScrollMeasure) window.cancelAnimationFrame(this.onScrollMeasure);\r\n // this.onScrollMeasure = window.requestAnimationFrame(() => {\r\n this.onScrollMeasure = window.setTimeout(() => {\r\n this.onScrollMeasure = 0;\r\n\r\n const scrollPosition = this.container[this.scrollProperty];\r\n this.lastScrollDirection = this.lastScrollPosition === scrollPosition ? 0 : (this.lastScrollPosition < scrollPosition ? 1 : -1); // * 1 - bottom, -1 - top\r\n this.lastScrollPosition = scrollPosition;\r\n\r\n // lastScrollDirection check is useless here, every callback should decide on its own\r\n if(this.onAdditionalScroll/* && this.lastScrollDirection !== 0 */) {\r\n this.onAdditionalScroll();\r\n }\r\n\r\n if(this.checkForTriggers) {\r\n this.checkForTriggers();\r\n }\r\n // });\r\n }, SCROLL_THROTTLE);\r\n };\r\n\r\n public cancelMeasure() {\r\n if(this.onScrollMeasure) {\r\n // window.cancelAnimationFrame(this.onScrollMeasure);\r\n clearTimeout(this.onScrollMeasure);\r\n this.onScrollMeasure = 0;\r\n }\r\n }\r\n}\r\n\r\nexport type SliceSides = 'top' | 'bottom';\r\nexport type SliceSidesContainer = {[k in SliceSides]: boolean};\r\n\r\nexport default class Scrollable extends ScrollableBase {\r\n public padding: HTMLElement;\r\n\r\n public loadedAll: SliceSidesContainer = {top: true, bottom: false};\r\n\r\n constructor(el: HTMLElement, logPrefix = '', public onScrollOffset = 300, withPaddingContainer?: boolean) {\r\n super(el, logPrefix);\r\n\r\n /* if(withPaddingContainer) {\r\n this.padding = document.createElement('div');\r\n this.padding.classList.add('scrollable-padding');\r\n Array.from(this.container.children).forEach((c) => this.padding.append(c));\r\n this.container.append(this.padding);\r\n } */\r\n\r\n this.container.classList.add('scrollable-y');\r\n this.setListeners();\r\n this.scrollProperty = 'scrollTop';\r\n }\r\n\r\n public setVirtualContainer(el?: HTMLElement) {\r\n this.splitUp = el;\r\n this.log('setVirtualContainer:', el, this);\r\n }\r\n\r\n public checkForTriggers = () => {\r\n if((!this.onScrolledTop && !this.onScrolledBottom)) return;\r\n\r\n if(this.isHeavyAnimationInProgress) {\r\n this.onScroll();\r\n return;\r\n }\r\n\r\n const scrollHeight = this.container.scrollHeight;\r\n if(!scrollHeight) { // незачем вызывать триггеры если блок пустой или не виден\r\n return;\r\n }\r\n\r\n const clientHeight = this.container.clientHeight;\r\n const maxScrollTop = scrollHeight - clientHeight;\r\n const scrollTop = this.lastScrollPosition;\r\n\r\n // this.log('checkForTriggers:', scrollTop, maxScrollTop);\r\n\r\n if(this.onScrolledTop && scrollTop <= this.onScrollOffset && this.lastScrollDirection <= 0/* && direction === -1 */) {\r\n this.onScrolledTop();\r\n }\r\n\r\n if(this.onScrolledBottom && (maxScrollTop - scrollTop) <= this.onScrollOffset && this.lastScrollDirection >= 0/* && direction === 1 */) {\r\n this.onScrolledBottom();\r\n }\r\n };\r\n\r\n public prepend(...elements: (HTMLElement | DocumentFragment)[]) {\r\n (this.splitUp || this.padding || this.container).prepend(...elements);\r\n }\r\n\r\n public append(...elements: (HTMLElement | DocumentFragment)[]) {\r\n (this.splitUp || this.padding || this.container).append(...elements);\r\n }\r\n\r\n public getDistanceToEnd() {\r\n return this.scrollHeight - Math.round(this.scrollTop + this.container.offsetHeight);\r\n }\r\n\r\n get isScrolledDown() {\r\n return this.getDistanceToEnd() <= 1;\r\n }\r\n\r\n set scrollTop(y: number) {\r\n this.container.scrollTop = y;\r\n }\r\n\r\n get scrollTop() {\r\n // this.log.trace('get scrollTop');\r\n return this.container.scrollTop;\r\n }\r\n\r\n public setScrollTopSilently(value: number) {\r\n this.lastScrollPosition = value;\r\n this.ignoreNextScrollEvent();\r\n\r\n this.scrollTop = value;\r\n }\r\n\r\n public ignoreNextScrollEvent() {\r\n if(this.removeHeavyAnimationListener) {\r\n this.removeScrollListener();\r\n this.container.addEventListener('scroll', (e) => {\r\n cancelEvent(e);\r\n this.addScrollListener();\r\n }, {capture: true, passive: false, once: true});\r\n }\r\n }\r\n\r\n get scrollHeight() {\r\n return this.container.scrollHeight;\r\n }\r\n}\r\n\r\nexport class ScrollableX extends ScrollableBase {\r\n constructor(el: HTMLElement, logPrefix = '', public onScrollOffset = 300, public splitCount = 15, public container: HTMLElement = document.createElement('div')) {\r\n super(el, logPrefix, container);\r\n\r\n this.container.classList.add('scrollable-x');\r\n\r\n if(!IS_TOUCH_SUPPORTED) {\r\n const scrollHorizontally = (e: any) => {\r\n if(!e.deltaX && this.container.scrollWidth > this.container.clientWidth) {\r\n this.container.scrollLeft += e.deltaY / 4;\r\n cancelEvent(e);\r\n }\r\n };\r\n\r\n this.container.addEventListener('wheel', scrollHorizontally, {passive: false});\r\n }\r\n\r\n this.scrollProperty = 'scrollLeft';\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport placeCaretAtEnd from '../helpers/dom/placeCaretAtEnd';\nimport {formatPhoneNumber} from '../helpers/formatPhoneNumber';\nimport {IS_APPLE, IS_ANDROID, IS_APPLE_MOBILE} from '../environment/userAgent';\nimport {HelpCountry, HelpCountryCode} from '../layer';\nimport InputField, {InputFieldOptions} from './inputField';\n\nexport default class TelInputField extends InputField {\n private pasted = false;\n public lastValue = '';\n\n constructor(options: InputFieldOptions & {\n onInput?: (formatted: ReturnType<typeof formatPhoneNumber>) => void\n } = {}) {\n super({\n label: 'Contacts.PhoneNumber.Placeholder',\n // plainText: true,\n name: 'phone',\n ...options\n });\n\n this.container.classList.add('input-field-phone');\n\n const telEl = this.input;\n if(telEl instanceof HTMLInputElement) {\n telEl.type = 'tel';\n telEl.autocomplete = 'rr55RandomRR55';\n } else {\n telEl.inputMode = 'decimal';\n\n const pixelRatio = window.devicePixelRatio;\n if(pixelRatio > 1) {\n let letterSpacing: number;\n if(IS_APPLE) {\n letterSpacing = pixelRatio * -.16;\n } else if(IS_ANDROID) {\n letterSpacing = 0;\n }\n\n telEl.style.setProperty('--letter-spacing', letterSpacing + 'px');\n }\n\n const originalFunc = this.setValueSilently.bind(this);\n this.setValueSilently = (value) => {\n originalFunc(value);\n placeCaretAtEnd(this.input, true);\n };\n }\n\n telEl.addEventListener('input', () => {\n // console.log('input', this.value);\n telEl.classList.remove('error');\n\n const value = this.value;\n const diff = Math.abs(value.length - this.lastValue.length);\n if(diff > 1 && !this.pasted && IS_APPLE_MOBILE) {\n this.setValueSilently(this.lastValue + value);\n }\n\n this.pasted = false;\n\n this.setLabel();\n\n let formattedPhoneNumber: ReturnType<typeof formatPhoneNumber>;\n let formatted: string, country: HelpCountry, countryCode: HelpCountryCode, leftPattern = '';\n if(this.value.replace(/\\++/, '+') === '+') {\n this.setValueSilently('+');\n } else {\n formattedPhoneNumber = formatPhoneNumber(this.value);\n formatted = formattedPhoneNumber.formatted;\n country = formattedPhoneNumber.country;\n leftPattern = formattedPhoneNumber.leftPattern;\n countryCode = formattedPhoneNumber.code;\n this.setValueSilently(this.lastValue = formatted ? '+' + formatted : '');\n }\n\n telEl.dataset.leftPattern = leftPattern/* .replace(/X/g, '0') */;\n\n // console.log(formatted, country);\n\n options.onInput && options.onInput(formattedPhoneNumber);\n });\n\n telEl.addEventListener('paste', () => {\n this.pasted = true;\n // console.log('paste', telEl.value);\n });\n\n /* telEl.addEventListener('change', (e) => {\n console.log('change', telEl.value);\n }); */\n\n telEl.addEventListener('keypress', (e) => {\n // console.log('keypress', this.value);\n const key = e.key;\n if(/\\D/.test(key) && !(e.metaKey || e.ctrlKey) && key !== 'Backspace' && !(key === '+' && e.shiftKey/* && !this.value */)) {\n e.preventDefault();\n return false;\n }\n });\n\n /* telEl.addEventListener('focus', function(this: typeof telEl, e) {\n this.removeAttribute('readonly'); // fix autocomplete\n });*/\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default function findUpTag(el: any, tag: string): HTMLElement {\r\n return el.closest(tag);\r\n /* if(el.tagName === tag) return el; // 03.02.2020\r\n\r\n while(el.parentElement) {\r\n el = el.parentElement;\r\n if(el.tagName === tag)\r\n return el;\r\n }\r\n return null; */\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n *\r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport IS_TOUCH_SUPPORTED from '../../environment/touchSupport';\r\n\r\nexport default function placeCaretAtEnd(el: HTMLElement, ignoreTouchCheck = false) {\r\n if(IS_TOUCH_SUPPORTED && (!ignoreTouchCheck || document.activeElement !== el)) {\r\n return;\r\n }\r\n\r\n el.focus();\r\n if(el instanceof HTMLInputElement) {\r\n const length = el.value.length;\r\n el.selectionStart = length;\r\n el.selectionEnd = length;\r\n } else if(typeof window.getSelection !== 'undefined' && typeof document.createRange !== 'undefined') {\r\n var range = document.createRange();\r\n range.selectNodeContents(el);\r\n range.collapse(false);\r\n var sel = window.getSelection();\r\n sel.removeAllRanges();\r\n sel.addRange(range);\r\n // @ts-ignore\r\n } else if(typeof document.body.createTextRange !== 'undefined') {\r\n // @ts-ignore\r\n var textRange = document.body.createTextRange();\r\n textRange.moveToElementText(el);\r\n textRange.collapse(false);\r\n textRange.select();\r\n }\r\n}\r\n\r\n(window as any).placeCaretAtEnd = placeCaretAtEnd;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default function toggleDisability(elements: HTMLElement[], disable: boolean): () => void {\r\n if(disable) {\r\n elements.forEach((el) => el.setAttribute('disabled', 'true'));\r\n } else {\r\n elements.forEach((el) => el.removeAttribute('disabled'));\r\n }\r\n\r\n return () => toggleDisability(elements, !disable);\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {HelpCountry, HelpCountryCode} from '../layer';\nimport I18n from '../lib/langPack';\n\nlet sortedCountries: HelpCountry[];\ntype PrefixCountry = {country: HelpCountry, code: HelpCountryCode};\nconst prefixes: Map<string, PrefixCountry> = new Map();\nlet maxPrefixLength = 0;\nconst setPrefix = (country: HelpCountry, code: HelpCountryCode, prefix: string = '') => {\n prefix = code.country_code + prefix;\n /* if(prefixes.has(prefix)) {\n console.error('asdasdasd', prefixes.get(prefix), country, code);\n } */\n maxPrefixLength = Math.max(maxPrefixLength, prefix.length);\n prefixes.set(prefix, {country, code});\n};\n\nexport function formatPhoneNumber(originalStr: string): {\n formatted: string,\n country: HelpCountry,\n code: HelpCountryCode,\n leftPattern: string\n} {\n originalStr = originalStr || '';\n\n if(!prefixes.size) {\n I18n.countriesList.forEach((country) => {\n country.country_codes.forEach((code) => {\n if(code.prefixes) {\n code.prefixes.forEach((prefix) => {\n setPrefix(country, code, prefix);\n });\n } else {\n setPrefix(country, code);\n }\n });\n });\n }\n\n // return {formatted: originalStr, country: undefined as any, leftPattern: ''};\n let str = originalStr.replace(/\\D/g, '');\n const phoneCode = str.slice(0, maxPrefixLength);\n\n // //console.log('str', str, phoneCode);\n // if(!sortedCountries) {\n // sortedCountries = I18n.countriesList.slice().sort((a, b) => b.country_codes[0].country_code.length - a.country_codes[0].country_code.length);\n // }\n\n // let country = sortedCountries.find((c) => {\n // return c.country_codes.find((c) => phoneCode.indexOf(c.replace(/\\D/g, '')) === 0);\n // });\n\n let prefixCountry: PrefixCountry;\n for(let i = phoneCode.length - 1; i >= 0; --i) { // lookup for country by prefix\n prefixCountry = prefixes.get(phoneCode.slice(0, i + 1));\n if(prefixCountry) {\n break;\n }\n }\n\n if(!prefixCountry) {\n return {\n formatted: str,\n country: undefined,\n code: undefined,\n leftPattern: ''\n };\n }\n\n // country = /* PhoneCodesMain[country.phoneCode] || */country;\n const country = prefixCountry.country;\n\n const patterns = prefixCountry.code.patterns || [];\n const searchForPattern = str.slice(prefixCountry.code.country_code.length); // splice country code\n let pattern = '', mostMatchedPatternMatches = 0, mostMatchedPattern = '';\n for(let i = patterns.length - 1; i >= 0; --i) {\n pattern = patterns[i];\n\n const _pattern = pattern.replace(/ /g, '');\n let patternMatches = 0;\n for(let k = 0, length = Math.min(searchForPattern.length, _pattern.length); k < length; ++k) {\n if(searchForPattern[k] === _pattern[k] || _pattern[k] === 'X') {\n ++patternMatches;\n } else {\n patternMatches = 0;\n break;\n }\n }\n\n if(patternMatches > mostMatchedPatternMatches) {\n mostMatchedPatternMatches = patternMatches;\n mostMatchedPattern = pattern;\n }\n }\n\n pattern = mostMatchedPattern || pattern;\n pattern = pattern.replace(/\\d/g, 'X');\n\n pattern = prefixCountry.code.country_code + ' ' + pattern;\n // let pattern = country.pattern || country.phoneCode;\n pattern.split('').forEach((symbol, idx) => {\n if(symbol === ' ' && str[idx] !== ' ' && str.length > idx) {\n str = str.slice(0, idx) + ' ' + str.slice(idx);\n }\n });\n\n /* if(country.pattern) {\n str = str.slice(0, country.pattern.length);\n } */\n\n let leftPattern = pattern && pattern.length > str.length ? pattern.slice(str.length) : '';\n if(leftPattern) {\n /* const length = str.length;\n leftPattern = leftPattern.split('').map((_, idx) => (length + idx).toString().slice(-1)).join(''); */\n leftPattern = leftPattern.replace(/X/g, '‒');\n // leftPattern = leftPattern.replace(/X/g, '0');\n }\n\n return {formatted: str, country, code: prefixCountry.code, leftPattern};\n}\n","export default function getDeepProperty(object: any, key: string) {\n const splitted = key.split('.');\n let o: any = object;\n splitted.forEach((key) => {\n if(!key) {\n return;\n }\n\n // @ts-ignore\n o = o[key];\n });\n\n return o;\n}\n"],"names":["CheckboxField","constructor","options","label","this","document","createElement","classList","add","restriction","round","disabled","toggleDisability","input","type","name","id","checked","stateKey","loaded","onChange","value","stateValues","then","state","stateValue","indexOf","setValueSilently","listenerSetter","addEventListener","span","text","textArgs","append","toggle","box","checkSvg","createElementNS","setAttributeNS","use","bg","border","withRipple","undefined","withHover","event","Event","bubbles","cancelable","dispatchEvent","disable","countries","setCountries","country","pFlags","hidden","sort","a","b","default_name","localeCompare","init","CountryInputField","super","hidePicker","hideTimeout","selectWrapper","remove","window","setTimeout","selectCountryByTarget","target","defaultName","querySelector","dataset","phoneCodeEl","phoneCode","innerText","countryCode","replace","lastCountrySelected","find","c","lastCountryCodeSelected","country_codes","_countryCode","country_code","onCountryChange","liMap","Map","container","arrowDown","selectList","appendChild","initSelect","forEach","emoji","iso2","liArr","i","length","Math","min","noPhoneCodes","Infinity","li","wrapped","spanEmoji","el","push","set","e","button","get","style","display","clearTimeout","offsetWidth","select","element","position","margin","mouseDownHandlerAttached","onMouseDown","capture","removeEventListener","onKeyPress","key","ctrlKey","_value","toLowerCase","matches","names","filter","Boolean","abbr","split","word","test","map","join","good","str","blur","cancelBubble","preventDefault","focus","getSelected","code","selectCountryByIso2","override","countryName","SCROLL_THROTTLE","IS_ANDROID","ScrollableBase","logPrefix","onScrollMeasure","lastScrollPosition","lastScrollDirection","isHeavyAnimationInProgress","needCheckAfterAnimation","onScroll","cancelMeasure","onScrolledTop","onScrolledBottom","splitUp","onAdditionalScroll","scrollPosition","scrollProperty","checkForTriggers","log","Array","from","children","addScrollListener","addedScrollListener","passive","removeScrollListener","setListeners","removeHeavyAnimationListener","removeListeners","destroy","scrollIntoViewNew","Scrollable","onScrollOffset","withPaddingContainer","loadedAll","top","bottom","scrollHeight","maxScrollTop","clientHeight","scrollTop","setVirtualContainer","prepend","elements","padding","getDistanceToEnd","offsetHeight","isScrolledDown","y","setScrollTopSilently","ignoreNextScrollEvent","once","ScrollableX","splitCount","scrollHorizontally","deltaX","scrollWidth","clientWidth","scrollLeft","deltaY","TelInputField","pasted","lastValue","telEl","HTMLInputElement","autocomplete","inputMode","pixelRatio","devicePixelRatio","letterSpacing","IS_APPLE","setProperty","originalFunc","bind","formattedPhoneNumber","abs","IS_APPLE_MOBILE","setLabel","formatted","leftPattern","onInput","metaKey","shiftKey","findUpTag","tag","closest","placeCaretAtEnd","ignoreTouchCheck","activeElement","selectionStart","selectionEnd","getSelection","createRange","range","selectNodeContents","collapse","sel","removeAllRanges","addRange","body","createTextRange","textRange","moveToElementText","setAttribute","removeAttribute","prefixes","maxPrefixLength","setPrefix","prefix","max","formatPhoneNumber","originalStr","size","slice","prefixCountry","patterns","searchForPattern","pattern","mostMatchedPatternMatches","mostMatchedPattern","_pattern","patternMatches","k","symbol","idx","getDeepProperty","object","splitted","o"],"sourceRoot":""} |