@@ -43,6 +43,8 @@ EmbedUrl = View.extend(/** @lends wp.media.view.EmbedUrl.prototype */{
4343 this . model . trigger ( 'change:url' ) ;
4444 } , this ) , 500 ) ;
4545 }
46+
47+ this . updateUrl = _ . debounce ( this . updateUrl , 500 ) ;
4648 } ,
4749 /**
4850 * @return {wp.media.view.EmbedUrl } Returns itself to allow chaining.
@@ -70,8 +72,22 @@ EmbedUrl = View.extend(/** @lends wp.media.view.EmbedUrl.prototype */{
7072 url : function ( event ) {
7173 var $el = $ ( event . target ) ;
7274 var url = $el . val ( ) || '' ;
75+ var valid = this . isValidUrlInput ( event . target ) ;
76+ this . updateUrl ( url , valid ) ;
77+ } ,
78+
79+ isValidUrlInput : function ( el ) {
80+ var url = ( el . value || '' ) . trim ( ) ;
81+ try {
82+ var url = new URL ( url ) ;
83+ return [ 'http:' , 'https:' ] . includes ( url . protocol ) ;
84+ } catch ( e ) {
85+ return false ;
86+ }
87+ } ,
7388
74- if ( this . isValidUrlInput ( event . target ) ) {
89+ updateUrl : function ( url , valid ) {
90+ if ( valid ) {
7591 this . model . set ( 'url' , url . trim ( ) ) ;
7692 this . $error . hide ( ) ;
7793 } else {
@@ -83,17 +99,6 @@ EmbedUrl = View.extend(/** @lends wp.media.view.EmbedUrl.prototype */{
8399 this . $error . hide ( ) ;
84100 }
85101 }
86- } ,
87-
88- isValidUrlInput : function ( el ) {
89- var url = ( el . value || '' ) . trim ( ) ;
90-
91- var isNativeValid = el . validity ? el . validity . valid : true ;
92-
93- var pattern = / ^ ( h t t p s ? : \/ \/ ) ( [ \w . - ] + ) + ( : \d + ) ? ( \/ .* ) ? $ / i;
94- var isRegexValid = pattern . test ( url ) ;
95-
96- return isNativeValid && isRegexValid ;
97102 }
98103} ) ;
99104
0 commit comments