CSS для конкретной категории не обновляется без F5

Привет, ребята,

У меня есть вот такой CSS:

body[class^="category-documentation"] {
        .topic-list .topic-list-header .posts, 
        .topic-list .topic-list-header .views,
        .topic-list .topic-list-body .posts,
        .topic-list .topic-list-body .views,
        .topic-list .topic-list-body .posters,
        .topic-list .topic-list-header .posters
        {
            display: none !important;
        }
        
        .topic-list .topic-list-body .main-link,
        .topic-list .topic-list-header .topic-list-data
        {
            width: 90% !important;
        }
        
        .topic-list .topic-list-header .activity, .full-width .contents .topic-list .topic-list-body .activity {
            width: 10% !important;
        }

        .topic-list .topic-excerpt {
            display: none !important;
        }
    }

Это отлично работает для скрытия множества элементов в категории «Documentation» (да, я знаю, что существует плагин для документации, но мне больше нравится нативная разметка). Проблема в том, что когда я перехожу, например, из категории «Ford» в «Documentation», CSS не обновляется, и поэтому мои элементы не скрываются, пока я не обновлю всю страницу через F5 или Ctrl + R.

Не упускаю ли я что-то, что позволило бы этому работать?

То же самое происходит и в обратном направлении.

Вы можете зайти в любую категорию на https://community.cyanlabs.net, а затем перейти в «Documentation», и увидите, что скрытые элементы CSS всё ещё отображаются.

1 лайк

Похоже, вы используете тему Air, которая включает компонент темы «Ползунок загрузки Discourse».

Если вы отключите этот компонент через администрирование > настройка > темы > компоненты, а затем попробуете снова… изменится ли что-нибудь? Иногда этот компонент может вызывать проблему, при которой классы остаются между страницами до тех пор, пока вы не обновите страницу.

4 лайка

Спасибо за ваш ответ,

Я только что это протестировал, и, к сожалению, в данном случае это ничего не изменило.

Если нет какого-то простого решения, то я просто проверю класс body в JavaScript с помощью api.onPageChange(() , но это кажется немного странным.

1 лайк

Ага, понятно… при ближайшем рассмотрении выясняется, что тема добавляет к тегу body динамические классы, например category-documentation-21 и category-ford-5… При переходах между страницами эти классы, похоже, не удаляются корректно.

1 лайк

РЕДАКТИРОВАНИЕ, теперь я понимаю, о чём вы, по какой-то причине этот класс сохраняется в элементе body :thinking:

РЕДАКТИРОВАНИЕ 2: я создал копию темы без компонентов, проблема осталась, значит, дело в плагине или ядре.

Самое неуклюжее решение — моё :smiley:

<script type="text/discourse-plugin" version="0.8.19">
  api.onPageChange((url) => {
        if (url.indexOf("/c/documentation/") >= 0) {
            $( "<style id='documentationworkaround'>.topic-list .topic-list-body .posters,.topic-list .topic-list-body .posts,.topic-list .topic-list-body .views,.topic-list .topic-list-header .posters,.topic-list .topic-list-header .posts,.topic-list .topic-list-header .views{display:none!important}.topic-list .topic-list-body .main-link,.topic-list .topic-list-header .topic-list-data{width:90%!important}.full-width .contents .topic-list .topic-list-body .activity,.topic-list .topic-list-header .activity{width:10%!important}.topic-list .topic-excerpt{display:none!important}</style>" ).appendTo( "head" )
        } else {
            $( "#documentationworkaround").remove();
        }
        
    });
</script>

Но если кто-то знает, что вызывает эту проблему, пожалуйста, дайте знать :slight_smile:

1 лайк

Похоже, это ошибка в ядре, поэтому я меняю её категорию.

Для воспроизведения:

  1. Перейдите в категорию, например Support - Discourse Meta
  2. Обновите страницу
  3. Переключитесь на другую категорию
  4. Проверьте классы в теге body — предыдущая категория остаётся

Screen Shot 2022-05-10 at 2.31.33 PM

Похоже, что это добавляется на стороне сервера. Инженер помог в диагностике, и более конкретно проблема, кажется, исходит отсюда:

3 лайка

Спасибо за обновление. Пока мой кривой JavaScript обходит проблему. Как я могу отслеживать статус этой ошибки?

Мы обновим эту тему, когда проблема будет исправлена (или когда появится что-то связанное с ней). Если вы измените уровень отслеживания на «Слежение» в выпадающем меню в нижней части темы, вы получите уведомление о новых сообщениях.

Отлично, я не знал, есть ли какая-то задача на GitHub или что-то в этом роде. Уже слежу за этой темой, так что буду в курсе обновлений.

Ещё раз спасибо за помощь.

Это должно быть исправлено в этом коммите, поэтому при следующем обновлении Discourse классы категорий должны добавляться/удаляться, как и ожидалось.

4 лайка

Спасибо, классы теперь обновляются корректно, но CSS всё ещё не применяется при переключении между категориями.

body[class^="category-documentation"] {
        .topic-list .topic-excerpt, .topic-list .topic-list-body .posts, .topic-list .topic-list-header .posts {
            display: none !important
        }
    }

Переключайтесь между категориями — это не будет работать корректно.

1 лайк

О, хм, это неожиданно… этот CSS добавлен через JS?

Нет, просто добавьте CSS в файлы common.css или desktop.css — я пробовал оба варианта.

Ах, понятно, только что до меня дошло… class^= проверяет начало класса, а категория не всегда является первым классом в списке.

Если вы обновите до body[class*="category-documentation"], это должно сработать — это проверяет наличие имени класса в любом месте списка.

5 лайков

Это + исправление ядра, похоже, работает. Спасибо.

3 лайка