diff --git a/Gemfile b/Gemfile index 89d7671..5a1e6b5 100644 --- a/Gemfile +++ b/Gemfile @@ -6,8 +6,10 @@ gem "rails", "4.0.0" #gem "capybara", ">= 1.0.0.beta1" gem "sqlite3" gem "rmagick" +gem 'shortcode', :git => 'git@github.com:kernow/shortcode.git' group :development, :test do + gem 'byebug' gem "rspec-rails", ">= 2.6.0" gem "database_cleaner" gem 'guard-rspec' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..4bc2972 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,181 @@ +GIT + remote: git@github.com:kernow/shortcode.git + revision: 24516374d7571034aae2817401656cf0af5e6bf7 + specs: + shortcode (0.1.1) + haml (~> 4.0) + parslet (= 1.5.0) + +PATH + remote: ./ + specs: + wordpress-import (0.4.3) + bundler (~> 1.0) + nokogiri (~> 1.6.0) + shortcode (~> 0.1.1) + +GEM + remote: http://rubygems.org/ + specs: + actionmailer (4.0.0) + actionpack (= 4.0.0) + mail (~> 2.5.3) + actionpack (4.0.0) + activesupport (= 4.0.0) + builder (~> 3.1.0) + erubis (~> 2.7.0) + rack (~> 1.5.2) + rack-test (~> 0.6.2) + activemodel (4.0.0) + activesupport (= 4.0.0) + builder (~> 3.1.0) + activerecord (4.0.0) + activemodel (= 4.0.0) + activerecord-deprecated_finders (~> 1.0.2) + activesupport (= 4.0.0) + arel (~> 4.0.0) + activerecord-deprecated_finders (1.0.3) + activesupport (4.0.0) + i18n (~> 0.6, >= 0.6.4) + minitest (~> 4.2) + multi_json (~> 1.3) + thread_safe (~> 0.1) + tzinfo (~> 0.3.37) + arel (4.0.2) + atomic (1.1.15) + blankslate (2.1.2.4) + builder (3.1.4) + byebug (2.7.0) + columnize (~> 0.3) + debugger-linecache (~> 1.2) + celluloid (0.15.2) + timers (~> 1.1.0) + celluloid-io (0.15.0) + celluloid (>= 0.15.0) + nio4r (>= 0.5.0) + coderay (1.1.0) + columnize (0.3.6) + database_cleaner (1.2.0) + debugger-linecache (1.2.0) + diff-lcs (1.2.5) + erubis (2.7.0) + fakeweb (1.3.0) + ffi (1.9.3) + formatador (0.2.4) + guard (2.5.1) + formatador (>= 0.2.4) + listen (~> 2.6) + lumberjack (~> 1.0) + pry (>= 0.9.12) + thor (>= 0.18.1) + guard-bundler (2.0.0) + bundler (~> 1.0) + guard (~> 2.2) + guard-rspec (4.2.8) + guard (~> 2.1) + rspec (>= 2.14, < 4.0) + haml (4.0.5) + tilt + hike (1.2.3) + i18n (0.6.9) + libnotify (0.8.2) + ffi (>= 1.0.11) + listen (2.7.0) + celluloid (>= 0.15.2) + celluloid-io (>= 0.15.0) + rb-fsevent (>= 0.9.3) + rb-inotify (>= 0.9) + lumberjack (1.0.4) + mail (2.5.4) + mime-types (~> 1.16) + treetop (~> 1.4.8) + method_source (0.8.2) + mime-types (1.25.1) + mini_portile (0.5.2) + minitest (4.7.5) + multi_json (1.9.0) + nio4r (1.0.0) + nokogiri (1.6.1) + mini_portile (~> 0.5.0) + parslet (1.5.0) + blankslate (~> 2.0) + polyglot (0.3.4) + pry (0.9.12.6) + coderay (~> 1.0) + method_source (~> 0.8) + slop (~> 3.4) + rack (1.5.2) + rack-test (0.6.2) + rack (>= 1.0) + rails (4.0.0) + actionmailer (= 4.0.0) + actionpack (= 4.0.0) + activerecord (= 4.0.0) + activesupport (= 4.0.0) + bundler (>= 1.3.0, < 2.0) + railties (= 4.0.0) + sprockets-rails (~> 2.0.0) + railties (4.0.0) + actionpack (= 4.0.0) + activesupport (= 4.0.0) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (10.1.1) + rb-fsevent (0.9.4) + rb-inotify (0.9.3) + ffi (>= 0.5.0) + rmagick (2.13.2) + rspec (2.14.1) + rspec-core (~> 2.14.0) + rspec-expectations (~> 2.14.0) + rspec-mocks (~> 2.14.0) + rspec-core (2.14.8) + rspec-expectations (2.14.5) + diff-lcs (>= 1.1.3, < 2.0) + rspec-mocks (2.14.6) + rspec-rails (2.14.1) + actionpack (>= 3.0) + activemodel (>= 3.0) + activesupport (>= 3.0) + railties (>= 3.0) + rspec-core (~> 2.14.0) + rspec-expectations (~> 2.14.0) + rspec-mocks (~> 2.14.0) + slop (3.5.0) + sprockets (2.12.0) + hike (~> 1.2) + multi_json (~> 1.0) + rack (~> 1.0) + tilt (~> 1.1, != 1.3.0) + sprockets-rails (2.0.1) + actionpack (>= 3.0) + activesupport (>= 3.0) + sprockets (~> 2.8) + sqlite3 (1.3.9) + thor (0.18.1) + thread_safe (0.2.0) + atomic (>= 1.1.7, < 2) + tilt (1.4.1) + timers (1.1.0) + treetop (1.4.15) + polyglot + polyglot (>= 0.3.1) + tzinfo (0.3.39) + +PLATFORMS + ruby + +DEPENDENCIES + byebug + database_cleaner + fakeweb + ffi + guard-bundler + guard-rspec + libnotify + rails (= 4.0.0) + rmagick + rspec-rails (>= 2.6.0) + shortcode! + sqlite3 + wordpress-import! diff --git a/lib/wordpress.rb b/lib/wordpress.rb index 22aedd7..b6171af 100644 --- a/lib/wordpress.rb +++ b/lib/wordpress.rb @@ -1,5 +1,6 @@ require 'nokogiri' require "wordpress/railtie" +require 'shortcode' module WordPressImport autoload :Author, 'wordpress/author' diff --git a/lib/wordpress/page.rb b/lib/wordpress/page.rb index 55c6661..1613fe2 100644 --- a/lib/wordpress/page.rb +++ b/lib/wordpress/page.rb @@ -26,7 +26,7 @@ module WordPressImport end def content_formatted - formatted = format_syntax_highlighter(format_paragraphs(content)) + formatted = format_shortcodes(format_syntax_highlighter(format_paragraphs(content))) # remove all tags inside
that simple_format created
# TODO: replace format_paragraphs with a method, that ignores pre-tags
@@ -103,8 +103,8 @@ module WordPressImport
text = ''.html_safe if text.nil?
start_tag = tag('p', html_options, true)
- text.gsub!(/\r?\n/, "
\n") # \r\n and \n -> line break
- text.gsub!(/\n\n+/, "\n\n#{start_tag}") # 2+ newline -> paragraph
+ text.gsub!(/\n\n+/, "#{start_tag}") # 2+ newline -> paragraph
+ text.gsub!(/\r?\n/, "
\n") # \r\n and \n -> line break (must be after the paragraph detection to avoid
)
text.insert 0, start_tag
text.html_safe.safe_concat("")
@@ -121,5 +121,24 @@ module WordPressImport
# -> p "Hello world"
text.gsub(/\[(\w+)\](.+?)\[\/\1\]/m, '\2
')
end
+
+ # Replace Wordpress shortcodes with formatted HTML (see shortcode gem and support/templates folder)
+ def format_shortcodes(text)
+ Shortcode.setup do |config|
+ # the template parser to use
+ config.template_parser = :haml # :erb or :haml supported, :haml is default
+
+ # location of the template files
+ config.template_path = ::File.join(::File.dirname(__FILE__), "..", "..","support/templates/haml")
+
+ # a list of block tags to support e.g. [quote]Hello World[/quote]
+ config.block_tags = [:caption, :column]
+
+ # a list of self closing tags to support e.g. [youtube id="12345"]
+ config.self_closing_tags = [:end_columns, "google-map-v3"]
+ end
+
+ Shortcode.process(text)
+ end
end
end
diff --git a/support/templates/haml/caption.haml b/support/templates/haml/caption.haml
new file mode 100644
index 0000000..ab2a05b
--- /dev/null
+++ b/support/templates/haml/caption.haml
@@ -0,0 +1,24 @@
+-# disabling style_hash for now; setting the width = width+10 doesn't seem to actually be a good thing
+-# style_hash = {:style => "width: #{@attributes[:width].to_i+10}px"} unless @attributes[:width].blank?
+- figure_hash = {:class => @attributes[:align], :id => @attributes[:id]}
+-# figure_hash = figure_hash.merge(style_hash) if style_hash
+- content_image = Nokogiri::HTML(@content).css("img").to_html
+- content_caption = Nokogiri::HTML(@content).text + " #{@attributes[:caption]}"
+- @content = "#{content_image} #{content_caption} " unless content_image.blank?
+%figure{figure_hash}= @content
+
+-# sample wordpress-y css to go along with this html:
+ figure {
+ background: #f1f1f1;
+ margin-bottom: 20px;
+ padding: 4px;
+ text-align: center;
+ }
+ figure img {
+ margin: 5px 5px 0;
+ }
+ figure figcaption {
+ color: #777;
+ font-size: 12px;
+ margin: 5px 5px 24px;
+ }
\ No newline at end of file
diff --git a/support/templates/haml/column.haml b/support/templates/haml/column.haml
new file mode 100644
index 0000000..be5ee95
--- /dev/null
+++ b/support/templates/haml/column.haml
@@ -0,0 +1,4 @@
+.post_column_1{:style =>"width:#{@attributes[:width]}; float: left; padding: #{@attributes[:padding]} 6% #{@attributes[:padding]} #{@attributes[:padding]}; display: inline;"}= @content
+
+-#[column width="47%" padding="0"] foo [/column]
+-#
\ No newline at end of file
diff --git a/support/templates/haml/end_columns.haml b/support/templates/haml/end_columns.haml
new file mode 100644
index 0000000..e071ab7
--- /dev/null
+++ b/support/templates/haml/end_columns.haml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/support/templates/haml/google-map-v3.haml b/support/templates/haml/google-map-v3.haml
new file mode 100644
index 0000000..fda62af
--- /dev/null
+++ b/support/templates/haml/google-map-v3.haml
@@ -0,0 +1,37 @@
+- addmarkerlist = @attributes[:addmarkerlist].to_s || ""
+
+- name = addmarkerlist.split("{}").last
+- uri_name = URI::encode(name)
+- uri_address = URI::encode(addmarkerlist.split("{}").first)
+
+-# google will open up the business page if we pass it a name
+- uri_address = "#{uri_name},%20#{uri_address}" unless (uri_name == uri_address || name.blank?)
+
+- gmaps_url = "https://maps.google.com/maps/?q=#{uri_address}&ie=UTF8&t=m"
+
+View #{name} in a larger map
+
+
+-# [google-map-v3 width="425"
+ height="350"
+ zoom="12"
+ maptype="roadmap"
+ mapalign="left"
+ directionhint="false"
+ language="default"
+ poweredby="false"
+ maptypecontrol="true"
+ pancontrol="true"
+ zoomcontrol="true"
+ scalecontrol="true"
+ streetviewcontrol="true"
+ scrollwheelcontrol="false"
+ draggable="true"
+ tiltfourtyfive="false"
+ addmarkermashupbubble="false"
+ addmarkermashupbubble="false"
+ addmarkerlist="#1 Dream Manor Dr Globe, AZ{}1-default.png{}Dream Manor Inn"
+ bubbleautopan="true"
+ showbike="false"
+ showtraffic="false"
+ showpanoramio="false"]
\ No newline at end of file
diff --git a/wordpress-import.gemspec b/wordpress-import.gemspec
index 629e256..7609f2a 100644
--- a/wordpress-import.gemspec
+++ b/wordpress-import.gemspec
@@ -13,6 +13,7 @@ Gem::Specification.new do |s|
s.add_dependency 'bundler', '~> 1.0'
s.add_dependency 'nokogiri', '~> 1.6.0'
+ s.add_dependency 'shortcode', '~> 0.1.1'
s.add_development_dependency 'rspec-rails'
s.add_development_dependency 'database_cleaner'