refactor: revise pre-fetch mode of mermaid

This commit is contained in:
jeffreytse 2020-06-22 18:43:28 +08:00
parent a3cc560007
commit 7e495e9468

View File

@ -20,7 +20,7 @@ module Jekyll::Spaceship
'config': { 'config': {
'theme' => 'default' 'theme' => 'default'
}, },
'src' => 'https://mermaid.ink/img/' 'src' => 'https://mermaid.ink/svg/'
} }
end end
@ -63,14 +63,6 @@ module Jekyll::Spaceship
# encode to UTF-8 # encode to UTF-8
code = code.encode('UTF-8') code = code.encode('UTF-8')
# wrap code
code = {
'code' => code.gsub(/^\s*|\s*$/, ''),
'mermaid' => config['config']
}.to_json
# encode to base64 string
code = Base64.urlsafe_encode64(code, padding: false)
url = get_url(code) url = get_url(code)
# render mode # render mode
@ -85,15 +77,35 @@ module Jekyll::Spaceship
end end
def get_url(code) def get_url(code)
"#{config['src']}#{code}" src = self.config['src']
# wrap code
code = {
'code' => code.gsub(/^\s*|\s*$/, ''),
'mermaid' => config['config']
}.to_json
# set default method
src += '{code}' if src.match(/\{.*\}/).nil?
# encode to base64 string
if src.include?('{code}')
code = Base64.urlsafe_encode64(code, padding: false)
return src.gsub('{code}', code)
else
raise "No supported src ! #{src}"
end
end end
def get_mermaid_img_data(url) def get_mermaid_img_data(url)
data = '' data = ''
begin begin
data = Net::HTTP.get URI(url) res = Net::HTTP.get_response URI(url)
data = Base64.encode64(data) raise res.body unless res.is_a?(Net::HTTPSuccess)
data = "data:image/png;base64, #{data}" data = Base64.encode64(res.body)
content_type = res.header['Content-Type']
raise 'Unknown content type!' if content_type.nil?
data = "data:#{content_type};base64, #{data}"
rescue StandardError => msg rescue StandardError => msg
data = url data = url
logger.log msg logger.log msg