/* Copyright (c) 2011, Geert Bergman (geert@scrivo.nl)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of "Scrivo" nor the names of its contributors may be
* used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* $Id: Prompt.js 616 2013-04-22 23:48:38Z geert $
*/
"use strict";
SUI.dialog.Prompt = SUI.defineClass(
/** @lends SUI.dialog.Prompt.prototype */{
/** @ignore */ baseClass: SUI.dialog.Confirm,
/**
* @class
* SUI.dialog.Prompt is a class to display a modal dialog box that prompts
* you to enter a value.
*
* @augments SUI.dialog.Confirm
*
* @description
* Show a modal dialog with user defined text, an input field and an
* ok and cancel button.
*
* @constructs
* @param see base class
* @param {String} arg.value The initial value of the input field.
*/
initializer: function(arg) {
// get the dialog text to use
arg.text = arg.text || SUI.i18n.dlgPrompt;
SUI.dialog.Prompt.initializeBase(this, arg);
// set window caption
this.caption(arg.caption || SUI.i18n.dlgCaptPrompt);
// create an input element an anchor it to the bottom of the
// client area
this.inp = new SUI.form.Input({
bottom: this.INPUT_MARGIN,
left: this.INPUT_MARGIN,
right: this.INPUT_MARGIN,
anchor: { right: true, left: true, bottom: true}
});
this.clientPanel.add(this.inp);
// add the height of the input field to the dialog height
this.height(this.height() +
this.inp.height() + (1.25*this.INPUT_MARGIN | 0));
this.text.bottom(this.inp.height() + 2*this.INPUT_MARGIN);
// set the initial value of the input field
this.inp.el().value = arg.value || "";
// disable the ok button if the input field contains no data
this._enableOkButton();
var that = this;
// also on input ...
SUI.browser.addEventListener(that.inp.el(), "input", function(e) {
// ... disable the ok button if the input field contains no data
if (!that._enableOkButton()) {
SUI.browser.noPropagation(e);
}
});
},
/**
* Margin of the input field on the client area.
*/
INPUT_MARGIN: 8,
/**
* Return the input field's value on the dialog's transfer method.
*/
formToData: function() {
this.close();
return this.inp.el().value;
},
/**
* Show the dialog box centered on the screen.
*/
show: function() {
SUI.dialog.Prompt.parentMethod(this, "show");
this.inp.el().focus();
},
// Disable the ok button if the input field contains no data
_enableOkButton: function() {
this.okButton.el().disabled = SUI.trim(this.inp.el().value) == "";
}
});