summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoe Mooring <joe.mooring@veriphor.com>2021-10-31 03:56:36 -0700
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2021-11-01 15:51:00 +0100
commit0cc39af68232f1a4981aae2e72cf65da762b5768 (patch)
treeda1c6a143d93544f5d9df2646128f2ae79ca7c3f
parented6fd26ce884c49b02497728a99e90b92dd65f1f (diff)
Update Twitter shortcode oEmbed endpoint
The existing endpoint will be retired and removed on November 23, 2021. References: - https://twittercommunity.com/t/consolidating-the-oembed-functionality/154690 - https://developer.twitter.com/en/docs/twitter-for-websites/oembed-api#Embedded This is a backward compatible change. The existing endpoint requires a single parameter: the id of the tweet. The new endpoint requires two parameters: the id of the tweet, and the user with whom it is associated. For the moment, if you supply the wrong user, the request will be redirected (with a small delay) to the correct user/id pair. This behavior is undocumented, but we will take advantage of it as Hugo site authors transition to the new syntax. {{< tweet 1453110110599868418 >}} --> works, throws warning, deprecate at some point {{< tweet user="SanDiegoZoo" id="1453110110599868418" >}} --> new syntax Fixes #8130
-rw-r--r--docs/content/en/content-management/related.md2
-rw-r--r--docs/content/en/content-management/shortcodes.md10
-rw-r--r--docs/content/en/showcase/letsencrypt/index.md2
-rw-r--r--docs/content/en/troubleshooting/faq.md2
-rw-r--r--hugolib/embedded_shortcodes_test.go16
-rw-r--r--tpl/tplimpl/embedded/templates.autogen.go120
-rw-r--r--tpl/tplimpl/embedded/templates/shortcodes/twitter.html39
-rw-r--r--tpl/tplimpl/embedded/templates/shortcodes/twitter_simple.html79
8 files changed, 191 insertions, 79 deletions
diff --git a/docs/content/en/content-management/related.md b/docs/content/en/content-management/related.md
index c0728fe99..a42cec32e 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 7d271041b..013532ce4 100644
--- a/docs/content/en/content-management/shortcodes.md
+++ b/docs/content/en/content-management/shortcodes.md
@@ -310,15 +310,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" >}}
-{{</* tweet 877500564405444608 */>}}
+{{</* tweet user="SanDiegoZoo" id="1453110110599868418" */>}}
{{< /code >}}
#### Example `tweet` Output
@@ -326,14 +326,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 8487a3c77..fc57a26b8 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 66ea78630..6e90bd0d4 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 b56368ddd..895b3a959 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&mdash; 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&mdash; 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)^<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Hugo 0.15 will have 30%. faster render times thanks to this commit <a href="https://t.co/FfzhM8bNhT">https://t.co/FfzhM8bNhT</a> <a href="https://twitter.com/hashtag/gohugo.src=hash">#gohugo</a> <a href="https://twitter.com/hashtag/golang.src=hash">#golang</a> <a href="https://t.co/ITbMNU2BUf">https://t.co/ITbMNU2BUf</a></p>&mdash; Steve Francia .@spf13. <a href="https://twitter.com/spf13/status/666616452582129664">November 17, 2015</a></blockquote>.*?<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>`,
+ `{"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)<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Hugo 0.15 will have 30%\+ faster render times thanks to this commit <a href="https://t.co/FfzhM8bNhT">https://t.co/FfzhM8bNhT</a> <a href="https://twitter.com/hashtag/gohugo\?src=hash&amp;ref_src=twsrc%5Etfw">#gohugo</a> <a href="https://twitter.com/hashtag/golang\?src=hash&amp;ref_src=twsrc%5Etfw">#golang</a> <a href="https://t.co/ITbMNU2BUf">https://t.co/ITbMNU2BUf</a></p>&mdash; Steve Francia \(@spf13\) <a href="https://twitter.com/spf13/status/666616452582129664\?ref_src=twsrc%5Etfw">November 17, 2015</a></blockquote>\s*<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>`,
+ },
+ {
+ 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)<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Owl bet you&#39;ll lose this staring contest 🦉 <a href="https://t.co/eJh4f2zncC">pic.twitter.com/eJh4f2zncC</a></p>&mdash; San Diego Boo 👻 Wildlife Alliance \(@sandiegozoo\) <a href="https://twitter.com/sandiegozoo/status/1453110110599868418\?ref_src=twsrc%5Etfw">October 26, 2021</a></blockquote>\s*<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>`,
},
} {
// 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 8e691af4c..5394cbc7a 100644
--- a/tpl/tplimpl/embedded/templates.autogen.go
+++ b/tpl/tplimpl/embedded/templates.autogen.go
@@ -589,47 +589,99 @@ 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 -}}
+ {{- $msg1 := "The %q shortcode requires two named parameters: user and id. See %s" -}}
+ {{- $msg2 := "The %q shortcode will soon require two named parameters: user and id. See %s" -}}
+ {{- if .IsNamedParams -}}
+ {{- $id := .Get "id" -}}
+ {{- $user := .Get "user" -}}
+ {{- if and $id $user -}}
+ {{- template "render-tweet" (dict "id" $id "user" $user "dnt" $pc.EnableDNT) -}}
+ {{- else -}}
+ {{- errorf $msg1 .Name .Position -}}
+ {{- end -}}
+ {{- else -}}
+ {{- $id := .Get 1 -}}
+ {{- $user := .Get 0 -}}
+ {{- 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 -}}
+ {{- end -}}
+ {{- template "render-tweet" (dict "id" $id "user" $user "dnt" $pc.EnableDNT) -}}
+ {{- end -}}
+ {{- end -}}
{{- end -}}
-{{- end -}}`},
+
+{{- define "render-tweet" -}}
+ {{- $url := printf "https://twitter.com/%v/status/%v" .user .id -}}
+ {{- $query := querify "url" $url "dnt" .dnt -}}
+ {{- $request := printf "https://publish.twitter.com/oembed?%s" $query -}}
+ {{- $json := getJSON $request -}}
+ {{- $json.html | safeHTML -}}
+{{- 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" $ }}
+ {{- $msg1 := "The %q shortcode requires two named parameters: user and id. See %s" -}}
+ {{- $msg2 := "The %q shortcode will soon require two named parameters: user and id. See %s" -}}
+ {{- if .IsNamedParams -}}
+ {{- $id := .Get "id" -}}
+ {{- $user := .Get "user" -}}
+ {{- if and $id $user -}}
+ {{- template "render-simple-tweet" (dict "id" $id "user" $user "dnt" $pc.EnableDNT "disableInlineCSS" $sc.DisableInlineCSS "ctx" .) -}}
+ {{- else -}}
+ {{- errorf $msg1 .Name .Position -}}
+ {{- end -}}
+ {{- else -}}
+ {{- $id := .Get 1 -}}
+ {{- $user := .Get 0 -}}
+ {{- 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 -}}
+ {{- end -}}
+ {{- template "render-simple-tweet" (dict "id" $id "user" $user "dnt" $pc.EnableDNT "disableInlineCSS" $sc.DisableInlineCSS "ctx" .) -}}
+ {{- end -}}
{{- end -}}
-{{ $json.html | safeHTML }}
+
+{{- define "render-simple-tweet" -}}
+ {{- $url := printf "https://twitter.com/%v/status/%v" .user .id -}}
+ {{- $query := querify "url" $url "dnt" .dnt "omit_script" true -}}
+ {{- $request := printf "https://publish.twitter.com/oembed?%s" $query -}}
+ {{- $json := getJSON $request -}}
+ {{- if not .disableInlineCSS -}}
+ {{- template "__h_simple_twitter_css" .ctx -}}
+ {{- 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 }}
-<style type="text/css">
- .twitter-tweet {
- font: 14px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
- border-left: 4px solid #2b7bb9;
- padding-left: 1.5em;
- color: #555;
-}
- .twitter-tweet a {
- color: #2b7bb9;
- text-decoration: none;
-}
- blockquote.twitter-tweet a:hover,
- blockquote.twitter-tweet a:focus {
- text-decoration: underline;
-}
-</style>
-{{ 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 }}
+ <style type="text/css">
+ .twitter-tweet {
+ font: 14px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
+ border-left: 4px solid #2b7bb9;
+ padding-left: 1.5em;
+ color: #555;
+ }
+ .twitter-tweet a {
+ color: #2b7bb9;
+ text-decoration: none;
+ }
+ blockquote.twitter-tweet a:hover,
+ blockquote.twitter-tweet a:focus {
+ text-decoration: underline;
+ }
+ </style>
+ {{- 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 e2c4983d7..2f1d2323e 100644
--- a/tpl/tplimpl/embedded/templates/shortcodes/twitter.html
+++ b/tpl/tplimpl/embedded/templates/shortcodes/twitter.html
@@ -1,10 +1,35 @@
{{- $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 -}}
+ {{- $msg1 := "The %q shortcode requires two named parameters: user and id. See %s" -}}
+ {{- $msg2 := "The %q shortcode will soon require two named parameters: user and id. See %s" -}}
+ {{- if .IsNamedParams -}}
+ {{- $id := .Get "id" -}}
+ {{- $user := .Get "user" -}}
+ {{- if and $id $user -}}
+ {{- template "render-tweet" (dict "id" $id "user" $user "dnt" $pc.EnableDNT) -}}
+ {{- else -}}
+ {{- errorf $msg1 .Name .Position -}}
+ {{- end -}}
+ {{- else -}}
+ {{- $id := .Get 1 -}}
+ {{- $user := .Get 0 -}}
+ {{- 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 -}}
+ {{- end -}}
+ {{- template "render-tweet" (dict "id" $id "user" $user "dnt" $pc.EnableDNT) -}}
+ {{- end -}}
+ {{- end -}}
+{{- end -}}
+
+{{- define "render-tweet" -}}
+ {{- $url := printf "https://twitter.com/%v/status/%v" .user .id -}}
+ {{- $query := querify "url" $url "dnt" .dnt -}}
+ {{- $request := printf "https://publish.twitter.com/oembed?%s" $query -}}
+ {{- $json := getJSON $request -}}
+ {{- $json.html | safeHTML -}}
{{- 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 45d594fd9..0127fbe22 100644
--- a/tpl/tplimpl/embedded/templates/shortcodes/twitter_simple.html
+++ b/tpl/tplimpl/embedded/templates/shortcodes/twitter_simple.html
@@ -1,33 +1,58 @@
{{- $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" $ }}
+ {{- $msg1 := "The %q shortcode requires two named parameters: user and id. See %s" -}}
+ {{- $msg2 := "The %q shortcode will soon require two named parameters: user and id. See %s" -}}
+ {{- if .IsNamedParams -}}
+ {{- $id := .Get "id" -}}
+ {{- $user := .Get "user" -}}
+ {{- if and $id $user -}}
+ {{- template "render-simple-tweet" (dict "id" $id "user" $user "dnt" $pc.EnableDNT "disableInlineCSS" $sc.DisableInlineCSS "ctx" .) -}}
+ {{- else -}}
+ {{- errorf $msg1 .Name .Position -}}
+ {{- end -}}
+ {{- else -}}
+ {{- $id := .Get 1 -}}
+ {{- $user := .Get 0 -}}
+ {{- 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 -}}
+ {{- end -}}
+ {{- template "render-simple-tweet" (dict "id" $id "user" $user "dnt" $pc.EnableDNT "disableInlineCSS" $sc.DisableInlineCSS "ctx" .) -}}
+ {{- end -}}
{{- end -}}
-{{ $json.html | safeHTML }}
+
+{{- define "render-simple-tweet" -}}
+ {{- $url := printf "https://twitter.com/%v/status/%v" .user .id -}}
+ {{- $query := querify "url" $url "dnt" .dnt "omit_script" true -}}
+ {{- $request := printf "https://publish.twitter.com/oembed?%s" $query -}}
+ {{- $json := getJSON $request -}}
+ {{- if not .disableInlineCSS -}}
+ {{- template "__h_simple_twitter_css" .ctx -}}
+ {{- 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 }}
-<style type="text/css">
- .twitter-tweet {
- font: 14px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
- border-left: 4px solid #2b7bb9;
- padding-left: 1.5em;
- color: #555;
-}
- .twitter-tweet a {
- color: #2b7bb9;
- text-decoration: none;
-}
- blockquote.twitter-tweet a:hover,
- blockquote.twitter-tweet a:focus {
- text-decoration: underline;
-}
-</style>
-{{ 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 }}
+ <style type="text/css">
+ .twitter-tweet {
+ font: 14px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
+ border-left: 4px solid #2b7bb9;
+ padding-left: 1.5em;
+ color: #555;
+ }
+ .twitter-tweet a {
+ color: #2b7bb9;
+ text-decoration: none;
+ }
+ blockquote.twitter-tweet a:hover,
+ blockquote.twitter-tweet a:focus {
+ text-decoration: underline;
+ }
+ </style>
+ {{- end -}}
+{{- end -}}