HTML-Formatting
* added simple_format for content content * added support for SyntaxHighlighter JS * finished rake tasks for blog
This commit is contained in:
		
							parent
							
								
									a45f502f44
								
							
						
					
					
						commit
						afb35f58ad
					
				@ -1,4 +1,3 @@
 | 
				
			|||||||
require 'nokogiri'
 | 
					 | 
				
			||||||
require 'wordpress'
 | 
					require 'wordpress'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace :wordpress do
 | 
					namespace :wordpress do
 | 
				
			||||||
@ -10,8 +9,8 @@ namespace :wordpress do
 | 
				
			|||||||
      p "Truncating #{table_name} ..."
 | 
					      p "Truncating #{table_name} ..."
 | 
				
			||||||
      ActiveRecord::Base.connection.execute "DELETE FROM #{table_name}"
 | 
					      ActiveRecord::Base.connection.execute "DELETE FROM #{table_name}"
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  desc "import blog data from a Refinery::WordPress XML dump"
 | 
					  desc "import blog data from a Refinery::WordPress XML dump"
 | 
				
			||||||
  task :import_blog, :file_name do |task, params|
 | 
					  task :import_blog, :file_name do |task, params|
 | 
				
			||||||
@ -20,47 +19,18 @@ namespace :wordpress do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    dump.authors.each(&:to_refinery)
 | 
					    dump.authors.each(&:to_refinery)
 | 
				
			||||||
    dump.posts.each(&:to_refinery)
 | 
					    dump.posts.each(&:to_refinery)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ENV["MODEL"] = 'BlogPost'
 | 
				
			||||||
 | 
					    Rake::Task["friendly_id:redo_slugs"].invoke
 | 
				
			||||||
 | 
					    ENV["MODEL"] = nil
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  desc "reset blog tables and then import blog data from a Refinery::WordPress XML dump"
 | 
				
			||||||
 | 
					  task :reset_and_import_blog, :file_name do |task, params|
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  desc "Import data from a Refinery::WordPress XML dump"
 | 
					 | 
				
			||||||
  task :import, :file_name do |task, params|
 | 
					 | 
				
			||||||
    Rake::Task["environment"].invoke
 | 
					    Rake::Task["environment"].invoke
 | 
				
			||||||
 | 
					    Rake::Task["wordpress:reset_blog"].invoke
 | 
				
			||||||
 | 
					    Rake::Task["wordpress:import_blog"].invoke(params[:file_name])
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  desc "New import (testing)"
 | 
					 | 
				
			||||||
  task :new_import, :file_name do |task, params|
 | 
					 | 
				
			||||||
    Rake::Task["environment"].invoke
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    file_name = File.absolute_path(params[:file_name])
 | 
					 | 
				
			||||||
    unless File.file?(file_name) && File.readable?(file_name)
 | 
					 | 
				
			||||||
      raise "Given file '#{file_name}' no file or not readable."
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    dump = Refinery::WordPress::Dump.new(file_name)
 | 
					 | 
				
			||||||
    p dump.authors
 | 
					 | 
				
			||||||
    p dump.pages
 | 
					 | 
				
			||||||
    dump.posts.each do |post|
 | 
					 | 
				
			||||||
      p post.title
 | 
					 | 
				
			||||||
      p post.categories
 | 
					 | 
				
			||||||
      p post.tags
 | 
					 | 
				
			||||||
      p post.creator
 | 
					 | 
				
			||||||
      #p post.content
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  desc "Import data from a Refinery::WordPress XML dump into a clean database (reset first)"
 | 
					 | 
				
			||||||
  task :import_clean, :file_name do |task, params|
 | 
					 | 
				
			||||||
    Rake::Task["wordpress:reset"].invoke
 | 
					 | 
				
			||||||
    Rake::Task["wordpress:import"].invoke(params[:file_name])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,9 @@
 | 
				
			|||||||
module Refinery
 | 
					module Refinery
 | 
				
			||||||
  module WordPress
 | 
					  module WordPress
 | 
				
			||||||
    class Page
 | 
					    class Page
 | 
				
			||||||
 | 
					      include ::ActionView::Helpers::TagHelper
 | 
				
			||||||
 | 
					      include ::ActionView::Helpers::TextHelper
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      attr_reader :node
 | 
					      attr_reader :node
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      def initialize(node)
 | 
					      def initialize(node)
 | 
				
			||||||
