mirror of
https://github.com/SphericalKat/medium.rip.git
synced 2024-11-16 11:25:57 +00:00
feat: add support for embedded content (iframes & gists)
Signed-off-by: Sphericalkat <amolele@gmail.com>
This commit is contained in:
parent
03b74fd90a
commit
7efffe6acd
@ -18,3 +18,7 @@ html, body {
|
|||||||
line-height: 1.7777778;
|
line-height: 1.7777778;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.gist tbody tr {
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
34
pkg/converters/embedded_converter.go
Normal file
34
pkg/converters/embedded_converter.go
Normal file
@ -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("<iframe src=\"%s\" width=\"%d\" height=\"%d\" frameborder=\"0\" allowfullscreen=\"true\" ></iframe>", media.IframeSrc, media.IframeWidth, media.IframeHeight)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func customEmbed(media entities.MediaResource) string {
|
||||||
|
if strings.HasPrefix(media.Href, "https://gist.github.com") {
|
||||||
|
return fmt.Sprintf("<script src=\"%s.js\"></script>", 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("<figure><a href=\"%s\">%s</a></figure>", media.Href, caption)
|
||||||
|
}
|
||||||
|
}
|
@ -85,7 +85,9 @@ func ConvertParagraphs(paragraphs []entities.Paragraph) string {
|
|||||||
} else {
|
} else {
|
||||||
ps.WriteString(fmt.Sprintf("<h4>%s</h4>", children))
|
ps.WriteString(fmt.Sprintf("<h4>%s</h4>", children))
|
||||||
}
|
}
|
||||||
// TODO: handle IFRAME
|
case "IFRAME":
|
||||||
|
child := ConvertEmbedded(p.Iframe.MediaResource)
|
||||||
|
ps.WriteString(child)
|
||||||
case "IMG":
|
case "IMG":
|
||||||
ps.WriteString(convertImg(p))
|
ps.WriteString(convertImg(p))
|
||||||
case "OLI":
|
case "OLI":
|
||||||
|
@ -35,6 +35,17 @@ type BodyModel struct {
|
|||||||
Paragraphs []Paragraph `json:"paragraphs"`
|
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 {
|
type Paragraph struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Text string `json:"text"`
|
Text string `json:"text"`
|
||||||
@ -42,7 +53,7 @@ type Paragraph struct {
|
|||||||
Href interface{} `json:"href"`
|
Href interface{} `json:"href"`
|
||||||
Layout *string `json:"layout"`
|
Layout *string `json:"layout"`
|
||||||
Markups []Markup `json:"markups"`
|
Markups []Markup `json:"markups"`
|
||||||
Iframe interface{} `json:"iframe"`
|
Iframe *Iframe `json:"iframe"`
|
||||||
Metadata *Metadata `json:"metadata"`
|
Metadata *Metadata `json:"metadata"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user