From 52639d239cead38264bcb86f7316bdf2eb31dae0 Mon Sep 17 00:00:00 2001 From: pdontthink Date: Thu, 17 Apr 2008 23:30:34 +0000 Subject: [PATCH] Add prettier layout for edit lists, not that I am any kind of graphic designer. Preserve old layout method and allow switching by user control with new layout_type option attribute git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@13059 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- functions/options.php | 40 ++++++++++++- templates/default/edit_list_widget.tpl | 3 + .../default/edit_list_widget_list_style.tpl | 59 +++++++++++++++++++ 3 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 templates/default/edit_list_widget_list_style.tpl diff --git a/functions/options.php b/functions/options.php index 285bb6ae..dd22fa0a 100644 --- a/functions/options.php +++ b/functions/options.php @@ -33,6 +33,10 @@ define('SMOPT_TYPE_BOOLEAN_CHECKBOX', 12); define('SMOPT_TYPE_BOOLEAN_RADIO', 13); define('SMOPT_TYPE_STRLIST_RADIO', 14); +/* Define constants for the layout scheme for edit lists. */ +define('SMOPT_EDIT_LIST_LAYOUT_LIST', 0); +define('SMOPT_EDIT_LIST_LAYOUT_SELECT', 1); + /* Define constants for the options refresh levels. */ define('SMOPT_REFRESH_NONE', 0); define('SMOPT_REFRESH_FOLDERLIST', 1); @@ -110,6 +114,12 @@ class SquirrelOption { * @var string */ var $no_text; + /** + * Some widgets support more than one layout type + * + * @var int + */ + var $layout_type; /** * text displayed to the user * @@ -196,6 +206,7 @@ class SquirrelOption { $this->yes_text = ''; $this->no_text = ''; $this->comment = ''; + $this->layout_type = 0; $this->aExtraAttribs = array(); $this->post_script = ''; @@ -277,6 +288,14 @@ class SquirrelOption { $this->no_text = $no_text; } + /** + * Set the layout type for this option. + * @param int $layout_type + */ + function setLayoutType($layout_type) { + $this->layout_type = $layout_type; + } + /** * Set the comment for this option. * @param string $comment @@ -672,6 +691,11 @@ class SquirrelOption { /** * Creates an edit list + * + * Note that multiple layout types are supported for this widget. + * $this->layout_type must be one of the SMOPT_EDIT_LIST_LAYOUT_* + * constants. + * * @return string html formated list of edit fields and * their associated controls */ @@ -704,10 +728,19 @@ class SquirrelOption { //FIXME: $this->aExtraAttribs probably should only be used in one place $oTemplate->assign('input_widget', addInput('add_' . $this->name, '', 38, 0, $this->aExtraAttribs)); $oTemplate->assign('trailing_text', $this->trailing_text); + $oTemplate->assign('possible_values', $this->possible_values); $oTemplate->assign('select_widget', addSelect('new_' . $this->name, $this->possible_values, $this->value, FALSE, !checkForJavascript() ? $this->aExtraAttribs : array_merge(array('onchange' => 'if (typeof(window.addinput) == \'undefined\') { var f = document.forms.length; var i = 0; var pos = -1; while( pos == -1 && i < f ) { var e = document.forms[i].elements.length; var j = 0; while( pos == -1 && j < e ) { if ( document.forms[i].elements[j].type == \'text\' && document.forms[i].elements[j].name == \'add_' . $this->name . '\' ) { pos = j; } j++; } i++; } if( pos >= 0 ) { window.addinput = document.forms[i-1].elements[pos]; } } for (x = 0; x < this.length; x++) { if (this.options[x].selected) { window.addinput.value = this.options[x].value; break; } }'), $this->aExtraAttribs), TRUE, $height)); $oTemplate->assign('checkbox_widget', addCheckBox('delete_' . $this->name, FALSE, SMPREF_YES, array_merge(array('id' => 'delete_' . $this->name), $this->aExtraAttribs))); $oTemplate->assign('name', $this->name); - return $oTemplate->fetch('edit_list_widget.tpl'); + + switch ($this->layout_type) { + case SMOPT_EDIT_LIST_LAYOUT_SELECT: + return $oTemplate->fetch('edit_list_widget.tpl'); + case SMOPT_EDIT_LIST_LAYOUT_LIST: + return $oTemplate->fetch('edit_list_widget_list_style.tpl'); + default: + error_box(sprintf(_("Edit List Layout Type '%s' Not Found"), $layout_type)); + } } @@ -882,6 +915,11 @@ function create_option_groups($optgrps, $optvals) { $next_option->setNoText($optset['no_text']); } + /* If provided, set the layout type for this option. */ + if (isset($optset['layout_type'])) { + $next_option->setLayoutType($optset['layout_type']); + } + /* If provided, set the comment for this option. */ if (isset($optset['comment'])) { $next_option->setComment($optset['comment']); diff --git a/templates/default/edit_list_widget.tpl b/templates/default/edit_list_widget.tpl index 46d0f0be..372e2a6a 100644 --- a/templates/default/edit_list_widget.tpl +++ b/templates/default/edit_list_widget.tpl @@ -14,6 +14,9 @@ * string $checkbox_widget A preconstructed input text box used * string $trailing_text Any text given by the caller to be displayed * after the edit list input + * array $possible_values The original list of options in the edit list, + * for use constructing layouts alternative to + * the select widget * * @copyright © 1999-2008 The SquirrelMail Project Team * @license http://opensource.org/licenses/gpl-license.php GNU Public License diff --git a/templates/default/edit_list_widget_list_style.tpl b/templates/default/edit_list_widget_list_style.tpl new file mode 100644 index 00000000..7d54d7d7 --- /dev/null +++ b/templates/default/edit_list_widget_list_style.tpl @@ -0,0 +1,59 @@ +' + . _("Add") . ' ' . $input_widget . '
' + . ''; + +$class = 'even'; +$index = 0; + +foreach ($possible_values as $key => $value) { + + if ($class == 'even') $class = 'odd'; + else $class = 'even'; + + echo '' + . '' + . '' + . "\n"; + +} + +echo '
'; + +if (!empty($possible_values)) + echo $checkbox_widget . ' '; + +echo ''; -- 2.25.1