Sha256: 08406d3125393816cbbdb8b9a647fd085b2779cb1d7f01d923366d0c00f64440

Contents?: true

Size: 1.45 KB

Versions: 2

Compression:

Stored size: 1.45 KB

Contents

module SketchilyHelper
  def sketchily_show(uri, options = {})
    if options[:bkgd_color] || options[:bkgd_file]
      require 'nokogiri'
      doc = Nokogiri::XML(Base64.decode64(uri)) {|xml| xml.noblanks}

      if options[:bkgd_file]
        data_uri = "data:image/svg+xml;base64,#{Base64.strict_encode64(open(options[:bkgd_file]).read)}"
        bkgd_file_node = Nokogiri::XML::Node.new 'g', doc
        Nokogiri::XML::Builder.with(bkgd_file_node) do |xml|
          xml.title 'Background Image Layer'
          xml.image :id => 'background_image', :width => '100%', :height => '100%', :preserveAspectRatio => 'xMinYMin', 'xlink:href' => data_uri
        end
        doc.root.add_namespace "xmlns:xlink", "http://www.w3.org/1999/xlink"
        doc.at('g').before(bkgd_file_node)
      end

      if options[:bkgd_color]
        bkgd_color_node = Nokogiri::XML::Node.new 'g', doc
        Nokogiri::XML::Builder.with(bkgd_color_node) do |xml|
          xml.title 'Background Color Layer'
          xml.rect :id => 'background_color', :width => '100%', :height => '100%', :fill => "##{options[:bkgd_color]}"
        end
        doc.at('g').before(bkgd_color_node)
      end

      uri = Base64.strict_encode64(doc.to_xml)
    end

    "<img src='data:image/svg+xml;base64,#{uri}' #{"width='#{options[:width]}'" if options[:width]} #{"height='#{options[:height]}'" if options[:height]}/>".html_safe
  end

  def svg_show(uri, options = {})
    sketchily_show(uri, options)
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sketchily-4.0.0 app/helpers/sketchily_helper.rb~
sketchily-1.5.0 app/helpers/sketchily_helper.rb~