Source for file Button.inc
Documentation is available at Button.inc
* Button HTML custom widget
* @package alpha::view::widgets
* @author John Collins <dev@alphaframework.org>
* @version $Id: Button.inc 1453 2011-12-04 15:12:54Z johnc $
* @license http://www.opensource.org/licenses/bsd-license.php The BSD License
* @copyright Copyright (c) 2011, John Collins (founder of Alpha Framework).
* Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the
* following conditions are met:
* * Redistributions of source code must retain the above
* copyright notice, this list of conditions and the
* * 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.
* * Neither the name of the Alpha Framework 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.
* The Javascript action to carry out when the button is pressed.
* The title to display on the button.
* The HTML id attribute for the button.
* If provided, the button will be a clickable image using this image.
* @param string $action The javascript action to be carried out (or set to "submit" to make a submit button, "file" for file uploads).
* @param string $title The title to appear on the button.
* @param string $id The HTML id attribute for the button.
* @param string $imgURL If provided, the button will be a clickable image using this image.
public function __construct($action, $title, $id, $imgURL= '') {
* Renders the HTML and javascript for the button.
* @param integer $width The width in pixels of the button (will also accept percentage values), defaults to 0 meaning auto-width to fit text.
public function render($width= 0) {
if(empty($this->imgURL)) {
$("#'. $this->id. '").button();
$html .= '<input type="submit" id="'. $this->id. '" name="'. $this->id. '" value="'. $this->title. '"'. ($width == 0? '': ' style="width:'. $width. ';"'). '/>';
$("#'. $this->id. '").button();
$html .= '<input type="file" id="'. $this->id. '" name="'. $this->id. '" value="'. $this->title. '"'. ($width == 0? '': ' style="width:'. $width. ';"'). '/>';
$("#'. $this->id. '").button();
$("#'. $this->id. '").click(function() { '. $this->action. '; });
$html .= '<input type="button" id="'. $this->id. '" name="'. $this->id. '" value="'. $this->title. '"'. ($width == 0? '': ' style="width:'. $width. ';"'). '/>';
// in the special case where a clickable image is being used
$html .= '<img src="'. $this->imgURL. '" alt="'. $this->title. '" onClick="'. $this->action. '" style="cursor:pointer; vertical-align:bottom;"/>';
* Returns the Javascript for injecting into <head> to control the behaviour of the buttons.
* @deprecated Now using JQuery UI Button widget, so this custom JavaScript is no longer required
function addButtonEvent(obj, type, fn) {
obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
obj.attachEvent('on'+type, obj[type+fn]);
obj.addEventListener( type, fn, false );
function removeButtonEvent(obj, type, fn) {
obj.detachEvent('on'+type, obj[type+fn]);
obj.removeEventListener( type, fn, false );
// onmouseover/onclick events for the side bar links
var selectedButton = null;
function buttonOver(evt){
if (!evt) var evt = window.event;
// now get the target button
if (evt.target) button = evt.target;
else if (evt.srcElement) button = evt.srcElement;
if (button.nodeType == 3) // defeat Safari bug
button = button.parentNode;
// handles nested elements in button div tags
if (button.tagName != 'INPUT') {
button = button.parentNode;
if (selectedButton != button){
button.className = 'oveButton';
button.style.cursor = 'hand';
button.style.cursor = 'pointer';
if (!evt) var evt = window.event;
// now get the target button
if (evt.target) button = evt.target;
else if (evt.srcElement) button = evt.srcElement;
if (button.nodeType == 3) // defeat Safari bug
button = button.parentNode;
// handles nested elements in button div tags
if (button.tagName != 'INPUT') {
button = button.parentNode;
if (selectedButton != button) {
button.className = 'norButton';
function buttonSelect(evt){
if (!evt) var evt = window.event;
// now get the target button
if (evt.target) button = evt.target;
else if (evt.srcElement) button = evt.srcElement;
if (button.nodeType == 3) // defeat Safari bug
button = button.parentNode;
// handles nested elements in button div tags
if (button.tagName != 'INPUT') {
button = button.parentNode;
button.className = 'selButton';
button.style.cursor = 'hand';
button.style.cursor = 'pointer';
if (selectedButton != null && selectedButton != button) {
selectedButton.className = 'norButton';
function addButtonListeners() {
var no_page_inputs = document.getElementsByTagName('input').length;
for(j=0; j<no_page_inputs; j++) {
// add the listeners to button for highlights
currentInput = document.getElementsByTagName('input')[j];
if (currentInput.className == 'norButton') {
addButtonEvent(currentInput, 'mouseover', buttonOver);
addButtonEvent(currentInput, 'mouseout', buttonOut);
addButtonEvent(currentInput, 'mousedown', buttonSelect);
addOnloadEvent(addButtonListeners);
|