Skip to content

Commit bda54e5

Browse files
feat: add error for when the URL is invalid
1 parent 74c99a3 commit bda54e5

3 files changed

Lines changed: 39 additions & 5 deletions

File tree

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

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ var View = wp.media.View,
1414
* @augments Backbone.View
1515
*/
1616
EmbedUrl = View.extend(/** @lends wp.media.view.EmbedUrl.prototype */{
17-
tagName: 'span',
17+
tagName: 'span',
1818
className: 'embed-url',
1919

2020
events: {
@@ -28,7 +28,13 @@ EmbedUrl = View.extend(/** @lends wp.media.view.EmbedUrl.prototype */{
2828
this.input = this.$input[0];
2929

3030
this.spinner = $('<span class="spinner" />')[0];
31-
this.$el.append([ this.input, this.spinner ]);
31+
32+
this.error = $('<div class="notice notice-error embed-url-error"><p></p></div>')[0];
33+
34+
this.$error = $(this.error);
35+
this.$error.hide();
36+
37+
this.$el.append([ this.input, this.spinner, this.error ]);
3238

3339
this.listenTo( this.model, 'change:url', this.render );
3440

@@ -62,8 +68,32 @@ EmbedUrl = View.extend(/** @lends wp.media.view.EmbedUrl.prototype */{
6268
},
6369

6470
url: function( event ) {
65-
var url = event.target.value || '';
66-
this.model.set( 'url', url.trim() );
71+
var $el = $( event.target );
72+
var url = $el.val() || '';
73+
74+
if ( this.isValidUrlInput( event.target ) ) {
75+
this.model.set( 'url', url.trim() );
76+
this.$error.hide();
77+
} else {
78+
if ( url.length > 0 ) {
79+
this.model.set( 'url', '' );
80+
this.$error.find( 'p' ).text( l10n.invalidUrl );
81+
this.$error.show();
82+
} else {
83+
this.$error.hide();
84+
}
85+
}
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;
6797
}
6898
});
6999

src/wp-includes/css/media-views.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2118,6 +2118,10 @@
21182118
right: 26px;
21192119
}
21202120

2121+
.media-frame .embed-url-error {
2122+
margin: 4px 0;
2123+
}
2124+
21212125
.media-frame .embed-loading .embed-url .spinner {
21222126
visibility: visible;
21232127
}

src/wp-includes/media.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5076,6 +5076,7 @@ function wp_enqueue_media( $args = array() ) {
50765076

50775077
// From URL.
50785078
'insertFromUrlTitle' => __( 'Insert from URL' ),
5079+
'invalidUrl' => __( 'Please enter a valid URL.' ),
50795080

50805081
// Featured Images.
50815082
'setFeaturedImageTitle' => $post_type_object->labels->featured_image,
@@ -6446,4 +6447,3 @@ function wp_get_image_editor_output_format( $filename, $mime_type ) {
64466447
*/
64476448
return apply_filters( 'image_editor_output_format', $output_format, $filename, $mime_type );
64486449
}
6449-

0 commit comments

Comments
 (0)