blob: c29917bb4c9878ded631e6b4c5ad0af723cda0ba [file] [log] [blame]
<!--
`confirm-dialog-sk` pops up a dialog with OK and Cancel buttons. Its open method returns a Promise
which will resolve when the user clicks OK or reject when the user clicks Cancel.
Example:
<confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>
<script>
(function(){
$$$('confirm-dialog-sk').open("Proceed with taking over the world?").then(function() {
sk.post("/brain");
}, function() {
sk.post("/pinky");
});
})();
</script>
Properties:
message - The message to display. Can be set via the open method. Default is "Proceed?".
dismiss_text - The label of the button that triggers rejection. Default is "Cancel".
confirm_text - The label of the button that triggers resolution. Default is "OK".
promise - The promise that will resolve if the user clicks the confirm button or reject if the
user clicks the dismiss button. It is initially null. Intended to be read-only.
Methods:
open(message, dismiss_text, confirm_text) - All arguments optional.
- Sets the properties based on the arguments.
- Sets the dialog to be displayed.
- Sets and returns the promise property.
- When the user clicks the confirm or dismiss button, calls close() and resolves or rejects
the previous value of promise.
close() - Sets the dialog to be hidden and unsets promise.
Events:
None.
-->
<link rel="import" href="/res/imp/bower_components/paper-button/paper-button.html">
<link rel="import" href="/res/imp/bower_components/paper-dialog/paper-dialog.html">
<dom-module id="confirm-dialog-sk">
<template>
<style>
paper-button {
color: #1f78b4;
}
paper-button:hover {
background: #eee;
}
</style>
<paper-dialog id="dialog" modal>
<div>[[message]]</div>
<paper-button dialog-dismiss id="dismiss_button">[[dismiss_text]]</paper-button>
<paper-button dialog-confirm id="confirm_button" autofocus>[[confirm_text]]</paper-button>
</paper-dialog>
</template>
</dom-module>
<script>
Polymer({
is: 'confirm-dialog-sk',
properties: {
message: {
type: String,
value: 'Proceed?',
reflectToAttribute: true
},
dismiss_text: {
type: String,
value: 'Cancel',
reflectToAttribute: true
},
confirm_text: {
type: String,
value: 'OK',
reflectToAttribute: true
},
promise: Promise,
_resolve: Function,
_reject: Function,
},
ready: function () {
this.$.dismiss_button.addEventListener('click', function(e) {
var reject = this._reject;
this.close();
// Call reject after a short delay to allow UI to update after this.close().
window.setTimeout(reject, 10);
}.bind(this));
this.$.confirm_button.addEventListener('click', function(e) {
var resolve = this._resolve;
this.close();
// Call reject after a short delay to allow UI to update after this.close().
window.setTimeout(resolve, 10);
}.bind(this));
},
open: function (new_message, new_dismiss_text, new_confirm_text) {
if (new_message) {
this.message = new_message;
}
if (new_dismiss_text) {
this.dismiss_text = new_dismiss_text;
}
if (new_confirm_text) {
this.confirm_text = new_confirm_text;
}
this.promise = new Promise(function(resolve, reject) {
this._resolve = resolve;
this._reject = reject;
this.$.dialog.open();
}.bind(this));
return this.promise;
},
close: function () {
this.$.dialog.close();
this.promise = null;
this._reject = null;
this._resolve = null;
},
});
</script>