aboutsummaryrefslogtreecommitdiffhomepage
path: root/reader/rewrite
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net>2017-11-19 21:10:04 -0800
committerGravatar Frédéric Guillot <fred@miniflux.net>2017-11-19 22:01:46 -0800
commit8ffb773f43c8dc54801ca1d111854e7e881c93c9 (patch)
tree38133a2fc612597a75fed1d13e5b4042f58a2b7e /reader/rewrite
First commit
Diffstat (limited to 'reader/rewrite')
-rw-r--r--reader/rewrite/rewriter.go47
-rw-r--r--reader/rewrite/rewriter_test.go34
2 files changed, 81 insertions, 0 deletions
diff --git a/reader/rewrite/rewriter.go b/reader/rewrite/rewriter.go
new file mode 100644
index 0000000..f23c0af
--- /dev/null
+++ b/reader/rewrite/rewriter.go
@@ -0,0 +1,47 @@
+// Copyright 2017 Frédéric Guillot. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+package rewrite
+
+import (
+ "regexp"
+ "strings"
+
+ "github.com/PuerkitoBio/goquery"
+)
+
+var rewriteRules = []func(string, string) string{
+ func(url, content string) string {
+ re := regexp.MustCompile(`youtube\.com/watch\?v=(.*)`)
+ matches := re.FindStringSubmatch(url)
+
+ if len(matches) == 2 {
+ video := `<iframe width="650" height="350" frameborder="0" src="https://www.youtube-nocookie.com/embed/` + matches[1] + `" allowfullscreen></iframe>`
+ return video + "<p>" + content + "</p>"
+ }
+ return content
+ },
+ func(url, content string) string {
+ if strings.HasPrefix(url, "https://xkcd.com") {
+ doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
+ if err != nil {
+ return content
+ }
+
+ imgTag := doc.Find("img").First()
+ if titleAttr, found := imgTag.Attr("title"); found {
+ return content + `<blockquote cite="` + url + `">` + titleAttr + "</blockquote>"
+ }
+ }
+ return content
+ },
+}
+
+func Rewriter(url, content string) string {
+ for _, rewriteRule := range rewriteRules {
+ content = rewriteRule(url, content)
+ }
+
+ return content
+}
diff --git a/reader/rewrite/rewriter_test.go b/reader/rewrite/rewriter_test.go
new file mode 100644
index 0000000..a666406
--- /dev/null
+++ b/reader/rewrite/rewriter_test.go
@@ -0,0 +1,34 @@
+// Copyright 2017 Frédéric Guillot. All rights reserved.
+// Use of this source code is governed by the Apache 2.0
+// license that can be found in the LICENSE file.
+
+package rewrite
+
+import "testing"
+
+func TestRewriteWithNoMatchingRule(t *testing.T) {
+ output := Rewriter("https://example.org/article", `Some text.`)
+ expected := `Some text.`
+
+ if expected != output {
+ t.Errorf(`Not expected output: got "%s" instead of "%s"`, output, expected)
+ }
+}
+
+func TestRewriteWithYoutubeLink(t *testing.T) {
+ output := Rewriter("https://www.youtube.com/watch?v=1234", `Video Description`)
+ expected := `<iframe width="650" height="350" frameborder="0" src="https://www.youtube-nocookie.com/embed/1234" allowfullscreen></iframe><p>Video Description</p>`
+
+ if expected != output {
+ t.Errorf(`Not expected output: got "%s" instead of "%s"`, output, expected)
+ }
+}
+
+func TestRewriteWithXkcdLink(t *testing.T) {
+ description := `<img src="https://imgs.xkcd.com/comics/thermostat.png" title="Your problem is so terrible, I worry that, if I help you, I risk drawing the attention of whatever god of technology inflicted it on you." alt="Your problem is so terrible, I worry that, if I help you, I risk drawing the attention of whatever god of technology inflicted it on you." />`
+ output := Rewriter("https://xkcd.com/1912/", description)
+ expected := description + `<blockquote cite="https://xkcd.com/1912/">Your problem is so terrible, I worry that, if I help you, I risk drawing the attention of whatever god of technology inflicted it on you.</blockquote>`
+ if expected != output {
+ t.Errorf(`Not expected output: got "%s" instead of "%s"`, output, expected)
+ }
+}