diff options
Diffstat (limited to 'catapult/third_party/polymer/components/paper-dialog-behavior/paper-dialog-behavior.html')
-rw-r--r-- | catapult/third_party/polymer/components/paper-dialog-behavior/paper-dialog-behavior.html | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/catapult/third_party/polymer/components/paper-dialog-behavior/paper-dialog-behavior.html b/catapult/third_party/polymer/components/paper-dialog-behavior/paper-dialog-behavior.html new file mode 100644 index 00000000..49d724cb --- /dev/null +++ b/catapult/third_party/polymer/components/paper-dialog-behavior/paper-dialog-behavior.html @@ -0,0 +1,139 @@ +<!-- +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt +--> + +<link rel="import" href="../polymer/polymer.html"> +<link rel="import" href="../iron-overlay-behavior/iron-overlay-behavior.html"> + +<script> + +/** +Use `Polymer.PaperDialogBehavior` and `paper-dialog-shared-styles.html` to implement a Material Design +dialog. + +For example, if `<paper-dialog-impl>` implements this behavior: + + <paper-dialog-impl> + <h2>Header</h2> + <div>Dialog body</div> + <div class="buttons"> + <paper-button dialog-dismiss>Cancel</paper-button> + <paper-button dialog-confirm>Accept</paper-button> + </div> + </paper-dialog-impl> + +`paper-dialog-shared-styles.html` provide styles for a header, content area, and an action area for buttons. +Use the `<h2>` tag for the header and the `buttons` class for the action area. You can use the +`paper-dialog-scrollable` element (in its own repository) if you need a scrolling content area. + +Use the `dialog-dismiss` and `dialog-confirm` attributes on interactive controls to close the +dialog. If the user dismisses the dialog with `dialog-confirm`, the `closingReason` will update +to include `confirmed: true`. + +### Accessibility + +This element has `role="dialog"` by default. Depending on the context, it may be more appropriate +to override this attribute with `role="alertdialog"`. + +If `modal` is set, the element will prevent the focus from exiting the element. +It will also ensure that focus remains in the dialog. + +@hero hero.svg +@demo demo/index.html +@polymerBehavior Polymer.PaperDialogBehavior +*/ + Polymer.PaperDialogBehaviorImpl = { + + hostAttributes: { + 'role': 'dialog', + 'tabindex': '-1' + }, + + properties: { + + /** + * If `modal` is true, this implies `no-cancel-on-outside-click`, `no-cancel-on-esc-key` and `with-backdrop`. + */ + modal: { + type: Boolean, + value: false + } + + }, + + observers: [ + '_modalChanged(modal, _readied)' + ], + + listeners: { + 'tap': '_onDialogClick' + }, + + ready: function () { + // Only now these properties can be read. + this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick; + this.__prevNoCancelOnEscKey = this.noCancelOnEscKey; + this.__prevWithBackdrop = this.withBackdrop; + }, + + _modalChanged: function(modal, readied) { + // modal implies noCancelOnOutsideClick, noCancelOnEscKey and withBackdrop. + // We need to wait for the element to be ready before we can read the + // properties values. + if (!readied) { + return; + } + + if (modal) { + this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick; + this.__prevNoCancelOnEscKey = this.noCancelOnEscKey; + this.__prevWithBackdrop = this.withBackdrop; + this.noCancelOnOutsideClick = true; + this.noCancelOnEscKey = true; + this.withBackdrop = true; + } else { + // If the value was changed to false, let it false. + this.noCancelOnOutsideClick = this.noCancelOnOutsideClick && + this.__prevNoCancelOnOutsideClick; + this.noCancelOnEscKey = this.noCancelOnEscKey && + this.__prevNoCancelOnEscKey; + this.withBackdrop = this.withBackdrop && this.__prevWithBackdrop; + } + }, + + _updateClosingReasonConfirmed: function(confirmed) { + this.closingReason = this.closingReason || {}; + this.closingReason.confirmed = confirmed; + }, + + /** + * Will dismiss the dialog if user clicked on an element with dialog-dismiss + * or dialog-confirm attribute. + */ + _onDialogClick: function(event) { + // Search for the element with dialog-confirm or dialog-dismiss, + // from the root target until this (excluded). + var path = Polymer.dom(event).path; + for (var i = 0; i < path.indexOf(this); i++) { + var target = path[i]; + if (target.hasAttribute && (target.hasAttribute('dialog-dismiss') || target.hasAttribute('dialog-confirm'))) { + this._updateClosingReasonConfirmed(target.hasAttribute('dialog-confirm')); + this.close(); + event.stopPropagation(); + break; + } + } + } + + }; + + /** @polymerBehavior */ + Polymer.PaperDialogBehavior = [Polymer.IronOverlayBehavior, Polymer.PaperDialogBehaviorImpl]; + +</script> |