Skip to content

Custom badges

Solved Customisation
103 4 25.6k 2
  • @phenomlab thank you very much 🙂 it looks great!

    @phenomlab lol verified badge changed here as well 🙂

    is there an easy CSS code to make it look more like a flower, rather than perfectly round? (just like the Twitter one)

  • @phenomlab lol verified badge changed here as well 🙂

    is there an easy CSS code to make it look more like a flower, rather than perfectly round? (just like the Twitter one)

    @crazycells it’s possible, but would be very complex. Much less hassle to use either a direct image (which probably won’t look very good on scale) or use this SVG from Font Awesome which appears to be free 👍

    https://fontawesomeicons.com/svg/icons/twitter-verified-badge

  • @crazycells it’s possible, but would be very complex. Much less hassle to use either a direct image (which probably won’t look very good on scale) or use this SVG from Font Awesome which appears to be free 👍

    https://fontawesomeicons.com/svg/icons/twitter-verified-badge

    @phenomlab thanks.

  • @crazycells it’s possible, but would be very complex. Much less hassle to use either a direct image (which probably won’t look very good on scale) or use this SVG from Font Awesome which appears to be free 👍

    https://fontawesomeicons.com/svg/icons/twitter-verified-badge

    @phenomlab since both admin and global moderator badges are close to purple/maroon color, you can change one to green (which I believe was the verified badge color)

  • @phenomlab since both admin and global moderator badges are close to purple/maroon color, you can change one to green (which I believe was the verified badge color)

    @crazycells yes, I need to change that here. Was switched out on a whim.

  • @crazycells yes, I need to change that here. Was switched out on a whim.

    @crazycells @DownPW something of a “fresher” approach. Have a look at the below

    5602e864-6de6-4a09-9dd1-eb33b2807774-image.png

    Using the messenger type view I created, it then becomes possible to place the “verified” group according to the style from the same view.

    This does mean some new CSS

    .self-post a[href*="/groups/verified"] .group-label {
        position: absolute !important;
        right: 51px;
        top: 44px;
    }
    .topic-response-post a[href*="/groups/verified"] .group-label {
        position: absolute !important;
        left: 20px;
        top: 44px;
    }
    .topic-response-post i[component="user/status"] {
        position: absolute;
        left: -1px;
    }
    

    And, more importantly, I found a more efficient way of adding classes in the messenger view js. The revised code is below

    // Target those elements already loaded in the DOM
    $(document).ready(function() {
        $(window).on('action:ajaxify.end', function(data) {
            $('li[component="post"]').each(function(i, obj) {
                if (!$(this).hasClass('self-post') || (!$(this).hasClass('self-post'))) {
                    console.log("Adding required classes for messenger type view");
                    $(this).addClass('topic-response-post');
                }
    
            });
        });
    });
    // Target elements dynamically added to the DOM on post load
    $(document).ready(function() {
        $(window).on('action:ajaxify.loaded', function(data) {
            $('li[component="post"]').each(function(i, obj) {
                if (!$(this).hasClass('self-post') || (!$(this).hasClass('self-post'))) {
                    console.log("Adding required classes for messenger type view");
                    $(this).addClass('topic-response-post');
                }
    
            });
        });
    });
    
  • @crazycells @DownPW something of a “fresher” approach. Have a look at the below

    5602e864-6de6-4a09-9dd1-eb33b2807774-image.png

    Using the messenger type view I created, it then becomes possible to place the “verified” group according to the style from the same view.

    This does mean some new CSS

    .self-post a[href*="/groups/verified"] .group-label {
        position: absolute !important;
        right: 51px;
        top: 44px;
    }
    .topic-response-post a[href*="/groups/verified"] .group-label {
        position: absolute !important;
        left: 20px;
        top: 44px;
    }
    .topic-response-post i[component="user/status"] {
        position: absolute;
        left: -1px;
    }
    

    And, more importantly, I found a more efficient way of adding classes in the messenger view js. The revised code is below

    // Target those elements already loaded in the DOM
    $(document).ready(function() {
        $(window).on('action:ajaxify.end', function(data) {
            $('li[component="post"]').each(function(i, obj) {
                if (!$(this).hasClass('self-post') || (!$(this).hasClass('self-post'))) {
                    console.log("Adding required classes for messenger type view");
                    $(this).addClass('topic-response-post');
                }
    
            });
        });
    });
    // Target elements dynamically added to the DOM on post load
    $(document).ready(function() {
        $(window).on('action:ajaxify.loaded', function(data) {
            $('li[component="post"]').each(function(i, obj) {
                if (!$(this).hasClass('self-post') || (!$(this).hasClass('self-post'))) {
                    console.log("Adding required classes for messenger type view");
                    $(this).addClass('topic-response-post');
                }
    
            });
        });
    });
    

    @phenomlab this looks cooler than usual badges 👍 thanks for the codes…

    but, I believe it should be located slightly lower since there is already a status circle that is taking some space from the avatar, and now this is taking more 🙂 it feels like you are conversing with someone that has sunglasses, a scarf, and a hat 😄 I prefer to see their faces more clearly (well, in this case avatar 😄 )

  • @phenomlab this looks cooler than usual badges 👍 thanks for the codes…

    but, I believe it should be located slightly lower since there is already a status circle that is taking some space from the avatar, and now this is taking more 🙂 it feels like you are conversing with someone that has sunglasses, a scarf, and a hat 😄 I prefer to see their faces more clearly (well, in this case avatar 😄 )

    @crazycells ha! Yes, I see your point. I guess it’s down to taste, and thanks to the absolute positioning, you can easily customise to suit taste.

    It’s also worth noting that on here at least, this will only trigger on larger monitors - it would look awful on mobile devices in my view.

  • @crazycells ha! Yes, I see your point. I guess it’s down to taste, and thanks to the absolute positioning, you can easily customise to suit taste.

    It’s also worth noting that on here at least, this will only trigger on larger monitors - it would look awful on mobile devices in my view.

    @phenomlab yes 😄 I agree with you.

    How do you achieve the restriction? I cannot see any screen resolution definition…

  • @crazycells ha! Yes, I see your point. I guess it’s down to taste, and thanks to the absolute positioning, you can easily customise to suit taste.

    It’s also worth noting that on here at least, this will only trigger on larger monitors - it would look awful on mobile devices in my view.

    @phenomlab oh, I think I got it. that is a general property for all group badges?

    I do not see any of them on mobile…

  • @phenomlab oh, I think I got it. that is a general property for all group badges?

    I do not see any of them on mobile…

    @crazycells yes, the badges by default do not display on less than 1200px I believe (I might be wrong)

  • @crazycells yes, the badges by default do not display on less than 1200px I believe (I might be wrong)

    hi @phenomlab , in this topic where the solution is chosen:

    https://sudonix.org/topic/388/the-best-css-to-customize-our-logo

    verified badge and online status are overlapping. I guess it is not intended?

  • hi @phenomlab , in this topic where the solution is chosen:

    https://sudonix.org/topic/388/the-best-css-to-customize-our-logo

    verified badge and online status are overlapping. I guess it is not intended?

    @crazycells hmm, I’m not seeing that. Can you provide a screenshot?

  • @crazycells hmm, I’m not seeing that. Can you provide a screenshot?

    @phenomlab sure, here is how I see it:

    Screen Shot 2022-11-21 at 15.49.47.png

  • @phenomlab sure, here is how I see it:

    Screen Shot 2022-11-21 at 15.49.47.png

    @crazycells ah, yes, I know why. There’s a class I haven’t committed.

    Thanks. I’ll sort that out tomorrow.

  • @crazycells Let’s try this

    In /forum/admin/manage/groups/verified, remove the highlighted section

    1c9e1406-d641-4e6c-8a03-e452c9462768-image.png

    We are then left with no text, but a clearer looking icon

    149c24c4-c95c-4a6e-8dc4-52340e4d0bed-image.png

    Now remove the previous CSS blocks I provided here

    Add replacement CSS

    .post-header a[href*="/forum/groups/verified"] {
        margin-right: 3px;
        margin-top: 1px;
        border-radius: 50%;
        line-height: 20px;
        display: inline-block;
        vertical-align: middle;
        text-align: center;
        overflow: hidden;
    }
    small.label.group-label.inline-block i {
        margin-top: 1px;
        margin-left: 0px;
        vertical-align: middle;
        justify-content: center;
        display: flex;
    }
    .post-header a[href*="/forum/groups/verified"] .group-label {
        min-width: 20px;
        display: flex;
        justify-content: center;
    }
    .group-label {
        vertical-align: -6px;
    }
    
    

    You should land up with something like this

    16a50d49-f765-46c9-a480-344a592baf13-image.png

    As you can see, this forces the stars out of alignment, but I don’t think this is too much of a sacrifice, and could be remediated with additional targeted CSS if need be.

    Essentially, because NodeBB doesn’t provide an id field (which would be a lot easier), we have to use wildcard CSS such as .post-header a[href*="/forum/groups/verified"] but make it targeted in the sense that it will only fire if it is part of the post stream, hence .post-header at the beginning.

    We then use .post-header a[href*="/forum/groups/verified"] .group-label to target the actual label (but only when we have a wildcard match in the CSS) meaning we can set a minimum width so that the circle doesn’t look quashed (we need to validate this on Firefox though as additional CSS might be required due to how the webkit engine will render this in contrast to mozilla).

    Finally, we use .group-label to force alignment in terms of height to prevent it wandering out of the inline-block.

    This is already active on your forum, so nothing for you to do but (hopefully) admire 🙂

    Let me know.

    @phenomlab said in Custom badges:

    @crazycells @DownPW something of a “fresher” approach. Have a look at the below

    5602e864-6de6-4a09-9dd1-eb33b2807774-image.png

    Using the messenger type view I created, it then becomes possible to place the “verified” group according to the style from the same view.

    This does mean some new CSS

    .self-post a[href*="/groups/verified"] .group-label {
        position: absolute !important;
        right: 51px;
        top: 44px;
    }
    .topic-response-post a[href*="/groups/verified"] .group-label {
        position: absolute !important;
        left: 20px;
        top: 44px;
    }
    .topic-response-post i[component="user/status"] {
        position: absolute;
        left: -1px;
    }
    

    And, more importantly, I found a more efficient way of adding classes in the messenger view js. The revised code is below

    // Target those elements already loaded in the DOM
    $(document).ready(function() {
        $(window).on('action:ajaxify.end', function(data) {
            $('li[component="post"]').each(function(i, obj) {
                if (!$(this).hasClass('self-post') || (!$(this).hasClass('self-post'))) {
                    console.log("Adding required classes for messenger type view");
                    $(this).addClass('topic-response-post');
                }
    
            });
        });
    });
    // Target elements dynamically added to the DOM on post load
    $(document).ready(function() {
        $(window).on('action:ajaxify.loaded', function(data) {
            $('li[component="post"]').each(function(i, obj) {
                if (!$(this).hasClass('self-post') || (!$(this).hasClass('self-post'))) {
                    console.log("Adding required classes for messenger type view");
                    $(this).addClass('topic-response-post');
                }
    
            });
        });
    });
    

    My style looks like it with those codes. There isjust seems some blue color of my checked icon 🙂

    ab44fb86-a985-4bbb-b6ab-284c80831859-image.png

  • cagatayundefined cagatay referenced this topic on
  • @phenomlab said in Custom badges:

    @crazycells @DownPW something of a “fresher” approach. Have a look at the below

    5602e864-6de6-4a09-9dd1-eb33b2807774-image.png

    Using the messenger type view I created, it then becomes possible to place the “verified” group according to the style from the same view.

    This does mean some new CSS

    .self-post a[href*="/groups/verified"] .group-label {
        position: absolute !important;
        right: 51px;
        top: 44px;
    }
    .topic-response-post a[href*="/groups/verified"] .group-label {
        position: absolute !important;
        left: 20px;
        top: 44px;
    }
    .topic-response-post i[component="user/status"] {
        position: absolute;
        left: -1px;
    }
    

    And, more importantly, I found a more efficient way of adding classes in the messenger view js. The revised code is below

    // Target those elements already loaded in the DOM
    $(document).ready(function() {
        $(window).on('action:ajaxify.end', function(data) {
            $('li[component="post"]').each(function(i, obj) {
                if (!$(this).hasClass('self-post') || (!$(this).hasClass('self-post'))) {
                    console.log("Adding required classes for messenger type view");
                    $(this).addClass('topic-response-post');
                }
    
            });
        });
    });
    // Target elements dynamically added to the DOM on post load
    $(document).ready(function() {
        $(window).on('action:ajaxify.loaded', function(data) {
            $('li[component="post"]').each(function(i, obj) {
                if (!$(this).hasClass('self-post') || (!$(this).hasClass('self-post'))) {
                    console.log("Adding required classes for messenger type view");
                    $(this).addClass('topic-response-post');
                }
    
            });
        });
    });
    

    My style looks like it with those codes. There isjust seems some blue color of my checked icon 🙂

    ab44fb86-a985-4bbb-b6ab-284c80831859-image.png

    @cagatay you should remove those two CSS blocks your referenced as that’s what’s causing the odd looking blue circles over the avatar.

  • @cagatay you should remove those two CSS blocks your referenced as that’s what’s causing the odd looking blue circles over the avatar.

    @phenomlab which one i should remove?

  • @phenomlab which one i should remove?

    @cagatay These

    .self-post a[href*="/groups/verified"] .group-label {
        position: absolute !important;
        right: 51px;
        top: 44px;
    }
    .topic-response-post a[href*="/groups/verified"] .group-label {
        position: absolute !important;
        left: 20px;
        top: 44px;
    }
    .topic-response-post i[component="user/status"] {
        position: absolute;
        left: -1px;
    }
    
  • @cagatay These

    .self-post a[href*="/groups/verified"] .group-label {
        position: absolute !important;
        right: 51px;
        top: 44px;
    }
    .topic-response-post a[href*="/groups/verified"] .group-label {
        position: absolute !important;
        left: 20px;
        top: 44px;
    }
    .topic-response-post i[component="user/status"] {
        position: absolute;
        left: -1px;
    }
    

    @phenomlab its not work, nothing changed when i deleted those css.


