Merge "Create gr-confirm-submit-dialog component"
This commit is contained in:
		@@ -175,7 +175,11 @@ Supported events:
 | 
			
		||||
  and link:rest-api-changes.html#revision-info[RevisionInfo] are
 | 
			
		||||
  passed as arguments. Similar to a form submit validation, the
 | 
			
		||||
  function must return true to allow the operation to continue, or
 | 
			
		||||
  false to prevent it.
 | 
			
		||||
  false to prevent it. The function may be called multiple times, for
 | 
			
		||||
  example, if submitting a change shows a confirmation dialog, this
 | 
			
		||||
  event may be called to validate that the check whether dialog can be
 | 
			
		||||
  shown, and called again when the submit is confirmed to check whether
 | 
			
		||||
  the actual submission action can proceed.
 | 
			
		||||
 | 
			
		||||
* `comment`: Invoked when a DOM element that represents a comment is
 | 
			
		||||
  created. This DOM element is passed as argument. This DOM element
 | 
			
		||||
 
 | 
			
		||||
@@ -124,3 +124,20 @@ This endpoint decorator wraps the voting buttons in the reply dialog.
 | 
			
		||||
 | 
			
		||||
=== header-title
 | 
			
		||||
This endpoint wraps the title-text in the application header.
 | 
			
		||||
 | 
			
		||||
=== confirm-submit-change
 | 
			
		||||
This endpoint is inside the confirm submit dialog. By default it displays a
 | 
			
		||||
generic confirmation message regarding submission of the change. Plugins may add
 | 
			
		||||
content to this message or replace it entirely.
 | 
			
		||||
 | 
			
		||||
In addition to default parameters, the following are available:
 | 
			
		||||
 | 
			
		||||
* `change`
 | 
			
		||||
+
 | 
			
		||||
The change beinng potentially submitted, an instance of
 | 
			
		||||
link:rest-api-changes.html#change-info[ChangeInfo]
 | 
			
		||||
 | 
			
		||||
* `action`
 | 
			
		||||
+
 | 
			
		||||
The submit action, including the title and label, an instance of
 | 
			
		||||
link:rest-api-changes.html#action-info[ActionInfo]
 | 
			
		||||
 
 | 
			
		||||
@@ -24,6 +24,7 @@ limitations under the License.
 | 
			
		||||
<link rel="import" href="../../core/gr-navigation/gr-navigation.html">
 | 
			
		||||
<link rel="import" href="../../core/gr-reporting/gr-reporting.html">
 | 
			
		||||
<link rel="import" href="../../shared/gr-button/gr-button.html">
 | 
			
		||||
<link rel="import" href="../../shared/gr-confirm-dialog/gr-confirm-dialog.html">
 | 
			
		||||
<link rel="import" href="../../shared/gr-dropdown/gr-dropdown.html">
 | 
			
		||||
<link rel="import" href="../../shared/gr-icons/gr-icons.html">
 | 
			
		||||
<link rel="import" href="../../shared/gr-js-api-interface/gr-js-api-interface.html">
 | 
			
		||||
@@ -34,6 +35,7 @@ limitations under the License.
 | 
			
		||||
<link rel="import" href="../gr-confirm-move-dialog/gr-confirm-move-dialog.html">
 | 
			
		||||
<link rel="import" href="../gr-confirm-rebase-dialog/gr-confirm-rebase-dialog.html">
 | 
			
		||||
<link rel="import" href="../gr-confirm-revert-dialog/gr-confirm-revert-dialog.html">
 | 
			
		||||
<link rel="import" href="../gr-confirm-submit-dialog/gr-confirm-submit-dialog.html">
 | 
			
		||||
<link rel="import" href="../../../styles/shared-styles.html">
 | 
			
		||||
 | 
			
		||||
<dom-module id="gr-change-actions">
 | 
			
		||||
@@ -193,6 +195,13 @@ limitations under the License.
 | 
			
		||||
          on-confirm="_handleAbandonDialogConfirm"
 | 
			
		||||
          on-cancel="_handleConfirmDialogCancel"
 | 
			
		||||
          hidden></gr-confirm-abandon-dialog>
 | 
			
		||||
      <gr-confirm-submit-dialog
 | 
			
		||||
          id="confirmSubmitDialog"
 | 
			
		||||
          class="confirmDialog"
 | 
			
		||||
          change="[[change]]"
 | 
			
		||||
          action="[[revisionActions.submit]]"
 | 
			
		||||
          on-cancel="_handleConfirmDialogCancel"
 | 
			
		||||
          on-confirm="_handleSubmitConfirm" hidden></gr-confirm-submit-dialog>
 | 
			
		||||
      <gr-confirm-dialog id="createFollowUpDialog"
 | 
			
		||||
          class="confirmDialog"
 | 
			
		||||
          confirm-label="Create"
 | 
			
		||||
