feat: pfeile statt +/-, shortcodes-tab, funktionen aus darstellung entfernt

- Ein-/Ausklappen wieder mit schwarzem Pfeil (>/v) ohne Box.
- Neuer Tab Shortcodes; Darstellung listet keine Funktionen mehr.
- CSS-Klassen-Referenz in den Darstellung-Tab (unter Custom CSS) verschoben.
- EN-Uebersetzung (121 Strings) neu gebaut.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
s4luorth
2026-06-07 15:22:20 +02:00
parent a738841d60
commit 4f0f8ea170
5 changed files with 78 additions and 116 deletions

View File

@@ -254,6 +254,9 @@ class CB_Settings {
<a href="#cb-tab-style" class="nav-tab" data-cb-tab="style">
<?php esc_html_e( 'Darstellung', 'gdpr-content-blocker' ); ?>
</a>
<a href="#cb-tab-shortcodes" class="nav-tab" data-cb-tab="shortcodes">
<?php esc_html_e( 'Shortcodes', 'gdpr-content-blocker' ); ?>
</a>
<a href="#cb-tab-license" class="nav-tab" data-cb-tab="license">
<?php esc_html_e( 'Lizenz', 'gdpr-content-blocker' ); ?>
</a>
@@ -321,8 +324,11 @@ class CB_Settings {
submit_button( __( 'Darstellung speichern', 'gdpr-content-blocker' ) );
?>
</form>
</div>
<?php self::render_usage_help(); ?>
<!-- Shortcodes Tab -->
<div id="cb-tab-shortcodes" class="cb-tab-content" style="display:none;">
<?php self::render_shortcodes_help(); ?>
</div>
<!-- License Tab -->
@@ -409,21 +415,21 @@ class CB_Settings {
.cb-admin-wrap .cb-switch input:checked + .cb-switch__slider::before {
transform: translateX(18px);
}
/* expand/collapse +/- icon */
/* expand/collapse arrow (black, no box) */
.cb-admin-wrap .cb-service-toggle {
width: 30px;
height: 30px;
font-size: 22px;
width: 24px;
height: 24px;
font-size: 16px;
line-height: 1;
font-weight: 400;
color: #2043B7;
background: #f0f3fc;
border: 1px solid #c7d2f5;
border-radius: 6px;
color: #1d2327;
background: none;
border: none;
padding: 0;
cursor: pointer;
}
.cb-admin-wrap .cb-service-toggle:hover {
background: #e3e9fb;
color: #000;
}
/* trash remove button */
.cb-admin-wrap .cb-remove-service {
@@ -503,7 +509,7 @@ class CB_Settings {
?>
<div class="cb-service-box" data-cb-index="<?php echo $idx; ?>">
<div class="cb-service-head">
<button type="button" class="cb-service-toggle" aria-expanded="false" aria-label="<?php esc_attr_e( 'Details anzeigen/ausblenden', 'gdpr-content-blocker' ); ?>">+</button>
<button type="button" class="cb-service-toggle" aria-expanded="false" aria-label="<?php esc_attr_e( 'Details anzeigen/ausblenden', 'gdpr-content-blocker' ); ?>"></button>
<span class="cb-service-title"><?php echo esc_html( $headname ); ?></span>
<label class="cb-switch" title="<?php esc_attr_e( 'Blocker aktiv/inaktiv', 'gdpr-content-blocker' ); ?>">
@@ -595,57 +601,36 @@ class CB_Settings {
}
echo '<tr><th scope="row"><label>' . esc_html__( 'Custom CSS', 'gdpr-content-blocker' ) . '</label></th>';
echo '<td><textarea name="' . esc_attr( CB_STYLE_OPTION . '[custom_css]' ) . '" rows="8" class="large-text code">' . esc_textarea( $style['custom_css'] ) . '</textarea>';
echo '<p class="description">' . esc_html__( 'Wird nach den CSS-Variablen eingebunden und kann diese überschreiben. Tipp: denselben Präfix verwenden, z. B. .cb-blocker .cb-blocker__button { … }', 'gdpr-content-blocker' ) . '</p></td></tr>';
echo '<p class="description">' . esc_html__( 'Wird nach den CSS-Variablen eingebunden und kann diese überschreiben. Tipp: denselben Präfix verwenden, z. B. .cb-blocker .cb-blocker__button { … }', 'gdpr-content-blocker' ) . '</p>';
echo '<p class="description"><strong>' . esc_html__( 'CSS-Klassen:', 'gdpr-content-blocker' ) . '</strong> '
. '<code>.cb-blocker</code>, <code>.cb-blocker__text</code>, <code>.cb-blocker__recipient</code>, '
. '<code>.cb-blocker__purpose</code>, <code>.cb-blocker__privacy-link</code>, '
. '<code>.cb-blocker__button</code>, <code>.cb-revoke-link</code></p></td></tr>';
echo '</tbody></table>';
}
/**
* Help box explaining shortcodes, revoke, auto-detection and CSS classes.
* Shown below "Darstellung speichern".
*/
private static function render_usage_help(): void {
/** "Shortcodes" tab: only the shortcodes (no feature listing). */
private static function render_shortcodes_help(): void {
$code = static fn( string $s ): string => '<code>' . esc_html( $s ) . '</code>';
?>
<hr style="margin:28px 0 18px;">
<h2><?php esc_html_e( 'Funktionen & Shortcodes', 'gdpr-content-blocker' ); ?></h2>
<h2><?php esc_html_e( 'Shortcodes', 'gdpr-content-blocker' ); ?></h2>
<table class="widefat striped" style="max-width:900px;">
<tbody>
<tr>
<td style="width:280px;vertical-align:top;"><strong><?php esc_html_e( 'Widerruf-Button (Pflicht in der Datenschutzerklärung)', 'gdpr-content-blocker' ); ?></strong><br>
<td style="width:300px;vertical-align:top;"><strong><?php esc_html_e( 'Widerruf (Datenschutzerklärung)', 'gdpr-content-blocker' ); ?></strong><br>
<?php echo $code( '[content_blocker_revoke]' ); ?></td>
<td><?php esc_html_e( 'Rendert einen gut sichtbaren Link, der die Einwilligung für externe Einbettungen widerruft und die Seite neu lädt (Art. 7 Abs. 3 DSGVO). Betrifft NICHT die Cookie-Einwilligung eines separaten Cookie-Plugins. Optionen: text="…", style="link|button", note="yes|no". In die Datenschutzerklärung einfügen.', 'gdpr-content-blocker' ); ?></td>
<td><?php esc_html_e( 'Rendert einen gut sichtbaren Link, der die Einwilligung für externe Einbettungen widerruft und die Seite neu lädt (Art. 7 Abs. 3 DSGVO). Betrifft NICHT die Cookie-Einwilligung eines separaten Cookie-Plugins. Optionen: text="…", style="link|button", note="yes|no".', 'gdpr-content-blocker' ); ?></td>
</tr>
<tr>
<td style="vertical-align:top;"><strong><?php esc_html_e( 'Inhalt manuell blockieren', 'gdpr-content-blocker' ); ?></strong><br>
<?php echo $code( '[content_blocker id="google-maps"]…iframe…[/content_blocker]' ); ?></td>
<td><?php esc_html_e( 'Umschließt ein iframe und ersetzt es durch den Platzhalter des angegebenen Dienstes. Verwenden Sie den internen Namen aus dem Tab „Dienste". Ideal für Inhalte, die nicht automatisch erkannt werden (z. B. per JavaScript nachgeladene iframes).', 'gdpr-content-blocker' ); ?></td>
<td><?php esc_html_e( 'Umschließt ein iframe und ersetzt es durch den Platzhalter des angegebenen Dienstes. Verwenden Sie den internen Namen aus dem Tab „Dienste".', 'gdpr-content-blocker' ); ?></td>
</tr>
<tr>
<td style="vertical-align:top;"><strong><?php esc_html_e( 'Dienste-Übersicht (für die Datenschutzerklärung)', 'gdpr-content-blocker' ); ?></strong><br>
<td style="vertical-align:top;"><strong><?php esc_html_e( 'Dienste-Übersicht (Datenschutzerklärung)', 'gdpr-content-blocker' ); ?></strong><br>
<?php echo $code( '[content_blocker_services]' ); ?></td>
<td><?php esc_html_e( 'Listet alle konfigurierten Dienste mit Empfänger, Drittland-Hinweis, Zweck und Datenschutz-Link auf. Ideal zum Einbinden in die Datenschutzerklärung (Art. 13 DSGVO).', 'gdpr-content-blocker' ); ?></td>
</tr>
<tr>
<td style="vertical-align:top;"><strong><?php esc_html_e( 'Automatische Erkennung', 'gdpr-content-blocker' ); ?></strong></td>
<td><?php esc_html_e( 'iframes im Server-HTML, deren URL auf das „Erkennungsmuster" eines Dienstes passt, werden automatisch blockiert. Greift nur bei statischem HTML für JS-iframes den Shortcode oben nutzen.', 'gdpr-content-blocker' ); ?></td>
</tr>
<tr>
<td style="vertical-align:top;"><strong><?php esc_html_e( 'Webseiten-Scan', 'gdpr-content-blocker' ); ?></strong></td>
<td><?php esc_html_e( 'Im Tab „Scan" listet der Lizenzserver alle eingebundenen Drittanbieter auf. Erfordert eine aktive Lizenz.', 'gdpr-content-blocker' ); ?></td>
</tr>
<tr>
<td style="vertical-align:top;"><strong><?php esc_html_e( 'CSS-Klassen', 'gdpr-content-blocker' ); ?></strong></td>
<td>
<?php echo $code( '.cb-blocker' ); ?>,
<?php echo $code( '.cb-blocker__text' ); ?>,
<?php echo $code( '.cb-blocker__recipient' ); ?>,
<?php echo $code( '.cb-blocker__purpose' ); ?>,
<?php echo $code( '.cb-blocker__privacy-link' ); ?>,
<?php echo $code( '.cb-blocker__button' ); ?>,
<?php echo $code( '.cb-revoke-btn' ); ?>
<p class="description" style="margin-top:6px;"><?php esc_html_e( 'Eigene Regeln im Custom-CSS mit Präfix .cb-blocker schreiben, damit sie das Theme überschreiben.', 'gdpr-content-blocker' ); ?></p>
</td>
</tr>
</tbody>
</table>
<?php