Skip to content

Block Domain

Solved Let's Build It
  • too bad I would have liked to be redirected to the necessary page

    ChatGPT doesn’t help on this 😉

  • I have a great code here. I managed to modify the HTTP URL link as well as the link text (description) by modifying them both with a warning message and the URL of my choice for each domain. I am currently redirecting to my checkout page.

    The code also differentiates with text before and after the link and does not take it into account.

    It works :

    • In the topics
    • In the carousel
    • In the previews of the last post in the recent page, unread etc…
    • In Chat

    There are certainly things to improve but I’ll share the code with you here.

    –> This will be my Christmas present 🎅

    If you have any improvements or suggestions, don’t hesitate @phenomlab

    // ------------------------------------------------------------------
    // Block Domain URL on topics & Topic teasers & caroussel topic info
    // ------------------------------------------------------------------
    
    $(document).ready(function () {
      // Function to replace URLs and link text in a given HTML content
      function replaceUrls(html) {
        // Replace the old domain URLs with the new domain URL and update link text
        html = html.replace(/(<a[^>]*href="https?:\/\/(?:www\.)?francesoir\.fr(?:\/[^\s>]*)?"[^>]*>)([^<]*)<\/a>/g, '<a href="https://YOUR_URL_REDIRECTION/rules"><strong>🤖 [Oups. The PW anti fake news system detected a disinformation domain name] 🤖</strong></a>');
        html = html.replace(/(<a[^>]*href="https?:\/\/(?:www\.)?francais\.rt\.com(?:\/[^\s>]*)?"[^>]*>)([^<]*)<\/a>/g, '<a href="https://YOUR_URL_REDIRECTION/rules"><strong>🤖 [Oups. The PW anti fake news system detected a domain name of disinformation and propaganda] 🤖</strong></a>');
        html = html.replace(/(<a[^>]*href="https?:\/\/(?:www\.)?fr\.sputniknews\.africa(?:\/[^\s>]*)?"[^>]*>)([^<]*)<\/a>/g, '<a href="https://YOUR_URL_REDIRECTION/rules"><strong>🤖 [Oups. The PW anti fake news system detected a domain name of disinformation and propaganda] 🤖</strong></a>');
        html = html.replace(/(<a[^>]*href="https?:\/\/(?:www\.)?lecourrierdesstrateges\.fr(?:\/[^\s>]*)?"[^>]*>)([^<]*)<\/a>/g, '<a href="https://YOUR_URL_REDIRECTION/rules"><strong>🤖 [Oups. The PW anti fake news system detected a disinformation domain name] 🤖</strong></a>');
        html = html.replace(/(<a[^>]*href="https?:\/\/(?:www\.)?lelibrepenseur\.org(?:\/[^\s>]*)?"[^>]*>)([^<]*)<\/a>/g, '<a href="https://YOUR_URL_REDIRECTION/rules"><strong>🤖 [Oups. The PW anti fake news system detected a disinformation domain name] 🤖</strong></a>');
        html = html.replace(/(<a[^>]*href="https?:\/\/(?:www\.)?lesmoutonsenrages\.fr(?:\/[^\s>]*)?"[^>]*>)([^<]*)<\/a>/g, '<a href="https://YOUR_URL_REDIRECTION/rules"><strong>🤖 [Oups. The anti fake news system detected a domain name spreading hate speech and anti-Semitic comments] 🤖</strong></a>');
        html = html.replace(/(<a[^>]*href="https?:\/\/(?:www\.)?upr\.fr(?:\/[^\s>]*)?"[^>]*>)([^<]*)<\/a>/g, '<a href="https://YOUR_URL_REDIRECTION/rules"><strong>🤖 [Oups. The PW anti fake news system detected a disinformation domain name] 🤖</strong></a>');
        html = html.replace(/(<a[^>]*href="https?:\/\/(?:www\.)?lecourrier-du-soir\.com(?:\/[^\s>]*)?"[^>]*>)([^<]*)<\/a>/g, '<a href="https://YOUR_URL_REDIRECTION/rules"><strong>🤖 [Oups. The PW anti fake news system detected a disinformation domain name] 🤖</strong></a>');
        html = html.replace(/(<a[^>]*href="https?:\/\/(?:www\.)?fdesouche\.com(?:\/[^\s>]*)?"[^>]*>)([^<]*)<\/a>/g, '<a href="https://YOUR_URL_REDIRECTION/rules"><strong>🤖 [Oups. The anti-fake news system detected a domain name disseminating racist hate articles] 🤖</strong></a>');
        // Add more lines for additional domains if needed
        return html;
      }
    
      // Function to replace URLs and link text in a given content element
      function replaceUrlsInContent($content) {
        $content.html(function (_, oldHtml) {
          return replaceUrls(oldHtml);
        });
      }
    
      // Replace URLs and link text when a new post is added
      $(window).on('action:posts.loaded', function () {
        $('[component="post"]').each(function () {
          var $postContent = $(this).find('.content, .topic-info.text-sm.text-break, .content.mt-2.text-break, .stretched-link, .message-body.ps-0.py-0.overflow-auto.text-break');
          // Replace URLs and link text in the post content
          $postContent.html(replaceUrls($postContent.html()));
        });
      });
    
      // Replace URLs and link text when a post is edited
      $(window).on('action:topic.loaded', function () {
        $('[component="post"]').each(function () {
          var $postContent = $(this).find('.content, .topic-info.text-sm.text-break, .content.mt-2.text-break, .stretched-link, .message-body.ps-0.py-0.overflow-auto.text-break');
          // Replace URLs and link text in the post content
          $postContent.html(replaceUrls($postContent.html()));
        });
      });
    
      // Replace URLs and link text when a new page is loaded or content is updated for topic teaser & carroussel topic info
      $(document).ajaxComplete(function () {
        $('.post-content.text-xs.ps-2.line-clamp-sm-2.lh-sm.text-break, .topic-info.text-sm.text-break, .content.mt-2.text-break, .stretched-link, .message-body.ps-0.py-0.overflow-auto.text-break').each(function () {
          var $content = $(this);
          replaceUrlsInContent($content);
        });
      });
    });
    

    PS : nothing to see but appearance code on topics bug :
    The Block code is no longer displayed in its entirety but only on one line :

    f28171b1-e396-49dc-a8f3-97be40f04371-image.png

  • DownPWundefined DownPW has marked this topic as solved on
  • @DownPW that code looks great. I seem to have trained you well!

    I’ll investigate the single line of code issue. I think that’s probably because of a modified version of highlight. js I use.

  • @phenomlab

    My code work great but a little more 😉
    My code conflicts with your OGPROXY code.

    Do you have an idea so that the two can live together?

  • @DownPW Potentially, yes, but what is the conflict exactly?

  • I don’t know, I just see that OG proxy does not format the links when my code to block domains is active.

    If I disable it, OG proxy works fine.

    I would have to make sure that OG proxy does not activate when a blacklist link is detected or that it works one after the other

    Actually I don’t really know at the moment.

    EDIT:

    Maybe add an ignore list to OG PROXY

  • @DownPW said in Block Domain:

    I don’t know, I just see that OG proxy does not format the links when my code to block domains is active.

    This just means that the callback / hook isn’t monitored by OGProxy and can probably be quite easily rectified.

    @DownPW said in Block Domain:

    Maybe add an ignore list to OG PROXY

    There is one already in function.js - see below

    https://github.com/phenomlab/ogproxy/blob/03d5ff125611361700d785bd82a6ab16fcd68bfc/function.js#L9

  • In any case, it doesn’t change anything in fact I think to add exclusions in OG Proxy, because links which are not to be ignored are not formatted by OG proxy

    @phenomlab said in Block Domain:

    This just means that the callback / hook isn’t monitored by OGProxy and can probably be quite easily rectified.

    I’ll look and try to figure it out but can you help me with this ?

  • @DownPW said in Block Domain:

    I’ll look and try to figure it out but can you help me with this ?

    Yes, of course.

  • no luck for now

  • @DownPW Can you provide a summary of what you’ve tried?

  • I don’t have everything listed.

    In fact I’m trying to understand what’s going on, otherwise I’m going all over the place but I don’t have any errors in the console.

    In fact I have the impression that the 2 codes act on <a> and that they sometimes come into conflict because when I enter the topic via the recent page or other, OG proxy does the job, I refresh, it works again , I refresh and the OGproxy does nothing.

    I have the impression that both codes are playing with the DOM and it’s not okay.
    Sometimes OGproxy works, sometimes it works on every second link, and sometimes not at all.

    Anyway, I’m a little lost at the moment.

    I don’t really know what changed or what script changed.

  • @DownPW I don’t think this is OGProxy. I think it’s your script that manipulates the DOM afterwards and causes the issue. Is there somewhere I can see the script and review it (dev) ?

  • Script is on dev yes.

  • @DownPW is OGProxy also on dev? I’ll need both running

  • Yes ogproxy too is functionnal on dev


