@@ -17,11 +17,16 @@ export function initNewServerForm({$root, onChange}: NewServerFormProps): void {
1717 < div class ="server-input-container ">
1818 < div class ="title "> ${ t . __ ( "Organization URL" ) } </ div >
1919 < div class ="add-server-info-row ">
20- < input
21- class ="setting-input-value "
22- autofocus
23- placeholder ="your-organization.zulipchat.com or zulip.your-organization.com "
24- />
20+ < label class ="setting-input-value ">
21+ < input
22+ class ="setting-input-add-server "
23+ autofocus
24+ placeholder ="your-organization.zulipchat.com "
25+ style ="width: 34ch "
26+ />
27+ < span class ="add-server-domain "> </ span >
28+ < span class ="server-url-size-calc "> </ span >
29+ </ label >
2530 </ div >
2631 < div class ="server-center ">
2732 < button id ="connect "> ${ t . __ ( "Connect" ) } </ button >
@@ -53,15 +58,23 @@ export function initNewServerForm({$root, onChange}: NewServerFormProps): void {
5358 $root . textContent = "" ;
5459 $root . append ( $newServerForm ) ;
5560 const $newServerUrl : HTMLInputElement = $newServerForm . querySelector (
56- "input.setting-input-value " ,
61+ "input.setting-input-add-server " ,
5762 ) ! ;
63+ const $serverDomain : HTMLSpanElement = $newServerForm . querySelector (
64+ "span.add-server-domain" ,
65+ ) ! ;
66+ const $urlSizeCalc : HTMLSpanElement = $newServerForm . querySelector (
67+ "span.server-url-size-calc" ,
68+ ) ! ;
69+ const urlValidationPattern = / ^ [ a - z A - Z \d - ] * $ / ;
5870
59- < < < << << HEAD
6071 async function submitFormHandler ( ) : Promise < void > {
6172 $saveServerButton . textContent = "Connecting..." ;
6273 let serverConf ;
6374 try {
64- serverConf = await DomainUtil . checkDomain ( $newServerUrl . value . trim ( ) ) ;
75+ serverConf = await DomainUtil . checkDomain (
76+ await autoComplete ( $newServerUrl . value . trim ( ) ) ,
77+ ) ;
6578 } catch ( error : unknown ) {
6679 $saveServerButton . textContent = "Connect" ;
6780 await dialog . showMessageBox ( {
@@ -74,20 +87,20 @@ export function initNewServerForm({$root, onChange}: NewServerFormProps): void {
7487 } ) ;
7588 return ;
7689 }
90+
7791 await DomainUtil . addDomain ( serverConf ) ;
7892 onChange ( ) ;
7993 }
8094
81- autoComplete ( url : string ) : string {
82- const pattern = / ^ [ a - z A - Z \d - ] * $ / ;
83- let serverUrl = url . trim ( ) ;
95+ async function autoComplete ( url : string ) : Promise < string > {
96+ let serverUrl = url . trim ( ) ;
8497
85- if ( pattern . test ( serverUrl ) ) {
86- serverUrl = ' https://' + serverUrl + ' .zulipchat.com' ;
87- }
98+ if ( urlValidationPattern . test ( serverUrl ) ) {
99+ serverUrl = " https://" + serverUrl + " .zulipchat.com" ;
100+ }
88101
89- return serverUrl ;
90- }
102+ return serverUrl ;
103+ }
91104
92105 $saveServerButton . addEventListener ( "click" , async ( ) => {
93106 await submitFormHandler ( ) ;
@@ -97,6 +110,15 @@ export function initNewServerForm({$root, onChange}: NewServerFormProps): void {
97110 await submitFormHandler ( ) ;
98111 }
99112 } ) ;
113+ $newServerUrl . addEventListener ( "input" , async ( ) => {
114+ const url = $newServerUrl . value ;
115+ $urlSizeCalc . textContent = url ;
116+ $newServerUrl . style . width = `${ $urlSizeCalc . offsetWidth } px` ;
117+
118+ $serverDomain . textContent = urlValidationPattern . test ( url )
119+ ? ".zulipchat.com"
120+ : "" ;
121+ } ) ;
100122
101123 // Open create new org link in default browser
102124 const link = "https://zulip.com/new/" ;
0 commit comments