Skip to content

[NODEBB] Help for my custom CSS

Solved Customisation
258 5 173.3k 3
  • @DownPW After spending a lot of time on the theme switcher (see referenced post above), I re-wrote some of it as found that there were caching issues with CSS as it always calls the same version number. The new function below resolves that issue.

    I also removed the website prefix, as with relative paths, this is not required 🙂

    // ------------------------------------------
    // Theme Switcher
    // ------------------------------------------
    // On choisit une chaine de caractère aléatoire pour affecter un numéro de version au fichier CSS. 
    // The function below creates a random string which we use for CSS versioning to prevent cache conflicts
    function generateRandomString(length) {
        var text="";
        var possible="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        for (var i=0;
        i < length;
        i++) {
            text+=possible.charAt(Math.floor(Math.random() * possible.length));
        }
        return text;
    }
    
    $(document).ready(function () {
        var string=generateRandomString(10);
        $("#random_string").text(string);
        // This variable gets the theme ID 
        // Cette variable obtient l'ID du thème
        var whichTheme=localStorage.getItem("theme");
        // This variable gets the active theme's actual URL
        //Cette variable obtient l'URL réelle du thème actif
        var activeTheme=localStorage.getItem("activeTheme");
        // This variable appends the dropdown list to the existing panel
        // Cette variable ajoute la liste déroulante au panneau existant
        var panel=$('<li id="switcher" class="dropdown text-center"> \
    <label for="theme-control-list-check" class="dropdown-toggle" data-toggle="dropdown" id="theme_dropdown" title="" role="button" data-original-title="Theme" aria-expanded="false"> \
    <a class="btn-link" title="Theme Switcher" href="#"><i id="ticon" class="fa fa-fw fa-lightbulb-o"></i><span class="visible-xs-inline">Theme Switcher</span></a> \
    </label> \
    <ul id="theme" class="dropdown-menu"> \
    <li><a id="default" href="#" rel="/assets/client.css?v=e02phpkima0">Default</a></li> \
    <li><a id="default dark" href="#" rel="/assets/customcss/default_dark.css">Default Dark</a></li> \
    <li><a id="Light Flat" href="#" rel="/assets/customcss/testflat.css">Light Flat</a></li> \
    <li><a id="Dark Flat" href="#" rel="/assets/customcss/testflat.css">Dark Flat</a></li> \
    <li><a id="Dark Neon Aqua" href="#" rel="/assets/customcss/dark_neon_aqua.css">Dark Neon Aqua</a></li> \
    <li><a id="Dark Neon Blue" href="#" rel="assets/customcss/dark_neon_blue.css">Dark Neon Blue</a></li> \
    <li><a id="Dark Neon Green" href="#" rel="/assets/customcss/dark_neon_green.css">Dark Neon Green</a></li> \
    <li><a id="Dark Neon Solary" href="#" rel="/assets/customcss/dark_neon_solary.css">Dark Neon Solary</a></li> \
    <li><a id="Dark Neon White" href="#" rel="/assets/customcss/dark_neon_white.css"">Dark Neon White</a></li> \
    <li><a id="Eva 00" href="#" rel="/assets/customcss/eva_00.css">Eva.00</a></li> \
    <li><a id="Eva 01" href="#" rel="/assets/customcss/eva_01.css">Eva.01</a></li> \
    <li><a id="Eva 01 Purple Green"href="#" rel="/assets/customcss/eva_01_purple_green.css">Eva.01: Purple-Green</a></li> \
    <li><a id="Eva 02" href="#" rel="/assets/customcss/eva_02.css">Eva.02: Red-Orange</a></li> \
    </ul> \
    </div> ');
        // See if there is an active theme selected in localStorage. If none selected, use the default. If there is a theme in localStorage, use that and apply it
        // Regarde s'il y a un thème actif sélectionné dans "localStorage". Si aucun n'est sélectionné, utilise la valeur par défaut. 
        // S'il y a un thème dans localStorage, on l'utilise et on l'applique.
        if (whichTheme) {
            $("head").append("<link href='" + activeTheme + '?version=' + string + "' type=\"text/css\" rel=\'stylesheet\' />");
        }
        else {
            // No need to include anything here as there's no CSS to add.
            // Pas besoin d'inclure quoi que ce soit ici car il n'y a pas de CSS à ajouter.
        }
        $('ul#logged-in-menu').prepend(panel);
        $('ul#logged-out-menu').prepend(panel);
        if (utils.findBootstrapEnvironment()==='xs') {
            $('#menu').prepend(panel);
        }
        $(document).ready(function () {
            // Listen to the NAV dropdown for any changes
            // Écoute la liste déroulante NAV pour tout changement de thème
            $("#theme li a").on("click change", function () {
                // If we detect a change, append the selected CSS file into the DOM 
                // Si un changement est détecté, on ajoute le fichier CSS sélectionné dans le DOM (Document Object Model)
                var thishref=$(this).attr('rel');
                $("link[rel=stylesheet]").attr('href', thishref + "?version=" + string + "");
                //location.reload();
                //$("head").append("<link href='" + $(this).attr("rel") + $(this).attr("id") + " type=\'text/css\' rel=\'stylesheet\' />");
                location.reload();
                // This variable stores the selected theme ID
                // Cette variable stocke l'ID du thème sélectionné
                var selected=$(this).attr("id");
                // This variable stores the selected theme link 
                // Cette variable stocke le lien du thème sélectionné
                var theTheme=$(this).attr("rel");
                // This variable updates the selected theme ID
                // See if "default" has been selected. If it has, then...
                // Cette variable met à jour l'ID du thème sélectionné
                // Regarde si "default" a été sélectionné. Si c'est le cas, alors...
                if (selected==='default') {
                    localStorage.setItem("theme", "");
                    // This variable will strip the current appeneded theme ID
                    // Cette variable supprimera l'ID du thème actuellement ajouté
                    localStorage.setItem("activeTheme", "");
                    // This variable will strip the current appeneded theme URL (HREF)
                    // Finally, we have to reload the page to effect the changes
                    // Cette variable supprimera l'URL actuelle du thème ajouté (HREF)
                    // Enfin, on recharge la page pour effectuer les modifications
                    location.reload();
                }
                // If any other theme is selected, carry on as normnal, and update localStorage
                // Si un autre thème est sélectionné, continuez normalement et mettez à jour localStorage
                else {
                    localStorage.setItem("theme", selected);
                    // This variable updates the actual href of the CSS file
                    // Cette variable met à jour le href réel du fichier CSS
                    localStorage.setItem("activeTheme", theTheme);
                    //window.location.href = window.location.href
                }
                // We use return false to prevent the browser from reloading or following any HREF links
                // On utilise la fonction "return false" pour empêcher le navigateur de recharger ou de suivre les liens HREF
                //return false;
            }
            );
        }
        );
    }
    
    );
    // When hovering over the #switcher element, target the i class and add 'themeoff'
    // Lorsque du  survol de l'élément #switcher, on cible la classe CSS "i" et on ajoute le CSS "themeoff"
    $(document).on('mouseenter', '#switcher', function() {
        $('#switcher i').addClass("themeoff");
    }
    
    );
    // When leaving the however state, target the i class and remove 'themeoff'
    // Lorsque l'on quitte l'état, on cible la classe CSS "i" et on supprime le CSS "themeoff"
    $(document).on('mouseleave', '#switcher', function() {
        $('#switcher i').removeClass("themeoff");
    }
    
    );
    
    wrote on last edited by elhana fine
    #77

    Hi friend, the code looks great.
    Can I post it on my site as well?
    And how can one know the path of subject assessments?
    I’m talking about this code: https://sudonix.com/post/1809

  • Hi friend, the code looks great.
    Can I post it on my site as well?
    And how can one know the path of subject assessments?
    I’m talking about this code: https://sudonix.com/post/1809

    wrote on last edited by
    #78

    @elhana-fine feel free. It’s posted here so that others can also make use of it.

  • wrote on last edited by
    #79

    @elhana-fine @phenomlab

    We have create this topic for reference.

    –> You will find all stuff to deploy it on your server.

    ENJOY

  • wrote on last edited by DownPW
    #80

    hi @phenomlab

    I use .category-item:first-of-type css properties for add a border-top on my principal pages like recent, unread etc…

    But this properties add a border too on topic header categories name.

    It’s possible to disable it just on topic (topic.header) ?

    83184b85-6629-4b93-8ef3-2bfb9b6d5631-image.png

  • hi @phenomlab

    I use .category-item:first-of-type css properties for add a border-top on my principal pages like recent, unread etc…

    But this properties add a border too on topic header categories name.

    It’s possible to disable it just on topic (topic.header) ?

    83184b85-6629-4b93-8ef3-2bfb9b6d5631-image.png

    wrote on last edited by
    #81

    @DownPW possibly with :not in the css class

    https://www.w3schools.com/cssref/sel_not.asp

  • @DownPW possibly with :not in the css class

    https://www.w3schools.com/cssref/sel_not.asp

    wrote on last edited by DownPW
    #82

    @phenomlab

    I think I understand but I don’t find the good CSS class

    here the code for recent page for example :

    .category-item:first-of-type {
    	border-top: 1px solid #0a769978 !important;
        border-top-left-radius: 4px !important;
        border-top-right-radius: 4px !important;
    }
    

    and I will test this for disable border-top on topic page but don’t work:

    .category-item:first-of-type:not(.category-item .inline-block){
    	border-top: 0px solid #0a769978 !important;
    }
    

    here the html code :

    72ef18bb-21a0-4e8b-8890-9707cf1a51ca-image.png

  • @phenomlab

    I think I understand but I don’t find the good CSS class

    here the code for recent page for example :

    .category-item:first-of-type {
    	border-top: 1px solid #0a769978 !important;
        border-top-left-radius: 4px !important;
        border-top-right-radius: 4px !important;
    }
    

    and I will test this for disable border-top on topic page but don’t work:

    .category-item:first-of-type:not(.category-item .inline-block){
    	border-top: 0px solid #0a769978 !important;
    }
    

    here the html code :

    72ef18bb-21a0-4e8b-8890-9707cf1a51ca-image.png

    wrote on last edited by
    #83

    @DownPW sorry for late reply. Can you provide me with a url where this issue exists ? PM is fine of course if you don’t want to publish directly here.

  • @phenomlab

    I think I understand but I don’t find the good CSS class

    here the code for recent page for example :

    .category-item:first-of-type {
    	border-top: 1px solid #0a769978 !important;
        border-top-left-radius: 4px !important;
        border-top-right-radius: 4px !important;
    }
    

    and I will test this for disable border-top on topic page but don’t work:

    .category-item:first-of-type:not(.category-item .inline-block){
    	border-top: 0px solid #0a769978 !important;
    }
    

    here the html code :

    72ef18bb-21a0-4e8b-8890-9707cf1a51ca-image.png

    wrote on last edited by
    #84

    @DownPW A couple of things here. You are using the !important argument twice - one will override the other, meaning they can’t both be set like that - typically, the last marked so will be preferred. Would this not work better ?

    .category-item.inline-block {
        border-top: none !important;
    }
    
    .category-item:first-of-type {
        border-top: 1px solid #0a769978;
        border-top-left-radius: 4px;
        border-top-right-radius: 4px;
    }
    
  • wrote on last edited by
    #85

    Thanks Mark

    I will test that tomorrow and I will tell you if is good or not !

    – Other bug i have to resolve my friend :

    • When I have plenty of tag on Post, have this :

    How to add a top space beetween the tag for a better lisibility ?

    Thanks in advance @phenomlab

  • Thanks Mark

    I will test that tomorrow and I will tell you if is good or not !

    – Other bug i have to resolve my friend :

    • When I have plenty of tag on Post, have this :

    How to add a top space beetween the tag for a better lisibility ?

    Thanks in advance @phenomlab

    wrote on last edited by
    #86

    @DownPW said in [NODEBB] Help for my custom CSS:

    – Other bug i have to resolve my friend :

    When I have plenty of tag on Post, have this :

    How to add a top space beetween the tag for a better lisibility ?
    Thanks in advance @phenomlab

    an idea for that @phenomlab ?

  • @DownPW said in [NODEBB] Help for my custom CSS:

    – Other bug i have to resolve my friend :

    When I have plenty of tag on Post, have this :

    How to add a top space beetween the tag for a better lisibility ?
    Thanks in advance @phenomlab

    an idea for that @phenomlab ?

    wrote on last edited by
    #87

    @DownPW I’ll check and get back to you.

  • @DownPW said in [NODEBB] Help for my custom CSS:

    – Other bug i have to resolve my friend :

    When I have plenty of tag on Post, have this :

    How to add a top space beetween the tag for a better lisibility ?
    Thanks in advance @phenomlab

    an idea for that @phenomlab ?

    wrote on last edited by
    #88

    @DownPW Try this

    .tag-list {
        display: inline-block;
        margin-top: 5px;
        line-height: 1.7;
    }
    

    Because you are using inline-block to float the elements on the same line, you cannot use margins to control the space. In this case, line-height will provide what you are looking for.

  • wrote on last edited by
    #89

    @phenomlab

    great

    line-height: 1.7;

    is very good 😉

  • wrote on last edited by
    #90

    Hello @phenomlab

    I have a odd littlebug only on Smartphone chrome based browsers (chrome, vivaldi, brave) only (it’s ok on firefox mobile)

    the right border of categories /topic is not visible

    Here a screenshot of the problem on chrome based browsers:

    11307bec-32cd-4855-be32-f7e98edcebc7-image.png

    And a good result on firefox mobile (it’s OK) :

    464d09c5-5531-458a-b6be-0444c66d44b0-image.png

    odd 😲

  • Hello @phenomlab

    I have a odd littlebug only on Smartphone chrome based browsers (chrome, vivaldi, brave) only (it’s ok on firefox mobile)

    the right border of categories /topic is not visible

    Here a screenshot of the problem on chrome based browsers:

    11307bec-32cd-4855-be32-f7e98edcebc7-image.png

    And a good result on firefox mobile (it’s OK) :

    464d09c5-5531-458a-b6be-0444c66d44b0-image.png

    odd 😲

    wrote on last edited by
    #91

    @DownPW odd indeed. Can you send me the CSS you are using for this ?

  • @DownPW odd indeed. Can you send me the CSS you are using for this ?

    wrote on last edited by
    #92

    @phenomlab

    .categories > li, .category > ul > li {
        border: 1px solid silver;
        border-radius: 4px;
        margin-top: 5px;
        background: black;
        opacity: 0.9;
    }
    
  • @phenomlab

    .categories > li, .category > ul > li {
        border: 1px solid silver;
        border-radius: 4px;
        margin-top: 5px;
        background: black;
        opacity: 0.9;
    }
    
    wrote on last edited by
    #93

    @DownPW change the silver for a hex value.

  • @DownPW change the silver for a hex value.

    wrote on last edited by
    #94

    @phenomlab Doesn’t work

  • @phenomlab Doesn’t work

    wrote on last edited by
    #95

    @DownPW can you also change background from black to #000000

  • wrote on last edited by phenomlab
    #96

    yes I have test too…

    I have test too to disable all custom CSS on nodebb acp and delete all css code on file css theme with just
    .categories > li, .category > ul > li {
    active and it’s the same…

    delete cache too and logout/login


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
  • NodeBB: updating Admin details not working

    Solved Configure nodebb admin
    17
    3 Votes
    17 Posts
    5k Views
    phenomlab
    @mventures Ok. No issues
  • The best css to customize our logo?

    Solved Customisation css
    2
    1 Votes
    2 Posts
    3k Views
    phenomlab
    @Sala This should look better .sidenav .navbar-brand { padding-top: 0.5rem; padding-bottom: 0.5rem; } [image: e5cec20e-be36-4ee8-9129-fd11ad4656ac-image.png] You can increase the top and bottom padding by increasing the values above.
  • who is read NodeBB

    Customisation read post nodebb
    6
    0 Votes
    6 Posts
    3k Views
    phenomlab
    @cagatay You should ask in the NodeBB forums. Perhaps reference this post https://discuss.flarum.org/d/23066-who-read
  • Top Ranked Forums

    Chitchat nodebb top ranked
    9
    1
    3 Votes
    9 Posts
    3k Views
    phenomlab
    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.
  • Recent Cards plugin customization

    Solved Customisation nodebb
    21
    1
    13 Votes
    21 Posts
    12k Views
    phenomlab
    @pobojmoks that’s easily done by modifying the code provided here so that it targets background rather than border In essence, the below should work $(document).ready(function() { $(window).on('action:ajaxify.end', function(data) { $('.recent-card-container').each(function(i) { var dataId = $(this).attr("data-cid"); var color = $('[role="presentation"]', this).css("background-color"); console.log("data-cid " + dataId + " is " + color); $('[data-cid="' + dataId + '"] .recent-card').attr("style", "background-color: " + color); }); }); });
  • 4 Votes
    8 Posts
    5k Views
    phenomlab
    @DownPW done
  • RSS parser script [NodeBB]

    Customisation nodebb rss script
    47
    9 Votes
    47 Posts
    24k Views
    JAC
    @phenomlab said in RSS parser script [NodeBB]: @jac Not yet. Sorry. Have some other work commitments I need to prioritise. Hoping to get to this over the weekend. No worries at all mate, thanks
  • [NodeBB] custom Gravatar image not showing

    Solved Customisation
    6
    1 Votes
    6 Posts
    3k Views
    JAC
    @jac said in [NodeBB] custom Gravatar image not showing: @phenomlab said in [NodeBB] custom Gravatar image not showing: @jac are you using Custom ? Sure am mate Confirmed Fixed