Bug 1079227 - Loop feedback form should always allow comments. r=nperriault
authorMark Banner <standard8@mozilla.com>
Wed, 07 Jan 2015 11:52:57 +0000
changeset 239204 91117e6349d00462218548339f8c34fde4877de9
parent 239152 5ab0b9577eae72356c629e9d2178b740fd302306
child 239205 3a1103c584cba23d7c09d42f00cdb16f79fd2e73
push id7472
push userraliiev@mozilla.com
push dateMon, 12 Jan 2015 20:36:27 +0000
treeherdermozilla-aurora@300ca104f8fb [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersnperriault
bugs1079227
milestone37.0a1
Bug 1079227 - Loop feedback form should always allow comments. r=nperriault
browser/components/loop/content/shared/js/feedbackViews.js
browser/components/loop/content/shared/js/feedbackViews.jsx
browser/components/loop/standalone/content/l10n/en-US/loop.properties
browser/components/loop/test/shared/feedbackViews_test.js
browser/locales/en-US/chrome/browser/loop/loop.properties
--- a/browser/components/loop/content/shared/js/feedbackViews.js
+++ b/browser/components/loop/content/shared/js/feedbackViews.js
@@ -71,17 +71,17 @@ loop.shared.views.FeedbackView = (functi
     },
 
     _getCategories: function() {
       return {
         audio_quality: l10n.get("feedback_category_audio_quality"),
         video_quality: l10n.get("feedback_category_video_quality"),
         disconnected : l10n.get("feedback_category_was_disconnected"),
         confusing:     l10n.get("feedback_category_confusing"),
-        other:         l10n.get("feedback_category_other")
+        other:         l10n.get("feedback_category_other2")
       };
     },
 
     _getCategoryFields: function() {
       var categories = this._getCategories();
       return Object.keys(categories).map(function(category, key) {
         return (
           React.createElement("label", {key: key, className: "feedback-category-label"}, 
@@ -114,56 +114,48 @@ loop.shared.views.FeedbackView = (functi
         return false;
       }
       return true;
     },
 
     handleCategoryChange: function(event) {
       var category = event.target.value;
       this.setState({
-        category: category,
-        description: category == "other" ? "" : this._getCategories()[category]
+        category: category
       });
       if (category == "other") {
         this.refs.description.getDOMNode().focus();
       }
     },
 
     handleDescriptionFieldChange: function(event) {
       this.setState({description: event.target.value});
     },
 
-    handleDescriptionFieldFocus: function(event) {
-      this.setState({category: "other", description: ""});
-    },
-
     handleFormSubmit: function(event) {
       event.preventDefault();
       // XXX this feels ugly, we really want a feedbackActions object here.
       this.props.feedbackStore.dispatchAction(new sharedActions.SendFeedback({
         happy: false,
         category: this.state.category,
         description: this.state.description
       }));
     },
 
     render: function() {
-      var descriptionDisplayValue = this.state.category === "other" ?
-                                    this.state.description : "";
       return (
         React.createElement(FeedbackLayout, {title: l10n.get("feedback_what_makes_you_sad"), 
                         reset: this.props.reset}, 
           React.createElement("form", {onSubmit: this.handleFormSubmit}, 
             this._getCategoryFields(), 
             React.createElement("p", null, 
               React.createElement("input", {type: "text", ref: "description", name: "description", 
                 className: "feedback-description", 
                 onChange: this.handleDescriptionFieldChange, 
-                onFocus: this.handleDescriptionFieldFocus, 
-                value: descriptionDisplayValue, 
+                value: this.state.description, 
                 placeholder: 
                   l10n.get("feedback_custom_category_text_placeholder")})
             ), 
             React.createElement("button", {type: "submit", className: "btn btn-success", 
                     disabled: !this._isFormReady()}, 
               l10n.get("feedback_submit_button")
             )
           )
--- a/browser/components/loop/content/shared/js/feedbackViews.jsx
+++ b/browser/components/loop/content/shared/js/feedbackViews.jsx
@@ -71,17 +71,17 @@ loop.shared.views.FeedbackView = (functi
     },
 
     _getCategories: function() {
       return {
         audio_quality: l10n.get("feedback_category_audio_quality"),
         video_quality: l10n.get("feedback_category_video_quality"),
         disconnected : l10n.get("feedback_category_was_disconnected"),
         confusing:     l10n.get("feedback_category_confusing"),
-        other:         l10n.get("feedback_category_other")
+        other:         l10n.get("feedback_category_other2")
       };
     },
 
     _getCategoryFields: function() {
       var categories = this._getCategories();
       return Object.keys(categories).map(function(category, key) {
         return (
           <label key={key} className="feedback-category-label">
@@ -114,56 +114,48 @@ loop.shared.views.FeedbackView = (functi
         return false;
       }
       return true;
     },
 
     handleCategoryChange: function(event) {
       var category = event.target.value;
       this.setState({
-        category: category,
-        description: category == "other" ? "" : this._getCategories()[category]
+        category: category
       });
       if (category == "other") {
         this.refs.description.getDOMNode().focus();
       }
     },
 
     handleDescriptionFieldChange: function(event) {
       this.setState({description: event.target.value});
     },
 
-    handleDescriptionFieldFocus: function(event) {
-      this.setState({category: "other", description: ""});
-    },
-
     handleFormSubmit: function(event) {
       event.preventDefault();
       // XXX this feels ugly, we really want a feedbackActions object here.
       this.props.feedbackStore.dispatchAction(new sharedActions.SendFeedback({
         happy: false,
         category: this.state.category,
         description: this.state.description
       }));
     },
 
     render: function() {
-      var descriptionDisplayValue = this.state.category === "other" ?
-                                    this.state.description : "";
       return (
         <FeedbackLayout title={l10n.get("feedback_what_makes_you_sad")}
                         reset={this.props.reset}>
           <form onSubmit={this.handleFormSubmit}>
             {this._getCategoryFields()}
             <p>
               <input type="text" ref="description" name="description"
                 className="feedback-description"
                 onChange={this.handleDescriptionFieldChange}
-                onFocus={this.handleDescriptionFieldFocus}
-                value={descriptionDisplayValue}
+                value={this.state.description}
                 placeholder={
                   l10n.get("feedback_custom_category_text_placeholder")} />
             </p>
             <button type="submit" className="btn btn-success"
                     disabled={!this._isFormReady()}>
               {l10n.get("feedback_submit_button")}
             </button>
           </form>
--- a/browser/components/loop/standalone/content/l10n/en-US/loop.properties
+++ b/browser/components/loop/standalone/content/l10n/en-US/loop.properties
@@ -69,17 +69,17 @@ fxos_app_needed=Please install the {{fxo
 
 feedback_call_experience_heading2=How was your conversation?
 feedback_what_makes_you_sad=What makes you sad?
 feedback_thank_you_heading=Thank you for your feedback!
 feedback_category_audio_quality=Audio quality
 feedback_category_video_quality=Video quality
 feedback_category_was_disconnected=Was disconnected
 feedback_category_confusing=Confusing
-feedback_category_other=Other:
+feedback_category_other2=Other
 feedback_custom_category_text_placeholder=What went wrong?
 feedback_submit_button=Submit
 feedback_back_button=Back
 ## LOCALIZATION NOTE (feedback_window_will_close_in2):
 ## Gaia l10n format; see https://github.com/mozilla-b2g/gaia/blob/f108c706fae43cd61628babdd9463e7695b2496e/apps/email/locales/email.en-US.properties#L387
 ## In this item, don't translate the part between {{..}}
 feedback_window_will_close_in2={[ plural(countdown) ]}
 feedback_window_will_close_in2[one] = This window will close in {{countdown}} second
--- a/browser/components/loop/test/shared/feedbackViews_test.js
+++ b/browser/components/loop/test/shared/feedbackViews_test.js
@@ -128,26 +128,16 @@ describe("loop.shared.views.FeedbackView
        "chosen and a description is entered",
       function() {
         clickSadFace(comp);
         fillSadFeedbackForm(comp, "other", "fake");
 
         expect(comp.getDOMNode().querySelector("form button").disabled).eql(false);
       });
 
-    it("should empty the description field when a predefined category is " +
-       "chosen",
-      function() {
-        clickSadFace(comp);
-
-        fillSadFeedbackForm(comp, "confusing");
-
-        expect(comp.getDOMNode().querySelector(".feedback-description").value).eql("");
-      });
-
     it("should enable the form submit button once a predefined category is " +
        "chosen",
       function() {
         clickSadFace(comp);
 
         fillSadFeedbackForm(comp, "confusing");
 
         expect(comp.getDOMNode().querySelector("form button").disabled).eql(false);
--- a/browser/locales/en-US/chrome/browser/loop/loop.properties
+++ b/browser/locales/en-US/chrome/browser/loop/loop.properties
@@ -266,17 +266,17 @@ powered_by_afterLogo=
 
 feedback_call_experience_heading2=How was your conversation?
 feedback_what_makes_you_sad=What makes you sad?
 feedback_thank_you_heading=Thank you for your feedback!
 feedback_category_audio_quality=Audio quality
 feedback_category_video_quality=Video quality
 feedback_category_was_disconnected=Was disconnected
 feedback_category_confusing=Confusing
-feedback_category_other=Other:
+feedback_category_other2=Other
 feedback_custom_category_text_placeholder=What went wrong?
 feedback_submit_button=Submit
 feedback_back_button=Back
 ## LOCALIZATION NOTE (feedback_window_will_close_in2):
 ## Semicolon-separated list of plural forms. See:
 ## http://developer.mozilla.org/en/docs/Localization_and_Plurals
 ## In this item, don't translate the part between {{..}}
 feedback_window_will_close_in2=This window will close in {{countdown}} second;This window will close in {{countdown}} seconds