lib/slodown.rb in slodown-0.1.1 vs lib/slodown.rb in slodown-0.1.2
- old
+ new
@@ -2,107 +2,17 @@
require 'rinku'
require 'kramdown'
require 'coderay'
require 'sanitize'
+require "kramdown/converter/slodown_html"
require "slodown/version"
+require "slodown/formatter"
+require "slodown/embed_transformer"
+# Register all known oEmbed providers.
+#
OEmbed::Providers.register_all
-class Kramdown::Converter::SloblogHtml < Kramdown::Converter::Html
- def convert_img(el, indent)
- oembed = OEmbed::Providers.get(el.attr['src'])
- %q(<div class="embedded %s %s">%s</div>) % [oembed.type, oembed.provider_name.parameterize, oembed.html]
- rescue OEmbed::NotFound
- super
- end
-end
-
module Slodown
- class EmbedTransformer
- ALLOWED_DOMAINS = %w[youtube.com soundcloud.com vimeo.com]
-
- def self.call(env)
- node = env[:node]
- node_name = env[:node_name]
-
- return if env[:is_whitelisted] || !env[:node].element?
- return unless %w[iframe embed].include? env[:node_name]
-
- uri = URI(env[:node]['src'])
- domains = ALLOWED_DOMAINS.map { |d| Regexp.escape(d) }.join("|")
- return unless uri.host =~ /^(.+\.)?(#{domains})/
-
- Sanitize.clean_node!(node, {
- elements: %w[iframe embed],
- attributes: {
- all: %w[allowfullscreen frameborder height src width]
- }
- })
-
- { node_whitelist: [node] }
- end
- end
-
- class Formatter
- def initialize(source)
- @current = @source = source.to_s
- end
-
- def complete
- markdown.autolink.sanitize
- end
-
- def markdown
- @current = Kramdown::Document.new(@current).to_sloblog_html
- self
- end
-
- def autolink
- @current = Rinku.auto_link(@current)
- self
- end
-
- def sanitize(mode = :normal)
- @current = case mode
- when :normal
- Sanitize.clean(@current,
- elements: %w(
- p a span sub sup strong em div hr abbr
- ul ol li
- blockquote pre code
- h1 h2 h3 h4 h5 h6
- img object param del
- ),
- attributes: {
- :all => ['class', 'style', 'title'],
- 'a' => ['href', 'rel', 'name'],
- 'li' => ['id'],
- 'sup' => ['id'],
- 'img' => ['src', 'title', 'alt', 'width', 'height'],
- 'object' => ['width', 'height'],
- 'param' => ['name', 'value'],
- 'embed' => ['allowscriptaccess', 'width', 'height', 'src'],
- 'iframe' => ['width', 'height', 'src']
- },
- protocols: {
- 'a' => { 'href' => ['ftp', 'http', 'https', 'mailto', '#fn', '#fnref', :relative] },
- 'img' => {'src' => ['http', 'https', :relative]},
- 'iframe' => {'src' => ['http', 'https']},
- 'embed' => {'src' => ['http', 'https']},
- 'object' => {'src' => ['http', 'https']},
- 'li' => {'id' => ['fn']},
- 'sup' => {'id' => ['fnref']}
- },
- transformers: EmbedTransformer)
- else
- Sanitize.clean(@current)
- end
-
- self
- end
-
- def to_s
- @current
- end
- end
+ # Our main module. Not much happening here. I like huskies.
end