Ниже приведенный скрипт в плагине «Локация» постоянно отображает всплывающую подсказку и раскрашивает их в зависимости от типа (мероприятия, места и т. д.). Я работаю над легендой и, возможно, над фильтром.
Проблема в том, что всё работает, но только после обновления страницы. При переходе на страницу по ссылке ничего не происходит.
В консоли нет различий в ошибках в обоих случаях, и увеличение задержки функции ничего не меняет.
У кого-нибудь было подобное при добавлении JS в заголовок через меню редактирования темы? Нашли ли вы решение?
<script>
document.addEventListener('DOMContentLoaded', function() {
// Применяем CSS для изменения стиля текста alt
var style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = `
/* Убедитесь, что текст alt жирный, подчеркнутый и имеет условный цвет */
.leaflet-marker-pane img[alt] {
font-weight: bold !important; /* Сделать текст жирным */
text-decoration: underline !important; /* Подчеркнуть текст */
white-space: nowrap; /* Запретить перенос текста на новую строку */
}
`;
document.head.appendChild(style);
// Даем странице время загрузиться и изображениям отобразиться
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); // Задержка выполнения на 1 секунду (1000 мс)
});
</script>
Если я не ошибаюсь, поскольку Discourse — это одностраничное приложение, вам, вероятно, придется использовать api.onPageChange() из API плагинов для этого.
Хорошо знать, мне не придётся использовать адаптированный window.location.reload(true) в заголовке для фреймворка ember.js, который, возможно, мог бы стать решением этой проблемы.
Удаляется ли поле заголовка по соображениям безопасности? Дело в том, что оно всё ещё удобно для тестирования чистого JavaScript в нём.
Хорошо, если использование JavaScript в заголовках скоро будет устаревшим, мне придется адаптировать несколько вещей. Возможно, в этом поле заголовка стоит добавить уведомление о надвигающихся изменениях.
Думаю, у этого есть свои причины, но это может быть жаль, так как скрипты в заголовках полезны: они позволяют быстро вносить изменения для администраторов, например, закрывать регистрацию на событие, когда определенное число достигается с помощью JavaScript-функции для конкретной категории.
Извините, я ответил вам вместо Джея, который сказал, что скрипты будут устаревать. Я полагаю, он имеет в виду скрипты в заголовке, которые очень удобны для быстрых изменений, как и в любой CMS для веб-сайтов.
На самом деле я нашёл решение, которое перезагружает только страницу «Карта» каждый раз, когда вы на неё переходите.
Теперь я задаюсь вопросом, стоит ли делиться этим с другими здесь, если скрипты в заголовке будут устаревать? Скрипт в этом посте позволяет назначать цветовые категории в зависимости от содержимого заголовка события на карте; это должно быть легко изменяемо, и не через функцию API.
Я думаю, вы меня неправильно поняли. Я имел в виду, что устарели скриптовые теги в заголовке, такие как <script type="text/discourse-plugin"> и <script type="text/x-handlebars">, а не обычные теги <script>.
Да, спасибо за уточнение. Я рад, что мы можем использовать JavaScript. Если у вас есть время, посмотрите код, который я оставил, — он может быть полезен в окружениях Ember. Он перезагружает страницу, чтобы JavaScript применился. Это не самый элегантный способ, но для страницы с плагином карты он работает отлично!