From: Andrea Zagli Date: Mon, 29 Jun 2020 14:19:33 +0000 (+0200) Subject: Added public function Radio::render_single. X-Git-Url: https://saetta.ns0.it/gitweb?a=commitdiff_plain;h=fe5e248a224bc0a1df097dbb1a22afef14fee6cb;p=zakform%2Fcgi Added public function Radio::render_single. --- diff --git a/src/formelementradio.c b/src/formelementradio.c index 49c18ce..8b00088 100644 --- a/src/formelementradio.c +++ b/src/formelementradio.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 Andrea Zagli + * Copyright (C) 2017-2020 Andrea Zagli * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -220,8 +220,8 @@ zak_form_cgi_form_element_radio_xml_parsing (ZakFormElement *element, xmlNodePtr } } -static gchar -*zak_form_cgi_form_element_radio_render (ZakFormCgiFormElement *element) +gchar +*zak_form_cgi_form_element_radio_render_single (ZakFormCgiFormElement *element, guint idx) { gchar *ret_value; GString *ret; @@ -236,8 +236,6 @@ static gchar gchar *element_value; - guint new_id; - ZakFormCgiFormElementClass *klass; ZakFormCgiFormElementRadioPrivate *priv = ZAK_FORM_CGI_FORM_ELEMENT_RADIO_GET_PRIVATE (element); @@ -258,8 +256,6 @@ static gchar element_value = zak_form_element_get_value (ZAK_FORM_ELEMENT (element)); - new_id = 0; - attr_class = g_hash_table_lookup (ht_attrs, "class"); if (attr_class != NULL) { @@ -267,33 +263,54 @@ static gchar g_free (attr_class); } - for (i = 0; i < priv->ar_options->len; i++) + Option *opt = (Option *)g_ptr_array_index (priv->ar_options, idx); + + ht_attrs_option = g_hash_table_new (g_str_hash, g_str_equal); + zak_utils_ghashtable_copy (ht_attrs, ht_attrs_option); + + g_hash_table_insert (ht_attrs_option, (gpointer)"value", (gpointer)g_strdup (opt->value)); + + if (element_value != NULL + && g_strcmp0 (element_value, opt->value) == 0) { - Option *opt = (Option *)g_ptr_array_index (priv->ar_options, i); + g_hash_table_insert (ht_attrs_option, (gpointer)"checked", (gpointer)"checked"); + } - ht_attrs_option = g_hash_table_new (g_str_hash, g_str_equal); - zak_utils_ghashtable_copy (ht_attrs, ht_attrs_option); + g_string_append_printf (ret, "\n%s\n%s %s%s", + priv->in_line ? "" : "
\n", + priv->in_line ? " class=\"radio-inline\"" : "", + zak_cgi_tag_tag_ht ("input", + g_strdup_printf ("%s_%d", + zak_form_cgi_form_element_get_id (element), + idx + 1), + ht_attrs_option), + opt->content, + priv->in_line ? "" : "\n
"); - g_hash_table_insert (ht_attrs_option, (gpointer)"value", (gpointer)g_strdup (opt->value)); + g_hash_table_unref (ht_attrs_option); - if (element_value != NULL - && g_strcmp0 (element_value, opt->value) == 0) - { - g_hash_table_insert (ht_attrs_option, (gpointer)"checked", (gpointer)"checked"); - } + ret_value = g_strdup (ret->str); + g_string_free (ret, TRUE); - g_string_append_printf (ret, "\n%s\n%s %s%s", - priv->in_line ? "" : "
\n", - priv->in_line ? " class=\"radio-inline\"" : "", - zak_cgi_tag_tag_ht ("input", - g_strdup_printf ("%s_%d", - zak_form_cgi_form_element_get_id (element), - ++new_id), - ht_attrs_option), - opt->content, - priv->in_line ? "" : "\n
"); - - g_hash_table_unref (ht_attrs_option); + return ret_value; +} + +static gchar +*zak_form_cgi_form_element_radio_render (ZakFormCgiFormElement *element) +{ + gchar *ret_value; + GString *ret; + + guint i; + + ZakFormCgiFormElementRadioPrivate *priv = ZAK_FORM_CGI_FORM_ELEMENT_RADIO_GET_PRIVATE (element); + + ret = g_string_new (""); + + for (i = 0; i < priv->ar_options->len; i++) + { + g_string_append_printf (ret, + zak_form_cgi_form_element_radio_render_single (element, i)); } ret_value = g_strdup (ret->str); diff --git a/src/formelementradio.h b/src/formelementradio.h index 945f398..d39a8c6 100644 --- a/src/formelementradio.h +++ b/src/formelementradio.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 Andrea Zagli + * Copyright (C) 2017-2020 Andrea Zagli * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -61,6 +61,8 @@ void zak_form_cgi_form_element_radio_set_in_line (ZakFormCgiFormElementRadio *el void zak_form_cgi_form_element_radio_xml_parsing (ZakFormElement *element, xmlNodePtr xmlnode); +gchar *zak_form_cgi_form_element_radio_render_single (ZakFormCgiFormElement *element, guint idx); + G_END_DECLS