pulling blog feature into extension
This commit is contained in:
parent
5f2df57f33
commit
b39798a781
10
CHANGELOG
10
CHANGELOG
|
@ -1,6 +1,14 @@
|
|||
2.0.3
|
||||
=====
|
||||
- Pulled out undocumented Blog feature into its own extension
|
||||
|
||||
2.0.2
|
||||
=====
|
||||
- Fixed Sprockets circular error
|
||||
- Added auto-requiring extensions
|
||||
|
||||
2.0.0
|
||||
=====
|
||||
|
||||
- Guard-powered auto-reloading of config.rb
|
||||
- Guard LiveReload
|
||||
- Sprockets JS
|
||||
|
|
|
@ -141,9 +141,6 @@ module Middleman
|
|||
# words, paragraphs, fake images, names and email addresses.
|
||||
autoload :Lorem, "middleman/features/lorem"
|
||||
|
||||
# Treat project as a blog
|
||||
autoload :Blog, "middleman/features/blog"
|
||||
|
||||
# guard-livereload
|
||||
autoload :LiveReload, "middleman/features/live_reload"
|
||||
|
||||
|
|
|
@ -1,156 +0,0 @@
|
|||
module Middleman
|
||||
module Features
|
||||
module Blog
|
||||
class << self
|
||||
def registered(app)
|
||||
# Include helpers
|
||||
app.helpers Middleman::Features::Blog::Helpers
|
||||
|
||||
app.after_configuration do
|
||||
if !app.settings.respond_to? :blog_permalink
|
||||
app.set :blog_permalink, ":year/:month/:day/:title.html"
|
||||
end
|
||||
|
||||
if !app.settings.respond_to? :blog_taglink
|
||||
app.set :blog_taglink, "tags/:tag.html"
|
||||
end
|
||||
|
||||
if !app.settings.respond_to? :blog_layout
|
||||
app.set :blog_layout, "layout"
|
||||
end
|
||||
|
||||
if !app.settings.respond_to? :blog_summary_separator
|
||||
app.set :blog_summary_separator, /READMORE/
|
||||
end
|
||||
|
||||
if !app.settings.respond_to? :blog_summary_length
|
||||
app.set :blog_summary_length, 250
|
||||
end
|
||||
|
||||
if !app.settings.respond_to? :blog_layout_engine
|
||||
app.set :blog_layout_engine, "erb"
|
||||
end
|
||||
|
||||
if !app.settings.respond_to? :blog_index_template
|
||||
app.set :blog_index_template, "index_template"
|
||||
end
|
||||
|
||||
if !app.settings.respond_to? :blog_article_template
|
||||
app.set :blog_article_template, "article_template"
|
||||
end
|
||||
|
||||
if !app.build?
|
||||
$stderr.puts "== Blog: #{app.settings.blog_permalink}"
|
||||
end
|
||||
|
||||
app.get("/#{app.blog_permalink}") do
|
||||
process_request({
|
||||
:layout => app.blog_layout,
|
||||
:layout_engine => app.blog_layout_engine
|
||||
})
|
||||
|
||||
# No need for separator on permalink page
|
||||
body body.gsub!(app.blog_summary_separator, "")
|
||||
end
|
||||
end
|
||||
|
||||
app.before_processing do
|
||||
articles_glob = File.join(app.views, app.settings.blog_permalink.gsub(/(:\w+)/, "*") + ".*")
|
||||
|
||||
articles = Dir[articles_glob].map do |article|
|
||||
template_content = File.read(article)
|
||||
data, content = app.parse_front_matter(template_content)
|
||||
data["date"] = Date.parse(data["date"])
|
||||
|
||||
data["raw"] = content
|
||||
data["url"] = article.gsub(app.views, "").split(".html").first + ".html"
|
||||
|
||||
all_content = Tilt.new(article).render
|
||||
data["body"] = all_content.gsub!(app.settings.blog_summary_separator, "")
|
||||
|
||||
sum = if data["raw"] =~ app.settings.blog_summary_separator
|
||||
data["raw"].split(app.settings.blog_summary_separator).first
|
||||
else
|
||||
data["raw"].match(/(.{1,#{app.settings.blog_summary_length}}.*?)(\n|\Z)/m).to_s
|
||||
end
|
||||
|
||||
engine = app.settings.markdown_engine.new { sum }
|
||||
data["summary"] = engine.render
|
||||
data
|
||||
end.sort { |a, b| b["date"] <=> a["date"] }
|
||||
|
||||
tags = {}
|
||||
articles.each do |article|
|
||||
article["tags"] ||= ""
|
||||
if !article["tags"].empty?
|
||||
tags_array = article["tags"].split(',').map{|t| t.strip}
|
||||
tags_array.each do |tag_title|
|
||||
tag_key = tag_title.parameterize
|
||||
tag_path = blog_taglink.gsub(/(:\w+)/, tag_key)
|
||||
(tags[tag_path] ||= {})["title"] = tag_title
|
||||
tags[tag_path]["ident"] = tag_key
|
||||
(tags[tag_path]["pages"] ||= {})[article["title"]] = article["url"]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
app.data_content("blog", { :articles => articles, :tags => tags })
|
||||
true
|
||||
end
|
||||
end
|
||||
alias :included :registered
|
||||
end
|
||||
|
||||
module Helpers
|
||||
def is_blog_article?
|
||||
!current_article_title.blank?
|
||||
end
|
||||
|
||||
def blog_title
|
||||
end
|
||||
|
||||
def current_article_date
|
||||
DateTime.parse(current_article_metadata.date)
|
||||
end
|
||||
|
||||
def current_article_title
|
||||
current_article_metadata.title
|
||||
end
|
||||
|
||||
def current_article_metadata
|
||||
data.page
|
||||
end
|
||||
|
||||
def current_article_tags
|
||||
article_tags_hash = {}
|
||||
if is_blog_article? && current_article_metadata.tags
|
||||
article_tags = current_article_metadata.tags.split(',').map{|t| t.strip}
|
||||
article_tags.each do |tag_title|
|
||||
article_tags_hash[tag_title] = self.class.blog_taglink.gsub(/(:\w+)/, tag_title.parameterize)
|
||||
end
|
||||
end
|
||||
article_tags_hash
|
||||
end
|
||||
|
||||
def blog_tags
|
||||
data.blog.tags
|
||||
end
|
||||
|
||||
def current_tag_data
|
||||
data.blog.tags[request.path]
|
||||
end
|
||||
|
||||
def current_tag_articles
|
||||
data.blog.articles.map do |article|
|
||||
article if current_tag_data.pages.has_value?(article.url)
|
||||
end.compact
|
||||
end
|
||||
|
||||
def current_tag_title
|
||||
current_tag_data[:title]
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -46,9 +46,6 @@ end
|
|||
# Default template
|
||||
require "middleman/templates/default"
|
||||
|
||||
# Blog template
|
||||
require "middleman/templates/blog"
|
||||
|
||||
# HTML5 template
|
||||
require "middleman/templates/html5"
|
||||
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
class Middleman::Templates::Blog < Middleman::Templates::Base
|
||||
def self.source_root
|
||||
File.dirname(__FILE__)
|
||||
end
|
||||
|
||||
def build_scaffold
|
||||
template "blog/config.tt", File.join(location, "config.rb")
|
||||
directory "blog/source", File.join(location, "source")
|
||||
|
||||
empty_directory File.join(location, "source", options[:css_dir])
|
||||
empty_directory File.join(location, "source", options[:js_dir])
|
||||
empty_directory File.join(location, "source", options[:images_dir])
|
||||
end
|
||||
|
||||
def generate_rack
|
||||
template "blog/config.ru", File.join(location, "config.ru")
|
||||
end
|
||||
end
|
||||
|
||||
Middleman::Templates.register(:blog, Middleman::Templates::Blog)
|
|
@ -1,9 +0,0 @@
|
|||
# Rack config
|
||||
|
||||
# Look for index files in folders like Apache
|
||||
require "rack/contrib/try_static"
|
||||
use Rack::TryStatic, :root => "build", :urls => %w[/], :try => ['.html', 'index.html', '/index.html']
|
||||
|
||||
# Cache static assets
|
||||
require "rack/contrib/static_cache"
|
||||
use Rack::StaticCache, :urls => ['/'], :root => 'build'
|
|
@ -1,18 +0,0 @@
|
|||
activate :blog
|
||||
# set :blog_permalink, ":year/:month/:day/:title.html"
|
||||
# set :blog_summary_separator, /READMORE/
|
||||
# set :blog_summary_length, 500
|
||||
|
||||
page "/feed.xml", :layout => false
|
||||
|
||||
# Build-specific configuration
|
||||
configure :build do
|
||||
# For example, change the Compass output style for deployment
|
||||
# activate :minify_css
|
||||
|
||||
# Minify Javascript on build
|
||||
# activate :minify_javascript
|
||||
|
||||
# Enable cache buster
|
||||
# activate :cache_buster
|
||||
end
|
|
@ -1,6 +0,0 @@
|
|||
---
|
||||
title: "New Article title"
|
||||
date: 01/01/2011
|
||||
---
|
||||
|
||||
Content of my article
|
|
@ -1,10 +0,0 @@
|
|||
<h1>Archive: <%# @path %></h1>
|
||||
<ul class="archives">
|
||||
<% for entry in data.blog.articles %>
|
||||
<li>
|
||||
<a href="<%= entry.url %>"><%= entry.title %></a>
|
||||
<span><%= entry.date.strftime('%b %e') %></span>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
xml.instruct!
|
||||
xml.feed "xmlns" => "http://www.w3.org/2005/Atom" do
|
||||
xml.title "Blog Name"
|
||||
xml.subtitle "Blog subtitle"
|
||||
xml.id "http://blog.url.com/"
|
||||
xml.link "href" => "http://blog.url.com/"
|
||||
xml.link "href" => "http://blog.url.com/feed.xml", "rel" => "self"
|
||||
xml.updated data.blog.articles.first.date.to_time.iso8601
|
||||
xml.author { xml.name "Blog Author" }
|
||||
|
||||
data.blog.articles.each do |article|
|
||||
xml.entry do
|
||||
xml.title article.title
|
||||
xml.link "rel" => "alternate", "href" => article.url
|
||||
xml.id article.url
|
||||
xml.published article.date.to_time.iso8601
|
||||
xml.updated article.date.to_time.iso8601
|
||||
xml.author { xml.name "Article Author" }
|
||||
xml.summary article.summary, "type" => "html"
|
||||
xml.content article.body, "type" => "html"
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,9 +0,0 @@
|
|||
<% data.blog.articles[0...5].each_with_index do |article, i| %>
|
||||
<article class="<%= (i == 0) ? 'first' : '' %>">
|
||||
<h1><a href="<%= article.url %>"><%= article.title %></a> <span><%= article.date.strftime('%b %e %Y') %></span></h1>
|
||||
|
||||
<%= article.summary %>
|
||||
|
||||
<div class="more"><a href="<%= article.url %>">read on »</a></div>
|
||||
</article>
|
||||
<% end %>
|
|
@ -1,30 +0,0 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv='X-UA-Compatible' content='IE=edge;chrome=1' />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="main" role="main">
|
||||
<% if is_blog_article? %>
|
||||
<% content_for :blog_article, yield %>
|
||||
<%= partial settings.blog_article_template %>
|
||||
<% else %>
|
||||
<%= yield %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<aside>
|
||||
<h2>
|
||||
Recent Articles
|
||||
<a href="/archives">Archive</a>
|
||||
</h2>
|
||||
<ol>
|
||||
<% data.blog.articles[0...10].each do |article| %>
|
||||
<li><a href="<%= article.url %>"><%= article.title %></a> <span><%= article.date.strftime('%b %e') %></span></li>
|
||||
<% end %>
|
||||
</li>
|
||||
</aside>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in a new issue