Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions fragments/minibar/minibar_element.php
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
<?php
/**
* @var $element rex_minibar_element
* @var rex_minibar_element $element
*/
$element = $this->element;

$class = 'rex-minibar-element ';
$class .= rex_string::normalize(get_class($element), '-');
$class .= $element->cssClass();
$class .= ($element->getOrientation() == rex_minibar_element::RIGHT ? ' rex-minibar-element-right' : '');
$class .= ($element->isDanger() ? ' rex-minibar-status-danger' : '');
$class .= ($element->isWarning() ? ' rex-minibar-status-warning' : '');
$class .= ($element->isPrimary() ? ' rex-minibar-status-primary' : '');

$onmouseover = '';
if ($element instanceof rex_minibar_lazy_element && rex_minibar_lazy_element::isFirstView()) {
$elementId = get_class($element);
$elementId = $element->jsId();
$context = rex_context::restore();
$url = $context->getUrl(['lazy_element' => $elementId, 'article_id' => rex_article::getCurrentId(), 'current_lang'=> rex_clang::getCurrentId()] + rex_api_minibar::getUrlParams());
$onmouseover = <<<EOD
Expand Down
31 changes: 31 additions & 0 deletions lib/element/element.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,37 @@ abstract class rex_minibar_element
*/
abstract public function render();

/**
* liefert einen CSS-Namen, über den Elemente dieser Klasse
* individuell konfiguriert werden können.
*
* Für eigene Klassen: optional überschreiben
*
* Default: normalisierter Klassenname
*
* @api
*/
public function cssClass() : string
{
static $cache = [];
return $cache[static::class] ??= rex_string::normalize(static::class, '-');
}
Comment thread
skerbis marked this conversation as resolved.

/**
* Liefert einen anonymisierten Identifier zur Verwendung in API-Aufrufen
* MD5-kodierter Klassenname
*
* Dem Hash ist ein M vorangestellt, da JS-Identifier mit einem Buchstaben
* beginnen müssen/sollten
*
* @api
*/
public function jsId() : string
{
static $cache = [];
return $cache[static::class] ??= 'M' . md5(static::class);
}
Comment thread
skerbis marked this conversation as resolved.

/**
* Returns the orientation in the minibar.
*
Expand Down
7 changes: 6 additions & 1 deletion lib/minibar.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,22 @@ public function addElement(rex_minibar_element $instance)
}

/**
* Identifiziert eine Elementklasse entweder über den Klassennamen im Klartext
* oder über den als MD5 kodierten Klassennamen.
* (zur Info, dem Hash steht ein M voran)
*
* @param string $className
*
* @return rex_minibar_element|null
*/
public function elementByClass($className)
{
foreach ($this->elements as $element) {
if (get_class($element) === $className) {
if ($element::class === $className || $element->jsId() === $className) {
Comment thread
skerbis marked this conversation as resolved.
return $element;
}
}
return null;
}

public function get()
Expand Down