| // Copyright 2008 The Closure Library Authors. All Rights Reserved. |
| // |
| // 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. |
| |
| /** |
| * @fileoverview An example of how to write a dialog to be opened by a plugin. |
| * |
| */ |
| |
| goog.provide('goog.demos.editor.HelloWorldDialog'); |
| goog.provide('goog.demos.editor.HelloWorldDialog.OkEvent'); |
| |
| goog.require('goog.dom.TagName'); |
| goog.require('goog.events.Event'); |
| goog.require('goog.string'); |
| goog.require('goog.ui.editor.AbstractDialog'); |
| |
| |
| // *** Public interface ***************************************************** // |
| |
| |
| |
| /** |
| * Creates a dialog to let the user enter a customized hello world message. |
| * @param {goog.dom.DomHelper} domHelper DomHelper to be used to create the |
| * dialog's dom structure. |
| * @constructor |
| * @extends {goog.ui.editor.AbstractDialog} |
| * @final |
| */ |
| goog.demos.editor.HelloWorldDialog = function(domHelper) { |
| goog.ui.editor.AbstractDialog.call(this, domHelper); |
| }; |
| goog.inherits(goog.demos.editor.HelloWorldDialog, |
| goog.ui.editor.AbstractDialog); |
| |
| |
| // *** Event **************************************************************** // |
| |
| |
| |
| /** |
| * OK event object for the hello world dialog. |
| * @param {string} message Customized hello world message chosen by the user. |
| * @constructor |
| * @extends {goog.events.Event} |
| * @final |
| */ |
| goog.demos.editor.HelloWorldDialog.OkEvent = function(message) { |
| this.message = message; |
| }; |
| goog.inherits(goog.demos.editor.HelloWorldDialog.OkEvent, goog.events.Event); |
| |
| |
| /** |
| * Event type. |
| * @type {goog.ui.editor.AbstractDialog.EventType} |
| * @override |
| */ |
| goog.demos.editor.HelloWorldDialog.OkEvent.prototype.type = |
| goog.ui.editor.AbstractDialog.EventType.OK; |
| |
| |
| /** |
| * Customized hello world message chosen by the user. |
| * @type {string} |
| */ |
| goog.demos.editor.HelloWorldDialog.OkEvent.prototype.message; |
| |
| |
| // *** Protected interface ************************************************** // |
| |
| |
| /** @override */ |
| goog.demos.editor.HelloWorldDialog.prototype.createDialogControl = function() { |
| var builder = new goog.ui.editor.AbstractDialog.Builder(this); |
| /** @desc Title of the hello world dialog. */ |
| var MSG_HELLO_WORLD_DIALOG_TITLE = goog.getMsg('Add a Hello World message'); |
| builder.setTitle(MSG_HELLO_WORLD_DIALOG_TITLE). |
| setContent(this.createContent_()); |
| return builder.build(); |
| }; |
| |
| |
| /** |
| * Creates and returns the event object to be used when dispatching the OK |
| * event to listeners, or returns null to prevent the dialog from closing. |
| * @param {goog.events.Event} e The event object dispatched by the wrapped |
| * dialog. |
| * @return {goog.demos.editor.HelloWorldDialog.OkEvent} The event object to be |
| * used when dispatching the OK event to listeners. |
| * @protected |
| * @override |
| */ |
| goog.demos.editor.HelloWorldDialog.prototype.createOkEvent = function(e) { |
| var message = this.getMessage_(); |
| if (message && |
| goog.demos.editor.HelloWorldDialog.isValidHelloWorld_(message)) { |
| return new goog.demos.editor.HelloWorldDialog.OkEvent(message); |
| } else { |
| /** @desc Error message telling the user why their message was rejected. */ |
| var MSG_HELLO_WORLD_DIALOG_ERROR = |
| goog.getMsg('Your message must contain the words "hello" and "world".'); |
| this.dom.getWindow().alert(MSG_HELLO_WORLD_DIALOG_ERROR); |
| return null; // Prevents the dialog from closing. |
| } |
| }; |
| |
| |
| // *** Private implementation *********************************************** // |
| |
| |
| /** |
| * Input element where the user will type their hello world message. |
| * @type {Element} |
| * @private |
| */ |
| goog.demos.editor.HelloWorldDialog.prototype.input_; |
| |
| |
| /** |
| * Creates the DOM structure that makes up the dialog's content area. |
| * @return {Element} The DOM structure that makes up the dialog's content area. |
| * @private |
| */ |
| goog.demos.editor.HelloWorldDialog.prototype.createContent_ = function() { |
| /** @desc Sample hello world message to prepopulate the dialog with. */ |
| var MSG_HELLO_WORLD_DIALOG_SAMPLE = goog.getMsg('Hello, world!'); |
| this.input_ = this.dom.createDom(goog.dom.TagName.INPUT, |
| {size: 25, value: MSG_HELLO_WORLD_DIALOG_SAMPLE}); |
| /** @desc Prompt telling the user to enter a hello world message. */ |
| var MSG_HELLO_WORLD_DIALOG_PROMPT = |
| goog.getMsg('Enter your Hello World message'); |
| return this.dom.createDom(goog.dom.TagName.DIV, |
| null, |
| [MSG_HELLO_WORLD_DIALOG_PROMPT, this.input_]); |
| }; |
| |
| |
| /** |
| * Returns the hello world message currently typed into the dialog's input. |
| * @return {?string} The hello world message currently typed into the dialog's |
| * input, or null if called before the input is created. |
| * @private |
| */ |
| goog.demos.editor.HelloWorldDialog.prototype.getMessage_ = function() { |
| return this.input_ && this.input_.value; |
| }; |
| |
| |
| /** |
| * Returns whether or not the given message contains the strings "hello" and |
| * "world". Case-insensitive and order doesn't matter. |
| * @param {string} message The message to be checked. |
| * @return {boolean} Whether or not the given message contains the strings |
| * "hello" and "world". |
| * @private |
| */ |
| goog.demos.editor.HelloWorldDialog.isValidHelloWorld_ = function(message) { |
| message = message.toLowerCase(); |
| return goog.string.contains(message, 'hello') && |
| goog.string.contains(message, 'world'); |
| }; |