Fma965
(Fma965)
09.Май.2022 20:17:00
1
Привет, ребята,
У меня есть вот такой 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 лайка
Fma965
(Fma965)
09.Май.2022 20:43:22
3
Спасибо за ваш ответ,
Я только что это протестировал, и, к сожалению, в данном случае это ничего не изменило.
Если нет какого-то простого решения, то я просто проверю класс body в JavaScript с помощью api.onPageChange(() , но это кажется немного странным.
1 лайк
Ага, понятно… при ближайшем рассмотрении выясняется, что тема добавляет к тегу body динамические классы, например category-documentation-21 и category-ford-5… При переходах между страницами эти классы, похоже, не удаляются корректно.
1 лайк
Fma965
(Fma965)
09.Май.2022 20:55:09
5
РЕДАКТИРОВАНИЕ, теперь я понимаю, о чём вы, по какой-то причине этот класс сохраняется в элементе body
РЕДАКТИРОВАНИЕ 2: я создал копию темы без компонентов, проблема осталась, значит, дело в плагине или ядре.
Самое неуклюжее решение — моё
<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>
Но если кто-то знает, что вызывает эту проблему, пожалуйста, дайте знать
1 лайк
Похоже, это ошибка в ядре, поэтому я меняю её категорию.
Для воспроизведения:
Перейдите в категорию, например Support - Discourse Meta
Обновите страницу
Переключитесь на другую категорию
Проверьте классы в теге body — предыдущая категория остаётся
Похоже, что это добавляется на стороне сервера. Инженер помог в диагностике, и более конкретно проблема, кажется, исходит отсюда:
HTML
end
def add_resource_preload_list(resource_url, type)
links =
controller.instance_variable_get(:@asset_preload_links) ||
controller.instance_variable_set(:@asset_preload_links, [])
links << %Q(<#{resource_url}>; rel="preload"; as="#{type}")
end
def discourse_csrf_tags
# anon can not have a CSRF token cause these are all pages
# that may be cached, causing a mismatch between session CSRF
# and CSRF on page and horrible impossible to debug login issues
csrf_meta_tags if current_user
end
def html_classes
list = []
unless SiteSetting.viewport_based_mobile_mode
list << (mobile_view? ? "mobile-view" : "desktop-view")
3 лайка
Fma965
(Fma965)
10.Май.2022 18:53:18
7
Спасибо за обновление. Пока мой кривой JavaScript обходит проблему. Как я могу отслеживать статус этой ошибки?
Мы обновим эту тему, когда проблема будет исправлена (или когда появится что-то связанное с ней). Если вы измените уровень отслеживания на «Слежение» в выпадающем меню в нижней части темы, вы получите уведомление о новых сообщениях.
Fma965
(Fma965)
10.Май.2022 18:57:09
9
Отлично, я не знал, есть ли какая-то задача на GitHub или что-то в этом роде. Уже слежу за этой темой, так что буду в курсе обновлений.
Ещё раз спасибо за помощь.
Это должно быть исправлено в этом коммите, поэтому при следующем обновлении Discourse классы категорий должны добавляться/удаляться, как и ожидалось.
committed 05:18PM - 01 Jun 22 UTC
The server-side implementation had unintentionally changed to include `-{id}` at… the end of the body class name. This change meant that the JS client was unaware of the class, and didn't remove it when navigating away from the category page.
This commit fixes the server-side implementation to match the client
4 лайка
Fma965
(Fma965)
02.Июнь.2022 16:04:59
14
Спасибо, классы теперь обновляются корректно, но 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?
Fma965
(Fma965)
02.Июнь.2022 16:28:48
16
Нет, просто добавьте CSS в файлы common.css или desktop.css — я пробовал оба варианта.
Fma965, пост: 14, тема: 226596:
body[class^="category-documentation"]
Ах, понятно, только что до меня дошло… class^= проверяет начало класса, а категория не всегда является первым классом в списке.
Если вы обновите до body[class*="category-documentation"], это должно сработать — это проверяет наличие имени класса в любом месте списка.
5 лайков
Fma965
(Fma965)
18.Июнь.2022 16:51:26
20
Это + исправление ядра, похоже, работает. Спасибо.
3 лайка