mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-02-05 21:09:52 +01:00
added <listbox> tag for multiline-selects,
moved attributs from <menupopup> to <menulist> (execpt options and id) added several options for the predefined phpgw selects like cats or accounts changed the referenz.html accourdingly
This commit is contained in:
parent
3b3e08f1aa
commit
c51cbb2ae3
@ -348,7 +348,7 @@ We are only lacking some way to show if we get more than one match on a search,
|
|||||||
}
|
}
|
||||||
$content = array(
|
$content = array(
|
||||||
'msg' => sprintf($this->messages['anz_found'],count($found)),
|
'msg' => sprintf($this->messages['anz_found'],count($found)),
|
||||||
'entry' => $entry <span>// et_media.show.rows uses this, as we put 'entry' in the size-field</span>
|
'entry' => $entry <span>// et_media.show.rows uses this, as we put 'entry' in the Options-field</span>
|
||||||
);
|
);
|
||||||
$this->tmpl->read('et_media.show'); <span>// read the show-template</span>
|
$this->tmpl->read('et_media.show'); <span>// read the show-template</span>
|
||||||
|
|
||||||
@ -363,13 +363,13 @@ We are only lacking some way to show if we get more than one match on a search,
|
|||||||
The names in the data-row (last row) of 'et_media.show.rows' are like '${row}[name]'. Variable expansion is performed on each
|
The names in the data-row (last row) of 'et_media.show.rows' are like '${row}[name]'. Variable expansion is performed on each
|
||||||
name and expands that for the first row to '1[name]' which addresses the name in the first match.
|
name and expands that for the first row to '1[name]' which addresses the name in the first match.
|
||||||
<li>$content contains again 'msg' which we set to the number of entris found and the above array with the data of all rows under
|
<li>$content contains again 'msg' which we set to the number of entris found and the above array with the data of all rows under
|
||||||
the key 'entry', as we put that in Size for the field loading the sub-template 'et_media.show.rows'. It not necessary to
|
the key 'entry', as we put that in Options for the field loading the sub-template 'et_media.show.rows'. It not necessary to
|
||||||
put something in Size-field / use a sub-array for a sub-template, but it can be very helpful to organize a complex content-array.
|
put something in Options-field / use a sub-array for a sub-template, but it can be very helpful to organize a complex content-array.
|
||||||
(As an exercice you can remove 'entry' from the Size-field and change the function arrcordingly).
|
(As an exercice you can remove 'entry' from the Options-field and change the function arrcordingly).
|
||||||
<li>we now explizitly read the template 'et_media.show' (the constructor reed 'et_media.edit') and execute it again with
|
<li>we now explizitly read the template 'et_media.show' (the constructor reed 'et_media.edit') and execute it again with
|
||||||
the edit function as callback (because of that, show does NOT need to be listed in public_functions)
|
the edit function as callback (because of that, show does NOT need to be listed in public_functions)
|
||||||
<li>as 'et_media.show.rows' contains only one data-row, but fieldnames with variables to expand, that row is autorepeated
|
<li>as 'et_media.show.rows' contains only one data-row, but fieldnames with variables to expand, that row is autorepeated
|
||||||
for as many data we put into the content array (or the sub-array if we used the Size-field).
|
for as many data we put into the content array (or the sub-array if we used the Options-field).
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<p>To call the show function, we need to make some changes to the edit-function too:</p>
|
<p>To call the show function, we need to make some changes to the edit-function too:</p>
|
||||||
|
@ -45,7 +45,7 @@ an eTemplate from the example app in the <a href="etemplate.html">Tutorial</a>
|
|||||||
</columns>
|
</columns>
|
||||||
<rows>
|
<rows>
|
||||||
<row>
|
<row>
|
||||||
<description size="ib" span="all" value="eTemplates MediaDB" no_lang="1" id="msg"/>
|
<description options="ib" span="all" value="eTemplates MediaDB" no_lang="1" id="msg"/>
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<hrule span="all"/>
|
<hrule span="all"/>
|
||||||
@ -197,7 +197,7 @@ implement only a subset of XUL. Here are the main differences:</p>
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><b>Size</b></td>
|
<td><b>Options</b></td>
|
||||||
<td>?</td>
|
<td>?</td>
|
||||||
<td>?</td>
|
<td>?</td>
|
||||||
<td>size</td>
|
<td>size</td>
|
||||||
@ -340,7 +340,7 @@ implement only a subset of XUL. Here are the main differences:</p>
|
|||||||
<b>a textual label</b><br>
|
<b>a textual label</b><br>
|
||||||
The content is taken from the content-array but it can have an own label from
|
The content is taken from the content-array but it can have an own label from
|
||||||
the label attribute too.<p>
|
the label attribute too.<p>
|
||||||
<b>Size</b>: if it contains a 'i' and/or a 'b' the content (not the label) is rendered
|
<b>Options</b>: if it contains a 'i' and/or a 'b' the content (not the label) is rendered
|
||||||
in italic and/or bold.
|
in italic and/or bold.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -352,7 +352,7 @@ implement only a subset of XUL. Here are the main differences:</p>
|
|||||||
<td>
|
<td>
|
||||||
<b>a single-line input field for text</b><br>
|
<b>a single-line input field for text</b><br>
|
||||||
In the html-UI this is rendered as <input ...><p>
|
In the html-UI this is rendered as <input ...><p>
|
||||||
<b>Size</b> has 2 comma-separated fields:<br>
|
<b>Options</b> has 2 comma-separated fields:<br>
|
||||||
xml: <b>size</b>: the length in chars of the input-field<br>
|
xml: <b>size</b>: the length in chars of the input-field<br>
|
||||||
xml: <b>maxlength</b>: the maximum length of the input
|
xml: <b>maxlength</b>: the maximum length of the input
|
||||||
</td>
|
</td>
|
||||||
@ -366,7 +366,7 @@ implement only a subset of XUL. Here are the main differences:</p>
|
|||||||
<b>a input-field to enter an integer</b><br>
|
<b>a input-field to enter an integer</b><br>
|
||||||
In the html-UI this is rendered as <input ...>. <i>There are no checks implemented at the moment,
|
In the html-UI this is rendered as <input ...>. <i>There are no checks implemented at the moment,
|
||||||
but the will come in the near future.</i><p>
|
but the will come in the near future.</i><p>
|
||||||
<b>Size</b> has 3 comma-separated fields:<br>
|
<b>Options</b> has 3 comma-separated fields:<br>
|
||||||
xml: <b>min</b>: minimum value, default none<br>
|
xml: <b>min</b>: minimum value, default none<br>
|
||||||
xml: <b>max</b>: maximum value, default none<br>
|
xml: <b>max</b>: maximum value, default none<br>
|
||||||
xml: <b>size</b>: the length in chars of the input-field, default 5
|
xml: <b>size</b>: the length in chars of the input-field, default 5
|
||||||
@ -381,7 +381,7 @@ implement only a subset of XUL. Here are the main differences:</p>
|
|||||||
<b>a input-field to enter a float</b><br>
|
<b>a input-field to enter a float</b><br>
|
||||||
In the html-UI this is rendered as <input ...>. <i>There are no checks implemented at the moment,
|
In the html-UI this is rendered as <input ...>. <i>There are no checks implemented at the moment,
|
||||||
but the will come in the near future.</i><p>
|
but the will come in the near future.</i><p>
|
||||||
<b>Size</b> has 3 comma-separated fields:<br>
|
<b>Options</b> has 3 comma-separated fields:<br>
|
||||||
xml: <b>min</b>: minimum value, default none<br>
|
xml: <b>min</b>: minimum value, default none<br>
|
||||||
xml: <b>max</b>: maximum value, default none<br>
|
xml: <b>max</b>: maximum value, default none<br>
|
||||||
xml: <b>size</b>: the length in chars of the input-field, default 5
|
xml: <b>size</b>: the length in chars of the input-field, default 5
|
||||||
@ -395,7 +395,7 @@ implement only a subset of XUL. Here are the main differences:</p>
|
|||||||
<td>
|
<td>
|
||||||
<b>a multiline input-field for text</b><br>
|
<b>a multiline input-field for text</b><br>
|
||||||
In the html-UI this is rendered as <textarea ...>.<p>
|
In the html-UI this is rendered as <textarea ...>.<p>
|
||||||
<b>Size</b> has 2 comma-separated fields:<br>
|
<b>Options</b> has 2 comma-separated fields:<br>
|
||||||
xml: <b>cols</b>: the width of the field in chars<br>
|
xml: <b>cols</b>: the width of the field in chars<br>
|
||||||
xml: <b>rows</b>: the number of rows
|
xml: <b>rows</b>: the number of rows
|
||||||
</td>
|
</td>
|
||||||
@ -419,8 +419,8 @@ implement only a subset of XUL. Here are the main differences:</p>
|
|||||||
<b>a widget in a group of which only one can be checked</b><br>
|
<b>a widget in a group of which only one can be checked</b><br>
|
||||||
In the html-UI this is rendered as <input type="radio" ...><br>
|
In the html-UI this is rendered as <input type="radio" ...><br>
|
||||||
Unlike XUL (and like html) the radio-buttons are grouped by giving them the same name / id.
|
Unlike XUL (and like html) the radio-buttons are grouped by giving them the same name / id.
|
||||||
If it is checked, the value is set to what is entered in <b>Size</b>. If the value of the
|
If it is checked, the value is set to what is entered in <b>Options</b>. If the value of the
|
||||||
content array at index name/id matches size the radiobutton is marked 'checked'.
|
content array at index name/id matches the options-field the radiobutton is marked 'checked'.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@ -444,7 +444,7 @@ implement only a subset of XUL. Here are the main differences:</p>
|
|||||||
<td>
|
<td>
|
||||||
<b>a horizontal rule / line</b><br>
|
<b>a horizontal rule / line</b><br>
|
||||||
In the html-UI this is rendered as <hr ...><br>
|
In the html-UI this is rendered as <hr ...><br>
|
||||||
<b>Size</b> can contain a width of the rule, default is 100%
|
<b>Options</b> can contain a width of the rule, default is 100%
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@ -455,8 +455,8 @@ implement only a subset of XUL. Here are the main differences:</p>
|
|||||||
<td>
|
<td>
|
||||||
<b>a separate eTemplate to be loaded into this cell</b><br>
|
<b>a separate eTemplate to be loaded into this cell</b><br>
|
||||||
<b>Name</b> xml: <b>id</b>: the name of the etemplate to load<br>
|
<b>Name</b> xml: <b>id</b>: the name of the etemplate to load<br>
|
||||||
<b>Size</b> xml: <b>content</b>: if set, the template uses an own sub-array
|
<b>Options</b> xml: <b>content</b>: if set, the template uses an own sub-array
|
||||||
of the content array indexed by the value of size (if not the full
|
of the content array indexed by the value of this field (if not the full
|
||||||
content-array is used). Variables like $row can be used as descript
|
content-array is used). Variables like $row can be used as descript
|
||||||
for the general attribute Name.
|
for the general attribute Name.
|
||||||
</td>
|
</td>
|
||||||
@ -477,7 +477,9 @@ implement only a subset of XUL. Here are the main differences:</p>
|
|||||||
<td>
|
<td>
|
||||||
<menulist><br>
|
<menulist><br>
|
||||||
<menupopup/><br>
|
<menupopup/><br>
|
||||||
</menulist><br>
|
</menulist><p>
|
||||||
|
<i>multiselect: <b>options</b> > 1</i><br>
|
||||||
|
<listbox rows="#"/>
|
||||||
</td>
|
</td>
|
||||||
<td>yes</td>
|
<td>yes</td>
|
||||||
<td>select</td>
|
<td>select</td>
|
||||||
@ -489,8 +491,15 @@ implement only a subset of XUL. Here are the main differences:</p>
|
|||||||
<li>or in an separate array only for select-box-options under the index name, this array is passed
|
<li>or in an separate array only for select-box-options under the index name, this array is passed
|
||||||
to the exec or show function of the etemplate-class
|
to the exec or show function of the etemplate-class
|
||||||
</ol>
|
</ol>
|
||||||
<b>Size</b> xml: <b>size</b>: if set and > 1 the selectbox is a multiselection with size lines<br>
|
<b>Options</b> <i>in the editor</i>: if set and > 1 the selectbox is a multiselection with options number of lines<p>
|
||||||
</td>
|
xml: <b>rows</b>: <i>only for <listbox></i>: number of rows to show<p>
|
||||||
|
xml: <b>type</b>: can be set to get several predefined select-contents, in that case you dont need to set
|
||||||
|
the content as descripted above: <br>
|
||||||
|
<b>select-cat</b>: Select a phpgw category, options can be set to -1 to get an additional 'All'<br>
|
||||||
|
<b>select-account</b>: Select a user and/or group, determined by the options-field:
|
||||||
|
'accounts' (default), 'groups', 'both'<br>
|
||||||
|
<b>select-percent, select-priority, select-access, select-country, select-state</b>: as you expect
|
||||||
|
by the name
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><b>Tabs</b></td>
|
<td><b>Tabs</b></td>
|
||||||
|
@ -29,7 +29,8 @@
|
|||||||
'span' => 'span,class',
|
'span' => 'span,class',
|
||||||
'type' => '', // this is the widget-name => dont write as attr
|
'type' => '', // this is the widget-name => dont write as attr
|
||||||
'disabled' => 'disabled=true',
|
'disabled' => 'disabled=true',
|
||||||
'readonly' => 'readonly=true'
|
'readonly' => 'readonly=true',
|
||||||
|
'size' => 'options'
|
||||||
);
|
);
|
||||||
$this->widget2xul = array( // how to translate widget-names and widget-spec. attr.
|
$this->widget2xul = array( // how to translate widget-names and widget-spec. attr.
|
||||||
'label' => array(
|
'label' => array(
|
||||||
@ -56,7 +57,11 @@
|
|||||||
'size' => 'min,max,size'
|
'size' => 'min,max,size'
|
||||||
),
|
),
|
||||||
'select' => array(
|
'select' => array(
|
||||||
'.name' => 'menulist,menupopup'
|
'.name' => 'menulist,menupopup',
|
||||||
|
),
|
||||||
|
'select-multi' => array( // multiselection, if size > 0
|
||||||
|
'.name' => 'listbox',
|
||||||
|
'size' => 'rows'
|
||||||
),
|
),
|
||||||
'template' => array(
|
'template' => array(
|
||||||
'.name' => 'grid',
|
'.name' => 'grid',
|
||||||
@ -72,6 +77,7 @@
|
|||||||
);
|
);
|
||||||
$this->xul2widget = array(
|
$this->xul2widget = array(
|
||||||
'menupopup' => 'select',
|
'menupopup' => 'select',
|
||||||
|
'listbox' => 'select',
|
||||||
'description' => 'label'
|
'description' => 'label'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -149,15 +155,21 @@
|
|||||||
{
|
{
|
||||||
list(,$type) = each($type);
|
list(,$type) = each($type);
|
||||||
}
|
}
|
||||||
|
if (substr($type,0,6) == 'select')
|
||||||
|
{
|
||||||
|
$type = $cell['size'] > 1 ? 'select-multi' : 'select';
|
||||||
|
}
|
||||||
$widgetattr2xul = isset($this->widget2xul[$type]) ? $this->widget2xul[$type] : array();
|
$widgetattr2xul = isset($this->widget2xul[$type]) ? $this->widget2xul[$type] : array();
|
||||||
$type = isset($widgetattr2xul['.name']) ? $widgetattr2xul['.name'] : $type;
|
$type = isset($widgetattr2xul['.name']) ? $widgetattr2xul['.name'] : $type;
|
||||||
list($parent,$child,$child2) = explode(',',$type);
|
list($parent,$child,$child2) = explode(',',$type);
|
||||||
$widget = new xmlnode($child ? $child : $parent);
|
$widget = new xmlnode($parent);
|
||||||
|
if ($child)
|
||||||
|
{
|
||||||
|
$child = new xmlnode($child);
|
||||||
|
}
|
||||||
if ($child2)
|
if ($child2)
|
||||||
{
|
{
|
||||||
$child2 = new xmlnode($child2);
|
$child2 = new xmlnode($child2);
|
||||||
$child = $widget;
|
|
||||||
$widget = new xmlnode($parent);
|
|
||||||
}
|
}
|
||||||
if (isset($widgetattr2xul['.set'])) // set default-attr for type
|
if (isset($widgetattr2xul['.set'])) // set default-attr for type
|
||||||
{
|
{
|
||||||
@ -168,8 +180,9 @@
|
|||||||
$widget->set_attribute($attr,$val);
|
$widget->set_attribute($attr,$val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($parent == 'tabbox')
|
switch ($parent)
|
||||||
{
|
{
|
||||||
|
case 'tabbox':
|
||||||
$labels = explode('|',$cell['label']); unset($cell['label']);
|
$labels = explode('|',$cell['label']); unset($cell['label']);
|
||||||
$helps = explode('|',$cell['help']); unset($cell['help']);
|
$helps = explode('|',$cell['help']); unset($cell['help']);
|
||||||
$names = explode('|',$cell['name']); unset($cell['name']);
|
$names = explode('|',$cell['name']); unset($cell['name']);
|
||||||
@ -184,6 +197,24 @@
|
|||||||
$grid->set_attribute('id',$names[$n]);
|
$grid->set_attribute('id',$names[$n]);
|
||||||
$child2->add_node($grid);
|
$child2->add_node($grid);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case 'menulist': // id,options belongs to the 'menupopup' child
|
||||||
|
$child->set_attribute('id',$cell['name']); unset($cell['name']);
|
||||||
|
if (isset($cell['size']) && $cell['size'] != '')
|
||||||
|
{
|
||||||
|
$child->set_attribute('options',$cell['size']); unset($cell['size']);
|
||||||
|
}
|
||||||
|
if ($cell['type'] != 'select') // one of the sub-types
|
||||||
|
{
|
||||||
|
$child->set_attribute('type',$cell['type']);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'menulist':
|
||||||
|
if ($cell['type'] != 'select') // one of the sub-types
|
||||||
|
{
|
||||||
|
$widget->set_attribute('type',$cell['type']);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
while (list($attr,$val) = each($cell))
|
while (list($attr,$val) = each($cell))
|
||||||
{
|
{
|
||||||
@ -201,21 +232,15 @@
|
|||||||
}
|
}
|
||||||
$this->set_attributes($widget,$attr,$val,&$spanned);
|
$this->set_attributes($widget,$attr,$val,&$spanned);
|
||||||
}
|
}
|
||||||
if ($child && !$child2)
|
if ($child)
|
||||||
{
|
{
|
||||||
$parent = new xmlnode($parent);
|
$widget->add_node($child);
|
||||||
$parent->add_node($widget);
|
|
||||||
$xul_row->add_node($parent);
|
|
||||||
}
|
}
|
||||||
else
|
if ($child2)
|
||||||
{
|
{
|
||||||
if ($child2)
|
$widget->add_node($child2);
|
||||||
{
|
|
||||||
$widget->add_node($child);
|
|
||||||
$widget->add_node($child2);
|
|
||||||
}
|
|
||||||
$xul_row->add_node($widget);
|
|
||||||
}
|
}
|
||||||
|
$xul_row->add_node($widget);
|
||||||
}
|
}
|
||||||
$xul_rows->add_node($xul_row);
|
$xul_rows->add_node($xul_row);
|
||||||
}
|
}
|
||||||
@ -233,7 +258,7 @@
|
|||||||
$doc->add_root($xul_overlay);
|
$doc->add_root($xul_overlay);
|
||||||
$xml = $doc->dump_mem();
|
$xml = $doc->dump_mem();
|
||||||
|
|
||||||
if ($this->debug)
|
//if ($this->debug)
|
||||||
{
|
{
|
||||||
echo "<pre>\n" . htmlentities($xml) . "\n</pre>\n";
|
echo "<pre>\n" . htmlentities($xml) . "\n</pre>\n";
|
||||||
}
|
}
|
||||||
@ -271,11 +296,15 @@
|
|||||||
{
|
{
|
||||||
$attr['name'] = $attr['id']; unset($attr['id']);
|
$attr['name'] = $attr['id']; unset($attr['id']);
|
||||||
}
|
}
|
||||||
|
if (isset($attr['options']) && $attr['options'] != '')
|
||||||
|
{
|
||||||
|
$attr['size'] = $attr['options']; unset($attr['options']);
|
||||||
|
}
|
||||||
if ($tag == 'grid' && $type == 'complete' && !is_array($tab_attr))
|
if ($tag == 'grid' && $type == 'complete' && !is_array($tab_attr))
|
||||||
{
|
{
|
||||||
$tag = 'template';
|
$tag = 'template';
|
||||||
}
|
}
|
||||||
if ($tag != 'textbox')
|
if ($tag != 'textbox' && !isset($attr['type']))
|
||||||
{
|
{
|
||||||
$attr['type'] = $this->xul2widget[$tag] ? $this->xul2widget[$tag] : $tag;
|
$attr['type'] = $this->xul2widget[$tag] ? $this->xul2widget[$tag] : $tag;
|
||||||
}
|
}
|
||||||
@ -311,7 +340,6 @@
|
|||||||
break;
|
break;
|
||||||
case 'columns':
|
case 'columns':
|
||||||
case 'rows':
|
case 'rows':
|
||||||
case 'menulist':
|
|
||||||
break;
|
break;
|
||||||
case 'column':
|
case 'column':
|
||||||
if ($type != 'complete')
|
if ($type != 'complete')
|
||||||
@ -367,6 +395,9 @@
|
|||||||
$tab_helps[] = $attr['statustext'];
|
$tab_helps[] = $attr['statustext'];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'menulist':
|
||||||
|
$menulist_attr = $attr; // save for following menupopup
|
||||||
|
break;
|
||||||
case 'textbox':
|
case 'textbox':
|
||||||
if ($attr['multiline'])
|
if ($attr['multiline'])
|
||||||
{
|
{
|
||||||
@ -404,6 +435,16 @@
|
|||||||
$attr['label'] = $attr['src'];
|
$attr['label'] = $attr['src'];
|
||||||
unset($attr['src']);
|
unset($attr['src']);
|
||||||
break;
|
break;
|
||||||
|
case 'listbox':
|
||||||
|
$attr['size'] = $attr['rows'];
|
||||||
|
unset($attr['rows']);
|
||||||
|
break;
|
||||||
|
case 'menupopup':
|
||||||
|
if (is_array($menulist_attr))
|
||||||
|
{
|
||||||
|
$attr += $menulist_attr;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
$attr['help'] = $attr['statustext']; unset($attr['statustext']);
|
$attr['help'] = $attr['statustext']; unset($attr['statustext']);
|
||||||
$spanned = $attr['span'] == 'all' ? $etempl->cols - $col : $attr['span'];
|
$spanned = $attr['span'] == 'all' ? $etempl->cols - $col : $attr['span'];
|
||||||
|
Loading…
Reference in New Issue
Block a user