Bonjour, J'utilise HAML pour rendre mes articles de blog et j'ai décidé de migrer vers la nouvelle version de Ruby, la nouvelle version de Rails et la nouvelle version de HAML. Le problème est qu'il semble quelque chose a changé et je ne peux pas identifier ce qui ne va pas avec mon code.Comment migrer l'assistant HAML vers HAML 4?
Quelqu'un pourrait-il m'expliquer ce qui doit être changé pour fonctionner avec la nouvelle version?
MISE À JOUR: il peut être Réalisés liée à Redcarpet et non HAML, mais pas sûr: 3
Comme vous le verrez-je utiliser ce moteur de rendu personnalisé pour afficher automatiquement Tweets ou des chansons de Spotify de leurs liens. Identique pour les blocs de code colorés par CodeRay.
module Haml::Filters
require "net/https"
require "uri"
include Haml::Filters::Base
class MarkdownRenderer < Redcarpet::Render::HTML
def block_code(code, language)
CodeRay.highlight(code, language, {:line_number_anchors => false, :css => :class})
end
def autolink(link, link_type)
twitterReg = /https?:\/\/twitter\.com\/[a-zA-Z]+\/status(es)?\/([0-9]+)/
spotifyReg = /(https?:\/\/open.spotify.com\/(track|user|artist|album)\/[a-zA-Z0-9]+(\/playlist\/[a-zA-Z0-9]+|)|spotify:(track|user|artist|album):[a-zA-Z0-9]+(:playlist:[a-zA-Z0-9]+|))/
if link_type == :url
if link =~ twitterReg
tweet = twitterReg.match(link)
urlTweet = tweet[0]
idTweet = tweet[2]
begin
uri = URI.parse("https://api.twitter.com/1/statuses/oembed.json?id=#{idTweet}")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
jsonTweet = ActiveSupport::JSON.decode(response.body)
jsonTweet["html"]
rescue Exception => e
"<a href='#{link}'><span data-title='#{link}'>#{link}</span></a>"
end
elsif link =~ spotifyReg
spotify = $1
htmlSpotify = "<iframe style=\"width: 80%; height: 80px;\" src=\"https://embed.spotify.com/?uri=#{spotify}\" frameborder=\"0\" allowtransparency=\"true\"></iframe>"
htmlSpotify
else
"<a href='#{link}'><span data-title='#{link}'>#{link}</span></a>"
end
end
end
def link(link, title, content)
"<a href='#{link}'><span data-title='#{content}'>#{content}</span></a>"
end
def postprocess(full_document)
full_document.gsub!(/<p><img/, "<p class='images'><img")
full_document.gsub!(/<p><iframe/, "<p class='iframes'><iframe")
full_document
end
end
def render(text)
Redcarpet::Markdown.new(MarkdownRenderer.new(:hard_wrap => true), :tables => true, :fenced_code_blocks => true, :autolink => true, :strikethrough => true).render(text)
end
end
Merci de nous aider;)!
Si vous obtenez une erreur, vous devriez l'envoyer avec votre question. – toro2k
Il n'y a pas d'erreur, ça ne fonctionne pas (la seule partie qui fonctionne est la méthode post-traitement). (link, autolink et block_code ne fonctionnent pas). – Fantattitude
Dans votre code, vous ajoutez directement au module 'Haml :: Filters'. Est-ce une faute de frappe - avez-vous un module 'Markdown'? – matt