рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣рд╕рди рдкрд░ @sanReal рдХрд╛ рдПрдХ рд▓реЗрдЦ рдЫрдкрд╛ , рдЬрд╣рд╛рдБ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбрд░ рдиреЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдХрд┐ рдХрд┐рд╕ рддрдХрдиреАрдХ рдФрд░ рд╕реНрд╡реЗрд▓реНрдЯ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рд╕реЗ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рд╕реЗ рд╕реАрдЦрд╛ред рдореБрдЭреЗ рдЙрдирдХреА рд╕реВрдЪреА рдореЗрдВ рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдЯреВрд▓ - рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рджреЗрдЦрдХрд░ рдереЛрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, @sveltejs рд╕рдореБрджрд╛рдп рдХреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдирд╛, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Svelte рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВ рдХрднреА-рдХрднреА рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рд░ рдХреЛрдИ Actions рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ , рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрд╣рд╛рдВ рдЙрдирдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдЧрд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХрд╛рд░реНрдп рдХреНрдпрд╛ рд╣реИрдВ рдФрд░, рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде, рдореИрдВ рдЙрдирдХрд╛ рдЖрд╡реЗрджрди рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред

рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдмреЙрдХреНрд╕ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдлрд╝реЛрди рдирдВрдмрд░ рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХреЗрд╡рд▓ рд╕рдВрдЦреНрдпрд╛ рджрд░реНрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
: +7 <input type="text" />
рдЬрдм рдХрд╛рд░реНрдп рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╛рдирдХ HTML рддрддреНрд╡ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рддрддреНрд╡ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдШрдЯрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдХрд┐рд╕реА рднреА рдШрдЯрдХ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЖрдо рдмрд╛рдд рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдВрджрд░ рдЧреИрд░-рдорд╛рдирдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рддрд░реНрдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк Svelte рдореЗрдВ рднреА рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<script>
function clean_value(e){
e.target.value = e.target.value.replace(/[^\d]/g,'');
}
</script>
<input type="text" on:input={clean_value} />
...
: +7 <InputDigits />
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦреЗрдВ
рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрддреНрд╡ <input/>
рдЕрдм рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдм рдЗрд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд HTML рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ - рдХрд┐рд╕реА рднреА рд╕реАрдПрд╕рдПрд╕ рд╡рд░реНрдЧреЛрдВ, рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ, рдпрд╛ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ "рд▓рдЯрдХрд╛" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
Svelte тАФ ( Actions). Svelte , , , , тАФ "" , . тАФ - HTML-. , DOM. DOM-, .
:
<script>
function onlydigits(node) {
function clean_value(){
node.value = node.value.replace(/[^\d]/g,'');
}
node.addEventListener('input',clean_value);
return {
destroy: ()=>node.removeEventListener('input',clean_value)
}
}
</script>
: +7 <input type="text" use:onlydigits />
onlydigits
, . , DOM- node
input
. , destroy
, DOM-, .
Svelte, - HTML- , use
. <input/>
use:onlydigits
.
. , 10 :
<script>
function onlydigits(node) { ... }
function max10symbols(node) {
function trim_value(){
node.value = node.value.substring(0, 10);
}
node.addEventListener('input',trim_value);
return {
destroy: ()=>node.removeEventListener('input',trim_value)
}
}
</script>
: +7 <input type="text" use:onlydigits use:max10symbols />
<input />
тАФ use:onlydigits
use:max10symbols
. .
use
, . , . :
<script>
function format_by_pattern(node,pattern) {
function set_cursor(){
const match = node.value.match(/[\d]/gi);
const pos = match ? node.value.lastIndexOf(match.pop())+1 : 0;
node.setSelectionRange(pos, pos);
}
function format_value(e){
let digits = node.value.replace(/[^\d]/g,'').split('');
node.value = pattern.replace(/[*]/g,(m)=>digits.shift()||m);
set_cursor();
}
node.addEventListener('input',format_value);
format_value();
return {
destroy: ()=>node.removeEventListener('input',format_value)
}
}
</script>
: +7 <input type="text" use:format_by_pattern={'(***) ***-**-**'} /> <br/>
: <input type="text" use:format_by_pattern={' **** тДЦ******'} />
<input />
HTML-. format_by_pattern
, . , Svelte, JavaScript-.
, , , . .
<script>
function format_by_pattern(node,pattern) {
function set_cursor(){...}
function format_value(){...}
...
return {
destroy: ...,
update: (new_pattern)=>{
pattern=new_pattern;
format_value();
}
}
}
let zagran = false;
</script>
: +7 <input type="text" use:format_by_pattern={'(***) ***-**-**'} /> <br/>
: <input type="text" use:format_by_pattern={zagran ? ' ** тДЦ*******' : ' **** тДЦ******'} /> <br/>
<input type="checkbox" bind:checked={zagran}/> -
, . , , bind:checked
, zagran
true
false
. , Svelte use:format_by_pattern
.
, , DOM-, <input />
DOM-, . .
, , , тАФ update
. , . .
. , . , , DOM- тАФ , . Svelte. Svelte , , .
рдиреЛрдЯ: рдореЙрд╕реНрдХреЛ рдореЗрдВ рдмрд╣реБрдд рдЬрд▓реНрдж Svelte Russia Meetup # 1 рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рд░рдЬрд┐рд╕реНрдЯрд░, рдЕрднреА рднреА рдХрдорд░рд╛ рд╣реИред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЙрдкрд╕реНрдерд┐рдд рдирд╣реАрдВ рд╣реЛ рдкрд╛рдПрдВрдЧреЗ, рдЖрдпреЛрдЬрди рдХрд╛ рдПрдХ рдкреНрд░рд╕рд╛рд░рдг рдФрд░ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред