Il javascript personalizzato viene applicato solo dopo l'aggiornamento, creando categorie per il plugin di localizzazione

Ciao,

Lo script seguente mostra nel plugin di localizzazione il tooltip in modo permanente e gli conferisce colori per ordinarli in base al loro tipo (eventi, luoghi, ecc.), sto lavorando a una legenda e forse a un filtro.

La situazione è che funziona, ma solo dopo aver aggiornato la pagina, non funziona quando si accede alla pagina dall’URL.

Non ci sono differenze negli errori nella console in entrambi i casi e l’aggiunta di un ritardo maggiore alla funzione non cambia nulla.

Qualcuno ha mai riscontrato questo problema quando aggiunge js all’header dal menu di modifica del tema e ha trovato una soluzione?

Ecco un’immagine del risultato

gli errori qui appaiono con o senza il codice, quindi non sono correlati ad esso

<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 non erro, poiché Discourse è un’applicazione a pagina singola, credo che dovrai utilizzare api.onPageChange() dell’API dei plugin per questo.

4 Mi Piace

Giusto, e l’uso di script sarà presto deprecato.

2 Mi Piace

Buono a sapersi, non mi preoccuperò di utilizzare una finestra adattata window.location.reload(true) nell’intestazione per un framework ember.js che potrebbe essere stata una soluzione per questo.

Il campo dell’intestazione viene deprecato per motivi di sicurezza? Il fatto è che è ancora comodo testare javascript vanilla al suo interno.

No, l’uso dell’API dei plugin nei tag script (nell’header) è deprecato.

1 Mi Piace

ok se javascript negli header sarà presto deprecato dovrò adattare alcune cose, forse questo campo header potrebbe avere un avviso riguardo a questa situazione imminente.

Suppongo che abbia le sue ragioni, ma potrebbe essere un peccato poiché gli script negli header sono utili e consentono modifiche rapide per l’amministratore, come: chiudere la registrazione dell’evento quando un numero specifico viene raggiunto da una funzione javascript per una categoria specifica

Mi dispiace, ho risposto a te invece che a Jay, che dice che gli script verranno deprecati. Immagino si riferisca agli script nell’intestazione che sono molto comodi da usare per modifiche rapide, proprio come in qualsiasi CMS di siti web.

In realtà ho trovato una soluzione che ricarica solo la pagina “mappa” ogni volta che ci si accede.

Mi chiedo ora se valga la pena condividerla con altri qui se gli script nell’header verranno deprecati? Lo script in questo post consente categorie di colori in base al contenuto di un titolo di evento sulla mappa, questo dovrebbe essere modificabile rapidamente e non tramite la funzionalità 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 Mi Piace

Credo che tu mi abbia frainteso. Intendevo dire che i tag script nell’intestazione come \u003cscript type=\"text/discourse-plugin\"\u003e e \u003cscript type=\"text/x-handlebars\"\u003e sono deprecati, non i normali tag \u003cscript\u003e.

2 Mi Piace

sì, grazie per il chiarimento, sono felice che possiamo inserire javascript, dai un’occhiata al codice che ho lasciato se hai tempo, potrebbe essere ancora utile in ambienti ember, ricarica la pagina in modo che il js venga applicato. Non è il massimo ma funziona bene per la pagina del plugin della mappa!

2 Mi Piace

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