Skip to content

[NODEBB] CSS Style Sheets SelectBox

Locked Solved Customisation
112 2 63.3k 1
  • In fact , I would loike:

    • The dominant color of each theme in the background of the icon when the mouse is hovered, when the mouse is clicked and when dropdown in the menu.

    • White color of the icon in normal.

    • Black color of the icon when the mouse is hovered, when the mouse is clicked and when dropdown in the menu. (Even choose the color for each theme if possible)

    wrote on last edited by
    #92

    @downpw Having looked at this, it will indeed require jQuery. I’m going to look further into this today hopefully.

  • wrote on last edited by DownPW
    #93

    @phenomlab

    Great man 🙂

    On the default theme. All it’s perfect !!!
    That’s why I thought of a CSS problem. Like a variable that I would have forgotten for example

  • @phenomlab

    Great man 🙂

    On the default theme. All it’s perfect !!!
    That’s why I thought of a CSS problem. Like a variable that I would have forgotten for example

    wrote on last edited by
    #94

    @downpw Yes, I saw that. Let me know when the server is available and I’ll have a look.

  • wrote on last edited by
    #95

    On 1 hour

  • On 1 hour

    wrote on last edited by phenomlab
    #96

    @downpw I’ve been able to get somewhere near this with the below custom function I’ve written

    	    $(window).on('action:ajaxify.end', function(data) {
    	        // Detect if the theme dropdown has been clicked. If it has, change the color to #000000
    	        $("#switcher").on("click", function() {
    	            $("#switcher i").css("color", "#000000");
    	        });
    	        // Detect if the theme dropdown has lost focus (clicked something else). If it has, change the color to #FFFFFF
    	        $("#switcher").on("focusout", function() {
    	            $("#switcher i").css("color", "#ffffff");
    	        });
    	    });
    

    Test it and let me know ? I’ve already added it, so you don’t need to do anything.

  • wrote on last edited by DownPW
    #97

    @phenomlab

    It seems to be better when dropdown 😉
    But when I lost focus, sometimes the icon don’t back again:

    Example here :
    0029c6f2-ae59-48ff-82a7-97e7e92fdb2d-image.png

    EDIT : see, I have recorded a gif

    The problem came on default theme too but it’s normal because it’s a javascript for all the site

    5c31ab54-4d9d-4183-8e97-80abd0850527-image.png https://imgur.com/a/2oSdcC3

  • @phenomlab

    It seems to be better when dropdown 😉
    But when I lost focus, sometimes the icon don’t back again:

    Example here :
    0029c6f2-ae59-48ff-82a7-97e7e92fdb2d-image.png

    EDIT : see, I have recorded a gif

    The problem came on default theme too but it’s normal because it’s a javascript for all the site

    5c31ab54-4d9d-4183-8e97-80abd0850527-image.png https://imgur.com/a/2oSdcC3

    wrote on last edited by
    #98

    @downpw thanks. Might need some tweaking to get it 100% but it’s a start. Will have a more detailed look at this as time permits. I’m back at work as of Monday ☺️

  • @downpw thanks. Might need some tweaking to get it 100% but it’s a start. Will have a more detailed look at this as time permits. I’m back at work as of Monday ☺️

    wrote on last edited by
    #99

    @phenomlab Of course it is a very good basis for work.

  • @phenomlab Of course it is a very good basis for work.

    wrote on last edited by phenomlab

    @downpw Small modification to address the default theme icon bug (displayed white when focus lost, when it should be black)

    // Bugfix theme switcher button when dropdown / Focus / Not focus
    $(window).on('action:ajaxify.end', function(data) {
        var whichTheme = localStorage.getItem("theme");
        if (whichTheme === '') {
            // Assume default theme and set icon color to #000000
            $("#switcher i").css("color", "#000000");
        }
        if (whichTheme !== '') {
            // Assume color theme and set icon color to #ffffff
            $("#switcher i").css("color", "#ffffff");
        }
        // Detect if the theme dropdown has been clicked. If it has, change the color to #000000
        $("#switcher").on("click", function() {
            $("#switcher i").css("color", "#000000");
        });
        // Detect if the theme dropdown has lost focus (clicked something else). If it has, change the color to #FFFFFF
        $("#switcher").on("focusout", function() {
            $("#switcher i").css("color", "#ffffff");
        });
    });
    

    Active now, and should also address the other bug you mentioned.

  • @downpw Small modification to address the default theme icon bug (displayed white when focus lost, when it should be black)

    // Bugfix theme switcher button when dropdown / Focus / Not focus
    $(window).on('action:ajaxify.end', function(data) {
        var whichTheme = localStorage.getItem("theme");
        if (whichTheme === '') {
            // Assume default theme and set icon color to #000000
            $("#switcher i").css("color", "#000000");
        }
        if (whichTheme !== '') {
            // Assume color theme and set icon color to #ffffff
            $("#switcher i").css("color", "#ffffff");
        }
        // Detect if the theme dropdown has been clicked. If it has, change the color to #000000
        $("#switcher").on("click", function() {
            $("#switcher i").css("color", "#000000");
        });
        // Detect if the theme dropdown has lost focus (clicked something else). If it has, change the color to #FFFFFF
        $("#switcher").on("focusout", function() {
            $("#switcher i").css("color", "#ffffff");
        });
    });
    

    Active now, and should also address the other bug you mentioned.

    wrote on last edited by

    @phenomlab

    I have tested but sorry it’s the same problem.

  • @phenomlab

    I have tested but sorry it’s the same problem.

    wrote on last edited by

    @downpw Can you reload the page and try again.

  • wrote on last edited by

    Yeah i delete cache and Ctrl + F5

    The problem come when I don’t click on fa-fw but background.

    Like this :

    95b7fce2-8708-4e32-bdb9-6fbd107ddb5c-image.png

    On fa-fw = No problem

  • Yeah i delete cache and Ctrl + F5

    The problem come when I don’t click on fa-fw but background.

    Like this :

    95b7fce2-8708-4e32-bdb9-6fbd107ddb5c-image.png

    On fa-fw = No problem

    wrote on last edited by

    @downpw Ok, do the default theme issue is fixed, but you still see the white icon when clicking the background and not the icon itself ?

  • Yeah i delete cache and Ctrl + F5

    The problem come when I don’t click on fa-fw but background.

    Like this :

    95b7fce2-8708-4e32-bdb9-6fbd107ddb5c-image.png

    On fa-fw = No problem

    wrote on last edited by

    @downpw Try now

  • wrote on last edited by DownPW

    nope it’s the same even on fa-fw and default theme

    but as you are connected you have to see it.

  • nope it’s the same even on fa-fw and default theme

    but as you are connected you have to see it.

    wrote on last edited by

    @downpw Right. I think I finally have this working 🙂

    I’ve added this into your global CSS - don’t delete it

    .themeon {
        color: #000000 !important;
    }
    .themeoff {
        color: #ffffff !important;
    }
    

    Final modified JS

    // Bugfix theme switcher button when dropdown / Focus / Not focus
    	$(document).ready(function () {
    	// First, detect which theme is in use
        var whichTheme = localStorage.getItem("theme");
        // Is the target dropdown expanded ? Use aria-expanded for this as it populates into the DOM on change making it easier to work with. 
        // If it is expanded, then we set the icon to WHITE with CSS class "themeon"
          if ($('#theme_dropdown').attr('aria-expanded') === "true") {
             $("#switcher i").addClass("themeon");
          }
        // If it is collapsed, then we set the icon to BLACK with CSS class "themeoff"
          if ($('#theme_dropdown').attr('aria-expanded') === "false") {
             $("#switcher i").addClass("themeoff");
          }
          // If we are using the default theme, deploy CSS "themeoff" and set the icon to BLACK
              if (whichTheme === '') {
          // If no other matches, assume the default theme, deploy CSS "themeoff" and set the icon to BLACK
             $("#switcher i").removeClass("themeoff");
        }
    });
    

    According to my testing, this works 🙂

  • wrote on last edited by DownPW

    clear and simple explanations.
    Perfect 😉

    I don’t know if I should say this but… I love you ha ha 😆

  • clear and simple explanations.
    Perfect 😉

    I don’t know if I should say this but… I love you ha ha 😆

    wrote on last edited by phenomlab

    @downpw Some last changes to address small bugs. The below CSS has been added

    /* DO NOT DELETE THESE LINES */
    [aria-expanded="true"] a #ticon {
        color: #000000;
    }
    
    .themeon {
        color: #ffffff !important;
    }
    .themeoff {
        color: #000000 !important;
    }
    
    
    

    And also to the mobile block

    /* DO NOT DELETE THESE LINES */
    [aria-expanded="true"] a #ticon {
        color: #ffffff;
    }
    .themeoff {
        color: #ffffff !important;
    }
    

    Finally, a new function

    // When hovering over the #switcher element, target the i class and add 'themeoff'
      $(document).on('mouseenter','#switcher', function() {
    		$('#switcher i').addClass("themeoff");
    });
    // When leaving the however state, target the i class and remove 'themeoff'
      $(document).on('mouseleave','#switcher', function() {
    		$('#switcher i').removeClass("themeoff");
    });
    

    This block should be deleted

    /*
    // Bugfix theme switcher button when dropdown / Focus / Not focus
    	$(document).ready(function () {
    	// First, detect which theme is in use
    	// Tout d'abord, on détecte quel thème est utilisé
        var whichTheme = localStorage.getItem("theme");
        // Is the target dropdown expanded ? Use aria-expanded for this as it populates into the DOM on change making it easier to work with. 
        // If it is expanded, then we set the icon to WHITE with CSS  class "themeon"
        // On utilise "aria-expanded" pour savoir si le menu déroulant est actif/dévelopé car la variable se remplit dans le DOM en cas de changement, ce qui facilite le travail avec.
        // Si le menu est actif/dévelopé, on définit l'icône en BLANC avec la classe CSS "themeon"
          if ($('#theme_dropdown').attr('aria-expanded') === "true") {
             $("#switcher i").addClass("themeon");
          }
        // If it is collapsed, then we set the icon to BLACK with CSS  class "themeoff"
        // S'il est réduit/non actif, nous définissons l'icône sur NOIR avec la classe CSS "themeoff"
          if ($('#theme_dropdown').attr('aria-expanded') === "false") {
              console.log("Theme selector is not active");
             $("#switcher i").addClass("themeoff");
          }
          // If we are using the default theme, deploy CSS "themeoff" and set the icon to BLACK
          // Si on utilise le thème par défaut, on utilise le CSS "themeoff" et on définit l'icône sur NOIR
              if (whichTheme === '') {
          // If no other matches, assume the default theme, deploy CSS  "themeoff" and set the icon to BLACK
          // Si rien ne correspond, on utilise le thème par défaut, on utilise le CSS "themeoff" et on définit l'icône sur NOIR
             $("#switcher i").removeClass("themeoff");
        }
    });
    */
    
  • DownPW DownPW referenced this topic on
  • wrote on last edited by DownPW

    @phenomlab

    It’s possible to add a reload at the end of the script ?

    Because, I just saw this:

    if certain CSSS variables are declared in one theme and not in the other, when I Switch themes, the CSS was applied but not correctly. If i refresh it’s OK.

    I seem to have 2 solutions:

    • Declare all variables in each theme even if they are not used in others (with or without !important)

    • Reload the page after selecting a theme.

    Or maybe you have another solution.

  • @phenomlab

    It’s possible to add a reload at the end of the script ?

    Because, I just saw this:

    if certain CSSS variables are declared in one theme and not in the other, when I Switch themes, the CSS was applied but not correctly. If i refresh it’s OK.

    I seem to have 2 solutions:

    • Declare all variables in each theme even if they are not used in others (with or without !important)

    • Reload the page after selecting a theme.

    Or maybe you have another solution.

    wrote on last edited by

    @downpw in most cases, the best way to handle this is to strip one CSS file before you add the other. However, as your CSS file is actually an extension of the main theme (in the sense that stock theme provides default variables and your custom theme overrides these), this will not work as the required CSS for the site to run properly will be missing.

    Reloading the site will work, but it’s not really the way to go as all the resources will need to be loaded again, and this defeats the purpose of jQuery in the sense that it is Ajax backed meaning the DOM should already contain the targets to be changed.

    If reloading solves the issue, then ok. Admittedly, we have to do this with the default theme when selected to ensure we strip all previously loaded CSS from the custom themes.


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
  • How to style tool tip of nodebb-plugin-user-level

    Solved Customisation user level css
    4
    1
    5 Votes
    4 Posts
    3k Views
    phenomlab
    @DownPW thanks. I forgot about that.
  • Whitespace fixes in Nodebb

    Solved Customisation nodebb
    18
    2
    7 Votes
    18 Posts
    6k Views
    phenomlab
    @Panda Just circling back here with something of an update (which I think you’ll like). I’ve completely restructured the ranking system. There are now less ranks, with a higher point threshold to reach them. More importantly, if you reload the site, you’ll notice that the ranks are now icons. I also removed the “Author” badge, and made this a single icon, which (to me) looks much better.
  • Quote design CSS

    Solved Customisation css quote
    15
    1
    4 Votes
    15 Posts
    6k Views
    phenomlab
    @DownPW yes, that does make sense actually. I forgot to mention the layout of Sudonix is custom so that would have an impact on the positioning. Good spot
  • tag icon in front of tags

    Solved Customisation css
    5
    3 Votes
    5 Posts
    2k Views
    crazycells
    @phenomlab said in tag icon in front of tags: @crazycells Are you using Font Awesome Free ? If so, try this span.tag:before { content: "\f02b"; font-family: "Font Awesome 5 Free"; margin-right: 5px; margin-left: 5px; font-weight: 900; } yeap, this worked thanks a lot.
  • [NODEBB] Stats

    Unsolved Customisation plugin stats script
    20
    1
    2 Votes
    20 Posts
    6k Views
    JAC
    @phenomlab said in [NODEBB] Stats: @jac or I land up fixing it I wouldn’t put it past you
  • Multiple link on one ico non Navbar

    Solved Customisation links css navbar
    7
    1
    2 Votes
    7 Posts
    3k Views
    DownPW
    yeah you’re right @phenomlab. Problem of NodeBB Version
  • [NodeBB] username cards

    Solved Customisation nodebb
    8
    5 Votes
    8 Posts
    3k Views
    Sampo2910
    @phenomlab Aha…nice to know. As always thank you for the reply and information.
  • CSS Help on my Flarum

    Solved Customisation
    5
    2
    2 Votes
    5 Posts
    3k Views
    phenomlab
    @mike-jones Yes, you’ll typically see this type of behaviour if there is another style that has higher priority in the sense that yours will be overridden. Using !important will override the higher preference, but should be used sparingly rather than everywhere.