mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-05-13 03:35:58 +08:00
Some checks are pending
Licenses / run (push) Waiting to run
Linting / run (push) Waiting to run
Publish Assets / publish-assets (push) Waiting to run
Tests / core backend (push) Waiting to run
Tests / plugins backend (push) Waiting to run
Tests / core frontend (Chrome) (push) Waiting to run
Tests / plugins frontend (push) Waiting to run
Tests / themes frontend (push) Waiting to run
Tests / core system (push) Waiting to run
Tests / plugins system (push) Waiting to run
Tests / themes system (push) Waiting to run
Tests / core frontend (Firefox ESR) (push) Waiting to run
Tests / core frontend (Firefox Evergreen) (push) Waiting to run
Tests / chat system (push) Waiting to run
Tests / merge (push) Blocked by required conditions
Lazily loaded videos currently won't be picked up by search engines as they do not contain an iframe or VideoObject. This commit uses a new API `build_plugin_html "server:topic-show-crawler-post-end"` to insert populated [ld+json](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data#supported-formats) into the end of each post which has a video. Results: - https://search.google.com/test/rich-results/result?id=vegb8Qkz7HThsMbFaeN2AQ - https://search.google.com/test/rich-results/result?id=asumX41RneM2tMstchv45A - (vimeo) https://search.google.com/test/rich-results/result?id=EZWOMJCkDqEQIHfOLkSkcw Note: There were originally two ways around this - add each VideoObject to the `post.cook` all the time agnostic of crawler view - or add them to the `<head>` with appropriate metadata, needing to duplicate all post meta data within a `isPartOf` attribute. I chose to create a new api so that we can satisfy both "only add the meta data in crawler view" and prevent post metadata duplication.
32 lines
977 B
Ruby
32 lines
977 B
Ruby
# frozen_string_literal: true
|
|
|
|
# name: discourse-lazy-videos
|
|
# about: Lazy loading for embedded videos
|
|
# version: 0.1
|
|
# authors: Jan Cernik
|
|
# url: https://github.com/discourse/discourse-lazy-videos
|
|
|
|
enabled_site_setting :lazy_videos_enabled
|
|
|
|
register_asset "stylesheets/lazy-videos.scss"
|
|
|
|
require_relative "lib/discourse_lazy_videos/lazy_youtube"
|
|
require_relative "lib/discourse_lazy_videos/lazy_vimeo"
|
|
require_relative "lib/discourse_lazy_videos/lazy_tiktok"
|
|
require_relative "lib/discourse_lazy_videos/crawler_post_end"
|
|
|
|
after_initialize do
|
|
register_html_builder("server:topic-show-crawler-post-end") do |controller, post:|
|
|
DiscourseLazyVideos::CrawlerPostEnd.new(controller, post).html
|
|
end
|
|
|
|
on(:reduce_cooked) do |fragment|
|
|
fragment
|
|
.css(".lazy-video-container")
|
|
.each do |video|
|
|
title = video["data-video-title"]
|
|
href = video.at_css("a")["href"]
|
|
video.replace("<p><a href=\"#{href}\">#{title}</a></p>")
|
|
end
|
|
end
|
|
end
|