Unsere Lösung zum Verwischen von NSFW-Inhalten

Im Blender Artists-Forum haben wir eine relativ liberale Inhaltsrichtlinie, die Nacktheit und Gewalt (bis zu einem gewissen Grad) erlaubt. Während die meisten Mitglieder mit dieser Art von Inhalt einverstanden sind, gibt es natürlich Zielgruppen und Situationen, in denen dies nicht geeignet ist (für uns hauptsächlich Schulen und Kinder). Da wir stark auf Kachelgalerien mit dem Topic List Preview-Plugin zurückgreifen, benötigten wir eine Möglichkeit, diese Art von Inhalt als Opt-in zu gestalten und standardmäßig nicht im Vordergrund zu zeigen.

Die Lösung war einfacher zu implementieren als erwartet, und ich habe mich entschieden, sie hier zu teilen, falls andere sie ebenfalls nutzen können. Fairer Hinweis: Ich werde hier auf einige NSFW-Inhalte verlinken. Los geht’s!

Wir haben bereits einen #nsfw-Tag für alle relevanten Beiträge gefordert und dies in den letzten Monaten strikt durchgesetzt. Unser AdSense-Plugin ist so konfiguriert, dass auf diesen Seiten keine Werbung angezeigt wird, da dies (und hat!) Probleme mit Google verursachen würde. (Großer Dank an @neil für das Hinzufügen dieser Funktion!)

Mithilfe von etwas CSS haben wir für alle Medien in solchen Themen eine Unschärfe und einen Overlay-Text hinzugefügt. Die Unschärfe wird beim Hover entfernt:

/* Anzeige von NSFW-Unschärfe und Overlay-Text für alle Medien in #nsfw-Themen */
.tag-nsfw { 
	.topic-body .cooked img, 
	.topic-body .cooked iframe, 
	.topic-body .cooked .lazyYT-container, 
	.topic-thumbnail img {
        filter: blur(10px);	
        -webkit-transition: .3s ease-in-out;
        transition: .2s ease-in-out;
	}

	.topic-body:hover .cooked img, 
	.topic-body:hover .cooked iframe,
	.topic-body:hover .cooked .lazyYT-container, 			
	.topic-thumbnail:hover img {
        filter: blur(0);	
        -webkit-transition: .3s ease-in-out;
        transition: .2s ease-in-out;
	}

	.topic-body .cooked a.lightbox:before, 
	.topic-body .cooked iframe:before,
	.topic-thumbnail a:before {
	    z-index:2;
        padding: 5px;
        font-size:1em;
        position:absolute;

        color:#fff;
        content: '⚠️ Erwachseneninhalte – Zum Anzeigen überfahren';
        background: #e86800;

	}
	
	.topic-body .cooked a.lightbox:before, 
	.topic-body .cooked iframe:before {
        top: 15px;
        left: 10px;
	}

	.topic-thumbnail a:before {
        top: 65px;
        left: 20px;
	}
	
	.topic-body .cooked a.lightbox:hover:before, 
	.topic-body .cooked iframe:hover:before,
	.topic-thumbnail a:hover:before: {		
	    display:none;
	}
}

Bilder und Videos in einem Thema sehen nun so aus:

Und in allen TLP-Kachelgalerien haben wir:

Als Nächstes haben wir eine Einstellung hinzugefügt, die es Benutzern ermöglicht, die Unschärfe für ihr Konto zu deaktivieren. Dies erwies sich als einfacher zu implementieren als gedacht, indem wir benutzerdefinierte Felder verwendeten.

Wir begannen damit, ein Kontrollkästchen als benutzerdefiniertes Feld zu erstellen:

Dann haben wir etwas Code umfunktioniert, um für diese Benutzer das Tag ‘nsfw-always-show’ zur body-Klasse hinzuzufügen:

<!-- Aktuelle NSFW-Einstellungen des Benutzers zum body-Tag hinzufügen -->
<script type="text/discourse-plugin" version="0.8">

// https://meta.discourse.org/t/css-classes-for-group-membership-for-simplified-ui-mode/60838/2
if (window.jQuery) {
    window.jQuery(function ($) {
        var u = Discourse.User.current();

        // NSFW immer anzeigen
        if (u.custom_fields.user_field_2) {
            console.log('NSFW für Benutzer anzeigen');
            $('body').addClass('nsfw-always-show' );
        }

    });
};

</script>

Ein letzter CSS-Abschnitt entfernt die Unschärfe für diese Benutzer:

/* Benutzerdefinierte Felder vom Anmeldeformular ausblenden */

.login-form .user-fields {display:none;}

/* NSFW-Unschärfe für Benutzer deaktivieren, die dies in ihren Einstellungen festgelegt haben */

.nsfw-always-show .tag-nsfw {
	.topic-body .cooked img, 
	.topic-body .cooked iframe, 
	.topic-body .cooked .lazyYT-container, 
	.topic-thumbnail img {
        filter: blur(0px);	
	}
	
	.topic-body .cooked a.lightbox:before, 
	.topic-body .cooked iframe:before,
	.topic-thumbnail a:before {
	    display:none;
	    content: none;
	}
}

Ein bekanntes Problem bei diesem Ansatz ist, dass es auf mobilen Geräten noch nicht gut funktioniert, da :hover nicht unterstützt wird.