@@ -238,25 +247,6 @@ limitations under the License.
 | 
			
		||||
          Do you really want to delete the edit?
 | 
			
		||||
        </div>
 | 
			
		||||
      </gr-confirm-dialog>
 | 
			
		||||
      <gr-confirm-dialog
 | 
			
		||||
          id="confirmSubmitDialog"
 | 
			
		||||
          class="confirmDialog"
 | 
			
		||||
          confirm-label="Submit"
 | 
			
		||||
          confirm-on-enter
 | 
			
		||||
          on-cancel="_handleConfirmDialogCancel"
 | 
			
		||||
          on-confirm="_handleSubmitConfirm">
 | 
			
		||||
        <div class="header" slot="header">
 | 
			
		||||
          Submit Change
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="main" slot="main">
 | 
			
		||||
          <p>
 | 
			
		||||
            Are you sure you want to to <strong>submit</strong> this change?
 | 
			
		||||
          </p>
 | 
			
		||||
          <p class="changeSubject">
 | 
			
		||||
            <strong>[[change.subject]]</strong>
 | 
			
		||||
          </p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </gr-confirm-dialog>
 | 
			
		||||
    </gr-overlay>
 | 
			
		||||
    <gr-js-api-interface id="jsAPI"></gr-js-api-interface>
 | 
			
		||||
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
 | 
			
		||||
 
 | 
			
		||||
