fix: kein s.w.org-emoji-request + kein weissraum unter dem blocker (v1.4.3)
1) Das Warn-Emoji "⚠" im platzhalter-text loeste WordPress' wp-emoji aus, das die grafik von s.w.org nachlud (drittanbieter-request). Emoji aus den texten entfernt; das warn-dreieck wird jetzt rein per CSS gezeichnet (kein netzwerk). Hinweis: s.w.org ist der WP-emoji-CDN, NICHT Google. 2) Der platzhalter reservierte die hoehe des eingebetteten elements -> bei kuerzerem inhalt entstand weissraum darunter. Hoehen-reservierung entfernt (PHP min-height-style, JS minHeight, CSS min-height:180px) - der content blocker ist jetzt exakt so hoch wie sein eigener inhalt. Die original-masse bleiben als data-attribute fuer das iframe nach einwilligung erhalten. 3) Redundante, partielle de_DE-.po/.mo (mit altem emoji) entfernt - deutsche locales nutzen direkt die deutschen quell-strings. + version 1.4.3 (assets cache-busting). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -23,7 +23,6 @@
|
||||
display: flex;
|
||||
align-items: flex-start; /* pin content to the top */
|
||||
justify-content: center;
|
||||
min-height: 180px; /* fallback only; real height is set inline */
|
||||
width: 100%;
|
||||
background-color: var(--cb-bg);
|
||||
color: var(--cb-text);
|
||||
@@ -31,7 +30,7 @@
|
||||
padding: 24px 8px 20px; /* min 20px top/bottom, 8px sides */
|
||||
font-family: inherit;
|
||||
border-radius: 4px;
|
||||
overflow: auto; /* if text is taller than the embed, scroll, don't clip */
|
||||
/* No reserved height: the placeholder is exactly as tall as its content. */
|
||||
}
|
||||
|
||||
/* ── Inner content ── */
|
||||
@@ -62,6 +61,18 @@
|
||||
color: #f0b429; /* amber — universal caution, brand-neutral */
|
||||
font-weight: 600;
|
||||
}
|
||||
/* Caution marker drawn in pure CSS (no emoji → no s.w.org/emoji request). */
|
||||
.cb-blocker .cb-blocker__third-country::before {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin-right: 6px;
|
||||
vertical-align: -2px;
|
||||
border-left: 0.45em solid transparent;
|
||||
border-right: 0.45em solid transparent;
|
||||
border-bottom: 0.8em solid currentColor;
|
||||
}
|
||||
|
||||
/* ── Privacy link ── */
|
||||
.cb-blocker .cb-blocker__privacy-link {
|
||||
|
||||
@@ -169,11 +169,10 @@
|
||||
wrap.className = 'cb-blocker';
|
||||
wrap.setAttribute( 'data-cb-id', svc.id );
|
||||
wrap.dataset.src = src;
|
||||
// Keep the dims for the iframe we create on consent, but do NOT reserve
|
||||
// height — the placeholder is sized to its own content (no empty space).
|
||||
if ( dims.width ) wrap.dataset.width = dims.width;
|
||||
if ( dims.height ) wrap.dataset.height = dims.height;
|
||||
if ( dims.height && /^\d+$/.test( String( dims.height ) ) ) {
|
||||
wrap.style.minHeight = dims.height + 'px';
|
||||
}
|
||||
|
||||
const inner = document.createElement( 'div' );
|
||||
inner.className = 'cb-blocker__inner';
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Plugin Name: GDPR Content Blocker
|
||||
* Plugin URI: https://lucas-orth.de
|
||||
* Description: DSGVO-konformer Consent-Blocker für externe iframes. Lädt Drittinhalte erst nach aktiver Einwilligung.
|
||||
* Version: 1.4.2
|
||||
* Version: 1.4.3
|
||||
* Author: Lucas Orth
|
||||
* Author URI: https://lucas-orth.de
|
||||
* Text Domain: gdpr-content-blocker
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
defined( 'ABSPATH' ) || exit;
|
||||
|
||||
define( 'CB_VERSION', '1.4.2' );
|
||||
define( 'CB_VERSION', '1.4.3' );
|
||||
define( 'CB_FILE', __FILE__ );
|
||||
define( 'CB_DIR', plugin_dir_path( __FILE__ ) );
|
||||
define( 'CB_URL', plugin_dir_url( __FILE__ ) );
|
||||
|
||||
@@ -111,7 +111,7 @@ class CB_Renderer {
|
||||
'i18n' => [
|
||||
'recipient' => __( 'Empfänger:', 'gdpr-content-blocker' ),
|
||||
'purpose' => __( 'Zweck:', 'gdpr-content-blocker' ),
|
||||
'thirdCountry' => __( '⚠ Datenübermittlung in ein Drittland außerhalb der EU/des EWR', 'gdpr-content-blocker' ),
|
||||
'thirdCountry' => __( 'Datenübermittlung in ein Drittland außerhalb der EU/des EWR', 'gdpr-content-blocker' ),
|
||||
'privacy' => __( 'Datenschutzerklärung des Anbieters', 'gdpr-content-blocker' ),
|
||||
'load' => __( '%s jetzt laden', 'gdpr-content-blocker' ),
|
||||
'remember' => __( 'Diesen Dienst künftig immer laden', 'gdpr-content-blocker' ),
|
||||
@@ -314,7 +314,7 @@ class CB_Renderer {
|
||||
$third_note = '';
|
||||
if ( $third ) {
|
||||
$third_note = '<span class="cb-blocker__third-country">'
|
||||
. esc_html__( '⚠ Datenübermittlung in ein Drittland außerhalb der EU/des EWR', 'gdpr-content-blocker' )
|
||||
. esc_html__( 'Datenübermittlung in ein Drittland außerhalb der EU/des EWR', 'gdpr-content-blocker' )
|
||||
. '</span>';
|
||||
}
|
||||
|
||||
@@ -327,14 +327,12 @@ class CB_Renderer {
|
||||
|
||||
$data_src = $src !== '' ? ' data-src="' . esc_attr( $src ) . '"' : '';
|
||||
|
||||
// Reserve the embed's height so the layout doesn't jump, and remember the
|
||||
// original dimensions for the iframe that gets created on consent.
|
||||
// Remember the original dimensions for the iframe that gets created on
|
||||
// consent. The placeholder itself is sized to its own content (no reserved
|
||||
// height), so there is no empty space below it.
|
||||
$width = isset( $dims['width'] ) ? (string) $dims['width'] : '';
|
||||
$height = isset( $dims['height'] ) ? (string) $dims['height'] : '';
|
||||
$style_at = '';
|
||||
if ( $height !== '' && ctype_digit( $height ) ) {
|
||||
$style_at = ' style="min-height:' . esc_attr( $height ) . 'px"';
|
||||
}
|
||||
$data_dims = '';
|
||||
if ( $width !== '' ) {
|
||||
$data_dims .= ' data-width="' . esc_attr( $width ) . '"';
|
||||
|
||||
Binary file not shown.
@@ -1,125 +0,0 @@
|
||||
# Content Blocker – German (de_DE)
|
||||
# Copyright (C) 2024 Lucas Orth
|
||||
# This file is distributed under the same license as the Content Blocker plugin.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Content Blocker 1.0.0\n"
|
||||
"Report-Msgid-Bugs-To: privat@lucas-orth.de\n"
|
||||
"POT-Creation-Date: 2024-01-01 00:00+0000\n"
|
||||
"PO-Revision-Date: 2024-01-01 00:00+0000\n"
|
||||
"Last-Translator: Lucas Orth <privat@lucas-orth.de>\n"
|
||||
"Language-Team: German\n"
|
||||
"Language: de_DE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Generator: Manual\n"
|
||||
|
||||
msgid "Content Blocker"
|
||||
msgstr "Content Blocker"
|
||||
|
||||
msgid "DSGVO-konformer Consent-Blocker für externe iframes. Lädt Drittinhalte erst nach aktiver Einwilligung."
|
||||
msgstr "DSGVO-konformer Consent-Blocker für externe iframes. Lädt Drittinhalte erst nach aktiver Einwilligung."
|
||||
|
||||
msgid "Keine Berechtigung."
|
||||
msgstr "Keine Berechtigung."
|
||||
|
||||
msgid "Einstellungen gespeichert."
|
||||
msgstr "Einstellungen gespeichert."
|
||||
|
||||
msgid "Dienste"
|
||||
msgstr "Dienste"
|
||||
|
||||
msgid "Darstellung"
|
||||
msgstr "Darstellung"
|
||||
|
||||
msgid "+ Dienst hinzufügen"
|
||||
msgstr "+ Dienst hinzufügen"
|
||||
|
||||
msgid "Dienste speichern"
|
||||
msgstr "Dienste speichern"
|
||||
|
||||
msgid "Darstellung speichern"
|
||||
msgstr "Darstellung speichern"
|
||||
|
||||
msgid "Neuer Dienst"
|
||||
msgstr "Neuer Dienst"
|
||||
|
||||
msgid "ID (Slug, intern)"
|
||||
msgstr "ID (Slug, intern)"
|
||||
|
||||
msgid "Anbietername"
|
||||
msgstr "Anbietername"
|
||||
|
||||
msgid "Erkennungsmuster (Domain/Pfad)"
|
||||
msgstr "Erkennungsmuster (Domain/Pfad)"
|
||||
|
||||
msgid "Empfänger (inkl. Land)"
|
||||
msgstr "Empfänger (inkl. Land)"
|
||||
|
||||
msgid "Datenschutz-URL des Anbieters"
|
||||
msgstr "Datenschutz-URL des Anbieters"
|
||||
|
||||
msgid "Verarbeitungszweck"
|
||||
msgstr "Verarbeitungszweck"
|
||||
|
||||
msgid "Individueller Platzhaltertext (leer = Standard)"
|
||||
msgstr "Individueller Platzhaltertext (leer = Standard)"
|
||||
|
||||
msgid "Datenübermittlung in Drittland (außerhalb EU/EWR)"
|
||||
msgstr "Datenübermittlung in Drittland (außerhalb EU/EWR)"
|
||||
|
||||
msgid "Setzt Cookies"
|
||||
msgstr "Setzt Cookies"
|
||||
|
||||
msgid "Lädt externe Skripte"
|
||||
msgstr "Lädt externe Skripte"
|
||||
|
||||
msgid "Entfernen"
|
||||
msgstr "Entfernen"
|
||||
|
||||
msgid "Textfarbe Platzhalter"
|
||||
msgstr "Textfarbe Platzhalter"
|
||||
|
||||
msgid "Hintergrundfarbe Platzhalter"
|
||||
msgstr "Hintergrundfarbe Platzhalter"
|
||||
|
||||
msgid "Button: Hintergrundfarbe"
|
||||
msgstr "Button: Hintergrundfarbe"
|
||||
|
||||
msgid "Button: Textfarbe"
|
||||
msgstr "Button: Textfarbe"
|
||||
|
||||
msgid "Button Hover: Hintergrundfarbe"
|
||||
msgstr "Button Hover: Hintergrundfarbe"
|
||||
|
||||
msgid "Button Hover: Textfarbe"
|
||||
msgstr "Button Hover: Textfarbe"
|
||||
|
||||
msgid "Custom CSS"
|
||||
msgstr "Custom CSS"
|
||||
|
||||
msgid "Wird nach den CSS-Variablen eingebunden und kann diese überschreiben."
|
||||
msgstr "Wird nach den CSS-Variablen eingebunden und kann diese überschreiben."
|
||||
|
||||
msgid "Um diesen Inhalt von %s zu laden, ist Ihre Einwilligung erforderlich. Dabei werden personenbezogene Daten (z. B. Ihre IP-Adresse) an den Anbieter übertragen."
|
||||
msgstr "Um diesen Inhalt von %s zu laden, ist Ihre Einwilligung erforderlich. Dabei werden personenbezogene Daten (z. B. Ihre IP-Adresse) an den Anbieter übertragen."
|
||||
|
||||
msgid "⚠ Datenübermittlung in ein Drittland außerhalb der EU/des EWR"
|
||||
msgstr "⚠ Datenübermittlung in ein Drittland außerhalb der EU/des EWR"
|
||||
|
||||
msgid "Datenschutzerklärung des Anbieters"
|
||||
msgstr "Datenschutzerklärung des Anbieters"
|
||||
|
||||
msgid "Empfänger:"
|
||||
msgstr "Empfänger:"
|
||||
|
||||
msgid "Zweck:"
|
||||
msgstr "Zweck:"
|
||||
|
||||
msgid "%s jetzt laden"
|
||||
msgstr "%s jetzt laden"
|
||||
|
||||
msgid "Alle Einwilligungen widerrufen"
|
||||
msgstr "Alle Einwilligungen widerrufen"
|
||||
Binary file not shown.
@@ -93,8 +93,8 @@ msgstr "Recipient:"
|
||||
msgid "Zweck:"
|
||||
msgstr "Purpose:"
|
||||
|
||||
msgid "⚠ Datenübermittlung in ein Drittland außerhalb der EU/des EWR"
|
||||
msgstr "⚠ Data transfer to a third country outside the EU/EEA"
|
||||
msgid "Datenübermittlung in ein Drittland außerhalb der EU/des EWR"
|
||||
msgstr "Data transfer to a third country outside the EU/EEA"
|
||||
|
||||
msgid "Datenschutzerklärung des Anbieters"
|
||||
msgstr "Provider's privacy policy"
|
||||
|
||||
@@ -28,7 +28,7 @@ MSGID Erneut versuchen
|
||||
MSGID Lizenz aktivieren
|
||||
MSGID Empfänger:
|
||||
MSGID Zweck:
|
||||
MSGID ⚠ Datenübermittlung in ein Drittland außerhalb der EU/des EWR
|
||||
MSGID Datenübermittlung in ein Drittland außerhalb der EU/des EWR
|
||||
MSGID Datenschutzerklärung des Anbieters
|
||||
MSGID %s jetzt laden
|
||||
MSGID Diesen Dienst künftig immer laden
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
"Lizenz aktivieren": "Activate license",
|
||||
"Empfänger:": "Recipient:",
|
||||
"Zweck:": "Purpose:",
|
||||
"⚠ Datenübermittlung in ein Drittland außerhalb der EU/des EWR": "⚠ Data transfer to a third country outside the EU/EEA",
|
||||
"Datenschutzerklärung des Anbieters": "Provider's privacy policy",
|
||||
"%s jetzt laden": "Load %s now",
|
||||
"Diesen Dienst künftig immer laden": "Always load this service from now on",
|
||||
@@ -126,5 +125,6 @@
|
||||
"Blockiert zusätzlich passende <script>-Einbindungen (auch per JavaScript nachgeladene, z. B. die YouTube-/Vimeo-API) bis zur Einwilligung.": "Additionally blocks matching <script> includes (including ones injected via JavaScript, e.g. the YouTube/Vimeo API) until consent.",
|
||||
"Externe Inhalte aktivieren": "Enable external content",
|
||||
"Einwilligungs-Button (für reine Skript-Dienste)": "Consent button (for script-only services)",
|
||||
"Erteilt die Einwilligung für einen Dienst und lädt die Seite neu. Gedacht für Dienste, die nur Skripte blockieren und keinen sichtbaren Platzhalter haben. Optionen: id=\"…\" (Dienst-ID, Pflicht), text=\"…\", style=\"button|link\".": "Grants consent for a service and reloads the page. Intended for services that only block scripts and have no visible placeholder. Options: id=\"…\" (service ID, required), text=\"…\", style=\"button|link\"."
|
||||
"Erteilt die Einwilligung für einen Dienst und lädt die Seite neu. Gedacht für Dienste, die nur Skripte blockieren und keinen sichtbaren Platzhalter haben. Optionen: id=\"…\" (Dienst-ID, Pflicht), text=\"…\", style=\"button|link\".": "Grants consent for a service and reloads the page. Intended for services that only block scripts and have no visible placeholder. Options: id=\"…\" (service ID, required), text=\"…\", style=\"button|link\".",
|
||||
"Datenübermittlung in ein Drittland außerhalb der EU/des EWR": "Data transfer to a third country outside the EU/EEA"
|
||||
}
|
||||
Reference in New Issue
Block a user