blob: a39a55ef1120a773114c570976aa87fd36a0ee0d [file] [log] [blame]
/*
* Copyright 2015 Google Inc.
*
* 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.
*
* Author: jmarantz@google.com (Joshua Marantz)
*/
goog.provide('mob.button.AbstractButton');
goog.require('goog.dom.TagName');
goog.require('goog.dom.classlist');
goog.require('mob.util');
goog.require('mob.util.ElementClass');
/**
* Base class for buttons.
* @param {!mob.util.ElementId} id
* @param {string} iconImage base64 encoded image.
* @param {!goog.color.Rgb} color for the image icon.
* @param {?string} labelText Optional text for label.
* @constructor
*/
mob.button.AbstractButton = function(id, iconImage, color, labelText) {
/**
* Top level element.
* @type {!Element}
*/
this.el = document.createElement(goog.dom.TagName.A);
/**
* @private {!mob.util.ElementId}
*/
this.id_ = id;
/**
* Base64 encoded gif image.
* @private {string}
*/
this.iconImage_ = iconImage;
/**
* Color to use for the image.
* @private {!goog.color.Rgb}
*/
this.color_ = color;
/**
* Text to add next to the button. Can be null if no text should be displayed.
* @private {?string}
*/
this.labelText_ = labelText;
this.createButton();
};
/**
* Initialize the button. If overridden by a subclass, this should still be
* called.
* @protected
*/
mob.button.AbstractButton.prototype.createButton = function() {
this.el.id = this.id_;
goog.dom.classlist.add(this.el, mob.util.ElementClass.BUTTON);
this.el.onclick = goog.bind(this.clickHandler, this);
var icon = document.createElement(goog.dom.TagName.DIV);
goog.dom.classlist.add(icon, mob.util.ElementClass.BUTTON_ICON);
// We set the image using backgroundImage because if it's a foreground image
// then dialing fails on a Samsung Galaxy Note 2.
icon.style.backgroundImage =
'url(' + mob.util.synthesizeImage(this.iconImage_, this.color_) + ')';
this.el.appendChild(icon);
if (this.labelText_) {
var label = document.createElement(goog.dom.TagName.P);
goog.dom.classlist.add(label, mob.util.ElementClass.BUTTON_TEXT);
this.el.appendChild(label);
label.appendChild(document.createTextNode(this.labelText_));
}
};
/**
* Function to be called when button is clicked.
* @protected
*/
mob.button.AbstractButton.prototype.clickHandler = goog.abstractMethod;