@@ -252,8 +252,8 @@ limitations under the License.
 | 
			
		||||
      assert.deepEqual(result, actions);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('submit change', done => {
 | 
			
		||||
      element.$.confirmSubmitDialog.$.confirm.focus = done;
 | 
			
		||||
    test('submit change', () => {
 | 
			
		||||
      const showSpy = sandbox.spy(element, '_showActionDialog');
 | 
			
		||||
      sandbox.stub(element.$.restAPI, 'getFromProjectLookup')
 | 
			
		||||
          .returns(Promise.resolve('test'));
 | 
			
		||||
      sandbox.stub(element, 'fetchChangeUpdates',
 | 
			
		||||
@@ -270,6 +270,9 @@ limitations under the License.
 | 
			
		||||
      const submitButton = element.$$('gr-button[data-action-key="submit"]');
 | 
			
		||||
      assert.ok(submitButton);
 | 
			
		||||
      MockInteractions.tap(submitButton);
 | 
			
		||||
 | 
			
		||||
      flushAsynchronousOperations();
 | 
			
		||||
      assert.isTrue(showSpy.calledWith(element.$.confirmSubmitDialog));
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('_handleSubmitConfirm', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,56 @@
 | 
			
		||||
<!--
 | 
			
		||||
@license
 | 
			
		||||
Copyright (C) 2018 The Android Open Source Project
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
<link rel="import" href="../../../bower_components/polymer/polymer.html">
 | 
			
		||||
 | 
			
		||||
<link rel="import" href="../../core/gr-navigation/gr-navigation.html">
 | 
			
		||||
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
 | 
			
		||||
<link rel="import" href="../../../styles/shared-styles.html">
 | 
			
		||||
 | 
			
		||||
<dom-module id="gr-confirm-submit-dialog">
 | 
			
		||||
  <template>
 | 
			
		||||
    <style include="shared-styles">
 | 
			
		||||
      #dialog {
 | 
			
		||||
        min-width: 40em;
 | 
			
		||||
      }
 | 
			
		||||
      p {
 | 
			
		||||
        margin-bottom: 1em;
 | 
			
		||||
      }
 | 
			
		||||
    </style>
 | 
			
		||||
    <gr-confirm-dialog
 | 
			
		||||
        id="dialog"
 | 
			
		||||
        confirm-label="Continue"
 | 
			
		||||
        confirm-on-enter
 | 
			
		||||
        on-cancel="_handleCancelTap"
 | 
			
		||||
        on-confirm="_handleConfirmTap">
 | 
			
		||||
      <div class="header" slot="header">
 | 
			
		||||
        [[action.label]]
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="main" slot="main">
 | 
			
		||||
        <gr-endpoint-decorator name="confirm-submit-change">
 | 
			
		||||
          <p>
 | 
			
		||||
            Ready to submit “<strong>[[change.subject]]</strong>”?
 | 
			
		||||
          </p>
 | 
			
		||||
          <gr-endpoint-param name="change" value="[[change]]"></gr-endpoint-param>
 | 
			
		||||
          <gr-endpoint-param name="action" value="[[action]]"></gr-endpoint-param>
 | 
			
		||||
        </gr-endpoint-decorator>
 | 
			
		||||
      </div>
 | 
			
		||||
    </gr-confirm-dialog>
 | 
			
		||||
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
 | 
			
		||||
  </template>
 | 
			
		||||
  <script src="gr-confirm-submit-dialog.js"></script>
 | 
			
		||||
</dom-module>
 | 
			
		||||
@@ -0,0 +1,65 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @license
 | 
			
		||||
 * Copyright (C) 2018 The Android Open Source Project
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
(function() {
 | 
			
		||||
  'use strict';
 | 
			
		||||
 | 
			
		||||
  Polymer({
 | 
			
		||||
    is: 'gr-confirm-submit-dialog',
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Fired when the confirm button is pressed.
 | 
			
		||||
     *
 | 
			
		||||
     * @event confirm
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Fired when the cancel button is pressed.
 | 
			
		||||
     *
 | 
			
		||||
     * @event cancel
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    properties: {
 | 
			
		||||
      /**
 | 
			
		||||
       * @type {{
 | 
			
		||||
       *    subject: string,
 | 
			
		||||
       *  }}
 | 
			
		||||
       */
 | 
			
		||||
      change: Object,
 | 
			
		||||
 | 
			
		||||
      /**
 | 
			
		||||
       * @type {{
 | 
			
		||||
       *    label: string,
 | 
			
		||||
       *  }}
 | 
			
		||||
       */
 | 
			
		||||
      action: Object,
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    resetFocus(e) {
 | 
			
		||||
      this.$.dialog.resetFocus();
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _handleConfirmTap(e) {
 | 
			
		||||
      e.preventDefault();
 | 
			
		||||
      this.dispatchEvent(new CustomEvent('confirm', {bubbles: false}));
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    _handleCancelTap(e) {
 | 
			
		||||
      e.preventDefault();
 | 
			
		||||
      this.dispatchEvent(new CustomEvent('cancel', {bubbles: false}));
 | 
			
		||||
    },
 | 
			
		||||
  });
 | 
			
		||||
})();
 | 
			
		||||
@@ -0,0 +1,63 @@
 | 
			
		||||
<!DOCTYPE html>
 | 
			
		||||
<!--
 | 
			
		||||
@license
 | 
			
		||||
Copyright (C) 2018 The Android Open Source Project
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
 | 
			
		||||
<title>gr-confirm-submit-dialog</title>
 | 
			
		||||
 | 
			
		||||
<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
 | 
			
		||||
<script src="../../../bower_components/web-component-tester/browser.js"></script>
 | 
			
		||||
<link rel="import" href="../../../test/common-test-setup.html"/>
 | 
			
		||||
<script src="../../../bower_components/page/page.js"></script>
 | 
			
		||||
 | 
			
		||||
<link rel="import" href="gr-confirm-submit-dialog.html">
 | 
			
		||||
 | 
			
		||||
<script>void(0);</script>
 | 
			
		||||
 | 
			
		||||
<test-fixture id="basic">
 | 
			
		||||
  <template>
 | 
			
		||||
    <gr-confirm-submit-dialog></gr-confirm-submit-dialog>
 | 
			
		||||
  </template>
 | 
			
		||||
</test-fixture>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
  suite('gr-file-list-header tests', () => {
 | 
			
		||||
    let element;
 | 
			
		||||
    let sandbox;
 | 
			
		||||
 | 
			
		||||
    setup(() => {
 | 
			
		||||
      sandbox = sinon.sandbox.create();
 | 
			
		||||
      element = fixture('basic');
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    teardown(() => {
 | 
			
		||||
      sandbox.restore();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('display', () => {
 | 
			
		||||
      element.action = {label: 'my-label'};
 | 
			
		||||
      element.change = {subject: 'my-subject'};
 | 
			
		||||
      flushAsynchronousOperations();
 | 
			
		||||
      const header = element.$$('.header');
 | 
			
		||||
      assert.equal(header.textContent.trim(), 'my-label');
 | 
			
		||||
 | 
			
		||||
      const message = element.$$('.main p');
 | 
			
		||||
      assert.notEqual(message.textContent.length, 0);
 | 
			
		||||
      assert.notEqual(message.textContent.indexOf('my-subject'), -1);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
</script>
 | 
			
		||||
@@ -73,5 +73,11 @@ limitations under the License.
 | 
			
		||||
 | 
			
		||||
      assert.isTrue(handleConfirmStub.called);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('resetFocus', () => {
 | 
			
		||||
      const focusStub = sandbox.stub(element.$.confirm, 'focus');
 | 
			
		||||
      element.resetFocus();
 | 
			
		||||
      assert.isTrue(focusStub.calledOnce);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
</script>
 | 
			
		||||
 
 | 
			
		||||
@@ -71,6 +71,7 @@ limitations under the License.
 | 
			
		||||
    'change/gr-confirm-move-dialog/gr-confirm-move-dialog_test.html',
 | 
			
		||||
    'change/gr-confirm-rebase-dialog/gr-confirm-rebase-dialog_test.html',
 | 
			
		||||
    'change/gr-confirm-revert-dialog/gr-confirm-revert-dialog_test.html',
 | 
			
		||||
    'change/gr-confirm-submit-dialog/gr-confirm-submit-dialog_test.html',
 | 
			
		||||
    'change/gr-download-dialog/gr-download-dialog_test.html',
 | 
			
		||||
    'change/gr-file-list-header/gr-file-list-header_test.html',
 | 
			
		||||
    'change/gr-file-list/gr-file-list_test.html',
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user