From 8b719c37f4d81fdec2eeef836edb312b8d0509d1 Mon Sep 17 00:00:00 2001 From: Oviglo Date: Tue, 29 Apr 2025 10:07:39 +0200 Subject: [PATCH 1/5] layout draft --- .../views/Form/daisyui_5_layout.html.twig | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig new file mode 100644 index 0000000000000..5aa05005f2146 --- /dev/null +++ b/src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig @@ -0,0 +1,36 @@ +{%- block button_widget -%} + {%- set attr = attr|merge({class: (attr.class|default('btn-neutral') ~ ' btn')|trim}) -%} + {{- parent() -}} +{%- endblock button_widget %} + +{%- block submit_widget -%} + {%- set attr = attr|merge({class: (attr.class|default('btn-primary'))|trim}) -%} + {{- parent() -}} +{%- endblock submit_widget %} + +{% block checkbox_widget -%} + {%- set attr_class = attr_class|default(attr.class|default('')) -%} + {%- set attr_class = attr_class ~ ' checkbox' -%} +{%- endblock checkbox_widget %} + +{% block radio_widget -%} + {%- set attr_class = attr_class|default(attr.class|default('')) -%} + {%- set attr_class = attr_class ~ ' radio' -%} +{%- endblock radio_widget %} + +{% block select_widget -%} + {%- set attr_class = attr_class|default(attr.class|default('')) -%} + {%- set attr_class = attr_class ~ ' select' -%} +{%- endblock select_widget %} + +{% block textarea_widget -%} + {% set attr = attr|merge({class: (attr.class|default('') ~ ' textarea')|trim}) %} + {{- parent() -}} +{%- endblock textarea_widget %} + +{% block form_widget_simple -%} + {%- if type is not defined or type != 'hidden' %} + {%- set widget_class = ' input' %} + {% endif -%} + {{- parent() -}} +{%- endblock form_widget_simple %} \ No newline at end of file From cb326bb25318022f217167e0faf82bb2c289450f Mon Sep 17 00:00:00 2001 From: Oviglo Date: Fri, 2 May 2025 17:43:35 +0200 Subject: [PATCH 2/5] format input fields --- .../views/Form/tailwind_2_layout.html.twig | 91 +++++++++---------- 1 file changed, 41 insertions(+), 50 deletions(-) diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/tailwind_2_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/tailwind_2_layout.html.twig index 7f31e70b796c0..48ab5301f3c95 100644 --- a/src/Symfony/Bridge/Twig/Resources/views/Form/tailwind_2_layout.html.twig +++ b/src/Symfony/Bridge/Twig/Resources/views/Form/tailwind_2_layout.html.twig @@ -1,69 +1,60 @@ -{% use 'form_div_layout.html.twig' %} +{% use 'tailwind_2_layout.html.twig' %} {%- block form_row -%} - {%- set row_attr = row_attr|merge({ class: row_attr.class|default(row_class|default('mb-6')) }) -%} + {%- set row_attr = row_attr|merge({ class: row_attr.class|default(row_class|default('flex flex-col mb-6')) }) -%} {{- parent() -}} {%- endblock form_row -%} -{%- block widget_attributes -%} - {%- set attr = attr|merge({ class: attr.class|default(widget_class|default('mt-1 w-full')) ~ (disabled ? ' ' ~ widget_disabled_class|default('border-gray-300 text-gray-500')) ~ (errors|length ? ' ' ~ widget_errors_class|default('border-red-700')) }) -%} - {{- parent() -}} -{%- endblock widget_attributes -%} - -{%- block form_label -%} - {%- set label_attr = label_attr|merge({ class: label_attr.class|default(label_class|default('block text-gray-800')) }) -%} +{%- block form_errors -%} + {%- set attr = attr|merge({class: (attr.class|default('text-error'))|trim}) -%} {{- parent() -}} -{%- endblock form_label -%} +{%- endblock form_errors -%} {%- block form_help -%} - {%- set help_attr = help_attr|merge({ class: help_attr.class|default(help_class|default('mt-1 text-gray-600')) }) -%} + {%- set attr = attr|merge({class: (attr.class|default('text-sm text-neutral'))|trim}) -%} {{- parent() -}} {%- endblock form_help -%} -{%- block form_errors -%} - {%- if errors|length > 0 -%} - - {%- endif -%} -{%- endblock form_errors -%} +{%- block form_label -%} + {%- set label_attr = label_attr|merge({ class: label_attr.class|default(label_class|default('label mb-2')) }) -%} + {{- parent() -}} +{%- endblock form_label -%} -{%- block choice_widget_expanded -%} - {%- set attr = attr|merge({ class: attr.class|default('mt-2') }) -%} -
- {%- for child in form %} -
- {{- form_widget(child) -}} - {{- form_label(child, null, { translation_domain: choice_translation_domain }) -}} -
- {% endfor -%} -
-{%- endblock choice_widget_expanded -%} +{%- block button_widget -%} + {%- set attr = attr|merge({class: (attr.class|default('btn-neutral') ~ ' btn')|trim}) -%} + {{- parent() -}} +{%- endblock button_widget %} -{%- block checkbox_row -%} - {%- set row_attr = row_attr|merge({ class: row_attr.class|default(row_class|default('mb-6')) }) -%} - {%- set widget_attr = {} -%} - {%- if help is not empty -%} - {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} - {%- endif -%} - - {{- form_errors(form) -}} -
- {{- form_widget(form, widget_attr) -}} - {{- form_label(form) -}} -
- {{- form_help(form) -}} - -{%- endblock checkbox_row -%} +{%- block submit_widget -%} + {%- set attr = attr|merge({class: (attr.class|default('btn-primary'))|trim}) -%} + {{- parent() -}} +{%- endblock submit_widget %} {%- block checkbox_widget -%} - {%- set widget_class = widget_class|default('mr-2') -%} + {%- set widget_class = widget_class|default('checkbox mr-2') -%} {{- parent() -}} {%- endblock checkbox_widget -%} -{%- block radio_widget -%} - {%- set widget_class = widget_class|default('mr-2') -%} +{% block radio_widget -%} + {%- set attr_class = attr_class|default(attr.class|default('')) -%} + {%- set attr_class = attr_class ~ ' radio' -%} +{%- endblock radio_widget %} + +{%- block choice_widget_collapsed -%} + {%- set attr = attr|merge({class: (attr.class|default('') ~ ' select')|trim}) -%} + {{- parent() -}} +{%- endblock choice_widget_collapsed -%} + +{% block textarea_widget -%} + {% set attr = attr|merge({class: (attr.class|default('') ~ ' textarea')|trim}) %} + {{- parent() -}} +{%- endblock textarea_widget %} + +{% block form_widget_simple -%} + {%- if type is not defined or type != 'hidden' %} + {%- set widget_class = ' input' %} + {%- set attr = attr|merge({class: (attr.class|default('') ~ widget_class)|trim}) -%} + {% endif -%} + {{- parent() -}} -{%- endblock radio_widget -%} +{%- endblock form_widget_simple %} \ No newline at end of file From 6704788105d154fc1c5dcf7ec53c6e1b8e8da5f2 Mon Sep 17 00:00:00 2001 From: Oviglo Date: Fri, 2 May 2025 17:46:22 +0200 Subject: [PATCH 3/5] wrong file --- .../views/Form/daisyui_5_layout.html.twig | 40 ++++++-- .../views/Form/tailwind_2_layout.html.twig | 91 ++++++++++--------- 2 files changed, 82 insertions(+), 49 deletions(-) diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig index 5aa05005f2146..48ab5301f3c95 100644 --- a/src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig +++ b/src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig @@ -1,3 +1,25 @@ +{% use 'tailwind_2_layout.html.twig' %} + +{%- block form_row -%} + {%- set row_attr = row_attr|merge({ class: row_attr.class|default(row_class|default('flex flex-col mb-6')) }) -%} + {{- parent() -}} +{%- endblock form_row -%} + +{%- block form_errors -%} + {%- set attr = attr|merge({class: (attr.class|default('text-error'))|trim}) -%} + {{- parent() -}} +{%- endblock form_errors -%} + +{%- block form_help -%} + {%- set attr = attr|merge({class: (attr.class|default('text-sm text-neutral'))|trim}) -%} + {{- parent() -}} +{%- endblock form_help -%} + +{%- block form_label -%} + {%- set label_attr = label_attr|merge({ class: label_attr.class|default(label_class|default('label mb-2')) }) -%} + {{- parent() -}} +{%- endblock form_label -%} + {%- block button_widget -%} {%- set attr = attr|merge({class: (attr.class|default('btn-neutral') ~ ' btn')|trim}) -%} {{- parent() -}} @@ -8,20 +30,20 @@ {{- parent() -}} {%- endblock submit_widget %} -{% block checkbox_widget -%} - {%- set attr_class = attr_class|default(attr.class|default('')) -%} - {%- set attr_class = attr_class ~ ' checkbox' -%} -{%- endblock checkbox_widget %} +{%- block checkbox_widget -%} + {%- set widget_class = widget_class|default('checkbox mr-2') -%} + {{- parent() -}} +{%- endblock checkbox_widget -%} {% block radio_widget -%} {%- set attr_class = attr_class|default(attr.class|default('')) -%} {%- set attr_class = attr_class ~ ' radio' -%} {%- endblock radio_widget %} -{% block select_widget -%} - {%- set attr_class = attr_class|default(attr.class|default('')) -%} - {%- set attr_class = attr_class ~ ' select' -%} -{%- endblock select_widget %} +{%- block choice_widget_collapsed -%} + {%- set attr = attr|merge({class: (attr.class|default('') ~ ' select')|trim}) -%} + {{- parent() -}} +{%- endblock choice_widget_collapsed -%} {% block textarea_widget -%} {% set attr = attr|merge({class: (attr.class|default('') ~ ' textarea')|trim}) %} @@ -31,6 +53,8 @@ {% block form_widget_simple -%} {%- if type is not defined or type != 'hidden' %} {%- set widget_class = ' input' %} + {%- set attr = attr|merge({class: (attr.class|default('') ~ widget_class)|trim}) -%} {% endif -%} + {{- parent() -}} {%- endblock form_widget_simple %} \ No newline at end of file diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/tailwind_2_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/tailwind_2_layout.html.twig index 48ab5301f3c95..7f31e70b796c0 100644 --- a/src/Symfony/Bridge/Twig/Resources/views/Form/tailwind_2_layout.html.twig +++ b/src/Symfony/Bridge/Twig/Resources/views/Form/tailwind_2_layout.html.twig @@ -1,60 +1,69 @@ -{% use 'tailwind_2_layout.html.twig' %} +{% use 'form_div_layout.html.twig' %} {%- block form_row -%} - {%- set row_attr = row_attr|merge({ class: row_attr.class|default(row_class|default('flex flex-col mb-6')) }) -%} + {%- set row_attr = row_attr|merge({ class: row_attr.class|default(row_class|default('mb-6')) }) -%} {{- parent() -}} {%- endblock form_row -%} -{%- block form_errors -%} - {%- set attr = attr|merge({class: (attr.class|default('text-error'))|trim}) -%} - {{- parent() -}} -{%- endblock form_errors -%} - -{%- block form_help -%} - {%- set attr = attr|merge({class: (attr.class|default('text-sm text-neutral'))|trim}) -%} +{%- block widget_attributes -%} + {%- set attr = attr|merge({ class: attr.class|default(widget_class|default('mt-1 w-full')) ~ (disabled ? ' ' ~ widget_disabled_class|default('border-gray-300 text-gray-500')) ~ (errors|length ? ' ' ~ widget_errors_class|default('border-red-700')) }) -%} {{- parent() -}} -{%- endblock form_help -%} +{%- endblock widget_attributes -%} {%- block form_label -%} - {%- set label_attr = label_attr|merge({ class: label_attr.class|default(label_class|default('label mb-2')) }) -%} + {%- set label_attr = label_attr|merge({ class: label_attr.class|default(label_class|default('block text-gray-800')) }) -%} {{- parent() -}} {%- endblock form_label -%} -{%- block button_widget -%} - {%- set attr = attr|merge({class: (attr.class|default('btn-neutral') ~ ' btn')|trim}) -%} - {{- parent() -}} -{%- endblock button_widget %} - -{%- block submit_widget -%} - {%- set attr = attr|merge({class: (attr.class|default('btn-primary'))|trim}) -%} +{%- block form_help -%} + {%- set help_attr = help_attr|merge({ class: help_attr.class|default(help_class|default('mt-1 text-gray-600')) }) -%} {{- parent() -}} -{%- endblock submit_widget %} +{%- endblock form_help -%} -{%- block checkbox_widget -%} - {%- set widget_class = widget_class|default('checkbox mr-2') -%} - {{- parent() -}} -{%- endblock checkbox_widget -%} +{%- block form_errors -%} + {%- if errors|length > 0 -%} +
    + {%- for error in errors -%} +
  • {{ error.message }}
  • + {%- endfor -%} +
