Overview

Packages

  • alpha::controller
  • alpha::controller::front
  • alpha::exceptions
  • alpha::model
  • alpha::model::types
  • alpha::tasks
  • alpha::tests
  • alpha::util
  • alpha::util::cache
  • alpha::util::codehighlight
  • alpha::util::convertors
  • alpha::util::feeds
  • alpha::util::filters
  • alpha::util::graphs
  • alpha::util::helpers
  • alpha::util::metrics
  • alpha::view
  • alpha::view::renderers
  • alpha::view::widgets

Classes

  • Button
  • DateBox
  • Image
  • RecordSelector
  • StringBox
  • TagCloud
  • TextBox
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  1: <?php
  2: 
  3: /**
  4:  * Button HTML custom widget
  5:  * 
  6:  * @package alpha::view::widgets
  7:  * @since 1.0
  8:  * @author John Collins <dev@alphaframework.org>
  9:  * @version $Id: Button.inc 1497 2012-02-14 20:28:45Z alphadev $
 10:  * @license http://www.opensource.org/licenses/bsd-license.php The BSD License
 11:  * @copyright Copyright (c) 2012, John Collins (founder of Alpha Framework).  
 12:  * All rights reserved.
 13:  * 
 14:  * <pre>
 15:  * Redistribution and use in source and binary forms, with or 
 16:  * without modification, are permitted provided that the 
 17:  * following conditions are met:
 18:  * 
 19:  * * Redistributions of source code must retain the above 
 20:  *   copyright notice, this list of conditions and the 
 21:  *   following disclaimer.
 22:  * * Redistributions in binary form must reproduce the above 
 23:  *   copyright notice, this list of conditions and the 
 24:  *   following disclaimer in the documentation and/or other 
 25:  *   materials provided with the distribution.
 26:  * * Neither the name of the Alpha Framework nor the names 
 27:  *   of its contributors may be used to endorse or promote 
 28:  *   products derived from this software without specific 
 29:  *   prior written permission.
 30:  *   
 31:  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
 32:  * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
 33:  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
 34:  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
 35:  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
 36:  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 37:  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
 38:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
 39:  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
 40:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
 41:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 
 42:  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
 43:  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 44:  * </pre>
 45:  *  
 46:  */
 47: class Button {
 48:     /**
 49:      * The Javascript action to carry out when the button is pressed.
 50:      * 
 51:      * @var string
 52:      * @since 1.0
 53:      */
 54:     private $action;
 55:     
 56:     /**
 57:      * The title to display on the button.
 58:      * 
 59:      * @var string
 60:      * @since 1.0
 61:      */
 62:     private $title;
 63:     
 64:     /**
 65:      * The HTML id attribute for the button.
 66:      * 
 67:      * @var string
 68:      * @since 1.0
 69:      */
 70:     private $id;
 71:     
 72:     /**
 73:      * If provided, the button will be a clickable image using this image.
 74:      * 
 75:      * @var string
 76:      * @since 1.0
 77:      */
 78:     private $imgURL;
 79:     
 80:     /**
 81:      * The constructor
 82:      * 
 83:      * @param string $action The javascript action to be carried out (or set to "submit" to make a submit button, "file" for file uploads).
 84:      * @param string $title The title to appear on the button.
 85:      * @param string $id The HTML id attribute for the button.
 86:      * @param string $imgURL If provided, the button will be a clickable image using this image.
 87:      * @since 1.0
 88:      */
 89:     public function __construct($action, $title, $id, $imgURL='') {
 90:         $this->action = $action;
 91:         $this->title = $title;
 92:         $this->id = $id;
 93:         $this->imgURL = $imgURL;            
 94:         $this->title = $title;
 95:     }
 96:     
 97:     /**
 98:      * Renders the HTML and javascript for the button.
 99:      * 
100:      * @param integer $width The width in pixels of the button (will also accept percentage values), defaults to 0 meaning auto-width to fit text.
101:      * @since 1.0
102:      * @return string
103:      */
104:     public function render($width=0) {
105:         $html = '';
106:         
107:         if(empty($this->imgURL)) {
108:             switch ($this->action) {
109:                 case 'submit':
110:                     $html .= '<script>
111:                         $(function() {
112:                             $("#'.$this->id.'").button();
113:                         });
114:                         </script>
115:                     ';
116:                     $html .= '<input type="submit" id="'.$this->id.'" name="'.$this->id.'" value="'.$this->title.'"'.($width == 0? '':' style="width:'.$width.';"').'/>';
117:                 break;
118:                 case 'file':
119:                     $html .= '<script>
120:                         $(function() {
121:                             $("#'.$this->id.'").button();
122:                         });
123:                         </script>
124:                     ';
125:                     $html .= '<input type="file" id="'.$this->id.'" name="'.$this->id.'" value="'.$this->title.'"'.($width == 0? '':' style="width:'.$width.';"').'/>';
126:                 break;
127:                 default:
128:                     $html .= '<script>
129:                         $(function() {
130:                             $("#'.$this->id.'").button();
131:                             $("#'.$this->id.'").click(function() { '.$this->action.'; });
132:                         });
133:                         </script>
134:                     ';
135:                     $html .= '<input type="button" id="'.$this->id.'" name="'.$this->id.'" value="'.$this->title.'"'.($width == 0? '':' style="width:'.$width.';"').'/>';
136:                 break;
137:             }
138:         }else{
139:             // in the special case where a clickable image is being used            
140:             $html .= '<img src="'.$this->imgURL.'" alt="'.$this->title.'" onClick="'.$this->action.'" style="cursor:pointer; vertical-align:bottom;"/>';
141:         }
142:         
143:         return $html;
144:     }
145:     
146:     /**
147:      * Returns the Javascript for injecting into <head> to control the behaviour of the buttons.
148:      * 
149:      * @since 1.0
150:      * @return string
151:      * @deprecated Now using JQuery UI Button widget, so this custom JavaScript is no longer required
152:      */
153:     public static function renderJavascript() {
154:         $javascript = "
155:                         
156:         function addButtonEvent(obj, type, fn) { 
157:                 if (obj.attachEvent) { 
158:                 obj['e'+type+fn] = fn; 
159:                 obj[type+fn] = function(){obj['e'+type+fn]( window.event );} 
160:                 obj.attachEvent('on'+type, obj[type+fn]); 
161:             }else{
162:                 obj.addEventListener( type, fn, false );
163:             }
164:         }
165:          
166:         function removeButtonEvent(obj, type, fn) { 
167:             if (obj.detachEvent) { 
168:                 obj.detachEvent('on'+type, obj[type+fn]); 
169:                 obj[type+fn] = null;
170:             }else{
171:                 obj.removeEventListener( type, fn, false );
172:             } 
173:         }
174:         
175:         // onmouseover/onclick events for the side bar links
176:         var selectedButton = null;
177:         
178:         function buttonOver(evt){
179:             // first get the event
180:             if (!evt) var evt = window.event;
181:             // now get the target button
182:             var button;
183:             if (evt.target) button = evt.target;
184:             else if (evt.srcElement) button = evt.srcElement;
185:             if (button.nodeType == 3) // defeat Safari bug
186:                 button = button.parentNode;
187:             
188:             // handles nested elements in button div tags
189:             if (button.tagName != 'INPUT') {
190:                 button = button.parentNode;
191:             }
192:                 
193:             if (selectedButton != button){
194:                 button.className = 'oveButton';
195:                 button.style.cursor = 'hand';
196:                 button.style.cursor = 'pointer';
197:             }
198:         }
199:         
200:         function buttonOut(evt){
201:             // first get the event
202:             if (!evt) var evt = window.event;
203:             // now get the target button
204:             var button;
205:             if (evt.target) button = evt.target;
206:             else if (evt.srcElement) button = evt.srcElement;
207:             if (button.nodeType == 3) // defeat Safari bug
208:                 button = button.parentNode;
209:             
210:             // handles nested elements in button div tags
211:             if (button.tagName != 'INPUT') {
212:                 button = button.parentNode;
213:             }
214:             
215:             if (selectedButton != button) {
216:                 button.className = 'norButton';
217:             }
218:         }
219:         
220:         function buttonSelect(evt){
221:             // first get the event
222:             if (!evt) var evt = window.event;
223:             // now get the target button
224:             var button;
225:             if (evt.target) button = evt.target;
226:             else if (evt.srcElement) button = evt.srcElement;
227:             if (button.nodeType == 3) // defeat Safari bug
228:                 button = button.parentNode;
229:             
230:             // handles nested elements in button div tags
231:             if (button.tagName != 'INPUT') {
232:                 button = button.parentNode;
233:             }
234:             
235:             button.className = 'selButton';
236:             button.style.cursor = 'hand';
237:             button.style.cursor = 'pointer';
238:             if (selectedButton != null && selectedButton != button) {
239:                 selectedButton.className = 'norButton';
240:             }
241:             selectedButton = button;
242:         }
243: 
244: 
245:         function addButtonListeners() {
246:             var no_page_inputs = document.getElementsByTagName('input').length;
247:     
248:             for(j=0; j<no_page_inputs; j++) {
249:                 // add the listeners to button for highlights
250:                 currentInput = document.getElementsByTagName('input')[j];
251:                 if (currentInput.className == 'norButton') {
252:                     addButtonEvent(currentInput, 'mouseover', buttonOver);
253:                     addButtonEvent(currentInput, 'mouseout', buttonOut);
254:                     addButtonEvent(currentInput, 'mousedown', buttonSelect);
255:                 }
256:             }
257:         }
258:         
259:         addOnloadEvent(addButtonListeners);
260:         ";
261:         
262:         return $javascript;
263:     } 
264:     
265: }
266: 
267: ?>
Alpha Framework ${alpha.version.new} API Documentation API documentation generated by ApiGen 2.8.0