aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElmar Ludwig <elmar.ludwig@uni-osnabrueck.de>2023-08-18 07:35:16 +0000
committerJan-Hendrik Willms <tleilax+studip@gmail.com>2023-08-18 07:35:16 +0000
commitf88ee31160cc2a8f21067e2cb30c6324a4f1fa38 (patch)
tree347b129a4ff460a74554ccee0ccd18f3a288a9d3
parentc6fda0f6436f53ce8f285edc70f4771191cddc9b (diff)
add form to OptionsWidget and refactor code a bit, fixes #1474
Closes #1474 Merge request studip/studip!2044
-rw-r--r--lib/classes/sidebar/LinkElement.php3
-rw-r--r--lib/classes/sidebar/OptionsWidget.php4
-rw-r--r--resources/assets/stylesheets/scss/buttons.scss9
-rw-r--r--resources/assets/stylesheets/scss/sidebar.scss20
-rw-r--r--templates/sidebar/list-widget.php31
5 files changed, 30 insertions, 37 deletions
diff --git a/lib/classes/sidebar/LinkElement.php b/lib/classes/sidebar/LinkElement.php
index 8e3e270..a6bbe96 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 1e56ed1..f50625c 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 659a26a..539a2a3 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 f03d7a2..493049c 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 0507cfa..e9af862 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>