URI: 
       Add instagram_simple shortcode - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit 9ad46a20357a7e28b405feef5c8f7d4501186da6
   DIR parent 4256de3392d320a5a47fcab49882f2a3249c2163
  HTML Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Wed, 23 May 2018 12:26:10 +0200
       
       Add instagram_simple shortcode
       
       Fixes #4748
       
       Diffstat:
         M config/privacy/privacyConfig.go     |       4 ++++
         M config/privacy/privacyConfig_test.… |       4 ++++
         M config/services/servicesConfig.go   |       9 +++++++++
         M config/services/servicesConfig_tes… |       3 +++
         M tpl/tplimpl/embedded/templates.aut… |      59 +++++++++++++++++++++++++++++--
         M tpl/tplimpl/embedded/templates/sho… |       3 ++-
         M tpl/tplimpl/embedded/templates/sho… |       8 +++++++-
         A tpl/tplimpl/embedded/templates/sho… |      49 +++++++++++++++++++++++++++++++
       
       8 files changed, 135 insertions(+), 4 deletions(-)
       ---
   DIR diff --git a/config/privacy/privacyConfig.go b/config/privacy/privacyConfig.go
       @@ -53,6 +53,10 @@ type GoogleAnalytics struct {
        // Instagram holds the privacy configuration settings related to the Instagram shortcode.
        type Instagram struct {
                Service `mapstructure:",squash"`
       +
       +        // If simple mode is enabled, a static and no-JS version of the Instagram
       +        // image card will be built.
       +        Simple bool
        }
        
        // SpeakerDeck holds the privacy configuration settings related to the SpeakerDeck shortcode.
   DIR diff --git a/config/privacy/privacyConfig_test.go b/config/privacy/privacyConfig_test.go
       @@ -36,6 +36,7 @@ disable = true
        respectDoNotTrack = true
        [privacy.instagram]
        disable = true
       +simple = true
        [privacy.speakerDeck]
        disable = true
        [privacy.tweet]
       @@ -45,6 +46,7 @@ disable = true
        [privacy.youtube]
        disable = true
        privacyEnhanced = true
       +simple = true
        `
                cfg, err := config.FromConfigString(tomlConfig, "toml")
                assert.NoError(err)
       @@ -57,12 +59,14 @@ privacyEnhanced = true
                assert.True(pc.GoogleAnalytics.Disable)
                assert.True(pc.GoogleAnalytics.RespectDoNotTrack)
                assert.True(pc.Instagram.Disable)
       +        assert.True(pc.Instagram.Simple)
                assert.True(pc.SpeakerDeck.Disable)
                assert.True(pc.Tweet.Disable)
                assert.True(pc.Vimeo.Disable)
        
                assert.True(pc.YouTube.PrivacyEnhanced)
                assert.True(pc.YouTube.Disable)
       +        assert.True(pc.YouTube.Simple)
        }
        
        func TestDecodeConfigFromTOMLCaseInsensitive(t *testing.T) {
   DIR diff --git a/config/services/servicesConfig.go b/config/services/servicesConfig.go
       @@ -29,6 +29,7 @@ const (
        type Config struct {
                Disqus          Disqus
                GoogleAnalytics GoogleAnalytics
       +        Instagram       Instagram
        }
        
        // Disqus holds the functional configuration settings related to the Disqus template.
       @@ -43,6 +44,14 @@ type GoogleAnalytics struct {
                ID string
        }
        
       +// Instagram holds the functional configuration settings related to the Instagram shortcodes.
       +type Instagram struct {
       +        // The Simple variant of the Instagram is decorated with Bootstrap 4 card classes.
       +        // This means that if you use Bootstrap 4 or want to provide your own CSS, you want
       +        // to disable the inline CSS provided by Hugo.
       +        DisableInlineCSS bool
       +}
       +
        func DecodeConfig(cfg config.Provider) (c Config, err error) {
                m := cfg.GetStringMap(servicesConfigKey)
        
   DIR diff --git a/config/services/servicesConfig_test.go b/config/services/servicesConfig_test.go
       @@ -33,6 +33,8 @@ someOtherValue = "foo"
        shortname = "DS"
        [services.googleAnalytics]
        id = "ga_id"
       +[services.instagram]
       +disableInlineCSS = true
        `
                cfg, err := config.FromConfigString(tomlConfig, "toml")
                assert.NoError(err)
       @@ -44,6 +46,7 @@ id = "ga_id"
                assert.Equal("DS", config.Disqus.Shortname)
                assert.Equal("ga_id", config.GoogleAnalytics.ID)
        
       +        assert.True(config.Instagram.DisableInlineCSS)
        }
        
        // Support old root-level GA settings etc.
   DIR diff --git a/tpl/tplimpl/embedded/templates.autogen.go b/tpl/tplimpl/embedded/templates.autogen.go
       @@ -241,7 +241,8 @@ if (!doNotTrack) {
        <!-- Output all taxonomies as schema.org keywords -->
        <meta itemprop="keywords" content="{{ if .IsPage}}{{ range $index, $tag := .Params.tags }}{{ $tag }},{{ end }}{{ else }}{{ range $plural, $terms := .Site.Taxonomies }}{{ range $term, $val := $terms }}{{ printf "%s," $term }}{{ end }}{{ end }}{{ end }}" />
        {{ end }}`},
       -        {`shortcodes/__h_simple_assets.html`, `{{ define "__h_simple_css" }}{{/* This is also used in other "simple" variants. These template definitions are global. */}}
       +        {`shortcodes/__h_simple_assets.html`, `{{ define "__h_simple_css" }}{{/* These template definitions are global. */}}
       +{{/* TODO(bep) rename this to Youtube something. We need to add these per service. */}}
        {{ if not (.Page.Scratch.Get "__h_simple_css") }}
        {{/* Only include once */}}
        {{  .Page.Scratch.Set "__h_simple_css" true }}
       @@ -298,8 +299,62 @@ M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.5
                {`shortcodes/highlight.html`, `{{ if len .Params | eq 2 }}{{ highlight (trim .Inner "\n\r") (.Get 0) (.Get 1) }}{{ else }}{{ highlight (trim .Inner "\n\r") (.Get 0) "" }}{{ end }}`},
                {`shortcodes/instagram.html`, `{{- $pc := .Page.Site.Config.Privacy.Instagram -}}
        {{- if not $pc.Disable -}}
       -{{ if len .Params | eq 2 }}{{ if eq (.Get 1) "hidecaption" }}{{ with getJSON "https://api.instagram.com/oembed/?url=https://instagram.com/p/" (index .Params 0) "/&hidecaption=1" }}{{ .html | safeHTML }}{{ end }}{{ end }}{{ else }}{{ with getJSON "https://api.instagram.com/oembed/?url=https://instagram.com/p/" (index .Params 0) "/&hidecaption=0" }}{{ .html | safeHTML }}{{ end }}{{ end }}
       +{{- if $pc.Simple -}}
       +{{ template "_internal/shortcodes/instagram_simple.html" . }}
       +{{- else -}}
       +{{ $id := .Get 0 }}
       +{{ $hideCaption := cond (eq (.Get 1) "hidecaption") "1" "0" }}
       +{{ with getJSON "https://api.instagram.com/oembed/?url=https://instagram.com/p/" $id "/&hidecaption=" $hideCaption  }}{{ .html | safeHTML }}{{ end }}
       +{{- end -}}
        {{- end -}}`},
       +        {`shortcodes/instagram_simple.html`, `{{- $pc := .Page.Site.Config.Privacy.Instagram -}}
       +{{- $sc := .Page.Site.Config.Services.Instagram -}}
       +{{- if not $pc.Disable -}}
       +{{- $id := .Get 0 -}}
       +{{- $item := getJSON "https://api.instagram.com/oembed/?url=https://www.instagram.com/p/" $id "/&amp;maxwidth=640&amp;omitscript=true" -}}
       +{{- $class1 := "__h_instagram" -}}
       +{{- $class2 := "s_instagram_simple" -}}
       +{{- $hideCaption := (eq (.Get 1) "hidecaption") -}}
       +{{ with $item }}
       +{{- $mediaURL := printf "https://instagram.com/p/%s/" $id | safeURL -}}
       +{{- if not $sc.DisableInlineCSS -}}
       +{{ template "__h_simple_instagram_css" $ }}
       +{{- end -}}
       +<div class="{{ $class1 }} {{ $class2 }} card" style="max-width: {{ $item.thumbnail_width }}px">
       +        <div class="card-header">
       +    <a href="{{ $item.author_url | safeURL }}" class="card-link">{{ $item.author_name }}</a>
       +  </div>
       +        <a href="{{ $mediaURL }}" target="_blank"><img class="card-img-top img-fluid" src="{{ $item.thumbnail_url }}" width="{{ $item.thumbnail_width }}"  height="{{ $item.thumbnail_height }}" alt="Instagram Image"></a>
       +        <div class="card-body">
       +                {{ if not $hideCaption }}<p class="card-text"><a href="{{ $item.author_url | safeURL }}" class="card-link">{{ $item.author_name }}</a> {{ $item.title}}</p>{{ end }}
       +                <a href="{{ $item.author_url | safeURL }}" class="card-link">Vew More on Instagram</a>
       +        </div>
       +</div>
       +{{ end }}
       +{{- end -}}
       +
       +{{ define "__h_simple_instagram_css" }}
       +{{ if not (.Page.Scratch.Get "__h_simple_instagram_css") }}
       +{{/* Only include once */}}
       +{{  .Page.Scratch.Set "__h_simple_instagram_css" true }}
       +<style type="text/css">
       +   .__h_instagram.card {
       +           font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
       +           font-size: 14px;
       +      border: 1px solid rgb(219, 219, 219);
       +      padding: 0;
       +      margin: 0;
       +   }
       +   .__h_instagram.card .card-header, .__h_instagram.card .card-body {
       +      padding: 10px 10px 10px;
       +   }
       +   .__h_instagram.card img {
       +      width: 100%;
       +            height: auto;
       +   }
       +</style>
       +{{ end }}
       +{{ end }}`},
                {`shortcodes/ref.html`, `{{ if len .Params | eq 2 }}{{ ref .Page (.Get 0) (.Get 1) }}{{ else }}{{ ref .Page (.Get 0) }}{{ end }}`},
                {`shortcodes/relref.html`, `{{ if len .Params | eq 2 }}{{ relref .Page (.Get 0) (.Get 1) }}{{ else }}{{ relref .Page (.Get 0) }}{{ end }}`},
                {`shortcodes/speakerdeck.html`, `{{- $pc := .Page.Site.Config.Privacy.SpeakerDeck -}}
   DIR diff --git a/tpl/tplimpl/embedded/templates/shortcodes/__h_simple_assets.html b/tpl/tplimpl/embedded/templates/shortcodes/__h_simple_assets.html
       @@ -1,4 +1,5 @@
       -{{ define "__h_simple_css" }}{{/* This is also used in other "simple" variants. These template definitions are global. */}}
       +{{ define "__h_simple_css" }}{{/* These template definitions are global. */}}
       +{{/* TODO(bep) rename this to Youtube something. We need to add these per service. */}}
        {{ if not (.Page.Scratch.Get "__h_simple_css") }}
        {{/* Only include once */}}
        {{  .Page.Scratch.Set "__h_simple_css" true }}
   DIR diff --git a/tpl/tplimpl/embedded/templates/shortcodes/instagram.html b/tpl/tplimpl/embedded/templates/shortcodes/instagram.html
       @@ -1,4 +1,10 @@
        {{- $pc := .Page.Site.Config.Privacy.Instagram -}}
        {{- if not $pc.Disable -}}
       -{{ if len .Params | eq 2 }}{{ if eq (.Get 1) "hidecaption" }}{{ with getJSON "https://api.instagram.com/oembed/?url=https://instagram.com/p/" (index .Params 0) "/&hidecaption=1" }}{{ .html | safeHTML }}{{ end }}{{ end }}{{ else }}{{ with getJSON "https://api.instagram.com/oembed/?url=https://instagram.com/p/" (index .Params 0) "/&hidecaption=0" }}{{ .html | safeHTML }}{{ end }}{{ end }}
       +{{- if $pc.Simple -}}
       +{{ template "_internal/shortcodes/instagram_simple.html" . }}
       +{{- else -}}
       +{{ $id := .Get 0 }}
       +{{ $hideCaption := cond (eq (.Get 1) "hidecaption") "1" "0" }}
       +{{ with getJSON "https://api.instagram.com/oembed/?url=https://instagram.com/p/" $id "/&hidecaption=" $hideCaption  }}{{ .html | safeHTML }}{{ end }}
       +{{- end -}}
        {{- end -}}
        \ No newline at end of file
   DIR diff --git a/tpl/tplimpl/embedded/templates/shortcodes/instagram_simple.html b/tpl/tplimpl/embedded/templates/shortcodes/instagram_simple.html
       @@ -0,0 +1,48 @@
       +{{- $pc := .Page.Site.Config.Privacy.Instagram -}}
       +{{- $sc := .Page.Site.Config.Services.Instagram -}}
       +{{- if not $pc.Disable -}}
       +{{- $id := .Get 0 -}}
       +{{- $item := getJSON "https://api.instagram.com/oembed/?url=https://www.instagram.com/p/" $id "/&amp;maxwidth=640&amp;omitscript=true" -}}
       +{{- $class1 := "__h_instagram" -}}
       +{{- $class2 := "s_instagram_simple" -}}
       +{{- $hideCaption := (eq (.Get 1) "hidecaption") -}}
       +{{ with $item }}
       +{{- $mediaURL := printf "https://instagram.com/p/%s/" $id | safeURL -}}
       +{{- if not $sc.DisableInlineCSS -}}
       +{{ template "__h_simple_instagram_css" $ }}
       +{{- end -}}
       +<div class="{{ $class1 }} {{ $class2 }} card" style="max-width: {{ $item.thumbnail_width }}px">
       +        <div class="card-header">
       +    <a href="{{ $item.author_url | safeURL }}" class="card-link">{{ $item.author_name }}</a>
       +  </div>
       +        <a href="{{ $mediaURL }}" target="_blank"><img class="card-img-top img-fluid" src="{{ $item.thumbnail_url }}" width="{{ $item.thumbnail_width }}"  height="{{ $item.thumbnail_height }}" alt="Instagram Image"></a>
       +        <div class="card-body">
       +                {{ if not $hideCaption }}<p class="card-text"><a href="{{ $item.author_url | safeURL }}" class="card-link">{{ $item.author_name }}</a> {{ $item.title}}</p>{{ end }}
       +                <a href="{{ $item.author_url | safeURL }}" class="card-link">Vew More on Instagram</a>
       +        </div>
       +</div>
       +{{ end }}
       +{{- end -}}
       +
       +{{ define "__h_simple_instagram_css" }}
       +{{ if not (.Page.Scratch.Get "__h_simple_instagram_css") }}
       +{{/* Only include once */}}
       +{{  .Page.Scratch.Set "__h_simple_instagram_css" true }}
       +<style type="text/css">
       +   .__h_instagram.card {
       +           font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
       +           font-size: 14px;
       +      border: 1px solid rgb(219, 219, 219);
       +      padding: 0;
       +      margin: 0;
       +   }
       +   .__h_instagram.card .card-header, .__h_instagram.card .card-body {
       +      padding: 10px 10px 10px;
       +   }
       +   .__h_instagram.card img {
       +      width: 100%;
       +            height: auto;
       +   }
       +</style>
       +{{ end }}
       +{{ end }}
       +\ No newline at end of file