Javascript personalizado só é aplicado após a atualização, criando categorias para o plugin de localização

Olá,

O script abaixo exibe permanentemente o tooltip no plugin de localização e dá cores a eles para classificá-los de acordo com seu tipo (eventos, locais, etc.). Estou trabalhando em uma legenda e talvez em um filtro.

A situação é que funciona, mas apenas depois que eu atualizo a página; não funciona ao acessar a página a partir do URL.

Não há diferenças nos erros no console em ambos os casos e adicionar um atraso maior à função não muda nada.

Alguém já passou por isso ao adicionar JS ao cabeçalho a partir do menu de edição de tema e encontrou uma solução?

Aqui está uma imagem do resultado

os erros aqui aparecem com ou sem o código, então não estão relacionados a ele

<script>
document.addEventListener('DOMContentLoaded', function() {
  // Apply CSS to change the alt text style
  var style = document.createElement('style');
  style.type = 'text/css';
  style.innerHTML = `
    /* Ensure alt text is bold, underlined, and has conditional color */
    .leaflet-marker-pane img[alt] {
      font-weight: bold !important; /* Make text bold */
      text-decoration: underline !important; /* Underline the text */
      white-space: nowrap; /* Prevent the text from wrapping to a new line */
    }
  `;
  document.head.appendChild(style);

  // Give the page a moment to load and the images to be rendered
  setTimeout(function() {
    var images = document.querySelectorAll('.leaflet-marker-pane img');

    images.forEach(function(img) {
      var title = img.getAttribute('title');
      if (title) {
        title = title.length > 10 ? title.substring(0, 10) + '..' : title;
        img.setAttribute('alt', title);
        img.setAttribute('title', title);

        if (title.includes('/')) {
          img.style.color = 'white';
        } else {
          img.style.color = 'black';
        }
      }
      img.setAttribute('src', '');
    });
  }, 1000);  // Delay execution by 1 second (1000 ms)
});
</script>

Se não me engano, como o Discourse é uma aplicação de página única, acredito que você terá que usar o api.onPageChange() da API de plugins para isso.

4 curtidas

Certo, e o uso de scripts em breve será descontinuado.

2 curtidas

Bom saber, não vou me dar ao trabalho de usar um adapted window.location.reload(true) no cabeçalho para um framework ember.js que poderia ter sido uma solução para isso.

O campo do cabeçalho está sendo descontinuado por motivos de segurança? O fato é que ainda é conveniente testar javascript vanilla nele.

Não, o uso da API de plugins em tags de script (no cabeçalho) está sendo descontinuado.

1 curtida

ok se o javascript nos cabeçalhos for descontinuado em breve, terei que adaptar algumas coisas, talvez este campo de cabeçalho possa ter um aviso sobre essa situação futura.

Eu acho que tem suas razões, mas pode ser uma pena, já que scripts nos cabeçalhos são úteis, permitindo ajustes rápidos para administradores, como: fechar o registro de eventos quando um número específico é correspondido por uma função javascript para uma categoria específica

Desculpe, respondi a você em vez de Jay, que diz que os scripts serão descontinuados. Imagino que ele esteja falando sobre scripts de cabeçalho que são muito convenientes de usar para modificações rápidas, assim como em qualquer CMS de site.

Na verdade, encontrei uma solução que recarrega apenas a página “mapa” toda vez que você acessa ela.

Agora me pergunto se vale a pena compartilhar isso com outras pessoas aqui, caso os scripts de cabeçalho sejam descontinuados? O script neste post permite categorias de cores de acordo com o conteúdo de um título de evento no mapa, isso deve ser alterável rapidamente, não através do recurso de API.

<script> (function(){function e(){if(location.pathname.includes("/map")){if(!sessionStorage.getItem("map-refreshed")){sessionStorage.setItem("map-refreshed","true");requestAnimationFrame(()=>setTimeout(()=>location.reload(!0),100))}}}function t(){sessionStorage.removeItem("map-refreshed")}function n(e){const t=history[e];history[e]=function(){const n=t.apply(this,arguments);return window.dispatchEvent(new Event("locationchange")),n}}n("pushState"),n("replaceState"),addEventListener("popstate",()=>dispatchEvent(new Event("locationchange"))),addEventListener("locationchange",function(){location.pathname.includes("/map")?e():t()}),e();})(); </script>
1 curtida

Acho que você me entendeu mal. Quis dizer que tags de script no cabeçalho como \u003cscript type=\"text/discourse-plugin\"\u003e e \u003cscript type=\"text/x-handlebars\"\u003e estão obsoletas, não tags \u003cscript\u003e normais.

2 curtidas

Sim, obrigado pelo esclarecimento, fico feliz que possamos usar JavaScript. Dê uma olhada no código que deixei, se tiver tempo, ele ainda pode ser útil em ambientes Ember. Ele recarrega a página para que o JS seja aplicado. Não é a coisa mais bonita, mas funciona bem para a página do plugin de mapa!

2 curtidas

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.