Wenn Sie dies in Aktion sehen möchten, können Sie unsere #nsfw-Tag-Seite besuchen, aber nun ja, Sie könnten dort einige NSFW-Inhalte sehen :slight_smile:

Ich hoffe, das war für jemanden hilfreich!

55 „Gefällt mir“

Außerdem kann man auf dem Desktop, wenn ein Bild etwas Platz auf dem Bildschirm einnimmt, leicht versehentlich darüberfahren.
Anstatt zum Aufheben der Unschärfe mit der Maus darüberzufahren, wäre es nicht besser, dynamisch einen Button „NSFW-Bild anzeigen

4 „Gefällt mir“

Auf krita-artists.org haben wir dies leicht angepasst, sodass es auf Klick und nicht auf Hover reagiert. Die in der Profilseite verwendete Einstellung funktioniert jedoch nicht. Selbst wenn der Benutzer die Anzeige von NSFW-Inhalten aktiviert hat, werden die Inhalte unscharf dargestellt. Gibt es eine Lösung dafür?

Ich kann meinen OP nicht mehr bearbeiten, aber hier ist der aktualisierte Code. Würdest du auch deine „On-Click“-Lösung teilen?

<!-- Füge die aktuellen NSFW-Einstellungen des Benutzers zum body-Tag hinzu -->
<script type="text/discourse-plugin" version="0.8.7">

// https://meta.discourse.org/t/css-classes-for-group-membership-for-simplified-ui-mode/60838/2
if (window.jQuery) {
    window.jQuery(function ($) {

        let currentUser = api.getCurrentUser();
        
        if (currentUser) {
            api.container.lookup('store:main').find('user', currentUser.username).then((user) => {

                if (user.user_fields[2]) {
                    $('body').addClass('nsfw-always-show' );
                }
            });
        }
    });
};
</script>
2 „Gefällt mir“

Unsere onlick-Lösung ist etwas umständlich und ich denke, sie ist nicht ideal. Wir haben einfach den Blur-Effekt beim Hover entfernt und standardmäßig hinzugefügt. Die Meldung wurde ebenfalls geändert, um darauf hinzuweisen, dass der Nutzer klicken muss, um zum Beitrag zu gelangen. Jetzt muss der Nutzer erst auf den Beitrag klicken und dann erneut klicken, um das NSFW-Bild im Lightbox-Modus freizugeben. Das ist zwar umständlich, verhindert aber ein unbeabsichtigtes Freigeben beim Hover. Es wäre vielleicht besser, JavaScript zu verwenden, um den Blur-Effekt beim Klicken zu entfernen.

/* Blur und Overlay-Text für NSFW-Medien in #nswf-Themen anzeigen */
.tag-nsfw { 
.topic-thumbnail {
    overflow:hidden;
}

	.topic-body .cooked .lightbox img, 
	.topic-body .cooked iframe, 
	.topic-body .cooked .lazyYT-container, 
	.topic-thumbnail img {
    filter: blur(30px);	
    -webkit-transition: .3s ease-in-out;
    transition: .2s ease-in-out;
	}

	.topic-body .cooked a.lightbox:before, 
	.topic-body .cooked iframe:before,
	.topic-thumbnail a:before {
	    z-index:2;
    padding: 5px;
    font-size:1em;
    position:absolute;

    color:#fff;
    content: '⚠️ Reife Inhalte – Klicken, um das Bild anzuzeigen';
    background: #000;

	}
	
	.topic-body .cooked a.lightbox:before, 
	.topic-body .cooked iframe:before {
    top: 50%;
    left: 10px;
    right: 10px;
    text-align:center;
	}

	.topic-thumbnail a:before {
    top: 65px;
    left: 20px;
	}
	
}

/* Benutzerdefinierte Felder im Anmeldeformular ausblenden */
.login-form .user-fields {display:none;}

/* NSFW-Verwischung für Nutzer deaktivieren, die dies in ihren Einstellungen festgelegt haben */
.nsfw-always-show .tag-nsfw {
	.topic-body .cooked img, 
	.topic-body .cooked iframe, 
	.topic-body .cooked .lazyYT-container, 
	.topic-thumbnail img {
    filter: blur(0px);	
	}
	
	.topic-body .cooked a.lightbox:before, 
	.topic-body .cooked iframe:before,
	.topic-thumbnail a:before {
	    display:none;
	    content: none;
	}
}

@bartv @Terrapop

Wenn jemand dies übernehmen möchte, ist es möglich, mithilfe von Discourse Image Filter ein Plugin für die automatische Unschärfe von NSFW-Bildern zu erstellen.

4 „Gefällt mir“

Hallo! Was müsste ich tun, um die Unschärfe zu entfernen und den Text stattdessen als Hyperlink einzurichten, damit er auf eine Spendenaktion außerhalb der Website verweist?

1 „Gefällt mir“

Das geht leider nur mit CSS nicht; Sie müssen Ihren eigenen Code hinzufügen, um das zu bewerkstelligen.

2 „Gefällt mir“

Entferne einfach die Zeilen filter: blur(10px); aus dem CSS.

5 „Gefällt mir“

@bartv Ich habe den ersten Beitrag zum Wiki gemacht. Bitte aktualisiere ihn gerne nach Bedarf! :folded_hands:

10 „Gefällt mir“