Skip to content

Commit bce0998

Browse files
fix: add debouncing and better input validation
1 parent bda54e5 commit bce0998

1 file changed

Lines changed: 17 additions & 12 deletions

File tree

  • src/js/media/views/embed

src/js/media/views/embed/url.js

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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 = /^(https?:\/\/)([\w.-]+)+(:\d+)?(\/.*)?$/i;
94-
var isRegexValid = pattern.test( url );
95-
96-
return isNativeValid && isRegexValid;
97102
}
98103
});
99104

0 commit comments

Comments
 (0)