From f88ee31160cc2a8f21067e2cb30c6324a4f1fa38 Mon Sep 17 00:00:00 2001 From: Elmar Ludwig <elmar.ludwig@uni-osnabrueck.de> Date: Fri, 18 Aug 2023 07:35:16 +0000 Subject: [PATCH] add form to OptionsWidget and refactor code a bit, fixes #1474 Closes #1474 Merge request studip/studip!2044 --- lib/classes/sidebar/LinkElement.php | 3 +- lib/classes/sidebar/OptionsWidget.php | 4 +-- .../assets/stylesheets/scss/buttons.scss | 9 +++--- .../assets/stylesheets/scss/sidebar.scss | 20 +++--------- templates/sidebar/list-widget.php | 31 ++++++++++--------- 5 files changed, 30 insertions(+), 37 deletions(-) diff --git a/lib/classes/sidebar/LinkElement.php b/lib/classes/sidebar/LinkElement.php index 8e3e2706e11..a6bbe961b5f 100644 --- a/lib/classes/sidebar/LinkElement.php +++ b/lib/classes/sidebar/LinkElement.php @@ -226,10 +226,9 @@ class LinkElement extends WidgetElement implements ArrayAccess protected function renderButton() { return sprintf( - '<form action="%1$s" method="post" %2$s>%3$s<button type="submit">%4$s</button></form>', + '<button formaction="%s" class="as-link" %s>%s</button>', htmlReady($this->url), arrayToHtmlAttributes((array) $this->attributes), - CSRFProtection::tokenTag(), htmlReady($this->label) ); } diff --git a/lib/classes/sidebar/OptionsWidget.php b/lib/classes/sidebar/OptionsWidget.php index 1e56ed1cd76..f50625c3129 100644 --- a/lib/classes/sidebar/OptionsWidget.php +++ b/lib/classes/sidebar/OptionsWidget.php @@ -34,7 +34,7 @@ class OptionsWidget extends ListWidget $toggle_url_off = isset($toggle_url_off) ? html_entity_decode($toggle_url_off) : null; $content = sprintf( - '<a href="%s" role="checkbox" aria-checked="%s" class="options-checkbox options-%s" %s>%s</a>', + '<button formaction="%s" role="checkbox" aria-checked="%s" class="as-link options-checkbox options-%s" %s>%s</button>', htmlReady($state && $toggle_url_off !== null ? $toggle_url_off : $toggle_url), $state ? 'true' : 'false', $state ? 'checked' : 'unchecked', @@ -55,7 +55,7 @@ class OptionsWidget extends ListWidget $url = html_entity_decode($url); $content = sprintf( - '<a href="%s" role="radio" aria-checked="%s" class="options-radio options-%s" %s>%s</a>', + '<button formaction="%s" role="radio" aria-checked="%s" class="as-link options-radio options-%s" %s>%s</button>', htmlReady($url), $checked ? 'true' : 'false', $checked ? 'checked' : 'unchecked', diff --git a/resources/assets/stylesheets/scss/buttons.scss b/resources/assets/stylesheets/scss/buttons.scss index 659a26a0a5b..539a2a3e0c4 100644 --- a/resources/assets/stylesheets/scss/buttons.scss +++ b/resources/assets/stylesheets/scss/buttons.scss @@ -142,12 +142,13 @@ button.styleless { border: 0; } button.as-link { + background-color: transparent; border: none; - padding: 0px; - margin: 0px; + color: $base-color; cursor: pointer; - background-color: transparent; + margin: 0px; + padding: 0px; &:hover { - background-color: transparent; + color: $active-color; } } diff --git a/resources/assets/stylesheets/scss/sidebar.scss b/resources/assets/stylesheets/scss/sidebar.scss index f03d7a2e8fb..493049c4e39 100644 --- a/resources/assets/stylesheets/scss/sidebar.scss +++ b/resources/assets/stylesheets/scss/sidebar.scss @@ -123,6 +123,11 @@ ul.widget-list { padding-left: 20px; word-wrap: break-word; } + + button { + text-align: left; + width: 100%; + } } div#sidebar-navigation { div.sidebar-widget-header { @@ -191,21 +196,6 @@ div#sidebar-navigation { } } } - - button { - background: transparent; - border: 0; - color: $base-color; - margin: 0; - padding: 0; - text-align: left; - width: 100%; - - &:hover { - color: $active-color; - cursor: pointer; - } - } } .sidebar-widget-cloud { diff --git a/templates/sidebar/list-widget.php b/templates/sidebar/list-widget.php index 0507cfab7ce..e9af862500b 100644 --- a/templates/sidebar/list-widget.php +++ b/templates/sidebar/list-widget.php @@ -1,15 +1,18 @@ -<ul class="<?= implode(' ', $css_classes) ?>" aria-label="<?= htmlReady($title) ?>"> -<? foreach ($elements as $index => $element): ?> - <? if ($element instanceof LinkElement): ?> - <? $icon = $element->icon ?? null ?> - <? if ($icon && $element->isDisabled()): ?> - <? $icon = $icon->copyWithRole('inactive') ?> +<form method="post"> + <?= CSRFProtection::tokenTag() ?> + <ul class="<?= implode(' ', $css_classes) ?>" aria-label="<?= htmlReady($title) ?>"> + <? foreach ($elements as $index => $element): ?> + <? if ($element instanceof LinkElement): ?> + <? $icon = $element->icon ?? null ?> + <? if ($icon && $element->isDisabled()): ?> + <? $icon = $icon->copyWithRole('inactive') ?> + <? endif ?> <? endif ?> - <? endif ?> - <li id="<?= htmlReady($index) ?>" - <?= isset($icon) ? 'style="' . $icon->asCSS() .'"' : '' ?> - <?= !empty($element->active) ? 'class="active"' : '' ?>> - <?= $element->render() ?> - </li> -<? endforeach; ?> -</ul> + <li id="<?= htmlReady($index) ?>" + <?= isset($icon) ? 'style="' . $icon->asCSS() .'"' : '' ?> + <?= !empty($element->active) ? 'class="active"' : '' ?>> + <?= $element->render() ?> + </li> + <? endforeach; ?> + </ul> +</form> -- GitLab