home *** CD-ROM | disk | FTP | other *** search
- <?php
- /* vim: set expandtab tabstop=4 shiftwidth=4: */
- // +----------------------------------------------------------------------+
- // | PHP Version 4 |
- // +----------------------------------------------------------------------+
- // | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group |
- // +----------------------------------------------------------------------+
- // | This source file is subject to version 2.0 of the PHP license, |
- // | that is bundled with this package in the file LICENSE, and is |
- // | available at through the world-wide-web at |
- // | http://www.php.net/license/2_02.txt. |
- // | If you did not receive a copy of the PHP license and are unable to |
- // | obtain it through the world-wide-web, please send a note to |
- // | license@php.net so we can mail you a copy immediately. |
- // +----------------------------------------------------------------------+
- // | Author: Alan Knowles <alan@akbkhome.com> |
- // +----------------------------------------------------------------------+
- //
- // $Id: Xul.php,v 1.6 2005/11/09 08:29:13 alan_k Exp $
-
- /**
- * Extension HTML Element builder and render to provide features for Xul
- *
- * All methods are static, and expect the first argument to be a HTML_Template_Flexy_Element
- *
- * @author Alan Knowles <alan@akbkhome.com>
- */
- class HTML_Template_Flexy_Element_Xul {
-
-
- /**
- * Utility function to set values for common tag types.
- * @param HTML_Template_Flexy_Element $element override settings from another element.
- * @param mixed $value value to use.
- * @access public
- */
-
- function setValue(&$element,$value) {
- // store the value in all situations
- $element->value = $value;
- $tag = $element->tag;
- if (strpos($tag,':') !== false) {
- $bits = explode(':',$tag);
- $tag = $bits[1];
- }
- switch ($tag) {
- case 'menulist':
-
- if (!is_array($value)) {
- $value = array($value);
- }
-
- // is the first childa menupopup
- if (!isset($element->children[0])) {
- $element->children[0] = HTML_Template_Flexy_Element('menupopup');
- }
- if (!is_a($element->children[0],'HTML_Template_Flexy_Element')) {
- // oh sh*t big problem!
- return HTML_Template_Flexy::raiseError(
- __CLASS__ . '::setValue expected a Flexy Element as the child of a menuitem but got something else! '.
- print_r($element,true),
- HTML_TEMPLATE_FLEXY_ERROR_SYNTAX,
- HTML_TEMPLATE_FLEXY_ERROR_DIE);
- }
-
-
- // its setting the default value..
- // if the children havent been built we dont really care?
- // it will be done at the merge stage anyway..
-
- foreach(array_keys($element->children[0]->children) as $i) {
- $child = &$element->children[0]->children[$i];
-
- if (is_string($child)) {
- continue;
- }
-
-
- // standard option value...
- //echo "testing {$child->attributes['value']} against ". print_r($value,true)."\n";
- // does the value exist and match..
-
- if (isset($child->attributes['value'])
- && in_array((string) $child->attributes['value'], $value))
- {
- // echo "MATCH!\n";
- $child->attributes['selected'] = 'true';
- continue;
- }
-
- // otherwise..
- $child->attributes['selected'] = 'false';
-
- }
-
- return;
-
- case 'textbox':
- $this->attributes['value'] = $value;
- return;
-
- case 'checkbox':
- if (!isset($this->attributes['value'])) {
- return; // should be an error condition really...
- }
- $this->attributes['checked'] = ($value == $this->attributes['value']) ? 'true' : 'false';
- return;
-
- }
-
-
-
-
- }
- /**
- * Utility function equivilant to HTML_Select - loadArray ** For xul:menulist.
- * but using
- * key=>value maps
- * <option value="key">Value</option>
- * Key=key (eg. both the same) maps to
- *
- *
- *
- * @param HTML_Element $from override settings from another element.
- * @param HTML_Element $noValue ignore the key part of the array
- * @access public
- */
-
- function setOptions(&$element, $array,$noValue=false) {
- if (!is_array($array)) {
- $element->children = array();
- return;
- }
-
-
- $tag = '';
- $namespace = '';
- if (false !== strpos($element->tag, ':')) {
-
- $bits = explode(':',$element->tag);
- $namespace = $bits[0] . ':';
- $tag = strtolower($bits[1]);
-
- }
- if (!isset($element->children[0])) {
- $element->children[0] = new HTML_Template_Flexy_Element('menupopup');
- }
- if (!is_a($element->children[0],'HTML_Template_Flexy_Element')) {
- // oh sh*t big problem!
- return HTML_Template_Flexy::raiseError(
- __CLASS__ . '::setValue expected a menupopup as the child of a menuitem?',
- HTML_TEMPLATE_FLEXY_ERROR_SYNTAX,
- HTML_TEMPLATE_FLEXY_ERROR_DIE);
- }
- foreach($array as $k=>$v) {
-
- $atts=array();
- if (($k !== $v) && !$noValue) {
- $atts = array('value'=>$k);
- } else {
- $atts = array('value'=>$v);
- }
- $atts['label'] = htmlspecialchars($v);
- $atts['/'] = true;
- $add = new HTML_Template_Flexy_Element($namespace . 'menuitem',$atts);
- $element->children[0]->children[] = $add;
- }
-
- }
-
-
-
-
-
- } // end class HTML_Template_Flexy_Element
-