| // Copyright 2010 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 Displays and edits the value of a cookie. |
| * Intended only for debugging. |
| */ |
| goog.provide('goog.ui.CookieEditor'); |
| |
| goog.require('goog.asserts'); |
| goog.require('goog.dom'); |
| goog.require('goog.dom.TagName'); |
| goog.require('goog.events.EventType'); |
| goog.require('goog.net.cookies'); |
| goog.require('goog.string'); |
| goog.require('goog.style'); |
| goog.require('goog.ui.Component'); |
| |
| |
| |
| /** |
| * Displays and edits the value of a cookie. |
| * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM helper. |
| * @constructor |
| * @extends {goog.ui.Component} |
| * @final |
| */ |
| goog.ui.CookieEditor = function(opt_domHelper) { |
| goog.ui.CookieEditor.base(this, 'constructor', opt_domHelper); |
| }; |
| goog.inherits(goog.ui.CookieEditor, goog.ui.Component); |
| |
| |
| /** |
| * Cookie key. |
| * @type {?string} |
| * @private |
| */ |
| goog.ui.CookieEditor.prototype.cookieKey_; |
| |
| |
| /** |
| * Text area. |
| * @type {HTMLTextAreaElement} |
| * @private |
| */ |
| goog.ui.CookieEditor.prototype.textAreaElem_; |
| |
| |
| /** |
| * Clear button. |
| * @type {HTMLButtonElement} |
| * @private |
| */ |
| goog.ui.CookieEditor.prototype.clearButtonElem_; |
| |
| |
| /** |
| * Invalid value warning text. |
| * @type {HTMLSpanElement} |
| * @private |
| */ |
| goog.ui.CookieEditor.prototype.valueWarningElem_; |
| |
| |
| /** |
| * Update button. |
| * @type {HTMLButtonElement} |
| * @private |
| */ |
| goog.ui.CookieEditor.prototype.updateButtonElem_; |
| |
| |
| // TODO(user): add combobox for user to select different cookies |
| /** |
| * Sets the cookie which this component will edit. |
| * @param {string} cookieKey Cookie key. |
| */ |
| goog.ui.CookieEditor.prototype.selectCookie = function(cookieKey) { |
| goog.asserts.assert(goog.net.cookies.isValidName(cookieKey)); |
| this.cookieKey_ = cookieKey; |
| if (this.textAreaElem_) { |
| this.textAreaElem_.value = goog.net.cookies.get(cookieKey) || ''; |
| } |
| }; |
| |
| |
| /** @override */ |
| goog.ui.CookieEditor.prototype.canDecorate = function() { |
| return false; |
| }; |
| |
| |
| /** @override */ |
| goog.ui.CookieEditor.prototype.createDom = function() { |
| // Debug-only, so we don't need i18n. |
| this.clearButtonElem_ = /** @type {!HTMLButtonElement} */ (goog.dom.createDom( |
| goog.dom.TagName.BUTTON, /* attributes */ null, 'Clear')); |
| this.updateButtonElem_ = |
| /** @type {!HTMLButtonElement} */ (goog.dom.createDom( |
| goog.dom.TagName.BUTTON, /* attributes */ null, 'Update')); |
| var value = this.cookieKey_ && goog.net.cookies.get(this.cookieKey_); |
| this.textAreaElem_ = /** @type {!HTMLTextAreaElement} */ (goog.dom.createDom( |
| goog.dom.TagName.TEXTAREA, /* attibutes */ null, value || '')); |
| this.valueWarningElem_ = /** @type {!HTMLSpanElement} */ (goog.dom.createDom( |
| goog.dom.TagName.SPAN, /* attibutes */ { |
| 'style': 'display:none;color:red' |
| }, 'Invalid cookie value.')); |
| this.setElementInternal(goog.dom.createDom(goog.dom.TagName.DIV, |
| /* attibutes */ null, |
| this.valueWarningElem_, |
| goog.dom.createDom(goog.dom.TagName.BR), |
| this.textAreaElem_, |
| goog.dom.createDom(goog.dom.TagName.BR), |
| this.clearButtonElem_, |
| this.updateButtonElem_)); |
| }; |
| |
| |
| /** @override */ |
| goog.ui.CookieEditor.prototype.enterDocument = function() { |
| goog.ui.CookieEditor.base(this, 'enterDocument'); |
| this.getHandler().listen(this.clearButtonElem_, |
| goog.events.EventType.CLICK, |
| this.handleClear_); |
| this.getHandler().listen(this.updateButtonElem_, |
| goog.events.EventType.CLICK, |
| this.handleUpdate_); |
| }; |
| |
| |
| /** |
| * Handles user clicking clear button. |
| * @param {!goog.events.Event} e The click event. |
| * @private |
| */ |
| goog.ui.CookieEditor.prototype.handleClear_ = function(e) { |
| if (this.cookieKey_) { |
| goog.net.cookies.remove(this.cookieKey_); |
| } |
| this.textAreaElem_.value = ''; |
| }; |
| |
| |
| /** |
| * Handles user clicking update button. |
| * @param {!goog.events.Event} e The click event. |
| * @private |
| */ |
| goog.ui.CookieEditor.prototype.handleUpdate_ = function(e) { |
| if (this.cookieKey_) { |
| var value = this.textAreaElem_.value; |
| if (value) { |
| // Strip line breaks. |
| value = goog.string.stripNewlines(value); |
| } |
| if (goog.net.cookies.isValidValue(value)) { |
| goog.net.cookies.set(this.cookieKey_, value); |
| goog.style.setElementShown(this.valueWarningElem_, false); |
| } else { |
| goog.style.setElementShown(this.valueWarningElem_, true); |
| } |
| } |
| }; |
| |
| |
| /** @override */ |
| goog.ui.CookieEditor.prototype.disposeInternal = function() { |
| this.clearButtonElem_ = null; |
| this.cookieKey_ = null; |
| this.textAreaElem_ = null; |
| this.updateButtonElem_ = null; |
| this.valueWarningElem_ = null; |
| }; |