@ -19,6 +22,31 @@ module Refinery
 | 
				
			|||||||
        node.xpath("content:encoded").text
 | 
					        node.xpath("content:encoded").text
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      def content_formatted
 | 
				
			||||||
 | 
					        # WordPress doesn't export <p>-Tags, so let's run a simple_format over
 | 
				
			||||||
 | 
					        # the content
 | 
				
			||||||
 | 
					        formatted = simple_format(content)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Support for SyntaxHighlighter:
 | 
				
			||||||
 | 
					        # In WordPress you can (via a plugin) enclose code in [lang][/lang]
 | 
				
			||||||
 | 
					        # blocks, which are converted to a <pre>-tag with a class corresponding
 | 
				
			||||||
 | 
					        # to the language.
 | 
				
			||||||
 | 
					        # 
 | 
				
			||||||
 | 
					        # Example:
 | 
				
			||||||
 | 
					        # [ruby]p "Hello World"[/ruby] 
 | 
				
			||||||
 | 
					        # -> <pre class="brush: ruby">p "Hello world"</pre> 
 | 
				
			||||||
 | 
					        formatted.gsub!(/\[(\w+)\]/, '<pre class="brush: \1">')
 | 
				
			||||||
 | 
					        formatted.gsub!(/\[\/\w+\]/, '</pre>')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # remove all tags inside <pre> that simple_format created
 | 
				
			||||||
 | 
					        # TODO: replace simple_format with a method, that ignores pre-tags
 | 
				
			||||||
 | 
					        formatted.gsub!(/(<pre.*?>)(.+?)(<\/pre>)/m) do |match| 
 | 
				
			||||||
 | 
					          "#{$1}#{strip_tags($2)}#{$3}"
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					        formatted
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      def creator
 | 
					      def creator
 | 
				
			||||||
        node.xpath("dc:creator").text
 | 
					        node.xpath("dc:creator").text
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
@ -51,7 +79,7 @@ module Refinery
 | 
				
			|||||||
        page = ::Page.create!(:title => title, :created_at => post_date, 
 | 
					        page = ::Page.create!(:title => title, :created_at => post_date, 
 | 
				
			||||||
                              :draft => draft?, :parent_id => parent_id)
 | 
					                              :draft => draft?, :parent_id => parent_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        page.parts.create(:title => 'Body', :body => content)
 | 
					        page.parts.create(:title => 'Body', :body => content_formatted)
 | 
				
			||||||
        page
 | 
					        page
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
				
			|||||||
@ -31,7 +31,7 @@ module Refinery
 | 
				
			|||||||
        post = BlogPost.new
 | 
					        post = BlogPost.new
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        post = ::BlogPost.create! :title => title, :body => content, :draft => draft?, 
 | 
					        post = ::BlogPost.create! :title => title, :body => content_formatted, :draft => draft?, 
 | 
				
			||||||
          :published_at => post_date, :created_at => post_date, :author => user,
 | 
					          :published_at => post_date, :created_at => post_date, :author => user,
 | 
				
			||||||
          :tag_list => tag_list
 | 
					          :tag_list => tag_list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -94,6 +94,9 @@ describe Refinery::WordPress::Dump, :type => :model do
 | 
				
			|||||||
      it { page.should_not == dump.pages.first }
 | 
					      it { page.should_not == dump.pages.first }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      describe "#to_refinery" do
 | 
					      describe "#to_refinery" do
 | 
				
			||||||
 | 
					        include ::ActionView::Helpers::TagHelper
 | 
				
			||||||
 | 
					        include ::ActionView::Helpers::TextHelper
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        before do
 | 
					        before do
 | 
				
			||||||
          # "About me" has a parent page with id 8 in the XML  dump, 
 | 
					          # "About me" has a parent page with id 8 in the XML  dump, 
 | 
				
			||||||
          # would otherwise fails creation
 | 
					          # would otherwise fails creation
 | 
				
			||||||
@ -111,7 +114,7 @@ describe Refinery::WordPress::Dump, :type => :model do
 | 
				
			|||||||
          @page.title.should == page.title
 | 
					          @page.title.should == page.title
 | 
				
			||||||
          @page.draft.should == page.draft?
 | 
					          @page.draft.should == page.draft?
 | 
				
			||||||
          @page.created_at.should == page.post_date
 | 
					          @page.created_at.should == page.post_date
 | 
				
			||||||
          @page.parts.first.body.should == "<p>#{page.content}</p>"
 | 
					          @page.parts.first.body.should == "#{simple_format(page.content)}"
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user