diff --git a/docs/.gitignore b/docs/.gitignore index 6f4431f426a..bad85a18903 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -3,4 +3,5 @@ node_modules nohup.out .DS_Store -trace.out \ No newline at end of file +trace.out +.hugo_build.lock diff --git a/docs/content/en/content-management/related.md b/docs/content/en/content-management/related.md index c0728fe9930..a42cec32e92 100644 --- a/docs/content/en/content-management/related.md +++ b/docs/content/en/content-management/related.md @@ -123,7 +123,7 @@ toLower This feature has been in the back log and requested by many for a long time. The development got this recent kick start from this Twitter thread: -{{< tweet 898398437527363585 >}} +{{< tweet user="scott_lowe" id="898398437527363585" >}} Scott S. Lowe removed the "Related Content" section built using the `intersect` template function on tags, and the build time dropped from 30 seconds to less than 2 seconds on his 1700 content page sized blog. diff --git a/docs/content/en/content-management/shortcodes.md b/docs/content/en/content-management/shortcodes.md index d65b9d3b542..ebf2b55dd19 100644 --- a/docs/content/en/content-management/shortcodes.md +++ b/docs/content/en/content-management/shortcodes.md @@ -311,15 +311,15 @@ Assuming that standard Hugo pretty URLs are turned on. You want to include a single tweet into your blog post? Everything you need is the URL of the tweet: ``` -https://twitter.com/spf13/status/877500564405444608 +https://twitter.com/SanDiegoZoo/status/1453110110599868418 ``` #### Example `tweet` Input -Pass the tweet's ID from the URL as a parameter to the `tweet` shortcode: +Pass the tweet's user (case-insensitive) and id from the URL as parameters to the `tweet` shortcode. {{< code file="example-tweet-input.md" >}} -{{}} +{{}} {{< /code >}} #### Example `tweet` Output @@ -327,14 +327,14 @@ Pass the tweet's ID from the URL as a parameter to the `tweet` shortcode: Using the preceding `tweet` example, the following HTML will be added to your rendered website's markup: {{< output file="example-tweet-output.html" >}} -{{< tweet 877500564405444608 >}} +{{< tweet user="SanDiegoZoo" id="1453110110599868418" >}} {{< /output >}} #### Example `tweet` Display Using the preceding `tweet` example, the following simulates the displayed experience for visitors to your website. Naturally, the final display will be contingent on your stylesheets and surrounding markup. -{{< tweet 877500564405444608 >}} +{{< tweet user="SanDiegoZoo" id="1453110110599868418" >}} ### `vimeo` diff --git a/docs/content/en/showcase/letsencrypt/index.md b/docs/content/en/showcase/letsencrypt/index.md index 8487a3c7730..fc57a26b89c 100644 --- a/docs/content/en/showcase/letsencrypt/index.md +++ b/docs/content/en/showcase/letsencrypt/index.md @@ -9,7 +9,7 @@ byline: "[bep](https://github.com/bep), Hugo Lead" The **Let’s Encrypt website** has a common set of elements: A landing page and some other static info-pages, a document section, a blog, and a documentation section. Having it moved to Hugo was mostly motivated by a _simpler administration and Hugo's [multilingual support](/content-management/multilingual/)_. They already serve HTTPS to more than 60 million domains, and having the documentation available in more languages will increase that reach.[^1] -{{< tweet 971755920639307777 >}} +{{< tweet user="letsencrypt" id="971755920639307777" >}} I helped them port the site from Jekyll to Hugo. There are usually very few surprises doing this. I know Hugo very well, but working on sites with a history usually comes up with something new. diff --git a/docs/content/en/troubleshooting/faq.md b/docs/content/en/troubleshooting/faq.md index 66ea78630ec..6e90bd0d461 100644 --- a/docs/content/en/troubleshooting/faq.md +++ b/docs/content/en/troubleshooting/faq.md @@ -37,7 +37,7 @@ How to automate the "publish at intervals" part depends on your situation: Also see this Twitter thread: -{{< tweet 962380712027590657 >}} +{{< tweet user="ChrisShort" id="962380712027590657" >}} [^date-hierarchy]: See [Configure Dates](https://gohugo.io/getting-started/configuration/#configure-dates) for the order in which the different date variables are complemented by each other when not explicitly set. diff --git a/hugolib/embedded_shortcodes_test.go b/hugolib/embedded_shortcodes_test.go index b56368ddd60..895b3a95951 100644 --- a/hugolib/embedded_shortcodes_test.go +++ b/hugolib/embedded_shortcodes_test.go @@ -304,7 +304,7 @@ func TestShortcodeTweet(t *testing.T) { }, }, `{{< tweet 666616452582129664 >}}`, - `{"url":"https:\/\/twitter.com\/spf13\/status\/666616452582129664","author_name":"Steve Francia","author_url":"https:\/\/twitter.com\/spf13","html":"\u003Cblockquote class=\"twitter-tweet\"\u003E\u003Cp lang=\"en\" dir=\"ltr\"\u003EHugo 0.15 will have 30%+ faster render times thanks to this commit \u003Ca href=\"https:\/\/t.co\/FfzhM8bNhT\"\u003Ehttps:\/\/t.co\/FfzhM8bNhT\u003C\/a\u003E \u003Ca href=\"https:\/\/twitter.com\/hashtag\/gohugo?src=hash\"\u003E#gohugo\u003C\/a\u003E \u003Ca href=\"https:\/\/twitter.com\/hashtag\/golang?src=hash\"\u003E#golang\u003C\/a\u003E \u003Ca href=\"https:\/\/t.co\/ITbMNU2BUf\"\u003Ehttps:\/\/t.co\/ITbMNU2BUf\u003C\/a\u003E\u003C\/p\u003E— Steve Francia (@spf13) \u003Ca href=\"https:\/\/twitter.com\/spf13\/status\/666616452582129664\"\u003ENovember 17, 2015\u003C\/a\u003E\u003C\/blockquote\u003E\n\u003Cscript async src=\"\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"\u003E\u003C\/script\u003E","width":550,"height":null,"type":"rich","cache_age":"3153600000","provider_name":"Twitter","provider_url":"https:\/\/twitter.com","version":"1.0"}`, + `{"author_name":"Steve Francia","author_url":"https://twitter.com/spf13","cache_age":"3153600000","height":null,"html":"\u003cblockquote class=\"twitter-tweet\"\u003e\u003cp lang=\"en\" dir=\"ltr\"\u003eHugo 0.15 will have 30%+ faster render times thanks to this commit \u003ca href=\"https://t.co/FfzhM8bNhT\"\u003ehttps://t.co/FfzhM8bNhT\u003c/a\u003e \u003ca href=\"https://twitter.com/hashtag/gohugo?src=hash\u0026amp;ref_src=twsrc%5Etfw\"\u003e#gohugo\u003c/a\u003e \u003ca href=\"https://twitter.com/hashtag/golang?src=hash\u0026amp;ref_src=twsrc%5Etfw\"\u003e#golang\u003c/a\u003e \u003ca href=\"https://t.co/ITbMNU2BUf\"\u003ehttps://t.co/ITbMNU2BUf\u003c/a\u003e\u003c/p\u003e\u0026mdash; Steve Francia (@spf13) \u003ca href=\"https://twitter.com/spf13/status/666616452582129664?ref_src=twsrc%5Etfw\"\u003eNovember 17, 2015\u003c/a\u003e\u003c/blockquote\u003e\n\u003cscript async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"\u003e\u003c/script\u003e\n","provider_name":"Twitter","provider_url":"https://twitter.com","type":"rich","url":"https://twitter.com/spf13/status/666616452582129664","version":"1.0","width":550}`, `.twitter-tweet a`, }, { @@ -314,8 +314,18 @@ func TestShortcodeTweet(t *testing.T) { }, }, `{{< tweet 666616452582129664 >}}`, - `{"url":"https:\/\/twitter.com\/spf13\/status\/666616452582129664","author_name":"Steve Francia","author_url":"https:\/\/twitter.com\/spf13","html":"\u003Cblockquote class=\"twitter-tweet\"\u003E\u003Cp lang=\"en\" dir=\"ltr\"\u003EHugo 0.15 will have 30%+ faster render times thanks to this commit \u003Ca href=\"https:\/\/t.co\/FfzhM8bNhT\"\u003Ehttps:\/\/t.co\/FfzhM8bNhT\u003C\/a\u003E \u003Ca href=\"https:\/\/twitter.com\/hashtag\/gohugo?src=hash\"\u003E#gohugo\u003C\/a\u003E \u003Ca href=\"https:\/\/twitter.com\/hashtag\/golang?src=hash\"\u003E#golang\u003C\/a\u003E \u003Ca href=\"https:\/\/t.co\/ITbMNU2BUf\"\u003Ehttps:\/\/t.co\/ITbMNU2BUf\u003C\/a\u003E\u003C\/p\u003E— Steve Francia (@spf13) \u003Ca href=\"https:\/\/twitter.com\/spf13\/status\/666616452582129664\"\u003ENovember 17, 2015\u003C\/a\u003E\u003C\/blockquote\u003E\n\u003Cscript async src=\"\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"\u003E\u003C\/script\u003E","width":550,"height":null,"type":"rich","cache_age":"3153600000","provider_name":"Twitter","provider_url":"https:\/\/twitter.com","version":"1.0"}`, - `(?s)^

