From 7efffe6acd2fb43e636b580b9fade5c0f5f43414 Mon Sep 17 00:00:00 2001 From: Sphericalkat Date: Mon, 29 May 2023 23:52:24 +0530 Subject: [PATCH] feat: add support for embedded content (iframes & gists) Signed-off-by: Sphericalkat --- frontend/src/show.css | 4 ++++ pkg/converters/embedded_converter.go | 34 +++++++++++++++++++++++++++ pkg/converters/paragraph_converter.go | 4 +++- pkg/entities/medium_response.go | 13 +++++++++- 4 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 pkg/converters/embedded_converter.go diff --git a/frontend/src/show.css b/frontend/src/show.css index 80c10bd..2e56e4b 100644 --- a/frontend/src/show.css +++ b/frontend/src/show.css @@ -18,3 +18,7 @@ html, body { line-height: 1.7777778; } } + +.gist tbody tr { + border: none !important; +} diff --git a/pkg/converters/embedded_converter.go b/pkg/converters/embedded_converter.go new file mode 100644 index 0000000..5eb8664 --- /dev/null +++ b/pkg/converters/embedded_converter.go @@ -0,0 +1,34 @@ +package converters + +import ( + "fmt" + "net/url" + "strings" + + "github.com/medium.rip/pkg/entities" + log "github.com/sirupsen/logrus" +) + +func ConvertEmbedded(media entities.MediaResource) string { + if media.IframeSrc == "" { + return customEmbed(media) + } else { + return fmt.Sprintf("", media.IframeSrc, media.IframeWidth, media.IframeHeight) + } +} + +func customEmbed(media entities.MediaResource) string { + if strings.HasPrefix(media.Href, "https://gist.github.com") { + return fmt.Sprintf("", media.Href) + } else { + url, err := url.Parse(media.Href) + var caption string + if err != nil { + log.Warnf("Error parsing url %s", media.Href) + caption = media.Href + } else { + caption = fmt.Sprintf("Embedded content at %s", url.Host) + } + return fmt.Sprintf("
%s
", media.Href, caption) + } +} \ No newline at end of file diff --git a/pkg/converters/paragraph_converter.go b/pkg/converters/paragraph_converter.go index abf31d1..37eb868 100644 --- a/pkg/converters/paragraph_converter.go +++ b/pkg/converters/paragraph_converter.go @@ -85,7 +85,9 @@ func ConvertParagraphs(paragraphs []entities.Paragraph) string { } else { ps.WriteString(fmt.Sprintf("

%s

", children)) } - // TODO: handle IFRAME + case "IFRAME": + child := ConvertEmbedded(p.Iframe.MediaResource) + ps.WriteString(child) case "IMG": ps.WriteString(convertImg(p)) case "OLI": diff --git a/pkg/entities/medium_response.go b/pkg/entities/medium_response.go index 5370398..f0fb531 100644 --- a/pkg/entities/medium_response.go +++ b/pkg/entities/medium_response.go @@ -35,6 +35,17 @@ type BodyModel struct { Paragraphs []Paragraph `json:"paragraphs"` } +type MediaResource struct { + Href string `json:"href"` + IframeSrc string `json:"iframeSrc"` + IframeWidth int64 `json:"iframeWidth"` + IframeHeight int64 `json:"iframeHeight"` +} + +type Iframe struct { + MediaResource MediaResource `json:"mediaResource"` +} + type Paragraph struct { Name string `json:"name"` Text string `json:"text"` @@ -42,7 +53,7 @@ type Paragraph struct { Href interface{} `json:"href"` Layout *string `json:"layout"` Markups []Markup `json:"markups"` - Iframe interface{} `json:"iframe"` + Iframe *Iframe `json:"iframe"` Metadata *Metadata `json:"metadata"` }