Ошибка при клике на логотип главной страницы

Привет.
Я покажу вам это на изображениях.
Я получал эту ошибку до последнего обновления.
После установки обновления ошибка продолжает появляться.

(Гüncel - Текущий)
Ekran görüntüsü 2024-05-03 153512

Я удалил весь код с сайта и попробовал снова, но ошибка всё ещё появляется.

Перевод

Ошибка
Что-то пошло не так.

Это происходит и в безопасном режиме? Проверьте также консоль браузера на наличие ошибок при нажатии, а также посмотрите в /logs, чтобы узнать, есть ли там дополнительные сведения.

Безопасный режим активен, и на странице журналов ошибок не видно. Возможно, я что-то не понимаю.

Последние записи журналов.
Ekran görüntüsü 2024-05-03 154929

Я попытался отключить безопасный режим. Ошибка всё равно появляется.

Кстати, при повторном нажатии на неё ошибка исчезает, и отображается главная страница.

При загрузке компонентов темы и выгрузке плагинов я вижу некоторые ошибки.

Возможно, стоит проверить ваши недавние кастомизации.

Спасибо за ваш интерес.

Последний плагин: GIF

Все плагины

Есть ли у вас какие-либо пользовательские настройки JS вне удалённых компонентов?

Я бы попробовал отключить все компоненты и включать их по одному, пока не появится ошибка.

<script>
function moveTagsToTitle() {
    const mainLinks = document.querySelectorAll('.main-link');
    mainLinks.forEach(mainLink => {
        const discourseTags = mainLink.querySelector('.discourse-tags');
        const titleElement = mainLink.querySelector('.title');

        if (discourseTags && titleElement) {
            const tags = discourseTags.querySelectorAll('.discourse-tag');

            tags.forEach(tag => {
                const tagSpan = document.createElement('span');
                tagSpan.className = 'discourse-tag box';
                tagSpan.textContent = tag.textContent;
                tagSpan.style.fontSize = 'var(--font-down-2)';
                tagSpan.style.borderRadius = '10px';
                tagSpan.style.border = '1px solid #444460';
                tagSpan.style.backgroundColor = '#1f1f33';
                tagSpan.style.margin = '2px';
                tagSpan.style.display = 'inline-block';
                tagSpan.style.overflow = 'hidden';
                tagSpan.style.whiteSpace = 'nowrap';
                tagSpan.style.textOverflow = 'ellipsis';
                tagSpan.style.verticalAlign = 'middle';
                tagSpan.style.marginRight = '5px';
                tagSpan.style.marginLeft = '-6px';
                titleElement.insertBefore(tagSpan, titleElement.firstChild);
            });

            if (discourseTags.parentNode) {
                discourseTags.parentNode.removeChild(discourseTags);
            }
        }
    });

    const topicHeaderExtras = document.querySelectorAll('.topic-header-extra');

    topicHeaderExtras.forEach(topicHeaderExtra => {
        const discourseTags = topicHeaderExtra.querySelector('.discourse-tags');
        const tags = discourseTags.querySelectorAll('.discourse-tag');

        tags.forEach(tag => {
            tag.className = 'discourse-tag box';

            tag.style.borderRadius = '10px';
            tag.style.border = '1px solid #444460';
            tag.style.backgroundColor = '#1f1f33';
            tag.style.margin = '1px';
            tag.style.padding = '2px 8px';
            tag.style.display = 'inline-block';
            tag.style.overflow = 'hidden';
            tag.style.whiteSpace = 'nowrap';
            tag.style.textOverflow = 'ellipsis';
            tag.style.verticalAlign = 'middle';
            tag.style.marginRight = '5px';
            tag.style.marginBottom = '5px';
        });
    });
}

window.addEventListener('load', moveTagsToTitle);
const observer = new MutationObserver(moveTagsToTitle);
const targetNode = document.body;
const observerOptions = {
    childList: true,
    subtree: true
};
observer.observe(targetNode, observerOptions);
</script>

Этот код вызывает ошибку.
Не знаю, как её исправить.
Мне нужен этот код :frowning:

Вы перемещаете элементы, содержащие компоненты Ember.js (вот список тегов), что, по-видимому, нарушает жизненный цикл компонента.

В вашем случае лучше всего использовать API.