Hugo 0.15 will have 30%. faster render times thanks to this commit https://t.co/FfzhM8bNhT #gohugo #golang https://t.co/ITbMNU2BUf

— Steve Francia .@spf13. November 17, 2015
.*?`, + `{"author_name":"Steve Francia","author_url":"https://twitter.com/spf13","cache_age":"3153600000","height":null,"html":"\u003cblockquote class=\"twitter-tweet\"\u003e\u003cp lang=\"en\" dir=\"ltr\"\u003eHugo 0.15 will have 30%+ faster render times thanks to this commit \u003ca href=\"https://t.co/FfzhM8bNhT\"\u003ehttps://t.co/FfzhM8bNhT\u003c/a\u003e \u003ca href=\"https://twitter.com/hashtag/gohugo?src=hash\u0026amp;ref_src=twsrc%5Etfw\"\u003e#gohugo\u003c/a\u003e \u003ca href=\"https://twitter.com/hashtag/golang?src=hash\u0026amp;ref_src=twsrc%5Etfw\"\u003e#golang\u003c/a\u003e \u003ca href=\"https://t.co/ITbMNU2BUf\"\u003ehttps://t.co/ITbMNU2BUf\u003c/a\u003e\u003c/p\u003e\u0026mdash; Steve Francia (@spf13) \u003ca href=\"https://twitter.com/spf13/status/666616452582129664?ref_src=twsrc%5Etfw\"\u003eNovember 17, 2015\u003c/a\u003e\u003c/blockquote\u003e\n\u003cscript async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"\u003e\u003c/script\u003e\n","provider_name":"Twitter","provider_url":"https://twitter.com","type":"rich","url":"https://twitter.com/spf13/status/666616452582129664","version":"1.0","width":550}`, + `(?s)

Hugo 0.15 will have 30%\+ faster render times thanks to this commit https://t.co/FfzhM8bNhT #gohugo #golang https://t.co/ITbMNU2BUf

— Steve Francia \(@spf13\) November 17, 2015
\s*`, + }, + { + map[string]interface{}{ + "twitter": map[string]interface{}{ + "simple": false, + }, + }, + `{{< tweet user="SanDiegoZoo" id="1453110110599868418" >}}`, + `{"author_name":"San Diego Boo πŸ‘» Wildlife Alliance","author_url":"https://twitter.com/sandiegozoo","cache_age":"3153600000","height":null,"html":"\u003cblockquote class=\"twitter-tweet\"\u003e\u003cp lang=\"en\" dir=\"ltr\"\u003eOwl bet you\u0026#39;ll lose this staring contest πŸ¦‰ \u003ca href=\"https://t.co/eJh4f2zncC\"\u003epic.twitter.com/eJh4f2zncC\u003c/a\u003e\u003c/p\u003e\u0026mdash; San Diego Boo πŸ‘» Wildlife Alliance (@sandiegozoo) \u003ca href=\"https://twitter.com/sandiegozoo/status/1453110110599868418?ref_src=twsrc%5Etfw\"\u003eOctober 26, 2021\u003c/a\u003e\u003c/blockquote\u003e\n\u003cscript async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"\u003e\u003c/script\u003e\n","provider_name":"Twitter","provider_url":"https://twitter.com","type":"rich","url":"https://twitter.com/sandiegozoo/status/1453110110599868418","version":"1.0","width":550}`, + `(?s)

Owl bet you'll lose this staring contest πŸ¦‰ pic.twitter.com/eJh4f2zncC

— San Diego Boo πŸ‘» Wildlife Alliance \(@sandiegozoo\) October 26, 2021
\s*`, }, } { // overload getJSON to return mock API response from Twitter diff --git a/tpl/tplimpl/embedded/templates.autogen.go b/tpl/tplimpl/embedded/templates.autogen.go index 8e691af4cb9..de8c8296ae2 100644 --- a/tpl/tplimpl/embedded/templates.autogen.go +++ b/tpl/tplimpl/embedded/templates.autogen.go @@ -589,47 +589,107 @@ if (!doNotTrack) { {`shortcodes/relref.html`, `{{ relref . .Params }}`}, {`shortcodes/twitter.html`, `{{- $pc := .Page.Site.Config.Privacy.Twitter -}} {{- if not $pc.Disable -}} -{{- if $pc.Simple -}} -{{ template "_internal/shortcodes/twitter_simple.html" . }} -{{- else -}} -{{- $url := printf "https://api.twitter.com/1/statuses/oembed.json?id=%v&dnt=%t" (index .Params 0) $pc.EnableDNT -}} -{{- $json := getJSON $url -}} -{{ $json.html | safeHTML }} + {{- if $pc.Simple -}} + {{- template "_internal/shortcodes/twitter_simple.html" . -}} + {{- else -}} + {{- $id := "" -}} + {{- $user := "" -}} + {{- $msg1 := "The %q shortcode requires a parameter named %q. See %s" -}} + {{- $msg2 := "The %q shortcode now requires two named parameters: user and id. See %s" -}} + + {{- if .IsNamedParams -}} + {{- with .Get "id" -}} + {{- $id = . -}} + {{- else -}} + {{- errorf $msg1 .Name "id" .Position -}} + {{- end -}} + {{- with .Get "user" -}} + {{- $user = . -}} + {{- else -}} + {{- errorf $msg1 .Name "user" .Position -}} + {{- end -}} + {{- else -}} + {{- if eq 1 (len .Params) -}} + {{- $id = .Get 0 -}} + {{- $user = "x" -}} {{/* This triggers a redirect. It works, but may not work forever. */}} + {{- warnf $msg2 .Name .Position }} + {{- else -}} + {{- $id = .Get 1 -}} + {{- $user = .Get 0 -}} + {{- end -}} + {{- end -}} + + {{- $url := printf "https://twitter.com/%v/status/%v" $user $id -}} + {{- $query := querify "url" $url "dnt" $pc.EnableDNT -}} + {{- $request := printf "https://publish.twitter.com/oembed?%s" $query -}} + {{- $json := getJSON $request -}} + {{- $json.html | safeHTML -}} + {{- end -}} {{- end -}} -{{- end -}}`}, +`}, {`shortcodes/twitter_simple.html`, `{{- $pc := .Page.Site.Config.Privacy.Twitter -}} {{- $sc := .Page.Site.Config.Services.Twitter -}} {{- if not $pc.Disable -}} -{{- $id := .Get 0 -}} -{{- $json := getJSON "https://api.twitter.com/1/statuses/oembed.json?id=" $id "&omit_script=true" -}} -{{- if not $sc.DisableInlineCSS -}} -{{ template "__h_simple_twitter_css" $ }} -{{- end -}} -{{ $json.html | safeHTML }} + {{- $id := "" -}} + {{- $user := "" -}} + {{- $msg1 := "The %q shortcode requires a parameter named %q. See %s" -}} + {{- $msg2 := "The %q shortcode now requires two named parameters: user and id. See %s" -}} + + {{- if .IsNamedParams -}} + {{- with .Get "id" -}} + {{- $id = . -}} + {{- else -}} + {{- errorf $msg1 .Name "id" .Position -}} + {{- end -}} + {{- with .Get "user" -}} + {{- $user = . -}} + {{- else -}} + {{- errorf $msg1 .Name "user" .Position -}} + {{- end -}} + {{- else -}} + {{- if eq 1 (len .Params) -}} + {{- $id = .Get 0 -}} + {{- $user = "x" -}} {{/* This triggers a redirect. It works, but may not work forever. */}} + {{- warnf $msg2 .Name .Position -}} + {{- else -}} + {{- $id = .Get 1 -}} + {{- $user = .Get 0 -}} + {{- end -}} + {{- end -}} + + {{- $url := printf "https://twitter.com/%v/status/%v" $user $id -}} + {{- $query := querify "url" $url "omit_script" true -}} + {{- $request := printf "https://publish.twitter.com/oembed?%s" $query -}} + {{- $json := getJSON $request -}} + {{- if not $sc.DisableInlineCSS -}} + {{- template "__h_simple_twitter_css" $ -}} + {{- end }} + {{ $json.html | safeHTML -}} {{- end -}} -{{ define "__h_simple_twitter_css" }} -{{ if not (.Page.Scratch.Get "__h_simple_twitter_css") }} -{{/* Only include once */}} -{{ .Page.Scratch.Set "__h_simple_twitter_css" true }} - -{{ end }} -{{ end }}`}, +{{- define "__h_simple_twitter_css" -}} + {{- if not (.Page.Scratch.Get "__h_simple_twitter_css") -}} + {{/* Only include once */}} + {{- .Page.Scratch.Set "__h_simple_twitter_css" true }} + + {{- end -}} +{{- end -}} +`}, {`shortcodes/vimeo.html`, `{{- $pc := .Page.Site.Config.Privacy.Vimeo -}} {{- if not $pc.Disable -}} {{- if $pc.Simple -}} diff --git a/tpl/tplimpl/embedded/templates/shortcodes/twitter.html b/tpl/tplimpl/embedded/templates/shortcodes/twitter.html index e2c4983d754..bb82800d33f 100644 --- a/tpl/tplimpl/embedded/templates/shortcodes/twitter.html +++ b/tpl/tplimpl/embedded/templates/shortcodes/twitter.html @@ -1,10 +1,39 @@ {{- $pc := .Page.Site.Config.Privacy.Twitter -}} {{- if not $pc.Disable -}} -{{- if $pc.Simple -}} -{{ template "_internal/shortcodes/twitter_simple.html" . }} -{{- else -}} -{{- $url := printf "https://api.twitter.com/1/statuses/oembed.json?id=%v&dnt=%t" (index .Params 0) $pc.EnableDNT -}} -{{- $json := getJSON $url -}} -{{ $json.html | safeHTML }} + {{- if $pc.Simple -}} + {{- template "_internal/shortcodes/twitter_simple.html" . -}} + {{- else -}} + {{- $id := "" -}} + {{- $user := "" -}} + {{- $msg1 := "The %q shortcode requires a parameter named %q. See %s" -}} + {{- $msg2 := "The %q shortcode now requires two named parameters: user and id. See %s" -}} + + {{- if .IsNamedParams -}} + {{- with .Get "id" -}} + {{- $id = . -}} + {{- else -}} + {{- errorf $msg1 .Name "id" .Position -}} + {{- end -}} + {{- with .Get "user" -}} + {{- $user = . -}} + {{- else -}} + {{- errorf $msg1 .Name "user" .Position -}} + {{- end -}} + {{- else -}} + {{- if eq 1 (len .Params) -}} + {{- $id = .Get 0 -}} + {{- $user = "x" -}} {{/* This triggers a redirect. It works, but may not work forever. */}} + {{- warnf $msg2 .Name .Position }} + {{- else -}} + {{- $id = .Get 1 -}} + {{- $user = .Get 0 -}} + {{- end -}} + {{- end -}} + + {{- $url := printf "https://twitter.com/%v/status/%v" $user $id -}} + {{- $query := querify "url" $url "dnt" $pc.EnableDNT -}} + {{- $request := printf "https://publish.twitter.com/oembed?%s" $query -}} + {{- $json := getJSON $request -}} + {{- $json.html | safeHTML -}} + {{- end -}} {{- end -}} -{{- end -}} \ No newline at end of file diff --git a/tpl/tplimpl/embedded/templates/shortcodes/twitter_simple.html b/tpl/tplimpl/embedded/templates/shortcodes/twitter_simple.html index 45d594fd9af..1979d13556a 100644 --- a/tpl/tplimpl/embedded/templates/shortcodes/twitter_simple.html +++ b/tpl/tplimpl/embedded/templates/shortcodes/twitter_simple.html @@ -1,33 +1,62 @@ {{- $pc := .Page.Site.Config.Privacy.Twitter -}} {{- $sc := .Page.Site.Config.Services.Twitter -}} {{- if not $pc.Disable -}} -{{- $id := .Get 0 -}} -{{- $json := getJSON "https://api.twitter.com/1/statuses/oembed.json?id=" $id "&omit_script=true" -}} -{{- if not $sc.DisableInlineCSS -}} -{{ template "__h_simple_twitter_css" $ }} -{{- end -}} -{{ $json.html | safeHTML }} + {{- $id := "" -}} + {{- $user := "" -}} + {{- $msg1 := "The %q shortcode requires a parameter named %q. See %s" -}} + {{- $msg2 := "The %q shortcode now requires two named parameters: user and id. See %s" -}} + + {{- if .IsNamedParams -}} + {{- with .Get "id" -}} + {{- $id = . -}} + {{- else -}} + {{- errorf $msg1 .Name "id" .Position -}} + {{- end -}} + {{- with .Get "user" -}} + {{- $user = . -}} + {{- else -}} + {{- errorf $msg1 .Name "user" .Position -}} + {{- end -}} + {{- else -}} + {{- if eq 1 (len .Params) -}} + {{- $id = .Get 0 -}} + {{- $user = "x" -}} {{/* This triggers a redirect. It works, but may not work forever. */}} + {{- warnf $msg2 .Name .Position -}} + {{- else -}} + {{- $id = .Get 1 -}} + {{- $user = .Get 0 -}} + {{- end -}} + {{- end -}} + + {{- $url := printf "https://twitter.com/%v/status/%v" $user $id -}} + {{- $query := querify "url" $url "omit_script" true -}} + {{- $request := printf "https://publish.twitter.com/oembed?%s" $query -}} + {{- $json := getJSON $request -}} + {{- if not $sc.DisableInlineCSS -}} + {{- template "__h_simple_twitter_css" $ -}} + {{- end }} + {{ $json.html | safeHTML -}} {{- end -}} -{{ define "__h_simple_twitter_css" }} -{{ if not (.Page.Scratch.Get "__h_simple_twitter_css") }} -{{/* Only include once */}} -{{ .Page.Scratch.Set "__h_simple_twitter_css" true }} - -{{ end }} -{{ end }} \ No newline at end of file +{{- define "__h_simple_twitter_css" -}} + {{- if not (.Page.Scratch.Get "__h_simple_twitter_css") -}} + {{/* Only include once */}} + {{- .Page.Scratch.Set "__h_simple_twitter_css" true }} + + {{- end -}} +{{- end -}}