target: '_blank'
} );
- // TODO: Use a stylesheet instead of these inline styles
- this.$dialog =
- $( '<div style="position: relative;"></div>' ).append(
- $( '<div class="feedback-mode feedback-form"></div>' ).append(
- $( '<small>' ).append(
- $( '<p>' ).msg(
- 'feedback-bugornote',
- $bugNoteLink,
- fb.title.getNameText(),
- $feedbackPageLink.clone()
- )
- ),
- $( '<div style="margin-top: 1em;"></div>' ).append(
- mw.msg( 'feedback-subject' ),
- $( '<br>' ),
- $( '<input type="text" class="feedback-subject" name="subject" maxlength="60" style="width: 100%; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;"/>' )
- ),
- $( '<div style="margin-top: 0.4em;"></div>' ).append(
- mw.msg( 'feedback-message' ),
- $( '<br>' ),
- $( '<textarea name="message" class="feedback-message" rows="5" cols="60"></textarea>' )
- )
- ),
- $( '<div class="feedback-mode feedback-bugs"></div>' ).append(
- $( '<p>' ).msg( 'feedback-bugcheck', $bugsListLink )
- ),
- $( '<div class="feedback-mode feedback-submitting" style="text-align: center; margin: 3em 0;"></div>' ).append(
- mw.msg( 'feedback-adding' ),
- $( '<br>' ),
- $( '<span class="feedback-spinner"></span>' )
- ),
- $( '<div class="feedback-mode feedback-thanks" style="text-align: center; margin:1em"></div>' ).msg(
- 'feedback-thanks', fb.title.getNameText(), $feedbackPageLink.clone()
- ),
- $( '<div class="feedback-mode feedback-error" style="position: relative;"></div>' ).append(
- $( '<div class="feedback-error-msg style="color: #990000; margin-top: 0.4em;"></div>' )
- )
- );
+ // TODO: Use a stylesheet instead of these inline styles in the template
+ this.$dialog = mw.template.get( 'mediawiki.feedback', 'dialog.html' ).render();
+ this.$dialog.find( '.feedback-mode small p' ).msg(
+ 'feedback-bugornote',
+ $bugNoteLink,
+ fb.title.getNameText(),
+ $feedbackPageLink.clone()
+ );
+ this.$dialog.find( '.feedback-form .subject span' ).msg( 'feedback-subject' );
+ this.$dialog.find( '.feedback-form .message span' ).msg( 'feedback-message' );
+ this.$dialog.find( '.feedback-bugs p' ).msg( 'feedback-bugcheck', $bugsListLink );
+ this.$dialog.find( '.feedback-submitting span' ).msg( 'feedback-adding' );
+ this.$dialog.find( '.feedback-thanks' ).msg( 'feedback-thanks', fb.title.getNameText(),
+ $feedbackPageLink.clone() );
this.$dialog.dialog( {
width: 500,
autoOpen: false,
- title: mw.msg( this.dialogTitleMessageKey ),
+ title: mw.message( this.dialogTitleMessageKey ).escaped(),
modal: true,
buttons: fb.buttons
} );
var subject, message,
fb = this;
- function ok( result ) {
- if ( result.edit !== undefined ) {
- if ( result.edit.result === 'Success' ) {
- fb.displayThanks();
- } else {
- // unknown API result
- fb.displayError( 'feedback-error1' );
- }
- } else {
- // edit failed
- fb.displayError( 'feedback-error2' );
- }
- }
-
- function err() {
- // ajax request failed
- fb.displayError( 'feedback-error3' );
- }
-
// Get the values to submit.
- subject = this.subjectInput.value;
+ subject = $.trim( this.subjectInput.value );
// We used to include "mw.html.escape( navigator.userAgent )" but there are legal issues
// with posting this without their explicit consent
- message = this.messageInput.value;
+ message = $.trim( this.messageInput.value );
if ( message.indexOf( '~~~' ) === -1 ) {
message += ' ~~~~';
}
subject,
message,
{ redirect: true }
- ).done( ok ).fail( err );
+ )
+ .done( function ( result ) {
+ if ( result.edit.result === 'Success' ) {
+ fb.displayThanks();
+ } else {
+ // unknown API result
+ fb.displayError( 'feedback-error1' );
+ }
+ } )
+ .fail( function ( code, result ) {
+ if ( code === 'http' ) {
+ // ajax request failed
+ fb.displayError( 'feedback-error3' );
+ mw.log.warn( 'Feedback report failed with HTTP error: ' + result.textStatus );
+ } else {
+ fb.displayError( 'feedback-error2' );
+ mw.log.warn( 'Feedback report failed with API error: ' + code );
+ }
+ } );
},
/**