У вас есть два варианта:

  • Использование плагинов-выходов (plugin outlets), как я показывал в вашей предыдущей теме. Однако, поскольку для последних тем на странице категории они не предусмотрены, вам потребуется запросить их добавление.

  • Переопределение шаблона. Это не лучшее решение с точки зрения совместимости, но может служить временной альтернативой.

Я нашел эти коды.

Это не то, что я хотел, но пока сойдет.

 var pElement = document.getElementById('site-logo').parentNode;
                    //var pElement = document.createElement('a');
                    //pElement.innerHTML = aElement.innerHTML;
                    //aElement.replaceWith(pElement);
                    pElement.href = '#';
                    pElement.style.cursor = 'pointer'; 
                    pElement.onclick = function() {
                      window.location.href = '/';
                    };
                    //document.getElementById('site-logo').parentNode.href = '/';

Если кто-то сможет помочь, я жду. Спасибо :pray:

Настоятельно рекомендую не идти этим путём. Это всё равно что наклеить пластырь на побочный эффект, вместо того чтобы устранить коренную причину проблемы. Это создаст ещё больше трудностей (как в вашем последнем теме, возникшей из-за вышеуказанного кода).

Вы можете сделать свой JS чуть более совместимым с Discourse (лучший способ — всё же использовать plugin outlet, когда это возможно).
Вот пример. Он использует API при смене страницы, запускает код на конкретном маршруте и копирует HTML перед ссылкой (чтобы вы могли кликнуть по тегу):

JS
<script type="text/discourse-plugin" version="0.8">
  const { next } = require("@ember/runloop");
  
  function moveTags() {
    const mainLinks = document.querySelectorAll(".main-link:not(.tags-moved)");
    
    mainLinks.forEach((mainLink) => {
      const discourseTags = mainLink.querySelector(".discourse-tags");
      const titleElement = mainLink.querySelector("a[data-topic-id]");

      if (discourseTags && titleElement) {
        titleElement.insertAdjacentHTML("beforebegin", discourseTags.outerHTML);
        mainLink.classList.add('tags-moved');
      }
    });
  }

  api.registerModelTransformer("topic", async (topics) => {
    next(() => {
      moveTags();
    })
  });

  api.onPageChange((url) => {
    if (url.startsWith("/categories")) {
      moveTags();
    }
  });
</script>
CSS
.top-row, 
.link-top-line {
    .discourse-tag {
        font-size: var(--font-down-2) !important;
        padding: 2px 8px;
        margin: 2px 5px 2px -6px;
        border-radius: 10px;
        border: 1px solid #444460;
        background-color: #1f1f33;
    }
    
    .discourse-tag::after {
        content: '' !important;
        margin-left: 0 !important;
    }
}

.bottom-row, 
.link-bottom-line {
    .discourse-tags {
        display: none;
    }
}

Привет, @Arkshine
Изменение ссылки на логотип не помогло, я удалил этот код.

Но другого выхода нет. Мне нужно расположить теги вот так:
https://pvpfarm.com

Если я оплачу услуги специалиста, сможет ли он написать рабочий код?

И где вы берёте этот код? (JS) Из GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. · GitHub?

Если вам нужна или вы хотите получить платную помощь, вы можете создать тему в Marketplace. :+1:

Я привёл код для этого в #11.

Снова здравствуйте, @Arkshine!
Я добавил коды, которые вы предоставили, после удаления этих кодов, но они не работают. Я что-то делаю неправильно?

У меня это работает:

Убедитесь, что вы оставляете <script type="text/discourse-plugin" version="0.8">, иначе это не будет работать.

Да, всё работает!
Есть только одна небольшая ошибка.
При клике на логотип количество тегов увеличивается.

Я обновил свой код выше.

Я не знаю, как вас поблагодарить. Большое спасибо! :pray: :heart:

@Arkshine Извините, что снова поднимаю эту тему.
Спасибо ещё раз. Я обнаружил ошибку в коде, который вы предоставили.
Не могли бы вы мне помочь?
Я попытался исправить код, но у меня не получилось.

В разделе «Последние» отображается только тег в теме с тегом, которая была открыта последней.


А при входе в категорию теги не отображаются.

@ogulcan1787 Я обновил код выше.