Cómo agregar un nuevo icono de encabezado

Hola,

Estoy intentando agregar un nuevo icono al encabezado (para un conmutador de tema claro/oscuro) y me he inspirado en otro comentario aquí, pero no funciona exactamente como esperaba. El icono desaparece cuando hago scroll en una página de publicación; ¿puede alguien ayudarme a que permanezca allí todo el tiempo?

¡Muchas gracias! :grin:

(Intenté agregar la clase “keep”, pero sigue desapareciendo)

<script type="text/discourse-plugin" version="0.8">
  var h = require('virtual-dom').h;
  var ajax = require('discourse/lib/ajax').ajax;
  var themeSelector = require('discourse/lib/theme-selector');
  var light = 94;
  var dark = 98;
  
  const { iconNode } = require("discourse-common/lib/icon-library");
  let icon = iconNode('adjust');

  api.createWidget("header-theme-selector", {
      tagName: "span.header-theme-selector",
      buildKey: attrs => `header-theme-selector`,
      click(event){
          let $target = $(event.target);
          let id = light;
          let user = api.getCurrentUser();
          if(user){
              console.log(themeSelector.currentThemeId());
            if (themeSelector.currentThemeId() == light) {
              id = dark;
            }
            user.findDetails().then(user => {
                  seq = user.get("user_option.theme_key_seq");
                  this.setTheme(id, seq);
              });
          }else{
              this.setTheme(id);
          };
          return true;
      },
      setTheme(themeId, seq = 0){
          themeSelector.setLocalTheme([themeId], seq);
          window.location.reload();
          this.scheduleRerender();
      },
      html(attrs, state){
            return [h('div', {attributes: {"class": "switcher keep"}}, icon)];
      }
  });
  
  api.decorateWidget('header-buttons:after', (helper) =>{
    const showExtraInfo = helper.attrs.topic;
    if(!showExtraInfo) {
        return [helper.widget.attach('header-theme-selector')];
      }
  });
</script>

Desaparece porque el código lo indica con !showExtraInfo (showExtraInfo es el estado de desplazamiento del encabezado):

  if(!showExtraInfo) {
        return [helper.widget.attach('header-theme-selector')];
      }

Si cambias todo el bloque api.decorateWidget por:

api.decorateWidget('header-buttons:after', (helper)=>{
  return [helper.widget.attach('header-theme-selector')];  
});

Entonces debería seguir apareciendo incluso cuando se desplaza.

¡Maldita sea, ahora me siento tonto! Me quedé mirando eso demasiado tiempo. ¡Lo que se consigue al intentar modificar algo de tu código! Muchas gracias, que tengas un buen día :grin: