aboutsummaryrefslogtreecommitdiff
path: root/themes/default/layouts/partials/function-generate-feeds.html
blob: 57789b5e82de08dd36669997f6f3b4a1e5001a62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
{{- $author := partial "function-authors-data.html" . -}}

{{- $feeds := slice -}}

{{- if $author.feeds.rss -}}
  {{- range $key, $value := (seq 3) -}}
    {{- range $author.feeds.rss -}}

      {{- $data    := split . " " -}}
      {{- $url     := delimit (first 1 $data) "" -}}
      {{- $retitle := trim (delimit (after 1 $data) " ") " " -}}

      {{- with $fetch := cond (default true $.Site.Params.site.offline) false (resources.GetRemote $url) -}}

          {{- with $error := .Err -}}
            {{- warnf "Feed fetch %s" $error -}}
          {{- else -}}

          {{- with $fetch | transform.Unmarshal -}}

            {{- $content           := "" -}}
            {{- $date              := now | time.Format "2006-01-02T15:04:05Z" -}}
            {{- $description       := "" -}}
            {{- $enclosure         := "" -}}
            {{- $imageLink         := "" -}}
            {{- $link              := "https://example.com/link/" -}}
            {{- $sourceDescription := "" -}}
            {{- $sourceHome        := "" -}}
            {{- $sourceLink        := $url -}}
            {{- $sourceTitle       := "No source title found" -}}
            {{- $title             := "No Title Found" -}}

            {{- with .channel -}}

              {{- $sourceTitle       = .title -}}
              {{- $sourceDescription = .description -}}

              {{- if reflect.IsSlice .link -}}
                {{- if reflect.IsMap (index .link 0) -}}
                  {{- $sourceHome = index (last 1 .link) 0 -}}
                {{- else -}}
                  {{- $sourceHome = index .link 0 -}}
                {{- end -}}
              {{- end -}}

              {{- with .image -}}
                {{- $imageLink = .url -}}
              {{- end -}}

              {{- with .item -}}
                {{- if reflect.IsMap . -}}
                    {{- $title = index . "title" -}}
                    {{- $link  = index . "link" -}}
                    {{- $date  = index . "pubDate" -}}
                {{- else -}}
                  {{- range first $value . -}}
                    {{- $description = .description -}}
                    {{- $content     = .description -}}
                    {{- $title       = .title -}}
                    {{- $link        = .link -}}
                    {{- $date        = .pubDate -}}
                    {{- with .enclosure -}}
                      {{- $enclosure = index . "-url" -}}
                    {{- end -}}
                  {{- end -}}
                {{- end -}}
              {{- end -}}

              {{- if not $date -}}
                {{- $date = .lastBuildDate -}}
              {{- end -}}

            {{- else -}}

              {{- with .author -}}
                {{- if reflect.IsMap . -}}
                  {{- $sourceHome = .uri -}}
                {{- end -}}
              {{- end -}}

              {{- with .subtitle -}}
                {{- if reflect.IsMap . -}}
                  {{- $sourceDescription = index . "#text" -}}
                {{- else -}}
                  {{- $sourceDescription = . -}}
                {{- end -}}
              {{- end -}}

              {{- with .title -}}
                {{- if reflect.IsMap . -}}
                  {{- $sourceTitle = index . "#text" -}}
                {{- else -}}
                  {{- $sourceTitle = . -}}
                {{- end -}}
              {{- end -}}

              {{- with .entry -}}
                {{- range first $value . -}}
                  {{- $date = .updated -}}

                  {{- with .link -}}
                    {{- if reflect.IsMap . -}}
                      {{- $link = index . "-href" -}}
                    {{- else -}}
                      {{- if reflect.IsMap (index . 0) -}}
                        {{- $link = index (index . 0) "-href" -}}
                      {{- else -}}
                        {{- $link = . -}}
                      {{- end -}}
                    {{- end -}}
                  {{- end -}}

                  {{- with .title -}}
                    {{- if reflect.IsMap . -}}
                      {{- $title = index . "#text" -}}
                    {{- else -}}
                      {{- $title = . -}}
                    {{- end -}}
                  {{- end -}}

                  {{- with .content -}}
                    {{- $content = index . "#text" -}}
                  {{- end -}}

                  {{- with .summary -}}
                    {{- $description = index . "#text" -}}
                  {{- end -}}

                  {{- with .group -}}
                    {{- $description = .description -}}
                    {{- $content     = index .content "#text" -}}
                    {{- $enclosure   = index .thumbnail "-url" -}}
                  {{- end -}}
                {{- end -}}
              {{- end -}}

            {{- end -}}

            {{- $sourceDomain := ($sourceLink | plainify | htmlUnescape | urls.Parse).Host -}}

            {{- /* Replace invalid time zones. */ -}}
            {{- $date = replaceRE "G[0-9]+T" "UTC" $date -}}

            {{- /* If missing seconds split and try again. */ -}}
            {{- if lt (len (split $date ":")) 3 -}}
              {{- $date = delimit (first 3 (after 1 (split $date " "))) " " -}}
            {{- end -}}

            {{- /* Try to complete enclosure relative links. */ -}}
            {{- if and (not ($enclosure | urls.Parse).Host) (not ($link | urls.Parse).Host) -}}
             {{- $enclosure = print "http://" $sourceDomain $link -}}
            {{- end -}}

            {{- /* Try to complete link relative links. */ -}}
            {{- if not ($link | urls.Parse).Host -}}
             {{- $link = print "http://" $sourceDomain $link -}}
            {{- end -}}

            {{-
              $feeds = $feeds | append (dict
                "FeedContent"           ($content | plainify | htmlUnescape)
                "FeedContentShort"      (delimit (first 2 (split ($content | plainify | htmlUnescape) "\n")) " " | truncate 250 "...")
                "FeedDate"              ($date | plainify | htmlUnescape | time.Format "Mon Jan 2 2006")
                "FeedDateTime"          ($date | plainify | htmlUnescape | time.Format "2006-01-02T15:04:05Z")
                "FeedDateTitle"         ($date | plainify | htmlUnescape | time.Format "Monday January 2 2006 at 15:04:05 MST")
                "FeedDescription"       ($description | plainify | htmlUnescape)
                "FeedDescriptionShort"  (delimit (first 2 (split ($description | plainify | htmlUnescape) "\n")) " " | truncate 250 "...")
                "FeedEnclosure"         ($enclosure | plainify | htmlUnescape)
                "FeedImageLink"         ($imageLink | plainify | htmlUnescape)
                "FeedLink"              ($link | plainify | htmlUnescape)
                "FeedName"              (or $retitle (delimit (first 2 (split ($sourceTitle | plainify | htmlUnescape) " ")) " "))
                "FeedSourceDescription" ($sourceDescription | plainify | htmlUnescape)
                "FeedSourceDomain"      ($sourceDomain | plainify | htmlUnescape)
                "FeedSourceLink"        ($sourceLink | plainify | htmlUnescape)
                "FeedSourceHome"        ($sourceHome | plainify | htmlUnescape)
                "FeedSourceTitle"       ($sourceTitle | plainify | htmlUnescape)
                "FeedTitle"             ($title | plainify | htmlUnescape)
              )
            -}}

          {{- end -}}
        {{- end -}}
      {{- end -}}
    {{- end -}}
  {{- end -}}

  {{- range $feeds -}}

    {{- $name := .FeedName -}}
    {{- $domain := .FeedSourceDomain -}}

    {{- $favicon := partial "function-favicon-domain.html" $domain -}}

    {{- with .FeedImageLink -}}
      {{- $favicon = . -}}
    {{- end -}}

    {{- $imageSource := partial "function-fetch-favicons.html"
      (dict
        "Context" $.Page
        "Source" $favicon
        "Infix"  (.FeedSourceLink | anchorize)
      )
    -}}

    {{- $template := resources.Get "templates/markdown-feed.yaml" -}}
    {{- $alias := truncate 255 "" (delimit (first 8 (split (.FeedTitle | urlize) "-")) "-" | humanize | urlize) -}}
    {{- $hash := .FeedLink | sha256 | truncate 8 "" -}}
    {{- $file := print $alias "-" $hash -}}
    {{- $file = partial "function-strip-filechars.html" $file -}}
    {{- $path := print "/data/generates/content/" $author.user "/feeds/" $file ".md" -}}

    {{- $content := .FeedContentShort -}}

    {{- if (gt (len .FeedTitle) (len $content)) -}}
     {{- $content = .FeedTitle -}}
    {{- end -}}

    {{- if (gt (len .FeedDescriptionShort) (len .FeedTitle)) -}}
     {{- $content = .FeedDescriptionShort -}}
    {{- end -}}

    {{- $markdown := resources.ExecuteAsTemplate
       $path
       (dict
        "author"      $author.user
        "content"     (or $content "No content found.")
        "date"        .FeedDateTime
        "description" (or .FeedSourceDescription .FeedSourceTitle "No source description found.")
        "domain"      .FeedSourceDomain
        "enclosure"   .FeedEnclosure
        "favicon"     (strings.TrimPrefix ("" | absURL) $imageSource.Permalink)
        "home"        .FeedSourceHome
        "link"        .FeedLink
        "name"        .FeedName
        "source"      .FeedSourceLink
        "tags"        "[feeds]"
       )
       $template
    -}}
    {{- $writeToFile := $markdown.Permalink -}}
  {{- end -}}
{{- end -}}

{{- return $feeds -}}