Did this solution help you?
Did you find the suggested solution useful? Support 💗 Sudonix with a coffee
If your organisation needs deeper expertise around infrastructure, security, or technology leadership, learn more about Phenomlab Ltd. Many of the deeper technical guides behind Sudonix are published there.

Related Topics
  • Custom Page - nodebb

    Solved Customisation custom-pages nodebb
    13
    2
    5 Votes
    13 Posts
    135 Views
    I’m happy to see this
  • nodebb-plugin-custom-pages

    Solved Customisation plugin custom-pages
    5
    2
    3 Votes
    5 Posts
    3k Views
    @DownPW it’s possible, yes, but you may inadvertently end up targeting other elements using the same class which of course isn’t desired. Can you provide a link in DM for me to review?
  • Following the API docs but its not clear ...

    Solved Customisation api nodebb
    8
    2 Votes
    8 Posts
    2k Views
    @Panda you’d be surprised. If you consider that you’d need to use the API to be able to populate a WordPress widget for example (which in turn would of course be PHP), taking this route is still immensely popular.
  • NodeBB: Favicon upload issue

    Solved Configure nodebb favicon
    12
    1
    3 Votes
    12 Posts
    2k Views
    @phenomlab I am on a Mac, so I used the “Option + Command + I”, and then performed the steps. It loaded my favicon! I checked on Firefox which I haven’t used before, and it showed my favicon also! That’s fantastic and thank you for the help!
  • Top Ranked Forums

    Chitchat nodebb top ranked
    9
    1
    3 Votes
    9 Posts
    2k Views
    The real issue here is that most people consider forums to be “dead” in the sense that nobody uses them anymore, and social media groups have taken their place. Their once dominant stance in the 90’s and early 00’s will never be experienced again, but having said that, there are a number of forums that did in fact survive the social media onslaught, and still enjoy a large user base. Forums tend to be niche. One that immediately sticks out is Reddit - despite looking like it was designed in the 80s, it still has an enormous user base. Another is Stack Overflow, which needs no introduction. The key to any forum is the content it offers, and the more people whom contribute in terms of posting , the more popular and widely respected it becomes as a reliable source of information. Forums are still intensely popular with gamers, alongside those that offer tips on hacking etc.
  • How to fix header side as boxed

    Solved Customisation header boxed sudonix nodebb
    10
    1
    6 Votes
    10 Posts
    2k Views
    @phenomlab yes it caused a problem for mobile users. thank you for helping …
  • [NODEBB] Help for my custom CSS

    Solved Customisation nodebb css bugfix
    237
    49 Votes
    237 Posts
    80k Views
    @baris said: You should change your selectors so it doesn’t look at the entire document. You probably only want to apply fancybox to stuff inside the #content element which is what changes when the user navigates around the page. So use $('#content a').... for your selectors then the forum logo in the header won’t be selected. I modified the JS Fancybox code now and this code and it seem better // --------------------------------------------- // Fancybox Media Reader (Without Website Logo) // --------------------------------------------- if (top.location.pathname !== '/login') { $(window).on('action:posts.loaded', function(data) { console.log("Polling DOM for lazyLoaded images to apply Fancybox"); $(document).ready(function() { $('#content a').not('.forum-logo').not(".avatar").not(".emoji").not(".bmac-noanimate").each(function() { $('#content a[href*=".jpg"], #content a[href*=".jpeg"], #content a[href*=".png"], #content a[href*=".gif"], #content a[href*=".webp"]').addClass("noanimate"); }); }); }); } if (top.location.pathname !== '/login') { $(document).ready(function() { $(window).on('action:ajaxify.end', function(data) { $('#content a').not('.logo').not(".avatar").not(".emoji").not(".bmac-noanimate").each(function() { $('#content a[href*=".jpg"], #content a[href*=".jpeg"], #content a[href*=".png"], #content a[href*=".gif"], #content a[href*=".webp"]').addClass("noanimate"); data.preventDefault() // Strip out the images contained inside blockquotes as this looks nasty :) $('#content blockquote img').remove(); }); Fancybox.bind( '#content a[href*=".jpg"], #content a[href*=".jpeg"], #content a[href*=".png"], #content a[href*=".gif"], #content a[href*=".webp"]', { groupAll: true, } ); }); }); } // Chat fancybox - fires when chat module loaded and AJAX calls new chat $(document).ready(function() { $(window).on('action:chat.loaded', function(data) { // >>> Se limiter au contenu principal uniquement <<< $('#content img').not('.forum-logo').not(".avatar").not(".emoji").not(".bmac-noanimate").each(function() { var newHref = $(this).attr("src"); $(this).wrap("<a class='fancybox' href='" + newHref + "'/>"); $('#content a[href*=".jpg"], #content a[href*=".jpeg"], #content a[href*=".png"], #content a[href*=".gif"], #content a[href*=".webp"]').addClass("noanimate"); data.preventDefault(); // Strip out the images contained inside blockquotes as this looks nasty :) $('#content blockquote img').remove(); }); Fancybox.bind( '#content a[href*=".jpg"], #content a[href*=".jpeg"], #content a[href*=".png"], #content a[href*=".gif"], #content a[href*=".webp"]', { groupAll: true, } ); }); }); For the logo, I must use overflow: visible !important; on [component="brand/logo"] /* --- Logo --- */ [component="brand/logo"] { max-height: 50px; width: auto; height: auto; max-width: 100%; display: block; object-fit: contain; object-position: left center; overflow: visible !important; } Better result !!
  • [NodeBB] First post customization

    Solved Customisation nodebb
    5
    4 Votes
    5 Posts
    1k Views
    @phenomlab thanks