+ {%- endif -%} +{%- endblock form_errors -%} -{% block radio_widget -%} - {%- set attr_class = attr_class|default(attr.class|default('')) -%} - {%- set attr_class = attr_class ~ ' radio' -%} -{%- endblock radio_widget %} +{%- block choice_widget_expanded -%} + {%- set attr = attr|merge({ class: attr.class|default('mt-2') }) -%} +
+ {%- for child in form %} +
+ {{- form_widget(child) -}} + {{- form_label(child, null, { translation_domain: choice_translation_domain }) -}} +
+ {% endfor -%} +
+{%- endblock choice_widget_expanded -%} -{%- block choice_widget_collapsed -%} - {%- set attr = attr|merge({class: (attr.class|default('') ~ ' select')|trim}) -%} - {{- parent() -}} -{%- endblock choice_widget_collapsed -%} +{%- block checkbox_row -%} + {%- set row_attr = row_attr|merge({ class: row_attr.class|default(row_class|default('mb-6')) }) -%} + {%- set widget_attr = {} -%} + {%- if help is not empty -%} + {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} + {%- endif -%} + + {{- form_errors(form) -}} +
+ {{- form_widget(form, widget_attr) -}} + {{- form_label(form) -}} +
+ {{- form_help(form) -}} + +{%- endblock checkbox_row -%} -{% block textarea_widget -%} - {% set attr = attr|merge({class: (attr.class|default('') ~ ' textarea')|trim}) %} +{%- block checkbox_widget -%} + {%- set widget_class = widget_class|default('mr-2') -%} {{- parent() -}} -{%- endblock textarea_widget %} - -{% block form_widget_simple -%} - {%- if type is not defined or type != 'hidden' %} - {%- set widget_class = ' input' %} - {%- set attr = attr|merge({class: (attr.class|default('') ~ widget_class)|trim}) -%} - {% endif -%} +{%- endblock checkbox_widget -%} +{%- block radio_widget -%} + {%- set widget_class = widget_class|default('mr-2') -%} {{- parent() -}} -{%- endblock form_widget_simple %} \ No newline at end of file +{%- endblock radio_widget -%} From 557fba43aa2635cff982e25b9015e6f87292013d Mon Sep 17 00:00:00 2001 From: Oviglo Date: Sat, 10 May 2025 11:44:02 +0200 Subject: [PATCH 4/5] more fields + fix checkbox --- .../views/Form/daisyui_5_layout.html.twig | 50 ++++++++++++++++--- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig index 48ab5301f3c95..5e45c05fe010a 100644 --- a/src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig +++ b/src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig @@ -16,7 +16,7 @@ {%- endblock form_help -%} {%- block form_label -%} - {%- set label_attr = label_attr|merge({ class: label_attr.class|default(label_class|default('label mb-2')) }) -%} + {%- set label_attr = label_attr|merge({ class: label_attr.class|default(label_class|default('label')) }) -%} {{- parent() -}} {%- endblock form_label -%} @@ -30,29 +30,63 @@ {{- parent() -}} {%- endblock submit_widget %} +{%- block choice_widget_expanded -%} + {%- set attr = attr|merge({ class: attr.class|default('mt-2') }) -%} +
+ {%- for child in form %} + + {% endfor -%} +
+{%- endblock choice_widget_expanded -%} + +{%- block checkbox_row -%} + {%- set row_attr = row_attr|merge({ class: row_attr.class|default(row_class|default('mb-6')) }) -%} + {%- set widget_attr = {} -%} + {%- if help is not empty -%} + {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} + {%- endif -%} + + {{- form_errors(form) -}} + + {{- form_help(form) -}} + +{%- endblock checkbox_row -%} + {%- block checkbox_widget -%} - {%- set widget_class = widget_class|default('checkbox mr-2') -%} + {%- set widget_class = widget_class|default('checkbox') -%} {{- parent() -}} {%- endblock checkbox_widget -%} {% block radio_widget -%} - {%- set attr_class = attr_class|default(attr.class|default('')) -%} - {%- set attr_class = attr_class ~ ' radio' -%} +{%- set widget_class = widget_class|default('radio') -%} + {{- parent() -}} {%- endblock radio_widget %} {%- block choice_widget_collapsed -%} - {%- set attr = attr|merge({class: (attr.class|default('') ~ ' select')|trim}) -%} + {%- set attr = attr|merge({class: (attr.class|default('') ~ ' select mt-2')|trim}) -%} {{- parent() -}} {%- endblock choice_widget_collapsed -%} {% block textarea_widget -%} - {% set attr = attr|merge({class: (attr.class|default('') ~ ' textarea')|trim}) %} + {% set attr = attr|merge({class: (attr.class|default('') ~ ' textarea mt-2')|trim}) %} {{- parent() -}} {%- endblock textarea_widget %} +{%- block range_widget -%} + {% set type = type|default('range') %} + {%- set widget_class = widget_class|default('range mt-2') -%} + {{- block('form_widget_simple') -}} +{%- endblock range_widget %} + {% block form_widget_simple -%} - {%- if type is not defined or type != 'hidden' %} - {%- set widget_class = ' input' %} + {%- if type is not defined or type not in ['hidden', 'range'] %} + {%- set widget_class = ' input mt-2' %} {%- set attr = attr|merge({class: (attr.class|default('') ~ widget_class)|trim}) -%} {% endif -%} From 0e1b09946463c4a8f9e3013e6ad128882e66181b Mon Sep 17 00:00:00 2001 From: Oviglo Date: Wed, 14 May 2025 12:13:37 +0200 Subject: [PATCH 5/5] file input + errors --- .../views/Form/daisyui_5_layout.html.twig | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig index 5e45c05fe010a..2697342188b39 100644 --- a/src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig +++ b/src/Symfony/Bridge/Twig/Resources/views/Form/daisyui_5_layout.html.twig @@ -1,17 +1,27 @@ -{% use 'tailwind_2_layout.html.twig' %} +{% use 'form_div_layout.html.twig' %} {%- block form_row -%} {%- set row_attr = row_attr|merge({ class: row_attr.class|default(row_class|default('flex flex-col mb-6')) }) -%} {{- parent() -}} {%- endblock form_row -%} -{%- block form_errors -%} - {%- set attr = attr|merge({class: (attr.class|default('text-error'))|trim}) -%} +{%- block widget_attributes -%} + {%- set attr = attr|merge({ class: attr.class|default(widget_class|default('mt-1 w-full')) ~ (errors|length ? ' ' ~ widget_errors_class|default('input-error')) }) -%} {{- parent() -}} +{%- endblock widget_attributes -%} + +{%- block form_errors -%} + {%- if errors|length > 0 -%} +
    + {%- for error in errors -%} +
  • {{ error.message }}
  • + {%- endfor -%} +
