minifix(GUI): improve unsafe mode setting dialog (#840)

- Change dialog message to "Are you sure you want to turn this on? You
  will be able to overwrite your system drives if you're not careful."

- Remove "CANCEL" button and put a cross at the top right corner.

- Change dialog button label from "YES, CONTINUE" to "ENABLE UNSAFE
  MODE"

In order to adapt to changes described above:

- `WarningModalService.display()` now takes an object including
  `description`, and `confirmationLabel`

Fixes: https://github.com/resin-io/etcher/issues/729
Signed-off-by: Juan Cruz Viotti <jviotti@openmailbox.org>
This commit is contained in:
Juan Cruz Viotti 2016-11-07 17:13:26 +02:00 committed by GitHub
parent 136d935eed
commit 5d42fd181a
8 changed files with 51 additions and 26 deletions

View File

@ -6465,9 +6465,15 @@ body {
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
.modal-warning-modal .modal-content {
width: 350px; }
.modal-warning-modal .modal-title .glyphicon, .modal-warning-modal .modal-title .tick { .modal-warning-modal .modal-title .glyphicon, .modal-warning-modal .modal-title .tick {
color: #d9534f; } color: #d9534f; }
.modal-warning-modal .button, .modal-warning-modal .progress-button {
text-transform: uppercase; }
/* /*
* Copyright 2016 resin.io * Copyright 2016 resin.io
* *

View File

@ -67,11 +67,14 @@ module.exports = function($uibModalInstance, DrivesModel, SelectionStateModel, W
return; return;
} }
WarningModalService.display([ WarningModalService.display({
confirmationLabel: 'Yes, continue',
description: [
`This image recommends a ${SelectionStateModel.getImageRecommendedDriveSize()}`, `This image recommends a ${SelectionStateModel.getImageRecommendedDriveSize()}`,
`bytes drive, however ${drive.device} is only ${drive.size} bytes.`, `bytes drive, however ${drive.device} is only ${drive.size} bytes.`,
'Are you sure you want to continue?' 'Are you sure you want to continue?'
].join(' ')).then((userAccepted) => { ].join(' ')
}).then((userAccepted) => {
if (userAccepted) { if (userAccepted) {
SelectionStateModel.toggleSetDrive(drive.device); SelectionStateModel.toggleSetDrive(drive.device);
} }

View File

@ -16,14 +16,14 @@
'use strict'; 'use strict';
module.exports = function($uibModalInstance, message) { module.exports = function($uibModalInstance, options) {
/** /**
* @summary Modal message * @summary Modal options
* @property * @property
* @public * @public
*/ */
this.message = message; this.options = options;
/** /**
* @summary Reject the warning prompt * @summary Reject the warning prompt

View File

@ -25,20 +25,25 @@ module.exports = function(ModalService) {
* @function * @function
* @public * @public
* *
* @param {String} message - danger message * @param {Object} options - options
* @param {String} options.description - danger message
* @param {String} options.confirmationLabel - danger message
* @fulfil {Boolean} - whether the user accepted or rejected the warning * @fulfil {Boolean} - whether the user accepted or rejected the warning
* @returns {Promise} * @returns {Promise}
* *
* @example * @example
* WarningModalService.display('Don\'t do this!'); * WarningModalService.display({
* description: 'Don\'t do this!',
* confirmationLabel: 'Yes, continue!'
* });
*/ */
this.display = (message) => { this.display = (options = {}) => {
return ModalService.open({ return ModalService.open({
template: './components/warning-modal/templates/warning-modal.tpl.html', template: './components/warning-modal/templates/warning-modal.tpl.html',
controller: 'WarningModalController as modal', controller: 'WarningModalController as modal',
size: 'warning-modal', size: 'warning-modal',
resolve: { resolve: {
message: _.constant(message) options: _.constant(options)
} }
}).result; }).result;
}; };

View File

@ -14,6 +14,13 @@
* limitations under the License. * limitations under the License.
*/ */
.modal-warning-modal .modal-content {
width: 350px;
}
.modal-warning-modal .modal-title .glyphicon { .modal-warning-modal .modal-title .glyphicon {
color: $palette-theme-danger-background; color: $palette-theme-danger-background;
} }
.modal-warning-modal .button {
text-transform: uppercase;
}

View File

@ -3,20 +3,17 @@
<span class="glyphicon glyphicon-exclamation-sign"></span> <span class="glyphicon glyphicon-exclamation-sign"></span>
<span>Warning!</span> <span>Warning!</span>
</h4> </h4>
<button class="close" ng-click="modal.reject()">&times;</button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div class="modal-text"> <div class="modal-text">
<p>{{ ::modal.message }}</p> <p>{{ ::modal.options.description }}</p>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<div class="modal-menu"> <button class="button button-danger button-block"
<button class="button button-danger" ng-click="modal.accept()">{{ ::modal.options.confirmationLabel }}</button>
ng-click="modal.accept()">YES, CONTINUE</button> </div>
<button class="button button-default"
ng-click="modal.reject()">CANCEL</button>
</div>
</div>

View File

@ -58,13 +58,18 @@ module.exports = function(WarningModalService, SettingsModel) {
* @public * @public
* *
* @param {String} name - setting name * @param {String} name - setting name
* @param {String} message - danger message * @param {Object} options - options
* @param {String} options.description - modal description
* @param {String} options.confirmationLabel - modal confirmation label
* @returns {Undefined} * @returns {Undefined}
* *
* @example * @example
* SettingsController.enableDangerousSetting('unsafeMode', 'Don\'t do this!'); * SettingsController.enableDangerousSetting('unsafeMode', {
* description: 'Don\'t do this!',
* confirmationLabel: 'Do it!'
* });
*/ */
this.enableDangerousSetting = (name, message) => { this.enableDangerousSetting = (name, options) => {
if (!this.currentData[name]) { if (!this.currentData[name]) {
this.model.set(name, false); this.model.set(name, false);
return this.refreshSettings(); return this.refreshSettings();
@ -73,7 +78,7 @@ module.exports = function(WarningModalService, SettingsModel) {
// Keep the checkbox unchecked until the user confirms // Keep the checkbox unchecked until the user confirms
this.currentData[name] = false; this.currentData[name] = false;
WarningModalService.display(message).then((userAccepted) => { WarningModalService.display(options).then((userAccepted) => {
if (userAccepted) { if (userAccepted) {
this.model.set(name, true); this.model.set(name, true);
this.refreshSettings(); this.refreshSettings();

View File

@ -46,8 +46,10 @@
<label> <label>
<input type="checkbox" <input type="checkbox"
ng-model="settings.currentData.unsafeMode" ng-model="settings.currentData.unsafeMode"
ng-change="settings.enableDangerousSetting('unsafeMode', 'Are you sure you want to turn this on? You will be able to burn to your system drives.')"> ng-change="settings.enableDangerousSetting('unsafeMode', {
description: 'Are you sure you want to turn this on? You will be able to overwrite your system drives if you\'re not careful.',
confirmationLabel: 'Enable unsafe mode'
})">
<span>Unsafe mode <span class="label label-danger">DANGEROUS</span></span> <span>Unsafe mode <span class="label label-danger">DANGEROUS</span></span>
</label> </label>
</div> </div>