Save comments on Ctrl+Enter and Meta+Enter
Feature: Issue 4997 Change-Id: Ia1887b3ee558b96182e3ea987370c9f555c90502
This commit is contained in:
		@@ -378,7 +378,11 @@ limitations under the License.
 | 
				
			|||||||
          <tr>
 | 
					          <tr>
 | 
				
			||||||
            <td>
 | 
					            <td>
 | 
				
			||||||
              <span class="key modifier">Ctrl</span>
 | 
					              <span class="key modifier">Ctrl</span>
 | 
				
			||||||
              <span class="key">s</span>
 | 
					              <span class="key">s</span><br/>
 | 
				
			||||||
 | 
					              <span class="key modifier">Ctrl</span>
 | 
				
			||||||
 | 
					              <span class="key">Enter</span><br/>
 | 
				
			||||||
 | 
					              <span class="key modifier">Meta</span>
 | 
				
			||||||
 | 
					              <span class="key">Enter</span>
 | 
				
			||||||
            </td>
 | 
					            </td>
 | 
				
			||||||
            <td>Save comment</td>
 | 
					            <td>Save comment</td>
 | 
				
			||||||
          </tr>
 | 
					          </tr>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -243,13 +243,18 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    _handleTextareaKeydown: function(e) {
 | 
					    _handleTextareaKeydown: function(e) {
 | 
				
			||||||
      switch (e.keyCode) {
 | 
					      switch (e.keyCode) {
 | 
				
			||||||
 | 
					        case 13: // 'enter'
 | 
				
			||||||
 | 
					          if (this._messageText.length !== 0 && (e.metaKey || e.ctrlKey)) {
 | 
				
			||||||
 | 
					            this._handleSave(e);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          break;
 | 
				
			||||||
        case 27: // 'esc'
 | 
					        case 27: // 'esc'
 | 
				
			||||||
          if (this._messageText.length === 0) {
 | 
					          if (this._messageText.length === 0) {
 | 
				
			||||||
            this._handleCancel(e);
 | 
					            this._handleCancel(e);
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
        case 83: // 's'
 | 
					        case 83: // 's'
 | 
				
			||||||
          if (e.ctrlKey) {
 | 
					          if (this._messageText.length !== 0 && e.ctrlKey) {
 | 
				
			||||||
            this._handleSave(e);
 | 
					            this._handleSave(e);
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
          break;
 | 
					          break;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -175,19 +175,67 @@ limitations under the License.
 | 
				
			|||||||
          'header middle content is is not visible');
 | 
					          'header middle content is is not visible');
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test('esc does not close comment unless text is empty', function(done) {
 | 
					    suite('while editing', function() {
 | 
				
			||||||
      element.editing = true;
 | 
					      setup(function() {
 | 
				
			||||||
      element._messageText = 'test';
 | 
					        element.editing = true;
 | 
				
			||||||
      var textarea = element.$.editTextarea;
 | 
					        element._messageText = 'test';
 | 
				
			||||||
      var closeSpy = sandbox.spy(element, '_handleCancel');
 | 
					        sandbox.stub(element, '_handleCancel');
 | 
				
			||||||
 | 
					        sandbox.stub(element, '_handleSave');
 | 
				
			||||||
 | 
					        flushAsynchronousOperations();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      flush(function() {
 | 
					      suite('when text is empty', function() {
 | 
				
			||||||
        MockInteractions.pressAndReleaseKeyOn(textarea, 27); // esc
 | 
					        setup(function() {
 | 
				
			||||||
        assert.isFalse(closeSpy.called);
 | 
					          element._messageText = '';
 | 
				
			||||||
        element._messageText = '';
 | 
					        });
 | 
				
			||||||
        MockInteractions.pressAndReleaseKeyOn(textarea, 27); // esc
 | 
					
 | 
				
			||||||
        assert.isTrue(closeSpy.called);
 | 
					        test('esc closes comment when text is empty', function() {
 | 
				
			||||||
        done();
 | 
					          MockInteractions.pressAndReleaseKeyOn(
 | 
				
			||||||
 | 
					              element.$.editTextarea, 27); // esc
 | 
				
			||||||
 | 
					          assert.isTrue(element._handleCancel.called);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        test('ctrl+enter does not save', function() {
 | 
				
			||||||
 | 
					          MockInteractions.pressAndReleaseKeyOn(
 | 
				
			||||||
 | 
					              element.$.editTextarea, 13, 'ctrl'); // ctrl + enter
 | 
				
			||||||
 | 
					          assert.isFalse(element._handleSave.called);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        test('meta+enter does not save', function() {
 | 
				
			||||||
 | 
					          MockInteractions.pressAndReleaseKeyOn(
 | 
				
			||||||
 | 
					              element.$.editTextarea, 13, 'meta'); // meta + enter
 | 
				
			||||||
 | 
					          assert.isFalse(element._handleSave.called);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        test('ctrl+s does not save', function() {
 | 
				
			||||||
 | 
					          MockInteractions.pressAndReleaseKeyOn(
 | 
				
			||||||
 | 
					              element.$.editTextarea, 83, 'ctrl'); // ctrl + s
 | 
				
			||||||
 | 
					          assert.isFalse(element._handleSave.called);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      test('esc does not close comment that has content', function() {
 | 
				
			||||||
 | 
					        MockInteractions.pressAndReleaseKeyOn(
 | 
				
			||||||
 | 
					            element.$.editTextarea, 27); // esc
 | 
				
			||||||
 | 
					        assert.isFalse(element._handleCancel.called);
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      test('ctrl+enter saves', function() {
 | 
				
			||||||
 | 
					        MockInteractions.pressAndReleaseKeyOn(
 | 
				
			||||||
 | 
					            element.$.editTextarea, 13, 'ctrl'); // ctrl + enter
 | 
				
			||||||
 | 
					        assert.isTrue(element._handleSave.called);
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      test('meta+enter saves', function() {
 | 
				
			||||||
 | 
					        MockInteractions.pressAndReleaseKeyOn(
 | 
				
			||||||
 | 
					            element.$.editTextarea, 13, 'meta'); // meta + enter
 | 
				
			||||||
 | 
					        assert.isTrue(element._handleSave.called);
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      test('ctrl+s saves', function() {
 | 
				
			||||||
 | 
					        MockInteractions.pressAndReleaseKeyOn(
 | 
				
			||||||
 | 
					            element.$.editTextarea, 83, 'ctrl'); // ctrl + s
 | 
				
			||||||
 | 
					        assert.isTrue(element._handleSave.called);
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user