+ {%- endif -%} {%- endblock form_errors -%} {%- block form_help -%} - {%- set attr = attr|merge({class: (attr.class|default('text-sm text-neutral'))|trim}) -%} + {%- set help_attr = help_attr|merge({class: (help_attr.class|default('mt-1 label'))|trim}) -%} {{- parent() -}} {%- endblock form_help -%} @@ -46,7 +56,7 @@ {%- set row_attr = row_attr|merge({ class: row_attr.class|default(row_class|default('mb-6')) }) -%} {%- set widget_attr = {} -%} {%- if help is not empty -%} - {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} + {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"} } -%} {%- endif -%} {{- form_errors(form) -}} @@ -59,12 +69,12 @@ {%- endblock checkbox_row -%} {%- block checkbox_widget -%} - {%- set widget_class = widget_class|default('checkbox') -%} + {%- set widget_class = (widget_class|default('checkbox') ~ (errors|length ? ' checkbox-error')) -%} {{- parent() -}} {%- endblock checkbox_widget -%} {% block radio_widget -%} -{%- set widget_class = widget_class|default('radio') -%} +{%- set widget_class = (widget_class|default('radio') ~ (errors|length ? ' radio-error')) -%} {{- parent() -}} {%- endblock radio_widget %} @@ -84,8 +94,14 @@ {{- block('form_widget_simple') -}} {%- endblock range_widget %} +{%- block file_widget -%} + {% set type = type|default('file') %} + {%- set widget_class = (widget_class|default('file-input mt-2') ~ (errors|length ? ' file-input-error')) -%} + {{- block('form_widget_simple') -}} +{%- endblock file_widget %} + {% block form_widget_simple -%} - {%- if type is not defined or type not in ['hidden', 'range'] %} + {%- if type is not defined or type not in ['hidden', 'range', 'file'] %} {%- set widget_class = ' input mt-2' %} {%- set attr = attr|merge({class: (attr.class|default('') ~ widget_class)|trim}) -%} {% endif -%}