Telegram Web K with changes to work inside I2P
https://web.telegram.i2p/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.2 KiB
86 lines
2.2 KiB
/* |
|
* https://github.com/morethanwords/tweb |
|
* Copyright (C) 2019-2021 Eduard Kuzmenko |
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE |
|
*/ |
|
|
|
//import { getRichValue } from "../helpers/dom"; |
|
import { LangPackKey } from "../lib/langPack"; |
|
import InputField from "./inputField"; |
|
|
|
export default class InputSearch { |
|
public container: HTMLElement; |
|
public input: HTMLElement; |
|
public inputField: InputField; |
|
public clearBtn: HTMLElement; |
|
|
|
public prevValue = ''; |
|
public timeout = 0; |
|
public onChange: (value: string) => void; |
|
public onClear: () => void; |
|
|
|
constructor(placeholder: LangPackKey, onChange?: (value: string) => void) { |
|
this.inputField = new InputField({ |
|
placeholder, |
|
plainText: true |
|
}); |
|
|
|
this.container = this.inputField.container; |
|
this.container.classList.remove('input-field'); |
|
this.container.classList.add('input-search'); |
|
|
|
this.onChange = onChange; |
|
|
|
this.input = this.inputField.input; |
|
this.input.classList.add('input-search-input'); |
|
|
|
const searchIcon = document.createElement('i'); |
|
searchIcon.classList.add('tgico', 'tgico-search'); |
|
|
|
this.clearBtn = document.createElement('i'); |
|
this.clearBtn.classList.add('tgico', 'btn-icon', 'tgico-close'); |
|
|
|
this.input.addEventListener('input', this.onInput); |
|
this.clearBtn.addEventListener('click', this.onClearClick); |
|
|
|
this.container.append(searchIcon, this.clearBtn); |
|
} |
|
|
|
onInput = () => { |
|
if(!this.onChange) return; |
|
|
|
let value = this.value; |
|
|
|
//this.input.classList.toggle('is-empty', !value.trim()); |
|
|
|
if(value !== this.prevValue) { |
|
this.prevValue = value; |
|
clearTimeout(this.timeout); |
|
this.timeout = window.setTimeout(() => { |
|
this.onChange(value); |
|
}, 200); |
|
} |
|
}; |
|
|
|
onClearClick = () => { |
|
this.value = ''; |
|
this.onChange && this.onChange(''); |
|
this.onClear && this.onClear(); |
|
}; |
|
|
|
get value() { |
|
return this.inputField.value; |
|
} |
|
|
|
set value(value: string) { |
|
this.prevValue = value; |
|
clearTimeout(this.timeout); |
|
this.inputField.value = value; |
|
} |
|
|
|
public remove() { |
|
clearTimeout(this.timeout); |
|
this.input.removeEventListener('input', this.onInput); |
|
this.clearBtn.removeEventListener('click', this.onClearClick); |
|
} |
|
}
|
|
|