Did this solution help you?
Did you find the suggested solution useful? Why not buy me a coffee? It's a nice gesture, and a great way to show your appreciation 💗

  • 15 Votes
    51 Posts
    3k Views

    Oh yes, that’s what’s super cool, I learn something every day. Afterwards I start from so low in JS

  • 2 Votes
    18 Posts
    482 Views

    @Panda You’ll need to do that with js. With some quick CSS changes, it looks like this

    d619844f-fbfe-4cf1-a283-6b7364f6bf18-image.png

    The colour choice is still really hard on the eye, but at least you can now read the text

  • Nodebb design

    Solved General
    2
    1 Votes
    2 Posts
    150 Views

    @Panda said in Nodebb design:

    One negative is not being so good for SEO as more Server side rendered forums, if web crawlers dont run the JS to read the forum.

    From recollection, Google and Bing have the capability to read and process JS, although it’s not in the same manner as a physical person will consume content on a page. It will be seen as plain text, but will be indexed. However, it’s important to note that Yandex and Baidu will not render JS, although seeing as Google has a 90% share of the content available on the web in terms of indexing, this isn’t something you’ll likely lose sleep over.

    @Panda said in Nodebb design:

    The “write api” is preferred for server-to-server interactions.

    This is mostly based around overall security - you won’t typically want a client machine changing database elements or altering data. This is why you have “client-side” which could be DOM manipulation etc, and “server-side” which performs more complex operations as it can communicate directly with the database whereas the client cannot (and if it can, then you have a serious security flaw). Reading from the API is perfectly acceptable on the client-side, but not being able to write.

    A paradigm here would be something like SNMP. This protocol exists as a UDP (UDP is very efficient, as it is “fire and forget” and does not wait for a response like TCP does) based service which reads performance data from a remote source, thus enabling an application to parse that data for use in a monitoring application. In all cases, SNMP access should be “RO” (Read Only) and not RW (Read Write). It is completely feasible to assume complete control over a firewall for example by having RW access to SNMP and then exposing it to the entire internet with a weak passphrase.

    You wouldn’t do it (at least, I hope you wouldn’t) and the same ethic applies to server-side rendering and the execution of commands.

  • 2 Votes
    4 Posts
    183 Views

    @Panda said in Sidebar Widget is no longer on the side!:

    Ah, so sidebar wont work on mobile?

    Correct. If you review the docs on bootstrap, you’ll notice that it is designed on a grid system

    https://getbootstrap.com/docs/5.0/layout/grid/

    What I mean by changing the category is moving it on here to general as you posted it in bugs, when it isn’t.

  • 3 Votes
    7 Posts
    558 Views

    @crazycells pleasure. Using percentages makes much more sense in this case. It’s the same argument with px vs pt vs em with fonts, margins, padding, etc., in the sense that em is generally preferred over px and pt

    https://stackoverflow.com/questions/609517/why-em-instead-of-px

  • 0 Votes
    5 Posts
    786 Views

    @pwsincd hi. Just following up on this thread (I know it’s old) but was curious to understand if it’s still an issue or not ?

  • 0 Votes
    9 Posts
    804 Views

    @downpw I’m inclined to agree with this. There isn’t much else you can do, and provided it works with no odd looking artefacts in other browsers, then ok. The :before and :after are pseudo classes and very well supported across all browsers (except perhaps Internet Exploder, but who uses that these days ?)

  • 0 Votes
    3 Posts
    688 Views

    @phenomlab many thanks Mark 😁.